{"version":3,"file":"content.mjs","sources":["../../../../../../packages/components/popper/src/content.vue"],"sourcesContent":["<template>\r\n  <div\r\n    ref=\"popperContentRef\"\r\n    :style=\"contentStyle\"\r\n    :class=\"contentClass\"\r\n    role=\"tooltip\"\r\n    @mouseenter=\"(e) => $emit('mouseenter', e)\"\r\n    @mouseleave=\"(e) => $emit('mouseleave', e)\"\r\n  >\r\n    <slot />\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport {\r\n  computed,\r\n  defineComponent,\r\n  ref,\r\n  inject,\r\n  provide,\r\n  unref,\r\n  onMounted,\r\n  watch,\r\n} from 'vue'\r\nimport { createPopper } from '@popperjs/core'\r\nimport { useZIndex } from '@sgui-plus/hooks'\r\nimport { POPPER_INJECTION_KEY, POPPER_CONTENT_INJECTION_KEY, SgPopperContentInjectionContext } from './tokens'\r\nimport { usePopperContentProps } from './popper'\r\nimport { buildPopperOptions, unwrapMeasurableEl } from './utils'\r\nimport { isNumber } from '@vueuse/core'\r\n\r\nexport default defineComponent({\r\n  name: 'SgPopperContent',\r\n  props: usePopperContentProps,\r\n  emits: ['mouseenter', 'mouseleave'],\r\n  setup(props) {\r\n    const { nextZIndex } = useZIndex()\r\n\r\n    const { triggerRef, popperInstanceRef, contentRef } = inject(\r\n      POPPER_INJECTION_KEY,\r\n      undefined\r\n    )!\r\n    const popperContentRef = ref<HTMLElement | null>(null)\r\n    const arrowRef = ref<HTMLElement | null>(null)\r\n    const arrowOffset = ref<number>()\r\n    provide(POPPER_CONTENT_INJECTION_KEY, {\r\n      arrowRef,\r\n      arrowOffset,\r\n    } as SgPopperContentInjectionContext)\r\n    const contentZIndex = ref(props.zIndex || nextZIndex())\r\n\r\n    const maxWidth = props.maxWidth\r\n      ? isNumber(props.maxWidth) ? props.maxWidth + 'px' : props.maxWidth\r\n      : 'none'\r\n\r\n    const contentStyle = computed(\r\n      () => [{\r\n        zIndex: unref(contentZIndex),\r\n        maxWidth\r\n      }, props.popperStyle] as any\r\n    )\r\n\r\n    const contentClass = computed(() => [\r\n      {\r\n        'sg-popper': true,\r\n        'is-pure': props.pure,\r\n        [`is-${props.effect}`]: !!props.effect,\r\n      },\r\n      props.popperClass,\r\n    ])\r\n\r\n    const createPopperInstance = ({\r\n      referenceEl,\r\n      popperContentEl,\r\n      arrowEl,\r\n    }) => {\r\n      const options = buildPopperOptions(props, {\r\n        arrowEl,\r\n        arrowOffset: unref(arrowOffset),\r\n      })\r\n\r\n      return createPopper(referenceEl, popperContentEl, options)\r\n    }\r\n\r\n    const updatePopper = () => {\r\n      unref(popperInstanceRef)?.update()\r\n      contentZIndex.value = props.zIndex || nextZIndex()\r\n    }\r\n\r\n    onMounted(() => {\r\n      let updateHandle: ReturnType<typeof watch>\r\n      watch(\r\n        () => unwrapMeasurableEl(props.referenceEl) || unref(triggerRef),\r\n        (val) => {\r\n          updateHandle?.()\r\n          if (val) {\r\n            popperInstanceRef.value?.destroy()\r\n            const popperContentEl = unref(popperContentRef)!\r\n            contentRef.value = popperContentEl as HTMLElement\r\n            const arrowEl = unref(arrowRef)\r\n\r\n            const newInstance = createPopperInstance({\r\n              referenceEl: val,\r\n              popperContentEl: unref(popperContentRef)!,\r\n              arrowEl,\r\n            })\r\n            popperInstanceRef.value = newInstance\r\n\r\n            updateHandle = watch(\r\n              () => val!.getBoundingClientRect(),\r\n              () => {\r\n                updatePopper()\r\n              },\r\n              {\r\n                immediate: true,\r\n              }\r\n            )\r\n          } else {\r\n            popperInstanceRef.value = null\r\n          }\r\n        },\r\n        {\r\n          immediate: true,\r\n        }\r\n      )\r\n    })\r\n\r\n    return {\r\n      popperContentRef,\r\n      popperInstanceRef,\r\n      contentStyle,\r\n      contentClass,\r\n      updatePopper,\r\n    }\r\n  },\r\n})\r\n</script>\r\n"],"names":["_openBlock","_createElementBlock","_normalizeStyle","_normalizeClass"],"mappings":";;;;SAEQ,WAAkB,CAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,KAAA,EAAA,QAAA,EAAA;SAChBA,SAAc,EAAA,EAAAC,kBAAA,CAAA,KAAA,EAAA;AAAA,IACnB,GAAK,EAAA,kBAAA;AAAA,IACN,OAAKC,cAAS,CAAA,IAAA,CAAA,YAAA,CAAA;AAAA,IACb,KAAU,EAAAC,cAAA,CAAA,IAAA,CAAA,YAAA,CAAA;AAAA,IACV,IAAA,EAAA,SAAA;AAAA,IAAA,YAAA,EAAA,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,KAAA,IAAA,CAAA,KAAA,CAAA,YAAA,EAAA,CAAA,CAAA,CAAA;IAED,YAAQ,EAAA,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,KAAA,IAAA,CAAA,KAAA,CAAA,YAAA,EAAA,CAAA,CAAA,CAAA;AAAA,GAAA,EAAA;;;;;;;;"}