Files
DeviceManager/src/lib/popup.ts
Thea Schöbl 8b2bfee099 feat: multi-purpose site
feat: editor
feat: plugin editor
2024-08-01 01:31:04 +02:00

35 lines
816 B
TypeScript

import tippy from "tippy.js";
import type { Action } from "svelte/action";
import { unmount, mount, type Component } from "svelte";
export const popup: Action<HTMLButtonElement, Component> = (
node,
Component,
) => {
let component: {} | undefined;
let target: HTMLElement | undefined;
const edit = tippy(node, {
interactive: true,
placement: "right",
trigger: "click",
onShow(instance) {
target = instance.popper.querySelector(".tippy-content") as HTMLElement;
target.classList.add("active");
component ??= mount(Component, { target });
},
onHidden() {
if (component) {
unmount(component);
component = undefined;
}
target?.classList.remove("active");
},
});
return {
destroy() {
edit.destroy();
},
};
};