{"version":3,"file":"Presence.cjs","sources":["../../src/Presence/Presence.ts"],"sourcesContent":["import type {\n SlotsType,\n VNode,\n} from 'vue'\nimport { unrefElement } from '@vueuse/core'\nimport {\n defineComponent,\n getCurrentInstance,\n h,\n ref,\n toRefs,\n} from 'vue'\nimport { renderSlotFragments } from '@/shared'\nimport { usePresence } from './usePresence'\n\nexport interface PresenceProps {\n /**\n * Conditional to mount or unmount the child element. Similar to `v-if`\n *\n * @required true\n */\n present: boolean\n /**\n * Force the element to render all the time.\n *\n * Useful for programmatically render grandchild component with the exposed `present`\n *\n * @defaultValue false\n */\n forceMount?: boolean\n}\n\nexport default defineComponent({\n name: 'Presence',\n props: {\n present: {\n type: Boolean,\n required: true,\n },\n forceMount: {\n type: Boolean,\n },\n },\n slots: {} as SlotsType<{\n default: (opts: { present: boolean }) => any\n }>,\n setup(props, { slots, expose }) {\n const { present, forceMount } = toRefs(props)\n\n const node = ref()\n // Mount composables once to prevent duplicated eventListener\n const { isPresent } = usePresence(present, node)\n expose({ present: isPresent })\n\n let children = slots.default({ present: isPresent.value })\n children = renderSlotFragments(children || [])\n const instance = getCurrentInstance()\n\n if (children && children?.length > 1) {\n const componentName = instance?.parent?.type.name\n ? `<${instance.parent.type.name} />`\n : 'component'\n\n throw new Error(\n [\n `Detected an invalid children for \\`${componentName}\\` for \\`Presence\\` component.`,\n '',\n 'Note: Presence works similarly to `v-if` directly, but it waits for animation/transition to finished before unmounting. So it expect only one direct child of valid VNode type.',\n 'You can apply a few solutions:',\n [\n 'Provide a single child element so that `presence` directive attach correctly.',\n 'Ensure the first child is an actual element instead of a raw text node or comment node.',\n ]\n .map(line => ` - ${line}`)\n .join('\\n'),\n ].join('\\n'),\n )\n }\n\n return () => {\n if (forceMount.value || present.value || isPresent.value) {\n return h(slots.default({ present: isPresent.value })[0] as VNode, {\n ref: (v) => {\n const el = unrefElement(v as HTMLElement)\n if (typeof el?.hasAttribute === 'undefined')\n return el\n\n // special case to handle animation for PopperContent\n if (el?.hasAttribute('data-reka-popper-content-wrapper'))\n node.value = el.firstElementChild as HTMLElement\n else\n node.value = el\n\n return el\n },\n })\n }\n else { return null }\n }\n },\n})\n"],"names":["defineComponent","toRefs","ref","usePresence","renderSlotFragments","getCurrentInstance","h","unrefElement"],"mappings":";;;;;;;AAgCA,iBAAeA,mBAAgB,CAAA;AAAA,EAC7B,IAAM,EAAA,UAAA;AAAA,EACN,KAAO,EAAA;AAAA,IACL,OAAS,EAAA;AAAA,MACP,IAAM,EAAA,OAAA;AAAA,MACN,QAAU,EAAA;AAAA,KACZ;AAAA,IACA,UAAY,EAAA;AAAA,MACV,IAAM,EAAA;AAAA;AACR,GACF;AAAA,EACA,OAAO,EAAC;AAAA,EAGR,KAAM,CAAA,KAAA,EAAO,EAAE,KAAA,EAAO,QAAU,EAAA;AAC9B,IAAA,MAAM,EAAE,OAAA,EAAS,UAAW,EAAA,GAAIC,WAAO,KAAK,CAAA;AAE5C,IAAA,MAAM,OAAOC,OAAiB,EAAA;AAE9B,IAAA,MAAM,EAAE,SAAA,EAAc,GAAAC,gCAAA,CAAY,SAAS,IAAI,CAAA;AAC/C,IAAO,MAAA,CAAA,EAAE,OAAS,EAAA,SAAA,EAAW,CAAA;AAE7B,IAAA,IAAI,WAAW,KAAM,CAAA,OAAA,CAAQ,EAAE,OAAS,EAAA,SAAA,CAAU,OAAO,CAAA;AACzD,IAAW,QAAA,GAAAC,8CAAA,CAAoB,QAAY,IAAA,EAAE,CAAA;AAC7C,IAAA,MAAM,WAAWC,sBAAmB,EAAA;AAEpC,IAAI,IAAA,QAAA,IAAY,QAAU,EAAA,MAAA,GAAS,CAAG,EAAA;AACpC,MAAM,MAAA,aAAA,GAAgB,QAAU,EAAA,MAAA,EAAQ,IAAK,CAAA,IAAA,GACzC,IAAI,QAAS,CAAA,MAAA,CAAO,IAAK,CAAA,IAAI,CAC7B,GAAA,CAAA,GAAA,WAAA;AAEJ,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,UACE,sCAAsC,aAAa,CAAA,+BAAA,CAAA;AAAA,UACnD,EAAA;AAAA,UACA,iLAAA;AAAA,UACA,gCAAA;AAAA,UACA;AAAA,YACE,+EAAA;AAAA,YACA;AAAA,WACF,CACG,IAAI,CAAQ,IAAA,KAAA,CAAA,IAAA,EAAO,IAAI,CAAE,CAAA,CAAA,CACzB,KAAK,IAAI;AAAA,SACd,CAAE,KAAK,IAAI;AAAA,OACb;AAAA;AAGF,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,UAAW,CAAA,KAAA,IAAS,OAAQ,CAAA,KAAA,IAAS,UAAU,KAAO,EAAA;AACxD,QAAO,OAAAC,KAAA,CAAE,KAAM,CAAA,OAAA,CAAQ,EAAE,OAAA,EAAS,UAAU,KAAM,EAAC,CAAE,CAAA,CAAC,CAAY,EAAA;AAAA,UAChE,GAAA,EAAK,CAAC,CAAM,KAAA;AACV,YAAM,MAAA,EAAA,GAAKC,kBAAa,CAAgB,CAAA;AACxC,YAAI,IAAA,OAAO,IAAI,YAAiB,KAAA,WAAA;AAC9B,cAAO,OAAA,EAAA;AAGT,YAAI,IAAA,EAAA,EAAI,aAAa,kCAAkC,CAAA;AACrD,cAAA,IAAA,CAAK,QAAQ,EAAG,CAAA,iBAAA;AAAA;AAEhB,cAAA,IAAA,CAAK,KAAQ,GAAA,EAAA;AAEf,YAAO,OAAA,EAAA;AAAA;AACT,SACD,CAAA;AAAA,OAEE,MAAA;AAAE,QAAO,OAAA,IAAA;AAAA;AAAK,KACrB;AAAA;AAEJ,CAAC,CAAA;;;;"}