vuetify
Version:
Vue Material Component Framework
1 lines • 16.2 kB
Source Map (JSON)
{"version":3,"file":"useActivator.mjs","names":["makeDelayProps","useDelay","VMenuSymbol","getCurrentInstance","IN_BROWSER","isComponentInstance","propsFactory","SUPPORTS_FOCUS_VISIBLE","computed","effectScope","inject","nextTick","onScopeDispose","ref","watch","watchEffect","makeActivatorProps","activator","String","Object","activatorProps","type","default","openOnClick","Boolean","undefined","openOnHover","openOnFocus","closeOnContentClick","useActivator","props","isActive","isTop","activatorEl","isHovered","isFocused","firstEnter","value","runOpenDelay","runCloseDelay","availableEvents","click","e","stopPropagation","currentTarget","target","mouseenter","mouseleave","focus","matches","blur","activatorEvents","events","contentEvents","menu","closeParents","scrimEvents","val","activatorRef","$el","vm","scope","run","_useActivator","stop","flush","immediate","oldVal","getActivator","unbindActivatorProps","bindActivatorProps","el","_props","entries","forEach","name","cb","addEventListener","keys","k","removeAttribute","setAttribute","removeEventListener","selector","proxy","parentNode","hasAttribute","document","querySelector","nodeType","Node","ELEMENT_NODE"],"sources":["../../../src/components/VOverlay/useActivator.tsx"],"sourcesContent":["// Composables\nimport { makeDelayProps, useDelay } from '@/composables/delay'\nimport { VMenuSymbol } from '@/components/VMenu/shared'\n\n// Utilities\nimport { getCurrentInstance, IN_BROWSER, isComponentInstance, propsFactory, SUPPORTS_FOCUS_VISIBLE } from '@/util'\nimport {\n computed,\n effectScope,\n inject,\n nextTick,\n onScopeDispose,\n ref,\n watch,\n watchEffect,\n} from 'vue'\n\n// Types\nimport type { DelayProps } from '@/composables/delay'\nimport type {\n ComponentInternalInstance,\n ComponentPublicInstance,\n EffectScope,\n PropType,\n Ref,\n} from 'vue'\n\ninterface ActivatorProps extends DelayProps {\n activator?: 'parent' | string | Element | ComponentPublicInstance\n activatorProps: Record<string, any>\n\n openOnClick: boolean | undefined\n openOnHover: boolean\n openOnFocus: boolean | undefined\n\n closeOnContentClick: boolean\n}\n\nexport const makeActivatorProps = propsFactory({\n activator: [String, Object] as PropType<ActivatorProps['activator']>,\n activatorProps: {\n type: Object as PropType<ActivatorProps['activatorProps']>,\n default: () => ({}),\n },\n\n openOnClick: {\n type: Boolean,\n default: undefined,\n },\n openOnHover: Boolean,\n openOnFocus: {\n type: Boolean,\n default: undefined,\n },\n\n closeOnContentClick: Boolean,\n\n ...makeDelayProps(),\n}, 'v-overlay-activator')\n\nexport function useActivator (\n props: ActivatorProps,\n { isActive, isTop }: { isActive: Ref<boolean>, isTop: Ref<boolean> }\n) {\n const activatorEl = ref<HTMLElement>()\n\n let isHovered = false\n let isFocused = false\n let firstEnter = true\n\n const openOnFocus = computed(() => props.openOnFocus || (props.openOnFocus == null && props.openOnHover))\n const openOnClick = computed(() => props.openOnClick || (props.openOnClick == null && !props.openOnHover && !openOnFocus.value))\n\n const { runOpenDelay, runCloseDelay } = useDelay(props, value => {\n if (\n value === (\n (props.openOnHover && isHovered) ||\n (openOnFocus.value && isFocused)\n ) && !(props.openOnHover && isActive.value && !isTop.value)\n ) {\n if (isActive.value !== value) {\n firstEnter = true\n }\n isActive.value = value\n }\n })\n\n const availableEvents = {\n click: (e: MouseEvent) => {\n e.stopPropagation()\n activatorEl.value = (e.currentTarget || e.target) as HTMLElement\n isActive.value = !isActive.value\n },\n mouseenter: (e: MouseEvent) => {\n isHovered = true\n activatorEl.value = (e.currentTarget || e.target) as HTMLElement\n runOpenDelay()\n },\n mouseleave: (e: MouseEvent) => {\n isHovered = false\n runCloseDelay()\n },\n focus: (e: FocusEvent) => {\n if (\n SUPPORTS_FOCUS_VISIBLE &&\n !(e.target as HTMLElement).matches(':focus-visible')\n ) return\n\n isFocused = true\n e.stopPropagation()\n activatorEl.value = (e.currentTarget || e.target) as HTMLElement\n\n runOpenDelay()\n },\n blur: (e: FocusEvent) => {\n isFocused = false\n e.stopPropagation()\n\n runCloseDelay()\n },\n }\n\n const activatorEvents = computed(() => {\n const events: Partial<typeof availableEvents> = {}\n\n if (openOnClick.value) {\n events.click = availableEvents.click\n }\n if (props.openOnHover) {\n events.mouseenter = availableEvents.mouseenter\n events.mouseleave = availableEvents.mouseleave\n }\n if (openOnFocus.value) {\n events.focus = availableEvents.focus\n events.blur = availableEvents.blur\n }\n\n return events\n })\n\n const contentEvents = computed(() => {\n const events: Partial<typeof availableEvents> = {}\n\n if (props.openOnHover) {\n events.mouseenter = () => {\n isHovered = true\n runOpenDelay()\n }\n events.mouseleave = () => {\n isHovered = false\n runCloseDelay()\n }\n }\n\n if (props.closeOnContentClick) {\n const menu = inject(VMenuSymbol, null)\n events.click = () => {\n isActive.value = false\n menu?.closeParents()\n }\n }\n\n return events\n })\n\n const scrimEvents = computed(() => {\n const events: Partial<typeof availableEvents> = {}\n if (props.openOnHover) {\n events.mouseenter = () => {\n if (firstEnter) {\n isHovered = true\n firstEnter = false\n runOpenDelay()\n }\n }\n events.mouseleave = () => {\n isHovered = false\n runCloseDelay()\n }\n }\n\n return events\n })\n\n watch(isTop, val => {\n if (val && (\n (props.openOnHover && !isHovered && (!openOnFocus.value || !isFocused)) ||\n (openOnFocus.value && !isFocused && (!props.openOnHover || !isHovered))\n )) {\n isActive.value = false\n }\n })\n\n const activatorRef = ref()\n watchEffect(() => {\n if (!activatorRef.value) return\n\n nextTick(() => {\n const activator = activatorRef.value\n activatorEl.value = isComponentInstance(activator) ? activator.$el : activator\n })\n })\n\n const vm = getCurrentInstance('useActivator')\n let scope: EffectScope\n watch(() => !!props.activator, val => {\n if (val && IN_BROWSER) {\n scope = effectScope()\n scope.run(() => {\n _useActivator(props, vm, { activatorEl, activatorEvents })\n })\n } else if (scope) {\n scope.stop()\n }\n }, { flush: 'post', immediate: true })\n\n onScopeDispose(() => {\n scope?.stop()\n })\n\n return { activatorEl, activatorRef, activatorEvents, contentEvents, scrimEvents }\n}\n\nfunction _useActivator (\n props: ActivatorProps,\n vm: ComponentInternalInstance,\n { activatorEl, activatorEvents }: Pick<ReturnType<typeof useActivator>, 'activatorEl' | 'activatorEvents'>\n) {\n watch(() => props.activator, (val, oldVal) => {\n if (oldVal && val !== oldVal) {\n const activator = getActivator(oldVal)\n activator && unbindActivatorProps(activator)\n }\n if (val) {\n nextTick(() => bindActivatorProps())\n }\n }, { immediate: true })\n\n watch(() => props.activatorProps, () => {\n bindActivatorProps()\n })\n\n onScopeDispose(() => {\n unbindActivatorProps()\n })\n\n function bindActivatorProps (el = getActivator(), _props = props.activatorProps) {\n if (!el) return\n\n Object.entries(activatorEvents.value).forEach(([name, cb]) => {\n el.addEventListener(name, cb as (e: Event) => void)\n })\n\n Object.keys(_props).forEach(k => {\n if (_props[k] == null) {\n el.removeAttribute(k)\n } else {\n el.setAttribute(k, _props[k])\n }\n })\n }\n\n function unbindActivatorProps (el = getActivator(), _props = props.activatorProps) {\n if (!el) return\n\n Object.entries(activatorEvents.value).forEach(([name, cb]) => {\n el.removeEventListener(name, cb as (e: Event) => void)\n })\n\n Object.keys(_props).forEach(k => {\n el.removeAttribute(k)\n })\n }\n\n function getActivator (selector = props.activator): HTMLElement | undefined {\n let activator\n if (selector) {\n if (selector === 'parent') {\n let el = vm?.proxy?.$el?.parentNode\n while (el.hasAttribute('data-no-activator')) {\n el = el.parentNode\n }\n activator = el\n } else if (typeof selector === 'string') {\n // Selector\n activator = document.querySelector(selector)\n } else if ('$el' in selector) {\n // Component (ref)\n activator = selector.$el\n } else {\n // HTMLElement | Element\n activator = selector\n }\n }\n\n // The activator should only be a valid element (Ignore comments and text nodes)\n activatorEl.value = activator?.nodeType === Node.ELEMENT_NODE ? activator : null\n\n return activatorEl.value\n }\n}\n"],"mappings":"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"}