{"version":3,"file":"use-model-toggle.mjs","sources":["../../../../../packages/composables/private/use-model-toggle.ts"],"sourcesContent":["import { watch, nextTick, onMounted, getCurrentInstance, Ref, ComputedRef } from 'vue'\n\nimport { vmHasRouter, vmHasListener } from '@vue-cesium/utils/private/vm'\nimport { AnyFunction } from '@vue-cesium/utils/types'\n\nexport const useModelToggleProps = {\n  modelValue: {\n    type: Boolean,\n    default: null\n  }\n}\n\nexport const useModelToggleEmits = ['update:modelValue', 'before-show', 'show', 'before-hide', 'hide']\n\n// handleShow/handleHide -> removeTick(), self (& emit show), prepareTick()\n\nexport default function ({\n  showing,\n  canShow = undefined, // optional\n  hideOnRouteChange = undefined, // optional\n  handleShow = undefined, // optional\n  handleHide = undefined, // optional\n  processOnMount = undefined // optional\n}: {\n  showing?: Ref<boolean>\n  canShow?: AnyFunction<boolean>\n  hideOnRouteChange?: ComputedRef<boolean>\n  handleShow?: AnyFunction<void>\n  handleHide?: AnyFunction<void>\n  processOnMount?: boolean\n}) {\n  const vm = getCurrentInstance()!\n  const { props, emit, proxy } = vm\n\n  let payload\n\n  function toggle(evt) {\n    if (showing?.value === true) {\n      hide(evt)\n    } else {\n      show(evt)\n    }\n  }\n\n  function show(evt) {\n    if (props.disable === true || (canShow !== void 0 && canShow(evt) !== true)) {\n      return\n    }\n\n    const listener = vmHasListener(vm, 'onUpdate:modelValue') === true\n\n    if (listener === true) {\n      emit('update:modelValue', true)\n      payload = evt\n      nextTick(() => {\n        if (payload === evt) {\n          payload = void 0\n        }\n      })\n    }\n\n    if (props.modelValue === null || listener === false) {\n      processShow(evt)\n    }\n  }\n\n  function processShow(evt) {\n    if (showing?.value === true) {\n      return\n    }\n\n    showing && (showing.value = true)\n\n    emit('before-show', evt)\n\n    if (evt && evt.cancel === true) {\n      return\n    }\n\n    if (handleShow !== void 0) {\n      handleShow(evt)\n    } else {\n      emit('show', evt)\n    }\n  }\n\n  function hide(evt?) {\n    if (props.disable === true) {\n      return\n    }\n\n    const listener = vmHasListener(vm, 'onUpdate:modelValue') === true\n\n    if (listener === true) {\n      emit('update:modelValue', false)\n      payload = evt\n      nextTick(() => {\n        if (payload === evt) {\n          payload = void 0\n        }\n      })\n    }\n\n    if (props.modelValue === null || listener === false) {\n      processHide(evt)\n    }\n  }\n\n  function processHide(evt) {\n    if (showing?.value === false) {\n      return\n    }\n\n    showing && (showing.value = false)\n\n    emit('before-hide', evt)\n\n    if (handleHide !== void 0) {\n      handleHide(evt)\n    } else {\n      emit('hide', evt)\n    }\n  }\n\n  function processModelChange(val) {\n    if (props.disable === true && val === true) {\n      if (vmHasListener(vm, 'onUpdate:modelValue') === true) {\n        emit('update:modelValue', false)\n      }\n    } else if ((val === true) !== showing?.value) {\n      const fn = val === true ? processShow : processHide\n      fn(payload)\n    }\n  }\n\n  watch(() => props.modelValue, processModelChange)\n\n  if (hideOnRouteChange !== void 0 && vmHasRouter(vm) === true) {\n    watch(\n      () => (proxy as any).$route,\n      () => {\n        if (hideOnRouteChange.value === true && showing?.value === true) {\n          hide()\n        }\n      }\n    )\n  }\n\n  processOnMount === true &&\n    onMounted(() => {\n      processModelChange(props.modelValue)\n    })\n\n  // expose public methods\n  const publicMethods = { show, hide, toggle }\n  Object.assign(proxy, publicMethods)\n\n  return publicMethods\n}\n"],"names":[],"mappings":"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"}