{"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 'casc-cesium-utils/private/selection'\nimport { addEvt, cleanEvt, prevent } from 'casc-cesium-utils/private/event'\nimport { getTouchTarget } from 'casc-cesium-utils/private/touch'\nimport { isKeyCode } from 'casc-cesium-utils/private/key-composition'\nimport { platform } from 'casc-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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"}