@lui-ui/lui-vue
Version:
This template should help get you started developing with Vue 3 in Vite. The template uses Vue 3 `<script setup>` SFCs, check out the [script setup docs](https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup) to learn more.
29 lines (28 loc) • 987 B
JavaScript
import { computed } from "vue";
import { isClient } from "../utils/isClient.mjs";
import { useId } from "../utils/useId.mjs";
const wrapperId = "lui-teleport-wrapper";
function createWrapper() {
const body = document.getElementsByTagName("body");
const teleportWrapper = document.createElement("div");
teleportWrapper.setAttribute("id", wrapperId);
body[0].appendChild(teleportWrapper);
return teleportWrapper;
}
function createElement(name) {
const id = `lui-teleport-${name}-${useId()}`;
const teleportElement = document.createElement("div");
teleportElement.setAttribute("id", id);
return teleportElement;
}
export function useTeleport(name) {
const teleportTarget = computed(() => {
if (!isClient())
return void 0;
const wrapper = document.getElementById("lui-teleport-wrapper") || createWrapper();
const targetElement = createElement(name);
wrapper.appendChild(targetElement);
return targetElement;
});
return { teleportTarget };
}