{"version":3,"file":"use-anchor.mjs","sources":["../../../../../packages/composables/private/use-anchor.ts"],"sourcesContent":["import { ref, watch, onMounted, onBeforeUnmount, nextTick, getCurrentInstance } from 'vue'\n\nimport { clearSelection } from '@vue-cesium/utils/private/selection'\nimport { addEvt, cleanEvt, prevent } from '@vue-cesium/utils/private/event'\nimport { getTouchTarget } from '@vue-cesium/utils/private/touch'\nimport { isKeyCode } from '@vue-cesium/utils/private/key-composition'\nimport { platform } from '@vue-cesium/utils/platform'\n\nexport const useAnchorProps = {\n  target: {\n    type: [Boolean, String],\n    default: true\n  },\n  noParentEvent: Boolean,\n  contextMenu: Boolean\n}\n\nexport default function ({\n  showing,\n  avoidEmit, // required for VcPopupProxy (true)\n  configureAnchorEl // optional\n}) {\n  const { props, proxy, emit } = getCurrentInstance()!\n\n  const anchorEl = ref<HTMLElement>(null!)\n\n  let touchTimer\n\n  function canShow(evt) {\n    // abort with no parent configured or on multi-touch\n    return anchorEl.value === null ? false : evt === void 0 || evt.touches === void 0 || evt.touches.length <= 1\n  }\n\n  const anchorEvents: any = {}\n\n  if (configureAnchorEl === void 0) {\n    // default configureAnchorEl is designed for\n\n    Object.assign(anchorEvents, {\n      hide(evt) {\n        ;(proxy as any).hide(evt)\n      },\n\n      toggle(evt) {\n        ;(proxy as any).toggle(evt)\n      },\n\n      toggleKey(evt) {\n        isKeyCode(evt, 13) === true && (proxy as any).toggle(evt)\n      },\n\n      contextClick(evt) {\n        ;(proxy as any).hide(evt)\n        nextTick(() => {\n          ;(proxy as any).show(evt)\n        })\n        prevent(evt)\n      },\n\n      mobilePrevent: prevent,\n\n      mobileTouch(evt) {\n        anchorEvents.mobileCleanup(evt)\n\n        if (canShow(evt) !== true) {\n          return\n        }\n\n        ;(proxy as any).hide(evt)\n        anchorEl.value?.classList.add('non-selectable')\n\n        const target = getTouchTarget(evt.target)\n        addEvt(anchorEvents, 'anchor', [\n          [target, 'touchmove', 'mobileCleanup', 'passive'],\n          [target, 'touchend', 'mobileCleanup', 'passive'],\n          [target, 'touchcancel', 'mobileCleanup', 'passive'],\n          [anchorEl.value, 'contextmenu', 'mobilePrevent', 'notPassive']\n        ])\n\n        touchTimer = setTimeout(() => {\n          ;(proxy as any).show(evt)\n        }, 300)\n      },\n\n      mobileCleanup(evt) {\n        anchorEl.value.classList.remove('non-selectable')\n        clearTimeout(touchTimer)\n\n        if (showing.value === true && evt !== void 0) {\n          clearSelection()\n        }\n      }\n    })\n\n    configureAnchorEl = function (context = props.contextMenu) {\n      if (props.noParentEvent === true || anchorEl.value === null) {\n        return\n      }\n\n      let evts\n\n      if (context === true) {\n        if (platform().isPhone === true) {\n          evts = [[anchorEl.value, 'touchstart', 'mobileTouch', 'passive']]\n        } else {\n          evts = [\n            [anchorEl.value, 'click', 'hide', 'passive'],\n            [anchorEl.value, 'contextmenu', 'contextClick', 'notPassive']\n          ]\n        }\n      } else {\n        evts = [\n          [anchorEl.value, 'click', 'toggle', 'passive'],\n          [anchorEl.value, 'keyup', 'toggleKey', 'passive']\n        ]\n      }\n\n      addEvt(anchorEvents, 'anchor', evts)\n    }\n  }\n\n  function unconfigureAnchorEl() {\n    cleanEvt(anchorEvents, 'anchor')\n  }\n\n  function setAnchorEl(el) {\n    anchorEl.value = el\n    while (anchorEl.value.classList.contains('vc-anchor--skip')) {\n      ;(anchorEl.value as any) = anchorEl.value.parentNode\n    }\n    configureAnchorEl()\n  }\n\n  function pickAnchorEl() {\n    if (props.target === false || props.target === '') {\n      anchorEl.value = null!\n    } else if (props.target === true) {\n      setAnchorEl(proxy?.$el.parentNode)\n    } else {\n      let el = props.target as any\n\n      if (typeof props.target === 'string') {\n        try {\n          el = document.querySelector(props.target)\n        } catch (err) {\n          el = void 0\n        }\n      }\n\n      if (el !== void 0 && el !== null) {\n        anchorEl.value = el.$el || el\n        configureAnchorEl()\n      } else {\n        anchorEl.value = null!\n        console.error(`Anchor: target \"${props.target}\" not found`)\n      }\n    }\n  }\n\n  watch(\n    () => props.contextMenu,\n    val => {\n      if (anchorEl.value !== null) {\n        unconfigureAnchorEl()\n        configureAnchorEl(val)\n      }\n    }\n  )\n\n  watch(\n    () => props.target,\n    () => {\n      if (anchorEl.value !== null) {\n        unconfigureAnchorEl()\n      }\n\n      pickAnchorEl()\n    }\n  )\n\n  watch(\n    () => props.noParentEvent,\n    val => {\n      if (anchorEl.value !== null) {\n        if (val === true) {\n          unconfigureAnchorEl()\n        } else {\n          configureAnchorEl()\n        }\n      }\n    }\n  )\n\n  onMounted(() => {\n    pickAnchorEl()\n\n    if (avoidEmit !== true && props.modelValue === true && anchorEl.value === null) {\n      emit('update:modelValue', false)\n    }\n  })\n\n  onBeforeUnmount(() => {\n    clearTimeout(touchTimer)\n    unconfigureAnchorEl()\n  })\n\n  return {\n    anchorEl,\n    canShow,\n    anchorEvents\n  }\n}\n"],"names":[],"mappings":"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"}