{"version":3,"file":"index.mjs","sources":["../../../../../../packages/components/controls/distance-legend/index.ts"],"sourcesContent":["import type { CSSProperties } from 'vue'\nimport { computed, createCommentVNode, defineComponent, getCurrentInstance, h, nextTick, reactive, ref, watch } from 'vue'\nimport { $, getInstanceListener, getVcParentInstance } from 'casc-cesium-utils/private/vm'\nimport usePosition from 'casc-cesium-composables/private/use-position'\nimport type { VcDistanceLegendEvt, VcComponentInternalInstance, VcReadyObject, VcComponentPublicInstance } from 'casc-cesium-utils/types'\nimport throttle from 'casc-cesium-utils/private/throttle'\nimport { useCommon } from 'casc-cesium-composables'\nimport defaultProps from './defaultProps'\nimport { VcBtn } from 'casc-cesium-components/ui'\nimport type { VcBtnRef } from 'casc-cesium-components/ui'\nimport { commonEmits } from 'casc-cesium-utils/emits'\n\nconst emits = {\n  ...commonEmits,\n  distanceLegendEvt: (evt: VcDistanceLegendEvt) => true\n}\n\nexport const distanceLegendProps = defaultProps\nexport default defineComponent({\n  name: 'VcDistanceLegend',\n  props: distanceLegendProps,\n  emits: emits,\n  setup(props: VcDistanceLegendProps, ctx) {\n    // state\n    const instance = getCurrentInstance() as VcComponentInternalInstance\n    instance.cesiumClass = 'VcDistanceLegend'\n    instance.cesiumEvents = []\n    const commonState = useCommon(props, ctx, instance)\n    if (commonState === void 0) {\n      return\n    }\n    const parentInstance = getVcParentInstance(instance)\n    const { $services } = commonState\n    const rootRef = ref<VcBtnRef>(null)\n    const distanceLabel = ref<string>('')\n    const positionState = usePosition(props, $services)\n    const hasVcNavigation = parentInstance.proxy?.$options.name === 'VcNavigation'\n    const canRender = ref(hasVcNavigation)\n    const rootStyle = reactive<CSSProperties>({})\n    let lastLegendUpdate = 0\n    const barWidth = ref(0)\n    let distance = 0\n    // watch\n    watch(\n      () => props,\n      val => {\n        nextTick(() => {\n          if (!instance.mounted) {\n            return\n          }\n          updateRootStyle()\n        })\n      },\n      {\n        deep: true\n      }\n    )\n    const barStyle = computed(() => {\n      return {\n        width: `${barWidth.value}px`,\n        left: `${5 + (props.width + 15 - barWidth.value) / 2}px`,\n        height: '2px',\n        background: props.barBackground\n      }\n    })\n    // methods\n    instance.createCesiumObject = async () => {\n      canRender.value = true\n      distanceLabel.value = ''\n      return new Promise((resolve, reject) => {\n        nextTick(() => {\n          const { viewer } = $services\n          if (!hasVcNavigation && props.teleportToViewer) {\n            const viewerElement = (viewer as any)._element\n            viewerElement.appendChild($(rootRef)?.$el)\n            resolve($(rootRef)?.$el)\n          } else {\n            resolve($(rootRef)?.$el)\n          }\n\n          viewer.scene.postRender.addEventListener(onScenePostRender)\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)?.$el\n      })\n      return true\n    }\n\n    instance.unmount = async () => {\n      const { viewer } = $services\n      viewer.scene.postRender.removeEventListener(onScenePostRender)\n      const viewerElement = (viewer as any)._element as HTMLElement\n\n      if (!hasVcNavigation) {\n        viewerElement.contains($(rootRef)?.$el) && viewerElement.removeChild($(rootRef)?.$el)\n      }\n\n      viewer.viewerWidgetResized?.raiseEvent({\n        type: instance.cesiumClass,\n        status: 'unmounted',\n        target: $(rootRef)?.$el\n      })\n\n      return true\n    }\n\n    const updateRootStyle = () => {\n      const css: CSSProperties = positionState.style.value\n      rootStyle.left = css.left\n      rootStyle.top = css.top\n      rootStyle.transform = css.transform\n\n      css.background = props.background\n      css.color = props.color\n\n      if (typeof props.teleportToViewer === 'undefined' || props.teleportToViewer) {\n        const side = positionState.attach.value\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      css.width = `${props.width}px`\n\n      Object.assign(rootStyle, css)\n    }\n\n    const onScenePostRender = throttle(scene => {\n      const { Cartesian2, defined, getTimestamp, EllipsoidGeodesic } = Cesium\n      const now = getTimestamp()\n      if (now < lastLegendUpdate + 250) {\n        return\n      }\n\n      lastLegendUpdate = now\n      const geodesic = new EllipsoidGeodesic()\n      // Find the distance between two pixels at the bottom center of the screen.\n      const width = scene.canvas.clientWidth\n      const height = scene.canvas.clientHeight\n\n      const left = scene.camera.getPickRay(new Cartesian2((width / 2) | 0, height - 1))\n      const right = scene.camera.getPickRay(new Cartesian2((1 + width / 2) | 0, height - 1))\n\n      const globe = scene.globe\n      const leftPosition = globe.pick(left, scene)\n      const rightPosition = globe.pick(right, scene)\n\n      if (!defined(leftPosition) || !defined(rightPosition)) {\n        barWidth.value = 0\n        distanceLabel.value = ''\n        return\n      }\n\n      const leftCartographic = globe.ellipsoid.cartesianToCartographic(leftPosition)\n      const rightCartographic = globe.ellipsoid.cartesianToCartographic(rightPosition)\n\n      geodesic.setEndPoints(leftCartographic, rightCartographic)\n      const pixelDistance = geodesic.surfaceDistance\n\n      // Find the first distance that makes the scale bar less than 100 pixels.\n      const maxBarWidth = props.width - 10\n      let _distance\n      for (let i = distances.length - 1; !defined(_distance) && i >= 0; --i) {\n        if (distances[i] / pixelDistance < maxBarWidth) {\n          _distance = distances[i]\n          if (distance !== _distance) {\n            distance = _distance\n            const listener = getInstanceListener(instance, 'distanceLegendEvt')\n            listener &&\n              ctx.emit('distanceLegendEvt', {\n                type: 'distanceLegend',\n                distance,\n                status: 'changed'\n              })\n          }\n        }\n      }\n\n      if (defined(_distance)) {\n        let label\n        if (distance >= 1000) {\n          label = (_distance / 1000).toString() + ' km'\n        } else {\n          label = _distance.toString() + ' m'\n        }\n\n        barWidth.value = (_distance / pixelDistance) | 0\n        distanceLabel.value = label\n      } else {\n        barWidth.value = 0\n        distanceLabel.value = ''\n      }\n    }, 500)\n\n    return () => {\n      if (canRender.value && distanceLabel.value !== void 0) {\n        return h(\n          VcBtn,\n          {\n            ref: rootRef,\n            class: `vc-distance-legend ${positionState.classes.value} ${props.customClass}`,\n            style: rootStyle,\n            stack: true,\n            noCaps: true\n          },\n          () => [\n            h('label', null, distanceLabel.value),\n            h('div', {\n              style: barStyle.value,\n              class: 'vc-bar'\n            })\n          ]\n        )\n      } else {\n        return createCommentVNode('v-if')\n      }\n    }\n  }\n})\n\nconst distances = [\n  1, 2, 3, 5, 10, 20, 30, 50, 100, 200, 300, 500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 50000, 100000, 200000, 300000, 500000, 1000000,\n  2000000, 3000000, 5000000, 10000000, 20000000, 30000000, 50000000\n]\n\nexport type VcDistanceLegendEmits = typeof emits\nexport type VcDistanceLegendProps = {\n  /**\n   * Specify the position of the VcDistanceLegend.\n   * Default value: bottom-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 VcDistanceLegend horizontally and vertically in pixels.\n   * Default value: [0, 0]\n   */\n  offset?: [number, number]\n  /**\n   * Specify the css color of the VcDistanceLegend.\n   * Default value: #fff\n   */\n  color?: string\n  /**\n   * Specify the css background of the VcDistanceLegend.\n   * Default value: #3f4854\n   */\n  background?: string\n  /**\n   * Specify the width of the VcDistanceLegend.\n   * Default value: 100\n   */\n  width?: number\n  /**\n   * Specify the css color of the horizontal line on the VcDistanceLegend.\n   * Default value: #fff\n   */\n  barBackground?: string\n  /**\n   * Specify the customClass of the vc-distance-legend.\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 VcCompass is loaded.\n   */\n  onBeforeLoad?: (instance: VcComponentInternalInstance) => void\n  /**\n   * Triggers when the VcCompass 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 VcCompass is destroyed.\n   */\n  onDestroyed?: (instance: VcComponentInternalInstance) => void\n  /**\n   * Triggers when the distance scale changed.\n   */\n  onDistanceLegendEvt?: (evt: VcDistanceLegendEvt) => void\n}\n\nexport type VcDistanceLegendRef = VcComponentPublicInstance<VcDistanceLegendProps>\n"],"names":["defaultProps"],"mappings":"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"}