UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 6.76 kB
{"version":3,"file":"index.mjs","sources":["../../../../../packages/hooks/use-popper/index.ts"],"sourcesContent":["import { computed, onBeforeUnmount, ref, shallowRef, unref, watch } from 'vue'\nimport { createPopper } from '@popperjs/core'\nimport { fromPairs } from 'lodash-unified'\n\nimport type { Ref } from 'vue'\nimport type {\n Instance,\n Modifier,\n Options,\n State,\n VirtualElement,\n} from '@popperjs/core'\n\ntype ElementType = HTMLElement | undefined\ntype ReferenceElement = ElementType | VirtualElement\nexport type PartialOptions = Partial<Options>\n\nexport const usePopper = (\n referenceElementRef: Ref<ReferenceElement>,\n popperElementRef: Ref<ElementType>,\n opts: Ref<PartialOptions> | PartialOptions = {} as PartialOptions\n) => {\n const stateUpdater = {\n name: 'updateState',\n enabled: true,\n phase: 'write',\n fn: ({ state }) => {\n const derivedState = deriveState(state)\n\n Object.assign(states.value, derivedState)\n },\n requires: ['computeStyles'],\n } as Modifier<'updateState', any>\n\n const options = computed<Options>(() => {\n const { onFirstUpdate, placement, strategy, modifiers } = unref(opts)\n\n return {\n onFirstUpdate,\n placement: placement || 'bottom',\n strategy: strategy || 'absolute',\n modifiers: [\n ...(modifiers || []),\n stateUpdater,\n { name: 'applyStyles', enabled: false },\n ],\n }\n })\n\n const instanceRef = shallowRef<Instance | undefined>()\n const states = ref<Pick<State, 'styles' | 'attributes'>>({\n styles: {\n popper: {\n position: unref(options).strategy,\n left: '0',\n top: '0',\n },\n arrow: {\n position: 'absolute',\n },\n },\n attributes: {},\n })\n\n const destroy = () => {\n if (!instanceRef.value) return\n\n instanceRef.value.destroy()\n instanceRef.value = undefined\n }\n\n watch(\n options,\n (newOptions) => {\n const instance = unref(instanceRef)\n if (instance) {\n instance.setOptions(newOptions)\n }\n },\n {\n deep: true,\n }\n )\n\n watch(\n [referenceElementRef, popperElementRef],\n ([referenceElement, popperElement]) => {\n destroy()\n if (!referenceElement || !popperElement) return\n\n instanceRef.value = createPopper(\n referenceElement,\n popperElement,\n unref(options)\n )\n }\n )\n\n onBeforeUnmount(() => {\n destroy()\n })\n\n return {\n state: computed(() => ({ ...(unref(instanceRef)?.state || {}) })),\n styles: computed(() => unref(states).styles),\n attributes: computed(() => unref(states).attributes),\n update: () => unref(instanceRef)?.update(),\n forceUpdate: () => unref(instanceRef)?.forceUpdate(),\n // Preventing end users from modifying the instance.\n instanceRef: computed(() => unref(instanceRef)),\n }\n}\n\nfunction deriveState(state: State) {\n const elements = Object.keys(state.elements) as unknown as Array<\n keyof State['elements']\n >\n\n const styles = fromPairs(\n elements.map(\n (element) =>\n [element, state.styles[element] || {}] as [\n string,\n State['styles'][keyof State['styles']],\n ]\n )\n )\n\n const attributes = fromPairs(\n elements.map(\n (element) =>\n [element, state.attributes[element]] as [\n string,\n State['attributes'][keyof State['attributes']],\n ]\n )\n )\n\n return {\n styles,\n attributes,\n }\n}\n\nexport type UsePopperReturn = ReturnType<typeof usePopper>\n"],"names":[],"mappings":"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"}