{"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 'casc-cesium-utils/types'\nimport usePosition, { positionProps } from 'casc-cesium-composables/private/use-position'\nimport { $, getInstanceListener } from 'casc-cesium-utils/private/vm'\nimport { hMergeSlot } from 'casc-cesium-utils/private/render'\nimport { useCommon } from 'casc-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 'casc-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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"}