@versa-stack/v-craft 1.0.3 → 1.0.4-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/v-craft.es.js +11 -3
- package/dist/v-craft.es.js.map +1 -1
- package/package.json +1 -1
package/dist/v-craft.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"v-craft.es.js","sources":["../src/components/CraftCanvas.vue","../src/components/composable/useResolveCraftNode.ts","../src/components/composable/useCraftNode.ts","../src/lib/craftNode.ts","../src/store/editor.ts","../src/components/CraftComponentSimpleText.vue","../src/lib/CraftNodeResolver.ts","../src/components/CraftEditor.vue","../src/store/indicator.ts","../src/components/CraftEditorBlueprint.vue","../src/components/utils.ts","../src/components/CraftEditorBlueprintsList.vue","../src/components/CraftEditorPanelBlueprints.vue","../src/components/CraftEditorPanelForm.vue","../src/components/CraftEditorPanelLayers.vue","../src/components/CraftEditorPanelLayout.vue","../src/components/CraftEditorPanelNodeEventsSettings.vue","../src/components/CraftEditorPanelNodeLayer.vue","../src/components/CraftEditorPanelNodeSettings.vue","../src/components/CraftEditorPanelSettings.vue","../src/components/CraftDropIndicator.vue","../src/components/CraftIframe.vue","../src/lib/vNodeToCraftNode.ts","../src/components/composable/useCraftFrame.ts","../src/components/CraftFrame.vue","../src/components/composable/useConnectCraftNodeToStore.ts","../src/components/composable/useCraftNodeEvents.ts","../src/components/composable/useCraftNodeWrapper.ts","../src/lib/dragCraftNode/mouse.ts","../src/lib/dragCraftNode/dragOver.ts","../src/lib/dragCraftNode/drop.ts","../src/lib/dragCraftNode/index.ts","../src/components/composable/useDragCraftNode.ts","../src/components/CraftNodeEditor.vue","../src/components/CraftNodeViewer.vue","../src/components/CraftStaticRenderer.vue","../src/blueprints/default.ts","../node_modules/jsonpath-plus/dist/index-browser-esm.js","../src/lib/setValueByPath.ts","../src/lib/mapData.ts","../src/lib/renderCraftNodes.ts","../src/resolvers/default.ts","../src/index.ts"],"sourcesContent":["<template>\n <component\n v-if=\"componentToRender\"\n :is=\"componentToRender\"\n v-bind=\"attrs\"\n >\n <template v-for=\"(_, name) in slots\" :key=\"name\" #[name]=\"slotProps\">\n <slot :name=\"name\" v-bind=\"slotProps || {}\" />\n </template>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, useAttrs, useSlots } from \"vue\";\nimport type { ComputedRef } from \"vue\";\nimport CraftNodeResolver from \"../lib/CraftNodeResolver\";\n\ndefineOptions({\n name: \"CraftCanvas\",\n});\n\nconst slots = useSlots();\nconst attrs = useAttrs();\n\nconst props = defineProps<{\n componentName: string;\n}>();\n\nconst resolver = inject<ComputedRef<CraftNodeResolver>>(\"resolver\");\nconst resolved = computed(() => resolver?.value.resolve(props.componentName));\nconst componentToRender = computed(() => resolved.value?.componentName || props.componentName);\n</script>\n","import { computed, ComputedRef, inject, Ref } from \"vue\";\nimport { CraftNode } from \"../../lib/craftNode\";\nimport CraftNodeResolver, {\n CraftNodeComponentMap,\n} from \"../../lib/CraftNodeResolver\";\n\nexport const useResolveCraftNode = <T extends object>(\n craftNode: Ref<CraftNode>\n) => {\n const resolver = inject<ComputedRef<CraftNodeResolver<T>>>(\"resolver\")!;\n const resolvedNode = computed(() => {\n if (!resolver || !craftNode?.value) return {} as CraftNodeComponentMap<T>;\n return resolver.value.resolve(\n craftNode.value.componentName\n ) as CraftNodeComponentMap<T>;\n });\n\n const defaultProps = computed(() => resolvedNode.value?.defaultProps || {});\n\n return {\n resolvedNode,\n resolver,\n defaultProps,\n };\n};\n","import { inject, Ref } from \"vue\";\nimport { CraftNode } from \"../../lib/craftNode\";\nimport { useResolveCraftNode } from \"./useResolveCraftNode\";\n\nexport const useCraftNode = <T extends object>() => {\n const craftNode = inject<Ref<CraftNode, CraftNode>>(\"craftNode\")!;\n if (!craftNode) {\n throw new Error(\"craftNode or resolver not provided\");\n }\n\n const { resolver, resolvedNode, defaultProps } =\n useResolveCraftNode(craftNode);\n\n return {\n craftNode,\n resolver,\n resolvedNode,\n defaultProps,\n };\n};\n","import { v4 as uuidv4 } from \"uuid\";\nimport CraftNodeResolver from \"./CraftNodeResolver\";\nimport { useEditor } from \"../store/editor\";\n\nexport type CraftNodeRules = {\n canMoveIn?: <T extends object>(\n craftNode: CraftNode,\n targetNode: CraftNode,\n resolver: CraftNodeResolver<T>\n ) => boolean;\n canMoveOut?: <T extends object>(\n craftNode: CraftNode,\n targetNode: CraftNode,\n resolver: CraftNodeResolver<T>\n ) => boolean;\n canDrag?: <T extends object>(craftNode: CraftNode) => boolean;\n canMoveInto?: <T extends object>(\n craftNode: CraftNode,\n targetNode: CraftNode,\n resolver: CraftNodeResolver<T>\n ) => boolean;\n};\n\nexport type CraftNode = {\n slots: Record<string, CraftNode[]>;\n componentName: string;\n parentUuid?: string | null;\n props: any;\n rules?: CraftNodeRules;\n uuid: string;\n visible?: boolean;\n events?: Record<string, string>;\n};\n\nexport type CraftNodeDatasource = {\n item?: Record<string, any>;\n list?: Record<string, any>[];\n type: \"single\" | \"list\";\n slotName?: string;\n};\n\nexport const isVisible = (craftNode: CraftNode) =>\n craftNode.visible === undefined || craftNode.visible;\n\nexport const craftNodeInCanvas = <T extends object>(craftNode: CraftNode) => {\n let node = craftNode;\n const editor = useEditor();\n\n while (node.parentUuid) {\n node = editor.nodeMap.get(node.parentUuid) as CraftNode;\n if (craftNodeIsCanvas(node)) {\n return true;\n }\n }\n\n return false;\n};\n\nexport const craftNodeIsDraggable = <T extends object>(\n craftNode: CraftNode\n) => {\n if (!craftNodeInCanvas(craftNode)) {\n return false;\n }\n\n if (craftNode.rules?.canDrag) {\n return craftNode.rules.canDrag(craftNode);\n }\n\n return true;\n};\n\nexport const craftNodeIsAncestorOf = <T extends object>(\n craftNode: CraftNode,\n descendant: CraftNode\n) => {\n const editor = useEditor();\n let currentNode = descendant;\n\n while (currentNode?.parentUuid) {\n if (currentNode.parentUuid === craftNode.uuid) {\n return true;\n }\n currentNode = editor.nodeMap.get(currentNode.parentUuid) as CraftNode;\n }\n\n return false;\n};\n\nexport const resolveNodeName = <T extends object>(craftNode: CraftNode) => {\n if (craftNode.componentName === \"CraftCanvas\") {\n return craftNode.props.componentName;\n }\n\n return craftNode.componentName;\n};\n\nexport const craftNodeCanBeChildOf = <T extends object>(\n craftNode: CraftNode,\n targetNode: CraftNode,\n resolver: CraftNodeResolver<T>\n) => {\n if (!craftNodeIsCanvas(targetNode)) {\n return false;\n }\n\n if (craftNode.uuid === targetNode.uuid) {\n return false;\n }\n\n const resolvedTargetNode = resolver.resolve(resolveNodeName(targetNode));\n const resolvedSource = resolver.resolve(resolveNodeName(craftNode));\n\n const targetNodeRules = resolvedTargetNode?.rules || {};\n const sourceNodeRules = resolvedSource?.rules || {};\n\n if (craftNode.parentUuid) {\n const editor = useEditor();\n const parent = editor.nodeMap.get(craftNode.parentUuid) as CraftNode;\n\n const rules = resolver.resolve(resolveNodeName<T>(parent))?.rules || {};\n if (\n rules.canMoveOut &&\n !rules.canMoveOut(craftNode, targetNode, resolver)\n ) {\n return;\n }\n }\n\n if (\n sourceNodeRules.canMoveInto &&\n !sourceNodeRules.canMoveInto(craftNode, targetNode, resolver)\n ) {\n return false;\n }\n\n if (craftNodeIsAncestorOf(craftNode, targetNode)) {\n return false;\n }\n\n if (\n targetNodeRules.canMoveIn &&\n !targetNodeRules.canMoveIn(craftNode, targetNode, resolver)\n ) {\n return false;\n }\n\n return true;\n};\n\nexport const craftNodeIsCanvas = <T extends object>(craftNode: CraftNode) => {\n return craftNode.componentName === \"CraftCanvas\";\n};\n\nexport const craftNodeCanBeSiblingOf = <T extends object>(\n craftNode: CraftNode,\n targetNode: CraftNode,\n resolver: CraftNodeResolver<T>\n) => {\n const editor = useEditor();\n if (targetNode.uuid === craftNode.uuid) {\n return false;\n }\n\n if (!targetNode.parentUuid) {\n return false;\n }\n\n return craftNodeCanBeChildOf(\n craftNode,\n editor.nodeMap.get(targetNode.parentUuid) as CraftNode,\n resolver\n );\n};\n\nexport const buildCraftNodeTree = <T extends object>(\n craftNode: CraftNode\n): CraftNode => {\n if (!craftNode.uuid) {\n craftNode.uuid = uuidv4();\n }\n\n if (!craftNode.slots) {\n return craftNode;\n }\n\n Object.values(craftNode.slots).forEach((slotChildren) => {\n slotChildren.forEach((cn) => {\n if (!cn.uuid) {\n cn.uuid = uuidv4();\n }\n if (cn.parentUuid !== craftNode.uuid) {\n cn.parentUuid = craftNode.uuid;\n }\n\n buildCraftNodeTree(cn);\n\n return cn;\n });\n });\n\n return craftNode;\n};\n","import type { FormKitSchemaFormKit } from \"@formkit/core\";\nimport { defineStore } from \"pinia\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { markRaw } from \"vue\";\nimport {\n CraftNode,\n craftNodeCanBeChildOf,\n craftNodeCanBeSiblingOf,\n CraftNodeDatasource,\n isVisible,\n resolveNodeName,\n} from \"../lib/craftNode\";\nimport CraftNodeResolver from \"../lib/CraftNodeResolver\";\n\nexport type EditorStoreInstanceType = ReturnType<typeof useEditor>;\n\nexport interface EditorState {\n nodeMap: Map<string, CraftNode>;\n rootNodes: string[];\n selectedUuid: string | null;\n draggedNode: CraftNode | null;\n enabled: boolean;\n nodeRefsRecord: Record<string, HTMLElement>;\n resolver: CraftNodeResolver<FormKitSchemaFormKit> | null;\n eventsContext: Record<string, any>;\n nodeDataMap: Record<string, CraftNodeDatasource | null>;\n draggingDisabled: boolean;\n};\n\nexport const useEditor = defineStore(\"editor\", {\n state: (): EditorState => ({\n nodeMap: new Map(),\n rootNodes: [],\n selectedUuid: null,\n draggedNode: null,\n enabled: false,\n nodeRefsRecord: {},\n resolver: null,\n eventsContext: {},\n nodeDataMap: {},\n draggingDisabled: false,\n }),\n\n actions: {\n clear() {\n this.nodeMap.clear();\n this.rootNodes = [];\n this.selectedUuid = null;\n this.draggedNode = null;\n this.nodeRefsRecord = {};\n this.draggingDisabled = false;\n },\n\n enable() {\n this.enabled = true;\n },\n\n disable() {\n this.enabled = false;\n },\n\n disableDragging() {\n this.draggingDisabled = true;\n },\n enableDragging() {\n this.draggingDisabled = false;\n },\n\n setResolver(resolver: CraftNodeResolver<FormKitSchemaFormKit>) {\n this.resolver = resolver;\n },\n\n setNodeRef(craftNode: CraftNode, ref: HTMLElement) {\n this.nodeRefsRecord[craftNode.uuid] = ref;\n },\n\n toggleNodeVisibility(craftNode: CraftNode) {\n const node = this.nodeMap.get(craftNode.uuid);\n if (node) {\n node.visible = !isVisible(node);\n if (node.slots) {\n const setVisibility = (n: CraftNode) => {\n n.visible = node.visible;\n if (n.slots) {\n Object.values(n.slots).forEach((slotChildren) => {\n slotChildren.forEach((child) => setVisibility(child));\n });\n }\n this.nodeMap.set(n.uuid, n);\n return n;\n };\n Object.values(node.slots).forEach((slotChildren) => {\n slotChildren.forEach((child) => setVisibility(child));\n });\n }\n this.nodeMap.set(node.uuid, node);\n }\n },\n\n setNodeData(uuid: string, data: CraftNodeDatasource | null) {\n this.nodeDataMap[uuid] = data;\n },\n\n updateNodeProps(nodeUuid: string, newProps: Record<string, any>) {\n const node = this.nodeMap.get(nodeUuid);\n if (node) {\n Object.assign(node.props, newProps);\n }\n },\n\n updateNodeEvents(nodeUuid: string, newEvents: Record<string, string>) {\n const node = this.nodeMap.get(nodeUuid);\n if (node) {\n if (!node.events) {\n node.events = {};\n }\n Object.assign(node.events as any, newEvents);\n }\n },\n\n setNodes(nodes: CraftNode[]) {\n this.clear();\n this.rootNodes = [];\n\n const addNode = (node: CraftNode) => {\n this.nodeMap.set(node.uuid, { ...node, slots: {} });\n if (!node.parentUuid) {\n this.rootNodes.push(node.uuid);\n }\n if (node.slots) {\n Object.entries(node.slots).forEach(([slotName, slotChildren]) => {\n slotChildren.forEach((child) => {\n child.parentUuid = node.uuid;\n addNode(child);\n if (!this.nodeMap.get(node.uuid)!.slots[slotName]) {\n this.nodeMap.get(node.uuid)!.slots[slotName] = [];\n }\n this.nodeMap.get(node.uuid)!.slots[slotName].push(child);\n });\n });\n }\n };\n\n nodes.forEach(addNode);\n },\n\n addNodeRecursively(node: CraftNode, parentUuid: string | null = null) {\n const uuid = node.uuid || uuidv4();\n const newNode = { ...node, uuid, parentUuid };\n this.nodeMap.set(uuid, markRaw(newNode));\n\n if (!parentUuid) {\n this.rootNodes.push(uuid);\n }\n\n if (node.slots) {\n Object.values(node.slots).forEach((slotChildren) => {\n slotChildren.forEach((child) => this.addNodeRecursively(child, uuid));\n });\n }\n },\n\n selectNode(craftNode: CraftNode | null) {\n this.selectedUuid = craftNode?.uuid ?? null;\n },\n\n dragNode(craftNode: CraftNode | null) {\n this.draggedNode = craftNode;\n },\n\n removeNode(craftNode: CraftNode) {\n this.emancipateNode(craftNode);\n if (craftNode.uuid === this.selectedUuid) {\n this.selectedUuid = null;\n }\n\n const removeDescendants = (node: CraftNode) => {\n if (node.slots) {\n Object.values(node.slots).forEach((slotChildren) => {\n slotChildren.forEach((child) => {\n this.nodeMap.delete(child.uuid);\n delete this.nodeRefsRecord[child.uuid];\n removeDescendants(child);\n });\n });\n }\n };\n\n removeDescendants(craftNode);\n this.nodeMap.delete(craftNode.uuid);\n delete this.nodeRefsRecord[craftNode.uuid];\n\n if (!craftNode.parentUuid) {\n this.rootNodes = this.rootNodes.filter(\n (uuid) => uuid !== craftNode.uuid\n );\n }\n },\n\n emancipateNode(craftNode: CraftNode) {\n const parentUuid = craftNode.parentUuid;\n if (!parentUuid) return craftNode;\n\n const parent = this.nodeMap.get(parentUuid);\n if (parent && parent.slots) {\n Object.entries(parent.slots).forEach(([slotName, slotChildren]) => {\n parent.slots[slotName] = slotChildren.filter(\n (child) => child.uuid !== craftNode.uuid\n );\n });\n }\n\n craftNode.parentUuid = null;\n if (this.nodeMap.get(craftNode.uuid) === craftNode) {\n this.nodeMap.delete(craftNode.uuid);\n }\n return craftNode;\n },\n\n addNodeAndChildrenToMap(node: CraftNode) {\n this.nodeMap.set(node.uuid, node);\n if (node.slots) {\n Object.values(node.slots).forEach((slotChildren) => {\n slotChildren.forEach((child) => this.addNodeAndChildrenToMap(child));\n });\n }\n },\n\n appendNodeTo(node: CraftNode, targetNode: CraftNode, slotName: string = 'default') {\n if (!this.resolver) throw new Error(\"Resolver is not set.\");\n\n if (!craftNodeCanBeChildOf(node, targetNode, this.resolver)) {\n throw new Error(\n `${resolveNodeName(\n node\n )} is not allowed to be a child of ${resolveNodeName(targetNode)}.`\n );\n }\n\n node = this.emancipateNode(node);\n node.parentUuid = targetNode.uuid;\n\n const targetParent = this.nodeMap.get(targetNode.uuid);\n\n if (targetParent) {\n if (!targetParent.slots) {\n targetParent.slots = {};\n }\n if (!targetParent.slots[slotName]) {\n targetParent.slots[slotName] = [];\n }\n targetParent.slots[slotName].push(node);\n this.nodeMap.set(targetParent.uuid, targetParent);\n }\n\n this.addNodeAndChildrenToMap(node);\n },\n\n prependNodeTo(node: CraftNode, targetNode: CraftNode, slotName: string = 'default') {\n if (!this.resolver) throw new Error(\"Resolver is not set\");\n\n if (!craftNodeCanBeChildOf(node, targetNode, this.resolver)) {\n throw new Error(\n `${resolveNodeName(\n node\n )} is not allowed to be a child of ${resolveNodeName(targetNode)}.`\n );\n }\n\n node = this.emancipateNode(node);\n node.parentUuid = targetNode.uuid;\n\n const targetParent = this.nodeMap.get(targetNode.uuid);\n\n if (targetParent) {\n if (!targetParent.slots) {\n targetParent.slots = {};\n }\n if (!targetParent.slots[slotName]) {\n targetParent.slots[slotName] = [];\n }\n targetParent.slots[slotName].unshift(node);\n this.nodeMap.set(targetParent.uuid, targetParent);\n }\n\n this.addNodeAndChildrenToMap(node);\n },\n\n insertNodeBefore(node: CraftNode, targetNode: CraftNode, slotName?: string) {\n if (!this.resolver) throw new Error(\"Resolver is not set\");\n\n if (!craftNodeCanBeSiblingOf(node, targetNode, this.resolver)) {\n throw new Error(\"Can not be the sibling of the target node.\");\n }\n\n node = this.emancipateNode(node);\n\n const parentUuid = targetNode.parentUuid;\n\n if (!parentUuid) throw new Error(\"Target node has no parent.\");\n\n const parent = this.nodeMap.get(parentUuid);\n\n if (parent && parent.slots) {\n const targetSlotName = slotName || Object.keys(parent.slots).find((key) =>\n parent.slots[key].some((n) => n.uuid === targetNode.uuid)\n );\n\n if (targetSlotName && parent.slots[targetSlotName]) {\n const index = parent.slots[targetSlotName].findIndex(\n (n) => n.uuid === targetNode.uuid\n );\n\n if (index !== -1) {\n parent.slots[targetSlotName].splice(index, 0, node);\n node.parentUuid = parentUuid;\n this.nodeMap.set(parent.uuid, parent);\n this.addNodeAndChildrenToMap(node);\n }\n }\n }\n },\n\n insertNodeAfter(node: CraftNode, targetNode: CraftNode, slotName?: string) {\n if (!this.resolver) throw new Error(\"Resolver is not set\");\n\n if (!craftNodeCanBeSiblingOf(node, targetNode, this.resolver)) {\n throw new Error(\"Can not be the sibling of the target node.\");\n }\n\n node = this.emancipateNode(node);\n\n const parentUuid = targetNode.parentUuid;\n\n if (!parentUuid) throw new Error(\"Target node has no parent.\");\n\n const parent = this.nodeMap.get(parentUuid);\n\n if (parent && parent.slots) {\n const targetSlotName = slotName || Object.keys(parent.slots).find((key) =>\n parent.slots[key].some((n) => n.uuid === targetNode.uuid)\n );\n\n if (targetSlotName && parent.slots[targetSlotName]) {\n const index = parent.slots[targetSlotName].findIndex(\n (n) => n.uuid === targetNode.uuid\n );\n\n if (index !== -1) {\n parent.slots[targetSlotName].splice(index + 1, 0, node);\n node.parentUuid = parentUuid;\n this.nodeMap.set(parent.uuid, parent);\n this.addNodeAndChildrenToMap(node);\n }\n }\n }\n },\n\n setEventsContext(context: Record<string, any>) {\n this.eventsContext = context;\n },\n },\n\n getters: {\n hasNodes: (state) => state.nodeMap.size > 0,\n selectedNode: (state): CraftNode | null => {\n return state.selectedUuid\n ? state.nodeMap.get(state.selectedUuid) || null\n : null;\n },\n selectedRef: (state) =>\n state.selectedUuid ? state.nodeRefsRecord[state.selectedUuid] : null,\n getRef: (state) => (uuid: string) => state.nodeRefsRecord[uuid],\n allNodes: (state): CraftNode[] => {\n return Array.from(state.nodeMap.values());\n },\n getDraggedNode: (state) => state.draggedNode,\n nodeTree: (state): CraftNode[] => {\n const buildTree = (nodeUuid: string): CraftNode => {\n const node = state.nodeMap.get(nodeUuid);\n if (!node) {\n throw new Error(`Node with UUID ${nodeUuid} not found`);\n }\n\n const slots: Record<string, CraftNode[]> = {};\n if (node.slots) {\n Object.entries(node.slots).forEach(([slotName, slotChildren]) => {\n slots[slotName] = slotChildren.map((child) => buildTree(child.uuid));\n });\n }\n\n return {\n ...node,\n slots,\n };\n };\n\n return state.rootNodes.map((rootUuid) => buildTree(rootUuid));\n },\n },\n });\n","<template>\n <component\n :is=\"componentName\"\n :class=\"{ 'pre-wrap': !isEditing, 'editable-text': enabled, 'is-editable': enabled, 'is-editing': isEditing }\"\n @dblclick=\"handleDoubleClick\"\n >\n {{ isEditing ? \"\" : content }}\n <textarea\n v-if=\"isEditing\"\n ref=\"textareaRef\"\n class=\"editable-text__textarea\"\n :value=\"content\"\n @input=\"adjustTextareaHeight\"\n @blur=\"finishEditing\"\n @keyup.enter.exact=\"finishEditing\"\n @keyup.esc=\"cancelEditing\"\n ></textarea>\n </component>\n</template>\n\n<script lang=\"ts\" setup>\nimport { ref, computed, watch, nextTick } from \"vue\";\nimport { useCraftNode } from \"./composable/useCraftNode\";\nimport { useEditor } from \"../store/editor\";\nimport { storeToRefs } from \"pinia\";\n\ninterface Props {\n content?: string;\n placeholder?: string;\n componentName?: string;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n content: \"Lorem ipsum dolor sit amet...\",\n isEditable: true,\n placeholder: \"\",\n componentName: \"div\",\n});\n\nconst emit = defineEmits<{\n (e: \"update:content\", value: string): void;\n}>();\n\nconst isEditing = ref(false);\nconst textareaRef = ref<HTMLTextAreaElement | null>(null);\nconst originalValue = ref(\"\");\nconst editor = useEditor();\nconst { enabled } = storeToRefs(editor);\nconst { craftNode } = useCraftNode();\n\nconst canEdit = computed(() => enabled.value && !isEditing.value);\n\nconst handleDoubleClick = () => {\n if (canEdit.value) {\n startEditing();\n }\n};\n\nconst startEditing = () => {\n originalValue.value = props.content;\n isEditing.value = true;\n editor.disableDragging();\n nextTick(() => {\n if (textareaRef.value) {\n textareaRef.value.focus();\n adjustTextareaHeight();\n }\n });\n};\n\nconst adjustTextareaHeight = () => {\n if (textareaRef.value) {\n textareaRef.value.style.height = \"auto\";\n textareaRef.value.style.height = `${textareaRef.value.scrollHeight}px`;\n }\n};\n\nconst finishEditing = async () => {\n editor.enableDragging();\n if (isEditing.value) {\n isEditing.value = false;\n const newValue = textareaRef.value?.value.trim() || \"\";\n if (newValue !== props.content) {\n if (!craftNode.value?.uuid) {\n return;\n }\n\n editor.nodeMap.set(craftNode.value.uuid, {\n ...craftNode.value,\n props: {\n ...craftNode.value.props,\n content: newValue,\n },\n });\n\n await nextTick();\n emit(\"update:content\", newValue);\n }\n }\n};\n\nconst cancelEditing = () => {\n isEditing.value = false;\n emit(\"update:content\", originalValue.value);\n};\n\nwatch(enabled, (newValue) => {\n if (!newValue && isEditing.value) {\n cancelEditing();\n }\n});\n</script>\n\n<style lang=\"scss\">\n.pre-wrap {\n white-space: pre-wrap;\n}\n\n.editable-text.is-editable:hover {\n background-color: rgba(0, 0, 0, 0.05);\n cursor: pointer;\n}\n\n.editable-text.is-editing {\n display: inline-block;\n width: 100%;\n}\n\n.editable-text__textarea {\n font: inherit;\n border: none;\n background: none;\n outline: none;\n width: 100%;\n resize: none;\n overflow: hidden;\n min-height: 1em;\n line-height: inherit;\n padding: 0.12em;\n margin: 0;\n}\n\n.editable-text__textarea:focus {\n border: none;\n}\n</style>\n","import type { FormKitSchemaFormKit } from \"@formkit/core\";\nimport { markRaw } from \"vue\";\nimport { CraftNode, craftNodeIsCanvas, CraftNodeRules } from \"./craftNode\";\n\nexport type CraftNodeComponentMap<T extends object> = {\n componentName: string;\n propsSchema?: T;\n eventsSchema?: T;\n defaultProps?: Record<string, any>;\n rules?: CraftNodeRules;\n slots?: string[];\n};\n\nexport type CraftNodeResolverMap<T extends object> = Record<\n string,\n CraftNodeComponentMap<T>\n>;\n\nexport class CraftNodeResolver<T extends object = FormKitSchemaFormKit[]> {\n resolverMap: CraftNodeResolverMap<T> = {};\n\n constructor(resolverMap: Record<string, CraftNodeComponentMap<T>> = {}) {\n this.setResolverMap(resolverMap);\n return markRaw(this) as this;\n }\n\n setResolverMap(resolverMap: Record<string, CraftNodeComponentMap<T>>) {\n this.resolverMap = {};\n Object.entries(resolverMap).forEach(([_, value]) => {\n this.resolverMap[value.componentName] = value;\n });\n }\n\n resolve(name: string): CraftNodeComponentMap<T> {\n return this.resolverMap[name];\n }\n\n getDefaultProps(craftNode: CraftNode): Record<string, any> {\n return this.resolveNode(craftNode)?.defaultProps || {};\n }\n\n resolveNode(craftNode: CraftNode): CraftNodeComponentMap<T> {\n const result = craftNodeIsCanvas(craftNode)\n ? this.resolve(craftNode.props.componentName)\n : this.resolve(craftNode.componentName);\n return result;\n }\n\n getSchema(craftNode: CraftNode): Record<string, any> {\n return this.resolveNode(craftNode)?.propsSchema || {};\n }\n\n getEventsSchema(craftNode: CraftNode): Record<string, any> {\n return this.resolveNode(craftNode)?.eventsSchema || {};\n }\n\n getRules(craftNode: CraftNode): CraftNodeRules {\n return this.resolveNode(craftNode)?.rules || {};\n }\n}\n\nexport default CraftNodeResolver;\n","<template>\n <CraftEditorPanelLayout :blueprints=\"config.blueprintsLibrary\">\n <template\n v-if=\"$slots['panel-layout']\"\n #panel-layout=\"{ blueprints, deselectNodes }\"\n >\n <slot\n name=\"panel-layout\"\n :blueprints=\"blueprints\"\n :deselectNodes=\"deselectNodes\"\n />\n </template>\n <template v-else #default>\n <CraftFrame\n :useIframe=\"useIframe\"\n :inheritStyles=\"inheritStyles\"\n :iFrameStyleSheets=\"iFrameStyleSheets\"\n :iFrameClass=\"iFrameClass\"\n :resolverMap=\"config.resolverMap\"\n @iframe-load=\"(iframe) => emit('iframeLoad', iframe)\"\n >\n <slot />\n </CraftFrame>\n </template>\n </CraftEditorPanelLayout>\n</template>\n\n<script lang=\"ts\" setup generic=\"T extends object\">\nimport { storeToRefs } from \"pinia\";\nimport { HTMLAttributes, provide, ref, watch } from \"vue\";\nimport { type CraftNode } from \"../lib/craftNode\";\nimport CraftNodeResolver from \"../lib/CraftNodeResolver\";\nimport { CraftEditorConfig } from \"../lib/model\";\nimport { useEditor } from \"../store/editor\";\n\nconst props = withDefaults(\n defineProps<{\n config: CraftEditorConfig<T>;\n useIframe?: boolean;\n iFrameStyleSheets?: string[];\n iFrameClass?: HTMLAttributes[\"class\"];\n inheritStyles?: boolean;\n }>(),\n {\n useIframe: false,\n inheritStyles: false,\n iFrameClass: \"\",\n iFrameStyleSheets: () => [],\n },\n);\n\nconst emit = defineEmits<{\n (e: \"nodeDragStart\", n: CraftNode): void;\n (e: \"nodeDragEnd\"): void;\n (e: \"iframeLoad\", iframe: HTMLIFrameElement): void;\n}>();\n\nconst editor = useEditor();\n\nconst { getDraggedNode } = storeToRefs(editor);\n\nwatch(getDraggedNode, (node) => {\n if (node) {\n emit(\"nodeDragStart\", node);\n return;\n }\n emit(\"nodeDragEnd\");\n});\n\nconst resolver = ref(new CraftNodeResolver(props.config.resolverMap));\nprovide(\"resolver\", resolver);\n</script>\n","import { defineStore } from \"pinia\";\n\nexport type IndicatorState = {\n barSize: number;\n visible: boolean;\n coordinates: {\n top: number;\n left: number;\n };\n dimensions: {\n width: number;\n height: number;\n };\n forbidden: boolean;\n}\n\nexport type IndicatorStoreType = ReturnType<typeof useIndicator>;\n\nexport const useIndicator = defineStore(\"indicator\", {\n state: () =>\n ({\n barSize: 2,\n visible: false,\n coordinates: {\n top: 0,\n left: 0,\n },\n dimensions: {\n width: 0,\n height: 0,\n },\n forbidden: false,\n } as IndicatorState),\n actions: {\n hide() {\n this.visible = false;\n this.forbidden = false;\n },\n show() {\n this.visible = true;\n },\n setIsForbidden(isForbidden) {\n this.forbidden = isForbidden;\n },\n pointBefore(element: HTMLElement) {\n this.show();\n\n const { top, left, height } = element.getBoundingClientRect();\n\n this.coordinates.top = top;\n this.coordinates.left = left;\n\n this.dimensions.width = this.barSize;\n this.dimensions.height = height;\n },\n pointAfter(element: HTMLElement) {\n this.show();\n\n const { top, left, width, height } = element.getBoundingClientRect();\n\n this.coordinates.top = top;\n this.coordinates.left = left + width;\n\n this.dimensions.width = this.barSize;\n this.dimensions.height = height;\n },\n pointInside(element: HTMLElement) {\n this.show();\n\n const padding = getPadding(element);\n const { top, left, width, height } = element.getBoundingClientRect();\n\n const paddingLeft = Number.parseInt(padding.paddingLeft);\n const paddingBottom = Number.parseInt(padding.paddingTop);\n const paddingRight = Number.parseInt(padding.paddingRight);\n\n this.coordinates.top = top + height - paddingBottom;\n this.coordinates.left = left + paddingLeft;\n\n this.dimensions.width = width - paddingLeft - paddingRight;\n this.dimensions.height = this.barSize;\n },\n\n pointInsideTop(element: HTMLElement) {\n this.show();\n\n const padding = getPadding(element);\n const { top, left, width } = element.getBoundingClientRect();\n const paddingLeft = Number.parseInt(padding.paddingLeft);\n const paddingTop = Number.parseInt(padding.paddingTop);\n const paddingRight = Number.parseInt(padding.paddingRight);\n\n this.coordinates.top = top + paddingTop;\n this.coordinates.left = left + paddingLeft;\n\n this.dimensions.width = width - paddingLeft - paddingRight;\n this.dimensions.height = this.barSize;\n },\n },\n getters: {\n isShown: (state): boolean => state.visible,\n isForbidden: (state): boolean => state.forbidden,\n position: (state): { top: number; left: number } => state.coordinates,\n size: (state): { width: number; height: number } => state.dimensions,\n },\n});\n\nfunction getPadding(e: HTMLElement) {\n const { paddingTop, paddingLeft, paddingRight, paddingBottom } =\n getComputedStyle(e);\n const padding = {\n paddingTop,\n paddingLeft,\n paddingRight,\n paddingBottom,\n };\n\n Object.keys(padding).forEach((key) => {\n padding[key] = parseInt(padding[key].slice(0, -2), 10);\n });\n\n return padding;\n}\n","<template>\n <div\n :draggable=\"true\"\n @dragstart.stop=\"handleDragStart\"\n @dragend=\"handleDragEnd\"\n >\n <slot></slot>\n </div>\n</template>\n<script lang=\"ts\" setup generic=\"T extends object\">\nimport { CraftNode } from \"../lib/craftNode\";\nimport { useEditor } from \"../store/editor\";\nimport { useIndicator } from \"../store/indicator\";\n\nconst editor = useEditor();\nconst indicator = useIndicator();\n\ndefineOptions({\n name: \"CraftEditorBlueprint\",\n});\n\nconst props = defineProps<{\n craftNode: CraftNode;\n}>();\n\nconst handleDragStart = (e: MouseEvent) => {\n console.log('CraftEditorBlueprint - dragging node:', props.craftNode);\n console.log('CraftEditorBlueprint - node.componentName:', props.craftNode.componentName);\n console.log('CraftEditorBlueprint - node.props:', props.craftNode.props);\n editor.dragNode(props.craftNode);\n};\n\nconst handleDragEnd = (e: MouseEvent) => {\n e.stopPropagation();\n\n editor.dragNode(null);\n indicator.hide();\n};\n</script>\n","import { CraftNode } from \"../lib/craftNode\";\nimport CraftNodeResolver from \"../lib/CraftNodeResolver\";\nimport { BlueprintGroup } from \"../lib/model\";\nimport { v4 as uuidv4 } from \"uuid\";\n\nexport const blueprintsWithDefaults = <T extends object>(\n group: BlueprintGroup,\n resolver: CraftNodeResolver<T>\n) => {\n return Object.keys(group.blueprints).map((key) => {\n const blueprint = group.blueprints[key];\n const defaultProps = resolver.getDefaultProps({\n ...blueprint,\n uuid: uuidv4(),\n } as CraftNode);\n const result = {\n ...blueprint,\n props: { ...defaultProps, ...blueprint.props },\n };\n return result;\n });\n};\n","<template>\n <div v-if=\"resolver\">\n <div v-for=\"group in blueprints.groups\">\n <slot name=\"blueprint-group\" :group=\"group\" :resolver=\"resolver\">\n <h4>{{ group.label }}</h4>\n <div class=\"flex flex-wrap gap-2 p-1\">\n <CraftEditorBlueprint\n v-for=\"(craftNode, key) in blueprintsWithDefaults(group, resolver)\"\n :craftNode=\"craftNode\"\n :key=\"key\"\n >\n <div class=\"v-craft-blueprint\">\n <div class=\"v-craft-blueprint-label\">\n {{ craftNode.label }}\n </div>\n </div>\n </CraftEditorBlueprint>\n </div>\n </slot>\n </div>\n </div>\n</template>\n<script lang=\"ts\" setup generic=\"T extends object\">\nimport { ComputedRef, inject } from \"vue\";\nimport CraftNodeResolver from \"../lib/CraftNodeResolver\";\nimport { BlueprintsLibrary } from \"../lib/model\";\nimport { blueprintsWithDefaults } from \"./utils\";\n\ndefineProps<{\n blueprints: BlueprintsLibrary;\n}>();\n\nconst resolver = inject<ComputedRef<CraftNodeResolver<T>>>(\"resolver\");\n</script>\n","<template>\n <div class=\"v-craft-panel v-craft-blueprints-panel\">\n <h3 class=\"v-craft-title\">blueprints</h3>\n <div class=\"v-craft-panel-content\">\n <CraftEditorBlueprintsList :blueprints=\"blueprints\" />\n </div>\n </div>\n</template>\n<script lang=\"ts\" setup>\nimport { BlueprintsLibrary } from \"../lib/model\";\n\ndefineProps<{\n blueprints: BlueprintsLibrary;\n}>();\n\ndefineEmits<{\n (event: \"close\", ...args: any[]): void;\n}>();\n\ndefineOptions({\n name: \"CraftEditorPanelBlueprints\",\n});\n</script>\n<style lang=\"scss\" scoped>\n.v-craft-blueprints-panel {\n min-width: 15em;\n max-width: 15em;\n width: 15em;\n\n :deep(.v-craft-blueprint) {\n text-align: center;\n padding: 0.25em;\n position: relative;\n border: 1px solid var(--v-craft-gray-medium);\n border-radius: 3px;\n display: flex;\n align-items: center;\n cursor: pointer;\n background-color: var(--v-craft-background-color-lighter-10);\n }\n\n :deep(.v-craft-blueprint-label) {\n font-size: 0.8em;\n text-transform: uppercase;\n font-weight: bold;\n color: var(--v-craft-gray-darker);\n }\n\n h4 {\n font-size: 0.8em;\n text-transform: uppercase;\n font-weight: bold;\n color: var(--v-craft-gray-medium);\n margin-bottom: 0.75em;\n margin-top: 2em;\n }\n}\n</style>\n","<template>\n <slot\n name=\"panel-content\"\n :craft-node=\"craftNode\"\n :model=\"computedModel\"\n :handle-form-input=\"handleFormInput\"\n :schema=\"schema\"\n />\n</template>\n\n<script lang=\"ts\" setup generic=\"T extends object, V, N\">\nimport { computed, watch, toRef, onUnmounted } from \"vue\";\nimport { debounce } from \"lodash-es\";\nimport type { CraftNode } from \"../lib/craftNode\";\n\nexport interface Props<T extends object, V, N> {\n craftNode?: CraftNode;\n model?: V;\n schema?: T;\n}\n\nconst props = withDefaults(defineProps<Props<T, V, N>>(), {\n schema: () => ({} as T),\n});\n\nconst emit = defineEmits<{\n (e: \"update\", value: V): void;\n}>();\n\nconst modelRef = toRef(props, \"model\");\nconst schema = toRef(props, \"schema\");\nconst craftNode = toRef(props, \"craftNode\");\n\nconst computedModel = computed(() =>\n modelRef.value ? { ...modelRef.value } : ({} as V)\n);\n\nconst debouncedEmit = debounce((value: V) => {\n emit(\"update\", value);\n}, 50);\n\nconst handleFormInput = (value: V) => {\n if (value !== undefined && value !== null) {\n debouncedEmit(value);\n }\n};\n\nonUnmounted(() => debouncedEmit.cancel());\n</script>\n","<template>\n <div class=\"v-craft-panel v-craft-layers-panel\">\n <h3 class=\"v-craft-title\">tree</h3>\n <div class=\"v-craft-layers\">\n <ul class=\"v-craft-node-layers\">\n <CraftEditorPanelNodeLayer\n v-for=\"(craftNode, key) in nodeTree\"\n :key=\"key\"\n :craftNode=\"craftNode\"\n @layer-click=\"layerClick\"\n />\n </ul>\n </div>\n </div>\n</template>\n<script lang=\"ts\" setup generic=\"T extends object\">\nimport { storeToRefs } from \"pinia\";\nimport { useEditor } from \"../store/editor\";\nimport { CraftNode } from \"../lib/craftNode\";\n\ndefineOptions({\n name: \"CraftEditorPanelLayers\",\n});\n\nconst editor = useEditor();\nconst { nodeTree } = storeToRefs(editor);\n\nconst layerClick = (craftNode: CraftNode) => {\n editor.selectNode(craftNode);\n};\n</script>\n\n<style lang=\"scss\" scoped>\n@use \"../assets/mixins\" as *;\n\n.v-craft-panel.v-craft-layers-panel {\n padding: 10px;\n display: flex;\n flex-direction: column;\n height: auto;\n position: relative;\n width: 23rem;\n}\n\n.v-craft-layers {\n @include v-craft-scrollable;\n max-height: 300px;\n overflow-y: auto;\n margin-top: 10px;\n}\n\nul.v-craft-node-layers {\n margin: 0;\n padding: 0;\n list-style-type: none;\n}\n</style>\n","<template>\n <div v-if=\"$slots['panel-layout']\">\n <slot\n name=\"panel-layout\"\n :blueprints=\"blueprints\"\n :deselectNodes=\"deselectNodes\"\n />\n </div>\n <div v-else class=\"v-craft-panel-manager\">\n <div class=\"flex w-full justify-between gap-10\">\n <div class=\"v-craft-grid-panel v-craft-panel-left shrink\">\n <CraftEditorPanelBlueprints :blueprints=\"blueprints\" />\n </div>\n <div class=\"v-craft-panel-center flex grow\" @click.stop=\"deselectNodes\">\n <slot></slot>\n </div>\n <div class=\"v-craft-grid-panel v-craft-panel-right shrink\">\n <CraftEditorPanelLayers />\n <CraftEditorPanelSettings />\n </div>\n </div>\n </div>\n</template>\n<script lang=\"ts\" setup generic=\"T extends object\">\nimport { BlueprintsLibrary } from \"../lib/model\";\nimport { useEditor } from \"../store/editor\";\n\ndefineProps<{\n blueprints: BlueprintsLibrary;\n}>();\n\nconst editor = useEditor();\nconst deselectNodes = () => {\n editor.selectNode(null);\n};\n</script>\n<style lang=\"scss\" scoped>\n.v-craft-panel-manager {\n .v-craft-panel {\n padding: 0.75em;\n margin-bottom: 1.25em;\n box-shadow: 0 2px 2px rgba(0, 0, 0, 0.034), 0 4px 4px rgba(0, 0, 0, 0.048),\n 0 6px 6px rgba(0, 0, 0, 0.06), 0 8px 8px rgba(0, 0, 0, 0.072),\n 0 10px 10px rgba(0, 0, 0, 0.086), 0 15px 15px rgba(0, 0, 0, 0.12);\n border-radius: 3px;\n }\n\n :deep(.v-craft-panel .v-craft-title) {\n margin: 0px;\n padding: 0.125em;\n border-bottom: 1px solid var(--v-craft-gray-medium);\n }\n}\n</style>\n","<template>\n <CraftEditorPanelForm\n :craftNode=\"craftNode\"\n :schema=\"schema\"\n :model=\"craftNode?.events\"\n @update=\"(v) => emit('update:events', v)\"\n >\n <template #panel-content=\"{ craftNode, model, handleFormInput, schema }\">\n <fieldset\n class=\"v-craft-panel-settings formkit-fieldset v-craft-scrollable-content\"\n v-if=\"schema\"\n >\n <legend class=\"formkit-legend\">Events</legend>\n <FormKit\n :key=\"craftNode?.uuid\"\n type=\"form\"\n :value=\"model\"\n @input=\"handleFormInput\"\n :actions=\"false\"\n >\n <FormKitSchema :schema=\"(schema as FormKitSchemaFormKit)\" />\n </FormKit>\n </fieldset>\n </template>\n </CraftEditorPanelForm>\n</template>\n\n<script lang=\"ts\" setup generic=\"T extends object = FormKitSchemaFormKit\">\nimport { FormKitSchemaFormKit } from \"@formkit/core\";\nimport { FormKit, FormKitSchema } from \"@formkit/vue\";\nimport { toRefs } from \"vue\";\nimport { CraftNode } from \"../lib/craftNode\";\n\nexport interface Props<T extends object> {\n craftNode: CraftNode;\n schema?: T;\n}\n\nconst props = withDefaults(defineProps<Props<T>>(), {\n schema: () => ({} as T),\n});\n\nconst { craftNode, schema } = toRefs(props);\n\nconst emit = defineEmits<{\n (e: \"update:events\", value: Record<string, any>): void;\n}>();\n</script>\n","<template>\n <li\n class=\"v-craft-node-layer\"\n :class=\"{\n 'v-craft-node-layer-selected': isSelected,\n }\"\n @click.prevent.stop=\"emit('layer-click', craftNode)\"\n >\n <div class=\"v-craft-component-layer-face\">\n <div class=\"v-craft-component-name\">{{ componentName }}</div>\n <button\n type=\"button\"\n class=\"v-craft-component-icon\"\n @click.prevent.stop=\"iconClick\"\n >\n {{ isVisible ? \"hide\" : \"show\" }}\n </button>\n </div>\n <ul\n class=\"v-craft-node-layers nested-layers\"\n v-if=\"craftNode.slots && Object.keys(craftNode.slots).length > 0\"\n >\n <template v-for=\"(slotChildren, slotName) in craftNode.slots\" :key=\"slotName\">\n <CraftEditorPanelNodeLayer\n v-for=\"(n, index) in slotChildren\"\n :key=\"`${slotName}-${index}`\"\n :craftNode=\"n\"\n @layer-click=\"(node) => emit('layer-click', node)\"\n :visible=\"isVisible\"\n />\n </template>\n </ul>\n </li>\n</template>\n<script lang=\"ts\" setup generic=\"T extends object\">\nimport { storeToRefs } from \"pinia\";\nimport { computed, toRefs } from \"vue\";\nimport { CraftNode, resolveNodeName } from \"../lib/craftNode\";\nimport { useEditor } from \"../store/editor\";\n\nconst props = withDefaults(\n defineProps<{\n craftNode: CraftNode;\n visible?: boolean;\n }>(),\n {\n visible: true,\n }\n);\n\nconst { craftNode, visible } = toRefs(props);\n\nconst isVisible = computed(\n () =>\n (visible.value && craftNode.value.visible === undefined) ||\n craftNode.value.visible\n);\n\nconst emit = defineEmits([\"layer-click\"]);\nconst editor = useEditor();\nconst { selectedNode } = storeToRefs(editor);\n\nconst componentName = computed(() => resolveNodeName(craftNode.value));\nconst isSelected = computed(\n () => selectedNode?.value?.uuid === craftNode.value.uuid\n);\n\nconst iconClick = () => {\n editor.toggleNodeVisibility(craftNode.value);\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.v-craft-node-layer {\n padding: 5px 0;\n border-bottom: 1px solid var(--v-craft-gray-dark);\n list-style-type: none;\n\n &.v-craft-node-layer-selected {\n & > .v-craft-component-layer-face {\n background-color: var(--v-craft-blue-lighter-5);\n\n &:hover {\n background-color: var(--v-craft-blue-lighter-15);\n }\n }\n }\n\n :deep(.v-craft-component-layer-face) {\n display: flex;\n align-items: center;\n padding: 2px 5px;\n background-color: var(--v-craft-gray-medium);\n border-radius: 3px;\n transition: background-color 0.2s ease;\n position: relative;\n\n &::before {\n position: absolute;\n background-color: var(--v-craft-gray-medium);\n width: 0.5em;\n height: 1px;\n top: 50%;\n left: -0.5em;\n content: \" \";\n }\n\n &:hover {\n background-color: var(--v-craft-gray-medium-lighter-15);\n }\n }\n\n :deep(.v-craft-component-name) {\n flex-grow: 1;\n font-size: 12px;\n cursor: pointer;\n }\n\n :deep(.v-craft-component-icon) {\n font-size: 12px;\n cursor: pointer;\n margin-left: 5px;\n transition: color 0.2s ease;\n &:hover {\n color: var(--v-craft-blue);\n }\n border: none;\n padding: 0.12em;\n }\n\n :deep(.nested-layers) {\n margin-left: 15px;\n border-left: 1px solid var(--v-craft-gray-medium);\n padding-left: 5px;\n }\n}\n</style>\n","<template>\n <CraftEditorPanelForm\n :craftNode=\"craftNode\"\n :schema=\"schema\"\n :model=\"craftNode?.props\"\n @update=\"(v) => emit('update:props', v)\"\n >\n <template #panel-content=\"{ craftNode, model, handleFormInput, schema }\">\n <fieldset\n class=\"v-craft-panel-settings formkit-fieldset v-craft-scrollable-content\"\n v-if=\"schema\"\n >\n <legend class=\"formkit-legend\">Properties</legend>\n <FormKit\n :key=\"craftNode?.uuid\"\n type=\"form\"\n :value=\"model\"\n @input=\"handleFormInput\"\n :actions=\"false\"\n >\n <FormKitSchema :schema=\"(schema as FormKitSchemaFormKit)\" />\n </FormKit>\n </fieldset>\n </template>\n </CraftEditorPanelForm>\n</template>\n\n<script lang=\"ts\" setup generic=\"T extends object = FormKitSchemaFormKit\">\nimport { FormKitSchemaFormKit } from \"@formkit/core\";\nimport { FormKit, FormKitSchema } from \"@formkit/vue\";\nimport { toRefs } from \"vue\";\nimport { CraftNode } from \"../lib/craftNode\";\n\nexport interface Props<T extends object> {\n craftNode?: CraftNode;\n schema?: T;\n}\n\nconst props = withDefaults(defineProps<Props<T>>(), {\n schema: () => ({} as T),\n});\n\nconst { craftNode, schema } = toRefs(props);\n\nconst emit = defineEmits<{\n (e: \"update:props\", value: Record<string, any>): void;\n}>();\n</script>\n","<template>\n <slot\n name=\"panel-content\"\n :selectedNode=\"selectedNode\"\n :nodeName=\"nodeName\"\n :handlePropsUpdate=\"handlePropsUpdate\"\n :schema=\"schema\"\n :eventsSchema=\"eventsSchema\"\n :handleEventsUpdate=\"handleEventsUpdate\"\n :deleteable=\"deleteable\"\n :removeNode=\"removeNode\"\n >\n <div\n ref=\"panel\"\n class=\"v-craft-panel v-craft-settings-panel\"\n @click.prevent.stop=\"() => false\"\n >\n <h3 class=\"v-craft-title\">component inspector</h3>\n <span class=\"text-sm\">{{ selectedNode?.uuid }}</span>\n <div v-if=\"!selectedNode\">\n <p>select a component to inspect</p>\n </div>\n <div\n class=\"v-craft-properties\"\n :class=\"{ 'v-craft-visible': selectedNode }\"\n >\n <h4>{{ nodeName }}</h4>\n <div v-if=\"schema\" class=\"v-craft-settings\">\n <CraftEditorPanelNodeSettings\n :craftNode=\"selectedNode\"\n :schema=\"schema\"\n @update:props=\"handlePropsUpdate\"\n />\n </div>\n <div v-if=\"eventsSchema && selectedNode\" class=\"v-craft-settings\">\n <CraftEditorPanelNodeEventsSettings\n :craftNode=\"selectedNode\"\n :schema=\"eventsSchema\"\n @update:events=\"handleEventsUpdate\"\n />\n </div>\n <div class=\"v-craft-actions\" data-type=\"button\">\n <button\n class=\"formkit-input v-craft-delete\"\n v-if=\"deleteable\"\n @click.prevent=\"removeNode\"\n >\n Delete\n </button>\n </div>\n </div>\n </div>\n </slot>\n</template>\n\n<script lang=\"ts\" setup generic=\"T extends object\">\nimport { storeToRefs } from \"pinia\";\nimport { computed, inject, type ComputedRef } from \"vue\";\nimport CoreResolver from \"../lib/CraftNodeResolver\";\nimport { useEditor } from \"../store/editor\";\n\nconst editor = useEditor();\nconst { selectedNode } = storeToRefs(editor);\nconst resolver = inject<ComputedRef<CoreResolver<T>>>(\"resolver\");\n\nconst schema = computed(() => {\n if (!selectedNode.value || !resolver?.value) {\n return [];\n }\n return resolver.value.getSchema(selectedNode.value);\n});\nconst eventsSchema = computed(() => {\n if (!selectedNode.value || !resolver?.value) {\n return [];\n }\n return resolver.value.getEventsSchema(selectedNode.value);\n});\n\nconst deleteable = computed(\n () => selectedNode.value && selectedNode.value.parentUuid\n);\n\nconst removeNode = () => {\n if (selectedNode.value) {\n editor.removeNode(selectedNode.value);\n }\n};\n\nconst nodeName = computed(() =>\n selectedNode.value\n ? `${\n resolver?.value?.resolveNode(selectedNode.value)?.componentName ||\n \"Unknown\"\n }`\n : \"\"\n);\n\nconst handlePropsUpdate = (newProps: Record<string, any>) => {\n if (selectedNode.value && newProps) {\n editor.updateNodeProps(selectedNode.value.uuid, newProps);\n }\n};\n\nconst handleEventsUpdate = (newEvents: Record<string, any>) => {\n if (selectedNode.value && newEvents) {\n editor.updateNodeEvents(selectedNode.value.uuid, newEvents);\n }\n};\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","<template>\n <div\n v-if=\"indicator.isShown\"\n class=\"v-craft-indicator\"\n :class=\"{ 'v-craft-forbidden': indicator.isForbidden }\"\n :style=\"getIndicatorStyle()\"\n />\n</template>\n\n<script lang=\"ts\" setup>\nimport { useIndicator } from \"../store/indicator\";\n\nconst indicator = useIndicator();\n\nconst getIndicatorStyle = () => {\n const { top, left } = indicator.position;\n const { width, height } = indicator.size;\n\n return {\n top: `${top}px`,\n left: `${left}px`,\n height: `${height}px`,\n width: `${width}px`,\n };\n};\n</script>\n<style lang=\"scss\">\n:root {\n --v-craft-indicator-bg-allowed: var(--v-craft-green);\n --v-craft-indicator-bg-forbidden: var(--v-craft-red);\n --v-craft-indicator-transition-duration: 0.125s;\n --v-craft-indicator-z-index: 10000;\n}\n</style>\n<style lang=\"scss\">\n.v-craft-indicator {\n position: fixed;\n background-color: var(--v-craft-indicator-bg-allowed);\n transition: top var(--v-craft-indicator-transition-duration) ease,\n left var(--v-craft-indicator-transition-duration) ease,\n right var(--v-craft-indicator-transition-duration) ease,\n bottom var(--v-craft-indicator-transition-duration) ease,\n width var(--v-craft-indicator-transition-duration) ease,\n height var(--v-craft-indicator-transition-duration) ease,\n background-color var(--v-craft-indicator-transition-duration) ease-in-out;\n\n z-index: var(--v-craft-indicator-z-index);\n\n &:after {\n content: \" \";\n }\n\n &.v-craft-forbidden {\n background-color: var(--v-craft-indicator-bg-forbidden);\n }\n}\n</style>\n","<template>\n <div v-show=\"$slots.default\" :class=\"{ 'h-full': isAutoHeight }\">\n <iframe\n id=\"v-craft-iframe\"\n ref=\"iframeRef\"\n :class=\"iframeClass\"\n :style=\"iframeStyle\"\n :onload=\"onLoad\"\n />\n <Teleport v-if=\"hasLoad\" :to=\"iframeRef?.contentWindow?.document.body\">\n <slot />\n </Teleport>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n ref,\n nextTick,\n StyleValue,\n onUnmounted,\n toRefs,\n watch,\n computed,\n HTMLAttributes,\n} from \"vue\";\n\nconst props = withDefaults(\n defineProps<{\n iframeClass?: HTMLAttributes[\"class\"];\n iframeStyle?: StyleValue;\n inheritStyles?: boolean;\n styleSheets?: string[];\n styles?: string[];\n iframeId?: string;\n width?: \"auto\" | number;\n height?: \"auto\" | number;\n }>(),\n {\n iframeId: \"v-craft-iframe\",\n iframeClass: \"\",\n iframeStyle: () => ({}),\n inheritStyles: false,\n styleSheets: () => [],\n styles: () => [],\n width: \"auto\",\n height: \"auto\",\n }\n);\n\nconst iframeRef = ref<HTMLIFrameElement>();\nconst hasLoad = ref(false);\nconst iframeBody = ref();\nconst observer = ref<MutationObserver>();\nconst resizeObserver = ref<ResizeObserver>();\nconst { height, width } = toRefs(props);\n\nconst isAutoHeight = computed(() => height.value === 'auto');\nlet lastHeight = 0;\nlet updateScheduled = false;\n\nconst onLoad = () => {\n nextTick(() => {\n if (!iframeRef.value) {\n console.error(\"iframe could not be loaded.\");\n return;\n }\n\n emit(\"iframeLoad\", iframeRef.value);\n iframeRef.value?.setAttribute(\"data-iframe-ready\", \"true\");\n setupBody();\n if (props.inheritStyles) inheritStyles();\n\n props.styles.forEach((el) => {\n if (!iframeRef.value) return;\n insertStyle(iframeRef.value, el);\n });\n\n props.styleSheets.forEach((sheet) => {\n if (!iframeRef.value) return;\n insertStyleSheet(iframeRef.value, sheet);\n });\n\n hasLoad.value = true;\n\n nextTick(() => {\n if (!iframeRef.value) {\n return;\n }\n\n iframeBody.value = iframeRef.value?.contentWindow?.document.body;\n setupAutoResize();\n });\n });\n};\n\nwatch([width, height], ([w, h]) => {\n setupAutoResize();\n});\n\nconst setupAutoResize = () => {\n if (!iframeRef.value) {\n return;\n }\n const iframeWindow = iframeRef.value.contentWindow;\n if (!iframeWindow) return;\n\n observer.value?.disconnect();\n resizeObserver.value?.disconnect();\n\n if (height.value !== \"auto\" || width.value !== \"auto\") {\n iframeRef.value.style.height = `${height.value}px`;\n iframeRef.value.style.width = `${width.value}px`;\n return;\n }\n\n iframeRef.value.style.width = \"100%\";\n iframeRef.value.style.height = \"100%\";\n\n observer.value = new MutationObserver(() => {\n setTimeout(updateIframeHeight, 100);\n });\n observer.value.observe(iframeWindow.document.body, {\n childList: true,\n subtree: true,\n attributes: true,\n characterData: true,\n });\n\n const initialResizeObserver = new ResizeObserver(() => {\n updateIframeHeight();\n initialResizeObserver.disconnect();\n });\n initialResizeObserver.observe(iframeWindow.document.documentElement);\n\n updateIframeHeight();\n};\n\nconst updateIframeHeight = () => {\n if (updateScheduled) return;\n \n updateScheduled = true;\n nextTick(() => {\n const iframeDocument = iframeRef.value?.contentWindow?.document;\n if (!iframeDocument) {\n updateScheduled = false;\n return;\n }\n\n const iframeParent = iframeRef.value?.parentElement;\n let availableHeight = 0;\n \n if (iframeParent) {\n const parentHeight = iframeParent.clientHeight;\n const iframeTop = iframeRef.value?.offsetTop || 0;\n availableHeight = parentHeight - iframeTop;\n }\n\n const body = iframeDocument.body;\n const html = iframeDocument.documentElement;\n\n const contentHeight = Math.max(\n 150,\n body.scrollHeight,\n body.offsetHeight,\n html.scrollHeight,\n html.offsetHeight\n );\n\n const finalHeight = Math.max(contentHeight, availableHeight);\n\n if (iframeRef.value && Math.abs(finalHeight - lastHeight) > 1) {\n lastHeight = finalHeight;\n iframeRef.value.style.height = `${finalHeight}px`;\n }\n \n updateScheduled = false;\n });\n};\n\nconst inheritStyles = () => {\n const parentDoc = iframeRef.value?.contentWindow?.parent.document;\n if (!parentDoc) return;\n\n const styles = Array.from(parentDoc.querySelectorAll(\"style\") ?? []);\n styles.forEach((el: any) => {\n iframeRef.value?.contentDocument?.head.appendChild(el.cloneNode(true));\n });\n\n const links = Array.from(parentDoc.querySelectorAll(\"link[rel='stylesheet']\") ?? []);\n links.forEach((el: any) => {\n iframeRef.value?.contentDocument?.head.appendChild(el.cloneNode(true));\n });\n};\n\nconst insertStyle = (target: HTMLIFrameElement, style: string) => {\n const styleEl = document.createElement(\"style\");\n styleEl.innerHTML = style;\n target?.contentWindow?.document\n .getElementsByTagName(\"head\")\n .item(0)\n ?.appendChild(styleEl);\n};\n\nconst insertStyleSheet = (target: HTMLIFrameElement, sheet: string) => {\n const link = document.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = sheet;\n target.contentWindow?.document.head.appendChild(link);\n};\n\nconst setupBody = () => {\n const iframeDoc = iframeRef.value?.contentWindow?.document as Document;\n if (!iframeDoc) return;\n const body = iframeDoc.querySelector(\"body\");\n if (!body) return;\n\n const id = iframeDoc.createAttribute(\"id\");\n id.nodeValue = \"v-craft-body\";\n (body.attributes as NamedNodeMap).setNamedItem(id);\n};\n\nconst emit = defineEmits<{\n (e: \"iframeLoad\", iframe: HTMLIFrameElement): void;\n}>();\n\nonUnmounted(() => {\n observer.value?.disconnect();\n resizeObserver.value?.disconnect();\n});\n</script>\n\n<style>\n.vue3-iframe iframe body {\n padding: 10px;\n}\n</style>","import { v4 as uuidv4 } from \"uuid\";\nimport { CraftNode } from \"./craftNode\";\nimport CraftNodeResolver from \"./CraftNodeResolver\";\n\nconst formatComponentName = (vNode) => {\n if (typeof vNode.type === \"symbol\") {\n return \"Fragment\";\n }\n\n if (typeof vNode.type === \"string\") {\n return vNode.type;\n }\n\n if (vNode.type.name) {\n return vNode.type.name;\n }\n\n return \"anonmymous\";\n};\n\nconst createNodeFromVNode = <T extends object>(\n resolver: CraftNodeResolver<T>,\n vNode,\n parentNode: CraftNode | null = null\n) => {\n const componentName = formatComponentName(vNode);\n const { props } = vNode;\n const craftNode: CraftNode = {\n componentName,\n props,\n slots: {},\n parentUuid: parentNode?.uuid ?? null,\n uuid: uuidv4(),\n };\n\n if (vNode.children) {\n if (typeof vNode.children === 'object' && !Array.isArray(vNode.children)) {\n Object.entries(vNode.children).forEach(([slotName, slotFn]) => {\n if (typeof slotFn === 'function') {\n const slotChildren = slotFn();\n if (slotChildren) {\n craftNode.slots[slotName] = createChildren<T>(resolver, slotChildren, craftNode);\n }\n }\n });\n } else if (Array.isArray(vNode.children)) {\n craftNode.slots.default = createChildren<T>(resolver, vNode.children, craftNode);\n }\n }\n\n return craftNode;\n};\n\nconst createChildren = <T extends object>(resolver, vnodeChildren, parent) => {\n if (!vnodeChildren || !(vnodeChildren instanceof Array))\n return [] as unknown as CraftNode[];\n return vnodeChildren\n .map((childVNode) => createNodeFromVNode<T>(resolver, childVNode, parent))\n .filter((childNode) => !!childNode) as CraftNode[];\n};\n\nexport default createNodeFromVNode;\n","import { storeToRefs } from \"pinia\";\nimport {\n ComputedRef,\n inject,\n onMounted,\n provide,\n ref,\n useSlots,\n watch,\n} from \"vue\";\nimport CraftNodeResolver, {\n CraftNodeResolverMap,\n} from \"../../lib/CraftNodeResolver\";\nimport vNodeToCraftNode from \"../../lib/vNodeToCraftNode\";\nimport { useEditor } from \"../../store/editor\";\n\nexport const useCraftFrame = <T extends object>(\n resolverMap?: CraftNodeResolverMap<T>\n) => {\n const editor = useEditor();\n const { hasNodes } = storeToRefs(editor);\n const resolver = resolverMap\n ? ref(new CraftNodeResolver(resolverMap))\n : inject<ComputedRef<CraftNodeResolver<T>>>(\"resolver\");\n\n if (resolver?.value) {\n editor.setResolver(resolver.value as any);\n }\n\n if (resolverMap) {\n provide(\"resolver\", resolver);\n }\n\n const mountNodes = () => {\n if (!resolver?.value) {\n return;\n }\n\n if (!hasNodes.value) {\n const slots = useSlots();\n const defaultSlots = slots.default ? slots.default() : [];\n\n const createdNodes = defaultSlots\n .flatMap((slot) => {\n if (\n slot.key === \"_default\" &&\n slot.children &&\n Array.isArray(slot.children)\n ) {\n return slot.children\n .map((child) => {\n const node = vNodeToCraftNode(resolver.value, child);\n if (!node) {\n console.error(\"Invalid node created from child:\", child);\n }\n return node;\n })\n .filter(Boolean);\n } else {\n const node = vNodeToCraftNode(resolver.value, slot);\n if (!node) {\n console.error(\"Invalid node created from slot:\", slot);\n }\n return [node];\n }\n })\n .filter(Boolean);\n\n if (createdNodes.length) {\n editor.setNodes(createdNodes);\n }\n }\n };\n\n onMounted(mountNodes);\n\n watch(\n () => resolver?.value,\n (res) => {\n if (!res) {\n return;\n }\n\n editor.setResolver(res as any);\n }\n );\n\n return {\n editor,\n mountNodes,\n };\n};\n","<template>\n <div class=\"v-craft-frame\">\n <CraftIframe\n v-if=\"useIframe\"\n @iframe-load=\"onIframeLoad\"\n :inheritStyles=\"inheritStyles\"\n :styles=\"[\n ...iFrameStyles,\n ]\"\n :iframe-style=\"iFrameStyle\"\n :iframe-class=\"iFrameClass\"\n :style-sheets=\"iFrameStyleSheets\"\n :width=\"iFrameWidth\"\n :height=\"iFrameHeight\"\n >\n <CraftNodeViewer\n v-if=\"(viewOnly || !enabled) && hasNodes\"\n v-for=\"craftNode in nodeTree\"\n :key=\"`${craftNode.uuid}-view`\"\n :craftNode=\"craftNode\"\n />\n <CraftNodeEditor\n v-if=\"!viewOnly && enabled && hasNodes\"\n v-for=\"craftNode in nodeTree\"\n :key=\"`${craftNode.uuid}-edit`\"\n :craftNode=\"craftNode\"\n />\n <Indicator v-if=\"!viewOnly && enabled\" />\n </CraftIframe>\n <CraftNodeViewer\n v-if=\"!useIframe && (viewOnly || !enabled) && hasNodes\"\n v-for=\"craftNode in nodeTree\"\n :key=\"`${craftNode.uuid}-view`\"\n :craftNode=\"craftNode\"\n />\n <CraftNodeEditor\n v-if=\"!useIframe && !viewOnly && enabled && hasNodes\"\n v-for=\"craftNode in nodeTree\"\n :key=\"`${craftNode.uuid}-edit`\"\n :craftNode=\"craftNode\"\n />\n <Indicator v-if=\"!useIframe && !viewOnly && enabled\" />\n </div>\n</template>\n\n<script lang=\"ts\" setup generic=\"T extends object\">\nimport { storeToRefs } from \"pinia\";\nimport { StyleValue, toRefs, type HTMLAttributes } from \"vue\";\nimport { CraftNodeResolverMap } from \"../lib/CraftNodeResolver\";\nimport Indicator from \"./CraftDropIndicator.vue\";\nimport CraftIframe from \"./CraftIframe.vue\";\nimport { useCraftFrame } from \"./composable/useCraftFrame\";\n\ndefineOptions({\n name: \"CraftFrame\",\n});\n\nconst props = withDefaults(\n defineProps<{\n iFrameHeight?: \"auto\" | number;\n iFrameStyle?: StyleValue;\n iFrameStyleSheets?: string[];\n iFrameStyles?: string[];\n iFrameWidth?: \"auto\" | number;\n iFrameClass?: HTMLAttributes[\"class\"];\n inheritStyles?: boolean;\n resolverMap?: CraftNodeResolverMap<T>;\n useIframe?: boolean;\n viewOnly?: boolean;\n }>(),\n {\n iFrameHeight: \"auto\",\n iFrameStyle: () => ({}),\n iFrameStyleSheets: () => [],\n iFrameStyles: () => [],\n iFrameWidth: \"auto\",\n inheritStyles: false,\n useIframe: false,\n viewOnly: false,\n }\n);\n\nconst { iFrameWidth, iFrameHeight } = toRefs(props);\n\nconst onIframeLoad = (iframe: HTMLIFrameElement) => {\n emit(\"iframeLoad\", iframe);\n};\n\nconst emit = defineEmits<{\n (e: \"iframeLoad\", iframe: HTMLIFrameElement): void;\n}>();\n\nconst { editor } = useCraftFrame<T>(props.resolverMap);\nconst { nodeTree, hasNodes, enabled } = storeToRefs(editor);\n</script>\n","import { storeToRefs } from \"pinia\";\nimport { ComponentPublicInstance, computed, onMounted, Ref, watch } from \"vue\";\nimport { CraftNode, craftNodeIsDraggable } from \"../../lib/craftNode\";\nimport { useEditor } from \"../../store/editor\";\n\nexport default (\n craftNode: CraftNode,\n nodeRef: Ref<\n ComponentPublicInstance<HTMLElement> | null,\n ComponentPublicInstance<HTMLElement> | null\n >\n): {\n selectNode: () => void;\n isDraggable: Ref<boolean>;\n isSelected: Ref<boolean>;\n} => {\n const editor = useEditor();\n const { enabled, selectedUuid, draggingDisabled } = storeToRefs(editor);\n\n let lastEl: HTMLElement | null = null;\n const updateNodeRef = () => {\n const el = nodeRef?.value?.$el;\n if (el && el !== lastEl) {\n lastEl = el;\n editor.setNodeRef(craftNode, el);\n }\n };\n\n onMounted(updateNodeRef);\n watch(nodeRef, updateNodeRef, { flush: \"post\" });\n\n const isSelected = computed<boolean>(\n () => selectedUuid.value === craftNode.uuid\n );\n\n const isDraggable = computed<boolean>(() => {\n return (\n enabled.value &&\n !draggingDisabled.value &&\n craftNodeIsDraggable(craftNode)\n );\n });\n\n const selectNode = () => {\n if (!enabled.value) {\n return;\n }\n editor.selectNode(craftNode);\n };\n\n return {\n isDraggable,\n isSelected,\n selectNode,\n };\n};\n","import { onBeforeMount, onBeforeUnmount, Ref, watch } from \"vue\";\nimport { CraftNode } from \"../../lib/craftNode\";\nimport { computed } from \"vue\";\nimport { EditorStoreInstanceType } from \"../../store/editor\";\n\nexport const useCraftNodeEvents = (\n craftNode: Ref<CraftNode>,\n editor: EditorStoreInstanceType,\n ctx: Record<string, any>\n) => {\n const eventHandlersMap = new Map();\n\n const buildEvents = () => {\n if (\n !craftNode.value?.events ||\n !Object.values(craftNode.value.events).length\n ) {\n return;\n }\n\n Object.entries(craftNode.value.events).forEach(([eventName, eventCode]) => {\n if (!eventCode.trim()) {\n return;\n }\n\n const handler = (...args: any[]) => {\n try {\n const eventHandler = new Function(\n \"ctx\",\n \"craftNode\",\n \"args\",\n eventCode\n );\n eventHandler(\n { ...ctx, editor },\n editor.nodeMap.get(craftNode.value.uuid),\n ...args\n );\n } catch (e) {\n console.error(\n `Event code execution failed with code: \n${eventCode}\n\nError:`,\n e\n );\n }\n };\n\n eventHandlersMap.set(eventName, handler);\n });\n };\n\n watch(\n () => craftNode,\n () => {\n buildEvents();\n }\n );\n\n onBeforeMount(() => {\n buildEvents();\n });\n\n onBeforeUnmount(() => {\n eventHandlersMap.clear();\n });\n\n return {\n eventHandlers: computed(() => Object.fromEntries(eventHandlersMap)),\n };\n};\n","import { storeToRefs } from \"pinia\";\nimport { useEditor } from \"../../store/editor\";\nimport { computed, provide, readonly, Ref, toRef, ref } from \"vue\";\nimport { CraftNode } from \"../../lib/craftNode\";\n\nexport const useCraftNodeWrapper = <T extends object>(\n craftNode: Ref<CraftNode>\n) => {\n const editor = (() => {\n try {\n return useEditor();\n } catch (e) {\n return null;\n }\n })();\n\n const enabled = computed(() => {\n if (!editor) return false;\n const storeRefs = storeToRefs(editor);\n return (storeRefs as any).enabled?.value ?? false;\n });\n\n const visible = computed(() => craftNode.value?.visible !== false);\n\n provide(\"craftNode\", readonly(craftNode));\n\n return {\n editor,\n craftNode,\n enabled,\n visible,\n };\n};\n","export const mouseOnLeftHalf = (e: MouseEvent, el: HTMLElement): boolean => {\n const rect = el.getBoundingClientRect();\n return e.clientX - rect.left < rect.width / 2;\n};\n\nexport const mouseOnTopHalf = (e: MouseEvent, el: HTMLElement): boolean => {\n const rect = el.getBoundingClientRect();\n return e.clientY - rect.top < rect.height / 2;\n};\n\nexport const mouseOnEdge = (e: MouseEvent, el: HTMLElement): boolean => {\n const rect = el.getBoundingClientRect();\n return (\n e.clientX - rect.left < 15 ||\n e.clientY - rect.top < 15 ||\n rect.right - e.clientX < 15 ||\n rect.bottom - e.clientY < 15\n );\n};\n","import {\n craftNodeCanBeChildOf,\n craftNodeCanBeSiblingOf,\n craftNodeIsCanvas,\n} from \"../craftNode\";\nimport { DragCraftNodeContext } from \"./drop\";\nimport { mouseOnEdge, mouseOnLeftHalf, mouseOnTopHalf } from \"./mouse\";\n\nconst handleElementDragOver = <T extends object>(\n e: MouseEvent,\n el: HTMLElement,\n { editor, indicator, craftNode, resolver }: DragCraftNodeContext<T>\n) => {\n if (!editor.draggedNode) {\n return;\n }\n\n indicator.setIsForbidden(!craftNodeCanBeSiblingOf(editor.draggedNode, craftNode.value, resolver));\n\n if (mouseOnLeftHalf(e, el)) {\n indicator.pointBefore(el);\n return;\n }\n\n indicator.pointAfter(el);\n};\n\nconst handleCanvasDragOver = <T extends object>(\n e: MouseEvent,\n el: HTMLElement,\n { editor, indicator, craftNode, resolver }: DragCraftNodeContext<T>\n) => {\n if (!editor.draggedNode) return;\n\n // Check if hovering over a slot placeholder\n const target = e.target as HTMLElement;\n const slotPlaceholder = target.closest('.v-craft-drop-text');\n \n if (slotPlaceholder) {\n const cannotBeChild = !craftNodeCanBeChildOf(editor.draggedNode, craftNode.value, resolver);\n indicator.setIsForbidden(cannotBeChild);\n indicator.pointInside(slotPlaceholder as HTMLElement);\n return;\n }\n\n if (mouseOnEdge(e, el)) {\n handleElementDragOver(e, el, { editor, indicator, craftNode, resolver });\n return;\n }\n\n const cannotBeChild = !craftNodeCanBeChildOf(editor.draggedNode, craftNode.value, resolver);\n indicator.setIsForbidden(cannotBeChild);\n if (mouseOnTopHalf(e, el)) {\n indicator.pointInsideTop(el);\n return;\n }\n\n indicator.pointInside(el);\n};\n\nexport default <T extends object>(\n e: MouseEvent,\n el: HTMLElement,\n context: DragCraftNodeContext<T>\n) => {\n if (craftNodeIsCanvas(context.craftNode.value)) {\n handleCanvasDragOver<T>(e, el, context);\n return;\n }\n handleElementDragOver<T>(e, el, context);\n};\n","import { Ref, ref } from \"vue\";\nimport { EditorStoreInstanceType } from \"../../store/editor\";\nimport { IndicatorStoreType } from \"../../store/indicator\";\nimport {\n buildCraftNodeTree,\n CraftNode,\n craftNodeCanBeChildOf,\n craftNodeCanBeSiblingOf,\n craftNodeIsCanvas,\n resolveNodeName,\n} from \"../craftNode\";\nimport CraftNodeResolver from \"../CraftNodeResolver\";\nimport { mouseOnEdge, mouseOnLeftHalf, mouseOnTopHalf } from \"./mouse\";\n\nexport type DragCraftNodeContext<T extends object> = {\n editor: EditorStoreInstanceType;\n indicator: IndicatorStoreType;\n craftNode: Ref<CraftNode>;\n resolver: CraftNodeResolver<T>;\n};\n\nconst handleElementDrop = <T extends object>(\n e: MouseEvent,\n el: HTMLElement,\n draggedNode: CraftNode,\n context: DragCraftNodeContext<T>\n) => {\n if (\n !craftNodeCanBeSiblingOf(\n draggedNode,\n context.craftNode.value,\n context.resolver\n )\n ) {\n return context.craftNode.value;\n }\n\n const parent = context.craftNode.value.parentUuid\n ? context.editor.nodeMap.get(context.craftNode.value.parentUuid)\n : null;\n if (!parent) {\n return context.craftNode.value;\n }\n\n const sibling = Object.values(parent.slots || {}).flat().find(\n (c) => c.uuid === context.craftNode.value.uuid\n );\n if (!sibling) {\n return context.craftNode.value;\n }\n\n if (sibling.uuid === draggedNode.uuid) {\n return context.craftNode.value;\n }\n\n if (mouseOnLeftHalf(e, el)) {\n context.editor.insertNodeBefore(draggedNode, sibling);\n } else {\n context.editor.insertNodeAfter(draggedNode, sibling);\n }\n\n return context.craftNode.value;\n};\n\nconst initializeSlotsFromResolver = <T extends object>(\n node: CraftNode,\n resolver: CraftNodeResolver<T>\n): CraftNode => {\n if (!node.slots || Object.keys(node.slots).length === 0) {\n const resolved = resolver.resolveNode?.(node);\n const resolverSlots = resolved?.slots;\n if (resolverSlots && resolverSlots.length > 0) {\n node.slots = {};\n resolverSlots.forEach((slotName: string) => {\n node.slots[slotName] = [];\n });\n } else {\n node.slots = { default: [] };\n }\n }\n return node;\n};\n\nconst handleCanvasDrop = <T extends object>(\n e: MouseEvent,\n el: HTMLElement,\n draggedNode: CraftNode,\n context: DragCraftNodeContext<T>\n) => {\n const { editor, resolver, craftNode } = context;\n const target = e.target as HTMLElement;\n const targetNode = editor.nodeMap.get(target.id);\n if (targetNode && craftNodeIsCanvas(targetNode)) {\n handleCanvasDrop(e, el, draggedNode, { ...context, craftNode: ref(targetNode) });\n return context.craftNode.value;\n }\n const slotPlaceholder = target.closest('.v-craft-drop-text');\n let slotName = 'default';\n \n if (slotPlaceholder) {\n const slotNameAttr = slotPlaceholder.getAttribute('data-slot-name');\n if (slotNameAttr) {\n slotName = slotNameAttr;\n }\n } else {\n if (mouseOnEdge(e, el)) {\n return handleElementDrop(e, el, draggedNode, context);\n }\n\n const targetSlots = context.craftNode.value.slots || {};\n const slotNames = Object.keys(targetSlots);\n slotName = slotNames.length > 0 ? slotNames[0] : 'default';\n }\n\n if (\n !craftNodeCanBeChildOf(\n draggedNode,\n context.craftNode.value,\n context.resolver\n )\n ) {\n return context.craftNode.value;\n }\n\n if (mouseOnTopHalf(e, el)) {\n context.editor.prependNodeTo(draggedNode, context.craftNode.value, slotName);\n } else {\n context.editor.appendNodeTo(draggedNode, context.craftNode.value, slotName);\n }\n\n return context.craftNode.value;\n};\n\nexport default <T extends object>(\n e: MouseEvent,\n el: HTMLElement,\n context: DragCraftNodeContext<T>\n) => {\n if (!context.editor.draggedNode) {\n return context.craftNode.value;\n }\n\n const nodeCopy = (() => {\n let copy: CraftNode;\n if (context.editor.draggedNode?.uuid) {\n copy = JSON.parse(JSON.stringify(context.editor.draggedNode));\n } else {\n copy = buildCraftNodeTree(\n JSON.parse(JSON.stringify(context.editor.draggedNode))\n );\n }\n return initializeSlotsFromResolver(copy, context.resolver);\n })();\n\n return craftNodeIsCanvas(context.craftNode.value)\n ? handleCanvasDrop(e, el, nodeCopy, context)\n : handleElementDrop(e, el, nodeCopy, context);\n};\n","import handleDragOver from \"./dragOver\"\nimport handleDrop from \"./drop\"\n\nexport default {\n handleDragOver,\n handleDrop\n};\n","import { Ref } from \"vue\";\nimport { CraftNode } from \"../../lib/craftNode\";\nimport CraftNodeResolver from \"../../lib/CraftNodeResolver\";\nimport drag from \"../../lib/dragCraftNode\";\nimport { useEditor } from \"../../store/editor\";\nimport { useIndicator } from \"../../store/indicator\";\nimport { debounce } from \"lodash-es\";\n\nexport default <T extends object>(\n craftNode: Ref<CraftNode>,\n nodeRef: Ref<any>,\n resolver: CraftNodeResolver<T>\n): {\n handleDragStart: (e: MouseEvent) => void;\n handleDragOver: (e: MouseEvent) => void;\n handleDrop: (e: MouseEvent) => void;\n handleDragEnd: () => void;\n} => {\n const editor = useEditor();\n const indicator = useIndicator();\n\n const handleDragStart = (e) => {\n if (!editor.enabled) {\n return;\n }\n editor.dragNode(craftNode.value);\n };\n\n const handleDragOver = debounce((event: MouseEvent) => {\n if (!editor.enabled) {\n return;\n }\n\n if (!nodeRef.value?.$el) {\n return;\n }\n drag.handleDragOver(event, nodeRef.value.$el, {\n editor,\n indicator,\n craftNode,\n resolver,\n });\n }, 8);\n\n const handleDrop = (event: MouseEvent) => {\n if (!editor.enabled) {\n return;\n }\n if (!nodeRef.value?.$el) {\n return;\n }\n\n drag.handleDrop<T>(event, nodeRef.value.$el, {\n editor: editor as any,\n indicator,\n craftNode,\n resolver,\n });\n };\n\n const handleDragEnd = () => {\n if (!editor.enabled) {\n return;\n }\n editor.dragNode(null);\n indicator.hide();\n };\n\n return {\n handleDragStart,\n handleDragOver,\n handleDrop,\n handleDragEnd,\n };\n};\n","<template>\n <component\n ref=\"nodeRef\"\n v-if=\"visible && craftNode && resolvedNode\"\n v-bind=\"{ ...defaultProps, ...craftNode.props }\"\n v-on=\"eventHandlers\"\n :data-node-name=\"nodeName\"\n :is=\"resolvedNode.componentName\"\n :style=\"{ '--node-color': nodeColor }\"\n :class=\"{\n 'v-craft-node-selected': isSelected,\n 'v-craft-node': editor?.enabled,\n 'v-craft-canvas': craftNodeIsCanvas(craftNode),\n 'v-craft-empty': !craftNode.slots || Object.keys(craftNode.slots).length === 0 || Object.values(craftNode.slots).every(slot => slot.length === 0),\n 'v-craft-other-node-dragged':\n editor?.draggedNode &&\n !craftNodeIsAncestorOf(editor.draggedNode, craftNode),\n }\"\n :draggable=\"editor?.enabled && isDraggable\"\n @click.prevent.stop=\"craftNodeClick\"\n @dragend.prevent.stop=\"handleDragEnd\"\n @dragover.prevent.stop=\"handleDragOver\"\n @dragstart.stop=\"handleDragStart\"\n @drop.prevent.stop=\"handleDrop\"\n >\n <template v-for=\"slotName in availableSlots\" :key=\"slotName\" #[slotName]>\n <div\n v-if=\"craftNodeIsCanvas(craftNode) && (craftNode.slots[slotName]?.length == 0)\"\n class=\"v-craft-drop-text\"\n :data-slot-name=\"slotName\"\n @dragover.prevent.stop=\"handleDragOver\"\n @drop.prevent.stop=\"handleDrop\"\n >\n <span class=\"v-craft-drop-text-label\">Drop a component here</span>\n <span class=\"v-craft-slot-name\">{{ slotName }}</span>\n </div>\n <template v-if=\"shouldRenderSlots\">\n <template v-if=\"craftNodeData?.type && craftNodeData.slotName === slotName\">\n <CraftNodeViewer\n v-for=\"item in computedDataChildren(craftNode.slots?.[slotName] || [], slotName)\"\n :key=\"item.key\"\n :craftNode=\"item.craftNode\"\n />\n </template>\n <CraftNodeEditor\n v-for=\"childNode in (craftNode.slots?.[slotName] || [])\"\n :key=\"childNode.uuid\"\n :craftNode=\"childNode\"\n />\n </template>\n </template>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport { ComponentPublicInstance, computed, provide, ref, toRef } from \"vue\";\nimport {\n CraftNode,\n craftNodeIsAncestorOf,\n craftNodeIsCanvas,\n CraftNodeDatasource,\n} from \"../lib/craftNode\";\nimport useConnectCraftNodeToStore from \"./composable/useConnectCraftNodeToStore\";\nimport { useCraftNodeEvents } from \"./composable/useCraftNodeEvents\";\nimport { useCraftNodeWrapper } from \"./composable/useCraftNodeWrapper\";\nimport useDragCraftNode from \"./composable/useDragCraftNode\";\nimport { useResolveCraftNode } from \"./composable/useResolveCraftNode\";\n\ndefineOptions({\n name: \"CraftNodeEditor\",\n});\n\nconst props = defineProps<{\n craftNode: CraftNode;\n}>();\n\nconst craftNode = toRef(props, \"craftNode\");\nconst { editor, visible } = useCraftNodeWrapper(craftNode);\nconst { resolvedNode, defaultProps, resolver } = useResolveCraftNode(craftNode);\n\n\nif (resolver.value) provide(\"resolver\", resolver);\n\nconst nodeRef = ref<ComponentPublicInstance<HTMLElement> | null>(null);\n\nconst craftNodeData = computed(() => editor?.nodeDataMap[craftNode.value.uuid]);\n\nconst { isSelected, isDraggable, selectNode } = useConnectCraftNodeToStore(\n craftNode.value,\n nodeRef\n);\n\nconst { handleDragStart, handleDragOver, handleDrop, handleDragEnd } =\n useDragCraftNode(craftNode, nodeRef, resolver.value);\n\nconst { eventHandlers } = useCraftNodeEvents(\n craftNode,\n editor as any,\n editor?.eventsContext || {}\n);\n\nconst nodeName = computed(() => {\n const resolved = resolver?.value?.resolve(craftNode.value.componentName);\n return resolved?.componentName || craftNode.value.componentName;\n});\n\nconst craftNodeClick = () => {\n selectNode();\n};\n\nconst generateColorFromUUID = (uuid: string): string => {\n let hash = 0;\n for (let i = 0; i < uuid.length; i++) {\n hash = uuid.charCodeAt(i) + ((hash << 5) - hash);\n }\n const h = hash % 360;\n const s = 70 + (hash % 30);\n const l = 45 + (hash % 30);\n return `hsla(${h}, ${s}%, ${l}%, 0.9)`;\n};\n\nconst nodeColor = computed(() => generateColorFromUUID(craftNode.value.uuid));\n\nconst availableSlots = computed(() => {\n const slots: string[] = [];\n const resolved = resolver?.value?.resolveNode?.(craftNode.value);\n const resolverSlots = resolved?.slots;\n if (resolverSlots && resolverSlots.length > 0) {\n slots.push(...resolverSlots);\n } else {\n slots.push('default');\n }\n return slots;\n});\n\nconst shouldRenderSlots = computed(() => {\n if (craftNodeIsCanvas(craftNode.value)) return true;\n return Object.values(craftNode.value.slots || {}).some(children => children.length > 0);\n});\n\nconst computedDataChildren = (children: CraftNode[], slotName: string) => {\n if (!craftNodeData.value) return [];\n if (craftNodeData.value.slotName && craftNodeData.value.slotName !== slotName) return [];\n return computeDataNodes(craftNodeData.value, children);\n};\n\ntype ComputedDataNode = { key: string; craftNode: CraftNode };\n\nconst computeDataNodes = (\n data: CraftNodeDatasource,\n children: CraftNode[]\n): ComputedDataNode[] => {\n if (data.type === \"single\") {\n return children.map((childNode) => ({\n key: `${childNode.uuid}-single`,\n craftNode: {\n ...childNode,\n props: {\n ...childNode.props,\n ...(data.item || {}),\n },\n },\n }));\n }\n\n if (data.type === \"list\") {\n if (!data.list) return [];\n\n return children.reduce((acc, childNode) => {\n return acc.concat(\n data.list!.map((item, index) => ({\n key: `${childNode.uuid}-data-${index}`,\n craftNode: {\n ...childNode,\n props: {\n ...childNode.props,\n ...(item || {}),\n },\n },\n }))\n );\n }, [] as ComputedDataNode[]);\n }\n\n return [];\n};\n</script>\n\n<style lang=\"scss\">\n@use \"../assets/craftNodeEditor\";\n\n.v-craft-node::before {\n content: attr(data-node-name);\n}\n</style>\n","<template>\n <component\n ref=\"nodeRef\"\n v-if=\"visible && resolver && resolvedNode\"\n :is=\"resolvedNode.componentName\"\n v-bind=\"nodeProps\"\n v-on=\"eventHandlers\"\n >\n <template v-for=\"slotName in availableSlots\" :key=\"slotName\" #[slotName]>\n <template v-if=\"shouldRenderSlots\">\n <template v-if=\"!data?.type\">\n <CraftNodeViewer\n v-for=\"childNode in slotNodes[slotName]\"\n :key=\"childNode.uuid\"\n :craftNode=\"childNode\"\n />\n </template>\n <template v-else>\n <CraftNodeViewer\n v-for=\"item in computedChildren(slotNodes[slotName], slotName)\"\n :key=\"item.key\"\n :craftNode=\"item.craftNode\"\n />\n </template>\n </template>\n </template>\n </component>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, onMounted, provide, ref, toRef } from \"vue\";\nimport { CraftNode, CraftNodeDatasource, craftNodeIsCanvas } from \"../lib/craftNode\";\nimport { useCraftNodeEvents } from \"./composable/useCraftNodeEvents\";\nimport { useResolveCraftNode } from \"./composable/useResolveCraftNode\";\nimport { useCraftNodeWrapper } from \"./composable/useCraftNodeWrapper\";\nimport CraftNodeViewer from \"./CraftNodeViewer.vue\";\n\ndefineOptions({\n name: \"CraftNodeViewer\",\n});\n\nconst props = defineProps<{\n craftNode: CraftNode;\n nodeDataMap?: Record<string, CraftNodeDatasource>;\n eventsContext?: Record<string, any>;\n}>();\n\nconst craftNode = toRef(props, \"craftNode\");\nconst { editor, visible } = useCraftNodeWrapper(craftNode);\nconst { resolvedNode, defaultProps, resolver } = useResolveCraftNode(craftNode);\n\nprovide(\"resolver\", resolver);\n\nconst nodeProps = computed(() => ({\n ...defaultProps.value,\n ...craftNode.value?.props,\n}));\n\nconst data = computed(() => {\n return props.nodeDataMap?.[craftNode.value.uuid] || editor?.nodeDataMap?.[craftNode.value.uuid];\n});\n\nconst slotNodes = computed(() => {\n return craftNode.value.slots || {};\n});\n\nconst isCanvas = computed(() => craftNodeIsCanvas(craftNode.value));\n\nconst availableSlots = computed(() => {\n const slots: string[] = [];\n const resolved = resolver?.value?.resolveNode?.(craftNode.value);\n const resolverSlots = resolved?.slots;\n if (resolverSlots && resolverSlots.length > 0) {\n slots.push(...resolverSlots);\n } else {\n slots.push('default');\n }\n return slots;\n});\n\nconst shouldRenderSlots = computed(() => {\n if (isCanvas.value) return true;\n return Object.values(slotNodes.value).some(children => children.length > 0);\n});\n\nconst computedChildren = (children: CraftNode[], slotName: string) => {\n if (!data.value) return [];\n if (data.value.slotName && data.value.slotName !== slotName) return [];\n return computeDataNodes(data.value, children);\n};\n\nconst nodeRef = ref<HTMLElement | null>(null);\n\nconst { eventHandlers } = useCraftNodeEvents(\n craftNode,\n editor as any,\n props.eventsContext || editor?.eventsContext || {}\n);\n\nonMounted(() => {\n if (nodeRef.value && craftNode.value && editor) {\n editor.setNodeRef(craftNode.value, nodeRef.value);\n }\n});\n\ntype ComputedDataNode = { key: string; craftNode: CraftNode };\n\nconst computeDataNodes = (\n data: CraftNodeDatasource,\n children: CraftNode[]\n): ComputedDataNode[] => {\n if (data.type === \"single\") {\n return children.map((childNode) => ({\n key: `${childNode.uuid}-single`,\n craftNode: {\n ...childNode,\n props: {\n ...childNode.props,\n ...(data.item || {}),\n },\n },\n }));\n }\n\n if (data.type === \"list\") {\n if (!data.list) return [];\n\n return children.reduce((acc, childNode) => {\n return acc.concat(\n //@ts-ignore\n data.list.map((item, index) => ({\n key: `${childNode.uuid}-data-${index}`,\n craftNode: {\n ...childNode,\n props: {\n ...childNode.props,\n ...(item || {}),\n },\n },\n }))\n );\n }, [] as ComputedDataNode[]);\n }\n\n return [];\n};\n</script>\n","<template>\n <CraftNodeViewer\n v-for=\"craftNode in nodes\"\n :key=\"craftNode.uuid\"\n :craftNode=\"craftNode\"\n :nodeDataMap=\"nodeDataMap\"\n :eventsContext=\"eventsContext\"\n />\n</template>\n\n<script lang=\"ts\" setup generic=\"T extends object\">\nimport { computed, provide } from \"vue\";\nimport { CraftNode, CraftNodeDatasource } from \"../lib/craftNode\";\nimport CraftNodeResolver, { CraftNodeResolverMap } from \"../lib/CraftNodeResolver\";\nimport CraftNodeViewer from \"./CraftNodeViewer.vue\";\n\ndefineOptions({\n name: \"CraftStaticRenderer\",\n});\n\nconst props = defineProps<{\n nodes: CraftNode[];\n resolverMap: CraftNodeResolverMap<T>;\n nodeDataMap?: Record<string, CraftNodeDatasource>;\n eventsContext?: Record<string, any>;\n}>();\n\nconst resolver = computed(() => new CraftNodeResolver(props.resolverMap));\nprovide(\"resolver\", resolver);\nprovide(\"nodeDataMap\", props.nodeDataMap || {});\nprovide(\"eventsContext\", props.eventsContext || {});\n</script>\n","export const defaultBlueprints = {\n metadata: {\n name: \"default\",\n },\n label: \"Default\",\n blueprints: {\n CraftComponentSimpleText: {\n label: \"Text\",\n componentName: \"CraftComponentSimpleText\",\n props: {\n content:\n \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean luctus arcu eu justo cursus faucibus. Phasellus non ex ac massa aliquet suscipit non eget odio. Aliquam eget laoreet ligula, at imperdiet tortor. Integer ut eros non velit rhoncus tincidunt. Mauris porta fringilla volutpat. Duis et nulla leo. Cras eu risus at nisl feugiat commodo vitae vel augue. Aenean at tempus velit. Duis eget convallis ipsum, eget suscipit felis. Quisque scelerisque euismod scelerisque.\",\n componentName: \"p\",\n },\n },\n },\n};\n","/**\n * @implements {IHooks}\n */\nclass Hooks {\n /**\n * @callback HookCallback\n * @this {*|Jsep} this\n * @param {Jsep} env\n * @returns: void\n */\n /**\n * Adds the given callback to the list of callbacks for the given hook.\n *\n * The callback will be invoked when the hook it is registered for is run.\n *\n * One callback function can be registered to multiple hooks and the same hook multiple times.\n *\n * @param {string|object} name The name of the hook, or an object of callbacks keyed by name\n * @param {HookCallback|boolean} callback The callback function which is given environment variables.\n * @param {?boolean} [first=false] Will add the hook to the top of the list (defaults to the bottom)\n * @public\n */\n add(name, callback, first) {\n if (typeof arguments[0] != 'string') {\n // Multiple hook callbacks, keyed by name\n for (let name in arguments[0]) {\n this.add(name, arguments[0][name], arguments[1]);\n }\n } else {\n (Array.isArray(name) ? name : [name]).forEach(function (name) {\n this[name] = this[name] || [];\n if (callback) {\n this[name][first ? 'unshift' : 'push'](callback);\n }\n }, this);\n }\n }\n\n /**\n * Runs a hook invoking all registered callbacks with the given environment variables.\n *\n * Callbacks will be invoked synchronously and in the order in which they were registered.\n *\n * @param {string} name The name of the hook.\n * @param {Object<string, any>} env The environment variables of the hook passed to all callbacks registered.\n * @public\n */\n run(name, env) {\n this[name] = this[name] || [];\n this[name].forEach(function (callback) {\n callback.call(env && env.context ? env.context : env, env);\n });\n }\n}\n\n/**\n * @implements {IPlugins}\n */\nclass Plugins {\n constructor(jsep) {\n this.jsep = jsep;\n this.registered = {};\n }\n\n /**\n * @callback PluginSetup\n * @this {Jsep} jsep\n * @returns: void\n */\n /**\n * Adds the given plugin(s) to the registry\n *\n * @param {object} plugins\n * @param {string} plugins.name The name of the plugin\n * @param {PluginSetup} plugins.init The init function\n * @public\n */\n register() {\n for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n plugins.forEach(plugin => {\n if (typeof plugin !== 'object' || !plugin.name || !plugin.init) {\n throw new Error('Invalid JSEP plugin format');\n }\n if (this.registered[plugin.name]) {\n // already registered. Ignore.\n return;\n }\n plugin.init(this.jsep);\n this.registered[plugin.name] = plugin;\n });\n }\n}\n\n// JavaScript Expression Parser (JSEP) 1.4.0\n\nclass Jsep {\n /**\n * @returns {string}\n */\n static get version() {\n // To be filled in by the template\n return '1.4.0';\n }\n\n /**\n * @returns {string}\n */\n static toString() {\n return 'JavaScript Expression Parser (JSEP) v' + Jsep.version;\n }\n // ==================== CONFIG ================================\n /**\n * @method addUnaryOp\n * @param {string} op_name The name of the unary op to add\n * @returns {Jsep}\n */\n static addUnaryOp(op_name) {\n Jsep.max_unop_len = Math.max(op_name.length, Jsep.max_unop_len);\n Jsep.unary_ops[op_name] = 1;\n return Jsep;\n }\n\n /**\n * @method jsep.addBinaryOp\n * @param {string} op_name The name of the binary op to add\n * @param {number} precedence The precedence of the binary op (can be a float). Higher number = higher precedence\n * @param {boolean} [isRightAssociative=false] whether operator is right-associative\n * @returns {Jsep}\n */\n static addBinaryOp(op_name, precedence, isRightAssociative) {\n Jsep.max_binop_len = Math.max(op_name.length, Jsep.max_binop_len);\n Jsep.binary_ops[op_name] = precedence;\n if (isRightAssociative) {\n Jsep.right_associative.add(op_name);\n } else {\n Jsep.right_associative.delete(op_name);\n }\n return Jsep;\n }\n\n /**\n * @method addIdentifierChar\n * @param {string} char The additional character to treat as a valid part of an identifier\n * @returns {Jsep}\n */\n static addIdentifierChar(char) {\n Jsep.additional_identifier_chars.add(char);\n return Jsep;\n }\n\n /**\n * @method addLiteral\n * @param {string} literal_name The name of the literal to add\n * @param {*} literal_value The value of the literal\n * @returns {Jsep}\n */\n static addLiteral(literal_name, literal_value) {\n Jsep.literals[literal_name] = literal_value;\n return Jsep;\n }\n\n /**\n * @method removeUnaryOp\n * @param {string} op_name The name of the unary op to remove\n * @returns {Jsep}\n */\n static removeUnaryOp(op_name) {\n delete Jsep.unary_ops[op_name];\n if (op_name.length === Jsep.max_unop_len) {\n Jsep.max_unop_len = Jsep.getMaxKeyLen(Jsep.unary_ops);\n }\n return Jsep;\n }\n\n /**\n * @method removeAllUnaryOps\n * @returns {Jsep}\n */\n static removeAllUnaryOps() {\n Jsep.unary_ops = {};\n Jsep.max_unop_len = 0;\n return Jsep;\n }\n\n /**\n * @method removeIdentifierChar\n * @param {string} char The additional character to stop treating as a valid part of an identifier\n * @returns {Jsep}\n */\n static removeIdentifierChar(char) {\n Jsep.additional_identifier_chars.delete(char);\n return Jsep;\n }\n\n /**\n * @method removeBinaryOp\n * @param {string} op_name The name of the binary op to remove\n * @returns {Jsep}\n */\n static removeBinaryOp(op_name) {\n delete Jsep.binary_ops[op_name];\n if (op_name.length === Jsep.max_binop_len) {\n Jsep.max_binop_len = Jsep.getMaxKeyLen(Jsep.binary_ops);\n }\n Jsep.right_associative.delete(op_name);\n return Jsep;\n }\n\n /**\n * @method removeAllBinaryOps\n * @returns {Jsep}\n */\n static removeAllBinaryOps() {\n Jsep.binary_ops = {};\n Jsep.max_binop_len = 0;\n return Jsep;\n }\n\n /**\n * @method removeLiteral\n * @param {string} literal_name The name of the literal to remove\n * @returns {Jsep}\n */\n static removeLiteral(literal_name) {\n delete Jsep.literals[literal_name];\n return Jsep;\n }\n\n /**\n * @method removeAllLiterals\n * @returns {Jsep}\n */\n static removeAllLiterals() {\n Jsep.literals = {};\n return Jsep;\n }\n // ==================== END CONFIG ============================\n\n /**\n * @returns {string}\n */\n get char() {\n return this.expr.charAt(this.index);\n }\n\n /**\n * @returns {number}\n */\n get code() {\n return this.expr.charCodeAt(this.index);\n }\n /**\n * @param {string} expr a string with the passed in express\n * @returns Jsep\n */\n constructor(expr) {\n // `index` stores the character number we are currently at\n // All of the gobbles below will modify `index` as we move along\n this.expr = expr;\n this.index = 0;\n }\n\n /**\n * static top-level parser\n * @returns {jsep.Expression}\n */\n static parse(expr) {\n return new Jsep(expr).parse();\n }\n\n /**\n * Get the longest key length of any object\n * @param {object} obj\n * @returns {number}\n */\n static getMaxKeyLen(obj) {\n return Math.max(0, ...Object.keys(obj).map(k => k.length));\n }\n\n /**\n * `ch` is a character code in the next three functions\n * @param {number} ch\n * @returns {boolean}\n */\n static isDecimalDigit(ch) {\n return ch >= 48 && ch <= 57; // 0...9\n }\n\n /**\n * Returns the precedence of a binary operator or `0` if it isn't a binary operator. Can be float.\n * @param {string} op_val\n * @returns {number}\n */\n static binaryPrecedence(op_val) {\n return Jsep.binary_ops[op_val] || 0;\n }\n\n /**\n * Looks for start of identifier\n * @param {number} ch\n * @returns {boolean}\n */\n static isIdentifierStart(ch) {\n return ch >= 65 && ch <= 90 ||\n // A...Z\n ch >= 97 && ch <= 122 ||\n // a...z\n ch >= 128 && !Jsep.binary_ops[String.fromCharCode(ch)] ||\n // any non-ASCII that is not an operator\n Jsep.additional_identifier_chars.has(String.fromCharCode(ch)); // additional characters\n }\n\n /**\n * @param {number} ch\n * @returns {boolean}\n */\n static isIdentifierPart(ch) {\n return Jsep.isIdentifierStart(ch) || Jsep.isDecimalDigit(ch);\n }\n\n /**\n * throw error at index of the expression\n * @param {string} message\n * @throws\n */\n throwError(message) {\n const error = new Error(message + ' at character ' + this.index);\n error.index = this.index;\n error.description = message;\n throw error;\n }\n\n /**\n * Run a given hook\n * @param {string} name\n * @param {jsep.Expression|false} [node]\n * @returns {?jsep.Expression}\n */\n runHook(name, node) {\n if (Jsep.hooks[name]) {\n const env = {\n context: this,\n node\n };\n Jsep.hooks.run(name, env);\n return env.node;\n }\n return node;\n }\n\n /**\n * Runs a given hook until one returns a node\n * @param {string} name\n * @returns {?jsep.Expression}\n */\n searchHook(name) {\n if (Jsep.hooks[name]) {\n const env = {\n context: this\n };\n Jsep.hooks[name].find(function (callback) {\n callback.call(env.context, env);\n return env.node;\n });\n return env.node;\n }\n }\n\n /**\n * Push `index` up to the next non-space character\n */\n gobbleSpaces() {\n let ch = this.code;\n // Whitespace\n while (ch === Jsep.SPACE_CODE || ch === Jsep.TAB_CODE || ch === Jsep.LF_CODE || ch === Jsep.CR_CODE) {\n ch = this.expr.charCodeAt(++this.index);\n }\n this.runHook('gobble-spaces');\n }\n\n /**\n * Top-level method to parse all expressions and returns compound or single node\n * @returns {jsep.Expression}\n */\n parse() {\n this.runHook('before-all');\n const nodes = this.gobbleExpressions();\n\n // If there's only one expression just try returning the expression\n const node = nodes.length === 1 ? nodes[0] : {\n type: Jsep.COMPOUND,\n body: nodes\n };\n return this.runHook('after-all', node);\n }\n\n /**\n * top-level parser (but can be reused within as well)\n * @param {number} [untilICode]\n * @returns {jsep.Expression[]}\n */\n gobbleExpressions(untilICode) {\n let nodes = [],\n ch_i,\n node;\n while (this.index < this.expr.length) {\n ch_i = this.code;\n\n // Expressions can be separated by semicolons, commas, or just inferred without any\n // separators\n if (ch_i === Jsep.SEMCOL_CODE || ch_i === Jsep.COMMA_CODE) {\n this.index++; // ignore separators\n } else {\n // Try to gobble each expression individually\n if (node = this.gobbleExpression()) {\n nodes.push(node);\n // If we weren't able to find a binary expression and are out of room, then\n // the expression passed in probably has too much\n } else if (this.index < this.expr.length) {\n if (ch_i === untilICode) {\n break;\n }\n this.throwError('Unexpected \"' + this.char + '\"');\n }\n }\n }\n return nodes;\n }\n\n /**\n * The main parsing function.\n * @returns {?jsep.Expression}\n */\n gobbleExpression() {\n const node = this.searchHook('gobble-expression') || this.gobbleBinaryExpression();\n this.gobbleSpaces();\n return this.runHook('after-expression', node);\n }\n\n /**\n * Search for the operation portion of the string (e.g. `+`, `===`)\n * Start by taking the longest possible binary operations (3 characters: `===`, `!==`, `>>>`)\n * and move down from 3 to 2 to 1 character until a matching binary operation is found\n * then, return that binary operation\n * @returns {string|boolean}\n */\n gobbleBinaryOp() {\n this.gobbleSpaces();\n let to_check = this.expr.substr(this.index, Jsep.max_binop_len);\n let tc_len = to_check.length;\n while (tc_len > 0) {\n // Don't accept a binary op when it is an identifier.\n // Binary ops that start with a identifier-valid character must be followed\n // by a non identifier-part valid character\n if (Jsep.binary_ops.hasOwnProperty(to_check) && (!Jsep.isIdentifierStart(this.code) || this.index + to_check.length < this.expr.length && !Jsep.isIdentifierPart(this.expr.charCodeAt(this.index + to_check.length)))) {\n this.index += tc_len;\n return to_check;\n }\n to_check = to_check.substr(0, --tc_len);\n }\n return false;\n }\n\n /**\n * This function is responsible for gobbling an individual expression,\n * e.g. `1`, `1+2`, `a+(b*2)-Math.sqrt(2)`\n * @returns {?jsep.BinaryExpression}\n */\n gobbleBinaryExpression() {\n let node, biop, prec, stack, biop_info, left, right, i, cur_biop;\n\n // First, try to get the leftmost thing\n // Then, check to see if there's a binary operator operating on that leftmost thing\n // Don't gobbleBinaryOp without a left-hand-side\n left = this.gobbleToken();\n if (!left) {\n return left;\n }\n biop = this.gobbleBinaryOp();\n\n // If there wasn't a binary operator, just return the leftmost node\n if (!biop) {\n return left;\n }\n\n // Otherwise, we need to start a stack to properly place the binary operations in their\n // precedence structure\n biop_info = {\n value: biop,\n prec: Jsep.binaryPrecedence(biop),\n right_a: Jsep.right_associative.has(biop)\n };\n right = this.gobbleToken();\n if (!right) {\n this.throwError(\"Expected expression after \" + biop);\n }\n stack = [left, biop_info, right];\n\n // Properly deal with precedence using [recursive descent](http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm)\n while (biop = this.gobbleBinaryOp()) {\n prec = Jsep.binaryPrecedence(biop);\n if (prec === 0) {\n this.index -= biop.length;\n break;\n }\n biop_info = {\n value: biop,\n prec,\n right_a: Jsep.right_associative.has(biop)\n };\n cur_biop = biop;\n\n // Reduce: make a binary expression from the three topmost entries.\n const comparePrev = prev => biop_info.right_a && prev.right_a ? prec > prev.prec : prec <= prev.prec;\n while (stack.length > 2 && comparePrev(stack[stack.length - 2])) {\n right = stack.pop();\n biop = stack.pop().value;\n left = stack.pop();\n node = {\n type: Jsep.BINARY_EXP,\n operator: biop,\n left,\n right\n };\n stack.push(node);\n }\n node = this.gobbleToken();\n if (!node) {\n this.throwError(\"Expected expression after \" + cur_biop);\n }\n stack.push(biop_info, node);\n }\n i = stack.length - 1;\n node = stack[i];\n while (i > 1) {\n node = {\n type: Jsep.BINARY_EXP,\n operator: stack[i - 1].value,\n left: stack[i - 2],\n right: node\n };\n i -= 2;\n }\n return node;\n }\n\n /**\n * An individual part of a binary expression:\n * e.g. `foo.bar(baz)`, `1`, `\"abc\"`, `(a % 2)` (because it's in parenthesis)\n * @returns {boolean|jsep.Expression}\n */\n gobbleToken() {\n let ch, to_check, tc_len, node;\n this.gobbleSpaces();\n node = this.searchHook('gobble-token');\n if (node) {\n return this.runHook('after-token', node);\n }\n ch = this.code;\n if (Jsep.isDecimalDigit(ch) || ch === Jsep.PERIOD_CODE) {\n // Char code 46 is a dot `.` which can start off a numeric literal\n return this.gobbleNumericLiteral();\n }\n if (ch === Jsep.SQUOTE_CODE || ch === Jsep.DQUOTE_CODE) {\n // Single or double quotes\n node = this.gobbleStringLiteral();\n } else if (ch === Jsep.OBRACK_CODE) {\n node = this.gobbleArray();\n } else {\n to_check = this.expr.substr(this.index, Jsep.max_unop_len);\n tc_len = to_check.length;\n while (tc_len > 0) {\n // Don't accept an unary op when it is an identifier.\n // Unary ops that start with a identifier-valid character must be followed\n // by a non identifier-part valid character\n if (Jsep.unary_ops.hasOwnProperty(to_check) && (!Jsep.isIdentifierStart(this.code) || this.index + to_check.length < this.expr.length && !Jsep.isIdentifierPart(this.expr.charCodeAt(this.index + to_check.length)))) {\n this.index += tc_len;\n const argument = this.gobbleToken();\n if (!argument) {\n this.throwError('missing unaryOp argument');\n }\n return this.runHook('after-token', {\n type: Jsep.UNARY_EXP,\n operator: to_check,\n argument,\n prefix: true\n });\n }\n to_check = to_check.substr(0, --tc_len);\n }\n if (Jsep.isIdentifierStart(ch)) {\n node = this.gobbleIdentifier();\n if (Jsep.literals.hasOwnProperty(node.name)) {\n node = {\n type: Jsep.LITERAL,\n value: Jsep.literals[node.name],\n raw: node.name\n };\n } else if (node.name === Jsep.this_str) {\n node = {\n type: Jsep.THIS_EXP\n };\n }\n } else if (ch === Jsep.OPAREN_CODE) {\n // open parenthesis\n node = this.gobbleGroup();\n }\n }\n if (!node) {\n return this.runHook('after-token', false);\n }\n node = this.gobbleTokenProperty(node);\n return this.runHook('after-token', node);\n }\n\n /**\n * Gobble properties of of identifiers/strings/arrays/groups.\n * e.g. `foo`, `bar.baz`, `foo['bar'].baz`\n * It also gobbles function calls:\n * e.g. `Math.acos(obj.angle)`\n * @param {jsep.Expression} node\n * @returns {jsep.Expression}\n */\n gobbleTokenProperty(node) {\n this.gobbleSpaces();\n let ch = this.code;\n while (ch === Jsep.PERIOD_CODE || ch === Jsep.OBRACK_CODE || ch === Jsep.OPAREN_CODE || ch === Jsep.QUMARK_CODE) {\n let optional;\n if (ch === Jsep.QUMARK_CODE) {\n if (this.expr.charCodeAt(this.index + 1) !== Jsep.PERIOD_CODE) {\n break;\n }\n optional = true;\n this.index += 2;\n this.gobbleSpaces();\n ch = this.code;\n }\n this.index++;\n if (ch === Jsep.OBRACK_CODE) {\n node = {\n type: Jsep.MEMBER_EXP,\n computed: true,\n object: node,\n property: this.gobbleExpression()\n };\n if (!node.property) {\n this.throwError('Unexpected \"' + this.char + '\"');\n }\n this.gobbleSpaces();\n ch = this.code;\n if (ch !== Jsep.CBRACK_CODE) {\n this.throwError('Unclosed [');\n }\n this.index++;\n } else if (ch === Jsep.OPAREN_CODE) {\n // A function call is being made; gobble all the arguments\n node = {\n type: Jsep.CALL_EXP,\n 'arguments': this.gobbleArguments(Jsep.CPAREN_CODE),\n callee: node\n };\n } else if (ch === Jsep.PERIOD_CODE || optional) {\n if (optional) {\n this.index--;\n }\n this.gobbleSpaces();\n node = {\n type: Jsep.MEMBER_EXP,\n computed: false,\n object: node,\n property: this.gobbleIdentifier()\n };\n }\n if (optional) {\n node.optional = true;\n } // else leave undefined for compatibility with esprima\n\n this.gobbleSpaces();\n ch = this.code;\n }\n return node;\n }\n\n /**\n * Parse simple numeric literals: `12`, `3.4`, `.5`. Do this by using a string to\n * keep track of everything in the numeric literal and then calling `parseFloat` on that string\n * @returns {jsep.Literal}\n */\n gobbleNumericLiteral() {\n let number = '',\n ch,\n chCode;\n while (Jsep.isDecimalDigit(this.code)) {\n number += this.expr.charAt(this.index++);\n }\n if (this.code === Jsep.PERIOD_CODE) {\n // can start with a decimal marker\n number += this.expr.charAt(this.index++);\n while (Jsep.isDecimalDigit(this.code)) {\n number += this.expr.charAt(this.index++);\n }\n }\n ch = this.char;\n if (ch === 'e' || ch === 'E') {\n // exponent marker\n number += this.expr.charAt(this.index++);\n ch = this.char;\n if (ch === '+' || ch === '-') {\n // exponent sign\n number += this.expr.charAt(this.index++);\n }\n while (Jsep.isDecimalDigit(this.code)) {\n // exponent itself\n number += this.expr.charAt(this.index++);\n }\n if (!Jsep.isDecimalDigit(this.expr.charCodeAt(this.index - 1))) {\n this.throwError('Expected exponent (' + number + this.char + ')');\n }\n }\n chCode = this.code;\n\n // Check to make sure this isn't a variable name that start with a number (123abc)\n if (Jsep.isIdentifierStart(chCode)) {\n this.throwError('Variable names cannot start with a number (' + number + this.char + ')');\n } else if (chCode === Jsep.PERIOD_CODE || number.length === 1 && number.charCodeAt(0) === Jsep.PERIOD_CODE) {\n this.throwError('Unexpected period');\n }\n return {\n type: Jsep.LITERAL,\n value: parseFloat(number),\n raw: number\n };\n }\n\n /**\n * Parses a string literal, staring with single or double quotes with basic support for escape codes\n * e.g. `\"hello world\"`, `'this is\\nJSEP'`\n * @returns {jsep.Literal}\n */\n gobbleStringLiteral() {\n let str = '';\n const startIndex = this.index;\n const quote = this.expr.charAt(this.index++);\n let closed = false;\n while (this.index < this.expr.length) {\n let ch = this.expr.charAt(this.index++);\n if (ch === quote) {\n closed = true;\n break;\n } else if (ch === '\\\\') {\n // Check for all of the common escape codes\n ch = this.expr.charAt(this.index++);\n switch (ch) {\n case 'n':\n str += '\\n';\n break;\n case 'r':\n str += '\\r';\n break;\n case 't':\n str += '\\t';\n break;\n case 'b':\n str += '\\b';\n break;\n case 'f':\n str += '\\f';\n break;\n case 'v':\n str += '\\x0B';\n break;\n default:\n str += ch;\n }\n } else {\n str += ch;\n }\n }\n if (!closed) {\n this.throwError('Unclosed quote after \"' + str + '\"');\n }\n return {\n type: Jsep.LITERAL,\n value: str,\n raw: this.expr.substring(startIndex, this.index)\n };\n }\n\n /**\n * Gobbles only identifiers\n * e.g.: `foo`, `_value`, `$x1`\n * Also, this function checks if that identifier is a literal:\n * (e.g. `true`, `false`, `null`) or `this`\n * @returns {jsep.Identifier}\n */\n gobbleIdentifier() {\n let ch = this.code,\n start = this.index;\n if (Jsep.isIdentifierStart(ch)) {\n this.index++;\n } else {\n this.throwError('Unexpected ' + this.char);\n }\n while (this.index < this.expr.length) {\n ch = this.code;\n if (Jsep.isIdentifierPart(ch)) {\n this.index++;\n } else {\n break;\n }\n }\n return {\n type: Jsep.IDENTIFIER,\n name: this.expr.slice(start, this.index)\n };\n }\n\n /**\n * Gobbles a list of arguments within the context of a function call\n * or array literal. This function also assumes that the opening character\n * `(` or `[` has already been gobbled, and gobbles expressions and commas\n * until the terminator character `)` or `]` is encountered.\n * e.g. `foo(bar, baz)`, `my_func()`, or `[bar, baz]`\n * @param {number} termination\n * @returns {jsep.Expression[]}\n */\n gobbleArguments(termination) {\n const args = [];\n let closed = false;\n let separator_count = 0;\n while (this.index < this.expr.length) {\n this.gobbleSpaces();\n let ch_i = this.code;\n if (ch_i === termination) {\n // done parsing\n closed = true;\n this.index++;\n if (termination === Jsep.CPAREN_CODE && separator_count && separator_count >= args.length) {\n this.throwError('Unexpected token ' + String.fromCharCode(termination));\n }\n break;\n } else if (ch_i === Jsep.COMMA_CODE) {\n // between expressions\n this.index++;\n separator_count++;\n if (separator_count !== args.length) {\n // missing argument\n if (termination === Jsep.CPAREN_CODE) {\n this.throwError('Unexpected token ,');\n } else if (termination === Jsep.CBRACK_CODE) {\n for (let arg = args.length; arg < separator_count; arg++) {\n args.push(null);\n }\n }\n }\n } else if (args.length !== separator_count && separator_count !== 0) {\n // NOTE: `&& separator_count !== 0` allows for either all commas, or all spaces as arguments\n this.throwError('Expected comma');\n } else {\n const node = this.gobbleExpression();\n if (!node || node.type === Jsep.COMPOUND) {\n this.throwError('Expected comma');\n }\n args.push(node);\n }\n }\n if (!closed) {\n this.throwError('Expected ' + String.fromCharCode(termination));\n }\n return args;\n }\n\n /**\n * Responsible for parsing a group of things within parentheses `()`\n * that have no identifier in front (so not a function call)\n * This function assumes that it needs to gobble the opening parenthesis\n * and then tries to gobble everything within that parenthesis, assuming\n * that the next thing it should see is the close parenthesis. If not,\n * then the expression probably doesn't have a `)`\n * @returns {boolean|jsep.Expression}\n */\n gobbleGroup() {\n this.index++;\n let nodes = this.gobbleExpressions(Jsep.CPAREN_CODE);\n if (this.code === Jsep.CPAREN_CODE) {\n this.index++;\n if (nodes.length === 1) {\n return nodes[0];\n } else if (!nodes.length) {\n return false;\n } else {\n return {\n type: Jsep.SEQUENCE_EXP,\n expressions: nodes\n };\n }\n } else {\n this.throwError('Unclosed (');\n }\n }\n\n /**\n * Responsible for parsing Array literals `[1, 2, 3]`\n * This function assumes that it needs to gobble the opening bracket\n * and then tries to gobble the expressions as arguments.\n * @returns {jsep.ArrayExpression}\n */\n gobbleArray() {\n this.index++;\n return {\n type: Jsep.ARRAY_EXP,\n elements: this.gobbleArguments(Jsep.CBRACK_CODE)\n };\n }\n}\n\n// Static fields:\nconst hooks = new Hooks();\nObject.assign(Jsep, {\n hooks,\n plugins: new Plugins(Jsep),\n // Node Types\n // ----------\n // This is the full set of types that any JSEP node can be.\n // Store them here to save space when minified\n COMPOUND: 'Compound',\n SEQUENCE_EXP: 'SequenceExpression',\n IDENTIFIER: 'Identifier',\n MEMBER_EXP: 'MemberExpression',\n LITERAL: 'Literal',\n THIS_EXP: 'ThisExpression',\n CALL_EXP: 'CallExpression',\n UNARY_EXP: 'UnaryExpression',\n BINARY_EXP: 'BinaryExpression',\n ARRAY_EXP: 'ArrayExpression',\n TAB_CODE: 9,\n LF_CODE: 10,\n CR_CODE: 13,\n SPACE_CODE: 32,\n PERIOD_CODE: 46,\n // '.'\n COMMA_CODE: 44,\n // ','\n SQUOTE_CODE: 39,\n // single quote\n DQUOTE_CODE: 34,\n // double quotes\n OPAREN_CODE: 40,\n // (\n CPAREN_CODE: 41,\n // )\n OBRACK_CODE: 91,\n // [\n CBRACK_CODE: 93,\n // ]\n QUMARK_CODE: 63,\n // ?\n SEMCOL_CODE: 59,\n // ;\n COLON_CODE: 58,\n // :\n\n // Operations\n // ----------\n // Use a quickly-accessible map to store all of the unary operators\n // Values are set to `1` (it really doesn't matter)\n unary_ops: {\n '-': 1,\n '!': 1,\n '~': 1,\n '+': 1\n },\n // Also use a map for the binary operations but set their values to their\n // binary precedence for quick reference (higher number = higher precedence)\n // see [Order of operations](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence)\n binary_ops: {\n '||': 1,\n '??': 1,\n '&&': 2,\n '|': 3,\n '^': 4,\n '&': 5,\n '==': 6,\n '!=': 6,\n '===': 6,\n '!==': 6,\n '<': 7,\n '>': 7,\n '<=': 7,\n '>=': 7,\n '<<': 8,\n '>>': 8,\n '>>>': 8,\n '+': 9,\n '-': 9,\n '*': 10,\n '/': 10,\n '%': 10,\n '**': 11\n },\n // sets specific binary_ops as right-associative\n right_associative: new Set(['**']),\n // Additional valid identifier chars, apart from a-z, A-Z and 0-9 (except on the starting char)\n additional_identifier_chars: new Set(['$', '_']),\n // Literals\n // ----------\n // Store the values to return for the various literals we may encounter\n literals: {\n 'true': true,\n 'false': false,\n 'null': null\n },\n // Except for `this`, which is special. This could be changed to something like `'self'` as well\n this_str: 'this'\n});\nJsep.max_unop_len = Jsep.getMaxKeyLen(Jsep.unary_ops);\nJsep.max_binop_len = Jsep.getMaxKeyLen(Jsep.binary_ops);\n\n// Backward Compatibility:\nconst jsep = expr => new Jsep(expr).parse();\nconst stdClassProps = Object.getOwnPropertyNames(class Test {});\nObject.getOwnPropertyNames(Jsep).filter(prop => !stdClassProps.includes(prop) && jsep[prop] === undefined).forEach(m => {\n jsep[m] = Jsep[m];\n});\njsep.Jsep = Jsep; // allows for const { Jsep } = require('jsep');\n\nconst CONDITIONAL_EXP = 'ConditionalExpression';\nvar ternary = {\n name: 'ternary',\n init(jsep) {\n // Ternary expression: test ? consequent : alternate\n jsep.hooks.add('after-expression', function gobbleTernary(env) {\n if (env.node && this.code === jsep.QUMARK_CODE) {\n this.index++;\n const test = env.node;\n const consequent = this.gobbleExpression();\n if (!consequent) {\n this.throwError('Expected expression');\n }\n this.gobbleSpaces();\n if (this.code === jsep.COLON_CODE) {\n this.index++;\n const alternate = this.gobbleExpression();\n if (!alternate) {\n this.throwError('Expected expression');\n }\n env.node = {\n type: CONDITIONAL_EXP,\n test,\n consequent,\n alternate\n };\n\n // check for operators of higher priority than ternary (i.e. assignment)\n // jsep sets || at 1, and assignment at 0.9, and conditional should be between them\n if (test.operator && jsep.binary_ops[test.operator] <= 0.9) {\n let newTest = test;\n while (newTest.right.operator && jsep.binary_ops[newTest.right.operator] <= 0.9) {\n newTest = newTest.right;\n }\n env.node.test = newTest.right;\n newTest.right = env.node;\n env.node = test;\n }\n } else {\n this.throwError('Expected :');\n }\n }\n });\n }\n};\n\n// Add default plugins:\n\njsep.plugins.register(ternary);\n\nconst FSLASH_CODE = 47; // '/'\nconst BSLASH_CODE = 92; // '\\\\'\n\nvar index = {\n name: 'regex',\n init(jsep) {\n // Regex literal: /abc123/ig\n jsep.hooks.add('gobble-token', function gobbleRegexLiteral(env) {\n if (this.code === FSLASH_CODE) {\n const patternIndex = ++this.index;\n let inCharSet = false;\n while (this.index < this.expr.length) {\n if (this.code === FSLASH_CODE && !inCharSet) {\n const pattern = this.expr.slice(patternIndex, this.index);\n let flags = '';\n while (++this.index < this.expr.length) {\n const code = this.code;\n if (code >= 97 && code <= 122 // a...z\n || code >= 65 && code <= 90 // A...Z\n || code >= 48 && code <= 57) {\n // 0-9\n flags += this.char;\n } else {\n break;\n }\n }\n let value;\n try {\n value = new RegExp(pattern, flags);\n } catch (e) {\n this.throwError(e.message);\n }\n env.node = {\n type: jsep.LITERAL,\n value,\n raw: this.expr.slice(patternIndex - 1, this.index)\n };\n\n // allow . [] and () after regex: /regex/.test(a)\n env.node = this.gobbleTokenProperty(env.node);\n return env.node;\n }\n if (this.code === jsep.OBRACK_CODE) {\n inCharSet = true;\n } else if (inCharSet && this.code === jsep.CBRACK_CODE) {\n inCharSet = false;\n }\n this.index += this.code === BSLASH_CODE ? 2 : 1;\n }\n this.throwError('Unclosed Regex');\n }\n });\n }\n};\n\nconst PLUS_CODE = 43; // +\nconst MINUS_CODE = 45; // -\n\nconst plugin = {\n name: 'assignment',\n assignmentOperators: new Set(['=', '*=', '**=', '/=', '%=', '+=', '-=', '<<=', '>>=', '>>>=', '&=', '^=', '|=', '||=', '&&=', '??=']),\n updateOperators: [PLUS_CODE, MINUS_CODE],\n assignmentPrecedence: 0.9,\n init(jsep) {\n const updateNodeTypes = [jsep.IDENTIFIER, jsep.MEMBER_EXP];\n plugin.assignmentOperators.forEach(op => jsep.addBinaryOp(op, plugin.assignmentPrecedence, true));\n jsep.hooks.add('gobble-token', function gobbleUpdatePrefix(env) {\n const code = this.code;\n if (plugin.updateOperators.some(c => c === code && c === this.expr.charCodeAt(this.index + 1))) {\n this.index += 2;\n env.node = {\n type: 'UpdateExpression',\n operator: code === PLUS_CODE ? '++' : '--',\n argument: this.gobbleTokenProperty(this.gobbleIdentifier()),\n prefix: true\n };\n if (!env.node.argument || !updateNodeTypes.includes(env.node.argument.type)) {\n this.throwError(`Unexpected ${env.node.operator}`);\n }\n }\n });\n jsep.hooks.add('after-token', function gobbleUpdatePostfix(env) {\n if (env.node) {\n const code = this.code;\n if (plugin.updateOperators.some(c => c === code && c === this.expr.charCodeAt(this.index + 1))) {\n if (!updateNodeTypes.includes(env.node.type)) {\n this.throwError(`Unexpected ${env.node.operator}`);\n }\n this.index += 2;\n env.node = {\n type: 'UpdateExpression',\n operator: code === PLUS_CODE ? '++' : '--',\n argument: env.node,\n prefix: false\n };\n }\n }\n });\n jsep.hooks.add('after-expression', function gobbleAssignment(env) {\n if (env.node) {\n // Note: Binaries can be chained in a single expression to respect\n // operator precedence (i.e. a = b = 1 + 2 + 3)\n // Update all binary assignment nodes in the tree\n updateBinariesToAssignments(env.node);\n }\n });\n function updateBinariesToAssignments(node) {\n if (plugin.assignmentOperators.has(node.operator)) {\n node.type = 'AssignmentExpression';\n updateBinariesToAssignments(node.left);\n updateBinariesToAssignments(node.right);\n } else if (!node.operator) {\n Object.values(node).forEach(val => {\n if (val && typeof val === 'object') {\n updateBinariesToAssignments(val);\n }\n });\n }\n }\n }\n};\n\n/* eslint-disable no-bitwise -- Convenient */\n\n// register plugins\njsep.plugins.register(index, plugin);\njsep.addUnaryOp('typeof');\njsep.addUnaryOp('void');\njsep.addLiteral('null', null);\njsep.addLiteral('undefined', undefined);\nconst BLOCKED_PROTO_PROPERTIES = new Set(['constructor', '__proto__', '__defineGetter__', '__defineSetter__', '__lookupGetter__', '__lookupSetter__']);\nconst SafeEval = {\n /**\n * @param {jsep.Expression} ast\n * @param {Record<string, any>} subs\n */\n evalAst(ast, subs) {\n switch (ast.type) {\n case 'BinaryExpression':\n case 'LogicalExpression':\n return SafeEval.evalBinaryExpression(ast, subs);\n case 'Compound':\n return SafeEval.evalCompound(ast, subs);\n case 'ConditionalExpression':\n return SafeEval.evalConditionalExpression(ast, subs);\n case 'Identifier':\n return SafeEval.evalIdentifier(ast, subs);\n case 'Literal':\n return SafeEval.evalLiteral(ast, subs);\n case 'MemberExpression':\n return SafeEval.evalMemberExpression(ast, subs);\n case 'UnaryExpression':\n return SafeEval.evalUnaryExpression(ast, subs);\n case 'ArrayExpression':\n return SafeEval.evalArrayExpression(ast, subs);\n case 'CallExpression':\n return SafeEval.evalCallExpression(ast, subs);\n case 'AssignmentExpression':\n return SafeEval.evalAssignmentExpression(ast, subs);\n default:\n throw SyntaxError('Unexpected expression', ast);\n }\n },\n evalBinaryExpression(ast, subs) {\n const result = {\n '||': (a, b) => a || b(),\n '&&': (a, b) => a && b(),\n '|': (a, b) => a | b(),\n '^': (a, b) => a ^ b(),\n '&': (a, b) => a & b(),\n // eslint-disable-next-line eqeqeq -- API\n '==': (a, b) => a == b(),\n // eslint-disable-next-line eqeqeq -- API\n '!=': (a, b) => a != b(),\n '===': (a, b) => a === b(),\n '!==': (a, b) => a !== b(),\n '<': (a, b) => a < b(),\n '>': (a, b) => a > b(),\n '<=': (a, b) => a <= b(),\n '>=': (a, b) => a >= b(),\n '<<': (a, b) => a << b(),\n '>>': (a, b) => a >> b(),\n '>>>': (a, b) => a >>> b(),\n '+': (a, b) => a + b(),\n '-': (a, b) => a - b(),\n '*': (a, b) => a * b(),\n '/': (a, b) => a / b(),\n '%': (a, b) => a % b()\n }[ast.operator](SafeEval.evalAst(ast.left, subs), () => SafeEval.evalAst(ast.right, subs));\n return result;\n },\n evalCompound(ast, subs) {\n let last;\n for (let i = 0; i < ast.body.length; i++) {\n if (ast.body[i].type === 'Identifier' && ['var', 'let', 'const'].includes(ast.body[i].name) && ast.body[i + 1] && ast.body[i + 1].type === 'AssignmentExpression') {\n // var x=2; is detected as\n // [{Identifier var}, {AssignmentExpression x=2}]\n // eslint-disable-next-line @stylistic/max-len -- Long\n // eslint-disable-next-line sonarjs/updated-loop-counter -- Convenient\n i += 1;\n }\n const expr = ast.body[i];\n last = SafeEval.evalAst(expr, subs);\n }\n return last;\n },\n evalConditionalExpression(ast, subs) {\n if (SafeEval.evalAst(ast.test, subs)) {\n return SafeEval.evalAst(ast.consequent, subs);\n }\n return SafeEval.evalAst(ast.alternate, subs);\n },\n evalIdentifier(ast, subs) {\n if (Object.hasOwn(subs, ast.name)) {\n return subs[ast.name];\n }\n throw ReferenceError(`${ast.name} is not defined`);\n },\n evalLiteral(ast) {\n return ast.value;\n },\n evalMemberExpression(ast, subs) {\n const prop = String(\n // NOTE: `String(value)` throws error when\n // value has overwritten the toString method to return non-string\n // i.e. `value = {toString: () => []}`\n ast.computed ? SafeEval.evalAst(ast.property) // `object[property]`\n : ast.property.name // `object.property` property is Identifier\n );\n const obj = SafeEval.evalAst(ast.object, subs);\n if (obj === undefined || obj === null) {\n throw TypeError(`Cannot read properties of ${obj} (reading '${prop}')`);\n }\n if (!Object.hasOwn(obj, prop) && BLOCKED_PROTO_PROPERTIES.has(prop)) {\n throw TypeError(`Cannot read properties of ${obj} (reading '${prop}')`);\n }\n const result = obj[prop];\n if (typeof result === 'function') {\n return result.bind(obj); // arrow functions aren't affected by bind.\n }\n return result;\n },\n evalUnaryExpression(ast, subs) {\n const result = {\n '-': a => -SafeEval.evalAst(a, subs),\n '!': a => !SafeEval.evalAst(a, subs),\n '~': a => ~SafeEval.evalAst(a, subs),\n // eslint-disable-next-line no-implicit-coercion -- API\n '+': a => +SafeEval.evalAst(a, subs),\n typeof: a => typeof SafeEval.evalAst(a, subs),\n // eslint-disable-next-line no-void, sonarjs/void-use -- feature\n void: a => void SafeEval.evalAst(a, subs)\n }[ast.operator](ast.argument);\n return result;\n },\n evalArrayExpression(ast, subs) {\n return ast.elements.map(el => SafeEval.evalAst(el, subs));\n },\n evalCallExpression(ast, subs) {\n const args = ast.arguments.map(arg => SafeEval.evalAst(arg, subs));\n const func = SafeEval.evalAst(ast.callee, subs);\n /* c8 ignore start */\n if (func === Function) {\n // unreachable since BLOCKED_PROTO_PROPERTIES includes 'constructor'\n throw new Error('Function constructor is disabled');\n }\n /* c8 ignore end */\n return func(...args);\n },\n evalAssignmentExpression(ast, subs) {\n if (ast.left.type !== 'Identifier') {\n throw SyntaxError('Invalid left-hand side in assignment');\n }\n const id = ast.left.name;\n const value = SafeEval.evalAst(ast.right, subs);\n subs[id] = value;\n return subs[id];\n }\n};\n\n/**\n * A replacement for NodeJS' VM.Script which is also {@link https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP | Content Security Policy} friendly.\n */\nclass SafeScript {\n /**\n * @param {string} expr Expression to evaluate\n */\n constructor(expr) {\n this.code = expr;\n this.ast = jsep(this.code);\n }\n\n /**\n * @param {object} context Object whose items will be added\n * to evaluation\n * @returns {EvaluatedResult} Result of evaluated code\n */\n runInNewContext(context) {\n // `Object.create(null)` creates a prototypeless object\n const keyMap = Object.assign(Object.create(null), context);\n return SafeEval.evalAst(this.ast, keyMap);\n }\n}\n\n/* eslint-disable camelcase -- Convenient for escaping */\n\n\n/**\n * @typedef {null|boolean|number|string|object|GenericArray} JSONObject\n */\n\n/**\n * @typedef {any} AnyItem\n */\n\n/**\n * @typedef {any} AnyResult\n */\n\n/**\n * Copies array and then pushes item into it.\n * @param {GenericArray} arr Array to copy and into which to push\n * @param {AnyItem} item Array item to add (to end)\n * @returns {GenericArray} Copy of the original array\n */\nfunction push(arr, item) {\n arr = arr.slice();\n arr.push(item);\n return arr;\n}\n/**\n * Copies array and then unshifts item into it.\n * @param {AnyItem} item Array item to add (to beginning)\n * @param {GenericArray} arr Array to copy and into which to unshift\n * @returns {GenericArray} Copy of the original array\n */\nfunction unshift(item, arr) {\n arr = arr.slice();\n arr.unshift(item);\n return arr;\n}\n\n/**\n * Caught when JSONPath is used without `new` but rethrown if with `new`\n * @extends Error\n */\nclass NewError extends Error {\n /**\n * @param {AnyResult} value The evaluated scalar value\n */\n constructor(value) {\n super('JSONPath should not be called with \"new\" (it prevents return ' + 'of (unwrapped) scalar values)');\n this.avoidNew = true;\n this.value = value;\n this.name = 'NewError';\n }\n}\n\n/**\n* @typedef {object} ReturnObject\n* @property {string} path\n* @property {JSONObject} value\n* @property {object|GenericArray} parent\n* @property {string} parentProperty\n*/\n\n/**\n* @callback JSONPathCallback\n* @param {string|object} preferredOutput\n* @param {\"value\"|\"property\"} type\n* @param {ReturnObject} fullRetObj\n* @returns {void}\n*/\n\n/**\n* @callback OtherTypeCallback\n* @param {JSONObject} val\n* @param {string} path\n* @param {object|GenericArray} parent\n* @param {string} parentPropName\n* @returns {boolean}\n*/\n\n/**\n * @typedef {any} ContextItem\n */\n\n/**\n * @typedef {any} EvaluatedResult\n */\n\n/**\n* @callback EvalCallback\n* @param {string} code\n* @param {ContextItem} context\n* @returns {EvaluatedResult}\n*/\n\n/**\n * @typedef {typeof SafeScript} EvalClass\n */\n\n/**\n * @typedef {object} JSONPathOptions\n * @property {JSON} json\n * @property {string|string[]} path\n * @property {\"value\"|\"path\"|\"pointer\"|\"parent\"|\"parentProperty\"|\n * \"all\"} [resultType=\"value\"]\n * @property {boolean} [flatten=false]\n * @property {boolean} [wrap=true]\n * @property {object} [sandbox={}]\n * @property {EvalCallback|EvalClass|'safe'|'native'|\n * boolean} [eval = 'safe']\n * @property {object|GenericArray|null} [parent=null]\n * @property {string|null} [parentProperty=null]\n * @property {JSONPathCallback} [callback]\n * @property {OtherTypeCallback} [otherTypeCallback] Defaults to\n * function which throws on encountering `@other`\n * @property {boolean} [autostart=true]\n */\n\n/**\n * @param {string|JSONPathOptions} opts If a string, will be treated as `expr`\n * @param {string} [expr] JSON path to evaluate\n * @param {JSON} [obj] JSON object to evaluate against\n * @param {JSONPathCallback} [callback] Passed 3 arguments: 1) desired payload\n * per `resultType`, 2) `\"value\"|\"property\"`, 3) Full returned object with\n * all payloads\n * @param {OtherTypeCallback} [otherTypeCallback] If `@other()` is at the end\n * of one's query, this will be invoked with the value of the item, its\n * path, its parent, and its parent's property name, and it should return\n * a boolean indicating whether the supplied value belongs to the \"other\"\n * type or not (or it may handle transformations and return `false`).\n * @returns {JSONPath}\n * @class\n */\nfunction JSONPath(opts, expr, obj, callback, otherTypeCallback) {\n // eslint-disable-next-line no-restricted-syntax -- Allow for pseudo-class\n if (!(this instanceof JSONPath)) {\n try {\n return new JSONPath(opts, expr, obj, callback, otherTypeCallback);\n } catch (e) {\n if (!e.avoidNew) {\n throw e;\n }\n return e.value;\n }\n }\n if (typeof opts === 'string') {\n otherTypeCallback = callback;\n callback = obj;\n obj = expr;\n expr = opts;\n opts = null;\n }\n const optObj = opts && typeof opts === 'object';\n opts = opts || {};\n this.json = opts.json || obj;\n this.path = opts.path || expr;\n this.resultType = opts.resultType || 'value';\n this.flatten = opts.flatten || false;\n this.wrap = Object.hasOwn(opts, 'wrap') ? opts.wrap : true;\n this.sandbox = opts.sandbox || {};\n this.eval = opts.eval === undefined ? 'safe' : opts.eval;\n this.ignoreEvalErrors = typeof opts.ignoreEvalErrors === 'undefined' ? false : opts.ignoreEvalErrors;\n this.parent = opts.parent || null;\n this.parentProperty = opts.parentProperty || null;\n this.callback = opts.callback || callback || null;\n this.otherTypeCallback = opts.otherTypeCallback || otherTypeCallback || function () {\n throw new TypeError('You must supply an otherTypeCallback callback option ' + 'with the @other() operator.');\n };\n if (opts.autostart !== false) {\n const args = {\n path: optObj ? opts.path : expr\n };\n if (!optObj) {\n args.json = obj;\n } else if ('json' in opts) {\n args.json = opts.json;\n }\n const ret = this.evaluate(args);\n if (!ret || typeof ret !== 'object') {\n throw new NewError(ret);\n }\n return ret;\n }\n}\n\n// PUBLIC METHODS\nJSONPath.prototype.evaluate = function (expr, json, callback, otherTypeCallback) {\n let currParent = this.parent,\n currParentProperty = this.parentProperty;\n let {\n flatten,\n wrap\n } = this;\n this.currResultType = this.resultType;\n this.currEval = this.eval;\n this.currSandbox = this.sandbox;\n callback = callback || this.callback;\n this.currOtherTypeCallback = otherTypeCallback || this.otherTypeCallback;\n json = json || this.json;\n expr = expr || this.path;\n if (expr && typeof expr === 'object' && !Array.isArray(expr)) {\n if (!expr.path && expr.path !== '') {\n throw new TypeError('You must supply a \"path\" property when providing an object ' + 'argument to JSONPath.evaluate().');\n }\n if (!Object.hasOwn(expr, 'json')) {\n throw new TypeError('You must supply a \"json\" property when providing an object ' + 'argument to JSONPath.evaluate().');\n }\n ({\n json\n } = expr);\n flatten = Object.hasOwn(expr, 'flatten') ? expr.flatten : flatten;\n this.currResultType = Object.hasOwn(expr, 'resultType') ? expr.resultType : this.currResultType;\n this.currSandbox = Object.hasOwn(expr, 'sandbox') ? expr.sandbox : this.currSandbox;\n wrap = Object.hasOwn(expr, 'wrap') ? expr.wrap : wrap;\n this.currEval = Object.hasOwn(expr, 'eval') ? expr.eval : this.currEval;\n callback = Object.hasOwn(expr, 'callback') ? expr.callback : callback;\n this.currOtherTypeCallback = Object.hasOwn(expr, 'otherTypeCallback') ? expr.otherTypeCallback : this.currOtherTypeCallback;\n currParent = Object.hasOwn(expr, 'parent') ? expr.parent : currParent;\n currParentProperty = Object.hasOwn(expr, 'parentProperty') ? expr.parentProperty : currParentProperty;\n expr = expr.path;\n }\n currParent = currParent || null;\n currParentProperty = currParentProperty || null;\n if (Array.isArray(expr)) {\n expr = JSONPath.toPathString(expr);\n }\n if (!expr && expr !== '' || !json) {\n return undefined;\n }\n const exprList = JSONPath.toPathArray(expr);\n if (exprList[0] === '$' && exprList.length > 1) {\n exprList.shift();\n }\n this._hasParentSelector = null;\n const result = this._trace(exprList, json, ['$'], currParent, currParentProperty, callback).filter(function (ea) {\n return ea && !ea.isParentSelector;\n });\n if (!result.length) {\n return wrap ? [] : undefined;\n }\n if (!wrap && result.length === 1 && !result[0].hasArrExpr) {\n return this._getPreferredOutput(result[0]);\n }\n return result.reduce((rslt, ea) => {\n const valOrPath = this._getPreferredOutput(ea);\n if (flatten && Array.isArray(valOrPath)) {\n rslt = rslt.concat(valOrPath);\n } else {\n rslt.push(valOrPath);\n }\n return rslt;\n }, []);\n};\n\n// PRIVATE METHODS\n\nJSONPath.prototype._getPreferredOutput = function (ea) {\n const resultType = this.currResultType;\n switch (resultType) {\n case 'all':\n {\n const path = Array.isArray(ea.path) ? ea.path : JSONPath.toPathArray(ea.path);\n ea.pointer = JSONPath.toPointer(path);\n ea.path = typeof ea.path === 'string' ? ea.path : JSONPath.toPathString(ea.path);\n return ea;\n }\n case 'value':\n case 'parent':\n case 'parentProperty':\n return ea[resultType];\n case 'path':\n return JSONPath.toPathString(ea[resultType]);\n case 'pointer':\n return JSONPath.toPointer(ea.path);\n default:\n throw new TypeError('Unknown result type');\n }\n};\nJSONPath.prototype._handleCallback = function (fullRetObj, callback, type) {\n if (callback) {\n const preferredOutput = this._getPreferredOutput(fullRetObj);\n fullRetObj.path = typeof fullRetObj.path === 'string' ? fullRetObj.path : JSONPath.toPathString(fullRetObj.path);\n // eslint-disable-next-line n/callback-return -- No need to return\n callback(preferredOutput, type, fullRetObj);\n }\n};\n\n/**\n *\n * @param {string} expr\n * @param {JSONObject} val\n * @param {string} path\n * @param {object|GenericArray} parent\n * @param {string} parentPropName\n * @param {JSONPathCallback} callback\n * @param {boolean} hasArrExpr\n * @param {boolean} literalPriority\n * @returns {ReturnObject|ReturnObject[]}\n */\nJSONPath.prototype._trace = function (expr, val, path, parent, parentPropName, callback, hasArrExpr, literalPriority) {\n // No expr to follow? return path and value as the result of\n // this trace branch\n let retObj;\n if (!expr.length) {\n retObj = {\n path,\n value: val,\n parent,\n parentProperty: parentPropName,\n hasArrExpr\n };\n this._handleCallback(retObj, callback, 'value');\n return retObj;\n }\n const loc = expr[0],\n x = expr.slice(1);\n\n // We need to gather the return value of recursive trace calls in order to\n // do the parent sel computation.\n const ret = [];\n /**\n *\n * @param {ReturnObject|ReturnObject[]} elems\n * @returns {void}\n */\n function addRet(elems) {\n if (Array.isArray(elems)) {\n // This was causing excessive stack size in Node (with or\n // without Babel) against our performance test:\n // `ret.push(...elems);`\n elems.forEach(t => {\n ret.push(t);\n });\n } else {\n ret.push(elems);\n }\n }\n if ((typeof loc !== 'string' || literalPriority) && val && Object.hasOwn(val, loc)) {\n // simple case--directly follow property\n addRet(this._trace(x, val[loc], push(path, loc), val, loc, callback, hasArrExpr));\n // eslint-disable-next-line unicorn/prefer-switch -- Part of larger `if`\n } else if (loc === '*') {\n // all child properties\n this._walk(val, m => {\n addRet(this._trace(x, val[m], push(path, m), val, m, callback, true, true));\n });\n } else if (loc === '..') {\n // all descendent parent properties\n // Check remaining expression with val's immediate children\n addRet(this._trace(x, val, path, parent, parentPropName, callback, hasArrExpr));\n this._walk(val, m => {\n // We don't join m and x here because we only want parents,\n // not scalar values\n if (typeof val[m] === 'object') {\n // Keep going with recursive descent on val's\n // object children\n addRet(this._trace(expr.slice(), val[m], push(path, m), val, m, callback, true));\n }\n });\n // The parent sel computation is handled in the frame above using the\n // ancestor object of val\n } else if (loc === '^') {\n // This is not a final endpoint, so we do not invoke the callback here\n this._hasParentSelector = true;\n return {\n path: path.slice(0, -1),\n expr: x,\n isParentSelector: true\n };\n } else if (loc === '~') {\n // property name\n retObj = {\n path: push(path, loc),\n value: parentPropName,\n parent,\n parentProperty: null\n };\n this._handleCallback(retObj, callback, 'property');\n return retObj;\n } else if (loc === '$') {\n // root only\n addRet(this._trace(x, val, path, null, null, callback, hasArrExpr));\n } else if (/^(-?\\d*):(-?\\d*):?(\\d*)$/u.test(loc)) {\n // [start:end:step] Python slice syntax\n addRet(this._slice(loc, x, val, path, parent, parentPropName, callback));\n } else if (loc.indexOf('?(') === 0) {\n // [?(expr)] (filtering)\n if (this.currEval === false) {\n throw new Error('Eval [?(expr)] prevented in JSONPath expression.');\n }\n const safeLoc = loc.replace(/^\\?\\((.*?)\\)$/u, '$1');\n // check for a nested filter expression\n const nested = /@.?([^?]*)[['](\\??\\(.*?\\))(?!.\\)\\])[\\]']/gu.exec(safeLoc);\n if (nested) {\n // find if there are matches in the nested expression\n // add them to the result set if there is at least one match\n this._walk(val, m => {\n const npath = [nested[2]];\n const nvalue = nested[1] ? val[m][nested[1]] : val[m];\n const filterResults = this._trace(npath, nvalue, path, parent, parentPropName, callback, true);\n if (filterResults.length > 0) {\n addRet(this._trace(x, val[m], push(path, m), val, m, callback, true));\n }\n });\n } else {\n this._walk(val, m => {\n if (this._eval(safeLoc, val[m], m, path, parent, parentPropName)) {\n addRet(this._trace(x, val[m], push(path, m), val, m, callback, true));\n }\n });\n }\n } else if (loc[0] === '(') {\n // [(expr)] (dynamic property/index)\n if (this.currEval === false) {\n throw new Error('Eval [(expr)] prevented in JSONPath expression.');\n }\n // As this will resolve to a property name (but we don't know it\n // yet), property and parent information is relative to the\n // parent of the property to which this expression will resolve\n addRet(this._trace(unshift(this._eval(loc, val, path.at(-1), path.slice(0, -1), parent, parentPropName), x), val, path, parent, parentPropName, callback, hasArrExpr));\n } else if (loc[0] === '@') {\n // value type: @boolean(), etc.\n let addType = false;\n const valueType = loc.slice(1, -2);\n switch (valueType) {\n case 'scalar':\n if (!val || !['object', 'function'].includes(typeof val)) {\n addType = true;\n }\n break;\n case 'boolean':\n case 'string':\n case 'undefined':\n case 'function':\n if (typeof val === valueType) {\n addType = true;\n }\n break;\n case 'integer':\n if (Number.isFinite(val) && !(val % 1)) {\n addType = true;\n }\n break;\n case 'number':\n if (Number.isFinite(val)) {\n addType = true;\n }\n break;\n case 'nonFinite':\n if (typeof val === 'number' && !Number.isFinite(val)) {\n addType = true;\n }\n break;\n case 'object':\n if (val && typeof val === valueType) {\n addType = true;\n }\n break;\n case 'array':\n if (Array.isArray(val)) {\n addType = true;\n }\n break;\n case 'other':\n addType = this.currOtherTypeCallback(val, path, parent, parentPropName);\n break;\n case 'null':\n if (val === null) {\n addType = true;\n }\n break;\n /* c8 ignore next 2 */\n default:\n throw new TypeError('Unknown value type ' + valueType);\n }\n if (addType) {\n retObj = {\n path,\n value: val,\n parent,\n parentProperty: parentPropName\n };\n this._handleCallback(retObj, callback, 'value');\n return retObj;\n }\n // `-escaped property\n } else if (loc[0] === '`' && val && Object.hasOwn(val, loc.slice(1))) {\n const locProp = loc.slice(1);\n addRet(this._trace(x, val[locProp], push(path, locProp), val, locProp, callback, hasArrExpr, true));\n } else if (loc.includes(',')) {\n // [name1,name2,...]\n const parts = loc.split(',');\n for (const part of parts) {\n addRet(this._trace(unshift(part, x), val, path, parent, parentPropName, callback, true));\n }\n // simple case--directly follow property\n } else if (!literalPriority && val && Object.hasOwn(val, loc)) {\n addRet(this._trace(x, val[loc], push(path, loc), val, loc, callback, hasArrExpr, true));\n }\n\n // We check the resulting values for parent selections. For parent\n // selections we discard the value object and continue the trace with the\n // current val object\n if (this._hasParentSelector) {\n for (let t = 0; t < ret.length; t++) {\n const rett = ret[t];\n if (rett && rett.isParentSelector) {\n const tmp = this._trace(rett.expr, val, rett.path, parent, parentPropName, callback, hasArrExpr);\n if (Array.isArray(tmp)) {\n ret[t] = tmp[0];\n const tl = tmp.length;\n for (let tt = 1; tt < tl; tt++) {\n // eslint-disable-next-line @stylistic/max-len -- Long\n // eslint-disable-next-line sonarjs/updated-loop-counter -- Convenient\n t++;\n ret.splice(t, 0, tmp[tt]);\n }\n } else {\n ret[t] = tmp;\n }\n }\n }\n }\n return ret;\n};\nJSONPath.prototype._walk = function (val, f) {\n if (Array.isArray(val)) {\n const n = val.length;\n for (let i = 0; i < n; i++) {\n f(i);\n }\n } else if (val && typeof val === 'object') {\n Object.keys(val).forEach(m => {\n f(m);\n });\n }\n};\nJSONPath.prototype._slice = function (loc, expr, val, path, parent, parentPropName, callback) {\n if (!Array.isArray(val)) {\n return undefined;\n }\n const len = val.length,\n parts = loc.split(':'),\n step = parts[2] && Number.parseInt(parts[2]) || 1;\n let start = parts[0] && Number.parseInt(parts[0]) || 0,\n end = parts[1] && Number.parseInt(parts[1]) || len;\n start = start < 0 ? Math.max(0, start + len) : Math.min(len, start);\n end = end < 0 ? Math.max(0, end + len) : Math.min(len, end);\n const ret = [];\n for (let i = start; i < end; i += step) {\n const tmp = this._trace(unshift(i, expr), val, path, parent, parentPropName, callback, true);\n // Should only be possible to be an array here since first part of\n // ``unshift(i, expr)` passed in above would not be empty, nor `~`,\n // nor begin with `@` (as could return objects)\n // This was causing excessive stack size in Node (with or\n // without Babel) against our performance test: `ret.push(...tmp);`\n tmp.forEach(t => {\n ret.push(t);\n });\n }\n return ret;\n};\nJSONPath.prototype._eval = function (code, _v, _vname, path, parent, parentPropName) {\n this.currSandbox._$_parentProperty = parentPropName;\n this.currSandbox._$_parent = parent;\n this.currSandbox._$_property = _vname;\n this.currSandbox._$_root = this.json;\n this.currSandbox._$_v = _v;\n const containsPath = code.includes('@path');\n if (containsPath) {\n this.currSandbox._$_path = JSONPath.toPathString(path.concat([_vname]));\n }\n const scriptCacheKey = this.currEval + 'Script:' + code;\n if (!JSONPath.cache[scriptCacheKey]) {\n let script = code.replaceAll('@parentProperty', '_$_parentProperty').replaceAll('@parent', '_$_parent').replaceAll('@property', '_$_property').replaceAll('@root', '_$_root').replaceAll(/@([.\\s)[])/gu, '_$_v$1');\n if (containsPath) {\n script = script.replaceAll('@path', '_$_path');\n }\n if (this.currEval === 'safe' || this.currEval === true || this.currEval === undefined) {\n JSONPath.cache[scriptCacheKey] = new this.safeVm.Script(script);\n } else if (this.currEval === 'native') {\n JSONPath.cache[scriptCacheKey] = new this.vm.Script(script);\n } else if (typeof this.currEval === 'function' && this.currEval.prototype && Object.hasOwn(this.currEval.prototype, 'runInNewContext')) {\n const CurrEval = this.currEval;\n JSONPath.cache[scriptCacheKey] = new CurrEval(script);\n } else if (typeof this.currEval === 'function') {\n JSONPath.cache[scriptCacheKey] = {\n runInNewContext: context => this.currEval(script, context)\n };\n } else {\n throw new TypeError(`Unknown \"eval\" property \"${this.currEval}\"`);\n }\n }\n try {\n return JSONPath.cache[scriptCacheKey].runInNewContext(this.currSandbox);\n } catch (e) {\n if (this.ignoreEvalErrors) {\n return false;\n }\n throw new Error('jsonPath: ' + e.message + ': ' + code);\n }\n};\n\n// PUBLIC CLASS PROPERTIES AND METHODS\n\n// Could store the cache object itself\nJSONPath.cache = {};\n\n/**\n * @param {string[]} pathArr Array to convert\n * @returns {string} The path string\n */\nJSONPath.toPathString = function (pathArr) {\n const x = pathArr,\n n = x.length;\n let p = '$';\n for (let i = 1; i < n; i++) {\n if (!/^(~|\\^|@.*?\\(\\))$/u.test(x[i])) {\n p += /^[0-9*]+$/u.test(x[i]) ? '[' + x[i] + ']' : \"['\" + x[i] + \"']\";\n }\n }\n return p;\n};\n\n/**\n * @param {string} pointer JSON Path\n * @returns {string} JSON Pointer\n */\nJSONPath.toPointer = function (pointer) {\n const x = pointer,\n n = x.length;\n let p = '';\n for (let i = 1; i < n; i++) {\n if (!/^(~|\\^|@.*?\\(\\))$/u.test(x[i])) {\n p += '/' + x[i].toString().replaceAll('~', '~0').replaceAll('/', '~1');\n }\n }\n return p;\n};\n\n/**\n * @param {string} expr Expression to convert\n * @returns {string[]}\n */\nJSONPath.toPathArray = function (expr) {\n const {\n cache\n } = JSONPath;\n if (cache[expr]) {\n return cache[expr].concat();\n }\n const subx = [];\n const normalized = expr\n // Properties\n .replaceAll(/@(?:null|boolean|number|string|integer|undefined|nonFinite|scalar|array|object|function|other)\\(\\)/gu, ';$&;')\n // Parenthetical evaluations (filtering and otherwise), directly\n // within brackets or single quotes\n .replaceAll(/[['](\\??\\(.*?\\))[\\]'](?!.\\])/gu, function ($0, $1) {\n return '[#' + (subx.push($1) - 1) + ']';\n })\n // Escape periods and tildes within properties\n .replaceAll(/\\[['\"]([^'\\]]*)['\"]\\]/gu, function ($0, prop) {\n return \"['\" + prop.replaceAll('.', '%@%').replaceAll('~', '%%@@%%') + \"']\";\n })\n // Properties operator\n .replaceAll('~', ';~;')\n // Split by property boundaries\n .replaceAll(/['\"]?\\.['\"]?(?![^[]*\\])|\\[['\"]?/gu, ';')\n // Reinsert periods within properties\n .replaceAll('%@%', '.')\n // Reinsert tildes within properties\n .replaceAll('%%@@%%', '~')\n // Parent\n .replaceAll(/(?:;)?(\\^+)(?:;)?/gu, function ($0, ups) {\n return ';' + ups.split('').join(';') + ';';\n })\n // Descendents\n .replaceAll(/;;;|;;/gu, ';..;')\n // Remove trailing\n .replaceAll(/;$|'?\\]|'$/gu, '');\n const exprList = normalized.split(';').map(function (exp) {\n const match = exp.match(/#(\\d+)/u);\n return !match || !match[1] ? exp : subx[match[1]];\n });\n cache[expr] = exprList;\n return cache[expr].concat();\n};\nJSONPath.prototype.safeVm = {\n Script: SafeScript\n};\n\n/**\n * @typedef {any} ContextItem\n */\n\n/**\n * @typedef {any} EvaluatedResult\n */\n\n/**\n * @callback ConditionCallback\n * @param {ContextItem} item\n * @returns {boolean}\n */\n\n/**\n * Copy items out of one array into another.\n * @param {GenericArray} source Array with items to copy\n * @param {GenericArray} target Array to which to copy\n * @param {ConditionCallback} conditionCb Callback passed the current item;\n * will move item if evaluates to `true`\n * @returns {void}\n */\nconst moveToAnotherArray = function (source, target, conditionCb) {\n const il = source.length;\n for (let i = 0; i < il; i++) {\n const item = source[i];\n if (conditionCb(item)) {\n // eslint-disable-next-line @stylistic/max-len -- Long\n // eslint-disable-next-line sonarjs/updated-loop-counter -- Convenient\n target.push(source.splice(i--, 1)[0]);\n }\n }\n};\n\n/**\n * In-browser replacement for NodeJS' VM.Script.\n */\nclass Script {\n /**\n * @param {string} expr Expression to evaluate\n */\n constructor(expr) {\n this.code = expr;\n }\n\n /**\n * @param {object} context Object whose items will be added\n * to evaluation\n * @returns {EvaluatedResult} Result of evaluated code\n */\n runInNewContext(context) {\n let expr = this.code;\n const keys = Object.keys(context);\n const funcs = [];\n moveToAnotherArray(keys, funcs, key => {\n return typeof context[key] === 'function';\n });\n const values = keys.map(vr => {\n return context[vr];\n });\n const funcString = funcs.reduce((s, func) => {\n let fString = context[func].toString();\n if (!/function/u.test(fString)) {\n fString = 'function ' + fString;\n }\n return 'var ' + func + '=' + fString + ';' + s;\n }, '');\n expr = funcString + expr;\n\n // Mitigate http://perfectionkills.com/global-eval-what-are-the-options/#new_function\n if (!/(['\"])use strict\\1/u.test(expr) && !keys.includes('arguments')) {\n expr = 'var arguments = undefined;' + expr;\n }\n\n // Remove last semi so `return` will be inserted before\n // the previous one instead, allowing for the return\n // of a bare ending expression\n expr = expr.replace(/;\\s*$/u, '');\n\n // Insert `return`\n const lastStatementEnd = expr.lastIndexOf(';');\n const code = lastStatementEnd !== -1 ? expr.slice(0, lastStatementEnd + 1) + ' return ' + expr.slice(lastStatementEnd + 1) : ' return ' + expr;\n\n // eslint-disable-next-line no-new-func -- User's choice\n return new Function(...keys, code)(...values);\n }\n}\nJSONPath.prototype.vm = {\n Script\n};\n\nexport { JSONPath };\n","// setValueByPath.ts\n\nexport function setValueByPath(obj: any, path: string, value: any): void {\n const parts = path.replace(/^\\$\\.?/, '').split(/\\.|\\[|\\]/).filter(Boolean);\n let current = obj;\n \n for (let i = 0; i < parts.length - 1; i++) {\n const part = parts[i];\n const nextPart = parts[i + 1];\n const isNextPartArrayIndex = /^\\d+$/.test(nextPart);\n\n if (part === '__proto__' || part === 'constructor' || part === 'prototype') {\n throw new Error('Invalid path part: ' + part);\n }\n\n if (!(part in current)) {\n current[part] = isNextPartArrayIndex ? [] : {};\n }\n\n if (isNextPartArrayIndex) {\n const index = parseInt(nextPart, 10);\n if (!Array.isArray(current[part])) {\n current[part] = [];\n }\n if (current[part].length <= index) {\n current[part][index] = i === parts.length - 2 ? value : {};\n }\n current = current[part][index];\n i++; // Skip the next part as we've already handled it\n } else {\n current = current[part];\n }\n }\n\n const lastPart = parts[parts.length - 1];\n if (lastPart === '__proto__' || lastPart === 'constructor' || lastPart === 'prototype') {\n throw new Error('Invalid path part: ' + lastPart);\n }\n if (/^\\d+$/.test(lastPart)) {\n const index = parseInt(lastPart, 10);\n if (!Array.isArray(current)) {\n current = [];\n }\n current[index] = value;\n } else {\n current[lastPart] = value;\n }\n}\n","import { JSONPath } from \"jsonpath-plus\";\nimport { setValueByPath } from \"./setValueByPath\";\nimport { CraftDataWrapperPropMap, CraftDataPatch } from \"./model\";\nimport { CraftNodeDatasource } from \"./craftNode\";\n\nexport const mapData = <\n M extends CraftDataWrapperPropMap = CraftDataWrapperPropMap<any, any>,\n D extends CraftNodeDatasource = CraftNodeDatasource,\n P extends CraftDataPatch = CraftDataPatch<any, any>\n>(\n data: any,\n mapConfig: M,\n childRef: any\n) => {\n const output = {\n type: mapConfig.type,\n item: mapConfig.type === \"single\" ? {} : undefined,\n list: mapConfig.type === \"list\" ? [] : undefined,\n } as D;\n\n const applyPatch = (source: any, patch: P) => {\n let patchSource = source;\n if (patch.patchSource === \"value\") {\n return patch.value ?? patch.defaultValue ?? null;\n }\n\n if (patch.patchSource === \"child\") {\n patchSource = childRef;\n }\n\n const value =\n patch.type === \"single\"\n ? JSONPath({ path: patch.fromPath, json: patchSource, resultType: \"value\" })\n : JSONPath({ path: patch.fromPath, json: patchSource });\n return value ?? patch.defaultValue ?? null;\n };\n\n const rootData =\n mapConfig.type === \"single\"\n ? JSONPath({ path: mapConfig.fromPath, json: data, resultType: \"value\" })\n : JSONPath({ path: mapConfig.fromPath, json: data });\n\n if (mapConfig.type === \"single\") {\n //@ts-ignore\n mapConfig.patches.forEach((patch: P) => {\n const value = applyPatch(rootData, patch);\n setValueByPath(output.item!, patch.toPath, value);\n });\n } else if (mapConfig.type === \"list\") {\n output.list = rootData.map((item: any) => {\n const mappedItem: Record<string, any> = {};\n mapConfig.patches.forEach((patch) => {\n //@ts-ignore\n const value = applyPatch(item, patch);\n setValueByPath(mappedItem, patch.toPath, value);\n });\n\n return mappedItem;\n });\n }\n\n return output;\n};\n","import { h, VNode } from \"vue\";\nimport { CraftNode, CraftNodeDatasource, isVisible } from \"./craftNode\";\nimport CraftNodeResolver, { CraftNodeResolverMap } from \"./CraftNodeResolver\";\n\nexport interface RenderOptions<T extends object> {\n resolverMap: CraftNodeResolverMap<T>;\n componentRegistry?: Record<string, any>;\n nodeDataMap?: Record<string, CraftNodeDatasource | null>;\n eventsContext?: Record<string, any>;\n}\n\nfunction buildEventHandlers(\n node: CraftNode,\n eventsContext: Record<string, any>\n): Record<string, (...args: any[]) => void> {\n const handlers: Record<string, (...args: any[]) => void> = {};\n\n if (!node.events || !Object.keys(node.events).length) {\n return handlers;\n }\n\n Object.entries(node.events).forEach(([eventName, eventCode]) => {\n if (!eventCode?.trim()) return;\n\n handlers[eventName] = (...args: any[]) => {\n try {\n const eventHandler = new Function(\"ctx\", \"craftNode\", \"args\", eventCode);\n eventHandler(eventsContext, node, ...args);\n } catch (e) {\n console.error(`Event code execution failed with code:\\n${eventCode}\\n\\nError:`, e);\n }\n };\n });\n\n return handlers;\n}\n\nfunction computeDataChildren(\n node: CraftNode,\n data: CraftNodeDatasource,\n slotName: string = 'default'\n): CraftNode[] {\n if (!node.slots || !node.slots[slotName]) return [];\n\n const children = node.slots[slotName];\n\n if (data.type === \"single\") {\n return children.map((child) => ({\n ...child,\n uuid: `${child.uuid}-single`,\n props: { ...child.props, ...(data.item || {}) },\n }));\n }\n\n if (data.type === \"list\" && data.list) {\n return children.flatMap((child) =>\n data.list!.map((item, index) => ({\n ...child,\n uuid: `${child.uuid}-data-${index}`,\n props: { ...child.props, ...(item || {}) },\n }))\n );\n }\n\n return [];\n}\n\nexport function renderCraftNodeToVNode<T extends object>(\n node: CraftNode,\n resolver: CraftNodeResolver<T>,\n componentRegistry?: Record<string, any>,\n nodeDataMap?: Record<string, CraftNodeDatasource | null>,\n eventsContext?: Record<string, any>\n): VNode | null {\n if (!isVisible(node)) {\n return null;\n }\n\n const resolved = resolver.resolveNode(node);\n const componentName = resolved?.componentName || node.componentName;\n const component = componentRegistry?.[componentName] || componentName;\n\n const props = {\n ...(resolved?.defaultProps || {}),\n ...node.props,\n };\n\n const eventHandlers = eventsContext ? buildEventHandlers(node, eventsContext) : {};\n\n const nodeData = nodeDataMap?.[node.uuid];\n let children: VNode[] | undefined;\n\n if (nodeData?.type) {\n const dataChildren = computeDataChildren(node, nodeData, nodeData.slotName || 'default');\n children = dataChildren\n .map((child) => renderCraftNodeToVNode(child, resolver, componentRegistry, nodeDataMap, eventsContext))\n .filter((v): v is VNode => v !== null);\n } else if (node.slots) {\n children = Object.values(node.slots)\n .flat()\n .map((child) => renderCraftNodeToVNode(child, resolver, componentRegistry, nodeDataMap, eventsContext))\n .filter((v): v is VNode => v !== null);\n }\n\n return h(component, { key: node.uuid, ...props, ...eventHandlers }, children);\n}\n\nexport function renderCraftNodesToVNodes<T extends object>(\n nodes: CraftNode[],\n options: RenderOptions<T>\n): VNode[] {\n const resolver = new CraftNodeResolver(options.resolverMap);\n return nodes\n .map((node) =>\n renderCraftNodeToVNode(\n node,\n resolver,\n options.componentRegistry,\n options.nodeDataMap,\n options.eventsContext\n )\n )\n .filter((v): v is VNode => v !== null);\n}\n","export const defaultResolvers = {\n CraftComponentSimpleText: {\n componentName: \"CraftComponentSimpleText\",\n eventsSchema: {\n $el: \"div\",\n children: [\n {\n $formkit: \"textarea\",\n name: \"click\",\n label: \"onClick\",\n },\n ],\n },\n propsSchema: [\n {\n $formkit: \"select\",\n label: \"Type\",\n name: \"componentName\",\n options: [\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"h5\",\n \"h6\",\n \"p\",\n \"span\",\n \"div\",\n \"blockquote\",\n ],\n },\n {\n $formkit: \"textarea\",\n label: \"Content\",\n name: \"content\",\n },\n {\n $formkit: \"text\",\n label: \"Class\",\n name: \"class\",\n },\n ],\n },\n CraftCanvas: {\n componentName: \"CraftCanvas\",\n },\n};\n","import { App } from \"vue\";\nimport * as components from \"./components\";\nexport * from \"./blueprints/default\";\nexport * from \"./components\";\nexport * from \"./components/composable\";\nexport * from \"./lib/craftNode\";\nexport * from \"./lib/CraftNodeResolver\";\nexport * from \"./lib/mapData\";\nexport * from \"./lib/model\";\nexport * from \"./lib/renderCraftNodes\";\nexport * from \"./resolvers/default\";\nexport { useEditor } from \"./store/editor\";\nexport type { EditorState, EditorStoreInstanceType } from \"./store/editor\";\nexport { useIndicator } from \"./store/indicator\";\nexport type { IndicatorState, IndicatorStoreType } from \"./store/indicator\";\n\nimport \"./assets/styles.scss\";\n\nconst install = (app: App) => {\n for (const key in components) {\n app.component(key, components[key]);\n }\n};\n\nexport const VCraft = { install };\n"],"names":["slots","useSlots","attrs","useAttrs","props","__props","resolver","inject","resolved","computed","componentToRender","_createBlock","_resolveDynamicComponent","_normalizeProps","_mergeProps","_unref","_createSlots","_","name","_withCtx","slotProps","_renderSlot","_ctx","_guardReactiveProps","useResolveCraftNode","craftNode","resolvedNode","defaultProps","useCraftNode","isVisible","craftNodeInCanvas","node","editor","useEditor","craftNodeIsCanvas","craftNodeIsDraggable","craftNodeIsAncestorOf","descendant","currentNode","resolveNodeName","craftNodeCanBeChildOf","targetNode","resolvedTargetNode","resolvedSource","targetNodeRules","sourceNodeRules","parent","rules","craftNodeCanBeSiblingOf","buildCraftNodeTree","uuidv4","slotChildren","cn","defineStore","ref","setVisibility","child","uuid","data","nodeUuid","newProps","newEvents","nodes","addNode","slotName","parentUuid","newNode","markRaw","removeDescendants","targetParent","targetSlotName","key","n","index","context","state","buildTree","rootUuid","emit","__emit","isEditing","textareaRef","originalValue","enabled","storeToRefs","canEdit","handleDoubleClick","startEditing","nextTick","adjustTextareaHeight","finishEditing","newValue","cancelEditing","watch","_openBlock","_createElementBlock","CraftNodeResolver","resolverMap","value","getDraggedNode","provide","_component_CraftEditorPanelLayout","$slots","blueprints","deselectNodes","_createVNode","_component_CraftFrame","_cache","iframe","useIndicator","isForbidden","element","top","left","height","width","padding","getPadding","paddingLeft","paddingBottom","paddingRight","paddingTop","e","indicator","handleDragStart","handleDragEnd","blueprintsWithDefaults","group","blueprint","_hoisted_1","_Fragment","_renderList","_createElementVNode","_toDisplayString","_hoisted_2","_component_CraftEditorBlueprint","_hoisted_3","_hoisted_4","_component_CraftEditorBlueprintsList","modelRef","toRef","schema","computedModel","debouncedEmit","debounce","handleFormInput","onUnmounted","nodeTree","layerClick","_component_CraftEditorPanelNodeLayer","_component_CraftEditorPanelBlueprints","_hoisted_5","_component_CraftEditorPanelLayers","_component_CraftEditorPanelSettings","toRefs","_component_CraftEditorPanelForm","v","model","FormKit","FormKitSchema","visible","selectedNode","componentName","isSelected","iconClick","_withModifiers","$event","eventsSchema","deleteable","removeNode","nodeName","handlePropsUpdate","handleEventsUpdate","_normalizeClass","_component_CraftEditorPanelNodeSettings","_component_CraftEditorPanelNodeEventsSettings","getIndicatorStyle","iframeRef","hasLoad","iframeBody","observer","resizeObserver","isAutoHeight","lastHeight","updateScheduled","onLoad","setupBody","inheritStyles","el","insertStyle","sheet","insertStyleSheet","setupAutoResize","w","h","iframeWindow","updateIframeHeight","initialResizeObserver","iframeDocument","iframeParent","availableHeight","parentHeight","iframeTop","body","html","contentHeight","finalHeight","parentDoc","target","style","styleEl","link","iframeDoc","id","_Teleport","formatComponentName","vNode","createNodeFromVNode","parentNode","slotFn","createChildren","vnodeChildren","childVNode","childNode","useCraftFrame","hasNodes","mountNodes","createdNodes","slot","vNodeToCraftNode","onMounted","res","iFrameWidth","iFrameHeight","onIframeLoad","CraftIframe","_component_CraftNodeViewer","_component_CraftNodeEditor","Indicator","useConnectCraftNodeToStore","nodeRef","selectedUuid","draggingDisabled","lastEl","updateNodeRef","useCraftNodeEvents","ctx","eventHandlersMap","buildEvents","eventName","eventCode","handler","args","onBeforeMount","onBeforeUnmount","useCraftNodeWrapper","readonly","mouseOnLeftHalf","rect","mouseOnTopHalf","mouseOnEdge","handleElementDragOver","handleCanvasDragOver","slotPlaceholder","cannotBeChild","handleDragOver","handleElementDrop","draggedNode","sibling","c","initializeSlotsFromResolver","resolverSlots","handleCanvasDrop","slotNameAttr","targetSlots","slotNames","handleDrop","nodeCopy","copy","drag","useDragCraftNode","event","craftNodeData","isDraggable","selectNode","eventHandlers","craftNodeClick","generateColorFromUUID","hash","i","s","l","nodeColor","availableSlots","shouldRenderSlots","children","computedDataChildren","computeDataNodes","acc","item","_toHandlers","nodeProps","slotNodes","isCanvas","computedChildren","CraftNodeViewer","defaultBlueprints","Hooks","callback","first","env","Plugins","jsep","_len","plugins","_key","plugin","Jsep","op_name","precedence","isRightAssociative","char","literal_name","literal_value","expr","obj","k","ch","op_val","message","error","untilICode","ch_i","to_check","tc_len","biop","prec","stack","biop_info","right","cur_biop","comparePrev","prev","argument","optional","number","chCode","str","startIndex","quote","closed","start","termination","separator_count","arg","hooks","stdClassProps","prop","m","CONDITIONAL_EXP","ternary","test","consequent","alternate","newTest","FSLASH_CODE","BSLASH_CODE","patternIndex","inCharSet","pattern","flags","code","PLUS_CODE","MINUS_CODE","updateNodeTypes","op","updateBinariesToAssignments","val","BLOCKED_PROTO_PROPERTIES","SafeEval","ast","subs","a","b","last","result","func","SafeScript","keyMap","push","arr","unshift","NewError","JSONPath","opts","otherTypeCallback","optObj","ret","json","currParent","currParentProperty","flatten","wrap","exprList","ea","rslt","valOrPath","resultType","path","fullRetObj","type","preferredOutput","parentPropName","hasArrExpr","literalPriority","retObj","loc","x","addRet","elems","t","safeLoc","nested","npath","nvalue","addType","valueType","locProp","parts","part","rett","tmp","tl","tt","f","len","step","end","_v","_vname","containsPath","scriptCacheKey","script","CurrEval","pathArr","p","pointer","cache","subx","$0","$1","ups","exp","match","moveToAnotherArray","source","conditionCb","il","Script","keys","funcs","values","vr","fString","lastStatementEnd","setValueByPath","current","nextPart","isNextPartArrayIndex","lastPart","mapData","mapConfig","childRef","output","applyPatch","patch","patchSource","rootData","mappedItem","buildEventHandlers","eventsContext","handlers","computeDataChildren","renderCraftNodeToVNode","componentRegistry","nodeDataMap","component","nodeData","renderCraftNodesToVNodes","options","defaultResolvers","install","app","components","VCraft"],"mappings":";;;;;;;;;;;;AAqBA,UAAMA,IAAQC,GAAA,GACRC,IAAQC,GAAA,GAERC,IAAQC,GAIRC,IAAWC,GAAuC,UAAU,GAC5DC,IAAWC,EAAS,MAAMH,GAAU,MAAM,QAAQF,EAAM,aAAa,CAAC,GACtEM,IAAoBD,EAAS,MAAMD,EAAS,OAAO,iBAAiBJ,EAAM,aAAa;qBA5BnFM,EAAA,cADRC,EAQYC,GANLF,EAAA,KAAiB,GAAAG,GAAAC,GAAA,EAAA,KAAA,KACdC,EAAAb,CAAA,CAAK,CAAA,GAAAc,GAAA,EAAA,GAAA,KAAA;AAAA,QAEiBD,EAAAf,CAAA,GAAK,CAAjBiB,GAAGC;;QACnB,IAAAC,EAAA,CADwDC,MAAS;AAAA,UACjEC,EAA8CC,EAAA,QAAjCJ,GAAIL,GAAAU,GAAUH,KAAS,CAAA,CAAA,CAAA,CAAA;AAAA,QAAA;;;;ICD7BI,KAAsB,CACjCC,MACG;AACH,QAAMnB,IAAWC,GAA0C,UAAU,GAC/DmB,IAAejB,EAAS,MACxB,CAACH,KAAY,CAACmB,GAAW,QAAc,CAAA,IACpCnB,EAAS,MAAM;AAAA,IACpBmB,EAAU,MAAM;AAAA,EAAA,CAEnB,GAEKE,IAAelB,EAAS,MAAMiB,EAAa,OAAO,gBAAgB,EAAE;AAE1E,SAAO;AAAA,IACL,cAAAA;AAAA,IACA,UAAApB;AAAA,IACA,cAAAqB;AAAA,EAAA;AAEJ,GCpBaC,KAAe,MAAwB;AAClD,QAAMH,IAAYlB,GAAkC,WAAW;AAC/D,MAAI,CAACkB;AACH,UAAM,IAAI,MAAM,oCAAoC;AAGtD,QAAM,EAAE,UAAAnB,GAAU,cAAAoB,GAAc,cAAAC,EAAA,IAC9BH,GAAoBC,CAAS;AAE/B,SAAO;AAAA,IACL,WAAAA;AAAA,IACA,UAAAnB;AAAA,IACA,cAAAoB;AAAA,IACA,cAAAC;AAAA,EAAA;AAEJ,GCsBaE,KAAY,CAACJ,MACxBA,EAAU,YAAY,UAAaA,EAAU,SAElCK,KAAoB,CAAmBL,MAAyB;AAC3E,MAAIM,IAAON;AACX,QAAMO,IAASC,EAAA;AAEf,SAAOF,EAAK;AAEV,QADAA,IAAOC,EAAO,QAAQ,IAAID,EAAK,UAAU,GACrCG,EAAkBH,CAAI;AACxB,aAAO;AAIX,SAAO;AACT,GAEaI,KAAuB,CAClCV,MAEKK,GAAkBL,CAAS,IAI5BA,EAAU,OAAO,UACZA,EAAU,MAAM,QAAQA,CAAS,IAGnC,KAPE,IAUEW,KAAwB,CACnCX,GACAY,MACG;AACH,QAAML,IAASC,EAAA;AACf,MAAIK,IAAcD;AAElB,SAAOC,GAAa,cAAY;AAC9B,QAAIA,EAAY,eAAeb,EAAU;AACvC,aAAO;AAET,IAAAa,IAAcN,EAAO,QAAQ,IAAIM,EAAY,UAAU;AAAA,EACzD;AAEA,SAAO;AACT,GAEaC,KAAkB,CAAmBd,MAC5CA,EAAU,kBAAkB,gBACvBA,EAAU,MAAM,gBAGlBA,EAAU,eAGNe,KAAwB,CACnCf,GACAgB,GACAnC,MACG;AAKH,MAJI,CAAC4B,EAAkBO,CAAU,KAI7BhB,EAAU,SAASgB,EAAW;AAChC,WAAO;AAGT,QAAMC,IAAqBpC,EAAS,QAAQiC,GAAgBE,CAAU,CAAC,GACjEE,IAAiBrC,EAAS,QAAQiC,GAAgBd,CAAS,CAAC,GAE5DmB,IAAkBF,GAAoB,SAAS,CAAA,GAC/CG,IAAkBF,GAAgB,SAAS,CAAA;AAEjD,MAAIlB,EAAU,YAAY;AAExB,UAAMqB,IADSb,EAAA,EACO,QAAQ,IAAIR,EAAU,UAAU,GAEhDsB,IAAQzC,EAAS,QAAQiC,GAAmBO,CAAM,CAAC,GAAG,SAAS,CAAA;AACrE,QACEC,EAAM,cACN,CAACA,EAAM,WAAWtB,GAAWgB,GAAYnC,CAAQ;AAEjD;AAAA,EAEJ;AAaA,SAVE,EAAAuC,EAAgB,eAChB,CAACA,EAAgB,YAAYpB,GAAWgB,GAAYnC,CAAQ,KAK1D8B,GAAsBX,GAAWgB,CAAU,KAK7CG,EAAgB,aAChB,CAACA,EAAgB,UAAUnB,GAAWgB,GAAYnC,CAAQ;AAM9D,GAEa4B,IAAoB,CAAmBT,MAC3CA,EAAU,kBAAkB,eAGxBuB,KAA0B,CACrCvB,GACAgB,GACAnC,MACG;AACH,QAAM0B,IAASC,EAAA;AAKf,SAJIQ,EAAW,SAAShB,EAAU,QAI9B,CAACgB,EAAW,aACP,KAGFD;AAAA,IACLf;AAAA,IACAO,EAAO,QAAQ,IAAIS,EAAW,UAAU;AAAA,IACxCnC;AAAA,EAAA;AAEJ,GAEa2C,KAAqB,CAChCxB,OAEKA,EAAU,SACbA,EAAU,OAAOyB,GAAA,IAGdzB,EAAU,SAIf,OAAO,OAAOA,EAAU,KAAK,EAAE,QAAQ,CAAC0B,MAAiB;AACvD,EAAAA,EAAa,QAAQ,CAACC,OACfA,EAAG,SACNA,EAAG,OAAOF,GAAA,IAERE,EAAG,eAAe3B,EAAU,SAC9B2B,EAAG,aAAa3B,EAAU,OAG5BwB,GAAmBG,CAAE,GAEdA,EACR;AACH,CAAC,GAEM3B,IC5KIQ,IAAYoB,GAAY,UAAU;AAAA,EAC3C,OAAO,OAAoB;AAAA,IACzB,6BAAa,IAAA;AAAA,IACb,WAAW,CAAA;AAAA,IACX,cAAc;AAAA,IACd,aAAa;AAAA,IACb,SAAS;AAAA,IACT,gBAAgB,CAAA;AAAA,IAChB,UAAU;AAAA,IACV,eAAe,CAAA;AAAA,IACf,aAAa,CAAA;AAAA,IACb,kBAAkB;AAAA,EAAA;AAAA,EAGpB,SAAS;AAAA,IACP,QAAQ;AACN,WAAK,QAAQ,MAAA,GACb,KAAK,YAAY,CAAA,GACjB,KAAK,eAAe,MACpB,KAAK,cAAc,MACnB,KAAK,iBAAiB,CAAA,GACtB,KAAK,mBAAmB;AAAA,IAC1B;AAAA,IAEA,SAAS;AACP,WAAK,UAAU;AAAA,IACjB;AAAA,IAEA,UAAU;AACR,WAAK,UAAU;AAAA,IACjB;AAAA,IAEA,kBAAkB;AAChB,WAAK,mBAAmB;AAAA,IAC1B;AAAA,IACA,iBAAiB;AACf,WAAK,mBAAmB;AAAA,IAC1B;AAAA,IAEA,YAAY/C,GAAmD;AAC7D,WAAK,WAAWA;AAAA,IAClB;AAAA,IAEA,WAAWmB,GAAsB6B,GAAkB;AACjD,WAAK,eAAe7B,EAAU,IAAI,IAAI6B;AAAA,IACxC;AAAA,IAEA,qBAAqB7B,GAAsB;AACzC,YAAMM,IAAO,KAAK,QAAQ,IAAIN,EAAU,IAAI;AAC5C,UAAIM,GAAM;AAER,YADAA,EAAK,UAAU,CAACF,GAAUE,CAAI,GAC1BA,EAAK,OAAO;AACd,gBAAMwB,IAAgB,CAAC,OACrB,EAAE,UAAUxB,EAAK,SACb,EAAE,SACJ,OAAO,OAAO,EAAE,KAAK,EAAE,QAAQ,CAACoB,MAAiB;AAC/C,YAAAA,EAAa,QAAQ,CAACK,MAAUD,EAAcC,CAAK,CAAC;AAAA,UACtD,CAAC,GAEH,KAAK,QAAQ,IAAI,EAAE,MAAM,CAAC,GACnB;AAET,iBAAO,OAAOzB,EAAK,KAAK,EAAE,QAAQ,CAACoB,MAAiB;AAClD,YAAAA,EAAa,QAAQ,CAACK,MAAUD,EAAcC,CAAK,CAAC;AAAA,UACtD,CAAC;AAAA,QACH;AACA,aAAK,QAAQ,IAAIzB,EAAK,MAAMA,CAAI;AAAA,MAClC;AAAA,IACF;AAAA,IAEA,YAAY0B,GAAcC,GAAkC;AAC1D,WAAK,YAAYD,CAAI,IAAIC;AAAA,IAC3B;AAAA,IAEA,gBAAgBC,GAAkBC,GAA+B;AAC/D,YAAM7B,IAAO,KAAK,QAAQ,IAAI4B,CAAQ;AACtC,MAAI5B,KACF,OAAO,OAAOA,EAAK,OAAO6B,CAAQ;AAAA,IAEtC;AAAA,IAEA,iBAAiBD,GAAkBE,GAAmC;AACpE,YAAM9B,IAAO,KAAK,QAAQ,IAAI4B,CAAQ;AACtC,MAAI5B,MACGA,EAAK,WACRA,EAAK,SAAS,CAAA,IAEhB,OAAO,OAAOA,EAAK,QAAe8B,CAAS;AAAA,IAE/C;AAAA,IAEA,SAASC,GAAoB;AAC3B,WAAK,MAAA,GACL,KAAK,YAAY,CAAA;AAEjB,YAAMC,IAAU,CAAChC,MAAoB;AACnC,aAAK,QAAQ,IAAIA,EAAK,MAAM,EAAE,GAAGA,GAAM,OAAO,CAAA,GAAI,GAC7CA,EAAK,cACR,KAAK,UAAU,KAAKA,EAAK,IAAI,GAE3BA,EAAK,SACP,OAAO,QAAQA,EAAK,KAAK,EAAE,QAAQ,CAAC,CAACiC,GAAUb,CAAY,MAAM;AAC/D,UAAAA,EAAa,QAAQ,CAACK,MAAU;AAC9B,YAAAA,EAAM,aAAazB,EAAK,MACxBgC,EAAQP,CAAK,GACR,KAAK,QAAQ,IAAIzB,EAAK,IAAI,EAAG,MAAMiC,CAAQ,MAC9C,KAAK,QAAQ,IAAIjC,EAAK,IAAI,EAAG,MAAMiC,CAAQ,IAAI,CAAA,IAEjD,KAAK,QAAQ,IAAIjC,EAAK,IAAI,EAAG,MAAMiC,CAAQ,EAAE,KAAKR,CAAK;AAAA,UACzD,CAAC;AAAA,QACH,CAAC;AAAA,MAEL;AAEA,MAAAM,EAAM,QAAQC,CAAO;AAAA,IACvB;AAAA,IAEA,mBAAmBhC,GAAiBkC,IAA4B,MAAM;AACpE,YAAMR,IAAO1B,EAAK,QAAQmB,GAAA,GACpBgB,IAAU,EAAE,GAAGnC,GAAM,MAAA0B,GAAM,YAAAQ,EAAA;AACjC,WAAK,QAAQ,IAAIR,GAAMU,GAAQD,CAAO,CAAC,GAElCD,KACH,KAAK,UAAU,KAAKR,CAAI,GAGtB1B,EAAK,SACP,OAAO,OAAOA,EAAK,KAAK,EAAE,QAAQ,CAACoB,MAAiB;AAClD,QAAAA,EAAa,QAAQ,CAACK,MAAU,KAAK,mBAAmBA,GAAOC,CAAI,CAAC;AAAA,MACtE,CAAC;AAAA,IAEL;AAAA,IAEA,WAAWhC,GAA6B;AACtC,WAAK,eAAeA,GAAW,QAAQ;AAAA,IACzC;AAAA,IAEA,SAASA,GAA6B;AACpC,WAAK,cAAcA;AAAA,IACrB;AAAA,IAEA,WAAWA,GAAsB;AAC/B,WAAK,eAAeA,CAAS,GACzBA,EAAU,SAAS,KAAK,iBAC1B,KAAK,eAAe;AAGtB,YAAM2C,IAAoB,CAACrC,MAAoB;AAC7C,QAAIA,EAAK,SACP,OAAO,OAAOA,EAAK,KAAK,EAAE,QAAQ,CAACoB,MAAiB;AAClD,UAAAA,EAAa,QAAQ,CAACK,MAAU;AAC9B,iBAAK,QAAQ,OAAOA,EAAM,IAAI,GAC9B,OAAO,KAAK,eAAeA,EAAM,IAAI,GACrCY,EAAkBZ,CAAK;AAAA,UACzB,CAAC;AAAA,QACH,CAAC;AAAA,MAEL;AAEA,MAAAY,EAAkB3C,CAAS,GAC3B,KAAK,QAAQ,OAAOA,EAAU,IAAI,GAClC,OAAO,KAAK,eAAeA,EAAU,IAAI,GAEpCA,EAAU,eACb,KAAK,YAAY,KAAK,UAAU;AAAA,QAC9B,CAACgC,MAASA,MAAShC,EAAU;AAAA,MAAA;AAAA,IAGnC;AAAA,IAEA,eAAeA,GAAsB;AACnC,YAAMwC,IAAaxC,EAAU;AAC7B,UAAI,CAACwC,EAAY,QAAOxC;AAExB,YAAMqB,IAAS,KAAK,QAAQ,IAAImB,CAAU;AAC1C,aAAInB,KAAUA,EAAO,SACnB,OAAO,QAAQA,EAAO,KAAK,EAAE,QAAQ,CAAC,CAACkB,GAAUb,CAAY,MAAM;AACjE,QAAAL,EAAO,MAAMkB,CAAQ,IAAIb,EAAa;AAAA,UACpC,CAACK,MAAUA,EAAM,SAAS/B,EAAU;AAAA,QAAA;AAAA,MAExC,CAAC,GAGHA,EAAU,aAAa,MACnB,KAAK,QAAQ,IAAIA,EAAU,IAAI,MAAMA,KACvC,KAAK,QAAQ,OAAOA,EAAU,IAAI,GAE7BA;AAAA,IACT;AAAA,IAEA,wBAAwBM,GAAiB;AACvC,WAAK,QAAQ,IAAIA,EAAK,MAAMA,CAAI,GAC5BA,EAAK,SACP,OAAO,OAAOA,EAAK,KAAK,EAAE,QAAQ,CAACoB,MAAiB;AAClD,QAAAA,EAAa,QAAQ,CAACK,MAAU,KAAK,wBAAwBA,CAAK,CAAC;AAAA,MACrE,CAAC;AAAA,IAEL;AAAA,IAEA,aAAazB,GAAiBU,GAAuBuB,IAAmB,WAAW;AACjF,UAAI,CAAC,KAAK,SAAU,OAAM,IAAI,MAAM,sBAAsB;AAE1D,UAAI,CAACxB,GAAsBT,GAAMU,GAAY,KAAK,QAAQ;AACxD,cAAM,IAAI;AAAA,UACR,GAAGF;AAAA,YACDR;AAAA,UAAA,CACD,oCAAoCQ,GAAgBE,CAAU,CAAC;AAAA,QAAA;AAIpE,MAAAV,IAAO,KAAK,eAAeA,CAAI,GAC/BA,EAAK,aAAaU,EAAW;AAE7B,YAAM4B,IAAe,KAAK,QAAQ,IAAI5B,EAAW,IAAI;AAErD,MAAI4B,MACGA,EAAa,UAChBA,EAAa,QAAQ,CAAA,IAElBA,EAAa,MAAML,CAAQ,MAC9BK,EAAa,MAAML,CAAQ,IAAI,CAAA,IAEjCK,EAAa,MAAML,CAAQ,EAAE,KAAKjC,CAAI,GACtC,KAAK,QAAQ,IAAIsC,EAAa,MAAMA,CAAY,IAGlD,KAAK,wBAAwBtC,CAAI;AAAA,IACnC;AAAA,IAEA,cAAcA,GAAiBU,GAAuBuB,IAAmB,WAAW;AAClF,UAAI,CAAC,KAAK,SAAU,OAAM,IAAI,MAAM,qBAAqB;AAEzD,UAAI,CAACxB,GAAsBT,GAAMU,GAAY,KAAK,QAAQ;AACxD,cAAM,IAAI;AAAA,UACR,GAAGF;AAAA,YACDR;AAAA,UAAA,CACD,oCAAoCQ,GAAgBE,CAAU,CAAC;AAAA,QAAA;AAIpE,MAAAV,IAAO,KAAK,eAAeA,CAAI,GAC/BA,EAAK,aAAaU,EAAW;AAE7B,YAAM4B,IAAe,KAAK,QAAQ,IAAI5B,EAAW,IAAI;AAErD,MAAI4B,MACGA,EAAa,UAChBA,EAAa,QAAQ,CAAA,IAElBA,EAAa,MAAML,CAAQ,MAC9BK,EAAa,MAAML,CAAQ,IAAI,CAAA,IAEjCK,EAAa,MAAML,CAAQ,EAAE,QAAQjC,CAAI,GACzC,KAAK,QAAQ,IAAIsC,EAAa,MAAMA,CAAY,IAGlD,KAAK,wBAAwBtC,CAAI;AAAA,IACnC;AAAA,IAEA,iBAAiBA,GAAiBU,GAAuBuB,GAAmB;AAC1E,UAAI,CAAC,KAAK,SAAU,OAAM,IAAI,MAAM,qBAAqB;AAEzD,UAAI,CAAChB,GAAwBjB,GAAMU,GAAY,KAAK,QAAQ;AAC1D,cAAM,IAAI,MAAM,4CAA4C;AAG9D,MAAAV,IAAO,KAAK,eAAeA,CAAI;AAE/B,YAAMkC,IAAaxB,EAAW;AAE9B,UAAI,CAACwB,EAAY,OAAM,IAAI,MAAM,4BAA4B;AAE7D,YAAMnB,IAAS,KAAK,QAAQ,IAAImB,CAAU;AAE1C,UAAInB,KAAUA,EAAO,OAAO;AAC1B,cAAMwB,IAAiBN,KAAY,OAAO,KAAKlB,EAAO,KAAK,EAAE;AAAA,UAAK,CAACyB,MACjEzB,EAAO,MAAMyB,CAAG,EAAE,KAAK,CAACC,MAAMA,EAAE,SAAS/B,EAAW,IAAI;AAAA,QAAA;AAG1D,YAAI6B,KAAkBxB,EAAO,MAAMwB,CAAc,GAAG;AAClD,gBAAMG,IAAQ3B,EAAO,MAAMwB,CAAc,EAAE;AAAA,YACzC,CAACE,MAAMA,EAAE,SAAS/B,EAAW;AAAA,UAAA;AAG/B,UAAIgC,MAAU,OACZ3B,EAAO,MAAMwB,CAAc,EAAE,OAAOG,GAAO,GAAG1C,CAAI,GAClDA,EAAK,aAAakC,GAClB,KAAK,QAAQ,IAAInB,EAAO,MAAMA,CAAM,GACpC,KAAK,wBAAwBf,CAAI;AAAA,QAErC;AAAA,MACF;AAAA,IACF;AAAA,IAEA,gBAAgBA,GAAiBU,GAAuBuB,GAAmB;AACzE,UAAI,CAAC,KAAK,SAAU,OAAM,IAAI,MAAM,qBAAqB;AAEzD,UAAI,CAAChB,GAAwBjB,GAAMU,GAAY,KAAK,QAAQ;AAC1D,cAAM,IAAI,MAAM,4CAA4C;AAG9D,MAAAV,IAAO,KAAK,eAAeA,CAAI;AAE/B,YAAMkC,IAAaxB,EAAW;AAE9B,UAAI,CAACwB,EAAY,OAAM,IAAI,MAAM,4BAA4B;AAE7D,YAAMnB,IAAS,KAAK,QAAQ,IAAImB,CAAU;AAE1C,UAAInB,KAAUA,EAAO,OAAO;AAC1B,cAAMwB,IAAiBN,KAAY,OAAO,KAAKlB,EAAO,KAAK,EAAE;AAAA,UAAK,CAACyB,MACjEzB,EAAO,MAAMyB,CAAG,EAAE,KAAK,CAACC,MAAMA,EAAE,SAAS/B,EAAW,IAAI;AAAA,QAAA;AAG1D,YAAI6B,KAAkBxB,EAAO,MAAMwB,CAAc,GAAG;AAClD,gBAAMG,IAAQ3B,EAAO,MAAMwB,CAAc,EAAE;AAAA,YACzC,CAACE,MAAMA,EAAE,SAAS/B,EAAW;AAAA,UAAA;AAG/B,UAAIgC,MAAU,OACZ3B,EAAO,MAAMwB,CAAc,EAAE,OAAOG,IAAQ,GAAG,GAAG1C,CAAI,GACtDA,EAAK,aAAakC,GAClB,KAAK,QAAQ,IAAInB,EAAO,MAAMA,CAAM,GACpC,KAAK,wBAAwBf,CAAI;AAAA,QAErC;AAAA,MACF;AAAA,IACF;AAAA,IAEA,iBAAiB2C,GAA8B;AAC7C,WAAK,gBAAgBA;AAAA,IACvB;AAAA,EAAA;AAAA,EAGF,SAAS;AAAA,IACP,UAAU,CAACC,MAAUA,EAAM,QAAQ,OAAO;AAAA,IAC1C,cAAc,CAACA,MACNA,EAAM,gBACTA,EAAM,QAAQ,IAAIA,EAAM,YAAY,KAAK;AAAA,IAG/C,aAAa,CAACA,MACZA,EAAM,eAAeA,EAAM,eAAeA,EAAM,YAAY,IAAI;AAAA,IAClE,QAAQ,CAACA,MAAU,CAAClB,MAAiBkB,EAAM,eAAelB,CAAI;AAAA,IAC9D,UAAU,CAACkB,MACF,MAAM,KAAKA,EAAM,QAAQ,QAAQ;AAAA,IAE1C,gBAAgB,CAACA,MAAUA,EAAM;AAAA,IACjC,UAAU,CAACA,MAAuB;AAChC,YAAMC,IAAY,CAACjB,MAAgC;AACjD,cAAM5B,IAAO4C,EAAM,QAAQ,IAAIhB,CAAQ;AACvC,YAAI,CAAC5B;AACH,gBAAM,IAAI,MAAM,kBAAkB4B,CAAQ,YAAY;AAGxD,cAAM3D,IAAqC,CAAA;AAC3C,eAAI+B,EAAK,SACP,OAAO,QAAQA,EAAK,KAAK,EAAE,QAAQ,CAAC,CAACiC,GAAUb,CAAY,MAAM;AAC/D,UAAAnD,EAAMgE,CAAQ,IAAIb,EAAa,IAAI,CAACK,MAAUoB,EAAUpB,EAAM,IAAI,CAAC;AAAA,QACrE,CAAC,GAGI;AAAA,UACL,GAAGzB;AAAA,UACH,OAAA/B;AAAA,QAAA;AAAA,MAEJ;AAEA,aAAO2E,EAAM,UAAU,IAAI,CAACE,MAAaD,EAAUC,CAAQ,CAAC;AAAA,IAC9D;AAAA,EAAA;AAEJ,CAAC;;;;;;;;;AChXH,UAAMzE,IAAQC,GAORyE,IAAOC,GAIPC,IAAY1B,EAAI,EAAK,GACrB2B,IAAc3B,EAAgC,IAAI,GAClD4B,IAAgB5B,EAAI,EAAE,GACtBtB,IAASC,EAAA,GACT,EAAE,SAAAkD,EAAA,IAAYC,EAAYpD,CAAM,GAChC,EAAE,WAAAP,EAAA,IAAcG,GAAA,GAEhByD,IAAU5E,EAAS,MAAM0E,EAAQ,SAAS,CAACH,EAAU,KAAK,GAE1DM,IAAoB,MAAM;AAC9B,MAAID,EAAQ,SACVE,EAAA;AAAA,IAEJ,GAEMA,IAAe,MAAM;AACzB,MAAAL,EAAc,QAAQ9E,EAAM,SAC5B4E,EAAU,QAAQ,IAClBhD,EAAO,gBAAA,GACPwD,GAAS,MAAM;AACb,QAAIP,EAAY,UACdA,EAAY,MAAM,MAAA,GAClBQ,EAAA;AAAA,MAEJ,CAAC;AAAA,IACH,GAEMA,IAAuB,MAAM;AACjC,MAAIR,EAAY,UACdA,EAAY,MAAM,MAAM,SAAS,QACjCA,EAAY,MAAM,MAAM,SAAS,GAAGA,EAAY,MAAM,YAAY;AAAA,IAEtE,GAEMS,IAAgB,YAAY;AAEhC,UADA1D,EAAO,eAAA,GACHgD,EAAU,OAAO;AACnB,QAAAA,EAAU,QAAQ;AAClB,cAAMW,IAAWV,EAAY,OAAO,MAAM,UAAU;AACpD,YAAIU,MAAavF,EAAM,SAAS;AAC9B,cAAI,CAACqB,EAAU,OAAO;AACpB;AAGF,UAAAO,EAAO,QAAQ,IAAIP,EAAU,MAAM,MAAM;AAAA,YACvC,GAAGA,EAAU;AAAA,YACb,OAAO;AAAA,cACL,GAAGA,EAAU,MAAM;AAAA,cACnB,SAASkE;AAAA,YAAA;AAAA,UACX,CACD,GAED,MAAMH,GAAA,GACNV,EAAK,kBAAkBa,CAAQ;AAAA,QACjC;AAAA,MACF;AAAA,IACF,GAEMC,IAAgB,MAAM;AAC1B,MAAAZ,EAAU,QAAQ,IAClBF,EAAK,kBAAkBI,EAAc,KAAK;AAAA,IAC5C;AAEA,WAAAW,GAAMV,GAAS,CAACQ,MAAa;AAC3B,MAAI,CAACA,KAAYX,EAAU,SACzBY,EAAA;AAAA,IAEJ,CAAC,cA7GCE,KAAAnF,EAgBYC,GAfLP,EAAA,aAAa,GAAA;AAAA,MACjB,yBAAsB2E,EAAA,OAAS,iBAAmBjE,MAAO,eAAiBA,EAAAoE,CAAA,iBAAuBH,EAAA,OAAS;AAAA,MAC1G,YAAUM;AAAA,IAAA;iBAEX,MAA8B;AAAA,cAA3BN,EAAA,QAAS,KAAQ3E,EAAA,OAAO,IAAG,KAC9B,CAAA;AAAA,QACQ2E,EAAA,cADRe,EASY,YAAA;AAAA;mBAPN;AAAA,UAAJ,KAAId;AAAA,UACJ,OAAM;AAAA,UACL,OAAO5E,EAAA;AAAA,UACP,SAAOoF;AAAA,UACP,QAAMC;AAAA,UACN,SAAK;AAAA,iBAAcA,GAAa,CAAA,OAAA,CAAA,GAAA,CAAA,OAAA,CAAA;AAAA,eACrBE,GAAa,CAAA,KAAA,CAAA;AAAA,UAAA;AAAA;;;;;;ACGxB,MAAMI,GAA6D;AAAA,EACxE,cAAuC,CAAA;AAAA,EAEvC,YAAYC,IAAwD,IAAI;AACtE,gBAAK,eAAeA,CAAW,GACxB9B,GAAQ,IAAI;AAAA,EACrB;AAAA,EAEA,eAAe8B,GAAuD;AACpE,SAAK,cAAc,CAAA,GACnB,OAAO,QAAQA,CAAW,EAAE,QAAQ,CAAC,CAAChF,GAAGiF,CAAK,MAAM;AAClD,WAAK,YAAYA,EAAM,aAAa,IAAIA;AAAA,IAC1C,CAAC;AAAA,EACH;AAAA,EAEA,QAAQhF,GAAwC;AAC9C,WAAO,KAAK,YAAYA,CAAI;AAAA,EAC9B;AAAA,EAEA,gBAAgBO,GAA2C;AACzD,WAAO,KAAK,YAAYA,CAAS,GAAG,gBAAgB,CAAA;AAAA,EACtD;AAAA,EAEA,YAAYA,GAAgD;AAI1D,WAHeS,EAAkBT,CAAS,IACtC,KAAK,QAAQA,EAAU,MAAM,aAAa,IAC1C,KAAK,QAAQA,EAAU,aAAa;AAAA,EAE1C;AAAA,EAEA,UAAUA,GAA2C;AACnD,WAAO,KAAK,YAAYA,CAAS,GAAG,eAAe,CAAA;AAAA,EACrD;AAAA,EAEA,gBAAgBA,GAA2C;AACzD,WAAO,KAAK,YAAYA,CAAS,GAAG,gBAAgB,CAAA;AAAA,EACtD;AAAA,EAEA,SAASA,GAAsC;AAC7C,WAAO,KAAK,YAAYA,CAAS,GAAG,SAAS,CAAA;AAAA,EAC/C;AACF;;;;;;;;;;;;ACxBA,UAAMrB,IAAQC,GAgBRyE,IAAOC,GAMP/C,IAASC,EAAA,GAET,EAAE,gBAAAkE,EAAA,IAAmBf,EAAYpD,CAAM;AAE7C,IAAA6D,GAAMM,GAAgB,CAACpE,MAAS;AAC9B,UAAIA,GAAM;AACR,QAAA+C,EAAK,iBAAiB/C,CAAI;AAC1B;AAAA,MACF;AACA,MAAA+C,EAAK,aAAa;AAAA,IACpB,CAAC;AAED,UAAMxE,IAAWgD,EAAI,IAAI0C,GAAkB5F,EAAM,OAAO,WAAW,CAAC;AACpE,WAAAgG,GAAQ,YAAY9F,CAAQ;;kBArE1BK,EAuByB0F,GAAA;AAAA,QAvBA,YAAYhG,EAAA,OAAO;AAAA,MAAA;QAElCiG,EAAAA,OAAM,cAAA;gBACX;AAAA,gBAED,CAIE,EANe,YAAAC,GAAY,eAAAC,QAAa;AAAA,YAE1CnF,EAIEC,EAAA,QAAA,gBAAA;AAAA,cAFC,YAAAiF;AAAA,cACA,eAAAC;AAAA,YAAA;;;;gBAGa;AAAA,gBAChB,MASa;AAAA,YATbC,EASaC,GAAA;AAAA,cARV,WAAWrG,EAAA;AAAA,cACX,eAAeA,EAAA;AAAA,cACf,mBAAmBA,EAAA;AAAA,cACnB,aAAaA,EAAA;AAAA,cACb,aAAaA,EAAA,OAAO;AAAA,cACpB,cAAWsG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAGC,MAAW9B,gBAAmB8B,CAAM;AAAA,YAAA;yBAEnD,MAAQ;AAAA,gBAARvF,EAAQC,EAAA,QAAA,SAAA;AAAA,cAAA;;;;;;;;;ICHHuF,KAAexD,GAAY,aAAa;AAAA,EACnD,OAAO,OACJ;AAAA,IACC,SAAS;AAAA,IACT,SAAS;AAAA,IACT,aAAa;AAAA,MACX,KAAK;AAAA,MACL,MAAM;AAAA,IAAA;AAAA,IAER,YAAY;AAAA,MACV,OAAO;AAAA,MACP,QAAQ;AAAA,IAAA;AAAA,IAEV,WAAW;AAAA,EAAA;AAAA,EAEf,SAAS;AAAA,IACP,OAAO;AACL,WAAK,UAAU,IACf,KAAK,YAAY;AAAA,IACnB;AAAA,IACA,OAAO;AACL,WAAK,UAAU;AAAA,IACjB;AAAA,IACA,eAAeyD,GAAa;AAC1B,WAAK,YAAYA;AAAA,IACnB;AAAA,IACA,YAAYC,GAAsB;AAChC,WAAK,KAAA;AAEL,YAAM,EAAE,KAAAC,GAAK,MAAAC,GAAM,QAAAC,EAAA,IAAWH,EAAQ,sBAAA;AAEtC,WAAK,YAAY,MAAMC,GACvB,KAAK,YAAY,OAAOC,GAExB,KAAK,WAAW,QAAQ,KAAK,SAC7B,KAAK,WAAW,SAASC;AAAA,IAC3B;AAAA,IACA,WAAWH,GAAsB;AAC/B,WAAK,KAAA;AAEL,YAAM,EAAE,KAAAC,GAAK,MAAAC,GAAM,OAAAE,GAAO,QAAAD,EAAA,IAAWH,EAAQ,sBAAA;AAE7C,WAAK,YAAY,MAAMC,GACvB,KAAK,YAAY,OAAOC,IAAOE,GAE/B,KAAK,WAAW,QAAQ,KAAK,SAC7B,KAAK,WAAW,SAASD;AAAA,IAC3B;AAAA,IACA,YAAYH,GAAsB;AAChC,WAAK,KAAA;AAEL,YAAMK,IAAUC,GAAWN,CAAO,GAC5B,EAAE,KAAAC,GAAK,MAAAC,GAAM,OAAAE,GAAO,QAAAD,EAAA,IAAWH,EAAQ,sBAAA,GAEvCO,IAAc,OAAO,SAASF,EAAQ,WAAW,GACjDG,IAAgB,OAAO,SAASH,EAAQ,UAAU,GAClDI,IAAe,OAAO,SAASJ,EAAQ,YAAY;AAEzD,WAAK,YAAY,MAAMJ,IAAME,IAASK,GACtC,KAAK,YAAY,OAAON,IAAOK,GAE/B,KAAK,WAAW,QAAQH,IAAQG,IAAcE,GAC9C,KAAK,WAAW,SAAS,KAAK;AAAA,IAChC;AAAA,IAEA,eAAeT,GAAsB;AACnC,WAAK,KAAA;AAEL,YAAMK,IAAUC,GAAWN,CAAO,GAC5B,EAAE,KAAAC,GAAK,MAAAC,GAAM,OAAAE,EAAA,IAAUJ,EAAQ,sBAAA,GAC/BO,IAAc,OAAO,SAASF,EAAQ,WAAW,GACjDK,IAAa,OAAO,SAASL,EAAQ,UAAU,GAC/CI,IAAe,OAAO,SAASJ,EAAQ,YAAY;AAEzD,WAAK,YAAY,MAAMJ,IAAMS,GAC7B,KAAK,YAAY,OAAOR,IAAOK,GAE/B,KAAK,WAAW,QAAQH,IAAQG,IAAcE,GAC9C,KAAK,WAAW,SAAS,KAAK;AAAA,IAChC;AAAA,EAAA;AAAA,EAEF,SAAS;AAAA,IACP,SAAS,CAAC7C,MAAmBA,EAAM;AAAA,IACnC,aAAa,CAACA,MAAmBA,EAAM;AAAA,IACvC,UAAU,CAACA,MAAyCA,EAAM;AAAA,IAC1D,MAAM,CAACA,MAA6CA,EAAM;AAAA,EAAA;AAE9D,CAAC;AAED,SAAS0C,GAAWK,GAAgB;AAClC,QAAM,EAAE,YAAAD,GAAY,aAAAH,GAAa,cAAAE,GAAc,eAAAD,EAAA,IAC7C,iBAAiBG,CAAC,GACdN,IAAU;AAAA,IACd,YAAAK;AAAA,IACA,aAAAH;AAAA,IACA,cAAAE;AAAA,IACA,eAAAD;AAAA,EAAA;AAGF,gBAAO,KAAKH,CAAO,EAAE,QAAQ,CAAC7C,MAAQ;AACpC,IAAA6C,EAAQ7C,CAAG,IAAI,SAAS6C,EAAQ7C,CAAG,EAAE,MAAM,GAAG,EAAE,GAAG,EAAE;AAAA,EACvD,CAAC,GAEM6C;AACT;;;;;;;;AC5GA,UAAMpF,IAASC,EAAA,GACT0F,IAAYd,GAAA,GAMZzG,IAAQC,GAIRuH,IAAkB,CAACF,MAAkB;AACzC,cAAQ,IAAI,yCAAyCtH,EAAM,SAAS,GACpE,QAAQ,IAAI,8CAA8CA,EAAM,UAAU,aAAa,GACvF,QAAQ,IAAI,sCAAsCA,EAAM,UAAU,KAAK,GACvE4B,EAAO,SAAS5B,EAAM,SAAS;AAAA,IACjC,GAEMyH,IAAgB,CAACH,MAAkB;AACvC,MAAAA,EAAE,gBAAA,GAEF1F,EAAO,SAAS,IAAI,GACpB2F,EAAU,KAAA;AAAA,IACZ;2BApCE5B,EAMM,OAAA;AAAA,MALH,WAAW;AAAA,MACX,eAAgB6B,GAAe,CAAA,MAAA,CAAA;AAAA,MAC/B,WAASC;AAAA,IAAA;MAEVxG,EAAaC,EAAA,QAAA,SAAA;AAAA,IAAA;;ICDJwG,KAAyB,CACpCC,GACAzH,MAEO,OAAO,KAAKyH,EAAM,UAAU,EAAE,IAAI,CAACxD,MAAQ;AAChD,QAAMyD,IAAYD,EAAM,WAAWxD,CAAG,GAChC5C,IAAerB,EAAS,gBAAgB;AAAA,IAC5C,GAAG0H;AAAA,IACH,MAAM9E,GAAA;AAAA,EAAO,CACD;AAKd,SAJe;AAAA,IACb,GAAG8E;AAAA,IACH,OAAO,EAAE,GAAGrG,GAAc,GAAGqG,EAAU,MAAA;AAAA,EAAM;AAGjD,CAAC;;;;;;;;;ACYH,UAAM1H,IAAWC,GAA0C,UAAU;;;aA/BxDQ,EAAAT,CAAA,UAAXyF,EAmBM,OAAAkC,IAAA;AAAA,SAlBJnC,EAAA,EAAA,GAAAC,EAiBMmC,GAAA,MAAAC,EAjBe9H,EAAA,WAAW,SAApB0H,YAAZhC,EAiBM,OAAA,MAAA;AAAA,UAhBJ1E,EAeOC,EAAA,QAAA,mBAAA;AAAA,YAfuB,OAAAyG;AAAA,YAAe,UAAUhH,EAAAT,CAAA;AAAA,UAAA,GAAvD,MAeO;AAAA,YAdL8H,EAA0B,MAAA,MAAAC,GAAnBN,EAAM,KAAK,GAAA,CAAA;AAAA,YAClBK,EAYM,OAZNE,IAYM;AAAA,sBAXJvC,EAUuBmC,GAAA,MAAAC,EATMpH,MAAuBgH,GAAOhH,EAAAT,CAAA,CAAQ,GAAA,CAAzDmB,GAAW8C,YADrB5D,EAUuB4H,GAAA;AAAA,gBARpB,WAAA9G;AAAA,gBACA,KAAA8C;AAAA,cAAA;2BAED,MAIM;AAAA,kBAJN6D,EAIM,OAJNI,IAIM;AAAA,oBAHJJ,EAEM,OAFNK,IAEMJ,GADD5G,EAAU,KAAK,GAAA,CAAA;AAAA,kBAAA;;;;;;;;;;;;;;;;;;;;ACZhC,aAAAqE,EAAA,GAAAC,EAKM,OALNkC,IAKM;AAAA,QAJJtB,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAyB,EAAyC,MAAA,EAArC,OAAM,gBAAA,GAAgB,cAAU,EAAA;AAAA,QACpCA,EAEM,OAFNE,IAEM;AAAA,UADJ7B,EAAsDiC,GAAA,EAA1B,YAAYrI,EAAA,WAAA,GAAU,MAAA,GAAA,CAAA,YAAA,CAAA;AAAA,QAAA;;;;;;;;;;;;;;;;;;ACiBxD,UAAMD,IAAQC,GAIRyE,IAAOC,GAIP4D,IAAWC,GAAMxI,GAAO,OAAO,GAC/ByI,IAASD,GAAMxI,GAAO,QAAQ,GAC9BqB,IAAYmH,GAAMxI,GAAO,WAAW,GAEpC0I,IAAgBrI;AAAA,MAAS,MAC7BkI,EAAS,QAAQ,EAAE,GAAGA,EAAS,MAAA,IAAW,CAAA;AAAA,IAAC,GAGvCI,IAAgBC,GAAS,CAAC9C,MAAa;AAC3C,MAAApB,EAAK,UAAUoB,CAAK;AAAA,IACtB,GAAG,EAAE,GAEC+C,IAAkB,CAAC/C,MAAa;AACpC,MAA2BA,KAAU,QACnC6C,EAAc7C,CAAK;AAAA,IAEvB;AAEA,WAAAgD,GAAY,MAAMH,EAAc,QAAQ,aA9CtC1H,EAMEC,EAAA,QAAA,iBAAA;AAAA,MAJC,WAAYG,EAAA;AAAA,MACZ,OAAOqH,EAAA;AAAA,MACP,iBAAAG;AAAA,MACA,QAAQJ,EAAA;AAAA,IAAA;;;;;;ACkBb,UAAM7G,IAASC,EAAA,GACT,EAAE,UAAAkH,EAAA,IAAa/D,EAAYpD,CAAM,GAEjCoH,IAAa,CAAC3H,MAAyB;AAC3C,MAAAO,EAAO,WAAWP,CAAS;AAAA,IAC7B;;;AA5BE,aAAAqE,EAAA,GAAAC,EAYM,OAZNkC,IAYM;AAAA,QAXJtB,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAyB,EAAmC,MAAA,EAA/B,OAAM,gBAAA,GAAgB,QAAI,EAAA;AAAA,QAC9BA,EASM,OATNE,IASM;AAAA,UARJF,EAOK,MAPLI,IAOK;AAAA,aANH1C,EAAA,EAAA,GAAAC,EAKEmC,GAAA,MAAAC,EAJ2BpH,EAAAoI,CAAA,GAAQ,CAA3B1H,GAAW8C,YADrB5D,EAKE0I,GAAA;AAAA,cAHC,KAAA9E;AAAA,cACA,WAAA9C;AAAA,cACA,cAAa2H;AAAA,YAAA;;;;;;;;;;;;;;;ACsBxB,UAAMpH,IAASC,EAAA,GACTuE,IAAgB,MAAM;AAC1B,MAAAxE,EAAO,WAAW,IAAI;AAAA,IACxB;;;aAjCasE,EAAAA,OAAM,cAAA,UAAjBP,EAMM,OAAAkC,IAAA;AAAA,QALJ5G,EAIEC,EAAA,QAAA,gBAAA;AAAA,UAFC,YAAYjB,EAAA;AAAA,UACZ,eAAAmG;AAAA,QAAA;aAGLV,EAAA,GAAAC,EAaM,OAbNuC,IAaM;AAAA,QAZJF,EAWM,OAXNI,IAWM;AAAA,UAVJJ,EAEM,OAFNK,IAEM;AAAA,YADJhC,EAAuD6C,GAAA,EAA1B,YAAYjJ,EAAA,WAAA,GAAU,MAAA,GAAA,CAAA,YAAA,CAAA;AAAA,UAAA;UAErD+H,EAEM,OAAA;AAAA,YAFD,OAAM;AAAA,YAAkC,WAAY5B,GAAa,CAAA,MAAA,CAAA;AAAA,UAAA;YACpEnF,EAAaC,EAAA,QAAA,WAAA,CAAA,GAAA,QAAA,EAAA;AAAA,UAAA;UAEf8G,EAGM,OAHNmB,IAGM;AAAA,YAFJ9C,EAA0B+C,CAAA;AAAA,YAC1B/C,EAA4BgD,CAAA;AAAA,UAAA;;;;;;;;;;;;;;;;ACoBpC,UAAMrJ,IAAQC,GAIR,EAAE,WAAAoB,GAAW,QAAAoH,MAAWa,GAAOtJ,CAAK,GAEpC0E,IAAOC;;;kBA3CXpE,EAuBuBgJ,GAAA;AAAA,QAtBpB,WAAW5I,EAAAU,CAAA;AAAA,QACX,QAAQV,EAAA8H,CAAA;AAAA,QACR,OAAO9H,EAAAU,CAAA,GAAW;AAAA,QAClB,UAAMkF,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAGiD,MAAM9E,mBAAsB8E,CAAC;AAAA,MAAA;QAE5B,iBAAazI,EACtB,CAcW,EAfe,WAAAM,GAAW,OAAAoI,GAAO,iBAAAZ,GAAiB,QAAAJ,QAAM;AAAA,UAG3DA,KAFR/C,EAAA,GAAAC,EAcW,YAdXkC,IAcW;AAAA,YAVTtB,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAyB,EAA8C,UAAA,EAAtC,OAAM,iBAAA,GAAiB,UAAM,EAAA;AAAA,kBACrCzH,EAQUI,EAAA+I,EAAA,GAAA;AAAA,cAPP,KAAKrI,GAAW;AAAA,cACjB,MAAK;AAAA,cACJ,OAAOoI;AAAA,cACP,SAAOZ;AAAA,cACP,SAAS;AAAA,YAAA;yBAEV,MAA4D;AAAA,gBAA5DxC,EAA4D1F,EAAAgJ,EAAA,GAAA;AAAA,kBAA5C,QAASlB;AAAAA,gBAAA;;;;;;;;;;;;;;;;;;;;;ACoBnC,UAAMzI,IAAQC,GAUR,EAAE,WAAAoB,GAAW,SAAAuI,MAAYN,GAAOtJ,CAAK,GAErCyB,IAAYpB;AAAA,MAChB,MACGuJ,EAAQ,SAASvI,EAAU,MAAM,YAAY,UAC9CA,EAAU,MAAM;AAAA,IAAA,GAGdqD,IAAOC,GACP/C,IAASC,EAAA,GACT,EAAE,cAAAgI,EAAA,IAAiB7E,EAAYpD,CAAM,GAErCkI,IAAgBzJ,EAAS,MAAM8B,GAAgBd,EAAU,KAAK,CAAC,GAC/D0I,IAAa1J;AAAA,MACjB,MAAMwJ,GAAc,OAAO,SAASxI,EAAU,MAAM;AAAA,IAAA,GAGhD2I,IAAY,MAAM;AACtB,MAAApI,EAAO,qBAAqBP,EAAU,KAAK;AAAA,IAC7C;;;kBApEEsE,EA+BK,MAAA;AAAA,QA9BH,WAAM,sBAAoB;AAAA,yCACqBoE,EAAA;AAAA,QAAA;QAG9C,SAAKxD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA0D,EAAA,CAAAC,MAAexF,EAAI,eAAgB/D,EAAAU,CAAA,CAAS,GAAA,CAAA,WAAA,MAAA,CAAA;AAAA,MAAA;QAElD2G,EASM,OATNH,IASM;AAAA,UARJG,EAA6D,OAA7DE,IAA6DD,GAAtB6B,EAAA,KAAa,GAAA,CAAA;AAAA,UACpD9B,EAMS,UAAA;AAAA,YALP,MAAK;AAAA,YACL,OAAM;AAAA,YACL,WAAoBgC,GAAS,CAAA,WAAA,MAAA,CAAA;AAAA,UAAA,MAE3BvI,EAAA,QAAS,SAAA,MAAA,GAAA,CAAA;AAAA,QAAA;QAKRd,EAAAU,CAAA,EAAU,SAAS,OAAO,KAAKV,EAAAU,CAAA,EAAU,KAAK,EAAE,SAAM,KAF9DqE,KAAAC,EAaK,MAbLyC,IAaK;AAAA,WATH1C,EAAA,EAAA,GAAAC,EAQWmC,WARkCnH,EAAAU,CAAA,EAAU,OAAK,CAA1C0B,GAAca,wBAAoCA,KAAQ;AAAA,aAC1E8B,EAAA,EAAA,GAAAC,EAMEmC,GAAA,MAAAC,EALqBhF,GAAY,CAAzBqB,GAAGC,YADb9D,EAME0I,GAAA;AAAA,cAJC,KAAG,GAAKrF,CAAQ,IAAIS,CAAK;AAAA,cACzB,WAAWD;AAAA,cACX,cAAWmC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAG5E,MAAS+C,iBAAoB/C,CAAI;AAAA,cAC/C,SAASF,EAAA;AAAA,YAAA;;;;;;;;;;;;;;;;;ACUpB,UAAMzB,IAAQC,GAIR,EAAE,WAAAoB,GAAW,QAAAoH,MAAWa,GAAOtJ,CAAK,GAEpC0E,IAAOC;;;kBA3CXpE,EAuBuBgJ,GAAA;AAAA,QAtBpB,WAAW5I,EAAAU,CAAA;AAAA,QACX,QAAQV,EAAA8H,CAAA;AAAA,QACR,OAAO9H,EAAAU,CAAA,GAAW;AAAA,QAClB,UAAMkF,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAGiD,MAAM9E,kBAAqB8E,CAAC;AAAA,MAAA;QAE3B,iBAAazI,EACtB,CAcW,EAfe,WAAAM,GAAW,OAAAoI,GAAO,iBAAAZ,GAAiB,QAAAJ,QAAM;AAAA,UAG3DA,KAFR/C,EAAA,GAAAC,EAcW,YAdXkC,IAcW;AAAA,YAVTtB,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAyB,EAAkD,UAAA,EAA1C,OAAM,iBAAA,GAAiB,cAAU,EAAA;AAAA,kBACzCzH,EAQUI,EAAA+I,EAAA,GAAA;AAAA,cAPP,KAAKrI,GAAW;AAAA,cACjB,MAAK;AAAA,cACJ,OAAOoI;AAAA,cACP,SAAOZ;AAAA,cACP,SAAS;AAAA,YAAA;yBAEV,MAA4D;AAAA,gBAA5DxC,EAA4D1F,EAAAgJ,EAAA,GAAA;AAAA,kBAA5C,QAASlB;AAAAA,gBAAA;;;;;;;;;;;;;;;;;;;;;;ACyCnC,UAAM7G,IAASC,EAAA,GACT,EAAE,cAAAgI,EAAA,IAAiB7E,EAAYpD,CAAM,GACrC1B,IAAWC,GAAqC,UAAU,GAE1DsI,IAASpI,EAAS,MAClB,CAACwJ,EAAa,SAAS,CAAC3J,GAAU,QAC7B,CAAA,IAEFA,EAAS,MAAM,UAAU2J,EAAa,KAAK,CACnD,GACKM,IAAe9J,EAAS,MACxB,CAACwJ,EAAa,SAAS,CAAC3J,GAAU,QAC7B,CAAA,IAEFA,EAAS,MAAM,gBAAgB2J,EAAa,KAAK,CACzD,GAEKO,IAAa/J;AAAA,MACjB,MAAMwJ,EAAa,SAASA,EAAa,MAAM;AAAA,IAAA,GAG3CQ,IAAa,MAAM;AACvB,MAAIR,EAAa,SACfjI,EAAO,WAAWiI,EAAa,KAAK;AAAA,IAExC,GAEMS,IAAWjK;AAAA,MAAS,MACxBwJ,EAAa,QACT,GACE3J,GAAU,OAAO,YAAY2J,EAAa,KAAK,GAAG,iBAClD,SACF,KACA;AAAA,IAAA,GAGAU,IAAoB,CAAC/G,MAAkC;AAC3D,MAAIqG,EAAa,SAASrG,KACxB5B,EAAO,gBAAgBiI,EAAa,MAAM,MAAMrG,CAAQ;AAAA,IAE5D,GAEMgH,IAAqB,CAAC/G,MAAmC;AAC7D,MAAIoG,EAAa,SAASpG,KACxB7B,EAAO,iBAAiBiI,EAAa,MAAM,MAAMpG,CAAS;AAAA,IAE9D;;;aA1GExC,EAmDOC,EAAA,QAAA,iBAAA;AAAA,QAjDJ,cAAcP,EAAAkJ,CAAA;AAAA,QACd,UAAUS,EAAA;AAAA,QACV,mBAAAC;AAAA,QACA,QAAQ9B,EAAA;AAAA,QACR,cAAc0B,EAAA;AAAA,QACd,oBAAAK;AAAA,QACA,YAAYJ,EAAA;AAAA,QACZ,YAAAC;AAAA,MAAA,GATH,MAmDO;AAAA,QAxCLrC,EAuCM,OAAA;AAAA,UAtCJ,KAAI;AAAA,UACJ,OAAM;AAAA,UACL,WAAoB,MAAA,IAAW,CAAA,WAAA,MAAA,CAAA;AAAA,QAAA;UAEhCzB,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAyB,EAAkD,MAAA,EAA9C,OAAM,gBAAA,GAAgB,uBAAmB,EAAA;AAAA,UAC7CA,EAAqD,QAArDH,IAAqDI,GAA5BtH,EAAAkJ,CAAA,GAAc,IAAI,GAAA,CAAA;AAAA,UAC/BlJ,EAAAkJ,CAAA,sBAAZlE,EAEM,OAAAuC,IAAA,CAAA,GAAA3B,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,YADJyB,EAAoC,WAAjC,iCAA6B,EAAA;AAAA,UAAA;UAElCA,EA4BM,OAAA;AAAA,YA3BJ,OAAKyC,GAAA,CAAC,sBAAoB,EAAA,mBACG9J,EAAAkJ,CAAA,GAAY,CAAA;AAAA,UAAA;YAEzC7B,EAAuB,eAAhBsC,EAAA,KAAQ,GAAA,CAAA;AAAA,YACJ7B,EAAA,SAAX/C,EAAA,GAAAC,EAMM,OANNyC,IAMM;AAAA,cALJ/B,EAIEqE,GAAA;AAAA,gBAHC,WAAW/J,EAAAkJ,CAAA;AAAA,gBACX,QAAQpB,EAAA;AAAA,gBACR,kBAAc8B;AAAA,cAAA;;YAGRJ,EAAA,SAAgBxJ,EAAAkJ,CAAA,KAA3BnE,KAAAC,EAMM,OANN0C,IAMM;AAAA,cALJhC,EAIEsE,GAAA;AAAA,gBAHC,WAAWhK,EAAAkJ,CAAA;AAAA,gBACX,QAAQM,EAAA;AAAA,gBACR,mBAAeK;AAAA,cAAA;;YAGpBxC,EAQM,OARNmB,IAQM;AAAA,cALIiB,EAAA,cAFRzE,EAMS,UAAA;AAAA;gBALP,OAAM;AAAA,gBAEL,WAAe0E,GAAU,CAAA,SAAA,CAAA;AAAA,cAAA,GAC3B,UAED;;;;;;;;;;ACpCV,UAAM9C,IAAYd,GAAA,GAEZmE,IAAoB,MAAM;AAC9B,YAAM,EAAE,KAAAhE,GAAK,MAAAC,EAAA,IAASU,EAAU,UAC1B,EAAE,OAAAR,GAAO,QAAAD,EAAA,IAAWS,EAAU;AAEpC,aAAO;AAAA,QACL,KAAK,GAAGX,CAAG;AAAA,QACX,MAAM,GAAGC,CAAI;AAAA,QACb,QAAQ,GAAGC,CAAM;AAAA,QACjB,OAAO,GAAGC,CAAK;AAAA,MAAA;AAAA,IAEnB;qBAtBUpG,EAAA4G,CAAA,EAAU,gBADlB5B,EAKE,OAAA;AAAA;MAHA,OAAK8E,GAAA,CAAC,qBAAmB,EAAA,qBACM9J,EAAA4G,CAAA,EAAU,YAAA,CAAW,CAAA;AAAA,MACnD,UAAOqD,EAAA,CAAiB;AAAA,IAAA;;;;;;;;;;;;;;;;ACsB7B,UAAM5K,IAAQC,GAuBR4K,IAAY3H,EAAA,GACZ4H,IAAU5H,EAAI,EAAK,GACnB6H,IAAa7H,EAAA,GACb8H,IAAW9H,EAAA,GACX+H,IAAiB/H,EAAA,GACjB,EAAE,QAAA4D,GAAQ,OAAAC,MAAUuC,GAAOtJ,CAAK,GAEhCkL,IAAe7K,EAAS,MAAMyG,EAAO,UAAU,MAAM;AAC3D,QAAIqE,IAAa,GACbC,IAAkB;AAEtB,UAAMC,IAAS,MAAM;AACnB,MAAAjG,GAAS,MAAM;AACb,YAAI,CAACyF,EAAU,OAAO;AACpB,kBAAQ,MAAM,6BAA6B;AAC3C;AAAA,QACF;AAEA,QAAAnG,EAAK,cAAcmG,EAAU,KAAK,GAClCA,EAAU,OAAO,aAAa,qBAAqB,MAAM,GACzDS,EAAA,GACItL,EAAM,iBAAeuL,EAAA,GAEzBvL,EAAM,OAAO,QAAQ,CAACwL,MAAO;AAC3B,UAAKX,EAAU,SACfY,EAAYZ,EAAU,OAAOW,CAAE;AAAA,QACjC,CAAC,GAEDxL,EAAM,YAAY,QAAQ,CAAC0L,MAAU;AACnC,UAAKb,EAAU,SACfc,EAAiBd,EAAU,OAAOa,CAAK;AAAA,QACzC,CAAC,GAEDZ,EAAQ,QAAQ,IAEhB1F,GAAS,MAAM;AACb,UAAKyF,EAAU,UAIfE,EAAW,QAAQF,EAAU,OAAO,eAAe,SAAS,MAC5De,EAAA;AAAA,QACF,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAEA,IAAAnG,GAAM,CAACsB,GAAOD,CAAM,GAAG,CAAC,CAAC+E,GAAGC,CAAC,MAAM;AACjC,MAAAF,EAAA;AAAA,IACF,CAAC;AAED,UAAMA,IAAkB,MAAM;AAC5B,UAAI,CAACf,EAAU;AACb;AAEF,YAAMkB,IAAelB,EAAU,MAAM;AACrC,UAAI,CAACkB,EAAc;AAKnB,UAHAf,EAAS,OAAO,WAAA,GAChBC,EAAe,OAAO,WAAA,GAElBnE,EAAO,UAAU,UAAUC,EAAM,UAAU,QAAQ;AACrD,QAAA8D,EAAU,MAAM,MAAM,SAAS,GAAG/D,EAAO,KAAK,MAC9C+D,EAAU,MAAM,MAAM,QAAQ,GAAG9D,EAAM,KAAK;AAC5C;AAAA,MACF;AAEA,MAAA8D,EAAU,MAAM,MAAM,QAAQ,QAC9BA,EAAU,MAAM,MAAM,SAAS,QAE/BG,EAAS,QAAQ,IAAI,iBAAiB,MAAM;AAC1C,mBAAWgB,GAAoB,GAAG;AAAA,MACpC,CAAC,GACDhB,EAAS,MAAM,QAAQe,EAAa,SAAS,MAAM;AAAA,QACjD,WAAW;AAAA,QACX,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,eAAe;AAAA,MAAA,CAChB;AAED,YAAME,IAAwB,IAAI,eAAe,MAAM;AACrD,QAAAD,EAAA,GACAC,EAAsB,WAAA;AAAA,MACxB,CAAC;AACD,MAAAA,EAAsB,QAAQF,EAAa,SAAS,eAAe,GAEnEC,EAAA;AAAA,IACF,GAEMA,IAAqB,MAAM;AAC/B,MAAIZ,MAEJA,IAAkB,IAClBhG,GAAS,MAAM;AACb,cAAM8G,IAAiBrB,EAAU,OAAO,eAAe;AACvD,YAAI,CAACqB,GAAgB;AACnB,UAAAd,IAAkB;AAClB;AAAA,QACF;AAEA,cAAMe,IAAetB,EAAU,OAAO;AACtC,YAAIuB,IAAkB;AAEtB,YAAID,GAAc;AAChB,gBAAME,IAAeF,EAAa,cAC5BG,IAAYzB,EAAU,OAAO,aAAa;AAChD,UAAAuB,IAAkBC,IAAeC;AAAA,QACnC;AAEA,cAAMC,IAAOL,EAAe,MACtBM,KAAON,EAAe,iBAEtBO,IAAgB,KAAK;AAAA,UACzB;AAAA,UACAF,EAAK;AAAA,UACLA,EAAK;AAAA,UACLC,GAAK;AAAA,UACLA,GAAK;AAAA,QAAA,GAGDE,IAAc,KAAK,IAAID,GAAeL,CAAe;AAE3D,QAAIvB,EAAU,SAAS,KAAK,IAAI6B,IAAcvB,CAAU,IAAI,MAC1DA,IAAauB,GACb7B,EAAU,MAAM,MAAM,SAAS,GAAG6B,CAAW,OAG/CtB,IAAkB;AAAA,MACpB,CAAC;AAAA,IACH,GAEMG,IAAgB,MAAM;AAC1B,YAAMoB,IAAY9B,EAAU,OAAO,eAAe,OAAO;AACzD,UAAI,CAAC8B,EAAW;AAGhB,MADe,MAAM,KAAKA,EAAU,iBAAiB,OAAO,KAAK,EAAE,EAC5D,QAAQ,CAACnB,MAAY;AAC1B,QAAAX,EAAU,OAAO,iBAAiB,KAAK,YAAYW,EAAG,UAAU,EAAI,CAAC;AAAA,MACvE,CAAC,GAEa,MAAM,KAAKmB,EAAU,iBAAiB,wBAAwB,KAAK,EAAE,EAC7E,QAAQ,CAACnB,MAAY;AACzB,QAAAX,EAAU,OAAO,iBAAiB,KAAK,YAAYW,EAAG,UAAU,EAAI,CAAC;AAAA,MACvE,CAAC;AAAA,IACH,GAEMC,IAAc,CAACmB,GAA2BC,MAAkB;AAChE,YAAMC,IAAU,SAAS,cAAc,OAAO;AAC9C,MAAAA,EAAQ,YAAYD,GACpBD,GAAQ,eAAe,SACpB,qBAAqB,MAAM,EAC3B,KAAK,CAAC,GACL,YAAYE,CAAO;AAAA,IACzB,GAEMnB,IAAmB,CAACiB,GAA2BlB,MAAkB;AACrE,YAAMqB,IAAO,SAAS,cAAc,MAAM;AAC1C,MAAAA,EAAK,MAAM,cACXA,EAAK,OAAOrB,GACZkB,EAAO,eAAe,SAAS,KAAK,YAAYG,CAAI;AAAA,IACtD,GAEMzB,IAAY,MAAM;AACtB,YAAM0B,IAAYnC,EAAU,OAAO,eAAe;AAClD,UAAI,CAACmC,EAAW;AAChB,YAAMT,IAAOS,EAAU,cAAc,MAAM;AAC3C,UAAI,CAACT,EAAM;AAEX,YAAMU,IAAKD,EAAU,gBAAgB,IAAI;AACzC,MAAAC,EAAG,YAAY,gBACdV,EAAK,WAA4B,aAAaU,CAAE;AAAA,IACnD,GAEMvI,IAAOC;AAIb,WAAAmE,GAAY,MAAM;AAChB,MAAAkC,EAAS,OAAO,WAAA,GAChBC,EAAe,OAAO,WAAA;AAAA,IACxB,CAAC,sBApOCtF,EAWM,OAAA;AAAA,MAXwB,sBAAmBuF,EAAA,OAAY;AAAA,IAAA;MAC3DlD,EAME,UAAA;AAAA,QALA,IAAG;AAAA,iBACC;AAAA,QAAJ,KAAI6C;AAAA,QACH,UAAO5K,EAAA,WAAW;AAAA,QAClB,UAAOA,EAAA,WAAW;AAAA,QAClB,QAAQoL;AAAA,MAAA;MAEKP,EAAA,cAAhBvK,EAEW2M,IAAA;AAAA;QAFe,IAAIrC,EAAA,OAAW,eAAe,SAAS;AAAA,MAAA;QAC/D5J,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;MATCgF,CAAAA,IAAAA,EAAAA,OAAO,OAAO;AAAA,IAAA;;ICGvBiH,KAAsB,CAACC,MACvB,OAAOA,EAAM,QAAS,WACjB,aAGL,OAAOA,EAAM,QAAS,WACjBA,EAAM,OAGXA,EAAM,KAAK,OACNA,EAAM,KAAK,OAGb,cAGHC,KAAsB,CAC1BnN,GACAkN,GACAE,IAA+B,SAC5B;AACH,QAAMxD,IAAgBqD,GAAoBC,CAAK,GACzC,EAAE,OAAApN,MAAUoN,GACZ/L,IAAuB;AAAA,IAC3B,eAAAyI;AAAA,IACA,OAAA9J;AAAA,IACA,OAAO,CAAA;AAAA,IACP,YAAYsN,GAAY,QAAQ;AAAA,IAChC,MAAMxK,GAAA;AAAA,EAAO;AAGf,SAAIsK,EAAM,aACJ,OAAOA,EAAM,YAAa,YAAY,CAAC,MAAM,QAAQA,EAAM,QAAQ,IACrE,OAAO,QAAQA,EAAM,QAAQ,EAAE,QAAQ,CAAC,CAACxJ,GAAU2J,CAAM,MAAM;AAC7D,QAAI,OAAOA,KAAW,YAAY;AAChC,YAAMxK,IAAewK,EAAA;AACrB,MAAIxK,MACF1B,EAAU,MAAMuC,CAAQ,IAAI4J,GAAkBtN,GAAU6C,GAAc1B,CAAS;AAAA,IAEnF;AAAA,EACF,CAAC,IACQ,MAAM,QAAQ+L,EAAM,QAAQ,MACrC/L,EAAU,MAAM,UAAUmM,GAAkBtN,GAAUkN,EAAM,UAAU/L,CAAS,KAI5EA;AACT,GAEMmM,KAAiB,CAAmBtN,GAAUuN,GAAe/K,MAC7D,CAAC+K,KAAiB,EAAEA,aAAyB,SACxC,CAAA,IACFA,EACJ,IAAI,CAACC,MAAeL,GAAuBnN,GAAUwN,GAAYhL,CAAM,CAAC,EACxE,OAAO,CAACiL,MAAc,CAAC,CAACA,CAAS,GC1CzBC,KAAgB,CAC3B/H,MACG;AACH,QAAMjE,IAASC,EAAA,GACT,EAAE,UAAAgM,EAAA,IAAa7I,EAAYpD,CAAM,GACjC1B,IAAW2F,IACb3C,EAAI,IAAI0C,GAAkBC,CAAW,CAAC,IACtC1F,GAA0C,UAAU;AAExD,EAAID,GAAU,SACZ0B,EAAO,YAAY1B,EAAS,KAAY,GAGtC2F,KACFG,GAAQ,YAAY9F,CAAQ;AAG9B,QAAM4N,IAAa,MAAM;AACvB,QAAK5N,GAAU,SAIX,CAAC2N,EAAS,OAAO;AACnB,YAAMjO,IAAQC,GAAA,GAGRkO,KAFenO,EAAM,UAAUA,EAAM,QAAA,IAAY,CAAA,GAGpD,QAAQ,CAACoO,MAAS;AACjB,YACEA,EAAK,QAAQ,cACbA,EAAK,YACL,MAAM,QAAQA,EAAK,QAAQ;AAE3B,iBAAOA,EAAK,SACT,IAAI,CAAC5K,MAAU;AACd,kBAAMzB,IAAOsM,GAAiB/N,EAAS,OAAOkD,CAAK;AACnD,mBAAKzB,KACH,QAAQ,MAAM,oCAAoCyB,CAAK,GAElDzB;AAAA,UACT,CAAC,EACA,OAAO,OAAO;AACZ;AACL,gBAAMA,IAAOsM,GAAiB/N,EAAS,OAAO8N,CAAI;AAClD,iBAAKrM,KACH,QAAQ,MAAM,mCAAmCqM,CAAI,GAEhD,CAACrM,CAAI;AAAA,QACd;AAAA,MACF,CAAC,EACA,OAAO,OAAO;AAEjB,MAAIoM,EAAa,UACfnM,EAAO,SAASmM,CAAY;AAAA,IAEhC;AAAA,EACF;AAEA,SAAAG,GAAUJ,CAAU,GAEpBrI;AAAA,IACE,MAAMvF,GAAU;AAAA,IAChB,CAACiO,MAAQ;AACP,MAAKA,KAILvM,EAAO,YAAYuM,CAAU;AAAA,IAC/B;AAAA,EAAA,GAGK;AAAA,IACL,QAAAvM;AAAA,IACA,YAAAkM;AAAA,EAAA;AAEJ;;;;;;;;;;;;;;;;;AClCA,UAAM9N,IAAQC,GAyBR,EAAE,aAAAmO,GAAa,cAAAC,MAAiB/E,GAAOtJ,CAAK,GAE5CsO,IAAe,CAAC9H,MAA8B;AAClD,MAAA9B,EAAK,cAAc8B,CAAM;AAAA,IAC3B,GAEM9B,IAAOC,GAIP,EAAE,QAAA/C,EAAA,IAAWgM,GAAiB5N,EAAM,WAAW,GAC/C,EAAE,UAAA+I,GAAU,UAAA8E,GAAU,SAAA9I,EAAA,IAAYC,EAAYpD,CAAM;;;AA5FxD,aAAA8D,EAAA,GAAAC,EAyCM,OAzCNkC,IAyCM;AAAA,QAvCI5H,EAAA,kBADRM,EA0BcgO,IAAA;AAAA;UAxBX,cAAAD;AAAA,UACA,eAAerO,EAAA;AAAA,UACf,QAAM;AAAA,eAAeA,EAAA;AAAA,UAAA;AAAA,UAGrB,gBAAcA,EAAA;AAAA,UACd,gBAAcA,EAAA;AAAA,UACd,gBAAcA,EAAA;AAAA,UACd,OAAOU,EAAAyN,CAAA;AAAA,UACP,QAAQzN,EAAA0N,CAAA;AAAA,QAAA;qBAET,MAKE;AAAA,aAJOpO,EAAA,YAAQ,CAAKU,EAAAoE,CAAA,MAAYpE,EAAAkN,CAAA,YADlClI,EAKEmC,GAAA,EAAA,KAAA,EAAA,GAAAC,EAHoBpH,EAAAoI,CAAA,GAAQ,CAArB1H,YAFTd,EAKEiO,GAAA;AAAA,cAFC,KAAG,GAAKnN,EAAU,IAAI;AAAA,cACtB,WAAAA;AAAA,YAAA;aAGMpB,EAAA,YAAYU,EAAAoE,CAAA,KAAWpE,EAAAkN,CAAA,YADhClI,EAKEmC,GAAA,EAAA,KAAA,EAAA,GAAAC,EAHoBpH,EAAAoI,CAAA,GAAQ,CAArB1H,YAFTd,EAKEkO,GAAA;AAAA,cAFC,KAAG,GAAKpN,EAAU,IAAI;AAAA,cACtB,WAAAA;AAAA,YAAA;YAEe,CAAApB,EAAA,YAAYU,EAAAoE,CAAA,UAA9BxE,EAAyCmO,IAAA,EAAA,KAAA,EAAA,CAAA;;;;QAGlC,CAAAzO,EAAA,cAAcA,EAAA,YAAQ,CAAKU,EAAAoE,CAAA,MAAYpE,EAAAkN,CAAA,YADhDlI,EAKEmC,GAAA,EAAA,KAAA,KAAAC,EAHoBpH,EAAAoI,CAAA,GAAQ,CAArB1H,YAFTd,EAKEiO,GAAA;AAAA,UAFC,KAAG,GAAKnN,EAAU,IAAI;AAAA,UACtB,WAAAA;AAAA,QAAA;QAGM,CAAApB,EAAA,aAAS,CAAKA,EAAA,YAAYU,EAAAoE,CAAA,KAAWpE,EAAAkN,CAAA,YAD9ClI,EAKEmC,GAAA,EAAA,KAAA,EAAA,GAAAC,EAHoBpH,EAAAoI,CAAA,GAAQ,CAArB1H,YAFTd,EAKEkO,GAAA;AAAA,UAFC,KAAG,GAAKpN,EAAU,IAAI;AAAA,UACtB,WAAAA;AAAA,QAAA;SAEepB,EAAA,aAAS,CAAKA,EAAA,YAAYU,EAAAoE,CAAA,UAA5CxE,EAAuDmO,IAAA,EAAA,KAAA,EAAA,CAAA;;;;ICpC3DC,KAAe,CACbtN,GACAuN,MAQG;AACH,QAAMhN,IAASC,EAAA,GACT,EAAE,SAAAkD,GAAS,cAAA8J,GAAc,kBAAAC,EAAA,IAAqB9J,EAAYpD,CAAM;AAEtE,MAAImN,IAA6B;AACjC,QAAMC,IAAgB,MAAM;AAC1B,UAAMxD,IAAKoD,GAAS,OAAO;AAC3B,IAAIpD,KAAMA,MAAOuD,MACfA,IAASvD,GACT5J,EAAO,WAAWP,GAAWmK,CAAE;AAAA,EAEnC;AAEA,EAAA0C,GAAUc,CAAa,GACvBvJ,GAAMmJ,GAASI,GAAe,EAAE,OAAO,QAAQ;AAE/C,QAAMjF,IAAa1J;AAAA,IACjB,MAAMwO,EAAa,UAAUxN,EAAU;AAAA,EAAA;AAkBzC,SAAO;AAAA,IACL,aAhBkBhB,EAAkB,MAElC0E,EAAQ,SACR,CAAC+J,EAAiB,SAClB/M,GAAqBV,CAAS,CAEjC;AAAA,IAWC,YAAA0I;AAAA,IACA,YAViB,MAAM;AACvB,MAAKhF,EAAQ,SAGbnD,EAAO,WAAWP,CAAS;AAAA,IAC7B;AAAA,EAKE;AAEJ,GClDa4N,KAAqB,CAChC5N,GACAO,GACAsN,MACG;AACH,QAAMC,wBAAuB,IAAA,GAEvBC,IAAc,MAAM;AACxB,IACE,CAAC/N,EAAU,OAAO,UAClB,CAAC,OAAO,OAAOA,EAAU,MAAM,MAAM,EAAE,UAKzC,OAAO,QAAQA,EAAU,MAAM,MAAM,EAAE,QAAQ,CAAC,CAACgO,GAAWC,CAAS,MAAM;AACzE,UAAI,CAACA,EAAU;AACb;AAGF,YAAMC,IAAU,IAAIC,MAAgB;AAClC,YAAI;AAOF,UANqB,IAAI;AAAA,YACvB;AAAA,YACA;AAAA,YACA;AAAA,YACAF;AAAA,UAAA;AAAA,YAGA,EAAE,GAAGJ,GAAK,QAAAtN,EAAA;AAAA,YACVA,EAAO,QAAQ,IAAIP,EAAU,MAAM,IAAI;AAAA,YACvC,GAAGmO;AAAA,UAAA;AAAA,QAEP,SAASlI,GAAG;AACV,kBAAQ;AAAA,YACN;AAAA,EACVgI,CAAS;AAAA;AAAA;AAAA,YAGChI;AAAA,UAAA;AAAA,QAEJ;AAAA,MACF;AAEA,MAAA6H,EAAiB,IAAIE,GAAWE,CAAO;AAAA,IACzC,CAAC;AAAA,EACH;AAEA,SAAA9J;AAAA,IACE,MAAMpE;AAAA,IACN,MAAM;AACJ,MAAA+N,EAAA;AAAA,IACF;AAAA,EAAA,GAGFK,GAAc,MAAM;AAClB,IAAAL,EAAA;AAAA,EACF,CAAC,GAEDM,GAAgB,MAAM;AACpB,IAAAP,EAAiB,MAAA;AAAA,EACnB,CAAC,GAEM;AAAA,IACL,eAAe9O,EAAS,MAAM,OAAO,YAAY8O,CAAgB,CAAC;AAAA,EAAA;AAEtE,GClEaQ,KAAsB,CACjCtO,MACG;AACH,QAAMO,KAAU,MAAM;AACpB,QAAI;AACF,aAAOC,EAAA;AAAA,IACT,QAAY;AACV,aAAO;AAAA,IACT;AAAA,EACF,GAAA,GAEMkD,IAAU1E,EAAS,MAClBuB,IACaoD,EAAYpD,CAAM,EACV,SAAS,SAAS,KAFxB,EAGrB,GAEKgI,IAAUvJ,EAAS,MAAMgB,EAAU,OAAO,YAAY,EAAK;AAEjE,SAAA2E,GAAQ,aAAa4J,GAASvO,CAAS,CAAC,GAEjC;AAAA,IACL,QAAAO;AAAA,IACA,WAAAP;AAAA,IACA,SAAA0D;AAAA,IACA,SAAA6E;AAAA,EAAA;AAEJ,GChCaiG,KAAkB,CAACvI,GAAekE,MAA6B;AAC1E,QAAMsE,IAAOtE,EAAG,sBAAA;AAChB,SAAOlE,EAAE,UAAUwI,EAAK,OAAOA,EAAK,QAAQ;AAC9C,GAEaC,KAAiB,CAACzI,GAAekE,MAA6B;AACzE,QAAMsE,IAAOtE,EAAG,sBAAA;AAChB,SAAOlE,EAAE,UAAUwI,EAAK,MAAMA,EAAK,SAAS;AAC9C,GAEaE,KAAc,CAAC1I,GAAekE,MAA6B;AACtE,QAAMsE,IAAOtE,EAAG,sBAAA;AAChB,SACElE,EAAE,UAAUwI,EAAK,OAAO,MACxBxI,EAAE,UAAUwI,EAAK,MAAM,MACvBA,EAAK,QAAQxI,EAAE,UAAU,MACzBwI,EAAK,SAASxI,EAAE,UAAU;AAE9B,GCVM2I,KAAwB,CAC5B3I,GACAkE,GACA,EAAE,QAAA5J,GAAQ,WAAA2F,GAAW,WAAAlG,GAAW,UAAAnB,QAC7B;AACH,MAAK0B,EAAO,aAMZ;AAAA,QAFA2F,EAAU,eAAe,CAAC3E,GAAwBhB,EAAO,aAAaP,EAAU,OAAOnB,CAAQ,CAAC,GAE5F2P,GAAgBvI,GAAGkE,CAAE,GAAG;AAC1B,MAAAjE,EAAU,YAAYiE,CAAE;AACxB;AAAA,IACF;AAEA,IAAAjE,EAAU,WAAWiE,CAAE;AAAA;AACzB,GAEM0E,KAAuB,CAC3B5I,GACAkE,GACA,EAAE,QAAA5J,GAAQ,WAAA2F,GAAW,WAAAlG,GAAW,UAAAnB,QAC7B;AACH,MAAI,CAAC0B,EAAO,YAAa;AAIzB,QAAMuO,IADS7I,EAAE,OACc,QAAQ,oBAAoB;AAE3D,MAAI6I,GAAiB;AACnB,UAAMC,IAAgB,CAAChO,GAAsBR,EAAO,aAAaP,EAAU,OAAOnB,CAAQ;AAC1F,IAAAqH,EAAU,eAAe6I,CAAa,GACtC7I,EAAU,YAAY4I,CAA8B;AACpD;AAAA,EACF;AAEA,MAAIH,GAAY1I,GAAGkE,CAAE,GAAG;AACtB,IAAAyE,GAAsB3I,GAAGkE,GAAI,EAAE,QAAA5J,GAAQ,WAAA2F,GAAW,WAAAlG,GAAW,UAAAnB,GAAU;AACvE;AAAA,EACF;AAEA,QAAMkQ,IAAgB,CAAChO,GAAsBR,EAAO,aAAaP,EAAU,OAAOnB,CAAQ;AAE1F,MADAqH,EAAU,eAAe6I,CAAa,GAClCL,GAAezI,GAAGkE,CAAE,GAAG;AACzB,IAAAjE,EAAU,eAAeiE,CAAE;AAC3B;AAAA,EACF;AAEA,EAAAjE,EAAU,YAAYiE,CAAE;AAC1B,GAEA6E,KAAe,CACb/I,GACAkE,GACAlH,MACG;AACH,MAAIxC,EAAkBwC,EAAQ,UAAU,KAAK,GAAG;AAC9C,IAAA4L,GAAwB5I,GAAGkE,GAAIlH,CAAO;AACtC;AAAA,EACF;AACA,EAAA2L,GAAyB3I,GAAGkE,GAAIlH,CAAO;AACzC,GCjDMgM,KAAoB,CACxBhJ,GACAkE,GACA+E,GACAjM,MACG;AACH,MACE,CAAC1B;AAAA,IACC2N;AAAA,IACAjM,EAAQ,UAAU;AAAA,IAClBA,EAAQ;AAAA,EAAA;AAGV,WAAOA,EAAQ,UAAU;AAG3B,QAAM5B,IAAS4B,EAAQ,UAAU,MAAM,aACnCA,EAAQ,OAAO,QAAQ,IAAIA,EAAQ,UAAU,MAAM,UAAU,IAC7D;AACJ,MAAI,CAAC5B;AACH,WAAO4B,EAAQ,UAAU;AAG3B,QAAMkM,IAAU,OAAO,OAAO9N,EAAO,SAAS,CAAA,CAAE,EAAE,KAAA,EAAO;AAAA,IACvD,CAAC+N,MAAMA,EAAE,SAASnM,EAAQ,UAAU,MAAM;AAAA,EAAA;AAM5C,SAJI,CAACkM,KAIDA,EAAQ,SAASD,EAAY,SAI7BV,GAAgBvI,GAAGkE,CAAE,IACvBlH,EAAQ,OAAO,iBAAiBiM,GAAaC,CAAO,IAEpDlM,EAAQ,OAAO,gBAAgBiM,GAAaC,CAAO,IAG9ClM,EAAQ,UAAU;AAC3B,GAEMoM,KAA8B,CAClC/O,GACAzB,MACc;AACd,MAAI,CAACyB,EAAK,SAAS,OAAO,KAAKA,EAAK,KAAK,EAAE,WAAW,GAAG;AAEvD,UAAMgP,IADWzQ,EAAS,cAAcyB,CAAI,GACZ;AAChC,IAAIgP,KAAiBA,EAAc,SAAS,KAC1ChP,EAAK,QAAQ,CAAA,GACbgP,EAAc,QAAQ,CAAC/M,MAAqB;AAC1C,MAAAjC,EAAK,MAAMiC,CAAQ,IAAI,CAAA;AAAA,IACzB,CAAC,KAEDjC,EAAK,QAAQ,EAAE,SAAS,GAAC;AAAA,EAE7B;AACA,SAAOA;AACT,GAEMiP,KAAmB,CACvBtJ,GACAkE,GACA+E,GACAjM,MACG;AACH,QAAM,EAAE,QAAA1C,GAAQ,UAAA1B,GAAU,WAAAmB,EAAA,IAAciD,GAClCsI,IAAStF,EAAE,QACXjF,IAAaT,EAAO,QAAQ,IAAIgL,EAAO,EAAE;AAC/C,MAAIvK,KAAcP,EAAkBO,CAAU;AAC5C,WAAAuO,GAAiBtJ,GAAGkE,GAAI+E,GAAa,EAAE,GAAGjM,GAAS,WAAWpB,EAAIb,CAAU,GAAG,GACxEiC,EAAQ,UAAU;AAE3B,QAAM6L,IAAkBvD,EAAO,QAAQ,oBAAoB;AAC3D,MAAIhJ,IAAW;AAEf,MAAIuM,GAAiB;AACnB,UAAMU,IAAeV,EAAgB,aAAa,gBAAgB;AAClE,IAAIU,MACFjN,IAAWiN;AAAA,EAEf,OAAO;AACL,QAAIb,GAAY1I,GAAGkE,CAAE;AACnB,aAAO8E,GAAkBhJ,GAAGkE,GAAI+E,GAAajM,CAAO;AAGtD,UAAMwM,IAAcxM,EAAQ,UAAU,MAAM,SAAS,CAAA,GAC/CyM,IAAY,OAAO,KAAKD,CAAW;AACzC,IAAAlN,IAAWmN,EAAU,SAAS,IAAIA,EAAU,CAAC,IAAI;AAAA,EACnD;AAEA,SACG3O;AAAA,IACCmO;AAAA,IACAjM,EAAQ,UAAU;AAAA,IAClBA,EAAQ;AAAA,EAAA,MAMRyL,GAAezI,GAAGkE,CAAE,IACtBlH,EAAQ,OAAO,cAAciM,GAAajM,EAAQ,UAAU,OAAOV,CAAQ,IAE3EU,EAAQ,OAAO,aAAaiM,GAAajM,EAAQ,UAAU,OAAOV,CAAQ,IAGrEU,EAAQ,UAAU;AAC3B,GAEA0M,KAAe,CACb1J,GACAkE,GACAlH,MACG;AACH,MAAI,CAACA,EAAQ,OAAO;AAClB,WAAOA,EAAQ,UAAU;AAG3B,QAAM2M,KAAY,MAAM;AACtB,QAAIC;AACJ,WAAI5M,EAAQ,OAAO,aAAa,OAC9B4M,IAAO,KAAK,MAAM,KAAK,UAAU5M,EAAQ,OAAO,WAAW,CAAC,IAE5D4M,IAAOrO;AAAA,MACL,KAAK,MAAM,KAAK,UAAUyB,EAAQ,OAAO,WAAW,CAAC;AAAA,IAAA,GAGlDoM,GAA4BQ,GAAM5M,EAAQ,QAAQ;AAAA,EAC3D,GAAA;AAEA,SAAOxC,EAAkBwC,EAAQ,UAAU,KAAK,IAC5CsM,GAAiBtJ,GAAGkE,GAAIyF,GAAU3M,CAAO,IACzCgM,GAAkBhJ,GAAGkE,GAAIyF,GAAU3M,CAAO;AAChD,GC1JA6M,KAAe;AAAA,EACb,gBAAAd;AAAA,EACA,YAAAW;AACF,GCEAI,KAAe,CACb/P,GACAuN,GACA1O,MAMG;AACH,QAAM0B,IAASC,EAAA,GACT0F,IAAYd,GAAA,GAEZe,IAAkB,CAACF,MAAM;AAC7B,IAAK1F,EAAO,WAGZA,EAAO,SAASP,EAAU,KAAK;AAAA,EACjC,GAEMgP,IAAiBzH,GAAS,CAACyI,MAAsB;AACrD,IAAKzP,EAAO,WAIPgN,EAAQ,OAAO,OAGpBuC,GAAK,eAAeE,GAAOzC,EAAQ,MAAM,KAAK;AAAA,MAC5C,QAAAhN;AAAA,MACA,WAAA2F;AAAA,MACA,WAAAlG;AAAA,MACA,UAAAnB;AAAA,IAAA,CACD;AAAA,EACH,GAAG,CAAC;AA0BJ,SAAO;AAAA,IACL,iBAAAsH;AAAA,IACA,gBAAA6I;AAAA,IACA,YA3BiB,CAACgB,MAAsB;AACxC,MAAKzP,EAAO,WAGPgN,EAAQ,OAAO,OAIpBuC,GAAK,WAAcE,GAAOzC,EAAQ,MAAM,KAAK;AAAA,QAC3C,QAAAhN;AAAA,QACA,WAAA2F;AAAA,QACA,WAAAlG;AAAA,QACA,UAAAnB;AAAA,MAAA,CACD;AAAA,IACH;AAAA,IAcE,eAZoB,MAAM;AAC1B,MAAK0B,EAAO,YAGZA,EAAO,SAAS,IAAI,GACpB2F,EAAU,KAAA;AAAA,IACZ;AAAA,EAME;AAEJ;;;;;;;ACEA,UAAMlG,IAAYmH,GAJJvI,GAIiB,WAAW,GACpC,EAAE,QAAA2B,GAAQ,SAAAgI,MAAY+F,GAAoBtO,CAAS,GACnD,EAAE,cAAAC,GAAc,cAAAC,GAAc,UAAArB,EAAA,IAAakB,GAAoBC,CAAS;AAG9E,IAAInB,EAAS,SAAO8F,GAAQ,YAAY9F,CAAQ;AAEhD,UAAM0O,IAAU1L,EAAiD,IAAI,GAE/DoO,IAAgBjR,EAAS,MAAMuB,GAAQ,YAAYP,EAAU,MAAM,IAAI,CAAC,GAExE,EAAE,YAAA0I,GAAY,aAAAwH,GAAa,YAAAC,EAAA,IAAe7C;AAAA,MAC9CtN,EAAU;AAAA,MACVuN;AAAA,IAAA,GAGI,EAAE,iBAAApH,GAAiB,gBAAA6I,GAAgB,YAAAW,GAAY,eAAAvJ,EAAA,IACnD2J,GAAiB/P,GAAWuN,GAAS1O,EAAS,KAAK,GAE/C,EAAE,eAAAuR,MAAkBxC;AAAA,MACxB5N;AAAA,MACAO;AAAA,MACAA,GAAQ,iBAAiB,CAAA;AAAA,IAAC,GAGtB0I,IAAWjK,EAAS,MACPH,GAAU,OAAO,QAAQmB,EAAU,MAAM,aAAa,GACtD,iBAAiBA,EAAU,MAAM,aACnD,GAEKqQ,IAAiB,MAAM;AAC3B,MAAAF,EAAA;AAAA,IACF,GAEMG,IAAwB,CAACtO,MAAyB;AACtD,UAAIuO,IAAO;AACX,eAASC,IAAI,GAAGA,IAAIxO,EAAK,QAAQwO;AAC/B,QAAAD,IAAOvO,EAAK,WAAWwO,CAAC,MAAMD,KAAQ,KAAKA;AAE7C,YAAM9F,IAAI8F,IAAO,KACXE,IAAI,KAAMF,IAAO,IACjBG,IAAI,KAAMH,IAAO;AACvB,aAAO,QAAQ9F,CAAC,KAAKgG,CAAC,MAAMC,CAAC;AAAA,IAC/B,GAEMC,IAAY3R,EAAS,MAAMsR,EAAsBtQ,EAAU,MAAM,IAAI,CAAC,GAEtE4Q,IAAiB5R,EAAS,MAAM;AACpC,YAAMT,IAAkB,CAAA,GAElB+Q,IADWzQ,GAAU,OAAO,cAAcmB,EAAU,KAAK,GAC/B;AAChC,aAAIsP,KAAiBA,EAAc,SAAS,IAC1C/Q,EAAM,KAAK,GAAG+Q,CAAa,IAE3B/Q,EAAM,KAAK,SAAS,GAEfA;AAAA,IACT,CAAC,GAEKsS,IAAoB7R,EAAS,MAC7ByB,EAAkBT,EAAU,KAAK,IAAU,KACxC,OAAO,OAAOA,EAAU,MAAM,SAAS,CAAA,CAAE,EAAE,KAAK,CAAA8Q,MAAYA,EAAS,SAAS,CAAC,CACvF,GAEKC,IAAuB,CAACD,GAAuBvO,MAC9C0N,EAAc,QACfA,EAAc,MAAM,YAAYA,EAAc,MAAM,aAAa1N,IAAiB,CAAA,IAC/EyO,GAAiBf,EAAc,OAAOa,CAAQ,IAFpB,CAAA,GAO7BE,KAAmB,CACvB/O,GACA6O,MAEI7O,EAAK,SAAS,WACT6O,EAAS,IAAI,CAACxE,OAAe;AAAA,MAClC,KAAK,GAAGA,EAAU,IAAI;AAAA,MACtB,WAAW;AAAA,QACT,GAAGA;AAAA,QACH,OAAO;AAAA,UACL,GAAGA,EAAU;AAAA,UACb,GAAIrK,EAAK,QAAQ,CAAA;AAAA,QAAC;AAAA,MACpB;AAAA,IACF,EACA,IAGAA,EAAK,SAAS,SACXA,EAAK,OAEH6O,EAAS,OAAO,CAACG,GAAK3E,MACpB2E,EAAI;AAAA,MACThP,EAAK,KAAM,IAAI,CAACiP,GAAMlO,OAAW;AAAA,QAC/B,KAAK,GAAGsJ,EAAU,IAAI,SAAStJ,CAAK;AAAA,QACpC,WAAW;AAAA,UACT,GAAGsJ;AAAA,UACH,OAAO;AAAA,YACL,GAAGA,EAAU;AAAA,YACb,GAAI4E,KAAQ,CAAA;AAAA,UAAC;AAAA,QACf;AAAA,MACF,EACA;AAAA,IAAA,GAEH,CAAA,CAAwB,IAfJ,CAAA,IAkBlB,CAAA;;;aArLC5R,EAAAiJ,CAAA,KAAWvI,EAAA,SAAaV,EAAAW,CAAA,KAFhCoE,EAAA,GAAAnF,EAkDYC,GA5CLG,EAAAW,CAAA,EAAa,aAAa,GANjCZ,GAkDY;AAAA;iBAjDN;AAAA,QAAJ,KAAIkO;AAAA,MAAA,GAES,EAAA,GAAAjO,EAAAY,CAAA,MAAiBF,EAAA,MAAU,SACxCmR,GAAM7R,EAAc8Q,CAAA,CAAD,GAAA;AAAA,QAClB,kBAAgBnH,EAAA;AAAA,QAEhB,yBAAyB0H,EAAA,MAAA;AAAA,QACzB,OAAK;AAAA,mCAAmCrR,EAAAoJ,CAAA;AAAA,UAAkC,gBAAApJ,EAAAiB,CAAA,GAAQ;AAAA,UAAiC,kBAAAjB,EAAAmB,CAAA,EAAkBT,EAAA,KAAS;AAAA,4BAA2BA,EAAA,MAAU,SAAS,OAAO,KAAKA,EAAA,MAAU,KAAK,EAAE,WAAM,KAAU,OAAO,OAAOA,EAAA,MAAU,KAAK,EAAE,MAAM,CAAA2M,MAAQA,EAAK,WAAM,CAAA;AAAA,wCAAqDrN,EAAAiB,CAAA,GAAQ,eAAwB,CAAAjB,EAAAqB,EAAA,EAAsBrB,EAAAiB,CAAA,EAAO,aAAaP,EAAA,KAAS;AAAA,QAAA;AAAA,QASza,WAAWV,EAAAiB,CAAA,GAAQ,WAAWjB,EAAA4Q,CAAA;AAAA,QAC9B,WAAoBG,GAAc,CAAA,WAAA,MAAA,CAAA;AAAA,QAClC,aAAsB/Q,EAAA8G,CAAA,GAAa,CAAA,WAAA,MAAA,CAAA;AAAA,QACnC,cAAuB9G,EAAA0P,CAAA,GAAc,CAAA,WAAA,MAAA,CAAA;AAAA,QACrC,eAAgB1P,EAAA6G,CAAA,GAAe,CAAA,MAAA,CAAA;AAAA,QAC/B,UAAmB7G,EAAAqQ,CAAA,GAAU,CAAA,WAAA,MAAA,CAAA;AAAA,MAAA;QAEDjJ,EAAAkK,EAAA,QAAZrO;gBAA6CA;AAAA,gBAC5D,MASM;AAAA,YAREjD,EAAAmB,CAAA,EAAkBT,OAAS,KAAMA,EAAA,MAAU,MAAMuC,CAAQ,GAAG,UAAM,UAD1E+B,EASM,OAAA;AAAA;cAPJ,OAAM;AAAA,cACL,kBAAgB/B;AAAA,cAChB,YAAQ2C,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA0D;AAAAA;AAAAA,0BAAetJ,EAAA0P,CAAA,KAAA1P,EAAA0P,CAAA,EAAA,GAAAb,CAAA;AAAA,gBAAc,CAAA,WAAA,MAAA;AAAA,cAAA;AAAA,cACrC,QAAIjJ,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA0D;AAAAA;AAAAA,0BAAetJ,EAAAqQ,CAAA,KAAArQ,EAAAqQ,CAAA,EAAA,GAAAxB,CAAA;AAAA,gBAAU,CAAA,WAAA,MAAA;AAAA,cAAA;AAAA,YAAA;cAE9BjJ,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAyB,EAAkE,QAAA,EAA5D,OAAM,0BAAA,GAA0B,yBAAqB,EAAA;AAAA,cAC3DA,EAAqD,QAArDE,IAAqDD,GAAlBrE,CAAQ,GAAA,CAAA;AAAA,YAAA;YAE7BsO,EAAA,cAAhBvM,EAaWmC,GAAA,EAAA,KAAA,KAAA;AAAA,cAZOwJ,EAAA,OAAe,QAAQA,QAAc,aAAa1N,YAChE+B,EAIEmC,GAAA,EAAA,KAAA,KAAAC,EAHeqK,EAAqB/Q,EAAA,MAAU,QAAQuC,CAAQ,KAAA,CAAA,GAASA,CAAQ,GAAA,CAAxE2O,YADThS,EAIEiO,GAAA;AAAA,gBAFC,KAAK+D,EAAK;AAAA,gBACV,WAAWA,EAAK;AAAA,cAAA;eAGrB7M,EAAA,EAAA,GAAAC,EAIEmC,WAHqBzG,EAAA,MAAU,QAAQuC,CAAQ,UAAxC+J,YADTpN,EAIEkO,GAAA;AAAA,gBAFC,KAAKd,EAAU;AAAA,gBACf,WAAWA;AAAA,cAAA;;;;;;;;;;;;;;;;ACNtB,UAAM3N,IAAQC,GAMRoB,IAAYmH,GAAMxI,GAAO,WAAW,GACpC,EAAE,QAAA4B,GAAQ,SAAAgI,MAAY+F,GAAoBtO,CAAS,GACnD,EAAE,cAAAC,GAAc,cAAAC,GAAc,UAAArB,EAAA,IAAakB,GAAoBC,CAAS;AAE9E,IAAA2E,GAAQ,YAAY9F,CAAQ;AAE5B,UAAMuS,IAAYpS,EAAS,OAAO;AAAA,MAChC,GAAGkB,EAAa;AAAA,MAChB,GAAGF,EAAU,OAAO;AAAA,IAAA,EACpB,GAEIiC,IAAOjD,EAAS,MACbL,EAAM,cAAcqB,EAAU,MAAM,IAAI,KAAKO,GAAQ,cAAcP,EAAU,MAAM,IAAI,CAC/F,GAEKqR,IAAYrS,EAAS,MAClBgB,EAAU,MAAM,SAAS,CAAA,CACjC,GAEKsR,IAAWtS,EAAS,MAAMyB,EAAkBT,EAAU,KAAK,CAAC,GAE5D4Q,IAAiB5R,EAAS,MAAM;AACpC,YAAMT,IAAkB,CAAA,GAElB+Q,IADWzQ,GAAU,OAAO,cAAcmB,EAAU,KAAK,GAC/B;AAChC,aAAIsP,KAAiBA,EAAc,SAAS,IAC1C/Q,EAAM,KAAK,GAAG+Q,CAAa,IAE3B/Q,EAAM,KAAK,SAAS,GAEfA;AAAA,IACT,CAAC,GAEKsS,IAAoB7R,EAAS,MAC7BsS,EAAS,QAAc,KACpB,OAAO,OAAOD,EAAU,KAAK,EAAE,KAAK,CAAAP,MAAYA,EAAS,SAAS,CAAC,CAC3E,GAEKS,IAAmB,CAACT,GAAuBvO,MAC1CN,EAAK,QACNA,EAAK,MAAM,YAAYA,EAAK,MAAM,aAAaM,IAAiB,CAAA,IAC7DyO,EAAiB/O,EAAK,OAAO6O,CAAQ,IAFpB,CAAA,GAKpBvD,IAAU1L,EAAwB,IAAI,GAEtC,EAAE,eAAAuO,MAAkBxC;AAAA,MACxB5N;AAAA,MACAO;AAAA,MACA5B,EAAM,iBAAiB4B,GAAQ,iBAAiB,CAAA;AAAA,IAAC;AAGnD,IAAAsM,GAAU,MAAM;AACd,MAAIU,EAAQ,SAASvN,EAAU,SAASO,KACtCA,EAAO,WAAWP,EAAU,OAAOuN,EAAQ,KAAK;AAAA,IAEpD,CAAC;AAID,UAAMyD,IAAmB,CACvB/O,GACA6O,MAEI7O,EAAK,SAAS,WACT6O,EAAS,IAAI,CAACxE,OAAe;AAAA,MAClC,KAAK,GAAGA,EAAU,IAAI;AAAA,MACtB,WAAW;AAAA,QACT,GAAGA;AAAA,QACH,OAAO;AAAA,UACL,GAAGA,EAAU;AAAA,UACb,GAAIrK,EAAK,QAAQ,CAAA;AAAA,QAAC;AAAA,MACpB;AAAA,IACF,EACA,IAGAA,EAAK,SAAS,SACXA,EAAK,OAEH6O,EAAS,OAAO,CAACG,GAAK3E,MACpB2E,EAAI;AAAA;AAAA,MAEThP,EAAK,KAAK,IAAI,CAACiP,GAAMlO,OAAW;AAAA,QAC9B,KAAK,GAAGsJ,EAAU,IAAI,SAAStJ,CAAK;AAAA,QACpC,WAAW;AAAA,UACT,GAAGsJ;AAAA,UACH,OAAO;AAAA,YACL,GAAGA,EAAU;AAAA,YACb,GAAI4E,KAAQ,CAAA;AAAA,UAAC;AAAA,QACf;AAAA,MACF,EACA;AAAA,IAAA,GAEH,CAAA,CAAwB,IAhBJ,CAAA,IAmBlB,CAAA;qBA7IC5R,EAAAiJ,CAAA,KAAWjJ,EAAAT,CAAA,KAAYS,EAAAW,CAAA,KAF/BoE,EAAA,GAAAnF,EAyBYC,GAtBLG,EAAAW,CAAA,EAAa,aAAa,GAHjCZ,GAyBY;AAAA;eAxBN;AAAA,MAAJ,KAAIkO;AAAA,IAAA,GAGI6D,EAAA,OACRD,GAAoB7R,EAAA8Q,CAAA,CAAD,CAAA,GAAA7Q,GAAA,EAAA,GAAA,KAAA;AAAA,MAEUmH,EAAAkK,EAAA,QAAZrO;cAA6CA;AAAA,cAC5D,MAeW;AAAA,UAfKsO,EAAA,cAAhBvM,EAeWmC,GAAA,EAAA,KAAA,KAAA;AAAA,YAdQxE,EAAA,OAAM,eAQrBqC,EAIEmC,GAAA,EAAA,KAAA,KAAAC,EAHe6K,EAAiBF,EAAA,MAAU9O,CAAQ,GAAGA,CAAQ,GAAA,CAAtD2O,YADThS,EAIEsS,IAAA;AAAA,cAFC,KAAKN,EAAK;AAAA,cACV,WAAWA,EAAK;AAAA,YAAA,uCAVnB7M,EAAA,EAAA,GAAAC,EAIEmC,GAAA,EAAA,KAAA,EAAA,GAAAC,EAHoB2K,EAAA,MAAU9O,CAAQ,IAA/B+J,YADTpN,EAIEsS,IAAA;AAAA,cAFC,KAAKlF,EAAU;AAAA,cACf,WAAWA;AAAA,YAAA;;;;;;;;;;;;;;;;ACMxB,UAAM3N,IAAQC,GAORC,IAAWG,EAAS,MAAM,IAAIuF,GAAkB5F,EAAM,WAAW,CAAC;AACxE,WAAAgG,GAAQ,YAAY9F,CAAQ,GAC5B8F,GAAQ,eAAehG,EAAM,eAAe,CAAA,CAAE,GAC9CgG,GAAQ,iBAAiBhG,EAAM,iBAAiB,CAAA,CAAE,qBA7BhD2F,EAMEmC,GAAA,MAAAC,EALoB9H,EAAA,OAAK,CAAlBoB,YADTd,EAMEsS,IAAA;AAAA,MAJC,KAAKxR,EAAU;AAAA,MACf,WAAAA;AAAA,MACA,aAAapB,EAAA;AAAA,MACb,eAAeA,EAAA;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;8CCNP6S,KAAoB;AAAA,EAC/B,UAAU;AAAA,IACR,MAAM;AAAA,EAAA;AAAA,EAER,OAAO;AAAA,EACP,YAAY;AAAA,IACV,0BAA0B;AAAA,MACxB,OAAO;AAAA,MACP,eAAe;AAAA,MACf,OAAO;AAAA,QACL,SACE;AAAA,QACF,eAAe;AAAA,MAAA;AAAA,IACjB;AAAA,EACF;AAEJ;ACbA,MAAMC,GAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBV,IAAIjS,GAAMkS,GAAUC,GAAO;AACzB,QAAI,OAAO,UAAU,CAAC,KAAK;AAEzB,eAASnS,KAAQ,UAAU,CAAC;AAC1B,aAAK,IAAIA,GAAM,UAAU,CAAC,EAAEA,CAAI,GAAG,UAAU,CAAC,CAAC;AAAA;AAGjD,OAAC,MAAM,QAAQA,CAAI,IAAIA,IAAO,CAACA,CAAI,GAAG,QAAQ,SAAUA,GAAM;AAC5D,aAAKA,CAAI,IAAI,KAAKA,CAAI,KAAK,CAAA,GACvBkS,KACF,KAAKlS,CAAI,EAAEmS,IAAQ,YAAY,MAAM,EAAED,CAAQ;AAAA,MAEnD,GAAG,IAAI;AAAA,EAEX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,IAAIlS,GAAMoS,GAAK;AACb,SAAKpS,CAAI,IAAI,KAAKA,CAAI,KAAK,CAAA,GAC3B,KAAKA,CAAI,EAAE,QAAQ,SAAUkS,GAAU;AACrC,MAAAA,EAAS,KAAKE,KAAOA,EAAI,UAAUA,EAAI,UAAUA,GAAKA,CAAG;AAAA,IAC3D,CAAC;AAAA,EACH;AACF;AAKA,MAAMC,GAAQ;AAAA,EACZ,YAAYC,GAAM;AAChB,SAAK,OAAOA,GACZ,KAAK,aAAa,CAAA;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,WAAW;AACT,aAASC,IAAO,UAAU,QAAQC,IAAU,IAAI,MAAMD,CAAI,GAAGE,IAAO,GAAGA,IAAOF,GAAME;AAClF,MAAAD,EAAQC,CAAI,IAAI,UAAUA,CAAI;AAEhC,IAAAD,EAAQ,QAAQ,CAAAE,MAAU;AACxB,UAAI,OAAOA,KAAW,YAAY,CAACA,EAAO,QAAQ,CAACA,EAAO;AACxD,cAAM,IAAI,MAAM,4BAA4B;AAE9C,MAAI,KAAK,WAAWA,EAAO,IAAI,MAI/BA,EAAO,KAAK,KAAK,IAAI,GACrB,KAAK,WAAWA,EAAO,IAAI,IAAIA;AAAA,IACjC,CAAC;AAAA,EACH;AACF;AAIA,MAAMC,EAAK;AAAA;AAAA;AAAA;AAAA,EAIT,WAAW,UAAU;AAEnB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,WAAW;AAChB,WAAO,0CAA0CA,EAAK;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,WAAWC,GAAS;AACzB,WAAAD,EAAK,eAAe,KAAK,IAAIC,EAAQ,QAAQD,EAAK,YAAY,GAC9DA,EAAK,UAAUC,CAAO,IAAI,GACnBD;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,YAAYC,GAASC,GAAYC,GAAoB;AAC1D,WAAAH,EAAK,gBAAgB,KAAK,IAAIC,EAAQ,QAAQD,EAAK,aAAa,GAChEA,EAAK,WAAWC,CAAO,IAAIC,GACvBC,IACFH,EAAK,kBAAkB,IAAIC,CAAO,IAElCD,EAAK,kBAAkB,OAAOC,CAAO,GAEhCD;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,kBAAkBI,GAAM;AAC7B,WAAAJ,EAAK,4BAA4B,IAAII,CAAI,GAClCJ;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,WAAWK,GAAcC,GAAe;AAC7C,WAAAN,EAAK,SAASK,CAAY,IAAIC,GACvBN;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,cAAcC,GAAS;AAC5B,kBAAOD,EAAK,UAAUC,CAAO,GACzBA,EAAQ,WAAWD,EAAK,iBAC1BA,EAAK,eAAeA,EAAK,aAAaA,EAAK,SAAS,IAE/CA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,oBAAoB;AACzB,WAAAA,EAAK,YAAY,CAAA,GACjBA,EAAK,eAAe,GACbA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,qBAAqBI,GAAM;AAChC,WAAAJ,EAAK,4BAA4B,OAAOI,CAAI,GACrCJ;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,eAAeC,GAAS;AAC7B,kBAAOD,EAAK,WAAWC,CAAO,GAC1BA,EAAQ,WAAWD,EAAK,kBAC1BA,EAAK,gBAAgBA,EAAK,aAAaA,EAAK,UAAU,IAExDA,EAAK,kBAAkB,OAAOC,CAAO,GAC9BD;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,qBAAqB;AAC1B,WAAAA,EAAK,aAAa,CAAA,GAClBA,EAAK,gBAAgB,GACdA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,cAAcK,GAAc;AACjC,kBAAOL,EAAK,SAASK,CAAY,GAC1BL;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,oBAAoB;AACzB,WAAAA,EAAK,WAAW,CAAA,GACTA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,OAAO;AACT,WAAO,KAAK,KAAK,OAAO,KAAK,KAAK;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,OAAO;AACT,WAAO,KAAK,KAAK,WAAW,KAAK,KAAK;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,YAAYO,GAAM;AAGhB,SAAK,OAAOA,GACZ,KAAK,QAAQ;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,MAAMA,GAAM;AACjB,WAAO,IAAIP,EAAKO,CAAI,EAAE,MAAK;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,aAAaC,GAAK;AACvB,WAAO,KAAK,IAAI,GAAG,GAAG,OAAO,KAAKA,CAAG,EAAE,IAAI,CAAAC,MAAKA,EAAE,MAAM,CAAC;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,eAAeC,GAAI;AACxB,WAAOA,KAAM,MAAMA,KAAM;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,iBAAiBC,GAAQ;AAC9B,WAAOX,EAAK,WAAWW,CAAM,KAAK;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,kBAAkBD,GAAI;AAC3B,WAAOA,KAAM,MAAMA,KAAM;AAAA,IAEzBA,KAAM,MAAMA,KAAM;AAAA,IAElBA,KAAM,OAAO,CAACV,EAAK,WAAW,OAAO,aAAaU,CAAE,CAAC;AAAA,IAErDV,EAAK,4BAA4B,IAAI,OAAO,aAAaU,CAAE,CAAC;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,iBAAiBA,GAAI;AAC1B,WAAOV,EAAK,kBAAkBU,CAAE,KAAKV,EAAK,eAAeU,CAAE;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAWE,GAAS;AAClB,UAAMC,IAAQ,IAAI,MAAMD,IAAU,mBAAmB,KAAK,KAAK;AAC/D,UAAAC,EAAM,QAAQ,KAAK,OACnBA,EAAM,cAAcD,GACdC;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,QAAQxT,GAAMa,GAAM;AAClB,QAAI8R,EAAK,MAAM3S,CAAI,GAAG;AACpB,YAAMoS,IAAM;AAAA,QACV,SAAS;AAAA,QACT,MAAAvR;AAAA,MACR;AACM,aAAA8R,EAAK,MAAM,IAAI3S,GAAMoS,CAAG,GACjBA,EAAI;AAAA,IACb;AACA,WAAOvR;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAWb,GAAM;AACf,QAAI2S,EAAK,MAAM3S,CAAI,GAAG;AACpB,YAAMoS,IAAM;AAAA,QACV,SAAS;AAAA,MACjB;AACM,aAAAO,EAAK,MAAM3S,CAAI,EAAE,KAAK,SAAUkS,GAAU;AACxC,eAAAA,EAAS,KAAKE,EAAI,SAASA,CAAG,GACvBA,EAAI;AAAA,MACb,CAAC,GACMA,EAAI;AAAA,IACb;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,eAAe;AACb,QAAIiB,IAAK,KAAK;AAEd,WAAOA,MAAOV,EAAK,cAAcU,MAAOV,EAAK,YAAYU,MAAOV,EAAK,WAAWU,MAAOV,EAAK;AAC1F,MAAAU,IAAK,KAAK,KAAK,WAAW,EAAE,KAAK,KAAK;AAExC,SAAK,QAAQ,eAAe;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,QAAQ;AACN,SAAK,QAAQ,YAAY;AACzB,UAAMzQ,IAAQ,KAAK,kBAAiB,GAG9B/B,IAAO+B,EAAM,WAAW,IAAIA,EAAM,CAAC,IAAI;AAAA,MAC3C,MAAM+P,EAAK;AAAA,MACX,MAAM/P;AAAA,IACZ;AACI,WAAO,KAAK,QAAQ,aAAa/B,CAAI;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,kBAAkB4S,GAAY;AAC5B,QAAI7Q,IAAQ,CAAA,GACV8Q,GACA7S;AACF,WAAO,KAAK,QAAQ,KAAK,KAAK;AAK5B,UAJA6S,IAAO,KAAK,MAIRA,MAASf,EAAK,eAAee,MAASf,EAAK;AAC7C,aAAK;AAAA,eAGD9R,IAAO,KAAK;AACd,QAAA+B,EAAM,KAAK/B,CAAI;AAAA,eAGN,KAAK,QAAQ,KAAK,KAAK,QAAQ;AACxC,YAAI6S,MAASD;AACX;AAEF,aAAK,WAAW,iBAAiB,KAAK,OAAO,GAAG;AAAA,MAClD;AAGJ,WAAO7Q;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,mBAAmB;AACjB,UAAM/B,IAAO,KAAK,WAAW,mBAAmB,KAAK,KAAK,uBAAsB;AAChF,gBAAK,aAAY,GACV,KAAK,QAAQ,oBAAoBA,CAAI;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,iBAAiB;AACf,SAAK,aAAY;AACjB,QAAI8S,IAAW,KAAK,KAAK,OAAO,KAAK,OAAOhB,EAAK,aAAa,GAC1DiB,IAASD,EAAS;AACtB,WAAOC,IAAS,KAAG;AAIjB,UAAIjB,EAAK,WAAW,eAAegB,CAAQ,MAAM,CAAChB,EAAK,kBAAkB,KAAK,IAAI,KAAK,KAAK,QAAQgB,EAAS,SAAS,KAAK,KAAK,UAAU,CAAChB,EAAK,iBAAiB,KAAK,KAAK,WAAW,KAAK,QAAQgB,EAAS,MAAM,CAAC;AACjN,oBAAK,SAASC,GACPD;AAET,MAAAA,IAAWA,EAAS,OAAO,GAAG,EAAEC,CAAM;AAAA,IACxC;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,yBAAyB;AACvB,QAAI/S,GAAMgT,GAAMC,GAAMC,GAAOC,GAAWjO,GAAMkO,GAAOlD,GAAGmD;AAYxD,QAPAnO,IAAO,KAAK,YAAW,GACnB,CAACA,MAGL8N,IAAO,KAAK,eAAc,GAGtB,CAACA;AACH,aAAO9N;AAiBT,SAZAiO,IAAY;AAAA,MACV,OAAOH;AAAA,MACP,MAAMlB,EAAK,iBAAiBkB,CAAI;AAAA,MAChC,SAASlB,EAAK,kBAAkB,IAAIkB,CAAI;AAAA,IAC9C,GACII,IAAQ,KAAK,YAAW,GACnBA,KACH,KAAK,WAAW,+BAA+BJ,CAAI,GAErDE,IAAQ,CAAChO,GAAMiO,GAAWC,CAAK,GAGxBJ,IAAO,KAAK,oBAAkB;AAEnC,UADAC,IAAOnB,EAAK,iBAAiBkB,CAAI,GAC7BC,MAAS,GAAG;AACd,aAAK,SAASD,EAAK;AACnB;AAAA,MACF;AACA,MAAAG,IAAY;AAAA,QACV,OAAOH;AAAA,QACP,MAAAC;AAAA,QACA,SAASnB,EAAK,kBAAkB,IAAIkB,CAAI;AAAA,MAChD,GACMK,IAAWL;AAGX,YAAMM,IAAc,CAAAC,MAAQJ,EAAU,WAAWI,EAAK,UAAUN,IAAOM,EAAK,OAAON,KAAQM,EAAK;AAChG,aAAOL,EAAM,SAAS,KAAKI,EAAYJ,EAAMA,EAAM,SAAS,CAAC,CAAC;AAC5D,QAAAE,IAAQF,EAAM,IAAG,GACjBF,IAAOE,EAAM,IAAG,EAAG,OACnBhO,IAAOgO,EAAM,IAAG,GAChBlT,IAAO;AAAA,UACL,MAAM8R,EAAK;AAAA,UACX,UAAUkB;AAAA,UACV,MAAA9N;AAAA,UACA,OAAAkO;AAAA,QACV,GACQF,EAAM,KAAKlT,CAAI;AAEjB,MAAAA,IAAO,KAAK,YAAW,GAClBA,KACH,KAAK,WAAW,+BAA+BqT,CAAQ,GAEzDH,EAAM,KAAKC,GAAWnT,CAAI;AAAA,IAC5B;AAGA,SAFAkQ,IAAIgD,EAAM,SAAS,GACnBlT,IAAOkT,EAAMhD,CAAC,GACPA,IAAI;AACT,MAAAlQ,IAAO;AAAA,QACL,MAAM8R,EAAK;AAAA,QACX,UAAUoB,EAAMhD,IAAI,CAAC,EAAE;AAAA,QACvB,MAAMgD,EAAMhD,IAAI,CAAC;AAAA,QACjB,OAAOlQ;AAAA,MACf,GACMkQ,KAAK;AAEP,WAAOlQ;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,cAAc;AACZ,QAAIwS,GAAIM,GAAUC,GAAQ/S;AAG1B,QAFA,KAAK,aAAY,GACjBA,IAAO,KAAK,WAAW,cAAc,GACjCA;AACF,aAAO,KAAK,QAAQ,eAAeA,CAAI;AAGzC,QADAwS,IAAK,KAAK,MACNV,EAAK,eAAeU,CAAE,KAAKA,MAAOV,EAAK;AAEzC,aAAO,KAAK,qBAAoB;AAElC,QAAIU,MAAOV,EAAK,eAAeU,MAAOV,EAAK;AAEzC,MAAA9R,IAAO,KAAK,oBAAmB;AAAA,aACtBwS,MAAOV,EAAK;AACrB,MAAA9R,IAAO,KAAK,YAAW;AAAA,SAClB;AAGL,WAFA8S,IAAW,KAAK,KAAK,OAAO,KAAK,OAAOhB,EAAK,YAAY,GACzDiB,IAASD,EAAS,QACXC,IAAS,KAAG;AAIjB,YAAIjB,EAAK,UAAU,eAAegB,CAAQ,MAAM,CAAChB,EAAK,kBAAkB,KAAK,IAAI,KAAK,KAAK,QAAQgB,EAAS,SAAS,KAAK,KAAK,UAAU,CAAChB,EAAK,iBAAiB,KAAK,KAAK,WAAW,KAAK,QAAQgB,EAAS,MAAM,CAAC,IAAI;AACpN,eAAK,SAASC;AACd,gBAAMS,IAAW,KAAK,YAAW;AACjC,iBAAKA,KACH,KAAK,WAAW,0BAA0B,GAErC,KAAK,QAAQ,eAAe;AAAA,YACjC,MAAM1B,EAAK;AAAA,YACX,UAAUgB;AAAA,YACV,UAAAU;AAAA,YACA,QAAQ;AAAA,UACpB,CAAW;AAAA,QACH;AACA,QAAAV,IAAWA,EAAS,OAAO,GAAG,EAAEC,CAAM;AAAA,MACxC;AACA,MAAIjB,EAAK,kBAAkBU,CAAE,KAC3BxS,IAAO,KAAK,iBAAgB,GACxB8R,EAAK,SAAS,eAAe9R,EAAK,IAAI,IACxCA,IAAO;AAAA,QACL,MAAM8R,EAAK;AAAA,QACX,OAAOA,EAAK,SAAS9R,EAAK,IAAI;AAAA,QAC9B,KAAKA,EAAK;AAAA,MACtB,IACmBA,EAAK,SAAS8R,EAAK,aAC5B9R,IAAO;AAAA,QACL,MAAM8R,EAAK;AAAA,MACvB,MAEiBU,MAAOV,EAAK,gBAErB9R,IAAO,KAAK,YAAW;AAAA,IAE3B;AACA,WAAKA,KAGLA,IAAO,KAAK,oBAAoBA,CAAI,GAC7B,KAAK,QAAQ,eAAeA,CAAI,KAH9B,KAAK,QAAQ,eAAe,EAAK;AAAA,EAI5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,oBAAoBA,GAAM;AACxB,SAAK,aAAY;AACjB,QAAIwS,IAAK,KAAK;AACd,WAAOA,MAAOV,EAAK,eAAeU,MAAOV,EAAK,eAAeU,MAAOV,EAAK,eAAeU,MAAOV,EAAK,eAAa;AAC/G,UAAI2B;AACJ,UAAIjB,MAAOV,EAAK,aAAa;AAC3B,YAAI,KAAK,KAAK,WAAW,KAAK,QAAQ,CAAC,MAAMA,EAAK;AAChD;AAEF,QAAA2B,IAAW,IACX,KAAK,SAAS,GACd,KAAK,aAAY,GACjBjB,IAAK,KAAK;AAAA,MACZ;AACA,WAAK,SACDA,MAAOV,EAAK,eACd9R,IAAO;AAAA,QACL,MAAM8R,EAAK;AAAA,QACX,UAAU;AAAA,QACV,QAAQ9R;AAAA,QACR,UAAU,KAAK,iBAAgB;AAAA,MACzC,GACaA,EAAK,YACR,KAAK,WAAW,iBAAiB,KAAK,OAAO,GAAG,GAElD,KAAK,aAAY,GACjBwS,IAAK,KAAK,MACNA,MAAOV,EAAK,eACd,KAAK,WAAW,YAAY,GAE9B,KAAK,WACIU,MAAOV,EAAK,cAErB9R,IAAO;AAAA,QACL,MAAM8R,EAAK;AAAA,QACX,WAAa,KAAK,gBAAgBA,EAAK,WAAW;AAAA,QAClD,QAAQ9R;AAAA,MAClB,KACiBwS,MAAOV,EAAK,eAAe2B,OAChCA,KACF,KAAK,SAEP,KAAK,aAAY,GACjBzT,IAAO;AAAA,QACL,MAAM8R,EAAK;AAAA,QACX,UAAU;AAAA,QACV,QAAQ9R;AAAA,QACR,UAAU,KAAK,iBAAgB;AAAA,MACzC,IAEUyT,MACFzT,EAAK,WAAW,KAGlB,KAAK,aAAY,GACjBwS,IAAK,KAAK;AAAA,IACZ;AACA,WAAOxS;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,uBAAuB;AACrB,QAAI0T,IAAS,IACXlB,GACAmB;AACF,WAAO7B,EAAK,eAAe,KAAK,IAAI;AAClC,MAAA4B,KAAU,KAAK,KAAK,OAAO,KAAK,OAAO;AAEzC,QAAI,KAAK,SAAS5B,EAAK;AAGrB,WADA4B,KAAU,KAAK,KAAK,OAAO,KAAK,OAAO,GAChC5B,EAAK,eAAe,KAAK,IAAI;AAClC,QAAA4B,KAAU,KAAK,KAAK,OAAO,KAAK,OAAO;AAI3C,QADAlB,IAAK,KAAK,MACNA,MAAO,OAAOA,MAAO,KAAK;AAQ5B,WANAkB,KAAU,KAAK,KAAK,OAAO,KAAK,OAAO,GACvClB,IAAK,KAAK,OACNA,MAAO,OAAOA,MAAO,SAEvBkB,KAAU,KAAK,KAAK,OAAO,KAAK,OAAO,IAElC5B,EAAK,eAAe,KAAK,IAAI;AAElC,QAAA4B,KAAU,KAAK,KAAK,OAAO,KAAK,OAAO;AAEzC,MAAK5B,EAAK,eAAe,KAAK,KAAK,WAAW,KAAK,QAAQ,CAAC,CAAC,KAC3D,KAAK,WAAW,wBAAwB4B,IAAS,KAAK,OAAO,GAAG;AAAA,IAEpE;AACA,WAAAC,IAAS,KAAK,MAGV7B,EAAK,kBAAkB6B,CAAM,IAC/B,KAAK,WAAW,gDAAgDD,IAAS,KAAK,OAAO,GAAG,KAC/EC,MAAW7B,EAAK,eAAe4B,EAAO,WAAW,KAAKA,EAAO,WAAW,CAAC,MAAM5B,EAAK,gBAC7F,KAAK,WAAW,mBAAmB,GAE9B;AAAA,MACL,MAAMA,EAAK;AAAA,MACX,OAAO,WAAW4B,CAAM;AAAA,MACxB,KAAKA;AAAA,IACX;AAAA,EACE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,sBAAsB;AACpB,QAAIE,IAAM;AACV,UAAMC,IAAa,KAAK,OAClBC,IAAQ,KAAK,KAAK,OAAO,KAAK,OAAO;AAC3C,QAAIC,IAAS;AACb,WAAO,KAAK,QAAQ,KAAK,KAAK,UAAQ;AACpC,UAAIvB,IAAK,KAAK,KAAK,OAAO,KAAK,OAAO;AACtC,UAAIA,MAAOsB,GAAO;AAChB,QAAAC,IAAS;AACT;AAAA,MACF,WAAWvB,MAAO;AAGhB,gBADAA,IAAK,KAAK,KAAK,OAAO,KAAK,OAAO,GAC1BA,GAAE;AAAA,UACR,KAAK;AACH,YAAAoB,KAAO;AAAA;AACP;AAAA,UACF,KAAK;AACH,YAAAA,KAAO;AACP;AAAA,UACF,KAAK;AACH,YAAAA,KAAO;AACP;AAAA,UACF,KAAK;AACH,YAAAA,KAAO;AACP;AAAA,UACF,KAAK;AACH,YAAAA,KAAO;AACP;AAAA,UACF,KAAK;AACH,YAAAA,KAAO;AACP;AAAA,UACF;AACE,YAAAA,KAAOpB;AAAA,QACnB;AAAA;AAEQ,QAAAoB,KAAOpB;AAAA,IAEX;AACA,WAAKuB,KACH,KAAK,WAAW,2BAA2BH,IAAM,GAAG,GAE/C;AAAA,MACL,MAAM9B,EAAK;AAAA,MACX,OAAO8B;AAAA,MACP,KAAK,KAAK,KAAK,UAAUC,GAAY,KAAK,KAAK;AAAA,IACrD;AAAA,EACE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,mBAAmB;AACjB,QAAIrB,IAAK,KAAK,MACZwB,IAAQ,KAAK;AAMf,SALIlC,EAAK,kBAAkBU,CAAE,IAC3B,KAAK,UAEL,KAAK,WAAW,gBAAgB,KAAK,IAAI,GAEpC,KAAK,QAAQ,KAAK,KAAK,WAC5BA,IAAK,KAAK,MACNV,EAAK,iBAAiBU,CAAE;AAC1B,WAAK;AAKT,WAAO;AAAA,MACL,MAAMV,EAAK;AAAA,MACX,MAAM,KAAK,KAAK,MAAMkC,GAAO,KAAK,KAAK;AAAA,IAC7C;AAAA,EACE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,gBAAgBC,GAAa;AAC3B,UAAMpG,IAAO,CAAA;AACb,QAAIkG,IAAS,IACTG,IAAkB;AACtB,WAAO,KAAK,QAAQ,KAAK,KAAK,UAAQ;AACpC,WAAK,aAAY;AACjB,UAAIrB,IAAO,KAAK;AAChB,UAAIA,MAASoB,GAAa;AAExB,QAAAF,IAAS,IACT,KAAK,SACDE,MAAgBnC,EAAK,eAAeoC,KAAmBA,KAAmBrG,EAAK,UACjF,KAAK,WAAW,sBAAsB,OAAO,aAAaoG,CAAW,CAAC;AAExE;AAAA,MACF,WAAWpB,MAASf,EAAK;AAIvB,YAFA,KAAK,SACLoC,KACIA,MAAoBrG,EAAK;AAE3B,cAAIoG,MAAgBnC,EAAK;AACvB,iBAAK,WAAW,oBAAoB;AAAA,mBAC3BmC,MAAgBnC,EAAK;AAC9B,qBAASqC,IAAMtG,EAAK,QAAQsG,IAAMD,GAAiBC;AACjD,cAAAtG,EAAK,KAAK,IAAI;AAAA;AAAA,iBAIXA,EAAK,WAAWqG,KAAmBA,MAAoB;AAEhE,aAAK,WAAW,gBAAgB;AAAA,WAC3B;AACL,cAAMlU,IAAO,KAAK,iBAAgB;AAClC,SAAI,CAACA,KAAQA,EAAK,SAAS8R,EAAK,aAC9B,KAAK,WAAW,gBAAgB,GAElCjE,EAAK,KAAK7N,CAAI;AAAA,MAChB;AAAA,IACF;AACA,WAAK+T,KACH,KAAK,WAAW,cAAc,OAAO,aAAaE,CAAW,CAAC,GAEzDpG;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,cAAc;AACZ,SAAK;AACL,QAAI9L,IAAQ,KAAK,kBAAkB+P,EAAK,WAAW;AACnD,QAAI,KAAK,SAASA,EAAK;AAErB,aADA,KAAK,SACD/P,EAAM,WAAW,IACZA,EAAM,CAAC,IACJA,EAAM,SAGT;AAAA,QACL,MAAM+P,EAAK;AAAA,QACX,aAAa/P;AAAA,MACvB,IALe;AAQT,SAAK,WAAW,YAAY;AAAA,EAEhC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,cAAc;AACZ,gBAAK,SACE;AAAA,MACL,MAAM+P,EAAK;AAAA,MACX,UAAU,KAAK,gBAAgBA,EAAK,WAAW;AAAA,IACrD;AAAA,EACE;AACF;AAGA,MAAMsC,KAAQ,IAAIhD,GAAK;AACvB,OAAO,OAAOU,GAAM;AAAA,EAClB,OAAAsC;AAAA,EACA,SAAS,IAAI5C,GAAQM,CAAI;AAAA;AAAA;AAAA;AAAA;AAAA,EAKzB,UAAU;AAAA,EACV,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,UAAU;AAAA,EACV,UAAU;AAAA,EACV,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,UAAU;AAAA,EACV,SAAS;AAAA,EACT,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,aAAa;AAAA;AAAA,EAEb,YAAY;AAAA;AAAA,EAEZ,aAAa;AAAA;AAAA,EAEb,aAAa;AAAA;AAAA,EAEb,aAAa;AAAA;AAAA,EAEb,aAAa;AAAA;AAAA,EAEb,aAAa;AAAA;AAAA,EAEb,aAAa;AAAA;AAAA,EAEb,aAAa;AAAA;AAAA,EAEb,aAAa;AAAA;AAAA,EAEb,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOZ,WAAW;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAIE,YAAY;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,EACV;AAAA;AAAA,EAEE,mBAAmB,oBAAI,IAAI,CAAC,IAAI,CAAC;AAAA;AAAA,EAEjC,6BAA6B,oBAAI,IAAI,CAAC,KAAK,GAAG,CAAC;AAAA;AAAA;AAAA;AAAA,EAI/C,UAAU;AAAA,IACR,MAAQ;AAAA,IACR,OAAS;AAAA,IACT,MAAQ;AAAA,EACZ;AAAA;AAAA,EAEE,UAAU;AACZ,CAAC;AACDA,EAAK,eAAeA,EAAK,aAAaA,EAAK,SAAS;AACpDA,EAAK,gBAAgBA,EAAK,aAAaA,EAAK,UAAU;AAGtD,MAAML,IAAO,CAAAY,MAAQ,IAAIP,EAAKO,CAAI,EAAE,MAAK,GACnCgC,KAAgB,OAAO,oBAAoB,MAAW;AAAA,CAAE;AAC9D,OAAO,oBAAoBvC,CAAI,EAAE,OAAO,CAAAwC,MAAQ,CAACD,GAAc,SAASC,CAAI,KAAK7C,EAAK6C,CAAI,MAAM,MAAS,EAAE,QAAQ,CAAAC,MAAK;AACtH,EAAA9C,EAAK8C,CAAC,IAAIzC,EAAKyC,CAAC;AAClB,CAAC;AACD9C,EAAK,OAAOK;AAEZ,MAAM0C,KAAkB;AACxB,IAAIC,KAAU;AAAA,EACZ,MAAM;AAAA,EACN,KAAKhD,GAAM;AAET,IAAAA,EAAK,MAAM,IAAI,oBAAoB,SAAuBF,GAAK;AAC7D,UAAIA,EAAI,QAAQ,KAAK,SAASE,EAAK,aAAa;AAC9C,aAAK;AACL,cAAMiD,IAAOnD,EAAI,MACXoD,IAAa,KAAK,iBAAgB;AAKxC,YAJKA,KACH,KAAK,WAAW,qBAAqB,GAEvC,KAAK,aAAY,GACb,KAAK,SAASlD,EAAK,YAAY;AACjC,eAAK;AACL,gBAAMmD,IAAY,KAAK,iBAAgB;AAavC,cAZKA,KACH,KAAK,WAAW,qBAAqB,GAEvCrD,EAAI,OAAO;AAAA,YACT,MAAMiD;AAAA,YACN,MAAAE;AAAA,YACA,YAAAC;AAAA,YACA,WAAAC;AAAA,UACZ,GAIcF,EAAK,YAAYjD,EAAK,WAAWiD,EAAK,QAAQ,KAAK,KAAK;AAC1D,gBAAIG,IAAUH;AACd,mBAAOG,EAAQ,MAAM,YAAYpD,EAAK,WAAWoD,EAAQ,MAAM,QAAQ,KAAK;AAC1E,cAAAA,IAAUA,EAAQ;AAEpB,YAAAtD,EAAI,KAAK,OAAOsD,EAAQ,OACxBA,EAAQ,QAAQtD,EAAI,MACpBA,EAAI,OAAOmD;AAAA,UACb;AAAA,QACF;AACE,eAAK,WAAW,YAAY;AAAA,MAEhC;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAIAjD,EAAK,QAAQ,SAASgD,EAAO;AAE7B,MAAMK,KAAc,IACdC,KAAc;AAEpB,IAAIrS,KAAQ;AAAA,EACV,MAAM;AAAA,EACN,KAAK+O,GAAM;AAET,IAAAA,EAAK,MAAM,IAAI,gBAAgB,SAA4BF,GAAK;AAC9D,UAAI,KAAK,SAASuD,IAAa;AAC7B,cAAME,IAAe,EAAE,KAAK;AAC5B,YAAIC,IAAY;AAChB,eAAO,KAAK,QAAQ,KAAK,KAAK,UAAQ;AACpC,cAAI,KAAK,SAASH,MAAe,CAACG,GAAW;AAC3C,kBAAMC,IAAU,KAAK,KAAK,MAAMF,GAAc,KAAK,KAAK;AACxD,gBAAIG,IAAQ;AACZ,mBAAO,EAAE,KAAK,QAAQ,KAAK,KAAK,UAAQ;AACtC,oBAAMC,IAAO,KAAK;AAClB,kBAAIA,KAAQ,MAAMA,KAAQ,OACvBA,KAAQ,MAAMA,KAAQ,MACtBA,KAAQ,MAAMA,KAAQ;AAEvB,gBAAAD,KAAS,KAAK;AAAA;AAEd;AAAA,YAEJ;AACA,gBAAIhR;AACJ,gBAAI;AACF,cAAAA,IAAQ,IAAI,OAAO+Q,GAASC,CAAK;AAAA,YACnC,SAASxP,GAAG;AACV,mBAAK,WAAWA,EAAE,OAAO;AAAA,YAC3B;AACA,mBAAA4L,EAAI,OAAO;AAAA,cACT,MAAME,EAAK;AAAA,cACX,OAAAtN;AAAA,cACA,KAAK,KAAK,KAAK,MAAM6Q,IAAe,GAAG,KAAK,KAAK;AAAA,YAC/D,GAGYzD,EAAI,OAAO,KAAK,oBAAoBA,EAAI,IAAI,GACrCA,EAAI;AAAA,UACb;AACA,UAAI,KAAK,SAASE,EAAK,cACrBwD,IAAY,KACHA,KAAa,KAAK,SAASxD,EAAK,gBACzCwD,IAAY,KAEd,KAAK,SAAS,KAAK,SAASF,KAAc,IAAI;AAAA,QAChD;AACA,aAAK,WAAW,gBAAgB;AAAA,MAClC;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEA,MAAMM,KAAY,IACZC,KAAa,IAEbzD,KAAS;AAAA,EACb,MAAM;AAAA,EACN,qBAAqB,oBAAI,IAAI,CAAC,KAAK,MAAM,OAAO,MAAM,MAAM,MAAM,MAAM,OAAO,OAAO,QAAQ,MAAM,MAAM,MAAM,OAAO,OAAO,KAAK,CAAC;AAAA,EACpI,iBAAiB,CAACwD,IAAWC,EAAU;AAAA,EACvC,sBAAsB;AAAA,EACtB,KAAK7D,GAAM;AACT,UAAM8D,IAAkB,CAAC9D,EAAK,YAAYA,EAAK,UAAU;AACzD,IAAAI,GAAO,oBAAoB,QAAQ,CAAA2D,MAAM/D,EAAK,YAAY+D,GAAI3D,GAAO,sBAAsB,EAAI,CAAC,GAChGJ,EAAK,MAAM,IAAI,gBAAgB,SAA4BF,GAAK;AAC9D,YAAM6D,IAAO,KAAK;AAClB,MAAIvD,GAAO,gBAAgB,KAAK,CAAA/C,MAAKA,MAAMsG,KAAQtG,MAAM,KAAK,KAAK,WAAW,KAAK,QAAQ,CAAC,CAAC,MAC3F,KAAK,SAAS,GACdyC,EAAI,OAAO;AAAA,QACT,MAAM;AAAA,QACN,UAAU6D,MAASC,KAAY,OAAO;AAAA,QACtC,UAAU,KAAK,oBAAoB,KAAK,iBAAgB,CAAE;AAAA,QAC1D,QAAQ;AAAA,MAClB,IACY,CAAC9D,EAAI,KAAK,YAAY,CAACgE,EAAgB,SAAShE,EAAI,KAAK,SAAS,IAAI,MACxE,KAAK,WAAW,cAAcA,EAAI,KAAK,QAAQ,EAAE;AAAA,IAGvD,CAAC,GACDE,EAAK,MAAM,IAAI,eAAe,SAA6BF,GAAK;AAC9D,UAAIA,EAAI,MAAM;AACZ,cAAM6D,IAAO,KAAK;AAClB,QAAIvD,GAAO,gBAAgB,KAAK,CAAA/C,MAAKA,MAAMsG,KAAQtG,MAAM,KAAK,KAAK,WAAW,KAAK,QAAQ,CAAC,CAAC,MACtFyG,EAAgB,SAAShE,EAAI,KAAK,IAAI,KACzC,KAAK,WAAW,cAAcA,EAAI,KAAK,QAAQ,EAAE,GAEnD,KAAK,SAAS,GACdA,EAAI,OAAO;AAAA,UACT,MAAM;AAAA,UACN,UAAU6D,MAASC,KAAY,OAAO;AAAA,UACtC,UAAU9D,EAAI;AAAA,UACd,QAAQ;AAAA,QACpB;AAAA,MAEM;AAAA,IACF,CAAC,GACDE,EAAK,MAAM,IAAI,oBAAoB,SAA0BF,GAAK;AAChE,MAAIA,EAAI,QAINkE,EAA4BlE,EAAI,IAAI;AAAA,IAExC,CAAC;AACD,aAASkE,EAA4BzV,GAAM;AACzC,MAAI6R,GAAO,oBAAoB,IAAI7R,EAAK,QAAQ,KAC9CA,EAAK,OAAO,wBACZyV,EAA4BzV,EAAK,IAAI,GACrCyV,EAA4BzV,EAAK,KAAK,KAC5BA,EAAK,YACf,OAAO,OAAOA,CAAI,EAAE,QAAQ,CAAA0V,MAAO;AACjC,QAAIA,KAAO,OAAOA,KAAQ,YACxBD,EAA4BC,CAAG;AAAA,MAEnC,CAAC;AAAA,IAEL;AAAA,EACF;AACF;AAKAjE,EAAK,QAAQ,SAAS/O,IAAOmP,EAAM;AACnCJ,EAAK,WAAW,QAAQ;AACxBA,EAAK,WAAW,MAAM;AACtBA,EAAK,WAAW,QAAQ,IAAI;AAC5BA,EAAK,WAAW,aAAa,MAAS;AACtC,MAAMkE,KAA2B,oBAAI,IAAI,CAAC,eAAe,aAAa,oBAAoB,oBAAoB,oBAAoB,kBAAkB,CAAC,GAC/IC,IAAW;AAAA;AAAA;AAAA;AAAA;AAAA,EAKf,QAAQC,GAAKC,GAAM;AACjB,YAAQD,EAAI,MAAI;AAAA,MACd,KAAK;AAAA,MACL,KAAK;AACH,eAAOD,EAAS,qBAAqBC,GAAKC,CAAI;AAAA,MAChD,KAAK;AACH,eAAOF,EAAS,aAAaC,GAAKC,CAAI;AAAA,MACxC,KAAK;AACH,eAAOF,EAAS,0BAA0BC,GAAKC,CAAI;AAAA,MACrD,KAAK;AACH,eAAOF,EAAS,eAAeC,GAAKC,CAAI;AAAA,MAC1C,KAAK;AACH,eAAOF,EAAS,YAAYC,GAAKC,CAAI;AAAA,MACvC,KAAK;AACH,eAAOF,EAAS,qBAAqBC,GAAKC,CAAI;AAAA,MAChD,KAAK;AACH,eAAOF,EAAS,oBAAoBC,GAAKC,CAAI;AAAA,MAC/C,KAAK;AACH,eAAOF,EAAS,oBAAoBC,GAAKC,CAAI;AAAA,MAC/C,KAAK;AACH,eAAOF,EAAS,mBAAmBC,GAAKC,CAAI;AAAA,MAC9C,KAAK;AACH,eAAOF,EAAS,yBAAyBC,GAAKC,CAAI;AAAA,MACpD;AACE,cAAM,YAAY,yBAAyBD,CAAG;AAAA,IACtD;AAAA,EACE;AAAA,EACA,qBAAqBA,GAAKC,GAAM;AA0B9B,WAzBe;AAAA,MACb,MAAM,CAACC,GAAGC,MAAMD,KAAKC,EAAC;AAAA,MACtB,MAAM,CAACD,GAAGC,MAAMD,KAAKC,EAAC;AAAA,MACtB,KAAK,CAACD,GAAGC,MAAMD,IAAIC,EAAC;AAAA,MACpB,KAAK,CAACD,GAAGC,MAAMD,IAAIC,EAAC;AAAA,MACpB,KAAK,CAACD,GAAGC,MAAMD,IAAIC,EAAC;AAAA;AAAA,MAEpB,MAAM,CAACD,GAAGC,MAAMD,KAAKC,EAAC;AAAA;AAAA,MAEtB,MAAM,CAACD,GAAGC,MAAMD,KAAKC,EAAC;AAAA,MACtB,OAAO,CAACD,GAAGC,MAAMD,MAAMC,EAAC;AAAA,MACxB,OAAO,CAACD,GAAGC,MAAMD,MAAMC,EAAC;AAAA,MACxB,KAAK,CAACD,GAAGC,MAAMD,IAAIC,EAAC;AAAA,MACpB,KAAK,CAACD,GAAGC,MAAMD,IAAIC,EAAC;AAAA,MACpB,MAAM,CAACD,GAAGC,MAAMD,KAAKC,EAAC;AAAA,MACtB,MAAM,CAACD,GAAGC,MAAMD,KAAKC,EAAC;AAAA,MACtB,MAAM,CAACD,GAAGC,MAAMD,KAAKC,EAAC;AAAA,MACtB,MAAM,CAACD,GAAGC,MAAMD,KAAKC,EAAC;AAAA,MACtB,OAAO,CAACD,GAAGC,MAAMD,MAAMC,EAAC;AAAA,MACxB,KAAK,CAACD,GAAGC,MAAMD,IAAIC,EAAC;AAAA,MACpB,KAAK,CAACD,GAAGC,MAAMD,IAAIC,EAAC;AAAA,MACpB,KAAK,CAACD,GAAGC,MAAMD,IAAIC,EAAC;AAAA,MACpB,KAAK,CAACD,GAAGC,MAAMD,IAAIC,EAAC;AAAA,MACpB,KAAK,CAACD,GAAGC,MAAMD,IAAIC,EAAC;AAAA,IAC1B,EAAMH,EAAI,QAAQ,EAAED,EAAS,QAAQC,EAAI,MAAMC,CAAI,GAAG,MAAMF,EAAS,QAAQC,EAAI,OAAOC,CAAI,CAAC;AAAA,EAE3F;AAAA,EACA,aAAaD,GAAKC,GAAM;AACtB,QAAIG;AACJ,aAAS/F,IAAI,GAAGA,IAAI2F,EAAI,KAAK,QAAQ3F,KAAK;AACxC,MAAI2F,EAAI,KAAK3F,CAAC,EAAE,SAAS,gBAAgB,CAAC,OAAO,OAAO,OAAO,EAAE,SAAS2F,EAAI,KAAK3F,CAAC,EAAE,IAAI,KAAK2F,EAAI,KAAK3F,IAAI,CAAC,KAAK2F,EAAI,KAAK3F,IAAI,CAAC,EAAE,SAAS,2BAKzIA,KAAK;AAEP,YAAMmC,IAAOwD,EAAI,KAAK3F,CAAC;AACvB,MAAA+F,IAAOL,EAAS,QAAQvD,GAAMyD,CAAI;AAAA,IACpC;AACA,WAAOG;AAAA,EACT;AAAA,EACA,0BAA0BJ,GAAKC,GAAM;AACnC,WAAIF,EAAS,QAAQC,EAAI,MAAMC,CAAI,IAC1BF,EAAS,QAAQC,EAAI,YAAYC,CAAI,IAEvCF,EAAS,QAAQC,EAAI,WAAWC,CAAI;AAAA,EAC7C;AAAA,EACA,eAAeD,GAAKC,GAAM;AACxB,QAAI,OAAO,OAAOA,GAAMD,EAAI,IAAI;AAC9B,aAAOC,EAAKD,EAAI,IAAI;AAEtB,UAAM,eAAe,GAAGA,EAAI,IAAI,iBAAiB;AAAA,EACnD;AAAA,EACA,YAAYA,GAAK;AACf,WAAOA,EAAI;AAAA,EACb;AAAA,EACA,qBAAqBA,GAAKC,GAAM;AAC9B,UAAMxB,IAAO;AAAA;AAAA;AAAA;AAAA,MAIbuB,EAAI,WAAWD,EAAS,QAAQC,EAAI,QAAQ,IAC1CA,EAAI,SAAS;AAAA;AAAA,IACnB,GACUvD,IAAMsD,EAAS,QAAQC,EAAI,QAAQC,CAAI;AAC7C,QAAyBxD,KAAQ;AAC/B,YAAM,UAAU,6BAA6BA,CAAG,cAAcgC,CAAI,IAAI;AAExE,QAAI,CAAC,OAAO,OAAOhC,GAAKgC,CAAI,KAAKqB,GAAyB,IAAIrB,CAAI;AAChE,YAAM,UAAU,6BAA6BhC,CAAG,cAAcgC,CAAI,IAAI;AAExE,UAAM4B,IAAS5D,EAAIgC,CAAI;AACvB,WAAI,OAAO4B,KAAW,aACbA,EAAO,KAAK5D,CAAG,IAEjB4D;AAAA,EACT;AAAA,EACA,oBAAoBL,GAAKC,GAAM;AAW7B,WAVe;AAAA,MACb,KAAK,CAAAC,MAAK,CAACH,EAAS,QAAQG,GAAGD,CAAI;AAAA,MACnC,KAAK,CAAAC,MAAK,CAACH,EAAS,QAAQG,GAAGD,CAAI;AAAA,MACnC,KAAK,CAAAC,MAAK,CAACH,EAAS,QAAQG,GAAGD,CAAI;AAAA;AAAA,MAEnC,KAAK,CAAAC,MAAK,CAACH,EAAS,QAAQG,GAAGD,CAAI;AAAA,MACnC,QAAQ,CAAAC,MAAK,OAAOH,EAAS,QAAQG,GAAGD,CAAI;AAAA;AAAA,MAE5C,MAAM,CAAAC,MAAK,KAAKH,EAAS,QAAQG,GAAGD,CAAI;AAAA,IAC9C,EAAMD,EAAI,QAAQ,EAAEA,EAAI,QAAQ;AAAA,EAE9B;AAAA,EACA,oBAAoBA,GAAKC,GAAM;AAC7B,WAAOD,EAAI,SAAS,IAAI,CAAAhM,MAAM+L,EAAS,QAAQ/L,GAAIiM,CAAI,CAAC;AAAA,EAC1D;AAAA,EACA,mBAAmBD,GAAKC,GAAM;AAC5B,UAAMjI,IAAOgI,EAAI,UAAU,IAAI,CAAA1B,MAAOyB,EAAS,QAAQzB,GAAK2B,CAAI,CAAC,GAC3DK,IAAOP,EAAS,QAAQC,EAAI,QAAQC,CAAI;AAE9C,QAAIK,MAAS;AAEX,YAAM,IAAI,MAAM,kCAAkC;AAGpD,WAAOA,EAAK,GAAGtI,CAAI;AAAA,EACrB;AAAA,EACA,yBAAyBgI,GAAKC,GAAM;AAClC,QAAID,EAAI,KAAK,SAAS;AACpB,YAAM,YAAY,sCAAsC;AAE1D,UAAMvK,IAAKuK,EAAI,KAAK,MACd1R,IAAQyR,EAAS,QAAQC,EAAI,OAAOC,CAAI;AAC9C,WAAAA,EAAKxK,CAAE,IAAInH,GACJ2R,EAAKxK,CAAE;AAAA,EAChB;AACF;AAKA,MAAM8K,GAAW;AAAA;AAAA;AAAA;AAAA,EAIf,YAAY/D,GAAM;AAChB,SAAK,OAAOA,GACZ,KAAK,MAAMZ,EAAK,KAAK,IAAI;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAAgB9O,GAAS;AAEvB,UAAM0T,IAAS,OAAO,OAAO,uBAAO,OAAO,IAAI,GAAG1T,CAAO;AACzD,WAAOiT,EAAS,QAAQ,KAAK,KAAKS,CAAM;AAAA,EAC1C;AACF;AAuBA,SAASC,GAAKC,GAAK3F,GAAM;AACvB,SAAA2F,IAAMA,EAAI,MAAK,GACfA,EAAI,KAAK3F,CAAI,GACN2F;AACT;AAOA,SAASC,GAAQ5F,GAAM2F,GAAK;AAC1B,SAAAA,IAAMA,EAAI,MAAK,GACfA,EAAI,QAAQ3F,CAAI,GACT2F;AACT;AAMA,MAAME,WAAiB,MAAM;AAAA;AAAA;AAAA;AAAA,EAI3B,YAAYtS,GAAO;AACjB,UAAM,4FAAiG,GACvG,KAAK,WAAW,IAChB,KAAK,QAAQA,GACb,KAAK,OAAO;AAAA,EACd;AACF;AAgFA,SAASuS,EAASC,GAAMtE,GAAMC,GAAKjB,GAAUuF,GAAmB;AAE9D,MAAI,EAAE,gBAAgBF;AACpB,QAAI;AACF,aAAO,IAAIA,EAASC,GAAMtE,GAAMC,GAAKjB,GAAUuF,CAAiB;AAAA,IAClE,SAASjR,GAAG;AACV,UAAI,CAACA,EAAE;AACL,cAAMA;AAER,aAAOA,EAAE;AAAA,IACX;AAEF,EAAI,OAAOgR,KAAS,aAClBC,IAAoBvF,GACpBA,IAAWiB,GACXA,IAAMD,GACNA,IAAOsE,GACPA,IAAO;AAET,QAAME,IAASF,KAAQ,OAAOA,KAAS;AAgBvC,MAfAA,IAAOA,KAAQ,CAAA,GACf,KAAK,OAAOA,EAAK,QAAQrE,GACzB,KAAK,OAAOqE,EAAK,QAAQtE,GACzB,KAAK,aAAasE,EAAK,cAAc,SACrC,KAAK,UAAUA,EAAK,WAAW,IAC/B,KAAK,OAAO,OAAO,OAAOA,GAAM,MAAM,IAAIA,EAAK,OAAO,IACtD,KAAK,UAAUA,EAAK,WAAW,CAAA,GAC/B,KAAK,OAAOA,EAAK,SAAS,SAAY,SAASA,EAAK,MACpD,KAAK,mBAAmB,OAAOA,EAAK,mBAAqB,MAAc,KAAQA,EAAK,kBACpF,KAAK,SAASA,EAAK,UAAU,MAC7B,KAAK,iBAAiBA,EAAK,kBAAkB,MAC7C,KAAK,WAAWA,EAAK,YAAYtF,KAAY,MAC7C,KAAK,oBAAoBsF,EAAK,qBAAqBC,KAAqB,WAAY;AAClF,UAAM,IAAI,UAAU,kFAAuF;AAAA,EAC7G,GACID,EAAK,cAAc,IAAO;AAC5B,UAAM9I,IAAO;AAAA,MACX,MAAMgJ,IAASF,EAAK,OAAOtE;AAAA,IACjC;AACI,IAAKwE,IAEM,UAAUF,MACnB9I,EAAK,OAAO8I,EAAK,QAFjB9I,EAAK,OAAOyE;AAId,UAAMwE,IAAM,KAAK,SAASjJ,CAAI;AAC9B,QAAI,CAACiJ,KAAO,OAAOA,KAAQ;AACzB,YAAM,IAAIL,GAASK,CAAG;AAExB,WAAOA;AAAA,EACT;AACF;AAGAJ,EAAS,UAAU,WAAW,SAAUrE,GAAM0E,GAAM1F,GAAUuF,GAAmB;AAC/E,MAAII,IAAa,KAAK,QACpBC,IAAqB,KAAK,gBACxB;AAAA,IACF,SAAAC;AAAA,IACA,MAAAC;AAAA,EACJ,IAAM;AAQJ,MAPA,KAAK,iBAAiB,KAAK,YAC3B,KAAK,WAAW,KAAK,MACrB,KAAK,cAAc,KAAK,SACxB9F,IAAWA,KAAY,KAAK,UAC5B,KAAK,wBAAwBuF,KAAqB,KAAK,mBACvDG,IAAOA,KAAQ,KAAK,MACpB1E,IAAOA,KAAQ,KAAK,MAChBA,KAAQ,OAAOA,KAAS,YAAY,CAAC,MAAM,QAAQA,CAAI,GAAG;AAC5D,QAAI,CAACA,EAAK,QAAQA,EAAK,SAAS;AAC9B,YAAM,IAAI,UAAU,6FAAkG;AAExH,QAAI,CAAC,OAAO,OAAOA,GAAM,MAAM;AAC7B,YAAM,IAAI,UAAU,6FAAkG;AAExH,KAAC;AAAA,MACC,MAAA0E;AAAA,IACN,IAAQ1E,IACJ6E,IAAU,OAAO,OAAO7E,GAAM,SAAS,IAAIA,EAAK,UAAU6E,GAC1D,KAAK,iBAAiB,OAAO,OAAO7E,GAAM,YAAY,IAAIA,EAAK,aAAa,KAAK,gBACjF,KAAK,cAAc,OAAO,OAAOA,GAAM,SAAS,IAAIA,EAAK,UAAU,KAAK,aACxE8E,IAAO,OAAO,OAAO9E,GAAM,MAAM,IAAIA,EAAK,OAAO8E,GACjD,KAAK,WAAW,OAAO,OAAO9E,GAAM,MAAM,IAAIA,EAAK,OAAO,KAAK,UAC/DhB,IAAW,OAAO,OAAOgB,GAAM,UAAU,IAAIA,EAAK,WAAWhB,GAC7D,KAAK,wBAAwB,OAAO,OAAOgB,GAAM,mBAAmB,IAAIA,EAAK,oBAAoB,KAAK,uBACtG2E,IAAa,OAAO,OAAO3E,GAAM,QAAQ,IAAIA,EAAK,SAAS2E,GAC3DC,IAAqB,OAAO,OAAO5E,GAAM,gBAAgB,IAAIA,EAAK,iBAAiB4E,GACnF5E,IAAOA,EAAK;AAAA,EACd;AAMA,MALA2E,IAAaA,KAAc,MAC3BC,IAAqBA,KAAsB,MACvC,MAAM,QAAQ5E,CAAI,MACpBA,IAAOqE,EAAS,aAAarE,CAAI,IAE/B,CAACA,KAAQA,MAAS,MAAM,CAAC0E;AAC3B;AAEF,QAAMK,IAAWV,EAAS,YAAYrE,CAAI;AAC1C,EAAI+E,EAAS,CAAC,MAAM,OAAOA,EAAS,SAAS,KAC3CA,EAAS,MAAK,GAEhB,KAAK,qBAAqB;AAC1B,QAAMlB,IAAS,KAAK,OAAOkB,GAAUL,GAAM,CAAC,GAAG,GAAGC,GAAYC,GAAoB5F,CAAQ,EAAE,OAAO,SAAUgG,GAAI;AAC/G,WAAOA,KAAM,CAACA,EAAG;AAAA,EACnB,CAAC;AACD,SAAKnB,EAAO,SAGR,CAACiB,KAAQjB,EAAO,WAAW,KAAK,CAACA,EAAO,CAAC,EAAE,aACtC,KAAK,oBAAoBA,EAAO,CAAC,CAAC,IAEpCA,EAAO,OAAO,CAACoB,GAAMD,MAAO;AACjC,UAAME,IAAY,KAAK,oBAAoBF,CAAE;AAC7C,WAAIH,KAAW,MAAM,QAAQK,CAAS,IACpCD,IAAOA,EAAK,OAAOC,CAAS,IAE5BD,EAAK,KAAKC,CAAS,GAEdD;AAAA,EACT,GAAG,CAAA,CAAE,IAbIH,IAAO,CAAA,IAAK;AAcvB;AAIAT,EAAS,UAAU,sBAAsB,SAAUW,GAAI;AACrD,QAAMG,IAAa,KAAK;AACxB,UAAQA,GAAU;AAAA,IAChB,KAAK,OACH;AACE,YAAMC,IAAO,MAAM,QAAQJ,EAAG,IAAI,IAAIA,EAAG,OAAOX,EAAS,YAAYW,EAAG,IAAI;AAC5E,aAAAA,EAAG,UAAUX,EAAS,UAAUe,CAAI,GACpCJ,EAAG,OAAO,OAAOA,EAAG,QAAS,WAAWA,EAAG,OAAOX,EAAS,aAAaW,EAAG,IAAI,GACxEA;AAAA,IACT;AAAA,IACF,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAOA,EAAGG,CAAU;AAAA,IACtB,KAAK;AACH,aAAOd,EAAS,aAAaW,EAAGG,CAAU,CAAC;AAAA,IAC7C,KAAK;AACH,aAAOd,EAAS,UAAUW,EAAG,IAAI;AAAA,IACnC;AACE,YAAM,IAAI,UAAU,qBAAqB;AAAA,EAC/C;AACA;AACAX,EAAS,UAAU,kBAAkB,SAAUgB,GAAYrG,GAAUsG,GAAM;AACzE,MAAItG,GAAU;AACZ,UAAMuG,IAAkB,KAAK,oBAAoBF,CAAU;AAC3D,IAAAA,EAAW,OAAO,OAAOA,EAAW,QAAS,WAAWA,EAAW,OAAOhB,EAAS,aAAagB,EAAW,IAAI,GAE/GrG,EAASuG,GAAiBD,GAAMD,CAAU;AAAA,EAC5C;AACF;AAcAhB,EAAS,UAAU,SAAS,SAAUrE,GAAMqD,GAAK+B,GAAM1W,GAAQ8W,GAAgBxG,GAAUyG,GAAYC,GAAiB;AAGpH,MAAIC;AACJ,MAAI,CAAC3F,EAAK;AACR,WAAA2F,IAAS;AAAA,MACP,MAAAP;AAAA,MACA,OAAO/B;AAAA,MACP,QAAA3U;AAAA,MACA,gBAAgB8W;AAAA,MAChB,YAAAC;AAAA,IACN,GACI,KAAK,gBAAgBE,GAAQ3G,GAAU,OAAO,GACvC2G;AAET,QAAMC,IAAM5F,EAAK,CAAC,GAChB6F,IAAI7F,EAAK,MAAM,CAAC,GAIZyE,IAAM,CAAA;AAMZ,WAASqB,EAAOC,GAAO;AACrB,IAAI,MAAM,QAAQA,CAAK,IAIrBA,EAAM,QAAQ,CAAAC,MAAK;AACjB,MAAAvB,EAAI,KAAKuB,CAAC;AAAA,IACZ,CAAC,IAEDvB,EAAI,KAAKsB,CAAK;AAAA,EAElB;AACA,OAAK,OAAOH,KAAQ,YAAYF,MAAoBrC,KAAO,OAAO,OAAOA,GAAKuC,CAAG;AAE/E,IAAAE,EAAO,KAAK,OAAOD,GAAGxC,EAAIuC,CAAG,GAAG3B,GAAKmB,GAAMQ,CAAG,GAAGvC,GAAKuC,GAAK5G,GAAUyG,CAAU,CAAC;AAAA,WAEvEG,MAAQ;AAEjB,SAAK,MAAMvC,GAAK,CAAAnB,MAAK;AACnB,MAAA4D,EAAO,KAAK,OAAOD,GAAGxC,EAAInB,CAAC,GAAG+B,GAAKmB,GAAMlD,CAAC,GAAGmB,GAAKnB,GAAGlD,GAAU,IAAM,EAAI,CAAC;AAAA,IAC5E,CAAC;AAAA,WACQ4G,MAAQ;AAGjB,IAAAE,EAAO,KAAK,OAAOD,GAAGxC,GAAK+B,GAAM1W,GAAQ8W,GAAgBxG,GAAUyG,CAAU,CAAC,GAC9E,KAAK,MAAMpC,GAAK,CAAAnB,MAAK;AAGnB,MAAI,OAAOmB,EAAInB,CAAC,KAAM,YAGpB4D,EAAO,KAAK,OAAO9F,EAAK,MAAK,GAAIqD,EAAInB,CAAC,GAAG+B,GAAKmB,GAAMlD,CAAC,GAAGmB,GAAKnB,GAAGlD,GAAU,EAAI,CAAC;AAAA,IAEnF,CAAC;AAAA,OAGI;AAAA,QAAI4G,MAAQ;AAEjB,kBAAK,qBAAqB,IACnB;AAAA,QACL,MAAMR,EAAK,MAAM,GAAG,EAAE;AAAA,QACtB,MAAMS;AAAA,QACN,kBAAkB;AAAA,MACxB;AACS,QAAID,MAAQ;AAEjB,aAAAD,IAAS;AAAA,QACP,MAAM1B,GAAKmB,GAAMQ,CAAG;AAAA,QACpB,OAAOJ;AAAA,QACP,QAAA9W;AAAA,QACA,gBAAgB;AAAA,MACtB,GACI,KAAK,gBAAgBiX,GAAQ3G,GAAU,UAAU,GAC1C2G;AACF,QAAIC,MAAQ;AAEjB,MAAAE,EAAO,KAAK,OAAOD,GAAGxC,GAAK+B,GAAM,MAAM,MAAMpG,GAAUyG,CAAU,CAAC;AAAA,aACzD,4BAA4B,KAAKG,CAAG;AAE7C,MAAAE,EAAO,KAAK,OAAOF,GAAKC,GAAGxC,GAAK+B,GAAM1W,GAAQ8W,GAAgBxG,CAAQ,CAAC;AAAA,aAC9D4G,EAAI,QAAQ,IAAI,MAAM,GAAG;AAElC,UAAI,KAAK,aAAa;AACpB,cAAM,IAAI,MAAM,kDAAkD;AAEpE,YAAMK,IAAUL,EAAI,QAAQ,kBAAkB,IAAI,GAE5CM,IAAS,6CAA6C,KAAKD,CAAO;AACxE,MAAIC,IAGF,KAAK,MAAM7C,GAAK,CAAAnB,MAAK;AACnB,cAAMiE,IAAQ,CAACD,EAAO,CAAC,CAAC,GAClBE,IAASF,EAAO,CAAC,IAAI7C,EAAInB,CAAC,EAAEgE,EAAO,CAAC,CAAC,IAAI7C,EAAInB,CAAC;AAEpD,QADsB,KAAK,OAAOiE,GAAOC,GAAQhB,GAAM1W,GAAQ8W,GAAgBxG,GAAU,EAAI,EAC3E,SAAS,KACzB8G,EAAO,KAAK,OAAOD,GAAGxC,EAAInB,CAAC,GAAG+B,GAAKmB,GAAMlD,CAAC,GAAGmB,GAAKnB,GAAGlD,GAAU,EAAI,CAAC;AAAA,MAExE,CAAC,IAED,KAAK,MAAMqE,GAAK,CAAAnB,MAAK;AACnB,QAAI,KAAK,MAAM+D,GAAS5C,EAAInB,CAAC,GAAGA,GAAGkD,GAAM1W,GAAQ8W,CAAc,KAC7DM,EAAO,KAAK,OAAOD,GAAGxC,EAAInB,CAAC,GAAG+B,GAAKmB,GAAMlD,CAAC,GAAGmB,GAAKnB,GAAGlD,GAAU,EAAI,CAAC;AAAA,MAExE,CAAC;AAAA,IAEL,WAAW4G,EAAI,CAAC,MAAM,KAAK;AAEzB,UAAI,KAAK,aAAa;AACpB,cAAM,IAAI,MAAM,iDAAiD;AAKnE,MAAAE,EAAO,KAAK,OAAO3B,GAAQ,KAAK,MAAMyB,GAAKvC,GAAK+B,EAAK,GAAG,EAAE,GAAGA,EAAK,MAAM,GAAG,EAAE,GAAG1W,GAAQ8W,CAAc,GAAGK,CAAC,GAAGxC,GAAK+B,GAAM1W,GAAQ8W,GAAgBxG,GAAUyG,CAAU,CAAC;AAAA,IACvK,WAAWG,EAAI,CAAC,MAAM,KAAK;AAEzB,UAAIS,IAAU;AACd,YAAMC,IAAYV,EAAI,MAAM,GAAG,EAAE;AACjC,cAAQU,GAAS;AAAA,QACf,KAAK;AACH,WAAI,CAACjD,KAAO,CAAC,CAAC,UAAU,UAAU,EAAE,SAAS,OAAOA,CAAG,OACrDgD,IAAU;AAEZ;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACH,UAAI,OAAOhD,MAAQiD,MACjBD,IAAU;AAEZ;AAAA,QACF,KAAK;AACH,UAAI,OAAO,SAAShD,CAAG,KAAK,EAAEA,IAAM,OAClCgD,IAAU;AAEZ;AAAA,QACF,KAAK;AACH,UAAI,OAAO,SAAShD,CAAG,MACrBgD,IAAU;AAEZ;AAAA,QACF,KAAK;AACH,UAAI,OAAOhD,KAAQ,YAAY,CAAC,OAAO,SAASA,CAAG,MACjDgD,IAAU;AAEZ;AAAA,QACF,KAAK;AACH,UAAIhD,KAAO,OAAOA,MAAQiD,MACxBD,IAAU;AAEZ;AAAA,QACF,KAAK;AACH,UAAI,MAAM,QAAQhD,CAAG,MACnBgD,IAAU;AAEZ;AAAA,QACF,KAAK;AACH,UAAAA,IAAU,KAAK,sBAAsBhD,GAAK+B,GAAM1W,GAAQ8W,CAAc;AACtE;AAAA,QACF,KAAK;AACH,UAAInC,MAAQ,SACVgD,IAAU;AAEZ;AAAA;AAAA,QAEF;AACE,gBAAM,IAAI,UAAU,wBAAwBC,CAAS;AAAA,MAC7D;AACI,UAAID;AACF,eAAAV,IAAS;AAAA,UACP,MAAAP;AAAA,UACA,OAAO/B;AAAA,UACP,QAAA3U;AAAA,UACA,gBAAgB8W;AAAA,QACxB,GACM,KAAK,gBAAgBG,GAAQ3G,GAAU,OAAO,GACvC2G;AAAA,IAGX,WAAWC,EAAI,CAAC,MAAM,OAAOvC,KAAO,OAAO,OAAOA,GAAKuC,EAAI,MAAM,CAAC,CAAC,GAAG;AACpE,YAAMW,IAAUX,EAAI,MAAM,CAAC;AAC3B,MAAAE,EAAO,KAAK,OAAOD,GAAGxC,EAAIkD,CAAO,GAAGtC,GAAKmB,GAAMmB,CAAO,GAAGlD,GAAKkD,GAASvH,GAAUyG,GAAY,EAAI,CAAC;AAAA,IACpG,WAAWG,EAAI,SAAS,GAAG,GAAG;AAE5B,YAAMY,IAAQZ,EAAI,MAAM,GAAG;AAC3B,iBAAWa,KAAQD;AACjB,QAAAV,EAAO,KAAK,OAAO3B,GAAQsC,GAAMZ,CAAC,GAAGxC,GAAK+B,GAAM1W,GAAQ8W,GAAgBxG,GAAU,EAAI,CAAC;AAAA,IAG3F,MAAO,CAAI,CAAC0G,KAAmBrC,KAAO,OAAO,OAAOA,GAAKuC,CAAG,KAC1DE,EAAO,KAAK,OAAOD,GAAGxC,EAAIuC,CAAG,GAAG3B,GAAKmB,GAAMQ,CAAG,GAAGvC,GAAKuC,GAAK5G,GAAUyG,GAAY,EAAI,CAAC;AAAA;AAMxF,MAAI,KAAK;AACP,aAASO,IAAI,GAAGA,IAAIvB,EAAI,QAAQuB,KAAK;AACnC,YAAMU,IAAOjC,EAAIuB,CAAC;AAClB,UAAIU,KAAQA,EAAK,kBAAkB;AACjC,cAAMC,IAAM,KAAK,OAAOD,EAAK,MAAMrD,GAAKqD,EAAK,MAAMhY,GAAQ8W,GAAgBxG,GAAUyG,CAAU;AAC/F,YAAI,MAAM,QAAQkB,CAAG,GAAG;AACtB,UAAAlC,EAAIuB,CAAC,IAAIW,EAAI,CAAC;AACd,gBAAMC,IAAKD,EAAI;AACf,mBAASE,IAAK,GAAGA,IAAKD,GAAIC;AAGxB,YAAAb,KACAvB,EAAI,OAAOuB,GAAG,GAAGW,EAAIE,CAAE,CAAC;AAAA,QAE5B;AACE,UAAApC,EAAIuB,CAAC,IAAIW;AAAA,MAEb;AAAA,IACF;AAEF,SAAOlC;AACT;AACAJ,EAAS,UAAU,QAAQ,SAAUhB,GAAKyD,GAAG;AAC3C,MAAI,MAAM,QAAQzD,CAAG,GAAG;AACtB,UAAMjT,IAAIiT,EAAI;AACd,aAASxF,IAAI,GAAGA,IAAIzN,GAAGyN;AACrB,MAAAiJ,EAAEjJ,CAAC;AAAA,EAEP,MAAO,CAAIwF,KAAO,OAAOA,KAAQ,YAC/B,OAAO,KAAKA,CAAG,EAAE,QAAQ,CAAAnB,MAAK;AAC5B,IAAA4E,EAAE5E,CAAC;AAAA,EACL,CAAC;AAEL;AACAmC,EAAS,UAAU,SAAS,SAAUuB,GAAK5F,GAAMqD,GAAK+B,GAAM1W,GAAQ8W,GAAgBxG,GAAU;AAC5F,MAAI,CAAC,MAAM,QAAQqE,CAAG;AACpB;AAEF,QAAM0D,IAAM1D,EAAI,QACdmD,IAAQZ,EAAI,MAAM,GAAG,GACrBoB,IAAOR,EAAM,CAAC,KAAK,OAAO,SAASA,EAAM,CAAC,CAAC,KAAK;AAClD,MAAI7E,IAAQ6E,EAAM,CAAC,KAAK,OAAO,SAASA,EAAM,CAAC,CAAC,KAAK,GACnDS,IAAMT,EAAM,CAAC,KAAK,OAAO,SAASA,EAAM,CAAC,CAAC,KAAKO;AACjD,EAAApF,IAAQA,IAAQ,IAAI,KAAK,IAAI,GAAGA,IAAQoF,CAAG,IAAI,KAAK,IAAIA,GAAKpF,CAAK,GAClEsF,IAAMA,IAAM,IAAI,KAAK,IAAI,GAAGA,IAAMF,CAAG,IAAI,KAAK,IAAIA,GAAKE,CAAG;AAC1D,QAAMxC,IAAM,CAAA;AACZ,WAAS5G,IAAI8D,GAAO9D,IAAIoJ,GAAKpJ,KAAKmJ;AAOhC,IANY,KAAK,OAAO7C,GAAQtG,GAAGmC,CAAI,GAAGqD,GAAK+B,GAAM1W,GAAQ8W,GAAgBxG,GAAU,EAAI,EAMvF,QAAQ,CAAAgH,MAAK;AACf,MAAAvB,EAAI,KAAKuB,CAAC;AAAA,IACZ,CAAC;AAEH,SAAOvB;AACT;AACAJ,EAAS,UAAU,QAAQ,SAAUtB,GAAMmE,GAAIC,GAAQ/B,GAAM1W,GAAQ8W,GAAgB;AACnF,OAAK,YAAY,oBAAoBA,GACrC,KAAK,YAAY,YAAY9W,GAC7B,KAAK,YAAY,cAAcyY,GAC/B,KAAK,YAAY,UAAU,KAAK,MAChC,KAAK,YAAY,OAAOD;AACxB,QAAME,IAAerE,EAAK,SAAS,OAAO;AAC1C,EAAIqE,MACF,KAAK,YAAY,UAAU/C,EAAS,aAAae,EAAK,OAAO,CAAC+B,CAAM,CAAC,CAAC;AAExE,QAAME,IAAiB,KAAK,WAAW,YAAYtE;AACnD,MAAI,CAACsB,EAAS,MAAMgD,CAAc,GAAG;AACnC,QAAIC,IAASvE,EAAK,WAAW,mBAAmB,mBAAmB,EAAE,WAAW,WAAW,WAAW,EAAE,WAAW,aAAa,aAAa,EAAE,WAAW,SAAS,SAAS,EAAE,WAAW,gBAAgB,QAAQ;AAIjN,QAHIqE,MACFE,IAASA,EAAO,WAAW,SAAS,SAAS,IAE3C,KAAK,aAAa,UAAU,KAAK,aAAa,MAAQ,KAAK,aAAa;AAC1E,MAAAjD,EAAS,MAAMgD,CAAc,IAAI,IAAI,KAAK,OAAO,OAAOC,CAAM;AAAA,aACrD,KAAK,aAAa;AAC3B,MAAAjD,EAAS,MAAMgD,CAAc,IAAI,IAAI,KAAK,GAAG,OAAOC,CAAM;AAAA,aACjD,OAAO,KAAK,YAAa,cAAc,KAAK,SAAS,aAAa,OAAO,OAAO,KAAK,SAAS,WAAW,iBAAiB,GAAG;AACtI,YAAMC,IAAW,KAAK;AACtB,MAAAlD,EAAS,MAAMgD,CAAc,IAAI,IAAIE,EAASD,CAAM;AAAA,IACtD,WAAW,OAAO,KAAK,YAAa;AAClC,MAAAjD,EAAS,MAAMgD,CAAc,IAAI;AAAA,QAC/B,iBAAiB,CAAA/W,MAAW,KAAK,SAASgX,GAAQhX,CAAO;AAAA,MACjE;AAAA;AAEM,YAAM,IAAI,UAAU,4BAA4B,KAAK,QAAQ,GAAG;AAAA,EAEpE;AACA,MAAI;AACF,WAAO+T,EAAS,MAAMgD,CAAc,EAAE,gBAAgB,KAAK,WAAW;AAAA,EACxE,SAAS/T,GAAG;AACV,QAAI,KAAK;AACP,aAAO;AAET,UAAM,IAAI,MAAM,eAAeA,EAAE,UAAU,OAAOyP,CAAI;AAAA,EACxD;AACF;AAKAsB,EAAS,QAAQ,CAAA;AAMjBA,EAAS,eAAe,SAAUmD,GAAS;AACzC,QAAM3B,IAAI2B,GACRpX,IAAIyV,EAAE;AACR,MAAI4B,IAAI;AACR,WAAS5J,IAAI,GAAGA,IAAIzN,GAAGyN;AACrB,IAAK,qBAAqB,KAAKgI,EAAEhI,CAAC,CAAC,MACjC4J,KAAK,aAAa,KAAK5B,EAAEhI,CAAC,CAAC,IAAI,MAAMgI,EAAEhI,CAAC,IAAI,MAAM,OAAOgI,EAAEhI,CAAC,IAAI;AAGpE,SAAO4J;AACT;AAMApD,EAAS,YAAY,SAAUqD,GAAS;AACtC,QAAM7B,IAAI6B,GACRtX,IAAIyV,EAAE;AACR,MAAI4B,IAAI;AACR,WAAS5J,IAAI,GAAGA,IAAIzN,GAAGyN;AACrB,IAAK,qBAAqB,KAAKgI,EAAEhI,CAAC,CAAC,MACjC4J,KAAK,MAAM5B,EAAEhI,CAAC,EAAE,SAAQ,EAAG,WAAW,KAAK,IAAI,EAAE,WAAW,KAAK,IAAI;AAGzE,SAAO4J;AACT;AAMApD,EAAS,cAAc,SAAUrE,GAAM;AACrC,QAAM;AAAA,IACJ,OAAA2H;AAAA,EACJ,IAAMtD;AACJ,MAAIsD,EAAM3H,CAAI;AACZ,WAAO2H,EAAM3H,CAAI,EAAE,OAAM;AAE3B,QAAM4H,IAAO,CAAA,GA6BP7C,IA5Ba/E,EAElB,WAAW,wGAAwG,MAAM,EAGzH,WAAW,kCAAkC,SAAU6H,GAAIC,GAAI;AAC9D,WAAO,QAAQF,EAAK,KAAKE,CAAE,IAAI,KAAK;AAAA,EACtC,CAAC,EAEA,WAAW,2BAA2B,SAAUD,GAAI5F,GAAM;AACzD,WAAO,OAAOA,EAAK,WAAW,KAAK,KAAK,EAAE,WAAW,KAAK,QAAQ,IAAI;AAAA,EACxE,CAAC,EAEA,WAAW,KAAK,KAAK,EAErB,WAAW,qCAAqC,GAAG,EAEnD,WAAW,OAAO,GAAG,EAErB,WAAW,UAAU,GAAG,EAExB,WAAW,uBAAuB,SAAU4F,GAAIE,GAAK;AACpD,WAAO,MAAMA,EAAI,MAAM,EAAE,EAAE,KAAK,GAAG,IAAI;AAAA,EACzC,CAAC,EAEA,WAAW,YAAY,MAAM,EAE7B,WAAW,gBAAgB,EAAE,EACF,MAAM,GAAG,EAAE,IAAI,SAAUC,GAAK;AACxD,UAAMC,IAAQD,EAAI,MAAM,SAAS;AACjC,WAAO,CAACC,KAAS,CAACA,EAAM,CAAC,IAAID,IAAMJ,EAAKK,EAAM,CAAC,CAAC;AAAA,EAClD,CAAC;AACD,SAAAN,EAAM3H,CAAI,IAAI+E,GACP4C,EAAM3H,CAAI,EAAE,OAAM;AAC3B;AACAqE,EAAS,UAAU,SAAS;AAAA,EAC1B,QAAQN;AACV;AAwBA,MAAMmE,KAAqB,SAAUC,GAAQvP,GAAQwP,GAAa;AAChE,QAAMC,IAAKF,EAAO;AAClB,WAAStK,IAAI,GAAGA,IAAIwK,GAAIxK,KAAK;AAC3B,UAAMU,IAAO4J,EAAOtK,CAAC;AACrB,IAAIuK,EAAY7J,CAAI,KAGlB3F,EAAO,KAAKuP,EAAO,OAAOtK,KAAK,CAAC,EAAE,CAAC,CAAC;AAAA,EAExC;AACF;AAKA,MAAMyK,GAAO;AAAA;AAAA;AAAA;AAAA,EAIX,YAAYtI,GAAM;AAChB,SAAK,OAAOA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAAgB1P,GAAS;AACvB,QAAI0P,IAAO,KAAK;AAChB,UAAMuI,IAAO,OAAO,KAAKjY,CAAO,GAC1BkY,IAAQ,CAAA;AACd,IAAAN,GAAmBK,GAAMC,GAAO,CAAArY,MACvB,OAAOG,EAAQH,CAAG,KAAM,UAChC;AACD,UAAMsY,IAASF,EAAK,IAAI,CAAAG,MACfpY,EAAQoY,CAAE,CAClB;AAQD,IAAA1I,IAPmBwI,EAAM,OAAO,CAAC1K,GAAGgG,MAAS;AAC3C,UAAI6E,IAAUrY,EAAQwT,CAAI,EAAE,SAAQ;AACpC,aAAK,YAAY,KAAK6E,CAAO,MAC3BA,IAAU,cAAcA,IAEnB,SAAS7E,IAAO,MAAM6E,IAAU,MAAM7K;AAAA,IAC/C,GAAG,EAAE,IACekC,GAGhB,CAAC,sBAAsB,KAAKA,CAAI,KAAK,CAACuI,EAAK,SAAS,WAAW,MACjEvI,IAAO,+BAA+BA,IAMxCA,IAAOA,EAAK,QAAQ,UAAU,EAAE;AAGhC,UAAM4I,IAAmB5I,EAAK,YAAY,GAAG,GACvC+C,IAAO6F,MAAqB,KAAK5I,EAAK,MAAM,GAAG4I,IAAmB,CAAC,IAAI,aAAa5I,EAAK,MAAM4I,IAAmB,CAAC,IAAI,aAAa5I;AAG1I,WAAO,IAAI,SAAS,GAAGuI,GAAMxF,CAAI,EAAE,GAAG0F,CAAM;AAAA,EAC9C;AACF;AACApE,EAAS,UAAU,KAAK;AAAA,EACtB,QAAAiE;AACF;AC/mEO,SAASO,GAAe5I,GAAUmF,GAActT,GAAkB;AACvE,QAAM0U,IAAQpB,EAAK,QAAQ,UAAU,EAAE,EAAE,MAAM,UAAU,EAAE,OAAO,OAAO;AACzE,MAAI0D,IAAU7I;AAEd,WAAS,IAAI,GAAG,IAAIuG,EAAM,SAAS,GAAG,KAAK;AACzC,UAAMC,IAAOD,EAAM,CAAC,GACduC,IAAWvC,EAAM,IAAI,CAAC,GACtBwC,IAAuB,QAAQ,KAAKD,CAAQ;AAElD,QAAItC,MAAS,eAAeA,MAAS,iBAAiBA,MAAS;AAC7D,YAAM,IAAI,MAAM,wBAAwBA,CAAI;AAO9C,QAJMA,KAAQqC,MACZA,EAAQrC,CAAI,IAAIuC,IAAuB,CAAA,IAAK,CAAA,IAG1CA,GAAsB;AACxB,YAAM3Y,IAAQ,SAAS0Y,GAAU,EAAE;AACnC,MAAK,MAAM,QAAQD,EAAQrC,CAAI,CAAC,MAC9BqC,EAAQrC,CAAI,IAAI,CAAA,IAEdqC,EAAQrC,CAAI,EAAE,UAAUpW,MAC1ByY,EAAQrC,CAAI,EAAEpW,CAAK,IAAI,MAAMmW,EAAM,SAAS,IAAI1U,IAAQ,CAAA,IAE1DgX,IAAUA,EAAQrC,CAAI,EAAEpW,CAAK,GAC7B;AAAA,IACF;AACE,MAAAyY,IAAUA,EAAQrC,CAAI;AAAA,EAE1B;AAEA,QAAMwC,IAAWzC,EAAMA,EAAM,SAAS,CAAC;AACvC,MAAIyC,MAAa,eAAeA,MAAa,iBAAiBA,MAAa;AACzE,UAAM,IAAI,MAAM,wBAAwBA,CAAQ;AAElD,MAAI,QAAQ,KAAKA,CAAQ,GAAG;AAC1B,UAAM5Y,IAAQ,SAAS4Y,GAAU,EAAE;AACnC,IAAK,MAAM,QAAQH,CAAO,MACxBA,IAAU,CAAA,IAEZA,EAAQzY,CAAK,IAAIyB;AAAA,EACnB;AACE,IAAAgX,EAAQG,CAAQ,IAAInX;AAExB;AC1CO,MAAMoX,KAAU,CAKrB5Z,GACA6Z,GACAC,MACG;AACH,QAAMC,IAAS;AAAA,IACb,MAAMF,EAAU;AAAA,IAChB,MAAMA,EAAU,SAAS,WAAW,CAAA,IAAK;AAAA,IACzC,MAAMA,EAAU,SAAS,SAAS,CAAA,IAAK;AAAA,EAAA,GAGnCG,IAAa,CAACnB,GAAaoB,MAAa;AAC5C,QAAIC,IAAcrB;AAClB,WAAIoB,EAAM,gBAAgB,UACjBA,EAAM,SAASA,EAAM,gBAAgB,QAG1CA,EAAM,gBAAgB,YACxBC,IAAcJ,KAIdG,EAAM,SAAS,WACXlF,EAAS,EAAE,MAAMkF,EAAM,UAAU,MAAMC,GAAa,YAAY,SAAS,IACzEnF,EAAS,EAAE,MAAMkF,EAAM,UAAU,MAAMC,GAAa,MAC1CD,EAAM,gBAAgB;AAAA,EACxC,GAEME,IACJN,EAAU,SAAS,WACf9E,EAAS,EAAE,MAAM8E,EAAU,UAAU,MAAM7Z,GAAM,YAAY,SAAS,IACtE+U,EAAS,EAAE,MAAM8E,EAAU,UAAU,MAAM7Z,GAAM;AAEvD,SAAI6Z,EAAU,SAAS,WAErBA,EAAU,QAAQ,QAAQ,CAACI,MAAa;AACtC,UAAMzX,IAAQwX,EAAWG,GAAUF,CAAK;AACxC,IAAAV,GAAeQ,EAAO,MAAOE,EAAM,QAAQzX,CAAK;AAAA,EAClD,CAAC,IACQqX,EAAU,SAAS,WAC5BE,EAAO,OAAOI,EAAS,IAAI,CAAClL,MAAc;AACxC,UAAMmL,IAAkC,CAAA;AACxC,WAAAP,EAAU,QAAQ,QAAQ,CAACI,MAAU;AAEnC,YAAMzX,IAAQwX,EAAW/K,GAAMgL,CAAK;AACpC,MAAAV,GAAea,GAAYH,EAAM,QAAQzX,CAAK;AAAA,IAChD,CAAC,GAEM4X;AAAA,EACT,CAAC,IAGIL;AACT;ACnDA,SAASM,GACPhc,GACAic,GAC0C;AAC1C,QAAMC,IAAqD,CAAA;AAE3D,SAAI,CAAClc,EAAK,UAAU,CAAC,OAAO,KAAKA,EAAK,MAAM,EAAE,UAI9C,OAAO,QAAQA,EAAK,MAAM,EAAE,QAAQ,CAAC,CAAC0N,GAAWC,CAAS,MAAM;AAC9D,IAAKA,GAAW,WAEhBuO,EAASxO,CAAS,IAAI,IAAIG,MAAgB;AACxC,UAAI;AAEF,QADqB,IAAI,SAAS,OAAO,aAAa,QAAQF,CAAS,EAC1DsO,GAAejc,GAAM,GAAG6N,CAAI;AAAA,MAC3C,SAASlI,GAAG;AACV,gBAAQ,MAAM;AAAA,EAA2CgI,CAAS;AAAA;AAAA,SAAchI,CAAC;AAAA,MACnF;AAAA,IACF;AAAA,EACF,CAAC,GAEMuW;AACT;AAEA,SAASC,GACPnc,GACA2B,GACAM,IAAmB,WACN;AACb,MAAI,CAACjC,EAAK,SAAS,CAACA,EAAK,MAAMiC,CAAQ,EAAG,QAAO,CAAA;AAEjD,QAAMuO,IAAWxQ,EAAK,MAAMiC,CAAQ;AAEpC,SAAIN,EAAK,SAAS,WACT6O,EAAS,IAAI,CAAC/O,OAAW;AAAA,IAC9B,GAAGA;AAAA,IACH,MAAM,GAAGA,EAAM,IAAI;AAAA,IACnB,OAAO,EAAE,GAAGA,EAAM,OAAO,GAAIE,EAAK,QAAQ,CAAA,EAAC;AAAA,EAAG,EAC9C,IAGAA,EAAK,SAAS,UAAUA,EAAK,OACxB6O,EAAS;AAAA,IAAQ,CAAC/O,MACvBE,EAAK,KAAM,IAAI,CAACiP,GAAMlO,OAAW;AAAA,MAC/B,GAAGjB;AAAA,MACH,MAAM,GAAGA,EAAM,IAAI,SAASiB,CAAK;AAAA,MACjC,OAAO,EAAE,GAAGjB,EAAM,OAAO,GAAImP,KAAQ,CAAA,EAAC;AAAA,IAAG,EACzC;AAAA,EAAA,IAIC,CAAA;AACT;AAEO,SAASwL,GACdpc,GACAzB,GACA8d,GACAC,GACAL,GACc;AACd,MAAI,CAACnc,GAAUE,CAAI;AACjB,WAAO;AAGT,QAAMvB,IAAWF,EAAS,YAAYyB,CAAI,GACpCmI,IAAgB1J,GAAU,iBAAiBuB,EAAK,eAChDuc,IAAYF,IAAoBlU,CAAa,KAAKA,GAElD9J,IAAQ;AAAA,IACZ,GAAII,GAAU,gBAAgB,CAAA;AAAA,IAC9B,GAAGuB,EAAK;AAAA,EAAA,GAGJ8P,IAAgBmM,IAAgBD,GAAmBhc,GAAMic,CAAa,IAAI,CAAA,GAE1EO,IAAWF,IAActc,EAAK,IAAI;AACxC,MAAIwQ;AAEJ,SAAIgM,GAAU,OAEZhM,IADqB2L,GAAoBnc,GAAMwc,GAAUA,EAAS,YAAY,SAAS,EAEpF,IAAI,CAAC/a,MAAU2a,GAAuB3a,GAAOlD,GAAU8d,GAAmBC,GAAaL,CAAa,CAAC,EACrG,OAAO,CAACpU,MAAkBA,MAAM,IAAI,IAC9B7H,EAAK,UACdwQ,IAAW,OAAO,OAAOxQ,EAAK,KAAK,EAChC,KAAA,EACA,IAAI,CAACyB,MAAU2a,GAAuB3a,GAAOlD,GAAU8d,GAAmBC,GAAaL,CAAa,CAAC,EACrG,OAAO,CAACpU,MAAkBA,MAAM,IAAI,IAGlCsC,GAAEoS,GAAW,EAAE,KAAKvc,EAAK,MAAM,GAAG3B,GAAO,GAAGyR,EAAA,GAAiBU,CAAQ;AAC9E;AAEO,SAASiM,GACd1a,GACA2a,GACS;AACT,QAAMne,IAAW,IAAI0F,GAAkByY,EAAQ,WAAW;AAC1D,SAAO3a,EACJ;AAAA,IAAI,CAAC/B,MACJoc;AAAA,MACEpc;AAAA,MACAzB;AAAA,MACAme,EAAQ;AAAA,MACRA,EAAQ;AAAA,MACRA,EAAQ;AAAA,IAAA;AAAA,EACV,EAED,OAAO,CAAC7U,MAAkBA,MAAM,IAAI;AACzC;AC3HO,MAAM8U,KAAmB;AAAA,EAC9B,0BAA0B;AAAA,IACxB,eAAe;AAAA,IACf,cAAc;AAAA,MACZ,KAAK;AAAA,MACL,UAAU;AAAA,QACR;AAAA,UACE,UAAU;AAAA,UACV,MAAM;AAAA,UACN,OAAO;AAAA,QAAA;AAAA,MACT;AAAA,IACF;AAAA,IAEF,aAAa;AAAA,MACX;AAAA,QACE,UAAU;AAAA,QACV,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,MACF;AAAA,MAEF;AAAA,QACE,UAAU;AAAA,QACV,OAAO;AAAA,QACP,MAAM;AAAA,MAAA;AAAA,MAER;AAAA,QACE,UAAU;AAAA,QACV,OAAO;AAAA,QACP,MAAM;AAAA,MAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEF,aAAa;AAAA,IACX,eAAe;AAAA,EAAA;AAEnB,GC5BMC,KAAU,CAACC,MAAa;AAC5B,aAAWra,KAAOsa;AAChB,IAAAD,EAAI,UAAUra,GAAKsa,GAAWta,CAAG,CAAC;AAEtC,GAEaua,KAAS,EAAE,SAAAH,GAAA;","x_google_ignoreList":[37]}
|
|
1
|
+
{"version":3,"file":"v-craft.es.js","sources":["../src/components/CraftCanvas.vue","../src/components/composable/useResolveCraftNode.ts","../src/components/composable/useCraftNode.ts","../src/lib/craftNode.ts","../src/store/editor.ts","../src/components/CraftComponentSimpleText.vue","../src/lib/CraftNodeResolver.ts","../src/components/CraftEditor.vue","../src/store/indicator.ts","../src/components/CraftEditorBlueprint.vue","../src/components/utils.ts","../src/components/CraftEditorBlueprintsList.vue","../src/components/CraftEditorPanelBlueprints.vue","../src/components/CraftEditorPanelForm.vue","../src/components/CraftEditorPanelLayers.vue","../src/components/CraftEditorPanelLayout.vue","../src/components/CraftEditorPanelNodeEventsSettings.vue","../src/components/CraftEditorPanelNodeLayer.vue","../src/components/CraftEditorPanelNodeSettings.vue","../src/components/CraftEditorPanelSettings.vue","../src/components/CraftDropIndicator.vue","../src/components/CraftIframe.vue","../src/lib/vNodeToCraftNode.ts","../src/components/composable/useCraftFrame.ts","../src/components/CraftFrame.vue","../src/components/composable/useConnectCraftNodeToStore.ts","../src/components/composable/useCraftNodeEvents.ts","../src/components/composable/useCraftNodeWrapper.ts","../src/lib/dragCraftNode/mouse.ts","../src/lib/dragCraftNode/dragOver.ts","../src/lib/dragCraftNode/drop.ts","../src/lib/dragCraftNode/index.ts","../src/components/composable/useDragCraftNode.ts","../src/components/CraftNodeEditor.vue","../src/components/CraftNodeViewer.vue","../src/components/CraftStaticRenderer.vue","../src/blueprints/default.ts","../node_modules/jsonpath-plus/dist/index-browser-esm.js","../src/lib/setValueByPath.ts","../src/lib/mapData.ts","../src/lib/renderCraftNodes.ts","../src/resolvers/default.ts","../src/index.ts"],"sourcesContent":["<template>\n <component\n v-if=\"componentToRender\"\n :is=\"componentToRender\"\n v-bind=\"attrs\"\n >\n <template v-for=\"(_, name) in slots\" :key=\"name\" #[name]=\"slotProps\">\n <slot :name=\"name\" v-bind=\"slotProps || {}\" />\n </template>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, useAttrs, useSlots } from \"vue\";\nimport type { ComputedRef } from \"vue\";\nimport CraftNodeResolver from \"../lib/CraftNodeResolver\";\n\ndefineOptions({\n name: \"CraftCanvas\",\n});\n\nconst slots = useSlots();\nconst attrs = useAttrs();\n\nconst props = defineProps<{\n componentName: string;\n}>();\n\nconst resolver = inject<ComputedRef<CraftNodeResolver>>(\"resolver\");\nconst resolved = computed(() => resolver?.value.resolve(props.componentName));\nconst componentToRender = computed(() => resolved.value?.componentName || props.componentName);\n</script>\n","import { computed, ComputedRef, inject, Ref } from \"vue\";\nimport { CraftNode } from \"../../lib/craftNode\";\nimport CraftNodeResolver, {\n CraftNodeComponentMap,\n} from \"../../lib/CraftNodeResolver\";\n\nexport const useResolveCraftNode = <T extends object>(\n craftNode: Ref<CraftNode>\n) => {\n const resolver = inject<ComputedRef<CraftNodeResolver<T>>>(\"resolver\")!;\n const resolvedNode = computed(() => {\n if (!resolver || !craftNode?.value) return {} as CraftNodeComponentMap<T>;\n return resolver.value.resolve(\n craftNode.value.componentName\n ) as CraftNodeComponentMap<T>;\n });\n\n const defaultProps = computed(() => resolvedNode.value?.defaultProps || {});\n\n return {\n resolvedNode,\n resolver,\n defaultProps,\n };\n};\n","import { inject, Ref } from \"vue\";\nimport { CraftNode } from \"../../lib/craftNode\";\nimport { useResolveCraftNode } from \"./useResolveCraftNode\";\n\nexport const useCraftNode = <T extends object>() => {\n const craftNode = inject<Ref<CraftNode, CraftNode>>(\"craftNode\")!;\n if (!craftNode) {\n throw new Error(\"craftNode or resolver not provided\");\n }\n\n const { resolver, resolvedNode, defaultProps } =\n useResolveCraftNode(craftNode);\n\n return {\n craftNode,\n resolver,\n resolvedNode,\n defaultProps,\n };\n};\n","import { v4 as uuidv4 } from \"uuid\";\nimport CraftNodeResolver from \"./CraftNodeResolver\";\nimport { useEditor } from \"../store/editor\";\n\nexport type CraftNodeRules = {\n canMoveIn?: <T extends object>(\n craftNode: CraftNode,\n targetNode: CraftNode,\n resolver: CraftNodeResolver<T>\n ) => boolean;\n canMoveOut?: <T extends object>(\n craftNode: CraftNode,\n targetNode: CraftNode,\n resolver: CraftNodeResolver<T>\n ) => boolean;\n canDrag?: <T extends object>(craftNode: CraftNode) => boolean;\n canMoveInto?: <T extends object>(\n craftNode: CraftNode,\n targetNode: CraftNode,\n resolver: CraftNodeResolver<T>\n ) => boolean;\n};\n\nexport type CraftNode = {\n slots: Record<string, CraftNode[]>;\n componentName: string;\n parentUuid?: string | null;\n props: any;\n rules?: CraftNodeRules;\n uuid: string;\n visible?: boolean;\n events?: Record<string, string>;\n};\n\nexport type CraftNodeDatasource = {\n item?: Record<string, any>;\n list?: Record<string, any>[];\n type: \"single\" | \"list\";\n slotName?: string;\n};\n\nexport const isVisible = (craftNode: CraftNode) =>\n craftNode.visible === undefined || craftNode.visible;\n\nexport const craftNodeInCanvas = <T extends object>(craftNode: CraftNode) => {\n let node = craftNode;\n const editor = useEditor();\n\n while (node.parentUuid) {\n node = editor.nodeMap.get(node.parentUuid) as CraftNode;\n if (craftNodeIsCanvas(node)) {\n return true;\n }\n }\n\n return false;\n};\n\nexport const craftNodeIsDraggable = <T extends object>(\n craftNode: CraftNode\n) => {\n if (!craftNodeInCanvas(craftNode)) {\n return false;\n }\n\n if (craftNode.rules?.canDrag) {\n return craftNode.rules.canDrag(craftNode);\n }\n\n return true;\n};\n\nexport const craftNodeIsAncestorOf = <T extends object>(\n craftNode: CraftNode,\n descendant: CraftNode\n) => {\n const editor = useEditor();\n let currentNode = descendant;\n\n while (currentNode?.parentUuid) {\n if (currentNode.parentUuid === craftNode.uuid) {\n return true;\n }\n currentNode = editor.nodeMap.get(currentNode.parentUuid) as CraftNode;\n }\n\n return false;\n};\n\nexport const resolveNodeName = <T extends object>(craftNode: CraftNode) => {\n if (craftNode.componentName === \"CraftCanvas\") {\n return craftNode.props.componentName;\n }\n\n return craftNode.componentName;\n};\n\nexport const craftNodeCanBeChildOf = <T extends object>(\n craftNode: CraftNode,\n targetNode: CraftNode,\n resolver: CraftNodeResolver<T>\n) => {\n if (!craftNodeIsCanvas(targetNode)) {\n return false;\n }\n\n if (craftNode.uuid === targetNode.uuid) {\n return false;\n }\n\n const resolvedTargetNode = resolver.resolve(resolveNodeName(targetNode));\n const resolvedSource = resolver.resolve(resolveNodeName(craftNode));\n\n const targetNodeRules = resolvedTargetNode?.rules || {};\n const sourceNodeRules = resolvedSource?.rules || {};\n\n if (craftNode.parentUuid) {\n const editor = useEditor();\n const parent = editor.nodeMap.get(craftNode.parentUuid) as CraftNode;\n\n const rules = resolver.resolve(resolveNodeName<T>(parent))?.rules || {};\n if (\n rules.canMoveOut &&\n !rules.canMoveOut(craftNode, targetNode, resolver)\n ) {\n return;\n }\n }\n\n if (\n sourceNodeRules.canMoveInto &&\n !sourceNodeRules.canMoveInto(craftNode, targetNode, resolver)\n ) {\n return false;\n }\n\n if (craftNodeIsAncestorOf(craftNode, targetNode)) {\n return false;\n }\n\n if (\n targetNodeRules.canMoveIn &&\n !targetNodeRules.canMoveIn(craftNode, targetNode, resolver)\n ) {\n return false;\n }\n\n return true;\n};\n\nexport const craftNodeIsCanvas = <T extends object>(craftNode: CraftNode) => {\n return craftNode.componentName === \"CraftCanvas\";\n};\n\nexport const craftNodeCanBeSiblingOf = <T extends object>(\n craftNode: CraftNode,\n targetNode: CraftNode,\n resolver: CraftNodeResolver<T>\n) => {\n const editor = useEditor();\n if (targetNode.uuid === craftNode.uuid) {\n return false;\n }\n\n if (!targetNode.parentUuid) {\n return false;\n }\n\n return craftNodeCanBeChildOf(\n craftNode,\n editor.nodeMap.get(targetNode.parentUuid) as CraftNode,\n resolver\n );\n};\n\nexport const buildCraftNodeTree = <T extends object>(\n craftNode: CraftNode\n): CraftNode => {\n if (!craftNode.uuid) {\n craftNode.uuid = uuidv4();\n }\n\n if (!craftNode.slots) {\n return craftNode;\n }\n\n Object.values(craftNode.slots).forEach((slotChildren) => {\n slotChildren.forEach((cn) => {\n if (!cn.uuid) {\n cn.uuid = uuidv4();\n }\n if (cn.parentUuid !== craftNode.uuid) {\n cn.parentUuid = craftNode.uuid;\n }\n\n buildCraftNodeTree(cn);\n\n return cn;\n });\n });\n\n return craftNode;\n};\n","import type { FormKitSchemaFormKit } from \"@formkit/core\";\nimport { defineStore } from \"pinia\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { markRaw } from \"vue\";\nimport {\n CraftNode,\n craftNodeCanBeChildOf,\n craftNodeCanBeSiblingOf,\n CraftNodeDatasource,\n isVisible,\n resolveNodeName,\n} from \"../lib/craftNode\";\nimport CraftNodeResolver from \"../lib/CraftNodeResolver\";\n\nexport type EditorStoreInstanceType = ReturnType<typeof useEditor>;\n\nexport interface EditorState {\n nodeMap: Map<string, CraftNode>;\n rootNodes: string[];\n selectedUuid: string | null;\n draggedNode: CraftNode | null;\n enabled: boolean;\n nodeRefsRecord: Record<string, HTMLElement>;\n resolver: CraftNodeResolver<FormKitSchemaFormKit> | null;\n eventsContext: Record<string, any>;\n nodeDataMap: Record<string, CraftNodeDatasource | null>;\n draggingDisabled: boolean;\n};\n\nexport const useEditor = defineStore(\"editor\", {\n state: (): EditorState => ({\n nodeMap: new Map(),\n rootNodes: [],\n selectedUuid: null,\n draggedNode: null,\n enabled: false,\n nodeRefsRecord: {},\n resolver: null,\n eventsContext: {},\n nodeDataMap: {},\n draggingDisabled: false,\n }),\n\n actions: {\n clear() {\n this.nodeMap.clear();\n this.rootNodes = [];\n this.selectedUuid = null;\n this.draggedNode = null;\n this.nodeRefsRecord = {};\n this.draggingDisabled = false;\n },\n\n enable() {\n this.enabled = true;\n },\n\n disable() {\n this.enabled = false;\n },\n\n disableDragging() {\n this.draggingDisabled = true;\n },\n enableDragging() {\n this.draggingDisabled = false;\n },\n\n setResolver(resolver: CraftNodeResolver<FormKitSchemaFormKit>) {\n this.resolver = resolver;\n },\n\n setNodeRef(craftNode: CraftNode, ref: HTMLElement) {\n this.nodeRefsRecord[craftNode.uuid] = ref;\n },\n\n toggleNodeVisibility(craftNode: CraftNode) {\n const node = this.nodeMap.get(craftNode.uuid);\n if (node) {\n node.visible = !isVisible(node);\n if (node.slots) {\n const setVisibility = (n: CraftNode) => {\n n.visible = node.visible;\n if (n.slots) {\n Object.values(n.slots).forEach((slotChildren) => {\n slotChildren.forEach((child) => setVisibility(child));\n });\n }\n this.nodeMap.set(n.uuid, n);\n return n;\n };\n Object.values(node.slots).forEach((slotChildren) => {\n slotChildren.forEach((child) => setVisibility(child));\n });\n }\n this.nodeMap.set(node.uuid, node);\n }\n },\n\n setNodeData(uuid: string, data: CraftNodeDatasource | null) {\n this.nodeDataMap[uuid] = data;\n },\n\n updateNodeProps(nodeUuid: string, newProps: Record<string, any>) {\n const node = this.nodeMap.get(nodeUuid);\n if (node) {\n Object.assign(node.props, newProps);\n }\n },\n\n updateNodeEvents(nodeUuid: string, newEvents: Record<string, string>) {\n const node = this.nodeMap.get(nodeUuid);\n if (node) {\n if (!node.events) {\n node.events = {};\n }\n Object.assign(node.events as any, newEvents);\n }\n },\n\n setNodes(nodes: CraftNode[]) {\n this.clear();\n this.rootNodes = [];\n\n const addNode = (node: CraftNode) => {\n this.nodeMap.set(node.uuid, { ...node, slots: {} });\n if (!node.parentUuid) {\n this.rootNodes.push(node.uuid);\n }\n if (node.slots) {\n Object.entries(node.slots).forEach(([slotName, slotChildren]) => {\n slotChildren.forEach((child) => {\n child.parentUuid = node.uuid;\n addNode(child);\n if (!this.nodeMap.get(node.uuid)!.slots[slotName]) {\n this.nodeMap.get(node.uuid)!.slots[slotName] = [];\n }\n this.nodeMap.get(node.uuid)!.slots[slotName].push(child);\n });\n });\n }\n };\n\n nodes.forEach(addNode);\n },\n\n addNodeRecursively(node: CraftNode, parentUuid: string | null = null) {\n const uuid = node.uuid || uuidv4();\n const newNode = { ...node, uuid, parentUuid };\n this.nodeMap.set(uuid, markRaw(newNode));\n\n if (!parentUuid) {\n this.rootNodes.push(uuid);\n }\n\n if (node.slots) {\n Object.values(node.slots).forEach((slotChildren) => {\n slotChildren.forEach((child) => this.addNodeRecursively(child, uuid));\n });\n }\n },\n\n selectNode(craftNode: CraftNode | null) {\n this.selectedUuid = craftNode?.uuid ?? null;\n },\n\n dragNode(craftNode: CraftNode | null) {\n this.draggedNode = craftNode;\n },\n\n removeNode(craftNode: CraftNode) {\n this.emancipateNode(craftNode);\n if (craftNode.uuid === this.selectedUuid) {\n this.selectedUuid = null;\n }\n\n const removeDescendants = (node: CraftNode) => {\n if (node.slots) {\n Object.values(node.slots).forEach((slotChildren) => {\n slotChildren.forEach((child) => {\n this.nodeMap.delete(child.uuid);\n delete this.nodeRefsRecord[child.uuid];\n removeDescendants(child);\n });\n });\n }\n };\n\n removeDescendants(craftNode);\n this.nodeMap.delete(craftNode.uuid);\n delete this.nodeRefsRecord[craftNode.uuid];\n\n if (!craftNode.parentUuid) {\n this.rootNodes = this.rootNodes.filter(\n (uuid) => uuid !== craftNode.uuid\n );\n }\n },\n\n emancipateNode(craftNode: CraftNode) {\n const parentUuid = craftNode.parentUuid;\n if (!parentUuid) return craftNode;\n\n const parent = this.nodeMap.get(parentUuid);\n if (parent && parent.slots) {\n Object.entries(parent.slots).forEach(([slotName, slotChildren]) => {\n parent.slots[slotName] = slotChildren.filter(\n (child) => child.uuid !== craftNode.uuid\n );\n });\n }\n\n craftNode.parentUuid = null;\n if (this.nodeMap.get(craftNode.uuid) === craftNode) {\n this.nodeMap.delete(craftNode.uuid);\n }\n return craftNode;\n },\n\n addNodeAndChildrenToMap(node: CraftNode) {\n this.nodeMap.set(node.uuid, node);\n if (node.slots) {\n Object.values(node.slots).forEach((slotChildren) => {\n slotChildren.forEach((child) => this.addNodeAndChildrenToMap(child));\n });\n }\n },\n\n appendNodeTo(node: CraftNode, targetNode: CraftNode, slotName: string = 'default') {\n if (!this.resolver) throw new Error(\"Resolver is not set.\");\n\n if (!craftNodeCanBeChildOf(node, targetNode, this.resolver)) {\n throw new Error(\n `${resolveNodeName(\n node\n )} is not allowed to be a child of ${resolveNodeName(targetNode)}.`\n );\n }\n\n node = this.emancipateNode(node);\n node.parentUuid = targetNode.uuid;\n\n const targetParent = this.nodeMap.get(targetNode.uuid);\n\n if (targetParent) {\n if (!targetParent.slots) {\n targetParent.slots = {};\n }\n if (!targetParent.slots[slotName]) {\n targetParent.slots[slotName] = [];\n }\n targetParent.slots[slotName].push(node);\n this.nodeMap.set(targetParent.uuid, targetParent);\n }\n\n this.addNodeAndChildrenToMap(node);\n },\n\n prependNodeTo(node: CraftNode, targetNode: CraftNode, slotName: string = 'default') {\n if (!this.resolver) throw new Error(\"Resolver is not set\");\n\n if (!craftNodeCanBeChildOf(node, targetNode, this.resolver)) {\n throw new Error(\n `${resolveNodeName(\n node\n )} is not allowed to be a child of ${resolveNodeName(targetNode)}.`\n );\n }\n\n node = this.emancipateNode(node);\n node.parentUuid = targetNode.uuid;\n\n const targetParent = this.nodeMap.get(targetNode.uuid);\n\n if (targetParent) {\n if (!targetParent.slots) {\n targetParent.slots = {};\n }\n if (!targetParent.slots[slotName]) {\n targetParent.slots[slotName] = [];\n }\n targetParent.slots[slotName].unshift(node);\n this.nodeMap.set(targetParent.uuid, targetParent);\n }\n\n this.addNodeAndChildrenToMap(node);\n },\n\n insertNodeBefore(node: CraftNode, targetNode: CraftNode, slotName?: string) {\n if (!this.resolver) throw new Error(\"Resolver is not set\");\n\n if (!craftNodeCanBeSiblingOf(node, targetNode, this.resolver)) {\n throw new Error(\"Can not be the sibling of the target node.\");\n }\n\n node = this.emancipateNode(node);\n\n const parentUuid = targetNode.parentUuid;\n\n if (!parentUuid) throw new Error(\"Target node has no parent.\");\n\n const parent = this.nodeMap.get(parentUuid);\n\n if (parent && parent.slots) {\n const targetSlotName = slotName || Object.keys(parent.slots).find((key) =>\n parent.slots[key].some((n) => n.uuid === targetNode.uuid)\n );\n\n if (targetSlotName && parent.slots[targetSlotName]) {\n const index = parent.slots[targetSlotName].findIndex(\n (n) => n.uuid === targetNode.uuid\n );\n\n if (index !== -1) {\n parent.slots[targetSlotName].splice(index, 0, node);\n node.parentUuid = parentUuid;\n this.nodeMap.set(parent.uuid, parent);\n this.addNodeAndChildrenToMap(node);\n }\n }\n }\n },\n\n insertNodeAfter(node: CraftNode, targetNode: CraftNode, slotName?: string) {\n if (!this.resolver) throw new Error(\"Resolver is not set\");\n\n if (!craftNodeCanBeSiblingOf(node, targetNode, this.resolver)) {\n throw new Error(\"Can not be the sibling of the target node.\");\n }\n\n node = this.emancipateNode(node);\n\n const parentUuid = targetNode.parentUuid;\n\n if (!parentUuid) throw new Error(\"Target node has no parent.\");\n\n const parent = this.nodeMap.get(parentUuid);\n\n if (parent && parent.slots) {\n const targetSlotName = slotName || Object.keys(parent.slots).find((key) =>\n parent.slots[key].some((n) => n.uuid === targetNode.uuid)\n );\n\n if (targetSlotName && parent.slots[targetSlotName]) {\n const index = parent.slots[targetSlotName].findIndex(\n (n) => n.uuid === targetNode.uuid\n );\n\n if (index !== -1) {\n parent.slots[targetSlotName].splice(index + 1, 0, node);\n node.parentUuid = parentUuid;\n this.nodeMap.set(parent.uuid, parent);\n this.addNodeAndChildrenToMap(node);\n }\n }\n }\n },\n\n setEventsContext(context: Record<string, any>) {\n this.eventsContext = context;\n },\n },\n\n getters: {\n hasNodes: (state) => state.nodeMap.size > 0,\n selectedNode: (state): CraftNode | null => {\n return state.selectedUuid\n ? state.nodeMap.get(state.selectedUuid) || null\n : null;\n },\n selectedRef: (state) =>\n state.selectedUuid ? state.nodeRefsRecord[state.selectedUuid] : null,\n getRef: (state) => (uuid: string) => state.nodeRefsRecord[uuid],\n allNodes: (state): CraftNode[] => {\n return Array.from(state.nodeMap.values());\n },\n getDraggedNode: (state) => state.draggedNode,\n nodeTree: (state): CraftNode[] => {\n const buildTree = (nodeUuid: string): CraftNode => {\n const node = state.nodeMap.get(nodeUuid);\n if (!node) {\n throw new Error(`Node with UUID ${nodeUuid} not found`);\n }\n\n const slots: Record<string, CraftNode[]> = {};\n if (node.slots) {\n Object.entries(node.slots).forEach(([slotName, slotChildren]) => {\n slots[slotName] = slotChildren.map((child) => buildTree(child.uuid));\n });\n }\n\n return {\n ...node,\n slots,\n };\n };\n\n return state.rootNodes.map((rootUuid) => buildTree(rootUuid));\n },\n },\n });\n","<template>\n <component\n :is=\"componentName\"\n :class=\"{ 'pre-wrap': !isEditing, 'editable-text': enabled, 'is-editable': enabled, 'is-editing': isEditing }\"\n @dblclick=\"handleDoubleClick\"\n >\n {{ isEditing ? \"\" : content }}\n <textarea\n v-if=\"isEditing\"\n ref=\"textareaRef\"\n class=\"editable-text__textarea\"\n :value=\"content\"\n @input=\"adjustTextareaHeight\"\n @blur=\"finishEditing\"\n @keyup.enter.exact=\"finishEditing\"\n @keyup.esc=\"cancelEditing\"\n ></textarea>\n </component>\n</template>\n\n<script lang=\"ts\" setup>\nimport { ref, computed, watch, nextTick } from \"vue\";\nimport { useCraftNode } from \"./composable/useCraftNode\";\nimport { useEditor } from \"../store/editor\";\nimport { storeToRefs } from \"pinia\";\n\ninterface Props {\n content?: string;\n placeholder?: string;\n componentName?: string;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n content: \"Lorem ipsum dolor sit amet...\",\n isEditable: true,\n placeholder: \"\",\n componentName: \"div\",\n});\n\nconst emit = defineEmits<{\n (e: \"update:content\", value: string): void;\n}>();\n\nconst isEditing = ref(false);\nconst textareaRef = ref<HTMLTextAreaElement | null>(null);\nconst originalValue = ref(\"\");\nconst editor = useEditor();\nconst { enabled } = storeToRefs(editor);\nconst { craftNode } = useCraftNode();\n\nconst canEdit = computed(() => enabled.value && !isEditing.value);\n\nconst handleDoubleClick = () => {\n if (canEdit.value) {\n startEditing();\n }\n};\n\nconst startEditing = () => {\n originalValue.value = props.content;\n isEditing.value = true;\n editor.disableDragging();\n nextTick(() => {\n if (textareaRef.value) {\n textareaRef.value.focus();\n adjustTextareaHeight();\n }\n });\n};\n\nconst adjustTextareaHeight = () => {\n if (textareaRef.value) {\n textareaRef.value.style.height = \"auto\";\n textareaRef.value.style.height = `${textareaRef.value.scrollHeight}px`;\n }\n};\n\nconst finishEditing = async () => {\n editor.enableDragging();\n if (isEditing.value) {\n isEditing.value = false;\n const newValue = textareaRef.value?.value.trim() || \"\";\n if (newValue !== props.content) {\n if (!craftNode.value?.uuid) {\n return;\n }\n\n editor.nodeMap.set(craftNode.value.uuid, {\n ...craftNode.value,\n props: {\n ...craftNode.value.props,\n content: newValue,\n },\n });\n\n await nextTick();\n emit(\"update:content\", newValue);\n }\n }\n};\n\nconst cancelEditing = () => {\n isEditing.value = false;\n emit(\"update:content\", originalValue.value);\n};\n\nwatch(enabled, (newValue) => {\n if (!newValue && isEditing.value) {\n cancelEditing();\n }\n});\n</script>\n\n<style lang=\"scss\">\n.pre-wrap {\n white-space: pre-wrap;\n}\n\n.editable-text.is-editable:hover {\n background-color: rgba(0, 0, 0, 0.05);\n cursor: pointer;\n}\n\n.editable-text.is-editing {\n display: inline-block;\n width: 100%;\n}\n\n.editable-text__textarea {\n font: inherit;\n border: none;\n background: none;\n outline: none;\n width: 100%;\n resize: none;\n overflow: hidden;\n min-height: 1em;\n line-height: inherit;\n padding: 0.12em;\n margin: 0;\n}\n\n.editable-text__textarea:focus {\n border: none;\n}\n</style>\n","import type { FormKitSchemaFormKit } from \"@formkit/core\";\nimport { markRaw } from \"vue\";\nimport { CraftNode, craftNodeIsCanvas, CraftNodeRules } from \"./craftNode\";\n\nexport type CraftNodeComponentMap<T extends object> = {\n componentName: string;\n propsSchema?: T;\n eventsSchema?: T;\n defaultProps?: Record<string, any>;\n rules?: CraftNodeRules;\n slots?: string[];\n};\n\nexport type CraftNodeResolverMap<T extends object> = Record<\n string,\n CraftNodeComponentMap<T>\n>;\n\nexport class CraftNodeResolver<T extends object = FormKitSchemaFormKit[]> {\n resolverMap: CraftNodeResolverMap<T> = {};\n\n constructor(resolverMap: Record<string, CraftNodeComponentMap<T>> = {}) {\n this.setResolverMap(resolverMap);\n return markRaw(this) as this;\n }\n\n setResolverMap(resolverMap: Record<string, CraftNodeComponentMap<T>>) {\n this.resolverMap = {};\n Object.entries(resolverMap).forEach(([_, value]) => {\n this.resolverMap[value.componentName] = value;\n });\n }\n\n resolve(name: string): CraftNodeComponentMap<T> {\n return this.resolverMap[name];\n }\n\n getDefaultProps(craftNode: CraftNode): Record<string, any> {\n return this.resolveNode(craftNode)?.defaultProps || {};\n }\n\n resolveNode(craftNode: CraftNode): CraftNodeComponentMap<T> {\n const result = craftNodeIsCanvas(craftNode)\n ? this.resolve(craftNode.props.componentName)\n : this.resolve(craftNode.componentName);\n return result;\n }\n\n getSchema(craftNode: CraftNode): Record<string, any> {\n return this.resolveNode(craftNode)?.propsSchema || {};\n }\n\n getEventsSchema(craftNode: CraftNode): Record<string, any> {\n return this.resolveNode(craftNode)?.eventsSchema || {};\n }\n\n getRules(craftNode: CraftNode): CraftNodeRules {\n return this.resolveNode(craftNode)?.rules || {};\n }\n}\n\nexport default CraftNodeResolver;\n","<template>\n <CraftEditorPanelLayout :blueprints=\"config.blueprintsLibrary\">\n <template\n v-if=\"$slots['panel-layout']\"\n #panel-layout=\"{ blueprints, deselectNodes }\"\n >\n <slot\n name=\"panel-layout\"\n :blueprints=\"blueprints\"\n :deselectNodes=\"deselectNodes\"\n />\n </template>\n <template v-else #default>\n <CraftFrame\n :useIframe=\"useIframe\"\n :inheritStyles=\"inheritStyles\"\n :iFrameStyleSheets=\"iFrameStyleSheets\"\n :iFrameClass=\"iFrameClass\"\n :resolverMap=\"config.resolverMap\"\n @iframe-load=\"(iframe) => emit('iframeLoad', iframe)\"\n >\n <slot />\n </CraftFrame>\n </template>\n </CraftEditorPanelLayout>\n</template>\n\n<script lang=\"ts\" setup generic=\"T extends object\">\nimport { storeToRefs } from \"pinia\";\nimport { HTMLAttributes, provide, ref, watch } from \"vue\";\nimport { type CraftNode } from \"../lib/craftNode\";\nimport CraftNodeResolver from \"../lib/CraftNodeResolver\";\nimport { CraftEditorConfig } from \"../lib/model\";\nimport { useEditor } from \"../store/editor\";\n\nconst props = withDefaults(\n defineProps<{\n config: CraftEditorConfig<T>;\n useIframe?: boolean;\n iFrameStyleSheets?: string[];\n iFrameClass?: HTMLAttributes[\"class\"];\n inheritStyles?: boolean;\n }>(),\n {\n useIframe: false,\n inheritStyles: false,\n iFrameClass: \"\",\n iFrameStyleSheets: () => [],\n },\n);\n\nconst emit = defineEmits<{\n (e: \"nodeDragStart\", n: CraftNode): void;\n (e: \"nodeDragEnd\"): void;\n (e: \"iframeLoad\", iframe: HTMLIFrameElement): void;\n}>();\n\nconst editor = useEditor();\n\nconst { getDraggedNode } = storeToRefs(editor);\n\nwatch(getDraggedNode, (node) => {\n if (node) {\n emit(\"nodeDragStart\", node);\n return;\n }\n emit(\"nodeDragEnd\");\n});\n\nconst resolver = ref(new CraftNodeResolver(props.config.resolverMap));\nprovide(\"resolver\", resolver);\n</script>\n","import { defineStore } from \"pinia\";\n\nexport type IndicatorState = {\n barSize: number;\n visible: boolean;\n coordinates: {\n top: number;\n left: number;\n };\n dimensions: {\n width: number;\n height: number;\n };\n forbidden: boolean;\n}\n\nexport type IndicatorStoreType = ReturnType<typeof useIndicator>;\n\nexport const useIndicator = defineStore(\"indicator\", {\n state: () =>\n ({\n barSize: 2,\n visible: false,\n coordinates: {\n top: 0,\n left: 0,\n },\n dimensions: {\n width: 0,\n height: 0,\n },\n forbidden: false,\n } as IndicatorState),\n actions: {\n hide() {\n this.visible = false;\n this.forbidden = false;\n },\n show() {\n this.visible = true;\n },\n setIsForbidden(isForbidden) {\n this.forbidden = isForbidden;\n },\n pointBefore(element: HTMLElement) {\n this.show();\n\n const { top, left, height } = element.getBoundingClientRect();\n\n this.coordinates.top = top;\n this.coordinates.left = left;\n\n this.dimensions.width = this.barSize;\n this.dimensions.height = height;\n },\n pointAfter(element: HTMLElement) {\n this.show();\n\n const { top, left, width, height } = element.getBoundingClientRect();\n\n this.coordinates.top = top;\n this.coordinates.left = left + width;\n\n this.dimensions.width = this.barSize;\n this.dimensions.height = height;\n },\n pointInside(element: HTMLElement) {\n this.show();\n\n const padding = getPadding(element);\n const { top, left, width, height } = element.getBoundingClientRect();\n\n const paddingLeft = Number.parseInt(padding.paddingLeft);\n const paddingBottom = Number.parseInt(padding.paddingTop);\n const paddingRight = Number.parseInt(padding.paddingRight);\n\n this.coordinates.top = top + height - paddingBottom;\n this.coordinates.left = left + paddingLeft;\n\n this.dimensions.width = width - paddingLeft - paddingRight;\n this.dimensions.height = this.barSize;\n },\n\n pointInsideTop(element: HTMLElement) {\n this.show();\n\n const padding = getPadding(element);\n const { top, left, width } = element.getBoundingClientRect();\n const paddingLeft = Number.parseInt(padding.paddingLeft);\n const paddingTop = Number.parseInt(padding.paddingTop);\n const paddingRight = Number.parseInt(padding.paddingRight);\n\n this.coordinates.top = top + paddingTop;\n this.coordinates.left = left + paddingLeft;\n\n this.dimensions.width = width - paddingLeft - paddingRight;\n this.dimensions.height = this.barSize;\n },\n },\n getters: {\n isShown: (state): boolean => state.visible,\n isForbidden: (state): boolean => state.forbidden,\n position: (state): { top: number; left: number } => state.coordinates,\n size: (state): { width: number; height: number } => state.dimensions,\n },\n});\n\nfunction getPadding(e: HTMLElement) {\n const { paddingTop, paddingLeft, paddingRight, paddingBottom } =\n getComputedStyle(e);\n const padding = {\n paddingTop,\n paddingLeft,\n paddingRight,\n paddingBottom,\n };\n\n Object.keys(padding).forEach((key) => {\n padding[key] = parseInt(padding[key].slice(0, -2), 10);\n });\n\n return padding;\n}\n","<template>\n <div\n :draggable=\"true\"\n @dragstart.stop=\"handleDragStart\"\n @dragend=\"handleDragEnd\"\n >\n <slot></slot>\n </div>\n</template>\n<script lang=\"ts\" setup generic=\"T extends object\">\nimport { CraftNode } from \"../lib/craftNode\";\nimport { useEditor } from \"../store/editor\";\nimport { useIndicator } from \"../store/indicator\";\n\nconst editor = useEditor();\nconst indicator = useIndicator();\n\ndefineOptions({\n name: \"CraftEditorBlueprint\",\n});\n\nconst props = defineProps<{\n craftNode: CraftNode;\n}>();\n\nconst handleDragStart = (e: MouseEvent) => {\n console.log('CraftEditorBlueprint - dragging node:', props.craftNode);\n console.log('CraftEditorBlueprint - node.componentName:', props.craftNode.componentName);\n console.log('CraftEditorBlueprint - node.props:', props.craftNode.props);\n editor.dragNode(props.craftNode);\n};\n\nconst handleDragEnd = (e: MouseEvent) => {\n e.stopPropagation();\n\n editor.dragNode(null);\n indicator.hide();\n};\n</script>\n","import { CraftNode } from \"../lib/craftNode\";\nimport CraftNodeResolver from \"../lib/CraftNodeResolver\";\nimport { BlueprintGroup } from \"../lib/model\";\nimport { v4 as uuidv4 } from \"uuid\";\n\nexport const blueprintsWithDefaults = <T extends object>(\n group: BlueprintGroup,\n resolver: CraftNodeResolver<T>\n) => {\n return Object.keys(group.blueprints).map((key) => {\n const blueprint = group.blueprints[key];\n const defaultProps = resolver.getDefaultProps({\n ...blueprint,\n uuid: uuidv4(),\n } as CraftNode);\n const result = {\n ...blueprint,\n props: { ...defaultProps, ...blueprint.props },\n };\n return result;\n });\n};\n","<template>\n <div v-if=\"resolver\">\n <div v-for=\"group in blueprints.groups\">\n <slot name=\"blueprint-group\" :group=\"group\" :resolver=\"resolver\">\n <h4>{{ group.label }}</h4>\n <div class=\"flex flex-wrap gap-2 p-1\">\n <CraftEditorBlueprint\n v-for=\"(craftNode, key) in blueprintsWithDefaults(group, resolver)\"\n :craftNode=\"craftNode\"\n :key=\"key\"\n >\n <div class=\"v-craft-blueprint\">\n <div class=\"v-craft-blueprint-label\">\n {{ craftNode.label }}\n </div>\n </div>\n </CraftEditorBlueprint>\n </div>\n </slot>\n </div>\n </div>\n</template>\n<script lang=\"ts\" setup generic=\"T extends object\">\nimport { ComputedRef, inject } from \"vue\";\nimport CraftNodeResolver from \"../lib/CraftNodeResolver\";\nimport { BlueprintsLibrary } from \"../lib/model\";\nimport { blueprintsWithDefaults } from \"./utils\";\n\ndefineProps<{\n blueprints: BlueprintsLibrary;\n}>();\n\nconst resolver = inject<ComputedRef<CraftNodeResolver<T>>>(\"resolver\");\n</script>\n","<template>\n <div class=\"v-craft-panel v-craft-blueprints-panel\">\n <h3 class=\"v-craft-title\">blueprints</h3>\n <div class=\"v-craft-panel-content\">\n <CraftEditorBlueprintsList :blueprints=\"blueprints\" />\n </div>\n </div>\n</template>\n<script lang=\"ts\" setup>\nimport { BlueprintsLibrary } from \"../lib/model\";\n\ndefineProps<{\n blueprints: BlueprintsLibrary;\n}>();\n\ndefineEmits<{\n (event: \"close\", ...args: any[]): void;\n}>();\n\ndefineOptions({\n name: \"CraftEditorPanelBlueprints\",\n});\n</script>\n<style lang=\"scss\" scoped>\n.v-craft-blueprints-panel {\n min-width: 15em;\n max-width: 15em;\n width: 15em;\n\n :deep(.v-craft-blueprint) {\n text-align: center;\n padding: 0.25em;\n position: relative;\n border: 1px solid var(--v-craft-gray-medium);\n border-radius: 3px;\n display: flex;\n align-items: center;\n cursor: pointer;\n background-color: var(--v-craft-background-color-lighter-10);\n }\n\n :deep(.v-craft-blueprint-label) {\n font-size: 0.8em;\n text-transform: uppercase;\n font-weight: bold;\n color: var(--v-craft-gray-darker);\n }\n\n h4 {\n font-size: 0.8em;\n text-transform: uppercase;\n font-weight: bold;\n color: var(--v-craft-gray-medium);\n margin-bottom: 0.75em;\n margin-top: 2em;\n }\n}\n</style>\n","<template>\n <slot\n name=\"panel-content\"\n :craft-node=\"craftNode\"\n :model=\"computedModel\"\n :handle-form-input=\"handleFormInput\"\n :schema=\"schema\"\n />\n</template>\n\n<script lang=\"ts\" setup generic=\"T extends object, V, N\">\nimport { computed, watch, toRef, onUnmounted } from \"vue\";\nimport { debounce } from \"lodash-es\";\nimport type { CraftNode } from \"../lib/craftNode\";\n\nexport interface Props<T extends object, V, N> {\n craftNode?: CraftNode;\n model?: V;\n schema?: T;\n}\n\nconst props = withDefaults(defineProps<Props<T, V, N>>(), {\n schema: () => ({} as T),\n});\n\nconst emit = defineEmits<{\n (e: \"update\", value: V): void;\n}>();\n\nconst modelRef = toRef(props, \"model\");\nconst schema = toRef(props, \"schema\");\nconst craftNode = toRef(props, \"craftNode\");\n\nconst computedModel = computed(() =>\n modelRef.value ? { ...modelRef.value } : ({} as V)\n);\n\nconst debouncedEmit = debounce((value: V) => {\n emit(\"update\", value);\n}, 50);\n\nconst handleFormInput = (value: V) => {\n if (value !== undefined && value !== null) {\n debouncedEmit(value);\n }\n};\n\nonUnmounted(() => debouncedEmit.cancel());\n</script>\n","<template>\n <div class=\"v-craft-panel v-craft-layers-panel\">\n <h3 class=\"v-craft-title\">tree</h3>\n <div class=\"v-craft-layers\">\n <ul class=\"v-craft-node-layers\">\n <CraftEditorPanelNodeLayer\n v-for=\"(craftNode, key) in nodeTree\"\n :key=\"key\"\n :craftNode=\"craftNode\"\n @layer-click=\"layerClick\"\n />\n </ul>\n </div>\n </div>\n</template>\n<script lang=\"ts\" setup generic=\"T extends object\">\nimport { storeToRefs } from \"pinia\";\nimport { useEditor } from \"../store/editor\";\nimport { CraftNode } from \"../lib/craftNode\";\n\ndefineOptions({\n name: \"CraftEditorPanelLayers\",\n});\n\nconst editor = useEditor();\nconst { nodeTree } = storeToRefs(editor);\n\nconst layerClick = (craftNode: CraftNode) => {\n editor.selectNode(craftNode);\n};\n</script>\n\n<style lang=\"scss\" scoped>\n@use \"../assets/mixins\" as *;\n\n.v-craft-panel.v-craft-layers-panel {\n padding: 10px;\n display: flex;\n flex-direction: column;\n height: auto;\n position: relative;\n width: 23rem;\n}\n\n.v-craft-layers {\n @include v-craft-scrollable;\n max-height: 300px;\n overflow-y: auto;\n margin-top: 10px;\n}\n\nul.v-craft-node-layers {\n margin: 0;\n padding: 0;\n list-style-type: none;\n}\n</style>\n","<template>\n <div v-if=\"$slots['panel-layout']\">\n <slot\n name=\"panel-layout\"\n :blueprints=\"blueprints\"\n :deselectNodes=\"deselectNodes\"\n />\n </div>\n <div v-else class=\"v-craft-panel-manager\">\n <div class=\"flex w-full justify-between gap-10\">\n <div class=\"v-craft-grid-panel v-craft-panel-left shrink\">\n <CraftEditorPanelBlueprints :blueprints=\"blueprints\" />\n </div>\n <div class=\"v-craft-panel-center flex grow\" @click.stop=\"deselectNodes\">\n <slot></slot>\n </div>\n <div class=\"v-craft-grid-panel v-craft-panel-right shrink\">\n <CraftEditorPanelLayers />\n <CraftEditorPanelSettings />\n </div>\n </div>\n </div>\n</template>\n<script lang=\"ts\" setup generic=\"T extends object\">\nimport { BlueprintsLibrary } from \"../lib/model\";\nimport { useEditor } from \"../store/editor\";\n\ndefineProps<{\n blueprints: BlueprintsLibrary;\n}>();\n\nconst editor = useEditor();\nconst deselectNodes = () => {\n editor.selectNode(null);\n};\n</script>\n<style lang=\"scss\" scoped>\n.v-craft-panel-manager {\n .v-craft-panel {\n padding: 0.75em;\n margin-bottom: 1.25em;\n box-shadow: 0 2px 2px rgba(0, 0, 0, 0.034), 0 4px 4px rgba(0, 0, 0, 0.048),\n 0 6px 6px rgba(0, 0, 0, 0.06), 0 8px 8px rgba(0, 0, 0, 0.072),\n 0 10px 10px rgba(0, 0, 0, 0.086), 0 15px 15px rgba(0, 0, 0, 0.12);\n border-radius: 3px;\n }\n\n :deep(.v-craft-panel .v-craft-title) {\n margin: 0px;\n padding: 0.125em;\n border-bottom: 1px solid var(--v-craft-gray-medium);\n }\n}\n</style>\n","<template>\n <CraftEditorPanelForm\n :craftNode=\"craftNode\"\n :schema=\"schema\"\n :model=\"craftNode?.events\"\n @update=\"(v) => emit('update:events', v)\"\n >\n <template #panel-content=\"{ craftNode, model, handleFormInput, schema }\">\n <fieldset\n class=\"v-craft-panel-settings formkit-fieldset v-craft-scrollable-content\"\n v-if=\"schema\"\n >\n <legend class=\"formkit-legend\">Events</legend>\n <FormKit\n :key=\"craftNode?.uuid\"\n type=\"form\"\n :value=\"model\"\n @input=\"handleFormInput\"\n :actions=\"false\"\n >\n <FormKitSchema :schema=\"(schema as FormKitSchemaFormKit)\" />\n </FormKit>\n </fieldset>\n </template>\n </CraftEditorPanelForm>\n</template>\n\n<script lang=\"ts\" setup generic=\"T extends object = FormKitSchemaFormKit\">\nimport { FormKitSchemaFormKit } from \"@formkit/core\";\nimport { FormKit, FormKitSchema } from \"@formkit/vue\";\nimport { toRefs } from \"vue\";\nimport { CraftNode } from \"../lib/craftNode\";\n\nexport interface Props<T extends object> {\n craftNode: CraftNode;\n schema?: T;\n}\n\nconst props = withDefaults(defineProps<Props<T>>(), {\n schema: () => ({} as T),\n});\n\nconst { craftNode, schema } = toRefs(props);\n\nconst emit = defineEmits<{\n (e: \"update:events\", value: Record<string, any>): void;\n}>();\n</script>\n","<template>\n <li\n class=\"v-craft-node-layer\"\n :class=\"{\n 'v-craft-node-layer-selected': isSelected,\n }\"\n @click.prevent.stop=\"emit('layer-click', craftNode)\"\n >\n <div class=\"v-craft-component-layer-face\">\n <div class=\"v-craft-component-name\">{{ componentName }}</div>\n <button\n type=\"button\"\n class=\"v-craft-component-icon\"\n @click.prevent.stop=\"iconClick\"\n >\n {{ isVisible ? \"hide\" : \"show\" }}\n </button>\n </div>\n <ul\n class=\"v-craft-node-layers nested-layers\"\n v-if=\"craftNode.slots && Object.keys(craftNode.slots).length > 0\"\n >\n <template v-for=\"(slotChildren, slotName) in craftNode.slots\" :key=\"slotName\">\n <CraftEditorPanelNodeLayer\n v-for=\"(n, index) in slotChildren\"\n :key=\"`${slotName}-${index}`\"\n :craftNode=\"n\"\n @layer-click=\"(node) => emit('layer-click', node)\"\n :visible=\"isVisible\"\n />\n </template>\n </ul>\n </li>\n</template>\n<script lang=\"ts\" setup generic=\"T extends object\">\nimport { storeToRefs } from \"pinia\";\nimport { computed, toRefs } from \"vue\";\nimport { CraftNode, resolveNodeName } from \"../lib/craftNode\";\nimport { useEditor } from \"../store/editor\";\n\nconst props = withDefaults(\n defineProps<{\n craftNode: CraftNode;\n visible?: boolean;\n }>(),\n {\n visible: true,\n }\n);\n\nconst { craftNode, visible } = toRefs(props);\n\nconst isVisible = computed(\n () =>\n (visible.value && craftNode.value.visible === undefined) ||\n craftNode.value.visible\n);\n\nconst emit = defineEmits([\"layer-click\"]);\nconst editor = useEditor();\nconst { selectedNode } = storeToRefs(editor);\n\nconst componentName = computed(() => resolveNodeName(craftNode.value));\nconst isSelected = computed(\n () => selectedNode?.value?.uuid === craftNode.value.uuid\n);\n\nconst iconClick = () => {\n editor.toggleNodeVisibility(craftNode.value);\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.v-craft-node-layer {\n padding: 5px 0;\n border-bottom: 1px solid var(--v-craft-gray-dark);\n list-style-type: none;\n\n &.v-craft-node-layer-selected {\n & > .v-craft-component-layer-face {\n background-color: var(--v-craft-blue-lighter-5);\n\n &:hover {\n background-color: var(--v-craft-blue-lighter-15);\n }\n }\n }\n\n :deep(.v-craft-component-layer-face) {\n display: flex;\n align-items: center;\n padding: 2px 5px;\n background-color: var(--v-craft-gray-medium);\n border-radius: 3px;\n transition: background-color 0.2s ease;\n position: relative;\n\n &::before {\n position: absolute;\n background-color: var(--v-craft-gray-medium);\n width: 0.5em;\n height: 1px;\n top: 50%;\n left: -0.5em;\n content: \" \";\n }\n\n &:hover {\n background-color: var(--v-craft-gray-medium-lighter-15);\n }\n }\n\n :deep(.v-craft-component-name) {\n flex-grow: 1;\n font-size: 12px;\n cursor: pointer;\n }\n\n :deep(.v-craft-component-icon) {\n font-size: 12px;\n cursor: pointer;\n margin-left: 5px;\n transition: color 0.2s ease;\n &:hover {\n color: var(--v-craft-blue);\n }\n border: none;\n padding: 0.12em;\n }\n\n :deep(.nested-layers) {\n margin-left: 15px;\n border-left: 1px solid var(--v-craft-gray-medium);\n padding-left: 5px;\n }\n}\n</style>\n","<template>\n <CraftEditorPanelForm\n :craftNode=\"craftNode\"\n :schema=\"schema\"\n :model=\"craftNode?.props\"\n @update=\"(v) => emit('update:props', v)\"\n >\n <template #panel-content=\"{ craftNode, model, handleFormInput, schema }\">\n <fieldset\n class=\"v-craft-panel-settings formkit-fieldset v-craft-scrollable-content\"\n v-if=\"schema\"\n >\n <legend class=\"formkit-legend\">Properties</legend>\n <FormKit\n :key=\"craftNode?.uuid\"\n type=\"form\"\n :value=\"model\"\n @input=\"handleFormInput\"\n :actions=\"false\"\n >\n <FormKitSchema :schema=\"(schema as FormKitSchemaFormKit)\" />\n </FormKit>\n </fieldset>\n </template>\n </CraftEditorPanelForm>\n</template>\n\n<script lang=\"ts\" setup generic=\"T extends object = FormKitSchemaFormKit\">\nimport { FormKitSchemaFormKit } from \"@formkit/core\";\nimport { FormKit, FormKitSchema } from \"@formkit/vue\";\nimport { toRefs } from \"vue\";\nimport { CraftNode } from \"../lib/craftNode\";\n\nexport interface Props<T extends object> {\n craftNode?: CraftNode;\n schema?: T;\n}\n\nconst props = withDefaults(defineProps<Props<T>>(), {\n schema: () => ({} as T),\n});\n\nconst { craftNode, schema } = toRefs(props);\n\nconst emit = defineEmits<{\n (e: \"update:props\", value: Record<string, any>): void;\n}>();\n</script>\n","<template>\n <slot\n name=\"panel-content\"\n :selectedNode=\"selectedNode\"\n :nodeName=\"nodeName\"\n :handlePropsUpdate=\"handlePropsUpdate\"\n :schema=\"schema\"\n :eventsSchema=\"eventsSchema\"\n :handleEventsUpdate=\"handleEventsUpdate\"\n :deleteable=\"deleteable\"\n :removeNode=\"removeNode\"\n >\n <div\n ref=\"panel\"\n class=\"v-craft-panel v-craft-settings-panel\"\n @click.prevent.stop=\"() => false\"\n >\n <h3 class=\"v-craft-title\">component inspector</h3>\n <span class=\"text-sm\">{{ selectedNode?.uuid }}</span>\n <div v-if=\"!selectedNode\">\n <p>select a component to inspect</p>\n </div>\n <div\n class=\"v-craft-properties\"\n :class=\"{ 'v-craft-visible': selectedNode }\"\n >\n <h4>{{ nodeName }}</h4>\n <div v-if=\"schema\" class=\"v-craft-settings\">\n <CraftEditorPanelNodeSettings\n :craftNode=\"selectedNode\"\n :schema=\"schema\"\n @update:props=\"handlePropsUpdate\"\n />\n </div>\n <div v-if=\"eventsSchema && selectedNode\" class=\"v-craft-settings\">\n <CraftEditorPanelNodeEventsSettings\n :craftNode=\"selectedNode\"\n :schema=\"eventsSchema\"\n @update:events=\"handleEventsUpdate\"\n />\n </div>\n <div class=\"v-craft-actions\" data-type=\"button\">\n <button\n class=\"formkit-input v-craft-delete\"\n v-if=\"deleteable\"\n @click.prevent=\"removeNode\"\n >\n Delete\n </button>\n </div>\n </div>\n </div>\n </slot>\n</template>\n\n<script lang=\"ts\" setup generic=\"T extends object\">\nimport { storeToRefs } from \"pinia\";\nimport { computed, inject, type ComputedRef } from \"vue\";\nimport CoreResolver from \"../lib/CraftNodeResolver\";\nimport { useEditor } from \"../store/editor\";\n\nconst editor = useEditor();\nconst { selectedNode } = storeToRefs(editor);\nconst resolver = inject<ComputedRef<CoreResolver<T>>>(\"resolver\");\n\nconst schema = computed(() => {\n if (!selectedNode.value || !resolver?.value) {\n return [];\n }\n return resolver.value.getSchema(selectedNode.value);\n});\nconst eventsSchema = computed(() => {\n if (!selectedNode.value || !resolver?.value) {\n return [];\n }\n return resolver.value.getEventsSchema(selectedNode.value);\n});\n\nconst deleteable = computed(\n () => selectedNode.value && selectedNode.value.parentUuid\n);\n\nconst removeNode = () => {\n if (selectedNode.value) {\n editor.removeNode(selectedNode.value);\n }\n};\n\nconst nodeName = computed(() =>\n selectedNode.value\n ? `${\n resolver?.value?.resolveNode(selectedNode.value)?.componentName ||\n \"Unknown\"\n }`\n : \"\"\n);\n\nconst handlePropsUpdate = (newProps: Record<string, any>) => {\n if (selectedNode.value && newProps) {\n editor.updateNodeProps(selectedNode.value.uuid, newProps);\n }\n};\n\nconst handleEventsUpdate = (newEvents: Record<string, any>) => {\n if (selectedNode.value && newEvents) {\n editor.updateNodeEvents(selectedNode.value.uuid, newEvents);\n }\n};\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","<template>\n <div\n v-if=\"indicator.isShown\"\n class=\"v-craft-indicator\"\n :class=\"{ 'v-craft-forbidden': indicator.isForbidden }\"\n :style=\"getIndicatorStyle()\"\n />\n</template>\n\n<script lang=\"ts\" setup>\nimport { useIndicator } from \"../store/indicator\";\n\nconst indicator = useIndicator();\n\nconst getIndicatorStyle = () => {\n const { top, left } = indicator.position;\n const { width, height } = indicator.size;\n\n return {\n top: `${top}px`,\n left: `${left}px`,\n height: `${height}px`,\n width: `${width}px`,\n };\n};\n</script>\n<style lang=\"scss\">\n:root {\n --v-craft-indicator-bg-allowed: var(--v-craft-green);\n --v-craft-indicator-bg-forbidden: var(--v-craft-red);\n --v-craft-indicator-transition-duration: 0.125s;\n --v-craft-indicator-z-index: 10000;\n}\n</style>\n<style lang=\"scss\">\n.v-craft-indicator {\n position: fixed;\n background-color: var(--v-craft-indicator-bg-allowed);\n transition: top var(--v-craft-indicator-transition-duration) ease,\n left var(--v-craft-indicator-transition-duration) ease,\n right var(--v-craft-indicator-transition-duration) ease,\n bottom var(--v-craft-indicator-transition-duration) ease,\n width var(--v-craft-indicator-transition-duration) ease,\n height var(--v-craft-indicator-transition-duration) ease,\n background-color var(--v-craft-indicator-transition-duration) ease-in-out;\n\n z-index: var(--v-craft-indicator-z-index);\n\n &:after {\n content: \" \";\n }\n\n &.v-craft-forbidden {\n background-color: var(--v-craft-indicator-bg-forbidden);\n }\n}\n</style>\n","<template>\n <div v-show=\"$slots.default\" :class=\"{ 'h-full': isAutoHeight }\">\n <iframe\n id=\"v-craft-iframe\"\n ref=\"iframeRef\"\n :class=\"iframeClass\"\n :style=\"iframeStyle\"\n :onload=\"onLoad\"\n />\n <Teleport v-if=\"hasLoad\" :to=\"iframeRef?.contentWindow?.document.body\">\n <slot />\n </Teleport>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n ref,\n nextTick,\n StyleValue,\n onUnmounted,\n toRefs,\n watch,\n computed,\n HTMLAttributes,\n} from \"vue\";\n\nconst props = withDefaults(\n defineProps<{\n iframeClass?: HTMLAttributes[\"class\"];\n iframeStyle?: StyleValue;\n inheritStyles?: boolean;\n styleSheets?: string[];\n styles?: string[];\n iframeId?: string;\n width?: \"auto\" | number;\n height?: \"auto\" | number;\n }>(),\n {\n iframeId: \"v-craft-iframe\",\n iframeClass: \"\",\n iframeStyle: () => ({}),\n inheritStyles: false,\n styleSheets: () => [],\n styles: () => [],\n width: \"auto\",\n height: \"auto\",\n }\n);\n\nconst iframeRef = ref<HTMLIFrameElement>();\nconst hasLoad = ref(false);\nconst iframeBody = ref();\nconst observer = ref<MutationObserver>();\nconst resizeObserver = ref<ResizeObserver>();\nconst { height, width } = toRefs(props);\n\nconst isAutoHeight = computed(() => height.value === 'auto');\nlet lastHeight = 0;\nlet updateScheduled = false;\n\nconst onLoad = () => {\n nextTick(() => {\n if (!iframeRef.value) {\n console.error(\"iframe could not be loaded.\");\n return;\n }\n\n emit(\"iframeLoad\", iframeRef.value);\n iframeRef.value?.setAttribute(\"data-iframe-ready\", \"true\");\n setupBody();\n if (props.inheritStyles) inheritStyles();\n\n props.styles.forEach((el) => {\n if (!iframeRef.value) return;\n insertStyle(iframeRef.value, el);\n });\n\n props.styleSheets.forEach((sheet) => {\n if (!iframeRef.value) return;\n insertStyleSheet(iframeRef.value, sheet);\n });\n\n hasLoad.value = true;\n\n nextTick(() => {\n if (!iframeRef.value) {\n return;\n }\n\n iframeBody.value = iframeRef.value?.contentWindow?.document.body;\n setupAutoResize();\n });\n });\n};\n\nwatch([width, height], ([w, h]) => {\n setupAutoResize();\n});\n\nconst setupAutoResize = () => {\n if (!iframeRef.value) {\n return;\n }\n const iframeWindow = iframeRef.value.contentWindow;\n if (!iframeWindow) return;\n\n observer.value?.disconnect();\n resizeObserver.value?.disconnect();\n\n if (height.value !== \"auto\" || width.value !== \"auto\") {\n iframeRef.value.style.height = `${height.value}px`;\n iframeRef.value.style.width = `${width.value}px`;\n return;\n }\n\n iframeRef.value.style.width = \"100%\";\n iframeRef.value.style.height = \"100%\";\n\n observer.value = new MutationObserver(() => {\n setTimeout(updateIframeHeight, 100);\n });\n observer.value.observe(iframeWindow.document.body, {\n childList: true,\n subtree: true,\n attributes: true,\n characterData: true,\n });\n\n const initialResizeObserver = new ResizeObserver(() => {\n updateIframeHeight();\n initialResizeObserver.disconnect();\n });\n initialResizeObserver.observe(iframeWindow.document.documentElement);\n\n updateIframeHeight();\n};\n\nconst updateIframeHeight = () => {\n if (updateScheduled) return;\n \n updateScheduled = true;\n nextTick(() => {\n const iframeDocument = iframeRef.value?.contentWindow?.document;\n if (!iframeDocument) {\n updateScheduled = false;\n return;\n }\n\n const iframeParent = iframeRef.value?.parentElement;\n let availableHeight = 0;\n \n if (iframeParent) {\n const parentHeight = iframeParent.clientHeight;\n const iframeTop = iframeRef.value?.offsetTop || 0;\n availableHeight = parentHeight - iframeTop;\n }\n\n const body = iframeDocument.body;\n const html = iframeDocument.documentElement;\n\n const contentHeight = Math.max(\n 150,\n body.scrollHeight,\n body.offsetHeight,\n html.scrollHeight,\n html.offsetHeight\n );\n\n const finalHeight = Math.max(contentHeight, availableHeight);\n\n if (iframeRef.value && Math.abs(finalHeight - lastHeight) > 1) {\n lastHeight = finalHeight;\n iframeRef.value.style.height = `${finalHeight}px`;\n }\n \n updateScheduled = false;\n });\n};\n\nconst inheritStyles = () => {\n const parentDoc = iframeRef.value?.contentWindow?.parent.document;\n if (!parentDoc) return;\n\n const styles = Array.from(parentDoc.querySelectorAll(\"style\") ?? []);\n styles.forEach((el: any) => {\n iframeRef.value?.contentDocument?.head.appendChild(el.cloneNode(true));\n });\n\n const links = Array.from(parentDoc.querySelectorAll(\"link[rel='stylesheet']\") ?? []);\n links.forEach((el: any) => {\n iframeRef.value?.contentDocument?.head.appendChild(el.cloneNode(true));\n });\n};\n\nconst insertStyle = (target: HTMLIFrameElement, style: string) => {\n const styleEl = document.createElement(\"style\");\n styleEl.innerHTML = style;\n target?.contentWindow?.document\n .getElementsByTagName(\"head\")\n .item(0)\n ?.appendChild(styleEl);\n};\n\nconst insertStyleSheet = (target: HTMLIFrameElement, sheet: string) => {\n const link = document.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = sheet;\n target.contentWindow?.document.head.appendChild(link);\n};\n\nconst setupBody = () => {\n const iframeDoc = iframeRef.value?.contentWindow?.document as Document;\n if (!iframeDoc) return;\n const body = iframeDoc.querySelector(\"body\");\n if (!body) return;\n\n const id = iframeDoc.createAttribute(\"id\");\n id.nodeValue = \"v-craft-body\";\n (body.attributes as NamedNodeMap).setNamedItem(id);\n};\n\nconst emit = defineEmits<{\n (e: \"iframeLoad\", iframe: HTMLIFrameElement): void;\n}>();\n\nonUnmounted(() => {\n observer.value?.disconnect();\n resizeObserver.value?.disconnect();\n});\n</script>\n\n<style>\n.vue3-iframe iframe body {\n padding: 10px;\n}\n</style>","import { v4 as uuidv4 } from \"uuid\";\nimport { CraftNode } from \"./craftNode\";\nimport CraftNodeResolver from \"./CraftNodeResolver\";\n\nconst formatComponentName = (vNode) => {\n if (typeof vNode.type === \"symbol\") {\n return \"Fragment\";\n }\n\n if (typeof vNode.type === \"string\") {\n return vNode.type;\n }\n\n if (vNode.type.name) {\n return vNode.type.name;\n }\n\n return \"anonmymous\";\n};\n\nconst createNodeFromVNode = <T extends object>(\n resolver: CraftNodeResolver<T>,\n vNode,\n parentNode: CraftNode | null = null\n) => {\n const componentName = formatComponentName(vNode);\n const { props } = vNode;\n const craftNode: CraftNode = {\n componentName,\n props,\n slots: {},\n parentUuid: parentNode?.uuid ?? null,\n uuid: uuidv4(),\n };\n\n if (vNode.children) {\n if (typeof vNode.children === 'object' && !Array.isArray(vNode.children)) {\n Object.entries(vNode.children).forEach(([slotName, slotFn]) => {\n if (typeof slotFn === 'function') {\n const slotChildren = slotFn();\n if (slotChildren) {\n craftNode.slots[slotName] = createChildren<T>(resolver, slotChildren, craftNode);\n }\n }\n });\n } else if (Array.isArray(vNode.children)) {\n craftNode.slots.default = createChildren<T>(resolver, vNode.children, craftNode);\n }\n }\n\n return craftNode;\n};\n\nconst createChildren = <T extends object>(resolver, vnodeChildren, parent) => {\n if (!vnodeChildren || !(vnodeChildren instanceof Array))\n return [] as unknown as CraftNode[];\n return vnodeChildren\n .map((childVNode) => createNodeFromVNode<T>(resolver, childVNode, parent))\n .filter((childNode) => !!childNode) as CraftNode[];\n};\n\nexport default createNodeFromVNode;\n","import { storeToRefs } from \"pinia\";\nimport {\n ComputedRef,\n inject,\n onMounted,\n provide,\n ref,\n useSlots,\n watch,\n} from \"vue\";\nimport CraftNodeResolver, {\n CraftNodeResolverMap,\n} from \"../../lib/CraftNodeResolver\";\nimport vNodeToCraftNode from \"../../lib/vNodeToCraftNode\";\nimport { useEditor } from \"../../store/editor\";\n\nexport const useCraftFrame = <T extends object>(\n resolverMap?: CraftNodeResolverMap<T>\n) => {\n const editor = useEditor();\n const { hasNodes } = storeToRefs(editor);\n const resolver = resolverMap\n ? ref(new CraftNodeResolver(resolverMap))\n : inject<ComputedRef<CraftNodeResolver<T>>>(\"resolver\");\n\n if (resolver?.value) {\n editor.setResolver(resolver.value as any);\n }\n\n if (resolverMap) {\n provide(\"resolver\", resolver);\n }\n\n const mountNodes = () => {\n if (!resolver?.value) {\n return;\n }\n\n if (!hasNodes.value) {\n const slots = useSlots();\n const defaultSlots = slots.default ? slots.default() : [];\n\n const createdNodes = defaultSlots\n .flatMap((slot) => {\n if (\n slot.key === \"_default\" &&\n slot.children &&\n Array.isArray(slot.children)\n ) {\n return slot.children\n .map((child) => {\n const node = vNodeToCraftNode(resolver.value, child);\n if (!node) {\n console.error(\"Invalid node created from child:\", child);\n }\n return node;\n })\n .filter(Boolean);\n } else {\n const node = vNodeToCraftNode(resolver.value, slot);\n if (!node) {\n console.error(\"Invalid node created from slot:\", slot);\n }\n return [node];\n }\n })\n .filter(Boolean);\n\n if (createdNodes.length) {\n editor.setNodes(createdNodes);\n }\n }\n };\n\n onMounted(mountNodes);\n\n watch(\n () => resolver?.value,\n (res) => {\n if (!res) {\n return;\n }\n\n editor.setResolver(res as any);\n }\n );\n\n return {\n editor,\n mountNodes,\n };\n};\n","<template>\n <div class=\"v-craft-frame\">\n <CraftIframe\n v-if=\"useIframe\"\n @iframe-load=\"onIframeLoad\"\n :inheritStyles=\"inheritStyles\"\n :styles=\"[\n ...iFrameStyles,\n ]\"\n :iframe-style=\"iFrameStyle\"\n :iframe-class=\"iFrameClass\"\n :style-sheets=\"iFrameStyleSheets\"\n :width=\"iFrameWidth\"\n :height=\"iFrameHeight\"\n >\n <CraftNodeViewer\n v-if=\"(viewOnly || !enabled) && hasNodes\"\n v-for=\"craftNode in nodeTree\"\n :key=\"`${craftNode.uuid}-view`\"\n :craftNode=\"craftNode\"\n />\n <CraftNodeEditor\n v-if=\"!viewOnly && enabled && hasNodes\"\n v-for=\"craftNode in nodeTree\"\n :key=\"`${craftNode.uuid}-edit`\"\n :craftNode=\"craftNode\"\n />\n <Indicator v-if=\"!viewOnly && enabled\" />\n </CraftIframe>\n <CraftNodeViewer\n v-if=\"!useIframe && (viewOnly || !enabled) && hasNodes\"\n v-for=\"craftNode in nodeTree\"\n :key=\"`${craftNode.uuid}-view`\"\n :craftNode=\"craftNode\"\n />\n <CraftNodeEditor\n v-if=\"!useIframe && !viewOnly && enabled && hasNodes\"\n v-for=\"craftNode in nodeTree\"\n :key=\"`${craftNode.uuid}-edit`\"\n :craftNode=\"craftNode\"\n />\n <Indicator v-if=\"!useIframe && !viewOnly && enabled\" />\n </div>\n</template>\n\n<script lang=\"ts\" setup generic=\"T extends object\">\nimport { storeToRefs } from \"pinia\";\nimport { StyleValue, toRefs, type HTMLAttributes } from \"vue\";\nimport { CraftNodeResolverMap } from \"../lib/CraftNodeResolver\";\nimport Indicator from \"./CraftDropIndicator.vue\";\nimport CraftIframe from \"./CraftIframe.vue\";\nimport { useCraftFrame } from \"./composable/useCraftFrame\";\n\ndefineOptions({\n name: \"CraftFrame\",\n});\n\nconst props = withDefaults(\n defineProps<{\n iFrameHeight?: \"auto\" | number;\n iFrameStyle?: StyleValue;\n iFrameStyleSheets?: string[];\n iFrameStyles?: string[];\n iFrameWidth?: \"auto\" | number;\n iFrameClass?: HTMLAttributes[\"class\"];\n inheritStyles?: boolean;\n resolverMap?: CraftNodeResolverMap<T>;\n useIframe?: boolean;\n viewOnly?: boolean;\n }>(),\n {\n iFrameHeight: \"auto\",\n iFrameStyle: () => ({}),\n iFrameStyleSheets: () => [],\n iFrameStyles: () => [],\n iFrameWidth: \"auto\",\n inheritStyles: false,\n useIframe: false,\n viewOnly: false,\n }\n);\n\nconst { iFrameWidth, iFrameHeight } = toRefs(props);\n\nconst onIframeLoad = (iframe: HTMLIFrameElement) => {\n emit(\"iframeLoad\", iframe);\n};\n\nconst emit = defineEmits<{\n (e: \"iframeLoad\", iframe: HTMLIFrameElement): void;\n}>();\n\nconst { editor } = useCraftFrame<T>(props.resolverMap);\nconst { nodeTree, hasNodes, enabled } = storeToRefs(editor);\n</script>\n","import { storeToRefs } from \"pinia\";\nimport { ComponentPublicInstance, computed, onMounted, Ref, watch } from \"vue\";\nimport { CraftNode, craftNodeIsDraggable } from \"../../lib/craftNode\";\nimport { useEditor } from \"../../store/editor\";\n\nexport default (\n craftNode: CraftNode,\n nodeRef: Ref<\n ComponentPublicInstance<HTMLElement> | null,\n ComponentPublicInstance<HTMLElement> | null\n >\n): {\n selectNode: () => void;\n isDraggable: Ref<boolean>;\n isSelected: Ref<boolean>;\n} => {\n const editor = useEditor();\n const { enabled, selectedUuid, draggingDisabled } = storeToRefs(editor);\n\n let lastEl: HTMLElement | null = null;\n const updateNodeRef = () => {\n const el = nodeRef?.value?.$el;\n if (el && el !== lastEl) {\n lastEl = el;\n editor.setNodeRef(craftNode, el);\n }\n };\n\n onMounted(updateNodeRef);\n watch(nodeRef, updateNodeRef, { flush: \"post\" });\n\n const isSelected = computed<boolean>(\n () => selectedUuid.value === craftNode.uuid\n );\n\n const isDraggable = computed<boolean>(() => {\n return (\n enabled.value &&\n !draggingDisabled.value &&\n craftNodeIsDraggable(craftNode)\n );\n });\n\n const selectNode = () => {\n if (!enabled.value) {\n return;\n }\n editor.selectNode(craftNode);\n };\n\n return {\n isDraggable,\n isSelected,\n selectNode,\n };\n};\n","import { onBeforeMount, onBeforeUnmount, Ref, watch } from \"vue\";\nimport { CraftNode } from \"../../lib/craftNode\";\nimport { computed } from \"vue\";\nimport { EditorStoreInstanceType } from \"../../store/editor\";\n\nexport const useCraftNodeEvents = (\n craftNode: Ref<CraftNode>,\n editor: EditorStoreInstanceType,\n ctx: Record<string, any>\n) => {\n const eventHandlersMap = new Map();\n\n const buildEvents = () => {\n if (\n !craftNode.value?.events ||\n !Object.values(craftNode.value.events).length\n ) {\n return;\n }\n\n Object.entries(craftNode.value.events).forEach(([eventName, eventCode]) => {\n if (!eventCode.trim()) {\n return;\n }\n\n const handler = (...args: any[]) => {\n try {\n const eventHandler = new Function(\n \"ctx\",\n \"craftNode\",\n \"args\",\n eventCode\n );\n eventHandler(\n { ...ctx, editor },\n editor.nodeMap.get(craftNode.value.uuid),\n ...args\n );\n } catch (e) {\n console.error(\n `Event code execution failed with code: \n${eventCode}\n\nError:`,\n e\n );\n }\n };\n\n eventHandlersMap.set(eventName, handler);\n });\n };\n\n watch(\n () => craftNode,\n () => {\n buildEvents();\n }\n );\n\n onBeforeMount(() => {\n buildEvents();\n });\n\n onBeforeUnmount(() => {\n eventHandlersMap.clear();\n });\n\n return {\n eventHandlers: computed(() => Object.fromEntries(eventHandlersMap)),\n };\n};\n","import { storeToRefs } from \"pinia\";\nimport { useEditor } from \"../../store/editor\";\nimport { computed, provide, readonly, Ref, toRef, ref } from \"vue\";\nimport { CraftNode } from \"../../lib/craftNode\";\n\nexport const useCraftNodeWrapper = <T extends object>(\n craftNode: Ref<CraftNode>\n) => {\n const editor = (() => {\n try {\n return useEditor();\n } catch (e) {\n return null;\n }\n })();\n\n const enabled = computed(() => {\n if (!editor) return false;\n const storeRefs = storeToRefs(editor);\n return (storeRefs as any).enabled?.value ?? false;\n });\n\n const visible = computed(() => craftNode.value?.visible !== false);\n\n provide(\"craftNode\", readonly(craftNode));\n\n return {\n editor,\n craftNode,\n enabled,\n visible,\n };\n};\n","export const mouseOnLeftHalf = (e: MouseEvent, el: HTMLElement): boolean => {\n const rect = el.getBoundingClientRect();\n return e.clientX - rect.left < rect.width / 2;\n};\n\nexport const mouseOnTopHalf = (e: MouseEvent, el: HTMLElement): boolean => {\n const rect = el.getBoundingClientRect();\n return e.clientY - rect.top < rect.height / 2;\n};\n\nexport const mouseOnEdge = (e: MouseEvent, el: HTMLElement): boolean => {\n const rect = el.getBoundingClientRect();\n return (\n e.clientX - rect.left < 15 ||\n e.clientY - rect.top < 15 ||\n rect.right - e.clientX < 15 ||\n rect.bottom - e.clientY < 15\n );\n};\n","import {\n craftNodeCanBeChildOf,\n craftNodeCanBeSiblingOf,\n craftNodeIsCanvas,\n} from \"../craftNode\";\nimport { DragCraftNodeContext } from \"./drop\";\nimport { mouseOnEdge, mouseOnLeftHalf, mouseOnTopHalf } from \"./mouse\";\n\nconst handleElementDragOver = <T extends object>(\n e: MouseEvent,\n el: HTMLElement,\n { editor, indicator, craftNode, resolver }: DragCraftNodeContext<T>\n) => {\n if (!editor.draggedNode) {\n return;\n }\n\n indicator.setIsForbidden(!craftNodeCanBeSiblingOf(editor.draggedNode, craftNode.value, resolver));\n\n if (mouseOnLeftHalf(e, el)) {\n indicator.pointBefore(el);\n return;\n }\n\n indicator.pointAfter(el);\n};\n\nconst handleCanvasDragOver = <T extends object>(\n e: MouseEvent,\n el: HTMLElement,\n { editor, indicator, craftNode, resolver }: DragCraftNodeContext<T>\n) => {\n if (!editor.draggedNode) return;\n\n // Check if hovering over a slot placeholder\n const target = e.target as HTMLElement;\n const slotPlaceholder = target.closest('.v-craft-drop-text');\n \n if (slotPlaceholder) {\n const cannotBeChild = !craftNodeCanBeChildOf(editor.draggedNode, craftNode.value, resolver);\n indicator.setIsForbidden(cannotBeChild);\n indicator.pointInside(slotPlaceholder as HTMLElement);\n return;\n }\n\n if (mouseOnEdge(e, el)) {\n handleElementDragOver(e, el, { editor, indicator, craftNode, resolver });\n return;\n }\n\n const cannotBeChild = !craftNodeCanBeChildOf(editor.draggedNode, craftNode.value, resolver);\n indicator.setIsForbidden(cannotBeChild);\n if (mouseOnTopHalf(e, el)) {\n indicator.pointInsideTop(el);\n return;\n }\n\n indicator.pointInside(el);\n};\n\nexport default <T extends object>(\n e: MouseEvent,\n el: HTMLElement,\n context: DragCraftNodeContext<T>\n) => {\n if (craftNodeIsCanvas(context.craftNode.value)) {\n handleCanvasDragOver<T>(e, el, context);\n return;\n }\n handleElementDragOver<T>(e, el, context);\n};\n","import { Ref, ref } from \"vue\";\nimport { EditorStoreInstanceType } from \"../../store/editor\";\nimport { IndicatorStoreType } from \"../../store/indicator\";\nimport {\n buildCraftNodeTree,\n CraftNode,\n craftNodeCanBeChildOf,\n craftNodeCanBeSiblingOf,\n craftNodeIsCanvas,\n resolveNodeName,\n} from \"../craftNode\";\nimport CraftNodeResolver from \"../CraftNodeResolver\";\nimport { mouseOnEdge, mouseOnLeftHalf, mouseOnTopHalf } from \"./mouse\";\n\nexport type DragCraftNodeContext<T extends object> = {\n editor: EditorStoreInstanceType;\n indicator: IndicatorStoreType;\n craftNode: Ref<CraftNode>;\n resolver: CraftNodeResolver<T>;\n};\n\nconst handleElementDrop = <T extends object>(\n e: MouseEvent,\n el: HTMLElement,\n draggedNode: CraftNode,\n context: DragCraftNodeContext<T>\n) => {\n if (\n !craftNodeCanBeSiblingOf(\n draggedNode,\n context.craftNode.value,\n context.resolver\n )\n ) {\n return context.craftNode.value;\n }\n\n const parent = context.craftNode.value.parentUuid\n ? context.editor.nodeMap.get(context.craftNode.value.parentUuid)\n : null;\n if (!parent) {\n return context.craftNode.value;\n }\n\n const sibling = Object.values(parent.slots || {}).flat().find(\n (c) => c.uuid === context.craftNode.value.uuid\n );\n if (!sibling) {\n return context.craftNode.value;\n }\n\n if (sibling.uuid === draggedNode.uuid) {\n return context.craftNode.value;\n }\n\n if (mouseOnLeftHalf(e, el)) {\n context.editor.insertNodeBefore(draggedNode, sibling);\n } else {\n context.editor.insertNodeAfter(draggedNode, sibling);\n }\n\n return context.craftNode.value;\n};\n\nconst initializeSlotsFromResolver = <T extends object>(\n node: CraftNode,\n resolver: CraftNodeResolver<T>\n): CraftNode => {\n if (!node.slots || Object.keys(node.slots).length === 0) {\n const resolved = resolver.resolveNode?.(node);\n const resolverSlots = resolved?.slots;\n if (resolverSlots && resolverSlots.length > 0) {\n node.slots = {};\n resolverSlots.forEach((slotName: string) => {\n node.slots[slotName] = [];\n });\n } else {\n node.slots = { default: [] };\n }\n }\n return node;\n};\n\nconst handleCanvasDrop = <T extends object>(\n e: MouseEvent,\n el: HTMLElement,\n draggedNode: CraftNode,\n context: DragCraftNodeContext<T>\n) => {\n const { editor, resolver, craftNode } = context;\n const target = e.target as HTMLElement;\n const targetNode = editor.nodeMap.get(target.id);\n if (targetNode && craftNodeIsCanvas(targetNode)) {\n handleCanvasDrop(e, el, draggedNode, { ...context, craftNode: ref(targetNode) });\n return context.craftNode.value;\n }\n const slotPlaceholder = target.closest('.v-craft-drop-text');\n let slotName = 'default';\n \n if (slotPlaceholder) {\n const slotNameAttr = slotPlaceholder.getAttribute('data-slot-name');\n if (slotNameAttr) {\n slotName = slotNameAttr;\n }\n } else {\n if (mouseOnEdge(e, el)) {\n return handleElementDrop(e, el, draggedNode, context);\n }\n\n const targetSlots = context.craftNode.value.slots || {};\n const slotNames = Object.keys(targetSlots);\n slotName = slotNames.length > 0 ? slotNames[0] : 'default';\n }\n\n if (\n !craftNodeCanBeChildOf(\n draggedNode,\n context.craftNode.value,\n context.resolver\n )\n ) {\n return context.craftNode.value;\n }\n\n if (mouseOnTopHalf(e, el)) {\n context.editor.prependNodeTo(draggedNode, context.craftNode.value, slotName);\n } else {\n context.editor.appendNodeTo(draggedNode, context.craftNode.value, slotName);\n }\n\n return context.craftNode.value;\n};\n\nexport default <T extends object>(\n e: MouseEvent,\n el: HTMLElement,\n context: DragCraftNodeContext<T>\n) => {\n if (!context.editor.draggedNode) {\n return context.craftNode.value;\n }\n\n const nodeCopy = (() => {\n let copy: CraftNode;\n if (context.editor.draggedNode?.uuid) {\n copy = JSON.parse(JSON.stringify(context.editor.draggedNode));\n } else {\n copy = buildCraftNodeTree(\n JSON.parse(JSON.stringify(context.editor.draggedNode))\n );\n }\n return initializeSlotsFromResolver(copy, context.resolver);\n })();\n\n return craftNodeIsCanvas(context.craftNode.value)\n ? handleCanvasDrop(e, el, nodeCopy, context)\n : handleElementDrop(e, el, nodeCopy, context);\n};\n","import handleDragOver from \"./dragOver\"\nimport handleDrop from \"./drop\"\n\nexport default {\n handleDragOver,\n handleDrop\n};\n","import { Ref } from \"vue\";\nimport { CraftNode } from \"../../lib/craftNode\";\nimport CraftNodeResolver from \"../../lib/CraftNodeResolver\";\nimport drag from \"../../lib/dragCraftNode\";\nimport { useEditor } from \"../../store/editor\";\nimport { useIndicator } from \"../../store/indicator\";\nimport { debounce } from \"lodash-es\";\n\nexport default <T extends object>(\n craftNode: Ref<CraftNode>,\n nodeRef: Ref<any>,\n resolver: CraftNodeResolver<T>\n): {\n handleDragStart: (e: MouseEvent) => void;\n handleDragOver: (e: MouseEvent) => void;\n handleDrop: (e: MouseEvent) => void;\n handleDragEnd: () => void;\n} => {\n const editor = useEditor();\n const indicator = useIndicator();\n\n const handleDragStart = (e) => {\n if (!editor.enabled) {\n return;\n }\n editor.dragNode(craftNode.value);\n };\n\n const handleDragOver = debounce((event: MouseEvent) => {\n if (!editor.enabled) {\n return;\n }\n\n if (!nodeRef.value?.$el) {\n return;\n }\n drag.handleDragOver(event, nodeRef.value.$el, {\n editor,\n indicator,\n craftNode,\n resolver,\n });\n }, 8);\n\n const handleDrop = (event: MouseEvent) => {\n if (!editor.enabled) {\n return;\n }\n if (!nodeRef.value?.$el) {\n return;\n }\n\n drag.handleDrop<T>(event, nodeRef.value.$el, {\n editor: editor as any,\n indicator,\n craftNode,\n resolver,\n });\n };\n\n const handleDragEnd = () => {\n if (!editor.enabled) {\n return;\n }\n editor.dragNode(null);\n indicator.hide();\n };\n\n return {\n handleDragStart,\n handleDragOver,\n handleDrop,\n handleDragEnd,\n };\n};\n","<template>\n <component\n ref=\"nodeRef\"\n v-if=\"visible && craftNode && resolvedNode\"\n v-bind=\"{ ...defaultProps, ...craftNode.props }\"\n v-on=\"eventHandlers\"\n :data-node-name=\"nodeName\"\n :is=\"resolvedNode.componentName\"\n :style=\"{ '--node-color': nodeColor }\"\n :class=\"{\n 'v-craft-node-selected': isSelected,\n 'v-craft-node': editor?.enabled,\n 'v-craft-canvas': craftNodeIsCanvas(craftNode),\n 'v-craft-empty':\n !craftNode.slots ||\n Object.keys(craftNode.slots).length === 0 ||\n Object.values(craftNode.slots).every((slot) => slot.length === 0),\n 'v-craft-other-node-dragged':\n editor?.draggedNode &&\n !craftNodeIsAncestorOf(editor.draggedNode, craftNode),\n }\"\n :draggable=\"editor?.enabled && isDraggable\"\n @click.prevent.stop=\"craftNodeClick\"\n @dragend.prevent.stop=\"handleDragEnd\"\n @dragover.prevent.stop=\"handleDragOver\"\n @dragstart.stop=\"handleDragStart\"\n @drop.prevent.stop=\"handleDrop\"\n >\n <template v-for=\"slotName in availableSlots\" :key=\"slotName\" #[slotName]>\n <div\n v-if=\"\n craftNodeIsCanvas(craftNode) && craftNode.slots[slotName]?.length == 0\n \"\n class=\"v-craft-drop-text\"\n :data-slot-name=\"slotName\"\n @dragover.prevent.stop=\"handleDragOver\"\n @drop.prevent.stop=\"handleDrop\"\n >\n <span class=\"v-craft-drop-text-label\">Drop a component here</span>\n <span class=\"v-craft-slot-name\">{{ slotName }}</span>\n </div>\n <template v-if=\"shouldRenderSlots\">\n <template\n v-if=\"craftNodeData?.type && craftNodeData.slotName === slotName\"\n >\n <CraftNodeViewer\n v-for=\"item in computedDataChildren(\n craftNode.slots?.[slotName] || [],\n slotName,\n )\"\n :key=\"item.key\"\n :craftNode=\"item.craftNode\"\n />\n </template>\n <CraftNodeEditor\n v-for=\"childNode in craftNode.slots?.[slotName] || []\"\n :key=\"childNode.uuid\"\n :craftNode=\"childNode\"\n />\n </template>\n </template>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport { ComponentPublicInstance, computed, provide, ref, toRef } from \"vue\";\nimport {\n CraftNode,\n craftNodeIsAncestorOf,\n craftNodeIsCanvas,\n CraftNodeDatasource,\n} from \"../lib/craftNode\";\nimport useConnectCraftNodeToStore from \"./composable/useConnectCraftNodeToStore\";\nimport { useCraftNodeEvents } from \"./composable/useCraftNodeEvents\";\nimport { useCraftNodeWrapper } from \"./composable/useCraftNodeWrapper\";\nimport useDragCraftNode from \"./composable/useDragCraftNode\";\nimport { useResolveCraftNode } from \"./composable/useResolveCraftNode\";\n\ndefineOptions({\n name: \"CraftNodeEditor\",\n});\n\nconst props = defineProps<{\n craftNode: CraftNode;\n}>();\n\nconst craftNode = toRef(props, \"craftNode\");\nconst { editor, visible } = useCraftNodeWrapper(craftNode);\nconst { resolvedNode, defaultProps, resolver } = useResolveCraftNode(craftNode);\n\nif (resolver.value) provide(\"resolver\", resolver);\n\nconst nodeRef = ref<ComponentPublicInstance<HTMLElement> | null>(null);\n\nconst craftNodeData = computed(() => editor?.nodeDataMap[craftNode.value.uuid]);\n\nconst { isSelected, isDraggable, selectNode } = useConnectCraftNodeToStore(\n craftNode.value,\n nodeRef,\n);\n\nconst { handleDragStart, handleDragOver, handleDrop, handleDragEnd } =\n useDragCraftNode(craftNode, nodeRef, resolver.value);\n\nconst { eventHandlers } = useCraftNodeEvents(\n craftNode,\n editor as any,\n editor?.eventsContext || {},\n);\n\nconst nodeName = computed(() => {\n const resolved = resolver?.value?.resolve(craftNode.value.componentName);\n return craftNodeIsCanvas(craftNode.value)\n ? craftNode.value.props.componentName\n : resolved?.componentName || craftNode.value.componentName;\n});\n\nconst craftNodeClick = () => {\n selectNode();\n};\n\nconst generateColorFromUUID = (uuid: string): string => {\n let hash = 0;\n for (let i = 0; i < uuid.length; i++) {\n hash = uuid.charCodeAt(i) + ((hash << 5) - hash);\n }\n const h = hash % 360;\n const s = 70 + (hash % 30);\n const l = 45 + (hash % 30);\n return `hsla(${h}, ${s}%, ${l}%, 0.9)`;\n};\n\nconst nodeColor = computed(() => generateColorFromUUID(craftNode.value.uuid));\n\nconst availableSlots = computed(() => {\n const slots: string[] = [];\n const resolved = resolver?.value?.resolveNode?.(craftNode.value);\n const resolverSlots = resolved?.slots;\n if (resolverSlots && resolverSlots.length > 0) {\n slots.push(...resolverSlots);\n } else {\n slots.push(\"default\");\n }\n return slots;\n});\n\nconst shouldRenderSlots = computed(() => {\n if (craftNodeIsCanvas(craftNode.value)) return true;\n return Object.values(craftNode.value.slots || {}).some(\n (children) => children.length > 0,\n );\n});\n\nconst computedDataChildren = (children: CraftNode[], slotName: string) => {\n if (!craftNodeData.value) return [];\n if (craftNodeData.value.slotName && craftNodeData.value.slotName !== slotName)\n return [];\n return computeDataNodes(craftNodeData.value, children);\n};\n\ntype ComputedDataNode = { key: string; craftNode: CraftNode };\n\nconst computeDataNodes = (\n data: CraftNodeDatasource,\n children: CraftNode[],\n): ComputedDataNode[] => {\n if (data.type === \"single\") {\n return children.map((childNode) => ({\n key: `${childNode.uuid}-single`,\n craftNode: {\n ...childNode,\n props: {\n ...childNode.props,\n ...(data.item || {}),\n },\n },\n }));\n }\n\n if (data.type === \"list\") {\n if (!data.list) return [];\n\n return children.reduce((acc, childNode) => {\n return acc.concat(\n data.list!.map((item, index) => ({\n key: `${childNode.uuid}-data-${index}`,\n craftNode: {\n ...childNode,\n props: {\n ...childNode.props,\n ...(item || {}),\n },\n },\n })),\n );\n }, [] as ComputedDataNode[]);\n }\n\n return [];\n};\n</script>\n\n<style lang=\"scss\">\n@use \"../assets/craftNodeEditor\";\n\n.v-craft-node::before {\n content: attr(data-node-name);\n}\n</style>\n","<template>\n <component\n ref=\"nodeRef\"\n v-if=\"visible && resolver && resolvedNode\"\n :is=\"resolvedNode.componentName\"\n v-bind=\"nodeProps\"\n v-on=\"eventHandlers\"\n >\n <template v-for=\"slotName in availableSlots\" :key=\"slotName\" #[slotName]>\n <template v-if=\"shouldRenderSlots\">\n <template v-if=\"!data?.type\">\n <CraftNodeViewer\n v-for=\"childNode in slotNodes[slotName]\"\n :key=\"childNode.uuid\"\n :craftNode=\"childNode\"\n />\n </template>\n <template v-else>\n <CraftNodeViewer\n v-for=\"item in computedChildren(slotNodes[slotName], slotName)\"\n :key=\"item.key\"\n :craftNode=\"item.craftNode\"\n />\n </template>\n </template>\n </template>\n </component>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, onMounted, provide, ref, toRef } from \"vue\";\nimport { CraftNode, CraftNodeDatasource, craftNodeIsCanvas } from \"../lib/craftNode\";\nimport { useCraftNodeEvents } from \"./composable/useCraftNodeEvents\";\nimport { useResolveCraftNode } from \"./composable/useResolveCraftNode\";\nimport { useCraftNodeWrapper } from \"./composable/useCraftNodeWrapper\";\nimport CraftNodeViewer from \"./CraftNodeViewer.vue\";\n\ndefineOptions({\n name: \"CraftNodeViewer\",\n});\n\nconst props = defineProps<{\n craftNode: CraftNode;\n nodeDataMap?: Record<string, CraftNodeDatasource>;\n eventsContext?: Record<string, any>;\n}>();\n\nconst craftNode = toRef(props, \"craftNode\");\nconst { editor, visible } = useCraftNodeWrapper(craftNode);\nconst { resolvedNode, defaultProps, resolver } = useResolveCraftNode(craftNode);\n\nprovide(\"resolver\", resolver);\n\nconst nodeProps = computed(() => ({\n ...defaultProps.value,\n ...craftNode.value?.props,\n}));\n\nconst data = computed(() => {\n return props.nodeDataMap?.[craftNode.value.uuid] || editor?.nodeDataMap?.[craftNode.value.uuid];\n});\n\nconst slotNodes = computed(() => {\n return craftNode.value.slots || {};\n});\n\nconst isCanvas = computed(() => craftNodeIsCanvas(craftNode.value));\n\nconst availableSlots = computed(() => {\n const slots: string[] = [];\n const resolved = resolver?.value?.resolveNode?.(craftNode.value);\n const resolverSlots = resolved?.slots;\n if (resolverSlots && resolverSlots.length > 0) {\n slots.push(...resolverSlots);\n } else {\n slots.push('default');\n }\n return slots;\n});\n\nconst shouldRenderSlots = computed(() => {\n if (isCanvas.value) return true;\n return Object.values(slotNodes.value).some(children => children.length > 0);\n});\n\nconst computedChildren = (children: CraftNode[], slotName: string) => {\n if (!data.value) return [];\n if (data.value.slotName && data.value.slotName !== slotName) return [];\n return computeDataNodes(data.value, children);\n};\n\nconst nodeRef = ref<HTMLElement | null>(null);\n\nconst { eventHandlers } = useCraftNodeEvents(\n craftNode,\n editor as any,\n props.eventsContext || editor?.eventsContext || {}\n);\n\nonMounted(() => {\n if (nodeRef.value && craftNode.value && editor) {\n editor.setNodeRef(craftNode.value, nodeRef.value);\n }\n});\n\ntype ComputedDataNode = { key: string; craftNode: CraftNode };\n\nconst computeDataNodes = (\n data: CraftNodeDatasource,\n children: CraftNode[]\n): ComputedDataNode[] => {\n if (data.type === \"single\") {\n return children.map((childNode) => ({\n key: `${childNode.uuid}-single`,\n craftNode: {\n ...childNode,\n props: {\n ...childNode.props,\n ...(data.item || {}),\n },\n },\n }));\n }\n\n if (data.type === \"list\") {\n if (!data.list) return [];\n\n return children.reduce((acc, childNode) => {\n return acc.concat(\n //@ts-ignore\n data.list.map((item, index) => ({\n key: `${childNode.uuid}-data-${index}`,\n craftNode: {\n ...childNode,\n props: {\n ...childNode.props,\n ...(item || {}),\n },\n },\n }))\n );\n }, [] as ComputedDataNode[]);\n }\n\n return [];\n};\n</script>\n","<template>\n <CraftNodeViewer\n v-for=\"craftNode in nodes\"\n :key=\"craftNode.uuid\"\n :craftNode=\"craftNode\"\n :nodeDataMap=\"nodeDataMap\"\n :eventsContext=\"eventsContext\"\n />\n</template>\n\n<script lang=\"ts\" setup generic=\"T extends object\">\nimport { computed, provide } from \"vue\";\nimport { CraftNode, CraftNodeDatasource } from \"../lib/craftNode\";\nimport CraftNodeResolver, { CraftNodeResolverMap } from \"../lib/CraftNodeResolver\";\nimport CraftNodeViewer from \"./CraftNodeViewer.vue\";\n\ndefineOptions({\n name: \"CraftStaticRenderer\",\n});\n\nconst props = defineProps<{\n nodes: CraftNode[];\n resolverMap: CraftNodeResolverMap<T>;\n nodeDataMap?: Record<string, CraftNodeDatasource>;\n eventsContext?: Record<string, any>;\n}>();\n\nconst resolver = computed(() => new CraftNodeResolver(props.resolverMap));\nprovide(\"resolver\", resolver);\nprovide(\"nodeDataMap\", props.nodeDataMap || {});\nprovide(\"eventsContext\", props.eventsContext || {});\n</script>\n","export const defaultBlueprints = {\n metadata: {\n name: \"default\",\n },\n label: \"Default\",\n blueprints: {\n CraftComponentSimpleText: {\n label: \"Text\",\n componentName: \"CraftComponentSimpleText\",\n props: {\n content:\n \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean luctus arcu eu justo cursus faucibus. Phasellus non ex ac massa aliquet suscipit non eget odio. Aliquam eget laoreet ligula, at imperdiet tortor. Integer ut eros non velit rhoncus tincidunt. Mauris porta fringilla volutpat. Duis et nulla leo. Cras eu risus at nisl feugiat commodo vitae vel augue. Aenean at tempus velit. Duis eget convallis ipsum, eget suscipit felis. Quisque scelerisque euismod scelerisque.\",\n componentName: \"p\",\n },\n },\n },\n};\n","/**\n * @implements {IHooks}\n */\nclass Hooks {\n /**\n * @callback HookCallback\n * @this {*|Jsep} this\n * @param {Jsep} env\n * @returns: void\n */\n /**\n * Adds the given callback to the list of callbacks for the given hook.\n *\n * The callback will be invoked when the hook it is registered for is run.\n *\n * One callback function can be registered to multiple hooks and the same hook multiple times.\n *\n * @param {string|object} name The name of the hook, or an object of callbacks keyed by name\n * @param {HookCallback|boolean} callback The callback function which is given environment variables.\n * @param {?boolean} [first=false] Will add the hook to the top of the list (defaults to the bottom)\n * @public\n */\n add(name, callback, first) {\n if (typeof arguments[0] != 'string') {\n // Multiple hook callbacks, keyed by name\n for (let name in arguments[0]) {\n this.add(name, arguments[0][name], arguments[1]);\n }\n } else {\n (Array.isArray(name) ? name : [name]).forEach(function (name) {\n this[name] = this[name] || [];\n if (callback) {\n this[name][first ? 'unshift' : 'push'](callback);\n }\n }, this);\n }\n }\n\n /**\n * Runs a hook invoking all registered callbacks with the given environment variables.\n *\n * Callbacks will be invoked synchronously and in the order in which they were registered.\n *\n * @param {string} name The name of the hook.\n * @param {Object<string, any>} env The environment variables of the hook passed to all callbacks registered.\n * @public\n */\n run(name, env) {\n this[name] = this[name] || [];\n this[name].forEach(function (callback) {\n callback.call(env && env.context ? env.context : env, env);\n });\n }\n}\n\n/**\n * @implements {IPlugins}\n */\nclass Plugins {\n constructor(jsep) {\n this.jsep = jsep;\n this.registered = {};\n }\n\n /**\n * @callback PluginSetup\n * @this {Jsep} jsep\n * @returns: void\n */\n /**\n * Adds the given plugin(s) to the registry\n *\n * @param {object} plugins\n * @param {string} plugins.name The name of the plugin\n * @param {PluginSetup} plugins.init The init function\n * @public\n */\n register() {\n for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n plugins.forEach(plugin => {\n if (typeof plugin !== 'object' || !plugin.name || !plugin.init) {\n throw new Error('Invalid JSEP plugin format');\n }\n if (this.registered[plugin.name]) {\n // already registered. Ignore.\n return;\n }\n plugin.init(this.jsep);\n this.registered[plugin.name] = plugin;\n });\n }\n}\n\n// JavaScript Expression Parser (JSEP) 1.4.0\n\nclass Jsep {\n /**\n * @returns {string}\n */\n static get version() {\n // To be filled in by the template\n return '1.4.0';\n }\n\n /**\n * @returns {string}\n */\n static toString() {\n return 'JavaScript Expression Parser (JSEP) v' + Jsep.version;\n }\n // ==================== CONFIG ================================\n /**\n * @method addUnaryOp\n * @param {string} op_name The name of the unary op to add\n * @returns {Jsep}\n */\n static addUnaryOp(op_name) {\n Jsep.max_unop_len = Math.max(op_name.length, Jsep.max_unop_len);\n Jsep.unary_ops[op_name] = 1;\n return Jsep;\n }\n\n /**\n * @method jsep.addBinaryOp\n * @param {string} op_name The name of the binary op to add\n * @param {number} precedence The precedence of the binary op (can be a float). Higher number = higher precedence\n * @param {boolean} [isRightAssociative=false] whether operator is right-associative\n * @returns {Jsep}\n */\n static addBinaryOp(op_name, precedence, isRightAssociative) {\n Jsep.max_binop_len = Math.max(op_name.length, Jsep.max_binop_len);\n Jsep.binary_ops[op_name] = precedence;\n if (isRightAssociative) {\n Jsep.right_associative.add(op_name);\n } else {\n Jsep.right_associative.delete(op_name);\n }\n return Jsep;\n }\n\n /**\n * @method addIdentifierChar\n * @param {string} char The additional character to treat as a valid part of an identifier\n * @returns {Jsep}\n */\n static addIdentifierChar(char) {\n Jsep.additional_identifier_chars.add(char);\n return Jsep;\n }\n\n /**\n * @method addLiteral\n * @param {string} literal_name The name of the literal to add\n * @param {*} literal_value The value of the literal\n * @returns {Jsep}\n */\n static addLiteral(literal_name, literal_value) {\n Jsep.literals[literal_name] = literal_value;\n return Jsep;\n }\n\n /**\n * @method removeUnaryOp\n * @param {string} op_name The name of the unary op to remove\n * @returns {Jsep}\n */\n static removeUnaryOp(op_name) {\n delete Jsep.unary_ops[op_name];\n if (op_name.length === Jsep.max_unop_len) {\n Jsep.max_unop_len = Jsep.getMaxKeyLen(Jsep.unary_ops);\n }\n return Jsep;\n }\n\n /**\n * @method removeAllUnaryOps\n * @returns {Jsep}\n */\n static removeAllUnaryOps() {\n Jsep.unary_ops = {};\n Jsep.max_unop_len = 0;\n return Jsep;\n }\n\n /**\n * @method removeIdentifierChar\n * @param {string} char The additional character to stop treating as a valid part of an identifier\n * @returns {Jsep}\n */\n static removeIdentifierChar(char) {\n Jsep.additional_identifier_chars.delete(char);\n return Jsep;\n }\n\n /**\n * @method removeBinaryOp\n * @param {string} op_name The name of the binary op to remove\n * @returns {Jsep}\n */\n static removeBinaryOp(op_name) {\n delete Jsep.binary_ops[op_name];\n if (op_name.length === Jsep.max_binop_len) {\n Jsep.max_binop_len = Jsep.getMaxKeyLen(Jsep.binary_ops);\n }\n Jsep.right_associative.delete(op_name);\n return Jsep;\n }\n\n /**\n * @method removeAllBinaryOps\n * @returns {Jsep}\n */\n static removeAllBinaryOps() {\n Jsep.binary_ops = {};\n Jsep.max_binop_len = 0;\n return Jsep;\n }\n\n /**\n * @method removeLiteral\n * @param {string} literal_name The name of the literal to remove\n * @returns {Jsep}\n */\n static removeLiteral(literal_name) {\n delete Jsep.literals[literal_name];\n return Jsep;\n }\n\n /**\n * @method removeAllLiterals\n * @returns {Jsep}\n */\n static removeAllLiterals() {\n Jsep.literals = {};\n return Jsep;\n }\n // ==================== END CONFIG ============================\n\n /**\n * @returns {string}\n */\n get char() {\n return this.expr.charAt(this.index);\n }\n\n /**\n * @returns {number}\n */\n get code() {\n return this.expr.charCodeAt(this.index);\n }\n /**\n * @param {string} expr a string with the passed in express\n * @returns Jsep\n */\n constructor(expr) {\n // `index` stores the character number we are currently at\n // All of the gobbles below will modify `index` as we move along\n this.expr = expr;\n this.index = 0;\n }\n\n /**\n * static top-level parser\n * @returns {jsep.Expression}\n */\n static parse(expr) {\n return new Jsep(expr).parse();\n }\n\n /**\n * Get the longest key length of any object\n * @param {object} obj\n * @returns {number}\n */\n static getMaxKeyLen(obj) {\n return Math.max(0, ...Object.keys(obj).map(k => k.length));\n }\n\n /**\n * `ch` is a character code in the next three functions\n * @param {number} ch\n * @returns {boolean}\n */\n static isDecimalDigit(ch) {\n return ch >= 48 && ch <= 57; // 0...9\n }\n\n /**\n * Returns the precedence of a binary operator or `0` if it isn't a binary operator. Can be float.\n * @param {string} op_val\n * @returns {number}\n */\n static binaryPrecedence(op_val) {\n return Jsep.binary_ops[op_val] || 0;\n }\n\n /**\n * Looks for start of identifier\n * @param {number} ch\n * @returns {boolean}\n */\n static isIdentifierStart(ch) {\n return ch >= 65 && ch <= 90 ||\n // A...Z\n ch >= 97 && ch <= 122 ||\n // a...z\n ch >= 128 && !Jsep.binary_ops[String.fromCharCode(ch)] ||\n // any non-ASCII that is not an operator\n Jsep.additional_identifier_chars.has(String.fromCharCode(ch)); // additional characters\n }\n\n /**\n * @param {number} ch\n * @returns {boolean}\n */\n static isIdentifierPart(ch) {\n return Jsep.isIdentifierStart(ch) || Jsep.isDecimalDigit(ch);\n }\n\n /**\n * throw error at index of the expression\n * @param {string} message\n * @throws\n */\n throwError(message) {\n const error = new Error(message + ' at character ' + this.index);\n error.index = this.index;\n error.description = message;\n throw error;\n }\n\n /**\n * Run a given hook\n * @param {string} name\n * @param {jsep.Expression|false} [node]\n * @returns {?jsep.Expression}\n */\n runHook(name, node) {\n if (Jsep.hooks[name]) {\n const env = {\n context: this,\n node\n };\n Jsep.hooks.run(name, env);\n return env.node;\n }\n return node;\n }\n\n /**\n * Runs a given hook until one returns a node\n * @param {string} name\n * @returns {?jsep.Expression}\n */\n searchHook(name) {\n if (Jsep.hooks[name]) {\n const env = {\n context: this\n };\n Jsep.hooks[name].find(function (callback) {\n callback.call(env.context, env);\n return env.node;\n });\n return env.node;\n }\n }\n\n /**\n * Push `index` up to the next non-space character\n */\n gobbleSpaces() {\n let ch = this.code;\n // Whitespace\n while (ch === Jsep.SPACE_CODE || ch === Jsep.TAB_CODE || ch === Jsep.LF_CODE || ch === Jsep.CR_CODE) {\n ch = this.expr.charCodeAt(++this.index);\n }\n this.runHook('gobble-spaces');\n }\n\n /**\n * Top-level method to parse all expressions and returns compound or single node\n * @returns {jsep.Expression}\n */\n parse() {\n this.runHook('before-all');\n const nodes = this.gobbleExpressions();\n\n // If there's only one expression just try returning the expression\n const node = nodes.length === 1 ? nodes[0] : {\n type: Jsep.COMPOUND,\n body: nodes\n };\n return this.runHook('after-all', node);\n }\n\n /**\n * top-level parser (but can be reused within as well)\n * @param {number} [untilICode]\n * @returns {jsep.Expression[]}\n */\n gobbleExpressions(untilICode) {\n let nodes = [],\n ch_i,\n node;\n while (this.index < this.expr.length) {\n ch_i = this.code;\n\n // Expressions can be separated by semicolons, commas, or just inferred without any\n // separators\n if (ch_i === Jsep.SEMCOL_CODE || ch_i === Jsep.COMMA_CODE) {\n this.index++; // ignore separators\n } else {\n // Try to gobble each expression individually\n if (node = this.gobbleExpression()) {\n nodes.push(node);\n // If we weren't able to find a binary expression and are out of room, then\n // the expression passed in probably has too much\n } else if (this.index < this.expr.length) {\n if (ch_i === untilICode) {\n break;\n }\n this.throwError('Unexpected \"' + this.char + '\"');\n }\n }\n }\n return nodes;\n }\n\n /**\n * The main parsing function.\n * @returns {?jsep.Expression}\n */\n gobbleExpression() {\n const node = this.searchHook('gobble-expression') || this.gobbleBinaryExpression();\n this.gobbleSpaces();\n return this.runHook('after-expression', node);\n }\n\n /**\n * Search for the operation portion of the string (e.g. `+`, `===`)\n * Start by taking the longest possible binary operations (3 characters: `===`, `!==`, `>>>`)\n * and move down from 3 to 2 to 1 character until a matching binary operation is found\n * then, return that binary operation\n * @returns {string|boolean}\n */\n gobbleBinaryOp() {\n this.gobbleSpaces();\n let to_check = this.expr.substr(this.index, Jsep.max_binop_len);\n let tc_len = to_check.length;\n while (tc_len > 0) {\n // Don't accept a binary op when it is an identifier.\n // Binary ops that start with a identifier-valid character must be followed\n // by a non identifier-part valid character\n if (Jsep.binary_ops.hasOwnProperty(to_check) && (!Jsep.isIdentifierStart(this.code) || this.index + to_check.length < this.expr.length && !Jsep.isIdentifierPart(this.expr.charCodeAt(this.index + to_check.length)))) {\n this.index += tc_len;\n return to_check;\n }\n to_check = to_check.substr(0, --tc_len);\n }\n return false;\n }\n\n /**\n * This function is responsible for gobbling an individual expression,\n * e.g. `1`, `1+2`, `a+(b*2)-Math.sqrt(2)`\n * @returns {?jsep.BinaryExpression}\n */\n gobbleBinaryExpression() {\n let node, biop, prec, stack, biop_info, left, right, i, cur_biop;\n\n // First, try to get the leftmost thing\n // Then, check to see if there's a binary operator operating on that leftmost thing\n // Don't gobbleBinaryOp without a left-hand-side\n left = this.gobbleToken();\n if (!left) {\n return left;\n }\n biop = this.gobbleBinaryOp();\n\n // If there wasn't a binary operator, just return the leftmost node\n if (!biop) {\n return left;\n }\n\n // Otherwise, we need to start a stack to properly place the binary operations in their\n // precedence structure\n biop_info = {\n value: biop,\n prec: Jsep.binaryPrecedence(biop),\n right_a: Jsep.right_associative.has(biop)\n };\n right = this.gobbleToken();\n if (!right) {\n this.throwError(\"Expected expression after \" + biop);\n }\n stack = [left, biop_info, right];\n\n // Properly deal with precedence using [recursive descent](http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm)\n while (biop = this.gobbleBinaryOp()) {\n prec = Jsep.binaryPrecedence(biop);\n if (prec === 0) {\n this.index -= biop.length;\n break;\n }\n biop_info = {\n value: biop,\n prec,\n right_a: Jsep.right_associative.has(biop)\n };\n cur_biop = biop;\n\n // Reduce: make a binary expression from the three topmost entries.\n const comparePrev = prev => biop_info.right_a && prev.right_a ? prec > prev.prec : prec <= prev.prec;\n while (stack.length > 2 && comparePrev(stack[stack.length - 2])) {\n right = stack.pop();\n biop = stack.pop().value;\n left = stack.pop();\n node = {\n type: Jsep.BINARY_EXP,\n operator: biop,\n left,\n right\n };\n stack.push(node);\n }\n node = this.gobbleToken();\n if (!node) {\n this.throwError(\"Expected expression after \" + cur_biop);\n }\n stack.push(biop_info, node);\n }\n i = stack.length - 1;\n node = stack[i];\n while (i > 1) {\n node = {\n type: Jsep.BINARY_EXP,\n operator: stack[i - 1].value,\n left: stack[i - 2],\n right: node\n };\n i -= 2;\n }\n return node;\n }\n\n /**\n * An individual part of a binary expression:\n * e.g. `foo.bar(baz)`, `1`, `\"abc\"`, `(a % 2)` (because it's in parenthesis)\n * @returns {boolean|jsep.Expression}\n */\n gobbleToken() {\n let ch, to_check, tc_len, node;\n this.gobbleSpaces();\n node = this.searchHook('gobble-token');\n if (node) {\n return this.runHook('after-token', node);\n }\n ch = this.code;\n if (Jsep.isDecimalDigit(ch) || ch === Jsep.PERIOD_CODE) {\n // Char code 46 is a dot `.` which can start off a numeric literal\n return this.gobbleNumericLiteral();\n }\n if (ch === Jsep.SQUOTE_CODE || ch === Jsep.DQUOTE_CODE) {\n // Single or double quotes\n node = this.gobbleStringLiteral();\n } else if (ch === Jsep.OBRACK_CODE) {\n node = this.gobbleArray();\n } else {\n to_check = this.expr.substr(this.index, Jsep.max_unop_len);\n tc_len = to_check.length;\n while (tc_len > 0) {\n // Don't accept an unary op when it is an identifier.\n // Unary ops that start with a identifier-valid character must be followed\n // by a non identifier-part valid character\n if (Jsep.unary_ops.hasOwnProperty(to_check) && (!Jsep.isIdentifierStart(this.code) || this.index + to_check.length < this.expr.length && !Jsep.isIdentifierPart(this.expr.charCodeAt(this.index + to_check.length)))) {\n this.index += tc_len;\n const argument = this.gobbleToken();\n if (!argument) {\n this.throwError('missing unaryOp argument');\n }\n return this.runHook('after-token', {\n type: Jsep.UNARY_EXP,\n operator: to_check,\n argument,\n prefix: true\n });\n }\n to_check = to_check.substr(0, --tc_len);\n }\n if (Jsep.isIdentifierStart(ch)) {\n node = this.gobbleIdentifier();\n if (Jsep.literals.hasOwnProperty(node.name)) {\n node = {\n type: Jsep.LITERAL,\n value: Jsep.literals[node.name],\n raw: node.name\n };\n } else if (node.name === Jsep.this_str) {\n node = {\n type: Jsep.THIS_EXP\n };\n }\n } else if (ch === Jsep.OPAREN_CODE) {\n // open parenthesis\n node = this.gobbleGroup();\n }\n }\n if (!node) {\n return this.runHook('after-token', false);\n }\n node = this.gobbleTokenProperty(node);\n return this.runHook('after-token', node);\n }\n\n /**\n * Gobble properties of of identifiers/strings/arrays/groups.\n * e.g. `foo`, `bar.baz`, `foo['bar'].baz`\n * It also gobbles function calls:\n * e.g. `Math.acos(obj.angle)`\n * @param {jsep.Expression} node\n * @returns {jsep.Expression}\n */\n gobbleTokenProperty(node) {\n this.gobbleSpaces();\n let ch = this.code;\n while (ch === Jsep.PERIOD_CODE || ch === Jsep.OBRACK_CODE || ch === Jsep.OPAREN_CODE || ch === Jsep.QUMARK_CODE) {\n let optional;\n if (ch === Jsep.QUMARK_CODE) {\n if (this.expr.charCodeAt(this.index + 1) !== Jsep.PERIOD_CODE) {\n break;\n }\n optional = true;\n this.index += 2;\n this.gobbleSpaces();\n ch = this.code;\n }\n this.index++;\n if (ch === Jsep.OBRACK_CODE) {\n node = {\n type: Jsep.MEMBER_EXP,\n computed: true,\n object: node,\n property: this.gobbleExpression()\n };\n if (!node.property) {\n this.throwError('Unexpected \"' + this.char + '\"');\n }\n this.gobbleSpaces();\n ch = this.code;\n if (ch !== Jsep.CBRACK_CODE) {\n this.throwError('Unclosed [');\n }\n this.index++;\n } else if (ch === Jsep.OPAREN_CODE) {\n // A function call is being made; gobble all the arguments\n node = {\n type: Jsep.CALL_EXP,\n 'arguments': this.gobbleArguments(Jsep.CPAREN_CODE),\n callee: node\n };\n } else if (ch === Jsep.PERIOD_CODE || optional) {\n if (optional) {\n this.index--;\n }\n this.gobbleSpaces();\n node = {\n type: Jsep.MEMBER_EXP,\n computed: false,\n object: node,\n property: this.gobbleIdentifier()\n };\n }\n if (optional) {\n node.optional = true;\n } // else leave undefined for compatibility with esprima\n\n this.gobbleSpaces();\n ch = this.code;\n }\n return node;\n }\n\n /**\n * Parse simple numeric literals: `12`, `3.4`, `.5`. Do this by using a string to\n * keep track of everything in the numeric literal and then calling `parseFloat` on that string\n * @returns {jsep.Literal}\n */\n gobbleNumericLiteral() {\n let number = '',\n ch,\n chCode;\n while (Jsep.isDecimalDigit(this.code)) {\n number += this.expr.charAt(this.index++);\n }\n if (this.code === Jsep.PERIOD_CODE) {\n // can start with a decimal marker\n number += this.expr.charAt(this.index++);\n while (Jsep.isDecimalDigit(this.code)) {\n number += this.expr.charAt(this.index++);\n }\n }\n ch = this.char;\n if (ch === 'e' || ch === 'E') {\n // exponent marker\n number += this.expr.charAt(this.index++);\n ch = this.char;\n if (ch === '+' || ch === '-') {\n // exponent sign\n number += this.expr.charAt(this.index++);\n }\n while (Jsep.isDecimalDigit(this.code)) {\n // exponent itself\n number += this.expr.charAt(this.index++);\n }\n if (!Jsep.isDecimalDigit(this.expr.charCodeAt(this.index - 1))) {\n this.throwError('Expected exponent (' + number + this.char + ')');\n }\n }\n chCode = this.code;\n\n // Check to make sure this isn't a variable name that start with a number (123abc)\n if (Jsep.isIdentifierStart(chCode)) {\n this.throwError('Variable names cannot start with a number (' + number + this.char + ')');\n } else if (chCode === Jsep.PERIOD_CODE || number.length === 1 && number.charCodeAt(0) === Jsep.PERIOD_CODE) {\n this.throwError('Unexpected period');\n }\n return {\n type: Jsep.LITERAL,\n value: parseFloat(number),\n raw: number\n };\n }\n\n /**\n * Parses a string literal, staring with single or double quotes with basic support for escape codes\n * e.g. `\"hello world\"`, `'this is\\nJSEP'`\n * @returns {jsep.Literal}\n */\n gobbleStringLiteral() {\n let str = '';\n const startIndex = this.index;\n const quote = this.expr.charAt(this.index++);\n let closed = false;\n while (this.index < this.expr.length) {\n let ch = this.expr.charAt(this.index++);\n if (ch === quote) {\n closed = true;\n break;\n } else if (ch === '\\\\') {\n // Check for all of the common escape codes\n ch = this.expr.charAt(this.index++);\n switch (ch) {\n case 'n':\n str += '\\n';\n break;\n case 'r':\n str += '\\r';\n break;\n case 't':\n str += '\\t';\n break;\n case 'b':\n str += '\\b';\n break;\n case 'f':\n str += '\\f';\n break;\n case 'v':\n str += '\\x0B';\n break;\n default:\n str += ch;\n }\n } else {\n str += ch;\n }\n }\n if (!closed) {\n this.throwError('Unclosed quote after \"' + str + '\"');\n }\n return {\n type: Jsep.LITERAL,\n value: str,\n raw: this.expr.substring(startIndex, this.index)\n };\n }\n\n /**\n * Gobbles only identifiers\n * e.g.: `foo`, `_value`, `$x1`\n * Also, this function checks if that identifier is a literal:\n * (e.g. `true`, `false`, `null`) or `this`\n * @returns {jsep.Identifier}\n */\n gobbleIdentifier() {\n let ch = this.code,\n start = this.index;\n if (Jsep.isIdentifierStart(ch)) {\n this.index++;\n } else {\n this.throwError('Unexpected ' + this.char);\n }\n while (this.index < this.expr.length) {\n ch = this.code;\n if (Jsep.isIdentifierPart(ch)) {\n this.index++;\n } else {\n break;\n }\n }\n return {\n type: Jsep.IDENTIFIER,\n name: this.expr.slice(start, this.index)\n };\n }\n\n /**\n * Gobbles a list of arguments within the context of a function call\n * or array literal. This function also assumes that the opening character\n * `(` or `[` has already been gobbled, and gobbles expressions and commas\n * until the terminator character `)` or `]` is encountered.\n * e.g. `foo(bar, baz)`, `my_func()`, or `[bar, baz]`\n * @param {number} termination\n * @returns {jsep.Expression[]}\n */\n gobbleArguments(termination) {\n const args = [];\n let closed = false;\n let separator_count = 0;\n while (this.index < this.expr.length) {\n this.gobbleSpaces();\n let ch_i = this.code;\n if (ch_i === termination) {\n // done parsing\n closed = true;\n this.index++;\n if (termination === Jsep.CPAREN_CODE && separator_count && separator_count >= args.length) {\n this.throwError('Unexpected token ' + String.fromCharCode(termination));\n }\n break;\n } else if (ch_i === Jsep.COMMA_CODE) {\n // between expressions\n this.index++;\n separator_count++;\n if (separator_count !== args.length) {\n // missing argument\n if (termination === Jsep.CPAREN_CODE) {\n this.throwError('Unexpected token ,');\n } else if (termination === Jsep.CBRACK_CODE) {\n for (let arg = args.length; arg < separator_count; arg++) {\n args.push(null);\n }\n }\n }\n } else if (args.length !== separator_count && separator_count !== 0) {\n // NOTE: `&& separator_count !== 0` allows for either all commas, or all spaces as arguments\n this.throwError('Expected comma');\n } else {\n const node = this.gobbleExpression();\n if (!node || node.type === Jsep.COMPOUND) {\n this.throwError('Expected comma');\n }\n args.push(node);\n }\n }\n if (!closed) {\n this.throwError('Expected ' + String.fromCharCode(termination));\n }\n return args;\n }\n\n /**\n * Responsible for parsing a group of things within parentheses `()`\n * that have no identifier in front (so not a function call)\n * This function assumes that it needs to gobble the opening parenthesis\n * and then tries to gobble everything within that parenthesis, assuming\n * that the next thing it should see is the close parenthesis. If not,\n * then the expression probably doesn't have a `)`\n * @returns {boolean|jsep.Expression}\n */\n gobbleGroup() {\n this.index++;\n let nodes = this.gobbleExpressions(Jsep.CPAREN_CODE);\n if (this.code === Jsep.CPAREN_CODE) {\n this.index++;\n if (nodes.length === 1) {\n return nodes[0];\n } else if (!nodes.length) {\n return false;\n } else {\n return {\n type: Jsep.SEQUENCE_EXP,\n expressions: nodes\n };\n }\n } else {\n this.throwError('Unclosed (');\n }\n }\n\n /**\n * Responsible for parsing Array literals `[1, 2, 3]`\n * This function assumes that it needs to gobble the opening bracket\n * and then tries to gobble the expressions as arguments.\n * @returns {jsep.ArrayExpression}\n */\n gobbleArray() {\n this.index++;\n return {\n type: Jsep.ARRAY_EXP,\n elements: this.gobbleArguments(Jsep.CBRACK_CODE)\n };\n }\n}\n\n// Static fields:\nconst hooks = new Hooks();\nObject.assign(Jsep, {\n hooks,\n plugins: new Plugins(Jsep),\n // Node Types\n // ----------\n // This is the full set of types that any JSEP node can be.\n // Store them here to save space when minified\n COMPOUND: 'Compound',\n SEQUENCE_EXP: 'SequenceExpression',\n IDENTIFIER: 'Identifier',\n MEMBER_EXP: 'MemberExpression',\n LITERAL: 'Literal',\n THIS_EXP: 'ThisExpression',\n CALL_EXP: 'CallExpression',\n UNARY_EXP: 'UnaryExpression',\n BINARY_EXP: 'BinaryExpression',\n ARRAY_EXP: 'ArrayExpression',\n TAB_CODE: 9,\n LF_CODE: 10,\n CR_CODE: 13,\n SPACE_CODE: 32,\n PERIOD_CODE: 46,\n // '.'\n COMMA_CODE: 44,\n // ','\n SQUOTE_CODE: 39,\n // single quote\n DQUOTE_CODE: 34,\n // double quotes\n OPAREN_CODE: 40,\n // (\n CPAREN_CODE: 41,\n // )\n OBRACK_CODE: 91,\n // [\n CBRACK_CODE: 93,\n // ]\n QUMARK_CODE: 63,\n // ?\n SEMCOL_CODE: 59,\n // ;\n COLON_CODE: 58,\n // :\n\n // Operations\n // ----------\n // Use a quickly-accessible map to store all of the unary operators\n // Values are set to `1` (it really doesn't matter)\n unary_ops: {\n '-': 1,\n '!': 1,\n '~': 1,\n '+': 1\n },\n // Also use a map for the binary operations but set their values to their\n // binary precedence for quick reference (higher number = higher precedence)\n // see [Order of operations](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence)\n binary_ops: {\n '||': 1,\n '??': 1,\n '&&': 2,\n '|': 3,\n '^': 4,\n '&': 5,\n '==': 6,\n '!=': 6,\n '===': 6,\n '!==': 6,\n '<': 7,\n '>': 7,\n '<=': 7,\n '>=': 7,\n '<<': 8,\n '>>': 8,\n '>>>': 8,\n '+': 9,\n '-': 9,\n '*': 10,\n '/': 10,\n '%': 10,\n '**': 11\n },\n // sets specific binary_ops as right-associative\n right_associative: new Set(['**']),\n // Additional valid identifier chars, apart from a-z, A-Z and 0-9 (except on the starting char)\n additional_identifier_chars: new Set(['$', '_']),\n // Literals\n // ----------\n // Store the values to return for the various literals we may encounter\n literals: {\n 'true': true,\n 'false': false,\n 'null': null\n },\n // Except for `this`, which is special. This could be changed to something like `'self'` as well\n this_str: 'this'\n});\nJsep.max_unop_len = Jsep.getMaxKeyLen(Jsep.unary_ops);\nJsep.max_binop_len = Jsep.getMaxKeyLen(Jsep.binary_ops);\n\n// Backward Compatibility:\nconst jsep = expr => new Jsep(expr).parse();\nconst stdClassProps = Object.getOwnPropertyNames(class Test {});\nObject.getOwnPropertyNames(Jsep).filter(prop => !stdClassProps.includes(prop) && jsep[prop] === undefined).forEach(m => {\n jsep[m] = Jsep[m];\n});\njsep.Jsep = Jsep; // allows for const { Jsep } = require('jsep');\n\nconst CONDITIONAL_EXP = 'ConditionalExpression';\nvar ternary = {\n name: 'ternary',\n init(jsep) {\n // Ternary expression: test ? consequent : alternate\n jsep.hooks.add('after-expression', function gobbleTernary(env) {\n if (env.node && this.code === jsep.QUMARK_CODE) {\n this.index++;\n const test = env.node;\n const consequent = this.gobbleExpression();\n if (!consequent) {\n this.throwError('Expected expression');\n }\n this.gobbleSpaces();\n if (this.code === jsep.COLON_CODE) {\n this.index++;\n const alternate = this.gobbleExpression();\n if (!alternate) {\n this.throwError('Expected expression');\n }\n env.node = {\n type: CONDITIONAL_EXP,\n test,\n consequent,\n alternate\n };\n\n // check for operators of higher priority than ternary (i.e. assignment)\n // jsep sets || at 1, and assignment at 0.9, and conditional should be between them\n if (test.operator && jsep.binary_ops[test.operator] <= 0.9) {\n let newTest = test;\n while (newTest.right.operator && jsep.binary_ops[newTest.right.operator] <= 0.9) {\n newTest = newTest.right;\n }\n env.node.test = newTest.right;\n newTest.right = env.node;\n env.node = test;\n }\n } else {\n this.throwError('Expected :');\n }\n }\n });\n }\n};\n\n// Add default plugins:\n\njsep.plugins.register(ternary);\n\nconst FSLASH_CODE = 47; // '/'\nconst BSLASH_CODE = 92; // '\\\\'\n\nvar index = {\n name: 'regex',\n init(jsep) {\n // Regex literal: /abc123/ig\n jsep.hooks.add('gobble-token', function gobbleRegexLiteral(env) {\n if (this.code === FSLASH_CODE) {\n const patternIndex = ++this.index;\n let inCharSet = false;\n while (this.index < this.expr.length) {\n if (this.code === FSLASH_CODE && !inCharSet) {\n const pattern = this.expr.slice(patternIndex, this.index);\n let flags = '';\n while (++this.index < this.expr.length) {\n const code = this.code;\n if (code >= 97 && code <= 122 // a...z\n || code >= 65 && code <= 90 // A...Z\n || code >= 48 && code <= 57) {\n // 0-9\n flags += this.char;\n } else {\n break;\n }\n }\n let value;\n try {\n value = new RegExp(pattern, flags);\n } catch (e) {\n this.throwError(e.message);\n }\n env.node = {\n type: jsep.LITERAL,\n value,\n raw: this.expr.slice(patternIndex - 1, this.index)\n };\n\n // allow . [] and () after regex: /regex/.test(a)\n env.node = this.gobbleTokenProperty(env.node);\n return env.node;\n }\n if (this.code === jsep.OBRACK_CODE) {\n inCharSet = true;\n } else if (inCharSet && this.code === jsep.CBRACK_CODE) {\n inCharSet = false;\n }\n this.index += this.code === BSLASH_CODE ? 2 : 1;\n }\n this.throwError('Unclosed Regex');\n }\n });\n }\n};\n\nconst PLUS_CODE = 43; // +\nconst MINUS_CODE = 45; // -\n\nconst plugin = {\n name: 'assignment',\n assignmentOperators: new Set(['=', '*=', '**=', '/=', '%=', '+=', '-=', '<<=', '>>=', '>>>=', '&=', '^=', '|=', '||=', '&&=', '??=']),\n updateOperators: [PLUS_CODE, MINUS_CODE],\n assignmentPrecedence: 0.9,\n init(jsep) {\n const updateNodeTypes = [jsep.IDENTIFIER, jsep.MEMBER_EXP];\n plugin.assignmentOperators.forEach(op => jsep.addBinaryOp(op, plugin.assignmentPrecedence, true));\n jsep.hooks.add('gobble-token', function gobbleUpdatePrefix(env) {\n const code = this.code;\n if (plugin.updateOperators.some(c => c === code && c === this.expr.charCodeAt(this.index + 1))) {\n this.index += 2;\n env.node = {\n type: 'UpdateExpression',\n operator: code === PLUS_CODE ? '++' : '--',\n argument: this.gobbleTokenProperty(this.gobbleIdentifier()),\n prefix: true\n };\n if (!env.node.argument || !updateNodeTypes.includes(env.node.argument.type)) {\n this.throwError(`Unexpected ${env.node.operator}`);\n }\n }\n });\n jsep.hooks.add('after-token', function gobbleUpdatePostfix(env) {\n if (env.node) {\n const code = this.code;\n if (plugin.updateOperators.some(c => c === code && c === this.expr.charCodeAt(this.index + 1))) {\n if (!updateNodeTypes.includes(env.node.type)) {\n this.throwError(`Unexpected ${env.node.operator}`);\n }\n this.index += 2;\n env.node = {\n type: 'UpdateExpression',\n operator: code === PLUS_CODE ? '++' : '--',\n argument: env.node,\n prefix: false\n };\n }\n }\n });\n jsep.hooks.add('after-expression', function gobbleAssignment(env) {\n if (env.node) {\n // Note: Binaries can be chained in a single expression to respect\n // operator precedence (i.e. a = b = 1 + 2 + 3)\n // Update all binary assignment nodes in the tree\n updateBinariesToAssignments(env.node);\n }\n });\n function updateBinariesToAssignments(node) {\n if (plugin.assignmentOperators.has(node.operator)) {\n node.type = 'AssignmentExpression';\n updateBinariesToAssignments(node.left);\n updateBinariesToAssignments(node.right);\n } else if (!node.operator) {\n Object.values(node).forEach(val => {\n if (val && typeof val === 'object') {\n updateBinariesToAssignments(val);\n }\n });\n }\n }\n }\n};\n\n/* eslint-disable no-bitwise -- Convenient */\n\n// register plugins\njsep.plugins.register(index, plugin);\njsep.addUnaryOp('typeof');\njsep.addUnaryOp('void');\njsep.addLiteral('null', null);\njsep.addLiteral('undefined', undefined);\nconst BLOCKED_PROTO_PROPERTIES = new Set(['constructor', '__proto__', '__defineGetter__', '__defineSetter__', '__lookupGetter__', '__lookupSetter__']);\nconst SafeEval = {\n /**\n * @param {jsep.Expression} ast\n * @param {Record<string, any>} subs\n */\n evalAst(ast, subs) {\n switch (ast.type) {\n case 'BinaryExpression':\n case 'LogicalExpression':\n return SafeEval.evalBinaryExpression(ast, subs);\n case 'Compound':\n return SafeEval.evalCompound(ast, subs);\n case 'ConditionalExpression':\n return SafeEval.evalConditionalExpression(ast, subs);\n case 'Identifier':\n return SafeEval.evalIdentifier(ast, subs);\n case 'Literal':\n return SafeEval.evalLiteral(ast, subs);\n case 'MemberExpression':\n return SafeEval.evalMemberExpression(ast, subs);\n case 'UnaryExpression':\n return SafeEval.evalUnaryExpression(ast, subs);\n case 'ArrayExpression':\n return SafeEval.evalArrayExpression(ast, subs);\n case 'CallExpression':\n return SafeEval.evalCallExpression(ast, subs);\n case 'AssignmentExpression':\n return SafeEval.evalAssignmentExpression(ast, subs);\n default:\n throw SyntaxError('Unexpected expression', ast);\n }\n },\n evalBinaryExpression(ast, subs) {\n const result = {\n '||': (a, b) => a || b(),\n '&&': (a, b) => a && b(),\n '|': (a, b) => a | b(),\n '^': (a, b) => a ^ b(),\n '&': (a, b) => a & b(),\n // eslint-disable-next-line eqeqeq -- API\n '==': (a, b) => a == b(),\n // eslint-disable-next-line eqeqeq -- API\n '!=': (a, b) => a != b(),\n '===': (a, b) => a === b(),\n '!==': (a, b) => a !== b(),\n '<': (a, b) => a < b(),\n '>': (a, b) => a > b(),\n '<=': (a, b) => a <= b(),\n '>=': (a, b) => a >= b(),\n '<<': (a, b) => a << b(),\n '>>': (a, b) => a >> b(),\n '>>>': (a, b) => a >>> b(),\n '+': (a, b) => a + b(),\n '-': (a, b) => a - b(),\n '*': (a, b) => a * b(),\n '/': (a, b) => a / b(),\n '%': (a, b) => a % b()\n }[ast.operator](SafeEval.evalAst(ast.left, subs), () => SafeEval.evalAst(ast.right, subs));\n return result;\n },\n evalCompound(ast, subs) {\n let last;\n for (let i = 0; i < ast.body.length; i++) {\n if (ast.body[i].type === 'Identifier' && ['var', 'let', 'const'].includes(ast.body[i].name) && ast.body[i + 1] && ast.body[i + 1].type === 'AssignmentExpression') {\n // var x=2; is detected as\n // [{Identifier var}, {AssignmentExpression x=2}]\n // eslint-disable-next-line @stylistic/max-len -- Long\n // eslint-disable-next-line sonarjs/updated-loop-counter -- Convenient\n i += 1;\n }\n const expr = ast.body[i];\n last = SafeEval.evalAst(expr, subs);\n }\n return last;\n },\n evalConditionalExpression(ast, subs) {\n if (SafeEval.evalAst(ast.test, subs)) {\n return SafeEval.evalAst(ast.consequent, subs);\n }\n return SafeEval.evalAst(ast.alternate, subs);\n },\n evalIdentifier(ast, subs) {\n if (Object.hasOwn(subs, ast.name)) {\n return subs[ast.name];\n }\n throw ReferenceError(`${ast.name} is not defined`);\n },\n evalLiteral(ast) {\n return ast.value;\n },\n evalMemberExpression(ast, subs) {\n const prop = String(\n // NOTE: `String(value)` throws error when\n // value has overwritten the toString method to return non-string\n // i.e. `value = {toString: () => []}`\n ast.computed ? SafeEval.evalAst(ast.property) // `object[property]`\n : ast.property.name // `object.property` property is Identifier\n );\n const obj = SafeEval.evalAst(ast.object, subs);\n if (obj === undefined || obj === null) {\n throw TypeError(`Cannot read properties of ${obj} (reading '${prop}')`);\n }\n if (!Object.hasOwn(obj, prop) && BLOCKED_PROTO_PROPERTIES.has(prop)) {\n throw TypeError(`Cannot read properties of ${obj} (reading '${prop}')`);\n }\n const result = obj[prop];\n if (typeof result === 'function') {\n return result.bind(obj); // arrow functions aren't affected by bind.\n }\n return result;\n },\n evalUnaryExpression(ast, subs) {\n const result = {\n '-': a => -SafeEval.evalAst(a, subs),\n '!': a => !SafeEval.evalAst(a, subs),\n '~': a => ~SafeEval.evalAst(a, subs),\n // eslint-disable-next-line no-implicit-coercion -- API\n '+': a => +SafeEval.evalAst(a, subs),\n typeof: a => typeof SafeEval.evalAst(a, subs),\n // eslint-disable-next-line no-void, sonarjs/void-use -- feature\n void: a => void SafeEval.evalAst(a, subs)\n }[ast.operator](ast.argument);\n return result;\n },\n evalArrayExpression(ast, subs) {\n return ast.elements.map(el => SafeEval.evalAst(el, subs));\n },\n evalCallExpression(ast, subs) {\n const args = ast.arguments.map(arg => SafeEval.evalAst(arg, subs));\n const func = SafeEval.evalAst(ast.callee, subs);\n /* c8 ignore start */\n if (func === Function) {\n // unreachable since BLOCKED_PROTO_PROPERTIES includes 'constructor'\n throw new Error('Function constructor is disabled');\n }\n /* c8 ignore end */\n return func(...args);\n },\n evalAssignmentExpression(ast, subs) {\n if (ast.left.type !== 'Identifier') {\n throw SyntaxError('Invalid left-hand side in assignment');\n }\n const id = ast.left.name;\n const value = SafeEval.evalAst(ast.right, subs);\n subs[id] = value;\n return subs[id];\n }\n};\n\n/**\n * A replacement for NodeJS' VM.Script which is also {@link https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP | Content Security Policy} friendly.\n */\nclass SafeScript {\n /**\n * @param {string} expr Expression to evaluate\n */\n constructor(expr) {\n this.code = expr;\n this.ast = jsep(this.code);\n }\n\n /**\n * @param {object} context Object whose items will be added\n * to evaluation\n * @returns {EvaluatedResult} Result of evaluated code\n */\n runInNewContext(context) {\n // `Object.create(null)` creates a prototypeless object\n const keyMap = Object.assign(Object.create(null), context);\n return SafeEval.evalAst(this.ast, keyMap);\n }\n}\n\n/* eslint-disable camelcase -- Convenient for escaping */\n\n\n/**\n * @typedef {null|boolean|number|string|object|GenericArray} JSONObject\n */\n\n/**\n * @typedef {any} AnyItem\n */\n\n/**\n * @typedef {any} AnyResult\n */\n\n/**\n * Copies array and then pushes item into it.\n * @param {GenericArray} arr Array to copy and into which to push\n * @param {AnyItem} item Array item to add (to end)\n * @returns {GenericArray} Copy of the original array\n */\nfunction push(arr, item) {\n arr = arr.slice();\n arr.push(item);\n return arr;\n}\n/**\n * Copies array and then unshifts item into it.\n * @param {AnyItem} item Array item to add (to beginning)\n * @param {GenericArray} arr Array to copy and into which to unshift\n * @returns {GenericArray} Copy of the original array\n */\nfunction unshift(item, arr) {\n arr = arr.slice();\n arr.unshift(item);\n return arr;\n}\n\n/**\n * Caught when JSONPath is used without `new` but rethrown if with `new`\n * @extends Error\n */\nclass NewError extends Error {\n /**\n * @param {AnyResult} value The evaluated scalar value\n */\n constructor(value) {\n super('JSONPath should not be called with \"new\" (it prevents return ' + 'of (unwrapped) scalar values)');\n this.avoidNew = true;\n this.value = value;\n this.name = 'NewError';\n }\n}\n\n/**\n* @typedef {object} ReturnObject\n* @property {string} path\n* @property {JSONObject} value\n* @property {object|GenericArray} parent\n* @property {string} parentProperty\n*/\n\n/**\n* @callback JSONPathCallback\n* @param {string|object} preferredOutput\n* @param {\"value\"|\"property\"} type\n* @param {ReturnObject} fullRetObj\n* @returns {void}\n*/\n\n/**\n* @callback OtherTypeCallback\n* @param {JSONObject} val\n* @param {string} path\n* @param {object|GenericArray} parent\n* @param {string} parentPropName\n* @returns {boolean}\n*/\n\n/**\n * @typedef {any} ContextItem\n */\n\n/**\n * @typedef {any} EvaluatedResult\n */\n\n/**\n* @callback EvalCallback\n* @param {string} code\n* @param {ContextItem} context\n* @returns {EvaluatedResult}\n*/\n\n/**\n * @typedef {typeof SafeScript} EvalClass\n */\n\n/**\n * @typedef {object} JSONPathOptions\n * @property {JSON} json\n * @property {string|string[]} path\n * @property {\"value\"|\"path\"|\"pointer\"|\"parent\"|\"parentProperty\"|\n * \"all\"} [resultType=\"value\"]\n * @property {boolean} [flatten=false]\n * @property {boolean} [wrap=true]\n * @property {object} [sandbox={}]\n * @property {EvalCallback|EvalClass|'safe'|'native'|\n * boolean} [eval = 'safe']\n * @property {object|GenericArray|null} [parent=null]\n * @property {string|null} [parentProperty=null]\n * @property {JSONPathCallback} [callback]\n * @property {OtherTypeCallback} [otherTypeCallback] Defaults to\n * function which throws on encountering `@other`\n * @property {boolean} [autostart=true]\n */\n\n/**\n * @param {string|JSONPathOptions} opts If a string, will be treated as `expr`\n * @param {string} [expr] JSON path to evaluate\n * @param {JSON} [obj] JSON object to evaluate against\n * @param {JSONPathCallback} [callback] Passed 3 arguments: 1) desired payload\n * per `resultType`, 2) `\"value\"|\"property\"`, 3) Full returned object with\n * all payloads\n * @param {OtherTypeCallback} [otherTypeCallback] If `@other()` is at the end\n * of one's query, this will be invoked with the value of the item, its\n * path, its parent, and its parent's property name, and it should return\n * a boolean indicating whether the supplied value belongs to the \"other\"\n * type or not (or it may handle transformations and return `false`).\n * @returns {JSONPath}\n * @class\n */\nfunction JSONPath(opts, expr, obj, callback, otherTypeCallback) {\n // eslint-disable-next-line no-restricted-syntax -- Allow for pseudo-class\n if (!(this instanceof JSONPath)) {\n try {\n return new JSONPath(opts, expr, obj, callback, otherTypeCallback);\n } catch (e) {\n if (!e.avoidNew) {\n throw e;\n }\n return e.value;\n }\n }\n if (typeof opts === 'string') {\n otherTypeCallback = callback;\n callback = obj;\n obj = expr;\n expr = opts;\n opts = null;\n }\n const optObj = opts && typeof opts === 'object';\n opts = opts || {};\n this.json = opts.json || obj;\n this.path = opts.path || expr;\n this.resultType = opts.resultType || 'value';\n this.flatten = opts.flatten || false;\n this.wrap = Object.hasOwn(opts, 'wrap') ? opts.wrap : true;\n this.sandbox = opts.sandbox || {};\n this.eval = opts.eval === undefined ? 'safe' : opts.eval;\n this.ignoreEvalErrors = typeof opts.ignoreEvalErrors === 'undefined' ? false : opts.ignoreEvalErrors;\n this.parent = opts.parent || null;\n this.parentProperty = opts.parentProperty || null;\n this.callback = opts.callback || callback || null;\n this.otherTypeCallback = opts.otherTypeCallback || otherTypeCallback || function () {\n throw new TypeError('You must supply an otherTypeCallback callback option ' + 'with the @other() operator.');\n };\n if (opts.autostart !== false) {\n const args = {\n path: optObj ? opts.path : expr\n };\n if (!optObj) {\n args.json = obj;\n } else if ('json' in opts) {\n args.json = opts.json;\n }\n const ret = this.evaluate(args);\n if (!ret || typeof ret !== 'object') {\n throw new NewError(ret);\n }\n return ret;\n }\n}\n\n// PUBLIC METHODS\nJSONPath.prototype.evaluate = function (expr, json, callback, otherTypeCallback) {\n let currParent = this.parent,\n currParentProperty = this.parentProperty;\n let {\n flatten,\n wrap\n } = this;\n this.currResultType = this.resultType;\n this.currEval = this.eval;\n this.currSandbox = this.sandbox;\n callback = callback || this.callback;\n this.currOtherTypeCallback = otherTypeCallback || this.otherTypeCallback;\n json = json || this.json;\n expr = expr || this.path;\n if (expr && typeof expr === 'object' && !Array.isArray(expr)) {\n if (!expr.path && expr.path !== '') {\n throw new TypeError('You must supply a \"path\" property when providing an object ' + 'argument to JSONPath.evaluate().');\n }\n if (!Object.hasOwn(expr, 'json')) {\n throw new TypeError('You must supply a \"json\" property when providing an object ' + 'argument to JSONPath.evaluate().');\n }\n ({\n json\n } = expr);\n flatten = Object.hasOwn(expr, 'flatten') ? expr.flatten : flatten;\n this.currResultType = Object.hasOwn(expr, 'resultType') ? expr.resultType : this.currResultType;\n this.currSandbox = Object.hasOwn(expr, 'sandbox') ? expr.sandbox : this.currSandbox;\n wrap = Object.hasOwn(expr, 'wrap') ? expr.wrap : wrap;\n this.currEval = Object.hasOwn(expr, 'eval') ? expr.eval : this.currEval;\n callback = Object.hasOwn(expr, 'callback') ? expr.callback : callback;\n this.currOtherTypeCallback = Object.hasOwn(expr, 'otherTypeCallback') ? expr.otherTypeCallback : this.currOtherTypeCallback;\n currParent = Object.hasOwn(expr, 'parent') ? expr.parent : currParent;\n currParentProperty = Object.hasOwn(expr, 'parentProperty') ? expr.parentProperty : currParentProperty;\n expr = expr.path;\n }\n currParent = currParent || null;\n currParentProperty = currParentProperty || null;\n if (Array.isArray(expr)) {\n expr = JSONPath.toPathString(expr);\n }\n if (!expr && expr !== '' || !json) {\n return undefined;\n }\n const exprList = JSONPath.toPathArray(expr);\n if (exprList[0] === '$' && exprList.length > 1) {\n exprList.shift();\n }\n this._hasParentSelector = null;\n const result = this._trace(exprList, json, ['$'], currParent, currParentProperty, callback).filter(function (ea) {\n return ea && !ea.isParentSelector;\n });\n if (!result.length) {\n return wrap ? [] : undefined;\n }\n if (!wrap && result.length === 1 && !result[0].hasArrExpr) {\n return this._getPreferredOutput(result[0]);\n }\n return result.reduce((rslt, ea) => {\n const valOrPath = this._getPreferredOutput(ea);\n if (flatten && Array.isArray(valOrPath)) {\n rslt = rslt.concat(valOrPath);\n } else {\n rslt.push(valOrPath);\n }\n return rslt;\n }, []);\n};\n\n// PRIVATE METHODS\n\nJSONPath.prototype._getPreferredOutput = function (ea) {\n const resultType = this.currResultType;\n switch (resultType) {\n case 'all':\n {\n const path = Array.isArray(ea.path) ? ea.path : JSONPath.toPathArray(ea.path);\n ea.pointer = JSONPath.toPointer(path);\n ea.path = typeof ea.path === 'string' ? ea.path : JSONPath.toPathString(ea.path);\n return ea;\n }\n case 'value':\n case 'parent':\n case 'parentProperty':\n return ea[resultType];\n case 'path':\n return JSONPath.toPathString(ea[resultType]);\n case 'pointer':\n return JSONPath.toPointer(ea.path);\n default:\n throw new TypeError('Unknown result type');\n }\n};\nJSONPath.prototype._handleCallback = function (fullRetObj, callback, type) {\n if (callback) {\n const preferredOutput = this._getPreferredOutput(fullRetObj);\n fullRetObj.path = typeof fullRetObj.path === 'string' ? fullRetObj.path : JSONPath.toPathString(fullRetObj.path);\n // eslint-disable-next-line n/callback-return -- No need to return\n callback(preferredOutput, type, fullRetObj);\n }\n};\n\n/**\n *\n * @param {string} expr\n * @param {JSONObject} val\n * @param {string} path\n * @param {object|GenericArray} parent\n * @param {string} parentPropName\n * @param {JSONPathCallback} callback\n * @param {boolean} hasArrExpr\n * @param {boolean} literalPriority\n * @returns {ReturnObject|ReturnObject[]}\n */\nJSONPath.prototype._trace = function (expr, val, path, parent, parentPropName, callback, hasArrExpr, literalPriority) {\n // No expr to follow? return path and value as the result of\n // this trace branch\n let retObj;\n if (!expr.length) {\n retObj = {\n path,\n value: val,\n parent,\n parentProperty: parentPropName,\n hasArrExpr\n };\n this._handleCallback(retObj, callback, 'value');\n return retObj;\n }\n const loc = expr[0],\n x = expr.slice(1);\n\n // We need to gather the return value of recursive trace calls in order to\n // do the parent sel computation.\n const ret = [];\n /**\n *\n * @param {ReturnObject|ReturnObject[]} elems\n * @returns {void}\n */\n function addRet(elems) {\n if (Array.isArray(elems)) {\n // This was causing excessive stack size in Node (with or\n // without Babel) against our performance test:\n // `ret.push(...elems);`\n elems.forEach(t => {\n ret.push(t);\n });\n } else {\n ret.push(elems);\n }\n }\n if ((typeof loc !== 'string' || literalPriority) && val && Object.hasOwn(val, loc)) {\n // simple case--directly follow property\n addRet(this._trace(x, val[loc], push(path, loc), val, loc, callback, hasArrExpr));\n // eslint-disable-next-line unicorn/prefer-switch -- Part of larger `if`\n } else if (loc === '*') {\n // all child properties\n this._walk(val, m => {\n addRet(this._trace(x, val[m], push(path, m), val, m, callback, true, true));\n });\n } else if (loc === '..') {\n // all descendent parent properties\n // Check remaining expression with val's immediate children\n addRet(this._trace(x, val, path, parent, parentPropName, callback, hasArrExpr));\n this._walk(val, m => {\n // We don't join m and x here because we only want parents,\n // not scalar values\n if (typeof val[m] === 'object') {\n // Keep going with recursive descent on val's\n // object children\n addRet(this._trace(expr.slice(), val[m], push(path, m), val, m, callback, true));\n }\n });\n // The parent sel computation is handled in the frame above using the\n // ancestor object of val\n } else if (loc === '^') {\n // This is not a final endpoint, so we do not invoke the callback here\n this._hasParentSelector = true;\n return {\n path: path.slice(0, -1),\n expr: x,\n isParentSelector: true\n };\n } else if (loc === '~') {\n // property name\n retObj = {\n path: push(path, loc),\n value: parentPropName,\n parent,\n parentProperty: null\n };\n this._handleCallback(retObj, callback, 'property');\n return retObj;\n } else if (loc === '$') {\n // root only\n addRet(this._trace(x, val, path, null, null, callback, hasArrExpr));\n } else if (/^(-?\\d*):(-?\\d*):?(\\d*)$/u.test(loc)) {\n // [start:end:step] Python slice syntax\n addRet(this._slice(loc, x, val, path, parent, parentPropName, callback));\n } else if (loc.indexOf('?(') === 0) {\n // [?(expr)] (filtering)\n if (this.currEval === false) {\n throw new Error('Eval [?(expr)] prevented in JSONPath expression.');\n }\n const safeLoc = loc.replace(/^\\?\\((.*?)\\)$/u, '$1');\n // check for a nested filter expression\n const nested = /@.?([^?]*)[['](\\??\\(.*?\\))(?!.\\)\\])[\\]']/gu.exec(safeLoc);\n if (nested) {\n // find if there are matches in the nested expression\n // add them to the result set if there is at least one match\n this._walk(val, m => {\n const npath = [nested[2]];\n const nvalue = nested[1] ? val[m][nested[1]] : val[m];\n const filterResults = this._trace(npath, nvalue, path, parent, parentPropName, callback, true);\n if (filterResults.length > 0) {\n addRet(this._trace(x, val[m], push(path, m), val, m, callback, true));\n }\n });\n } else {\n this._walk(val, m => {\n if (this._eval(safeLoc, val[m], m, path, parent, parentPropName)) {\n addRet(this._trace(x, val[m], push(path, m), val, m, callback, true));\n }\n });\n }\n } else if (loc[0] === '(') {\n // [(expr)] (dynamic property/index)\n if (this.currEval === false) {\n throw new Error('Eval [(expr)] prevented in JSONPath expression.');\n }\n // As this will resolve to a property name (but we don't know it\n // yet), property and parent information is relative to the\n // parent of the property to which this expression will resolve\n addRet(this._trace(unshift(this._eval(loc, val, path.at(-1), path.slice(0, -1), parent, parentPropName), x), val, path, parent, parentPropName, callback, hasArrExpr));\n } else if (loc[0] === '@') {\n // value type: @boolean(), etc.\n let addType = false;\n const valueType = loc.slice(1, -2);\n switch (valueType) {\n case 'scalar':\n if (!val || !['object', 'function'].includes(typeof val)) {\n addType = true;\n }\n break;\n case 'boolean':\n case 'string':\n case 'undefined':\n case 'function':\n if (typeof val === valueType) {\n addType = true;\n }\n break;\n case 'integer':\n if (Number.isFinite(val) && !(val % 1)) {\n addType = true;\n }\n break;\n case 'number':\n if (Number.isFinite(val)) {\n addType = true;\n }\n break;\n case 'nonFinite':\n if (typeof val === 'number' && !Number.isFinite(val)) {\n addType = true;\n }\n break;\n case 'object':\n if (val && typeof val === valueType) {\n addType = true;\n }\n break;\n case 'array':\n if (Array.isArray(val)) {\n addType = true;\n }\n break;\n case 'other':\n addType = this.currOtherTypeCallback(val, path, parent, parentPropName);\n break;\n case 'null':\n if (val === null) {\n addType = true;\n }\n break;\n /* c8 ignore next 2 */\n default:\n throw new TypeError('Unknown value type ' + valueType);\n }\n if (addType) {\n retObj = {\n path,\n value: val,\n parent,\n parentProperty: parentPropName\n };\n this._handleCallback(retObj, callback, 'value');\n return retObj;\n }\n // `-escaped property\n } else if (loc[0] === '`' && val && Object.hasOwn(val, loc.slice(1))) {\n const locProp = loc.slice(1);\n addRet(this._trace(x, val[locProp], push(path, locProp), val, locProp, callback, hasArrExpr, true));\n } else if (loc.includes(',')) {\n // [name1,name2,...]\n const parts = loc.split(',');\n for (const part of parts) {\n addRet(this._trace(unshift(part, x), val, path, parent, parentPropName, callback, true));\n }\n // simple case--directly follow property\n } else if (!literalPriority && val && Object.hasOwn(val, loc)) {\n addRet(this._trace(x, val[loc], push(path, loc), val, loc, callback, hasArrExpr, true));\n }\n\n // We check the resulting values for parent selections. For parent\n // selections we discard the value object and continue the trace with the\n // current val object\n if (this._hasParentSelector) {\n for (let t = 0; t < ret.length; t++) {\n const rett = ret[t];\n if (rett && rett.isParentSelector) {\n const tmp = this._trace(rett.expr, val, rett.path, parent, parentPropName, callback, hasArrExpr);\n if (Array.isArray(tmp)) {\n ret[t] = tmp[0];\n const tl = tmp.length;\n for (let tt = 1; tt < tl; tt++) {\n // eslint-disable-next-line @stylistic/max-len -- Long\n // eslint-disable-next-line sonarjs/updated-loop-counter -- Convenient\n t++;\n ret.splice(t, 0, tmp[tt]);\n }\n } else {\n ret[t] = tmp;\n }\n }\n }\n }\n return ret;\n};\nJSONPath.prototype._walk = function (val, f) {\n if (Array.isArray(val)) {\n const n = val.length;\n for (let i = 0; i < n; i++) {\n f(i);\n }\n } else if (val && typeof val === 'object') {\n Object.keys(val).forEach(m => {\n f(m);\n });\n }\n};\nJSONPath.prototype._slice = function (loc, expr, val, path, parent, parentPropName, callback) {\n if (!Array.isArray(val)) {\n return undefined;\n }\n const len = val.length,\n parts = loc.split(':'),\n step = parts[2] && Number.parseInt(parts[2]) || 1;\n let start = parts[0] && Number.parseInt(parts[0]) || 0,\n end = parts[1] && Number.parseInt(parts[1]) || len;\n start = start < 0 ? Math.max(0, start + len) : Math.min(len, start);\n end = end < 0 ? Math.max(0, end + len) : Math.min(len, end);\n const ret = [];\n for (let i = start; i < end; i += step) {\n const tmp = this._trace(unshift(i, expr), val, path, parent, parentPropName, callback, true);\n // Should only be possible to be an array here since first part of\n // ``unshift(i, expr)` passed in above would not be empty, nor `~`,\n // nor begin with `@` (as could return objects)\n // This was causing excessive stack size in Node (with or\n // without Babel) against our performance test: `ret.push(...tmp);`\n tmp.forEach(t => {\n ret.push(t);\n });\n }\n return ret;\n};\nJSONPath.prototype._eval = function (code, _v, _vname, path, parent, parentPropName) {\n this.currSandbox._$_parentProperty = parentPropName;\n this.currSandbox._$_parent = parent;\n this.currSandbox._$_property = _vname;\n this.currSandbox._$_root = this.json;\n this.currSandbox._$_v = _v;\n const containsPath = code.includes('@path');\n if (containsPath) {\n this.currSandbox._$_path = JSONPath.toPathString(path.concat([_vname]));\n }\n const scriptCacheKey = this.currEval + 'Script:' + code;\n if (!JSONPath.cache[scriptCacheKey]) {\n let script = code.replaceAll('@parentProperty', '_$_parentProperty').replaceAll('@parent', '_$_parent').replaceAll('@property', '_$_property').replaceAll('@root', '_$_root').replaceAll(/@([.\\s)[])/gu, '_$_v$1');\n if (containsPath) {\n script = script.replaceAll('@path', '_$_path');\n }\n if (this.currEval === 'safe' || this.currEval === true || this.currEval === undefined) {\n JSONPath.cache[scriptCacheKey] = new this.safeVm.Script(script);\n } else if (this.currEval === 'native') {\n JSONPath.cache[scriptCacheKey] = new this.vm.Script(script);\n } else if (typeof this.currEval === 'function' && this.currEval.prototype && Object.hasOwn(this.currEval.prototype, 'runInNewContext')) {\n const CurrEval = this.currEval;\n JSONPath.cache[scriptCacheKey] = new CurrEval(script);\n } else if (typeof this.currEval === 'function') {\n JSONPath.cache[scriptCacheKey] = {\n runInNewContext: context => this.currEval(script, context)\n };\n } else {\n throw new TypeError(`Unknown \"eval\" property \"${this.currEval}\"`);\n }\n }\n try {\n return JSONPath.cache[scriptCacheKey].runInNewContext(this.currSandbox);\n } catch (e) {\n if (this.ignoreEvalErrors) {\n return false;\n }\n throw new Error('jsonPath: ' + e.message + ': ' + code);\n }\n};\n\n// PUBLIC CLASS PROPERTIES AND METHODS\n\n// Could store the cache object itself\nJSONPath.cache = {};\n\n/**\n * @param {string[]} pathArr Array to convert\n * @returns {string} The path string\n */\nJSONPath.toPathString = function (pathArr) {\n const x = pathArr,\n n = x.length;\n let p = '$';\n for (let i = 1; i < n; i++) {\n if (!/^(~|\\^|@.*?\\(\\))$/u.test(x[i])) {\n p += /^[0-9*]+$/u.test(x[i]) ? '[' + x[i] + ']' : \"['\" + x[i] + \"']\";\n }\n }\n return p;\n};\n\n/**\n * @param {string} pointer JSON Path\n * @returns {string} JSON Pointer\n */\nJSONPath.toPointer = function (pointer) {\n const x = pointer,\n n = x.length;\n let p = '';\n for (let i = 1; i < n; i++) {\n if (!/^(~|\\^|@.*?\\(\\))$/u.test(x[i])) {\n p += '/' + x[i].toString().replaceAll('~', '~0').replaceAll('/', '~1');\n }\n }\n return p;\n};\n\n/**\n * @param {string} expr Expression to convert\n * @returns {string[]}\n */\nJSONPath.toPathArray = function (expr) {\n const {\n cache\n } = JSONPath;\n if (cache[expr]) {\n return cache[expr].concat();\n }\n const subx = [];\n const normalized = expr\n // Properties\n .replaceAll(/@(?:null|boolean|number|string|integer|undefined|nonFinite|scalar|array|object|function|other)\\(\\)/gu, ';$&;')\n // Parenthetical evaluations (filtering and otherwise), directly\n // within brackets or single quotes\n .replaceAll(/[['](\\??\\(.*?\\))[\\]'](?!.\\])/gu, function ($0, $1) {\n return '[#' + (subx.push($1) - 1) + ']';\n })\n // Escape periods and tildes within properties\n .replaceAll(/\\[['\"]([^'\\]]*)['\"]\\]/gu, function ($0, prop) {\n return \"['\" + prop.replaceAll('.', '%@%').replaceAll('~', '%%@@%%') + \"']\";\n })\n // Properties operator\n .replaceAll('~', ';~;')\n // Split by property boundaries\n .replaceAll(/['\"]?\\.['\"]?(?![^[]*\\])|\\[['\"]?/gu, ';')\n // Reinsert periods within properties\n .replaceAll('%@%', '.')\n // Reinsert tildes within properties\n .replaceAll('%%@@%%', '~')\n // Parent\n .replaceAll(/(?:;)?(\\^+)(?:;)?/gu, function ($0, ups) {\n return ';' + ups.split('').join(';') + ';';\n })\n // Descendents\n .replaceAll(/;;;|;;/gu, ';..;')\n // Remove trailing\n .replaceAll(/;$|'?\\]|'$/gu, '');\n const exprList = normalized.split(';').map(function (exp) {\n const match = exp.match(/#(\\d+)/u);\n return !match || !match[1] ? exp : subx[match[1]];\n });\n cache[expr] = exprList;\n return cache[expr].concat();\n};\nJSONPath.prototype.safeVm = {\n Script: SafeScript\n};\n\n/**\n * @typedef {any} ContextItem\n */\n\n/**\n * @typedef {any} EvaluatedResult\n */\n\n/**\n * @callback ConditionCallback\n * @param {ContextItem} item\n * @returns {boolean}\n */\n\n/**\n * Copy items out of one array into another.\n * @param {GenericArray} source Array with items to copy\n * @param {GenericArray} target Array to which to copy\n * @param {ConditionCallback} conditionCb Callback passed the current item;\n * will move item if evaluates to `true`\n * @returns {void}\n */\nconst moveToAnotherArray = function (source, target, conditionCb) {\n const il = source.length;\n for (let i = 0; i < il; i++) {\n const item = source[i];\n if (conditionCb(item)) {\n // eslint-disable-next-line @stylistic/max-len -- Long\n // eslint-disable-next-line sonarjs/updated-loop-counter -- Convenient\n target.push(source.splice(i--, 1)[0]);\n }\n }\n};\n\n/**\n * In-browser replacement for NodeJS' VM.Script.\n */\nclass Script {\n /**\n * @param {string} expr Expression to evaluate\n */\n constructor(expr) {\n this.code = expr;\n }\n\n /**\n * @param {object} context Object whose items will be added\n * to evaluation\n * @returns {EvaluatedResult} Result of evaluated code\n */\n runInNewContext(context) {\n let expr = this.code;\n const keys = Object.keys(context);\n const funcs = [];\n moveToAnotherArray(keys, funcs, key => {\n return typeof context[key] === 'function';\n });\n const values = keys.map(vr => {\n return context[vr];\n });\n const funcString = funcs.reduce((s, func) => {\n let fString = context[func].toString();\n if (!/function/u.test(fString)) {\n fString = 'function ' + fString;\n }\n return 'var ' + func + '=' + fString + ';' + s;\n }, '');\n expr = funcString + expr;\n\n // Mitigate http://perfectionkills.com/global-eval-what-are-the-options/#new_function\n if (!/(['\"])use strict\\1/u.test(expr) && !keys.includes('arguments')) {\n expr = 'var arguments = undefined;' + expr;\n }\n\n // Remove last semi so `return` will be inserted before\n // the previous one instead, allowing for the return\n // of a bare ending expression\n expr = expr.replace(/;\\s*$/u, '');\n\n // Insert `return`\n const lastStatementEnd = expr.lastIndexOf(';');\n const code = lastStatementEnd !== -1 ? expr.slice(0, lastStatementEnd + 1) + ' return ' + expr.slice(lastStatementEnd + 1) : ' return ' + expr;\n\n // eslint-disable-next-line no-new-func -- User's choice\n return new Function(...keys, code)(...values);\n }\n}\nJSONPath.prototype.vm = {\n Script\n};\n\nexport { JSONPath };\n","// setValueByPath.ts\n\nexport function setValueByPath(obj: any, path: string, value: any): void {\n const parts = path.replace(/^\\$\\.?/, '').split(/\\.|\\[|\\]/).filter(Boolean);\n let current = obj;\n \n for (let i = 0; i < parts.length - 1; i++) {\n const part = parts[i];\n const nextPart = parts[i + 1];\n const isNextPartArrayIndex = /^\\d+$/.test(nextPart);\n\n if (part === '__proto__' || part === 'constructor' || part === 'prototype') {\n throw new Error('Invalid path part: ' + part);\n }\n\n if (!(part in current)) {\n current[part] = isNextPartArrayIndex ? [] : {};\n }\n\n if (isNextPartArrayIndex) {\n const index = parseInt(nextPart, 10);\n if (!Array.isArray(current[part])) {\n current[part] = [];\n }\n if (current[part].length <= index) {\n current[part][index] = i === parts.length - 2 ? value : {};\n }\n current = current[part][index];\n i++; // Skip the next part as we've already handled it\n } else {\n current = current[part];\n }\n }\n\n const lastPart = parts[parts.length - 1];\n if (lastPart === '__proto__' || lastPart === 'constructor' || lastPart === 'prototype') {\n throw new Error('Invalid path part: ' + lastPart);\n }\n if (/^\\d+$/.test(lastPart)) {\n const index = parseInt(lastPart, 10);\n if (!Array.isArray(current)) {\n current = [];\n }\n current[index] = value;\n } else {\n current[lastPart] = value;\n }\n}\n","import { JSONPath } from \"jsonpath-plus\";\nimport { setValueByPath } from \"./setValueByPath\";\nimport { CraftDataWrapperPropMap, CraftDataPatch } from \"./model\";\nimport { CraftNodeDatasource } from \"./craftNode\";\n\nexport const mapData = <\n M extends CraftDataWrapperPropMap = CraftDataWrapperPropMap<any, any>,\n D extends CraftNodeDatasource = CraftNodeDatasource,\n P extends CraftDataPatch = CraftDataPatch<any, any>\n>(\n data: any,\n mapConfig: M,\n childRef: any\n) => {\n const output = {\n type: mapConfig.type,\n item: mapConfig.type === \"single\" ? {} : undefined,\n list: mapConfig.type === \"list\" ? [] : undefined,\n } as D;\n\n const applyPatch = (source: any, patch: P) => {\n let patchSource = source;\n if (patch.patchSource === \"value\") {\n return patch.value ?? patch.defaultValue ?? null;\n }\n\n if (patch.patchSource === \"child\") {\n patchSource = childRef;\n }\n\n const value =\n patch.type === \"single\"\n ? JSONPath({ path: patch.fromPath, json: patchSource, resultType: \"value\" })\n : JSONPath({ path: patch.fromPath, json: patchSource });\n return value ?? patch.defaultValue ?? null;\n };\n\n const rootData =\n mapConfig.type === \"single\"\n ? JSONPath({ path: mapConfig.fromPath, json: data, resultType: \"value\" })\n : JSONPath({ path: mapConfig.fromPath, json: data });\n\n if (mapConfig.type === \"single\") {\n //@ts-ignore\n mapConfig.patches.forEach((patch: P) => {\n const value = applyPatch(rootData, patch);\n setValueByPath(output.item!, patch.toPath, value);\n });\n } else if (mapConfig.type === \"list\") {\n output.list = rootData.map((item: any) => {\n const mappedItem: Record<string, any> = {};\n mapConfig.patches.forEach((patch) => {\n //@ts-ignore\n const value = applyPatch(item, patch);\n setValueByPath(mappedItem, patch.toPath, value);\n });\n\n return mappedItem;\n });\n }\n\n return output;\n};\n","import { h, VNode } from \"vue\";\nimport { CraftNode, CraftNodeDatasource, isVisible } from \"./craftNode\";\nimport CraftNodeResolver, { CraftNodeResolverMap } from \"./CraftNodeResolver\";\n\nexport interface RenderOptions<T extends object> {\n resolverMap: CraftNodeResolverMap<T>;\n componentRegistry?: Record<string, any>;\n nodeDataMap?: Record<string, CraftNodeDatasource | null>;\n eventsContext?: Record<string, any>;\n}\n\nfunction buildEventHandlers(\n node: CraftNode,\n eventsContext: Record<string, any>\n): Record<string, (...args: any[]) => void> {\n const handlers: Record<string, (...args: any[]) => void> = {};\n\n if (!node.events || !Object.keys(node.events).length) {\n return handlers;\n }\n\n Object.entries(node.events).forEach(([eventName, eventCode]) => {\n if (!eventCode?.trim()) return;\n\n handlers[eventName] = (...args: any[]) => {\n try {\n const eventHandler = new Function(\"ctx\", \"craftNode\", \"args\", eventCode);\n eventHandler(eventsContext, node, ...args);\n } catch (e) {\n console.error(`Event code execution failed with code:\\n${eventCode}\\n\\nError:`, e);\n }\n };\n });\n\n return handlers;\n}\n\nfunction computeDataChildren(\n node: CraftNode,\n data: CraftNodeDatasource,\n slotName: string = 'default'\n): CraftNode[] {\n if (!node.slots || !node.slots[slotName]) return [];\n\n const children = node.slots[slotName];\n\n if (data.type === \"single\") {\n return children.map((child) => ({\n ...child,\n uuid: `${child.uuid}-single`,\n props: { ...child.props, ...(data.item || {}) },\n }));\n }\n\n if (data.type === \"list\" && data.list) {\n return children.flatMap((child) =>\n data.list!.map((item, index) => ({\n ...child,\n uuid: `${child.uuid}-data-${index}`,\n props: { ...child.props, ...(item || {}) },\n }))\n );\n }\n\n return [];\n}\n\nexport function renderCraftNodeToVNode<T extends object>(\n node: CraftNode,\n resolver: CraftNodeResolver<T>,\n componentRegistry?: Record<string, any>,\n nodeDataMap?: Record<string, CraftNodeDatasource | null>,\n eventsContext?: Record<string, any>\n): VNode | null {\n if (!isVisible(node)) {\n return null;\n }\n\n const resolved = resolver.resolveNode(node);\n const componentName = resolved?.componentName || node.componentName;\n const component = componentRegistry?.[componentName] || componentName;\n\n const props = {\n ...(resolved?.defaultProps || {}),\n ...node.props,\n };\n\n const eventHandlers = eventsContext ? buildEventHandlers(node, eventsContext) : {};\n\n const nodeData = nodeDataMap?.[node.uuid];\n let children: VNode[] | undefined;\n\n if (nodeData?.type) {\n const dataChildren = computeDataChildren(node, nodeData, nodeData.slotName || 'default');\n children = dataChildren\n .map((child) => renderCraftNodeToVNode(child, resolver, componentRegistry, nodeDataMap, eventsContext))\n .filter((v): v is VNode => v !== null);\n } else if (node.slots) {\n children = Object.values(node.slots)\n .flat()\n .map((child) => renderCraftNodeToVNode(child, resolver, componentRegistry, nodeDataMap, eventsContext))\n .filter((v): v is VNode => v !== null);\n }\n\n return h(component, { key: node.uuid, ...props, ...eventHandlers }, children);\n}\n\nexport function renderCraftNodesToVNodes<T extends object>(\n nodes: CraftNode[],\n options: RenderOptions<T>\n): VNode[] {\n const resolver = new CraftNodeResolver(options.resolverMap);\n return nodes\n .map((node) =>\n renderCraftNodeToVNode(\n node,\n resolver,\n options.componentRegistry,\n options.nodeDataMap,\n options.eventsContext\n )\n )\n .filter((v): v is VNode => v !== null);\n}\n","export const defaultResolvers = {\n CraftComponentSimpleText: {\n componentName: \"CraftComponentSimpleText\",\n eventsSchema: {\n $el: \"div\",\n children: [\n {\n $formkit: \"textarea\",\n name: \"click\",\n label: \"onClick\",\n },\n ],\n },\n propsSchema: [\n {\n $formkit: \"select\",\n label: \"Type\",\n name: \"componentName\",\n options: [\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"h5\",\n \"h6\",\n \"p\",\n \"span\",\n \"div\",\n \"blockquote\",\n ],\n },\n {\n $formkit: \"textarea\",\n label: \"Content\",\n name: \"content\",\n },\n {\n $formkit: \"text\",\n label: \"Class\",\n name: \"class\",\n },\n ],\n },\n CraftCanvas: {\n componentName: \"CraftCanvas\",\n },\n};\n","import { App } from \"vue\";\nimport * as components from \"./components\";\nexport * from \"./blueprints/default\";\nexport * from \"./components\";\nexport * from \"./components/composable\";\nexport * from \"./lib/craftNode\";\nexport * from \"./lib/CraftNodeResolver\";\nexport * from \"./lib/mapData\";\nexport * from \"./lib/model\";\nexport * from \"./lib/renderCraftNodes\";\nexport * from \"./resolvers/default\";\nexport { useEditor } from \"./store/editor\";\nexport type { EditorState, EditorStoreInstanceType } from \"./store/editor\";\nexport { useIndicator } from \"./store/indicator\";\nexport type { IndicatorState, IndicatorStoreType } from \"./store/indicator\";\n\nimport \"./assets/styles.scss\";\n\nconst install = (app: App) => {\n for (const key in components) {\n app.component(key, components[key]);\n }\n};\n\nexport const VCraft = { install };\n"],"names":["slots","useSlots","attrs","useAttrs","props","__props","resolver","inject","resolved","computed","componentToRender","_createBlock","_resolveDynamicComponent","_normalizeProps","_mergeProps","_unref","_createSlots","_","name","_withCtx","slotProps","_renderSlot","_ctx","_guardReactiveProps","useResolveCraftNode","craftNode","resolvedNode","defaultProps","useCraftNode","isVisible","craftNodeInCanvas","node","editor","useEditor","craftNodeIsCanvas","craftNodeIsDraggable","craftNodeIsAncestorOf","descendant","currentNode","resolveNodeName","craftNodeCanBeChildOf","targetNode","resolvedTargetNode","resolvedSource","targetNodeRules","sourceNodeRules","parent","rules","craftNodeCanBeSiblingOf","buildCraftNodeTree","uuidv4","slotChildren","cn","defineStore","ref","setVisibility","child","uuid","data","nodeUuid","newProps","newEvents","nodes","addNode","slotName","parentUuid","newNode","markRaw","removeDescendants","targetParent","targetSlotName","key","n","index","context","state","buildTree","rootUuid","emit","__emit","isEditing","textareaRef","originalValue","enabled","storeToRefs","canEdit","handleDoubleClick","startEditing","nextTick","adjustTextareaHeight","finishEditing","newValue","cancelEditing","watch","_openBlock","_createElementBlock","CraftNodeResolver","resolverMap","value","getDraggedNode","provide","_component_CraftEditorPanelLayout","$slots","blueprints","deselectNodes","_createVNode","_component_CraftFrame","_cache","iframe","useIndicator","isForbidden","element","top","left","height","width","padding","getPadding","paddingLeft","paddingBottom","paddingRight","paddingTop","e","indicator","handleDragStart","handleDragEnd","blueprintsWithDefaults","group","blueprint","_hoisted_1","_Fragment","_renderList","_createElementVNode","_toDisplayString","_hoisted_2","_component_CraftEditorBlueprint","_hoisted_3","_hoisted_4","_component_CraftEditorBlueprintsList","modelRef","toRef","schema","computedModel","debouncedEmit","debounce","handleFormInput","onUnmounted","nodeTree","layerClick","_component_CraftEditorPanelNodeLayer","_component_CraftEditorPanelBlueprints","_hoisted_5","_component_CraftEditorPanelLayers","_component_CraftEditorPanelSettings","toRefs","_component_CraftEditorPanelForm","v","model","FormKit","FormKitSchema","visible","selectedNode","componentName","isSelected","iconClick","_withModifiers","$event","eventsSchema","deleteable","removeNode","nodeName","handlePropsUpdate","handleEventsUpdate","_normalizeClass","_component_CraftEditorPanelNodeSettings","_component_CraftEditorPanelNodeEventsSettings","getIndicatorStyle","iframeRef","hasLoad","iframeBody","observer","resizeObserver","isAutoHeight","lastHeight","updateScheduled","onLoad","setupBody","inheritStyles","el","insertStyle","sheet","insertStyleSheet","setupAutoResize","w","h","iframeWindow","updateIframeHeight","initialResizeObserver","iframeDocument","iframeParent","availableHeight","parentHeight","iframeTop","body","html","contentHeight","finalHeight","parentDoc","target","style","styleEl","link","iframeDoc","id","_Teleport","formatComponentName","vNode","createNodeFromVNode","parentNode","slotFn","createChildren","vnodeChildren","childVNode","childNode","useCraftFrame","hasNodes","mountNodes","createdNodes","slot","vNodeToCraftNode","onMounted","res","iFrameWidth","iFrameHeight","onIframeLoad","CraftIframe","_component_CraftNodeViewer","_component_CraftNodeEditor","Indicator","useConnectCraftNodeToStore","nodeRef","selectedUuid","draggingDisabled","lastEl","updateNodeRef","useCraftNodeEvents","ctx","eventHandlersMap","buildEvents","eventName","eventCode","handler","args","onBeforeMount","onBeforeUnmount","useCraftNodeWrapper","readonly","mouseOnLeftHalf","rect","mouseOnTopHalf","mouseOnEdge","handleElementDragOver","handleCanvasDragOver","slotPlaceholder","cannotBeChild","handleDragOver","handleElementDrop","draggedNode","sibling","c","initializeSlotsFromResolver","resolverSlots","handleCanvasDrop","slotNameAttr","targetSlots","slotNames","handleDrop","nodeCopy","copy","drag","useDragCraftNode","event","craftNodeData","isDraggable","selectNode","eventHandlers","craftNodeClick","generateColorFromUUID","hash","i","s","l","nodeColor","availableSlots","shouldRenderSlots","children","computedDataChildren","computeDataNodes","acc","item","_toHandlers","nodeProps","slotNodes","isCanvas","computedChildren","CraftNodeViewer","defaultBlueprints","Hooks","callback","first","env","Plugins","jsep","_len","plugins","_key","plugin","Jsep","op_name","precedence","isRightAssociative","char","literal_name","literal_value","expr","obj","k","ch","op_val","message","error","untilICode","ch_i","to_check","tc_len","biop","prec","stack","biop_info","right","cur_biop","comparePrev","prev","argument","optional","number","chCode","str","startIndex","quote","closed","start","termination","separator_count","arg","hooks","stdClassProps","prop","m","CONDITIONAL_EXP","ternary","test","consequent","alternate","newTest","FSLASH_CODE","BSLASH_CODE","patternIndex","inCharSet","pattern","flags","code","PLUS_CODE","MINUS_CODE","updateNodeTypes","op","updateBinariesToAssignments","val","BLOCKED_PROTO_PROPERTIES","SafeEval","ast","subs","a","b","last","result","func","SafeScript","keyMap","push","arr","unshift","NewError","JSONPath","opts","otherTypeCallback","optObj","ret","json","currParent","currParentProperty","flatten","wrap","exprList","ea","rslt","valOrPath","resultType","path","fullRetObj","type","preferredOutput","parentPropName","hasArrExpr","literalPriority","retObj","loc","x","addRet","elems","t","safeLoc","nested","npath","nvalue","addType","valueType","locProp","parts","part","rett","tmp","tl","tt","f","len","step","end","_v","_vname","containsPath","scriptCacheKey","script","CurrEval","pathArr","p","pointer","cache","subx","$0","$1","ups","exp","match","moveToAnotherArray","source","conditionCb","il","Script","keys","funcs","values","vr","fString","lastStatementEnd","setValueByPath","current","nextPart","isNextPartArrayIndex","lastPart","mapData","mapConfig","childRef","output","applyPatch","patch","patchSource","rootData","mappedItem","buildEventHandlers","eventsContext","handlers","computeDataChildren","renderCraftNodeToVNode","componentRegistry","nodeDataMap","component","nodeData","renderCraftNodesToVNodes","options","defaultResolvers","install","app","components","VCraft"],"mappings":"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","x_google_ignoreList":[37]}
|