UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 2.02 kB
{"version":3,"file":"index.mjs","sources":["../../../../../packages/hooks/use-teleport/index.ts"],"sourcesContent":["import { h, ref, Teleport, onUnmounted } from 'vue'\nimport { NOOP } from '@vue/shared'\nimport isServer from '@element-plus/utils/isServer'\nimport {\n createGlobalNode,\n removeGlobalNode,\n} from '@element-plus/utils/global-nodes'\n\nimport type { VNode, Ref } from 'vue'\n\nexport default (contentRenderer: () => VNode, appendToBody: Ref<boolean>) => {\n const isTeleportVisible = ref(false)\n\n if (isServer) {\n return {\n isTeleportVisible,\n showTeleport: NOOP,\n hideTeleport: NOOP,\n renderTeleport: NOOP,\n }\n }\n\n let $el: HTMLElement | null = null\n\n const showTeleport = () => {\n isTeleportVisible.value = true\n // this allows the delayed showing strategy since the the content itself could be enterable\n // e.g. el-popper\n if ($el !== null) return\n\n $el = createGlobalNode()\n }\n\n const hideTeleport = () => {\n isTeleportVisible.value = false\n if ($el !== null) {\n removeGlobalNode($el)\n $el = null\n }\n }\n\n const renderTeleport = () => {\n return appendToBody.value !== true\n ? contentRenderer()\n : isTeleportVisible.value\n ? [h(Teleport, { to: $el }, contentRenderer())]\n : undefined\n }\n\n onUnmounted(hideTeleport)\n\n return {\n isTeleportVisible,\n showTeleport,\n hideTeleport,\n renderTeleport,\n }\n}\n"],"names":[],"mappings":";;;;;AAUA,kBAAe,CAAC,iBAA8B,iBAA+B;AAC3E,QAAM,oBAAoB,IAAI;AAE9B,MAAI,UAAU;AACZ,WAAO;AAAA,MACL;AAAA,MACA,cAAc;AAAA,MACd,cAAc;AAAA,MACd,gBAAgB;AAAA;AAAA;AAIpB,MAAI,MAA0B;AAE9B,QAAM,eAAe,MAAM;AACzB,sBAAkB,QAAQ;AAG1B,QAAI,QAAQ;AAAM;AAElB,UAAM;AAAA;AAGR,QAAM,eAAe,MAAM;AACzB,sBAAkB,QAAQ;AAC1B,QAAI,QAAQ,MAAM;AAChB,uBAAiB;AACjB,YAAM;AAAA;AAAA;AAIV,QAAM,iBAAiB,MAAM;AAC3B,WAAO,aAAa,UAAU,OAC1B,oBACA,kBAAkB,QAClB,CAAC,EAAE,UAAU,EAAE,IAAI,OAAO,sBAC1B;AAAA;AAGN,cAAY;AAEZ,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA;;;;"}