mirror of
https://github.com/BetterSEQTA/BetterSEQTA-Plus.git
synced 2026-06-06 11:44:40 +00:00
feat: render floating popup at extension root
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
import type { Action } from "svelte/action";
|
||||
|
||||
/**
|
||||
* Svelte action that moves the element to a different DOM target.
|
||||
* Defaults to the nearest ShadowRoot so styles remain intact when the app
|
||||
* is rendered inside a shadow DOM. Falls back to document.body otherwise.
|
||||
* Keeps all Svelte reactivity/events intact while escaping ancestor stacking contexts.
|
||||
*/
|
||||
export const portal: Action<HTMLElement, HTMLElement | ShadowRoot | undefined> = (node, target) => {
|
||||
const root = node.getRootNode();
|
||||
const dest = target ?? (root instanceof ShadowRoot ? root : document.body);
|
||||
dest.appendChild(node);
|
||||
|
||||
return {
|
||||
update(newTarget) {
|
||||
(newTarget ?? dest).appendChild(node);
|
||||
},
|
||||
destroy() {
|
||||
node.remove();
|
||||
},
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user