bootstrap-vue-next
Version:
Seamless integration of Vue 3, Bootstrap 5, and TypeScript for modern, type-safe UI development
1 lines • 24.6 kB
Source Map (JSON)
{"version":3,"file":"useShowHide-olNQI3HA.mjs","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 watch,\n} from 'vue'\nimport {showHideRegistryKey} from '../utils/keys'\nimport {BvTriggerableEvent} from '../utils'\nimport {useEventListener, useThrottleFn} from '@vueuse/core'\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}\n\ninterface TransitionProps {\n onBeforeEnter?: (el: Element) => void\n onEnter?: (el: Element) => void\n onAfterEnter?: (el: Element) => void\n onBeforeLeave?: (el: Element) => void\n onLeave?: (el: Element) => void\n onAfterLeave?: (el: Element) => void\n enterToClass?: string\n leaveToClass?: string\n enterFromClass?: string\n leaveFromClass?: string\n enterActiveClass?: string\n leaveActiveClass?: string\n}\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) 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, undefined)?.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 = (el: Element) => {\n options.transitionProps?.onBeforeEnter?.(el)\n props.transitionProps?.onBeforeEnter?.(el)\n isActive.value = true\n }\n const onEnter = (el: Element) => {\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 options.transitionProps?.onEnter?.(el)\n props.transitionProps?.onEnter?.(el)\n }\n const onAfterEnter = (el: Element) => {\n markLazyLoadCompleted()\n options.transitionProps?.onAfterEnter?.(el)\n props.transitionProps?.onAfterEnter?.(el)\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 const onBeforeLeave = (el: Element) => {\n if (!isLeaving.value) isLeaving.value = true\n options.transitionProps?.onBeforeLeave?.(el)\n props.transitionProps?.onBeforeLeave?.(el)\n trapActive.value = false\n }\n const onLeave = (el: Element) => {\n isVisible.value = false\n options.transitionProps?.onLeave?.(el)\n props.transitionProps?.onLeave?.(el)\n }\n const onAfterLeave = (el: Element) => {\n emit('hidden', buildTriggerableEvent('hidden', {trigger: leaveTrigger, cancelable: false}))\n options.transitionProps?.onAfterLeave?.(el)\n props.transitionProps?.onAfterLeave?.(el)\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 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 }\n return {\n showRef,\n renderRef,\n renderBackdropRef,\n isVisible,\n isActive,\n trapActive,\n show,\n hide,\n toggle,\n throttleHide,\n throttleShow,\n buildTriggerableEvent,\n computedNoAnimation,\n localNoAnimation,\n localTemporaryHide,\n isLeaving,\n transitionProps: {\n ...fadeBaseTransitionProps,\n ...props.transitionProps,\n ...transitionFunctions,\n },\n\n lazyLoadCompleted,\n markLazyLoadCompleted,\n contentShowing,\n backdropReady,\n 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 },\n }\n}\n"],"names":[],"mappings":"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"}