{"version":3,"file":"Viewport.jsx","sourceRoot":"lib/","sources":["containers/Viewport.tsx"],"names":[],"mappings":"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","sourcesContent":["import { usePrefix, useViewport } from '../hooks'\nimport { AuxToolWidget, EmptyWidget } from '../widgets'\nimport { Viewport as ViewportType } from '@designable/core'\nimport { requestIdle } from '@designable/shared'\nimport cls from 'classnames'\nimport {\n  defineComponent,\n  onBeforeUnmount,\n  onMounted,\n  ref,\n  computed,\n  getCurrentInstance,\n} from 'vue-demi'\nimport { useStyle } from '../shared'\n\nexport const Viewport = defineComponent({\n  name: 'DnViewport',\n  props: {\n    placeholder: {},\n    dragTipsDirection: {},\n  },\n  setup(props, { slots, attrs }) {\n    const loaded = ref(false)\n    const prefixRef = usePrefix('viewport')\n    const viewportHookRef = useViewport()\n\n    const refInstance = ref<HTMLElement>()\n    // 该组件内部缓存的ref\n    const viewportRef = ref<ViewportType>()\n    const isFrameRef = ref(false)\n\n    onMounted(() => {\n      const ref = refInstance\n      const frameElement = ref.value?.querySelector('iframe')\n      if (!viewportHookRef.value) return\n      if (viewportRef.value && viewportRef.value !== viewportHookRef.value) {\n        viewportRef.value.onUnmount()\n      }\n      if (frameElement) {\n        frameElement.addEventListener('load', () => {\n          viewportHookRef.value.onMount(\n            frameElement,\n            frameElement.contentWindow\n          )\n          requestIdle(() => {\n            isFrameRef.value = true\n            loaded.value = true\n          })\n        })\n      } else {\n        viewportHookRef.value.onMount(ref.value, window)\n        requestIdle(() => {\n          isFrameRef.value = false\n          loaded.value = true\n        })\n      }\n      viewportRef.value = viewportHookRef.value\n    })\n\n    onBeforeUnmount(() => {\n      viewportHookRef.value.onUnmount()\n    })\n\n    const style = useStyle()\n\n    return () => {\n      return (\n        <div\n          ref={refInstance}\n          class={cls(prefixRef.value)}\n          style={{\n            opacity: !loaded ? 0 : 1,\n            overflow: isFrameRef.value ? 'hidden' : 'overlay',\n            ...style,\n          }}\n        >\n          {slots.default?.()}\n          <AuxToolWidget />\n          <EmptyWidget {...{ dragTipsDirection: props.dragTipsDirection }}>\n            {props.placeholder}\n          </EmptyWidget>\n        </div>\n      )\n    }\n  },\n})\n"]}