{"version":3,"file":"index.mjs","sources":["../../../../../../packages/components/controls/navigation-sm/index.ts"],"sourcesContent":["import type { CSSProperties, VNode, PropType } from 'vue'\nimport { defineComponent, getCurrentInstance, watch, nextTick, ref, reactive, h, createCommentVNode, computed } from 'vue'\nimport type { VcCompassEvt, VcComponentInternalInstance, VcComponentPublicInstance, VcReadyObject, VcZoomEvt } from '@vue-cesium/utils/types'\nimport usePosition, { positionProps } from '@vue-cesium/composables/private/use-position'\nimport { $, getInstanceListener } from '@vue-cesium/utils/private/vm'\nimport { hMergeSlot } from '@vue-cesium/utils/private/render'\nimport { useCommon } from '@vue-cesium/composables'\nimport VcCompassSm from './compass-sm'\nimport VcZoomControlSm from './zoom-control-sm'\nimport type { VcZoomControlSmProps, VcZoomControlSmRef } from './zoom-control-sm'\nimport type { VcCompassSmProps, VcCompassSmRef } from './compass-sm'\nimport { commonEmits } from '@vue-cesium/utils/emits'\n\nconst compassOptsDefault = {\n  enableCompassOuterRing: true,\n  duration: 1.5,\n  autoHidden: true,\n  tooltip: {\n    delay: 1000,\n    anchor: 'bottom middle',\n    offset: [0, 20],\n    tip: void 0\n  }\n}\n\nconst zoomOptsDefault = {\n  autoHidden: true,\n  tooltip: {\n    delay: 1000,\n    anchor: 'bottom middle',\n    offset: [0, 20],\n    tip: void 0\n  }\n}\n\nexport const navigationSmProps = {\n  ...positionProps,\n  compassOpts: {\n    type: [Boolean, Object] as PropType<false | VcCompassSmProps>,\n    default: () => compassOptsDefault as VcCompassSmProps\n  },\n  zoomOpts: {\n    type: [Boolean, Object] as PropType<false | VcZoomControlSmProps>,\n    default: () => zoomOptsDefault as VcZoomControlSmProps\n  }\n}\nconst emits = {\n  ...commonEmits,\n  zoomEvt: (evt: VcZoomEvt) => true,\n  compassEvt: (evt: VcCompassEvt) => true\n}\nexport default defineComponent({\n  name: 'VcNavigationSm',\n  inheritAttrs: false,\n  props: navigationSmProps,\n  emits: emits,\n  setup(props: VcNavigationSmProps, ctx) {\n    // state\n    const instance = getCurrentInstance() as VcComponentInternalInstance\n    instance.cesiumClass = 'VcNavigationSm'\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 rootRef = ref<HTMLElement>(null)\n    const compassRef = ref<VcCompassSmRef>(null)\n    const zoomControlRef = ref<VcZoomControlSmRef>(null)\n    const rootStyle = reactive<CSSProperties>({})\n    const { emit } = ctx\n    // watch\n    watch(\n      () => props,\n      () => {\n        nextTick(() => {\n          updateRootStyle()\n          $(compassRef)?.reload()\n          $(zoomControlRef)?.reload()\n        })\n      },\n      {\n        deep: true\n      }\n    )\n    // computed\n    const compassOptions = computed(() => Object.assign({}, compassOptsDefault, props.compassOpts))\n    const zoomControlOptions = computed(() => Object.assign({}, zoomOptsDefault, props.zoomOpts))\n\n    // methods\n    const onCompassEvt = e => {\n      const listener = getInstanceListener(instance, 'compassEvt')\n      listener && emit('compassEvt', e)\n    }\n    const onZoomEvt = e => {\n      const listener = getInstanceListener(instance, 'zoomEvt')\n      listener && emit('zoomEvt', e)\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          viewerElement.appendChild($(rootRef))\n          resolve($(rootRef))\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      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 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 ((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      Object.assign(rootStyle, css)\n    }\n\n    return () => {\n      if (canRender.value) {\n        let children: Array<VNode> = []\n        children = hMergeSlot(ctx.slots.default, children)\n        if (compassOptions.value && props.compassOpts !== false) {\n          children.push(\n            h(VcCompassSm, {\n              ref: compassRef,\n              onCompassEvt: onCompassEvt,\n              ...compassOptions.value\n            })\n          )\n        }\n        if (zoomControlOptions.value && props.zoomOpts !== false) {\n          children.push(\n            h(VcZoomControlSm, {\n              ref: zoomControlRef,\n              onZoomEvt: onZoomEvt,\n              ...zoomControlOptions.value\n            })\n          )\n        }\n        return h(\n          'div',\n          {\n            ref: rootRef,\n            class: 'vc-navigation-sm ' + positionState.classes.value,\n            style: rootStyle\n          },\n          children\n        )\n      } else {\n        return createCommentVNode('v-if')\n      }\n    }\n  }\n})\n\nexport type VcNavigationSmEmits = typeof emits\nexport type VcNavigationSmProps = {\n  /**\n   * Specify the position of the VcNavigationSm.\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 VcNavigationSm 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 | VcCompassSmProps\n  /**\n   * Specify the zoom control options of the component. false means no display.\n   */\n  zoomOpts?: false | VcZoomControlSmProps\n  /**\n   * Triggers before the VcNavigationSm is loaded.\n   */\n  onBeforeLoad?: (instance: VcComponentInternalInstance) => void\n  /**\n   * Triggers when the VcNavigationSm 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 VcNavigationSm 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\nexport interface VcNavigationSmSlots {\n  /**\n   * Suggestion: VcCompassSm, VcZoomControlSm\n   */\n  default: () => VNode[]\n}\n\nexport type VcNavigationSmRef = VcComponentPublicInstance<VcNavigationSmProps>\n"],"names":["VcCompassSm","VcZoomControlSm"],"mappings":"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"}