{"version":3,"file":"index.mjs","sources":["../../../../../../packages/components/overlays/html/index.ts"],"sourcesContent":["import type { CSSProperties, TeleportProps, PropType, WatchStopHandle, VNode } from 'vue'\nimport { defineComponent, getCurrentInstance, ref, h, reactive, createCommentVNode, watch, onUnmounted } from 'vue'\nimport type { VcCartesian2, VcComponentInternalInstance, VcComponentPublicInstance, VcPosition, VcReadyObject } from 'casc-cesium-utils/types'\nimport { $ } from 'casc-cesium-utils/private/vm'\nimport { useCommon } from 'casc-cesium-composables'\nimport { hSlot } from 'casc-cesium-utils/private/render'\nimport { position, pixelOffset, show } from 'casc-cesium-utils/cesium-props'\nimport { makeCartesian2, makeCartesian3 } from 'casc-cesium-utils/cesium-helpers'\nimport usePortal from 'casc-cesium-composables/private/use-portal'\nimport { commonEmits } from 'casc-cesium-utils/emits'\n\nexport const htmlOverlayProps = {\n  ...position,\n  ...pixelOffset,\n  ...show,\n  autoHidden: {\n    type: Boolean,\n    default: true\n  },\n  customClass: String,\n  teleport: Object as PropType<TeleportProps>\n}\nconst emits = {\n  ...commonEmits,\n  mouseenter: (evt: MouseEvent) => true,\n  mouseleave: (evt: MouseEvent) => true,\n  click: (evt: MouseEvent) => true\n}\nexport default defineComponent({\n  name: 'VcOverlayHtml',\n  props: htmlOverlayProps,\n  emits: emits,\n  setup(props: VcOverlayHtmlProps, ctx) {\n    // state\n    const instance = getCurrentInstance() as VcComponentInternalInstance\n    instance.cesiumClass = 'VcOverlayHtml'\n    instance.cesiumEvents = []\n    const commonState = useCommon(props, ctx, instance)\n    if (commonState === void 0) {\n      return\n    }\n    const { $services } = commonState\n    const canRender = ref(false)\n    const rootRef = ref<HTMLElement>(null!)\n    const rootStyle = reactive<CSSProperties>({})\n    const offset = ref<Cesium.Cartesian2>(null!)\n    const position = ref<Cesium.Cartesian3>(null!)\n    const lastCanvasPosition = ref<Cesium.Cartesian2>(null!)\n\n    // watcch\n    let unwatchFns: Array<WatchStopHandle> = []\n    unwatchFns.push(\n      watch(\n        () => props.position,\n        val => {\n          position.value = makeCartesian3(val as any, $services.viewer.scene.globe.ellipsoid) as Cesium.Cartesian3\n        }\n      )\n    )\n\n    unwatchFns.push(\n      watch(\n        () => props.pixelOffset,\n        val => {\n          offset.value = makeCartesian2(val) as Cesium.Cartesian2\n        }\n      )\n    )\n\n    unwatchFns.push(\n      watch(\n        () => props.show,\n        val => {\n          rootStyle.display = val ? 'block' : 'none'\n        }\n      )\n    )\n    // methods\n    instance.createCesiumObject = async () => {\n      return $(rootRef)\n    }\n    instance.mount = async () => {\n      const { viewer } = $services\n      canRender.value = true\n      showPortal()\n      offset.value = makeCartesian2(props.pixelOffset) as Cesium.Cartesian2\n      position.value = makeCartesian3(props.position!, viewer.scene.globe.ellipsoid) as Cesium.Cartesian3\n      viewer.scene.preRender.addEventListener(onPreRender)\n      return true\n    }\n    instance.unmount = async () => {\n      const { viewer } = $services\n      viewer.scene.preRender.removeEventListener(onPreRender)\n      canRender.value = false\n      hidePortal()\n      return true\n    }\n    const onPreRender = () => {\n      const { viewer } = $services\n      if (position.value) {\n        const canvasPosition = viewer.scene.cartesianToCanvasCoordinates(position.value, {} as any)\n        if (Cesium.defined(canvasPosition) && !Cesium.Cartesian2.equals(lastCanvasPosition.value, canvasPosition)) {\n          rootStyle.left = canvasPosition.x + offset.value.x + 'px'\n          rootStyle.top = canvasPosition.y + offset.value.y + 'px'\n\n          if (props.autoHidden) {\n            const cameraPosition = viewer.camera.position\n            const cartographicPosition = viewer.scene.globe.ellipsoid.cartesianToCartographic(cameraPosition)\n            if (Cesium.defined(cartographicPosition)) {\n              let cameraHeight = cartographicPosition.height\n              cameraHeight += 1 * viewer.scene.globe.ellipsoid.maximumRadius\n              if (Cesium.Cartesian3.distance(cameraPosition, position.value) > cameraHeight || !props.show) {\n                rootStyle.display = 'none'\n              } else {\n                rootStyle.display = 'block'\n              }\n            }\n          } else {\n            rootStyle.display = 'block'\n          }\n        }\n\n        lastCanvasPosition.value = canvasPosition\n      }\n    }\n\n    // life cycle\n    onUnmounted(() => {\n      unwatchFns.forEach(item => item())\n      unwatchFns = []\n    })\n\n    const renderContent = () => {\n      if (canRender.value) {\n        return h(\n          'div',\n          {\n            ref: rootRef,\n            class: `vc-html-container${props.customClass ? ' ' + props.customClass : ''}`,\n            style: rootStyle,\n            onMouseenter: onMouseenter,\n            onMouseleave: onMouseleave,\n            onClick: onClick\n          },\n          hSlot(ctx.slots.default)\n        )\n      } else {\n        return createCommentVNode('v-if')\n      }\n    }\n\n    const onClick = evt => {\n      ctx.emit('click', evt)\n    }\n\n    const onMouseenter = evt => {\n      ctx.emit('mouseenter', evt)\n    }\n\n    const onMouseleave = evt => {\n      ctx.emit('mouseleave', evt)\n    }\n\n    const renderPortalContent = () => {\n      return renderContent()\n    }\n\n    const { showPortal, hidePortal, renderPortal } = usePortal(instance, rootRef, renderPortalContent)\n    if (props.teleport && props.teleport.to && !props.teleport.disabled) {\n      return renderPortal\n    } else {\n      return () => renderContent()\n    }\n  }\n})\n\nexport type VcOverlayHtmlEmits = typeof emits\nexport interface VcOverlayHtmlProps {\n  /**\n   * Specify the geographic location of the HTML element.\n   */\n  position?: VcPosition\n  /**\n   * Specify the pixel offset of the HTML.\n   */\n  pixelOffset?: VcCartesian2\n  /**\n   * Specify whether to display the HTML overlay.\n   * Default value: true\n   */\n  show?: boolean\n  /**\n   * Specifies whether HTML is automatically hidden when it is on the back of the earth.\n   * Default value: true\n   */\n  autoHidden?: boolean\n  /**\n   * Specify an HTML custom class.\n   */\n  customClass?: string\n  /**\n   * Specify the teleport props.\n   */\n  teleport?: TeleportProps\n  /**\n   * Triggers before the VcOverlayHtml is loaded.\n   */\n  onBeforeLoad?: (instance: VcComponentInternalInstance) => void\n  /**\n   * Triggers when the VcOverlayHtml is successfully loaded.\n   */\n  onReady?: (readyObject: VcReadyObject) => void\n  /**\n   * Triggers when the component load failed.\n   */\n  onUnready?: (e: any) => void\n  /**\n   * Triggers when the VcOverlayHtml is destroyed.\n   */\n  onDestroyed?: (instance: VcComponentInternalInstance) => void\n}\n\nexport type VcOverlayHtmlRef = VcComponentPublicInstance<VcOverlayHtmlProps>\nexport type VcOverlayHtmlSlots = {\n  /**\n   * Slot for html element tag.\n   */\n  default: () => VNode[]\n}\n"],"names":[],"mappings":"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"}