{"version":3,"file":"index.mjs","sources":["../../../../../../packages/components/controls/navigation/index.ts"],"sourcesContent":["/*\n * @Author: zouyaoji@https://github.com/zouyaoji\n * @Date: 2021-10-27 15:54:13\n * @LastEditTime: 2022-08-19 22:42:25\n * @LastEditors: zouyaoji\n * @Description:\n * @FilePath: \\vue-cesium@next\\packages\\components\\controls\\navigation\\index.ts\n */\nimport type { VNode, CSSProperties } from 'vue'\nimport { defineComponent, getCurrentInstance, watch, nextTick, ref, reactive, h, createCommentVNode, computed } from 'vue'\nimport type {\n  VcCompassEvt,\n  VcDistanceLegendEvt,\n  VcLocationEvt,\n  VcPrintEvt,\n  VcStatusBarEvt,\n  VcComponentInternalInstance,\n  VcZoomEvt,\n  VcReadyObject,\n  VcComponentPublicInstance\n} from 'casc-cesium-utils/types'\nimport usePosition from 'casc-cesium-composables/private/use-position'\nimport { $, getInstanceListener } from 'casc-cesium-utils/private/vm'\nimport { hMergeSlot } from 'casc-cesium-utils/private/render'\nimport { defaultProps, defaultOptions, VcNavigationOtherOpts } from './defaultProps'\nimport { useCommon } from 'casc-cesium-composables'\nimport VcDistanceLegend from '../distance-legend'\nimport VcStatusBar from '../status-bar'\nimport VcZoomControl from '../zoom-control'\nimport VcMyLocation from '../my-location'\nimport VcCompass from '../compass'\nimport VcPrint from '../print'\nimport type { VcPrintProps, VcPrintRef } from '../print'\nimport type { VcCompassProps, VcCompassRef } from '../compass'\nimport type { VcMyLocationProps, VcMyLocationRef } from '../my-location'\nimport type { VcZoomControlProps, VcZoomControlRef } from '../zoom-control'\nimport type { VcStatusBarRef } from '../status-bar'\nimport type { VcDistanceLegendRef } from '../distance-legend'\nimport { commonEmits } from 'casc-cesium-utils/emits'\n\nconst emits = {\n  ...commonEmits,\n  zoomEvt: (evt: VcZoomEvt) => true,\n  compassEvt: (evt: VcCompassEvt) => true,\n  locationEvt: (evt: VcLocationEvt) => true,\n  printEvt: (evt: VcPrintEvt) => true,\n  statusBarEvt: (evt: VcStatusBarEvt) => true,\n  distanceLegendEvt: (evt: VcDistanceLegendEvt) => true\n}\nexport const navigationProps = defaultProps\nexport default defineComponent({\n  name: 'VcNavigation',\n  inheritAttrs: false,\n  props: navigationProps,\n  emits: emits,\n  setup(props: VcNavigationProps, ctx) {\n    // state\n    const instance = getCurrentInstance() as VcComponentInternalInstance\n    instance.cesiumClass = 'VcNavigation'\n    const commonState = useCommon(props, ctx, instance)\n    if (commonState === void 0) {\n      return\n    }\n\n    const canRender = ref(false)\n    const { $services } = commonState\n    const positionState = usePosition(props, $services)\n    const positionStateOther = usePosition(props.otherOpts || { position: 'bottom-right' }, $services)\n    const rootRef = ref<HTMLElement>(null)\n    const secondRootRef = ref<HTMLElement>(null)\n    const compassRef = ref<VcCompassRef>(null)\n    const zoomControlRef = ref<VcZoomControlRef>(null)\n    const printRef = ref<VcPrintRef>(null)\n    const myLocationRef = ref<VcMyLocationRef>(null)\n    const statusBarRef = ref<VcStatusBarRef>(null)\n    const distanceLegendRef = ref<VcDistanceLegendRef>(null)\n    const rootStyle = reactive<CSSProperties>({})\n    const secondRootStyle = reactive<CSSProperties>({})\n    const { emit } = ctx\n    // watch\n    watch(\n      () => props,\n      () => {\n        nextTick(() => {\n          updateRootStyle()\n          $(compassRef)?.reload()\n          $(zoomControlRef)?.reload()\n          $(myLocationRef)?.reload()\n          $(printRef)?.reload()\n          $(statusBarRef)?.reload()\n          $(distanceLegendRef)?.reload()\n        })\n      },\n      {\n        deep: true\n      }\n    )\n\n    const compassOptions = computed(() => Object.assign({}, defaultOptions.compassOpts, props.compassOpts))\n    const zoomControlOptions = computed<VcZoomControlProps>(() => Object.assign({}, defaultOptions.zoomOpts, props.zoomOpts))\n    const printViewOptions = computed<VcPrintProps>(() => Object.assign({}, defaultOptions.printOpts, props.printOpts))\n    const myLocationOptions = computed<false | VcMyLocationProps>(() => Object.assign({}, defaultOptions.locationOpts, props.locationOpts))\n    const otherControlOptions = computed(() => Object.assign({}, defaultOptions.otherOpts, props.otherOpts))\n\n    // methods\n    const onCompassEvt = (evt: VcCompassEvt) => {\n      const listener = getInstanceListener(instance, 'compassEvt')\n      listener && emit('compassEvt', evt)\n    }\n    const onZoomEvt = (evt: VcZoomEvt) => {\n      const listener = getInstanceListener(instance, 'zoomEvt')\n      listener && emit('zoomEvt', evt)\n    }\n    const onPrintEvt = (evt: VcPrintEvt) => {\n      const listener = getInstanceListener(instance, 'printEvt')\n      listener && emit('printEvt', evt)\n    }\n    const onLocationEvt = (evt: VcLocationEvt) => {\n      const listener = getInstanceListener(instance, 'locationEvt')\n      listener && emit('locationEvt', evt)\n    }\n    const onStatusBarEvt = (evt: VcStatusBarEvt) => {\n      const listener = getInstanceListener(instance, 'statusBarEvt')\n      listener && emit('statusBarEvt', evt)\n    }\n    const onDistanceLegendEvt = (evt: VcDistanceLegendEvt) => {\n      const listener = getInstanceListener(instance, 'distanceLegendEvt')\n      listener && emit('distanceLegendEvt', evt)\n    }\n\n    instance.createCesiumObject = async () => {\n      canRender.value = true\n      const { viewer } = $services\n      viewer.viewerWidgetResized?.addEventListener(onViewerWidgetResized)\n      return new Promise((resolve, reject) => {\n        nextTick(() => {\n          const viewerElement = (viewer as any)._element\n          if (props.teleportToViewer) {\n            viewerElement.appendChild($(rootRef))\n            $(secondRootRef) && viewerElement.appendChild($(secondRootRef))\n          }\n\n          resolve([$(rootRef), $(secondRootRef)])\n        })\n      })\n    }\n\n    instance.mount = async () => {\n      updateRootStyle()\n      const { viewer } = $services\n      viewer.viewerWidgetResized?.raiseEvent({\n        type: instance.cesiumClass,\n        status: 'mounted',\n        target: $(rootRef)\n      })\n      return true\n    }\n\n    instance.unmount = async () => {\n      const { viewer } = $services\n      const viewerElement = (viewer as any)._element\n      viewerElement.contains($(rootRef)) && viewerElement.removeChild($(rootRef))\n      viewerElement.contains($(secondRootRef)) && viewerElement.removeChild($(secondRootRef))\n      viewer.viewerWidgetResized?.removeEventListener(onViewerWidgetResized)\n      viewer.viewerWidgetResized?.raiseEvent({\n        type: instance.cesiumClass,\n        status: 'unmounted',\n        target: $(rootRef)\n      })\n      return true\n    }\n\n    const onViewerWidgetResized = () => {\n      nextTick(() => {\n        updateRootStyle()\n      })\n    }\n\n    const updateRootStyle = () => {\n      const compassTarget = $(compassRef)?.$el as HTMLElement\n      let height = 0\n      let marginX = 0\n      if (compassTarget !== void 0) {\n        const margin = getComputedStyle(compassTarget.parentNode as Element).margin\n        marginX = parseInt(margin)\n        height += compassTarget.getBoundingClientRect().height + marginX * 2\n      }\n      const zoomControlTarget = $(zoomControlRef)?.$el as HTMLElement\n      if (zoomControlTarget !== void 0) {\n        height += zoomControlTarget.getBoundingClientRect().height + marginX * 2\n      }\n      const printTarget = $(printRef)?.$el as HTMLElement\n      if (printTarget !== void 0) {\n        height += printTarget.getBoundingClientRect().height + marginX * 2\n      }\n      const myLocationTarget = $(myLocationRef)?.$el as HTMLElement\n      if (myLocationTarget !== void 0) {\n        height += myLocationTarget.getBoundingClientRect().height + marginX * 2\n      }\n\n      const css: CSSProperties = positionState.style.value\n      const side = positionState.attach.value\n      rootStyle.left = css.left\n      rootStyle.top = css.top\n      rootStyle.transform = css.transform\n\n      if (typeof props.teleportToViewer === 'undefined' || props.teleportToViewer) {\n        if ((side.bottom || side.top) && !side.left && !side.right) {\n          css.left = '50%'\n          css.transform = 'translate(-50%, 0)'\n        }\n\n        if ((side.left || side.right) && !side.top && !side.bottom) {\n          css.top = '50%'\n          css.transform = 'translate(0, -50%)'\n        }\n      }\n\n      Object.assign(rootStyle, css, { height: `${height}px` })\n\n      const cssSecondRoot: CSSProperties = positionStateOther.style.value\n      const sideSecondRoot = positionStateOther.attach.value\n      secondRootStyle.left = cssSecondRoot.left\n      secondRootStyle.top = cssSecondRoot.top\n      secondRootStyle.transform = cssSecondRoot.transform\n\n      if (typeof props.teleportToViewer === 'undefined' || props.teleportToViewer) {\n        if ((sideSecondRoot.bottom || sideSecondRoot.top) && !sideSecondRoot.left && !sideSecondRoot.right) {\n          cssSecondRoot.left = '50%'\n          cssSecondRoot.transform = 'translate(-50%, 0)'\n        }\n\n        if ((sideSecondRoot.left || sideSecondRoot.right) && !sideSecondRoot.top && !sideSecondRoot.bottom) {\n          cssSecondRoot.top = '50%'\n          cssSecondRoot.transform = 'translate(0, -50%)'\n        }\n      }\n\n      let height2 = 0\n      const statusBarRefTarget = $(statusBarRef)?.$el as HTMLElement\n      if (statusBarRefTarget !== void 0) {\n        height2 += statusBarRefTarget.getBoundingClientRect().height\n      }\n      Object.assign(secondRootStyle, cssSecondRoot, { height: `${height2}px` })\n    }\n\n    return () => {\n      if (canRender.value) {\n        const inner: VNode[] = []\n        if (compassOptions.value && props.compassOpts !== false) {\n          inner.push(\n            h(\n              'div',\n              {\n                class: 'vc-navigation-control'\n              },\n              [\n                h(VcCompass, {\n                  ref: compassRef,\n                  ...compassOptions.value,\n                  onCompassEvt\n                })\n              ]\n            )\n          )\n        } else {\n          inner.push(createCommentVNode('v-if'))\n        }\n        if (zoomControlOptions.value && props.zoomOpts !== false) {\n          inner.push(\n            h(\n              'div',\n              {\n                class: 'vc-navigation-control'\n              },\n              [\n                h(VcZoomControl, {\n                  ref: zoomControlRef,\n                  ...zoomControlOptions.value,\n                  onZoomEvt\n                })\n              ]\n            )\n          )\n        } else {\n          inner.push(createCommentVNode('v-if'))\n        }\n        if (printViewOptions.value && props.printOpts !== false) {\n          inner.push(\n            h(\n              'div',\n              {\n                class: 'vc-navigation-control'\n              },\n              [\n                h(VcPrint, {\n                  ref: printRef,\n                  ...printViewOptions.value,\n                  onPrintEvt\n                })\n              ]\n            )\n          )\n        } else {\n          inner.push(createCommentVNode('v-if'))\n        }\n\n        if (myLocationOptions.value && props.locationOpts !== false) {\n          inner.push(\n            h(\n              'div',\n              {\n                class: 'vc-navigation-control'\n              },\n              [\n                h(VcMyLocation, {\n                  ref: myLocationRef,\n                  ...myLocationOptions.value,\n                  onLocationEvt\n                })\n              ]\n            )\n          )\n        } else {\n          inner.push(createCommentVNode('v-if'))\n        }\n\n        let children = [h('div', { class: 'vc-navigation-controls' }, inner)]\n        children = hMergeSlot(ctx.slots.default, children)\n\n        const root: VNode[] = []\n        root.push(\n          h(\n            'div',\n            {\n              ref: rootRef,\n              class: `vc-navigation ${positionState.classes.value} ${props.customClass}`,\n              style: rootStyle\n            },\n            children\n          )\n        )\n        if (props.otherOpts !== false) {\n          root.push(\n            h(\n              'div',\n              {\n                ref: secondRootRef,\n                class: 'vc-location-other-controls ' + positionStateOther.classes.value,\n                style: secondRootStyle\n              },\n              [\n                h(VcStatusBar, {\n                  ref: statusBarRef,\n                  ...otherControlOptions.value.statusBarOpts,\n                  onStatusBarEvt\n                }),\n                h(VcDistanceLegend, {\n                  ref: distanceLegendRef,\n                  ...otherControlOptions.value.distancelegendOpts,\n                  onDistanceLegendEvt\n                })\n              ]\n            )\n          )\n        }\n        return root\n      } else {\n        return createCommentVNode('v-if')\n      }\n    }\n  }\n})\n\nexport type VcNavigationEmits = typeof emits\nexport interface VcNavigationProps {\n  /**\n   * Specify the position of the VcNavigation.\n   * Default value: top-right\n   */\n  position?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'top' | 'right' | 'bottom' | 'left'\n  /**\n   * An array of two numbers to offset the VcNavigation horizontally and vertically in pixels.\n   * Default value: [0, 0]\n   */\n  offset?: [number, number]\n  /**\n   * Specify the compass options of the component. false means no display.\n   */\n  compassOpts?: false | VcCompassProps\n  /**\n   * Specify the zoom control options of the component. false means no display.\n   */\n  zoomOpts?: false | VcZoomControlProps\n  /**\n   * Specify the print button options of the component. false means no display.\n   */\n  printOpts?: false | VcPrintProps\n  /**\n   * Specify the location button options of the component. false means no display.\n   */\n  locationOpts?: false | VcMyLocationProps\n  /**\n   * Specify the other controls(status bar & distance legend) options of the component. false means no display.\n   */\n  otherOpts?: false | VcNavigationOtherOpts\n  /**\n   * Specify the customClass of the vc-navigation.\n   */\n  customClass?: string\n  /**\n   * Specify whether to add to the cesium-viewer node.\n   * Default value: true\n   */\n  teleportToViewer?: boolean\n  /**\n   * Triggers before the VcNavigation is loaded.\n   */\n  onBeforeLoad?: (instance: VcComponentInternalInstance) => void\n  /**\n   * Triggers when the VcNavigation 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 VcNavigation is destroyed.\n   */\n  onDestroyed?: (instance: VcComponentInternalInstance) => void\n  /**\n   * Triggers when the zoom control is operated.\n   */\n  onZoomEvt?: (evt: VcZoomEvt) => void\n  /**\n   * Triggers when the compass control is operated.\n   */\n  onCompassEvt?: (evt: VcCompassEvt) => void\n  /**\n   * Triggers when the positioning button is clicked.\n   */\n  onLocationEvt?: (evt: VcLocationEvt) => void\n  /**\n   * Triggers when the print button is clicked.\n   */\n  onPrintEvt?: (evt: VcPrintEvt) => void\n  /**\n   * Triggers when the information changed.\n   */\n  onStatusBarEvt?: (evt: VcStatusBarEvt) => void\n  /**\n   * Triggers when the distance scale changed.\n   */\n  onDistanceLegendEvt?: (evt: VcDistanceLegendEvt) => void\n}\n\nexport interface VcNavigationSlots {\n  /**\n   * Suggestion: VcCompass, VcZoomControl, VcPrint, VcMyLocation, VcStatusBar, VcDistanceLegend\n   */\n  default: () => VNode[]\n}\n\nexport type VcNavigationRef = VcComponentPublicInstance<VcNavigationProps>\n"],"names":["VcCompass","VcZoomControl","VcPrint","VcMyLocation","VcStatusBar","VcDistanceLegend"],"mappings":"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"}