{"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-11-05 00:39:45\n * @LastEditors: zouyaoji\n * @Description:\n * @FilePath: \\vue-cesium@next\\packages\\components\\controls\\navigation\\index.ts\n */\nimport { VNode, CSSProperties, Teleport } 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 '@vue-cesium/utils/types'\nimport usePosition from '@vue-cesium/composables/private/use-position'\nimport { $, getInstanceListener } from '@vue-cesium/utils/private/vm'\nimport { hMergeSlot } from '@vue-cesium/utils/private/render'\nimport { defaultProps, defaultOptions, VcNavigationOtherOpts } from './defaultProps'\nimport { useCommon } from '@vue-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 '@vue-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\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      const { viewer } = $services\n      viewer.viewerWidgetResized?.addEventListener(onViewerWidgetResized)\n      return [rootRef, secondRootRef]\n    }\n\n    instance.mount = async () => {\n      canRender.value = true\n      nextTick(() => {\n        updateRootStyle()\n      })\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      canRender.value = false\n      const { viewer } = $services\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 && compassTarget.nodeName !== '#comment') {\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 && zoomControlTarget.nodeName !== '#comment') {\n        height += zoomControlTarget.getBoundingClientRect().height + marginX * 2\n      }\n      const printTarget = $(printRef)?.$el as HTMLElement\n      if (printTarget !== void 0 && printTarget.nodeName !== '#comment') {\n        height += printTarget.getBoundingClientRect().height + marginX * 2\n      }\n      const myLocationTarget = $(myLocationRef)?.$el as HTMLElement\n      if (myLocationTarget !== void 0 && myLocationTarget.nodeName !== '#comment') {\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 && statusBarRefTarget.nodeName !== '#comment') {\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        const renderNavigationContent = 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.teleportToViewer) {\n          root.push(h(Teleport, { to: $services.viewer._element }, renderNavigationContent))\n        } else {\n          root.push(renderNavigationContent)\n        }\n\n        if (props.otherOpts !== false) {\n          const renderOtherContent = 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          if (props.teleportToViewer) {\n            root.push(h(Teleport, { to: $services.viewer._element }, renderOtherContent))\n          } else {\n            root.push(renderOtherContent)\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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"}