{"version":3,"file":"vue-simulator-renderer.mjs","sources":["../src/simulator-view.ts","../src/buildin-components/leaf.ts","../src/buildin-components/slot.ts","../src/buildin-components/page.ts","../src/host.ts","../src/utils/get-client-rects.ts","../src/utils/comp-node.ts","../src/utils/check-node.ts","../src/utils/closest-node.ts","../src/utils/find-dom-nodes.ts","../src/utils/logger.ts","../src/utils/cursor.ts","../src/utils/navtive-selection.ts","../src/utils/deep-merge.ts","../src/utils/path.ts","../src/simulator.ts","../src/index.ts"],"sourcesContent":["import { ref, Suspense, type PropType } from 'vue';\nimport type { DocumentInstance, VueSimulatorRenderer } from './interface';\nimport { defineComponent, h, renderSlot } from 'vue';\nimport LowCodeRenderer from '@knxcloud/lowcode-vue-renderer';\nimport { RouterView } from 'vue-router';\n\nexport const Layout = defineComponent({\n  props: {\n    simulator: {\n      type: Object as PropType<VueSimulatorRenderer>,\n      required: true,\n    },\n  },\n  render() {\n    const { simulator, $slots } = this;\n    const { layout, getComponent } = simulator;\n    if (layout) {\n      const { Component, props = {}, componentName } = layout;\n      if (Component) {\n        return h(Component, { ...props, key: 'layout', simulator } as any, $slots);\n      }\n      const ComputedComponent = componentName && getComponent(componentName);\n      if (ComputedComponent) {\n        return h(ComputedComponent, { ...props, key: 'layout', simulator }, $slots);\n      }\n    }\n    return renderSlot($slots, 'default');\n  },\n});\n\nexport const SimulatorRendererView = defineComponent({\n  props: {\n    simulator: {\n      type: Object as PropType<VueSimulatorRenderer>,\n      required: true,\n    },\n  },\n  render() {\n    const { simulator } = this;\n    return h(Layout, { simulator }, () => {\n      return h(RouterView, null, {\n        default: ({ Component }) => {\n          return Component && h(Suspense, null, () => h(Component));\n        },\n      });\n    });\n  },\n});\n\nexport const Renderer = defineComponent({\n  props: {\n    simulator: {\n      type: Object as PropType<VueSimulatorRenderer>,\n      required: true,\n    },\n    documentInstance: {\n      type: Object as PropType<DocumentInstance>,\n      required: true,\n    },\n  },\n  setup: () => ({ renderer: ref() }),\n  render() {\n    const { documentInstance, simulator } = this;\n    const { schema, scope, messages, appHelper, key } = documentInstance;\n    const { designMode, device, locale, components, requestHandlersMap } = simulator;\n\n    return h(LowCodeRenderer, {\n      ref: 'renderer',\n      key: key,\n      scope: scope,\n      schema: schema,\n      locale: locale,\n      device: device,\n      messages: messages,\n      appHelper: appHelper,\n      components: components,\n      designMode: designMode,\n      requestHandlersMap: requestHandlersMap,\n      disableCompMock: simulator.disableCompMock,\n      thisRequiredInJSE: simulator.thisRequiredInJSE,\n      getNode: (id) => documentInstance.getNode(id) as any,\n      onCompGetCtx: (schema, ref) => documentInstance.mountInstance(schema.id!, ref),\n    });\n  },\n});\n","import { defineComponent, renderSlot } from 'vue';\n\nconst Leaf = defineComponent({\n  name: 'Leaf',\n  render() {\n    return renderSlot(this.$slots, 'default');\n  },\n});\n\nObject.assign(Leaf, {\n  displayName: 'Leaf',\n  componentMetadata: {\n    componentName: 'Leaf',\n    configure: {\n      props: [\n        {\n          name: 'children',\n          setter: 'StringSetter',\n        },\n      ],\n      supports: false,\n    },\n  },\n});\n\nexport default Leaf;\n","import { defineComponent, h, renderSlot } from 'vue';\n\nconst Slot = defineComponent({\n  render() {\n    return renderSlot(this.$slots, 'default', this.$props, () => {\n      return [h('div', { class: 'lc-container' })];\n    });\n  },\n});\n\nObject.assign(Slot, {\n  displayName: 'Slot',\n  componentMetadata: {\n    componentName: 'Slot',\n    configure: {\n      props: [\n        {\n          name: '___title',\n          title: '插槽标题',\n          setter: 'StringSetter',\n          defaultValue: '插槽容器',\n        },\n        {\n          name: '___params',\n          title: '插槽入参',\n          setter: {\n            componentName: 'ArraySetter',\n            props: {\n              itemSetter: {\n                componentName: 'StringSetter',\n                props: {\n                  placeholder: '参数名称',\n                },\n              },\n            },\n          },\n        },\n      ],\n      component: {\n        isContainer: true,\n        disableBehaviors: '*',\n      },\n      supports: false,\n    },\n  },\n});\n\nexport default Slot;\n","import { defineComponent, h } from 'vue';\n\nconst Page = defineComponent((props, { slots }) => {\n  return () => h('div', { class: 'lc-page', ...props }, slots);\n});\n\nObject.assign(Page, {\n  displayName: 'Page',\n  componentMetadata: {\n    componentName: 'Page',\n    configure: {\n      supports: {\n        style: true,\n        className: true,\n      },\n      component: {\n        isContainer: true,\n        disableBehaviors: '*',\n      },\n    },\n  },\n});\n\nexport default Page;\n","import type { BuiltinSimulatorHost } from '@alilc/lowcode-designer';\n\nexport const host: BuiltinSimulatorHost = (window as any).LCSimulatorHost;\n","import { isElement } from '@knxcloud/lowcode-utils';\n\n// a range for test TextNode clientRect\nconst cycleRange = document.createRange();\n\nexport function getClientRects(node: Element | Text) {\n  if (!node.parentNode) return [];\n\n  if (isElement(node)) {\n    return [node.getBoundingClientRect()];\n  }\n\n  cycleRange.selectNode(node);\n  return Array.from(cycleRange.getClientRects());\n}\n","import type { ComponentInternalInstance, VNode } from 'vue';\nimport type { ComponentInstance, ComponentRecord } from '../interface';\nimport { isProxy } from 'vue';\nimport { isNil, isObject } from '@knxcloud/lowcode-utils';\n\nconst SYMBOL_VDID = Symbol('_LCDocId');\nconst SYMBOL_VNID = Symbol('_LCNodeId');\nconst SYMBOL_VInstance = Symbol('_LCVueInstance');\nconst SYMBOL_RECORD_FLAG = Symbol('_LCVueCompRecord');\n\nexport interface VNodeHTMLElement extends HTMLElement {\n  __vnode: VNode;\n  __vueParentComponent: ComponentInternalInstance;\n}\n\nexport interface CompRootHTMLElement extends HTMLElement {\n  [SYMBOL_VDID]: string;\n  [SYMBOL_VNID]: string;\n  [SYMBOL_VInstance]: ComponentInstance;\n}\n\nexport interface CompRootData {\n  docId: string;\n  nodeId: string;\n  instance: ComponentInstance;\n}\n\nexport function isVNodeHTMLElement(el: unknown): el is VNodeHTMLElement {\n  return isObject(el) && !isNil(el.__vueParentComponent);\n}\n\nexport function isCompRootHTMLElement(\n  el: Element | null | undefined,\n): el is CompRootHTMLElement {\n  return isObject(el) && SYMBOL_VDID in el;\n}\n\nexport function isComponentRecord(el: unknown): el is ComponentRecord {\n  return isObject(el) && SYMBOL_RECORD_FLAG in el;\n}\n\nexport function isInternalInstance(el: unknown): el is ComponentInternalInstance {\n  return isObject(el) && isProxy(el.proxy);\n}\n\nexport function createComponentRecord(did: string, nid: string, cid: number) {\n  return {\n    did,\n    nid,\n    cid,\n    [SYMBOL_RECORD_FLAG]: true,\n  };\n}\n\nexport function getCompRootData(el: CompRootHTMLElement): CompRootData {\n  return {\n    docId: el[SYMBOL_VDID],\n    nodeId: el[SYMBOL_VNID],\n    instance: el[SYMBOL_VInstance],\n  };\n}\n\nexport function setCompRootData(el: CompRootHTMLElement, data: CompRootData): void {\n  el[SYMBOL_VDID] = data.docId;\n  el[SYMBOL_VNID] = data.nodeId;\n  el[SYMBOL_VInstance] = data.instance;\n}\n","import { isObject } from '@knxcloud/lowcode-utils';\n\nexport function isCommentNode(el: Element | Text | Comment | Node): el is Comment {\n  return el.nodeType === 8;\n}\n\nexport function isTextNode(el: Element | Text | Comment | Node): el is Text {\n  return el.nodeType === 3;\n}\n\nexport function isDomNode(el: unknown): el is Element | Text {\n  return (\n    isObject(el) &&\n    'nodeType' in el &&\n    (el.nodeType === Node.ELEMENT_NODE || el.nodeType === Node.TEXT_NODE)\n  );\n}\n\nexport function isEmptyNode(el: Element | Text | Comment | Node): boolean {\n  return isCommentNode(el) || (isTextNode(el) && el.nodeValue === '');\n}\n","import type { IPublicTypeNodeInstance as NodeInstance } from '@alilc/lowcode-types';\nimport type { ComponentInternalInstance } from 'vue';\nimport type { ComponentRecord } from '../interface';\nimport {\n  getCompRootData,\n  isVNodeHTMLElement,\n  isCompRootHTMLElement,\n  createComponentRecord,\n} from './comp-node';\n\nexport function getClosestNodeInstance(\n  el: Element,\n  specId: string | undefined,\n): NodeInstance<ComponentRecord> | null {\n  if (!document.contains(el)) {\n    return null;\n  }\n  return getClosestNodeInstanceByElement(el, specId);\n}\n\nexport function getClosestNodeInstanceByElement(\n  el: Element,\n  specId: string | undefined,\n): NodeInstance<ComponentRecord> | null {\n  while (el) {\n    if (isVNodeHTMLElement(el)) {\n      const component = el.__vueParentComponent;\n      return getClosestNodeInstanceByComponent(component, specId);\n    }\n    if (isCompRootHTMLElement(el)) {\n      const { nodeId, docId, instance } = getCompRootData(el);\n      if (!specId || specId === nodeId) {\n        return {\n          docId,\n          nodeId,\n          instance: createComponentRecord(docId, nodeId, instance.$.uid),\n        };\n      }\n    }\n    el = el.parentElement as Element;\n  }\n\n  return null;\n}\n\nexport function getClosestNodeInstanceByComponent(\n  instance: ComponentInternalInstance | null,\n  specId: string | undefined,\n): NodeInstance<ComponentRecord> | null {\n  while (instance) {\n    const el = instance.vnode.el as Element;\n    if (el && isCompRootHTMLElement(el)) {\n      const { nodeId, docId, instance } = getCompRootData(el);\n      if (!specId || specId === nodeId) {\n        return {\n          docId,\n          nodeId,\n          instance: createComponentRecord(docId, nodeId, instance.$.uid),\n        };\n      }\n    }\n    instance = instance.parent;\n  }\n  return null;\n}\n","import type { ComponentInternalInstance, VNode } from 'vue';\nimport type { ComponentInstance } from '../interface';\nimport { isVNode } from 'vue';\nimport { isVNodeHTMLElement } from './comp-node';\nimport { isDomNode, isEmptyNode } from './check-node';\nimport { getClientRects } from './get-client-rects';\nimport { isArray } from '@knxcloud/lowcode-utils';\n\nexport function findDOMNodes(instance: ComponentInstance) {\n  const els: (Element | Text)[] = [];\n\n  const el: Element | Text = instance.$el;\n\n  if (isEmptyNode(el)) {\n    const internalInstance = instance.$;\n    appendSiblingElement(els, internalInstance, el, (node) => {\n      return node.previousSibling;\n    });\n    appendDescendantComponent(els, internalInstance);\n    appendSiblingElement(els, internalInstance, el, (node) => {\n      return node.nextSibling;\n    });\n  } else {\n    els.push(el);\n  }\n\n  return els;\n}\n\nfunction appendSiblingElement(\n  target: (Element | Text)[],\n  instance: ComponentInternalInstance,\n  el: Element | Text,\n  next: (el: Node) => Node | null,\n) {\n  let nextNode = next(el);\n  while (nextNode) {\n    if (isEmptyNode(nextNode)) {\n      nextNode = next(nextNode);\n      continue;\n    }\n    if (isVNodeHTMLElement(nextNode)) {\n      const childInstance = nextNode.__vueParentComponent;\n      if (isChildInstance(instance, childInstance)) {\n        target.unshift(nextNode);\n        nextNode = next(nextNode);\n        continue;\n      }\n    }\n    break;\n  }\n}\n\nfunction appendDescendantComponent(\n  target: (Element | Text)[],\n  instance: ComponentInternalInstance,\n): boolean {\n  const subNode = instance.subTree;\n  const current = subNode.el as Element | Text;\n  if (isValidElement(current)) {\n    target.push(current);\n    return true;\n  }\n  if (isArray(subNode.children) && subNode.children.length > 0) {\n    return appendDescendantChildren(target, subNode.children as VNode<Element | Text>[]);\n  } else if (subNode.component) {\n    return appendDescendantComponent(target, subNode.component);\n  }\n  return false;\n}\n\nfunction appendDescendantChildren(\n  target: (Element | Text)[],\n  children: VNode[],\n): boolean {\n  const validElements = children.map(({ el }) => el).filter(isValidElement);\n  if (validElements.length > 0) {\n    target.push(...validElements);\n    return true;\n  } else {\n    return (\n      children.length > 0 &&\n      children.some((item) => {\n        if (isArray(item.children) && item.children.length > 0) {\n          return appendDescendantChildren(\n            target,\n            item.children.filter((child): child is VNode<Element | Text> =>\n              isVNode(child),\n            ),\n          );\n        } else if (item.component) {\n          return appendDescendantComponent(target, item.component);\n        }\n        return false;\n      })\n    );\n  }\n}\n\nfunction isValidElement(el: unknown): el is Element | Text {\n  if (el && isDomNode(el) && !isEmptyNode(el)) {\n    const rect = getClientRects(el);\n    return rect.some((item) => item.width || item.height);\n  }\n  return false;\n}\n\nfunction isChildInstance(\n  target: ComponentInternalInstance,\n  source: ComponentInternalInstance | null,\n): boolean {\n  if (source == null) return false;\n  if (target.uid > source.uid) return false;\n  if (target.uid === source.uid) return true;\n  return isChildInstance(target, source.parent);\n}\n","export function warn(...messages: string[]): void {\n  return console.warn('[vue-simulator-renderer]:', ...messages);\n}\n","class Cursor {\n  private states = new Set<string>();\n\n  setDragging(flag: boolean) {\n    if (flag) {\n      this.addState('dragging');\n    } else {\n      this.removeState('dragging');\n    }\n  }\n\n  setXResizing(flag: boolean) {\n    if (flag) {\n      this.addState('x-resizing');\n    } else {\n      this.removeState('x-resizing');\n    }\n  }\n\n  setYResizing(flag: boolean) {\n    if (flag) {\n      this.addState('y-resizing');\n    } else {\n      this.removeState('y-resizing');\n    }\n  }\n\n  setCopy(flag: boolean) {\n    if (flag) {\n      this.addState('copy');\n    } else {\n      this.removeState('copy');\n    }\n  }\n\n  isCopy() {\n    return this.states.has('copy');\n  }\n\n  release() {\n    for (const state of this.states) {\n      this.removeState(state);\n    }\n  }\n\n  addState(state: string) {\n    if (!this.states.has(state)) {\n      this.states.add(state);\n      document.documentElement.classList.add(`lc-cursor-${state}`);\n    }\n  }\n\n  private removeState(state: string) {\n    if (this.states.has(state)) {\n      this.states.delete(state);\n      document.documentElement.classList.remove(`lc-cursor-${state}`);\n    }\n  }\n}\n\nexport const cursor = new Cursor();\n","let nativeSelectionEnabled = true;\nconst preventSelection = (e: Event) => {\n  if (nativeSelectionEnabled) {\n    return null;\n  }\n  e.preventDefault();\n  e.stopPropagation();\n  return false;\n};\ndocument.addEventListener('selectstart', preventSelection, true);\ndocument.addEventListener('dragstart', preventSelection, true);\n\nexport function setNativeSelection(enableFlag: boolean) {\n  nativeSelectionEnabled = enableFlag;\n}\n","import { isObject } from '@knxcloud/lowcode-utils';\n\nexport function deepMerge<TL, TR>(o1: TL, o2: TR): TL & TR {\n  if (isObject(o1) && isObject(o2)) {\n    const result = Object.assign({}, o1);\n    Object.keys(o2).forEach((key) => {\n      Reflect.set(result, key, deepMerge(o1[key], o2[key]));\n    });\n    return result as TL & TR;\n  }\n  return (o2 ?? o1) as TL & TR;\n}\n","export function parseFileNameToPath(fileName: string): string {\n  const path = fileName.endsWith('/index.vue')\n    ? fileName.slice(0, fileName.length - 10)\n    : fileName.replace(/\\.(\\w*)$/, '');\n\n  return '/' + path.replace(/^\\//, '');\n}\n\nexport function parseFileNameToCompName(fileName: string): string {\n  const path = parseFileNameToPath(fileName);\n  return path.replace(/[/-_][\\w]/, (s) => s[1].toUpperCase());\n}\n","import type {\n  IPublicTypeContainerSchema,\n  IPublicModelDocumentModel,\n} from '@alilc/lowcode-types';\nimport {\n  type Ref,\n  createApp,\n  ref,\n  shallowRef,\n  reactive,\n  computed,\n  markRaw,\n  onUnmounted,\n  shallowReactive,\n} from 'vue';\nimport * as VueRouter from 'vue-router';\nimport type {\n  ComponentInstance,\n  ComponentRecord,\n  DocumentInstance,\n  MixedComponent,\n  SimulatorViewLayout,\n  VueSimulatorRenderer,\n} from './interface';\nimport {\n  config,\n  LOWCODE_ROUTE_META,\n  SchemaParser,\n  setupLowCodeRouteGuard,\n} from '@knxcloud/lowcode-vue-renderer';\nimport {\n  AssetLoader,\n  buildUtils,\n  buildComponents,\n  getSubComponent,\n  exportSchema,\n  isArray,\n} from '@knxcloud/lowcode-utils';\nimport { Renderer, SimulatorRendererView } from './simulator-view';\nimport { Slot, Leaf, Page } from './buildin-components';\nimport { host } from './host';\nimport {\n  cursor,\n  deepMerge,\n  findDOMNodes,\n  getClientRects,\n  getCompRootData,\n  setCompRootData,\n  getClosestNodeInstance,\n  isComponentRecord,\n  getClosestNodeInstanceByComponent,\n  setNativeSelection,\n  createComponentRecord,\n  parseFileNameToPath,\n  isVNodeHTMLElement,\n  CompRootHTMLElement,\n} from './utils';\n\nObject.assign(window, { VueRouter });\n\nconst loader = new AssetLoader();\n\nconst builtinComponents = { Slot, Leaf, Page };\n\nexport interface ProjectContext {\n  i18n: Record<string, object>;\n  appHelper: {\n    utils?: Record<string, unknown>;\n    constants?: Record<string, unknown>;\n    [x: string]: unknown;\n  };\n  suspense: boolean;\n}\n\nfunction createDocumentInstance(\n  document: IPublicModelDocumentModel,\n  context: ProjectContext,\n): DocumentInstance {\n  /** 记录单个节点的组件实例列表 */\n  const instancesMap = new Map<string, ComponentInstance[]>();\n  /** 记录 vue 组件实例和组件 uid 的映射关系 */\n  const vueInstanceMap = new Map<number, ComponentInstance>();\n\n  const timestamp = ref(Date.now());\n\n  const schema = computed<IPublicTypeContainerSchema>(() => {\n    void timestamp.value;\n    return (\n      exportSchema(document) ?? {\n        fileName: '/',\n        componentName: 'Page',\n      }\n    );\n  });\n\n  const checkInstanceMounted = (instance: ComponentInstance | HTMLElement): boolean => {\n    return '$' in instance ? instance.$.isMounted : !!instance;\n  };\n\n  const setHostInstance = (\n    docId: string,\n    nodeId: string,\n    instances: ComponentInstance[] | null,\n  ) => {\n    const instanceRecords = !instances\n      ? null\n      : instances.map((inst) => createComponentRecord(docId, nodeId, inst.$.uid));\n    host.setInstance(docId, nodeId, instanceRecords);\n  };\n\n  const getComponentInstance = (id: number) => {\n    return vueInstanceMap.get(id);\n  };\n\n  const mountInstance = (id: string, instanceOrEl: ComponentInstance | HTMLElement) => {\n    const docId = document.id;\n    if (instanceOrEl == null) {\n      let instances = instancesMap.get(id);\n      if (instances) {\n        instances = instances.filter(checkInstanceMounted);\n        if (instances.length > 0) {\n          instancesMap.set(id, instances);\n          setHostInstance(docId, id, instances);\n        } else {\n          instancesMap.delete(id);\n          setHostInstance(docId, id, null);\n        }\n      }\n      return;\n    }\n\n    let el: CompRootHTMLElement;\n    let instance: ComponentInstance;\n\n    if ('$' in instanceOrEl) {\n      instance = instanceOrEl;\n      el = instance.$el;\n    } else if (isVNodeHTMLElement(instanceOrEl)) {\n      instance = instanceOrEl.__vueParentComponent.proxy!;\n      // @ts-expect-error\n      el = instanceOrEl;\n    } else {\n      return;\n    }\n\n    const origId = getCompRootData(el).nodeId;\n    if (origId && origId !== id) {\n      // 另外一个节点的 instance 在此被复用了，需要从原来地方卸载\n      unmountInstance(origId, instance);\n    }\n\n    onUnmounted(() => unmountInstance(id, instance), instance.$);\n\n    setCompRootData(el, {\n      nodeId: id,\n      docId: docId,\n      instance: instance,\n    });\n    let instances = instancesMap.get(id);\n    if (instances) {\n      const l = instances.length;\n      instances = instances.filter(checkInstanceMounted);\n      let updated = instances.length !== l;\n      if (!instances.includes(instance)) {\n        instances.push(instance);\n        updated = true;\n      }\n      if (!updated) return;\n    } else {\n      instances = [instance];\n    }\n    vueInstanceMap.set(instance.$.uid, instance);\n    instancesMap.set(id, instances);\n    setHostInstance(docId, id, instances);\n  };\n\n  const unmountInstance = (id: string, instance: ComponentInstance) => {\n    const instances = instancesMap.get(id);\n    if (instances) {\n      const i = instances.indexOf(instance);\n      if (i > -1) {\n        const [instance] = instances.splice(i, 1);\n        vueInstanceMap.delete(instance.$.uid);\n        setHostInstance(document.id, id, instances);\n      }\n    }\n  };\n\n  const getNode: DocumentInstance['getNode'] = (id) => {\n    // @ts-expect-error getNodeById 不存在，使用 getNode 代替，这里的 ts 类型声明不正确\n    return id ? document.getNode(id) : null;\n  };\n\n  return reactive({\n    id: computed(() => document.id),\n    path: computed(() => parseFileNameToPath(schema.value.fileName ?? '')),\n    get key() {\n      return `${document.id}:${timestamp.value}`;\n    },\n    scope: computed(() => ({})),\n    schema: schema,\n    appHelper: computed(() => {\n      const _schema = schema.value;\n\n      const {\n        utils: utilsInContext,\n        constants: constantsInContext,\n        ...otherHelpers\n      } = context.appHelper;\n\n      return {\n        utils: {\n          ...utilsInContext,\n          ...buildUtils(host.libraryMap, Reflect.get(_schema, 'utils') ?? []),\n        },\n        constants: {\n          ...constantsInContext,\n          ...Reflect.get(_schema, 'constants'),\n        },\n        ...otherHelpers,\n      };\n    }),\n    document: computed(() => document),\n    messages: computed(() => deepMerge(context.i18n, Reflect.get(schema.value, 'i18n'))),\n    instancesMap: computed(() => instancesMap),\n    getNode,\n    mountInstance,\n    unmountInstance,\n    getComponentInstance,\n    rerender: () => {\n      const now = Date.now();\n      if (context.suspense) {\n        Object.assign(timestamp, {\n          _value: now,\n          _rawValue: now,\n        });\n      } else {\n        timestamp.value = now;\n      }\n      SchemaParser.cleanCachedModules();\n    },\n  }) as DocumentInstance;\n}\n\nfunction createSimulatorRenderer() {\n  const layout: Ref<SimulatorViewLayout> = shallowRef({});\n  const device: Ref<string> = shallowRef('default');\n  const locale: Ref<string | undefined> = shallowRef();\n  const autoRender = shallowRef(host.autoRender);\n  const designMode: Ref<string> = shallowRef('design');\n  const libraryMap: Ref<Record<string, string>> = shallowRef({});\n  const components: Ref<Record<string, ComponentInstance>> = shallowRef({});\n  const componentsMap: Ref<Record<string, MixedComponent>> = shallowRef({});\n  const disableCompMock: Ref<boolean | string[]> = shallowRef(true);\n  const requestHandlersMap: Ref<Record<string, CallableFunction>> = shallowRef({});\n  const documentInstances: Ref<DocumentInstance[]> = shallowRef([]);\n  const thisRequiredInJSE: Ref<boolean> = shallowRef(false);\n\n  const context: ProjectContext = shallowReactive({\n    i18n: {},\n    appHelper: {\n      utils: {},\n      constants: {},\n    },\n    suspense: false,\n  });\n\n  const disposeFunctions: Array<() => void> = [];\n\n  const documentInstanceMap = new Map<string, DocumentInstance>();\n\n  function _buildComponents() {\n    components.value = {\n      ...builtinComponents,\n      ...buildComponents(libraryMap.value, componentsMap.value),\n    };\n  }\n\n  const simulator = reactive({\n    config: markRaw(config),\n    layout,\n    device,\n    locale,\n    designMode,\n    libraryMap,\n    components,\n    autoRender,\n    componentsMap,\n    disableCompMock,\n    documentInstances,\n    requestHandlersMap,\n    thisRequiredInJSE,\n    isSimulatorRenderer: true,\n  }) as VueSimulatorRenderer;\n\n  simulator.app = markRaw(createApp(SimulatorRendererView, { simulator }));\n  simulator.router = markRaw(\n    VueRouter.createRouter({\n      history: VueRouter.createMemoryHistory('/'),\n      routes: [],\n    }),\n  );\n\n  simulator.getComponent = (componentName) => {\n    const paths = componentName.split('.');\n    const subs: string[] = [];\n    while (paths.length > 0) {\n      const component = components.value[componentName];\n      if (component) {\n        return getSubComponent(component, subs);\n      }\n      const sub = paths.pop();\n      if (!sub) break;\n      subs.unshift(sub);\n      componentName = paths.join('.');\n    }\n    return null!;\n  };\n\n  simulator.getClosestNodeInstance = (el, specId) => {\n    if (isComponentRecord(el)) {\n      const { cid, did } = el;\n      const documentInstance = documentInstanceMap.get(did);\n      const instance = documentInstance?.getComponentInstance(cid) ?? null;\n      return instance && getClosestNodeInstanceByComponent(instance.$, specId);\n    }\n    return getClosestNodeInstance(el, specId);\n  };\n\n  simulator.findDOMNodes = (instance: ComponentRecord) => {\n    if (instance) {\n      const { did, cid } = instance;\n      const documentInstance = documentInstanceMap.get(did);\n      const compInst = documentInstance?.getComponentInstance(cid);\n      return compInst ? findDOMNodes(compInst) : null;\n    }\n    return null;\n  };\n  simulator.getComponent = (componentName) => components.value[componentName];\n\n  simulator.getClientRects = (element) => getClientRects(element);\n  simulator.setNativeSelection = (enable) => setNativeSelection(enable);\n  simulator.setDraggingState = (state) => cursor.setDragging(state);\n  simulator.setCopyState = (state) => cursor.setCopy(state);\n  simulator.clearState = () => cursor.release();\n  simulator.rerender = () => documentInstances.value.forEach((doc) => doc.rerender());\n  simulator.dispose = () => {\n    simulator.app.unmount();\n    disposeFunctions.forEach((fn) => fn());\n  };\n  simulator.getCurrentDocument = () => {\n    const crr = host.project.currentDocument;\n    const docs = documentInstances.value;\n    return crr ? docs.find((doc) => doc.id === crr.id) ?? null : null;\n  };\n  simulator.load = (assets) => loader.load(assets);\n  simulator.loadAsyncLibrary = async (asyncLibraryMap) => {\n    await loader.loadAsyncLibrary(asyncLibraryMap);\n    _buildComponents();\n  };\n\n  let running = false;\n  simulator.run = () => {\n    if (running) return;\n    running = true;\n    const containerId = 'app';\n    let container = document.getElementById(containerId);\n    if (!container) {\n      container = document.createElement('div');\n      document.body.appendChild(container);\n      container.id = containerId;\n    }\n    document.documentElement.classList.add('engine-page');\n    document.body.classList.add('engine-document');\n    simulator.app.use(simulator.router).mount(container);\n    host.project.setRendererReady(simulator);\n  };\n\n  disposeFunctions.push(\n    host.connect(simulator, () => {\n      const config = host.project.get('config') || {};\n\n      // sync layout config\n      layout.value = config.layout ?? {};\n      // sync disableCompMock\n      disableCompMock.value = isArray(config.disableCompMock)\n        ? config.disableCompMock\n        : Boolean(config.disableCompMock);\n\n      // todo: split with others, not all should recompute\n      if (\n        libraryMap.value !== host.libraryMap ||\n        componentsMap.value !== host.designer.componentsMap\n      ) {\n        libraryMap.value = host.libraryMap || {};\n        componentsMap.value = host.designer.componentsMap;\n        _buildComponents();\n      }\n\n      locale.value = host.locale;\n\n      // sync device\n      device.value = host.device;\n\n      // sync designMode\n      designMode.value = host.designMode;\n\n      // sync requestHandlersMap\n      requestHandlersMap.value = host.requestHandlersMap ?? {};\n\n      thisRequiredInJSE.value = host.thisRequiredInJSE ?? false;\n\n      documentInstances.value.forEach((doc) => doc.rerender());\n\n      setupLowCodeRouteGuard(simulator.router, {\n        thisRequired: thisRequiredInJSE.value,\n        scopePath: 'renderer.runtimeScope',\n      });\n    }),\n  );\n\n  disposeFunctions.push(\n    host.autorun(async () => {\n      const { router } = simulator;\n      documentInstances.value = host.project.documents.map((doc) => {\n        let documentInstance = documentInstanceMap.get(doc.id);\n        if (!documentInstance) {\n          // TODO: 类型不兼容 IDocumentModel to DocumentModel，暂时用类型强转处理\n          documentInstance = createDocumentInstance(doc as any, context);\n          documentInstanceMap.set(doc.id, documentInstance);\n        } else if (router.hasRoute(documentInstance.id)) {\n          router.removeRoute(documentInstance.id);\n        }\n        router.addRoute({\n          name: documentInstance.id,\n          path: documentInstance.path,\n          meta: {\n            [LOWCODE_ROUTE_META]: documentInstance.schema,\n          },\n          component: Renderer,\n          props: ((doc, sim) => () => ({\n            simulator: sim,\n            documentInstance: doc,\n          }))(documentInstance, simulator),\n        });\n        return documentInstance;\n      });\n      router.getRoutes().forEach((route) => {\n        const id = route.name as string;\n        const hasDoc = documentInstances.value.some((doc) => doc.id === id);\n        if (!hasDoc) {\n          router.removeRoute(id);\n          documentInstanceMap.delete(id);\n        }\n      });\n      const inst = simulator.getCurrentDocument();\n      if (inst) {\n        try {\n          context.suspense = true;\n          await router.replace({ name: inst.id, force: true });\n        } finally {\n          context.suspense = false;\n        }\n      }\n    }),\n  );\n\n  host.componentsConsumer.consume(async (componentsAsset) => {\n    if (componentsAsset) {\n      await loader.load(componentsAsset);\n      _buildComponents();\n    }\n  });\n\n  host.injectionConsumer.consume((data) => {\n    if (data.appHelper) {\n      const { utils, constants, ...others } = data.appHelper;\n      Object.assign(context.appHelper, {\n        utils: isArray(utils) ? buildUtils(host.libraryMap, utils) : utils ?? {},\n        constants: constants ?? {},\n        ...others,\n      });\n    }\n    context.i18n = data.i18n ?? {};\n  });\n\n  return simulator;\n}\n\nexport default createSimulatorRenderer();\n","import simulator from './simulator';\nimport { warn } from './utils';\nimport './index.less';\n\nconst win = window as any;\n\nif (typeof win !== 'undefined') {\n  win.SimulatorRenderer = simulator;\n}\n\nwin.addEventListener('load', () => {\n  if (!win.__VUE_HMR_RUNTIME__) {\n    warn('检测到您正在使用 vue 运行时的生产环境版本');\n    warn('这将导致画布的部分功能异常，请使用非生产环境版本代替');\n    warn('https://unpkg.com/vue/dist/vue.runtime.global.js');\n  }\n});\n\nwin.addEventListener('beforeunload', () => {\n  win.LCSimulatorHost = null;\n  win.SimulatorRenderer = null;\n  simulator.dispose();\n});\n\nexport default simulator;\nexport * from '@knxcloud/lowcode-vue-renderer';\nexport {\n  config as vueRendererConfig,\n  default as VueRenderer,\n} from '@knxcloud/lowcode-vue-renderer';\nexport * from './interface';\n"],"names":["simulator","LowCodeRenderer","schema","ref","instance","document","instances","config","doc"],"mappings":"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"}