element-plus
Version:
A Component Library for Vue 3
1 lines • 4.72 kB
Source Map (JSON)
{"version":3,"file":"use-content.mjs","sources":["../../../../../../../packages/components/popper/src/composables/use-content.ts"],"sourcesContent":["import {\n computed,\n inject,\n onBeforeUnmount,\n onMounted,\n ref,\n unref,\n watch,\n} from 'vue'\nimport { isUndefined } from 'lodash-unified'\nimport { usePopper } from '@element-plus/hooks'\nimport { POPPER_INJECTION_KEY } from '../constants'\nimport { buildPopperOptions, unwrapMeasurableEl } from '../utils'\n\nimport type { Modifier } from '@popperjs/core'\nimport type { PartialOptions } from '@element-plus/hooks'\nimport type { PopperContentProps } from '../content'\n\nconst DEFAULT_ARROW_OFFSET = 0\n\nexport const usePopperContent = (props: PopperContentProps) => {\n const { popperInstanceRef, contentRef, triggerRef, role } = inject(\n POPPER_INJECTION_KEY,\n undefined\n )!\n\n const arrowRef = ref<HTMLElement>()\n const arrowOffset = computed(() => props.arrowOffset)\n\n const eventListenerModifier = computed(() => {\n return {\n name: 'eventListeners',\n enabled: !!props.visible,\n } as Modifier<'eventListeners', any>\n })\n\n const arrowModifier = computed(() => {\n const arrowEl = unref(arrowRef)\n const offset = unref(arrowOffset) ?? DEFAULT_ARROW_OFFSET\n // Seems like the `phase` and `fn` is required by Modifier type\n // But on its documentation they didn't specify that.\n // Refer to https://popper.js.org/docs/v2/modifiers/arrow/\n return {\n name: 'arrow',\n enabled: !isUndefined(arrowEl),\n options: {\n element: arrowEl,\n padding: offset,\n },\n } as any\n })\n\n const options = computed<PartialOptions>(() => {\n return {\n onFirstUpdate: () => {\n update()\n },\n ...buildPopperOptions(props, [\n unref(arrowModifier),\n unref(eventListenerModifier),\n ]),\n }\n })\n\n const computedReference = computed(\n () => unwrapMeasurableEl(props.referenceEl) || unref(triggerRef)\n )\n\n const { attributes, state, styles, update, forceUpdate, instanceRef } =\n usePopper(computedReference, contentRef, options)\n\n watch(instanceRef, (instance) => (popperInstanceRef.value = instance), {\n flush: 'sync',\n })\n\n onMounted(() => {\n watch(\n () => unref(computedReference)?.getBoundingClientRect?.(),\n () => {\n update()\n }\n )\n })\n\n onBeforeUnmount(() => {\n popperInstanceRef.value = undefined\n })\n\n return {\n attributes,\n arrowRef,\n contentRef,\n instanceRef,\n state,\n styles,\n role,\n\n forceUpdate,\n update,\n }\n}\n\nexport type UsePopperContentReturn = ReturnType<typeof usePopperContent>\n"],"names":[],"mappings":";;;;;;AAkBA,MAAM,oBAAA,GAAuB,CAAA;AAEtB,MAAM,gBAAA,GAAmB,CAAC,KAAA,KAA8B;AAC7D,EAAA,MAAM,EAAE,iBAAA,EAAmB,UAAA,EAAY,UAAA,EAAY,MAAK,GAAI,MAAA;AAAA,IAC1D,oBAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,MAAM,WAAW,GAAA,EAAiB;AAClC,EAAA,MAAM,WAAA,GAAc,QAAA,CAAS,MAAM,KAAA,CAAM,WAAW,CAAA;AAEpD,EAAA,MAAM,qBAAA,GAAwB,SAAS,MAAM;AAC3C,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,gBAAA;AAAA,MACN,OAAA,EAAS,CAAC,CAAC,KAAA,CAAM;AAAA,KACnB;AAAA,EACF,CAAC,CAAA;AAED,EAAA,MAAM,aAAA,GAAgB,SAAS,MAAM;AApCvC,IAAA,IAAA,EAAA;AAqCI,IAAA,MAAM,OAAA,GAAU,MAAM,QAAQ,CAAA;AAC9B,IAAA,MAAM,MAAA,GAAA,CAAS,EAAA,GAAA,KAAA,CAAM,WAAW,CAAA,KAAjB,IAAA,GAAA,EAAA,GAAsB,oBAAA;AAIrC,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,OAAA;AAAA,MACN,OAAA,EAAS,CAAC,WAAA,CAAY,OAAO,CAAA;AAAA,MAC7B,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,OAAA;AAAA,QACT,OAAA,EAAS;AAAA;AACX,KACF;AAAA,EACF,CAAC,CAAA;AAED,EAAA,MAAM,OAAA,GAAU,SAAyB,MAAM;AAC7C,IAAA,OAAO;AAAA,MACL,eAAe,MAAM;AACnB,QAAA,MAAA,EAAO;AAAA,MACT,CAAA;AAAA,MACA,GAAG,mBAAmB,KAAA,EAAO;AAAA,QAC3B,MAAM,aAAa,CAAA;AAAA,QACnB,MAAM,qBAAqB;AAAA,OAC5B;AAAA,KACH;AAAA,EACF,CAAC,CAAA;AAED,EAAA,MAAM,iBAAA,GAAoB,QAAA;AAAA,IACxB,MAAM,kBAAA,CAAmB,KAAA,CAAM,WAAW,CAAA,IAAK,MAAM,UAAU;AAAA,GACjE;AAEA,EAAA,MAAM,EAAE,UAAA,EAAY,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,WAAA,EAAa,WAAA,EAAY,GAClE,SAAA,CAAU,iBAAA,EAAmB,UAAA,EAAY,OAAO,CAAA;AAElD,EAAA,KAAA,CAAM,WAAA,EAAa,CAAC,QAAA,KAAc,iBAAA,CAAkB,QAAQ,QAAA,EAAW;AAAA,IACrE,KAAA,EAAO;AAAA,GACR,CAAA;AAED,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,KAAA;AAAA,MACE,MAAG;AA7ET,QAAA,IAAA,EAAA,EAAA,EAAA;AA6EY,QAAA,OAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,iBAAiB,CAAA,KAAvB,IAAA,GAAA,MAAA,GAAA,EAAA,CAA0B,qBAAA,KAA1B,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA;AAAA,MAAA,CAAA;AAAA,MACN,MAAM;AACJ,QAAA,MAAA,EAAO;AAAA,MACT;AAAA,KACF;AAAA,EACF,CAAC,CAAA;AAED,EAAA,eAAA,CAAgB,MAAM;AACpB,IAAA,iBAAA,CAAkB,KAAA,GAAQ,MAAA;AAAA,EAC5B,CAAC,CAAA;AAED,EAAA,OAAO;AAAA,IACL,UAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,IAAA;AAAA,IAEA,WAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}