{"version":3,"file":"useShowHide-IPyuuPL0.mjs","names":[],"sources":["../src/composables/useShowHide.ts"],"sourcesContent":["import {\n  type ComponentInternalInstance,\n  computed,\n  type EmitFn,\n  getCurrentInstance,\n  inject,\n  nextTick,\n  onBeforeUnmount,\n  onMounted,\n  onUnmounted,\n  readonly,\n  ref,\n  type Ref,\n  type TransitionProps,\n  watch,\n} from 'vue'\nimport {showHideRegistryKey} from '../utils/keys'\nimport {BvTriggerableEvent} from '../utils'\nimport {useEventListener, useThrottleFn} from '@vueuse/core'\nimport {noop} from '../utils/functions'\n\nexport const fadeBaseTransitionProps = {\n  name: 'fade',\n  enterActiveClass: '',\n  enterFromClass: 'showing',\n  enterToClass: '',\n  leaveActiveClass: '',\n  leaveFromClass: '',\n  leaveToClass: 'showing',\n  css: true,\n} as const satisfies TransitionProps\n\nexport const useShowHide = (\n  modelValue: Ref<boolean | number>,\n  props: {\n    visible?: boolean\n    show?: boolean\n    noAnimation?: boolean\n    noFade?: boolean\n    noCloseOnBackdrop?: boolean\n    noCloseOnEsc?: boolean\n    transitionProps?: TransitionProps\n    lazy?: boolean\n    initialAnimation?: boolean\n    delay?:\n      | number\n      | {\n          show: number\n          hide: number\n        }\n  } & Record<string, unknown>,\n  emit: EmitFn,\n  element: Ref<HTMLElement | null>,\n  computedId: Ref<string>,\n  options: {\n    transitionProps?: TransitionProps\n    showFn?: () => void\n    hideFn?: () => void\n  } = {\n    transitionProps: {},\n    showFn: () => {},\n    hideFn: () => {},\n  }\n) => {\n  let noAction = false\n  const initialShow = (!!modelValue.value && !props.initialAnimation) || props.visible || false\n  const showRef = ref<boolean>(initialShow)\n  const renderRef = ref<boolean>(initialShow)\n  const renderBackdropRef = ref<boolean>(initialShow)\n\n  let isCountdown = typeof modelValue.value !== 'boolean'\n\n  watch(modelValue, () => {\n    isCountdown = typeof modelValue.value !== 'boolean'\n    if (noAction) {\n      noAction = false\n      return\n    }\n    if (modelValue.value) {\n      show()\n    } else {\n      hide('modelValue', true)\n    }\n  })\n\n  const localNoAnimation = ref(initialShow)\n  const localTemporaryHide = ref(false)\n  const computedNoAnimation = computed(\n    () => props.noAnimation || props.noFade || localNoAnimation.value || false\n  )\n  let isMounted = false\n  onMounted(() => {\n    isMounted = true\n    if (!props.show && initialShow) {\n      // show without delay or animation\n      const event = buildTriggerableEvent('show', {cancelable: true})\n      emit('show', event)\n\n      if (event.defaultPrevented) {\n        emit('show-prevented', buildTriggerableEvent('show-prevented'))\n        return\n      }\n      localNoAnimation.value = true\n      if (!modelValue.value) {\n        noAction = true\n        modelValue.value = true\n      }\n      renderRef.value = true\n      renderBackdropRef.value = true\n      isVisible.value = true\n      backdropVisible.value = true\n      backdropReady.value = true\n      showRef.value = true\n      options.showFn?.()\n    } else if (props.show || (!!modelValue.value && props.initialAnimation)) {\n      show()\n    }\n  })\n\n  watch(\n    () => props.visible,\n    (newval) => {\n      localNoAnimation.value = true\n\n      nextTick(() => {\n        if (newval) isVisible.value = true\n        if (newval) {\n          show()\n        } else {\n          hide('visible-prop', true)\n        }\n      })\n    }\n  )\n  watch(\n    () => props.show,\n    (newval) => {\n      if (newval) {\n        show()\n      } else {\n        hide('show-prop', true)\n      }\n    }\n  )\n  // todo: remove\n  useEventListener(element, 'bv-toggle', () => {\n    modelValue.value = !modelValue.value\n  })\n\n  const buildTriggerableEvent = (\n    type: string,\n    opts: Readonly<Partial<BvTriggerableEvent>> = {}\n  ): BvTriggerableEvent =>\n    new BvTriggerableEvent(type, {\n      cancelable: false,\n      target: element?.value || null,\n      relatedTarget: null,\n      trigger: null,\n      ...opts,\n      componentId: computedId?.value,\n    })\n\n  let showTimeout: ReturnType<typeof setTimeout> | undefined\n  let hideTimeout: ReturnType<typeof setTimeout> | undefined\n  let _Resolve: ((value: boolean | string) => void) | undefined\n  let _Promise: Promise<boolean | string> | undefined\n  let _resolveOnHide: boolean | undefined\n  const show = (resolveOnHide: boolean = false): Promise<boolean | string> => {\n    if (showRef.value && !hideTimeout && !_Promise) return Promise.resolve(true)\n    _resolveOnHide = resolveOnHide\n    if (showRef.value && !hideTimeout && _Promise) return _Promise\n\n    _Promise = new Promise<boolean | string>((resolve) => {\n      _Resolve = resolve\n    })\n\n    const event = buildTriggerableEvent('show', {cancelable: true})\n    emit('show', event)\n\n    if (event.defaultPrevented) {\n      emit('show-prevented', buildTriggerableEvent('show-prevented'))\n      if (isVisible.value) {\n        isVisible.value = false\n      }\n      if (modelValue.value && !isCountdown) {\n        noAction = true\n        nextTick(() => {\n          modelValue.value = false\n        })\n      }\n      _Resolve?.('show-prevented')\n      return _Promise\n    }\n    if (hideTimeout) {\n      clearTimeout(hideTimeout)\n      hideTimeout = undefined\n    }\n    renderRef.value = true\n    renderBackdropRef.value = true\n    requestAnimationFrame(() => {\n      if (localNoAnimation.value || props.delay === undefined) {\n        if (!isMounted) return\n        showTimeout = undefined\n        showRef.value = true\n        options.showFn?.()\n        if (!modelValue.value) {\n          noAction = true\n          nextTick(() => {\n            modelValue.value = true\n          })\n        }\n        return\n      }\n      showTimeout = setTimeout(\n        () => {\n          if (!isMounted) return\n          showTimeout = undefined\n          showRef.value = true\n          options.showFn?.()\n          if (!modelValue.value) {\n            noAction = true\n            nextTick(() => {\n              modelValue.value = true\n            })\n          }\n        },\n        typeof props.delay === 'number' ? props.delay : props.delay?.show || 0\n      )\n    })\n    return _Promise\n  }\n\n  let leaveTrigger: string | undefined\n  const hide = (trigger?: string, noTriggerEmit?: boolean): Promise<string> => {\n    if (!showRef.value && !showTimeout && !renderRef.value) return Promise.resolve('')\n    if (!_Promise)\n      _Promise = new Promise<string>((resolve) => {\n        ;(_Resolve as (value: string | PromiseLike<string>) => void) = resolve\n      })\n    if (typeof trigger !== 'string') trigger = undefined\n    leaveTrigger = trigger\n    const event = buildTriggerableEvent('hide', {cancelable: true, trigger})\n    const event2 = buildTriggerableEvent(trigger || 'ignore', {cancelable: true, trigger})\n    if (\n      (trigger === 'backdrop' && props.noCloseOnBackdrop) ||\n      (trigger === 'esc' && props.noCloseOnEsc)\n    ) {\n      emit('hide-prevented', buildTriggerableEvent('hide-prevented', {trigger}))\n      _Resolve?.('hide-prevented')\n      return _Promise as Promise<string>\n    }\n    if (showTimeout) {\n      clearTimeout(showTimeout)\n      showTimeout = undefined\n    }\n    if (trigger && !noTriggerEmit) {\n      emit(trigger, event2)\n    }\n    emit('hide', event)\n\n    if (event.defaultPrevented || event2.defaultPrevented) {\n      emit('hide-prevented', buildTriggerableEvent('hide-prevented', {trigger}))\n      if (!modelValue.value) {\n        nextTick(() => {\n          noAction = true\n          modelValue.value = true\n        })\n      }\n      _Resolve?.('hide-prevented')\n      return _Promise as Promise<string>\n    }\n    trapActive.value = false\n    if (showTimeout) {\n      clearTimeout(showTimeout)\n      showTimeout = undefined\n      if (!localTemporaryHide.value) renderRef.value = false\n      renderBackdropRef.value = false\n    }\n    hideTimeout = setTimeout(\n      () => {\n        if (!isMounted) return\n        hideTimeout = undefined\n        isLeaving.value = true\n        showRef.value = false\n        options.hideFn?.()\n        if (modelValue.value) {\n          noAction = true\n          modelValue.value = isCountdown ? 0 : false\n        }\n      },\n      localNoAnimation.value\n        ? 0\n        : typeof props.delay === 'number'\n          ? props.delay\n          : props.delay?.hide || 0\n    )\n    return _Promise as Promise<string>\n  }\n  const throttleHide = useThrottleFn((a) => hide(a), 500)\n  const throttleShow = useThrottleFn(() => show(), 500)\n\n  const toggle = (resolveOnHide: boolean = false): Promise<boolean | string> => {\n    const e = buildTriggerableEvent('toggle', {cancelable: true})\n    emit('toggle', e)\n    if (e.defaultPrevented) {\n      emit('toggle-prevented', buildTriggerableEvent('toggle-prevented'))\n      return Promise.resolve('toggle-prevented')\n    }\n    if (showRef.value) {\n      return hide('toggle-function', true)\n    }\n    return show(resolveOnHide)\n  }\n  const triggerToggle = () => {\n    const e = buildTriggerableEvent('toggle', {cancelable: true})\n    emit('toggle', e)\n    if (e.defaultPrevented) {\n      emit('toggle-prevented', buildTriggerableEvent('toggle-prevented'))\n      return\n    }\n    if (showRef.value) {\n      hide('toggle-trigger', true)\n    } else {\n      show()\n    }\n  }\n  const triggerRegistry: {trigger: string; el: Element}[] = []\n  const registerTrigger = (trigger: string, el: Element) => {\n    triggerRegistry.push({trigger, el})\n    el.addEventListener(trigger, triggerToggle)\n    checkVisibility(el)\n  }\n  const unregisterTrigger = (trigger: string, el: Element, clean = true) => {\n    const idx = triggerRegistry.findIndex((t) => t?.trigger === trigger && t.el === el)\n    if (idx > -1) {\n      triggerRegistry.splice(idx, 1)\n      el.removeEventListener(trigger, triggerToggle)\n      if (clean) {\n        el.removeAttribute('aria-expanded')\n        el.classList.remove('collapsed')\n        el.classList.remove('not-collapsed')\n      }\n    }\n  }\n\n  const appRegistry = inject(showHideRegistryKey, null)?.register({\n    id: computedId.value,\n    toggle,\n    show,\n    hide,\n    value: readonly(showRef),\n    registerTrigger,\n    unregisterTrigger,\n    component: getCurrentInstance() as ComponentInternalInstance,\n  })\n  const checkVisibility = (el: Element) => {\n    el.setAttribute('aria-expanded', modelValue.value ? 'true' : 'false')\n    el.classList.toggle('collapsed', !modelValue.value)\n    el.classList.toggle('not-collapsed', !!modelValue.value)\n  }\n\n  watch(modelValue, () => {\n    triggerRegistry.forEach((t) => {\n      checkVisibility(t.el)\n    })\n  })\n\n  watch(computedId, (newId, oldId) => {\n    appRegistry?.updateId(newId, oldId)\n  })\n\n  onBeforeUnmount(() => {\n    appRegistry?.unregister()\n    triggerRegistry.forEach((t) => {\n      t.el.removeEventListener(t.trigger, triggerToggle)\n    })\n  })\n  onUnmounted(() => {\n    isMounted = false\n    clearTimeout(showTimeout)\n    clearTimeout(hideTimeout)\n    showTimeout = undefined\n    hideTimeout = undefined\n  })\n\n  const lazyLoadCompleted = ref(false)\n  const markLazyLoadCompleted = () => {\n    if (props.lazy === true) lazyLoadCompleted.value = true\n  }\n\n  const isLeaving = ref(false)\n  const isActive = ref(initialShow)\n  const isVisible = ref(initialShow)\n\n  const onBeforeEnter: TransitionProps['onBeforeEnter'] = [\n    ...[\n      options.transitionProps?.onBeforeEnter ?? noop,\n      props.transitionProps?.onBeforeEnter ?? noop,\n    ].flat(),\n    () => {\n      isActive.value = true\n    },\n  ]\n\n  const onEnter: TransitionProps['onEnter'] = [\n    () => {\n      requestAnimationFrame(() => {\n        requestAnimationFrame(() => {\n          // sometimes one just isn't enough (offcanvas on the first load after refresh)\n          isVisible.value = true\n        })\n      })\n    },\n    ...[options.transitionProps?.onEnter ?? noop, props.transitionProps?.onEnter ?? noop].flat(),\n  ]\n  const onAfterEnter: TransitionProps['onAfterEnter'] = [\n    markLazyLoadCompleted,\n    ...[\n      options.transitionProps?.onAfterEnter ?? noop,\n      props.transitionProps?.onAfterEnter ?? noop,\n    ].flat(),\n    () => {\n      if (localNoAnimation.value) {\n        requestAnimationFrame(() => {\n          localNoAnimation.value = false\n        })\n      }\n      if (localTemporaryHide.value) {\n        localTemporaryHide.value = false\n      }\n      requestAnimationFrame(() => {\n        trapActive.value = true\n        nextTick(() => {\n          emit('shown', buildTriggerableEvent('shown', {cancelable: false}))\n        })\n      })\n      if (!_resolveOnHide) {\n        _Resolve?.(true)\n        _Promise = undefined\n        _Resolve = undefined\n      }\n    },\n  ]\n\n  const onBeforeLeave: TransitionProps['onBeforeLeave'] = [\n    () => {\n      if (!isLeaving.value) isLeaving.value = true\n    },\n    ...[\n      options.transitionProps?.onBeforeLeave ?? noop,\n      props.transitionProps?.onBeforeLeave ?? noop,\n    ].flat(),\n    () => {\n      trapActive.value = false\n    },\n  ]\n\n  const onLeave: TransitionProps['onLeave'] = [\n    () => {\n      isVisible.value = false\n    },\n    ...[options.transitionProps?.onLeave ?? noop, props.transitionProps?.onLeave ?? noop].flat(),\n  ]\n\n  const onAfterLeave: TransitionProps['onAfterLeave'] = [\n    () => {\n      emit('hidden', buildTriggerableEvent('hidden', {trigger: leaveTrigger, cancelable: false}))\n    },\n    ...[\n      options.transitionProps?.onAfterLeave ?? noop,\n      props.transitionProps?.onAfterLeave ?? noop,\n    ].flat(),\n    () => {\n      isLeaving.value = false\n      isActive.value = false\n      if (localNoAnimation.value) {\n        requestAnimationFrame(() => {\n          localNoAnimation.value = false\n        })\n      }\n      requestAnimationFrame(() => {\n        if (!localTemporaryHide.value) renderRef.value = false\n      })\n      _Resolve?.(leaveTrigger || '')\n      _Promise = undefined\n      _Resolve = undefined\n      leaveTrigger = undefined\n    },\n  ]\n\n  const contentShowing = computed(\n    () =>\n      localTemporaryHide.value === true ||\n      isActive.value === true ||\n      props.lazy === false ||\n      (props.lazy === true && lazyLoadCompleted.value === true && props.unmountLazy === false)\n  )\n  const trapActive = ref(false)\n  const backdropVisible = ref(false)\n  const backdropReady = ref(false)\n\n  const transitionFunctions = {\n    ...options.transitionProps,\n    onBeforeEnter,\n    onEnter,\n    onAfterEnter,\n    onBeforeLeave,\n    onLeave,\n    onAfterLeave,\n  } satisfies TransitionProps\n  return {\n    showRef: readonly(showRef),\n    renderRef: readonly(renderRef),\n    renderBackdropRef: readonly(renderBackdropRef),\n    isVisible: readonly(isVisible),\n    isActive: readonly(isActive),\n    trapActive: readonly(trapActive),\n    show,\n    hide,\n    toggle,\n    throttleHide,\n    throttleShow,\n    buildTriggerableEvent,\n    computedNoAnimation,\n    localNoAnimation: readonly(localNoAnimation),\n    setLocalNoAnimation: (value: boolean) => {\n      localNoAnimation.value = value\n    },\n    localTemporaryHide: readonly(localTemporaryHide),\n    setLocalTemporaryHide: (value: boolean) => {\n      localTemporaryHide.value = value\n    },\n    isLeaving: readonly(isLeaving),\n    transitionProps: {\n      ...fadeBaseTransitionProps,\n      ...props.transitionProps,\n      ...transitionFunctions,\n    } satisfies TransitionProps,\n\n    lazyLoadCompleted: readonly(lazyLoadCompleted),\n    markLazyLoadCompleted,\n    contentShowing,\n    backdropReady: readonly(backdropReady),\n    backdropVisible: readonly(backdropVisible),\n    backdropTransitionProps: {\n      ...fadeBaseTransitionProps,\n      onBeforeEnter: () => {\n        requestAnimationFrame(() => {\n          requestAnimationFrame(() => {\n            backdropVisible.value = true\n          })\n        })\n        backdropReady.value = false\n      },\n      onAfterEnter: () => {\n        backdropReady.value = true\n      },\n      onBeforeLeave: () => {\n        backdropVisible.value = false\n      },\n      onAfterLeave: () => {\n        backdropReady.value = false\n        requestAnimationFrame(() => {\n          renderBackdropRef.value = false\n        })\n      },\n    } satisfies TransitionProps,\n  }\n}\n"],"mappings":"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"}