diff --git a/src/lib/context-target.ts b/src/lib/context-target.ts index 5f9c102..3c42a9b 100644 --- a/src/lib/context-target.ts +++ b/src/lib/context-target.ts @@ -1,24 +1,23 @@ import type { Action } from "svelte/action"; import ContextMenu, { type ContextMenuItem } from "./ContextMenu.svelte"; +import { mount, unmount } from "svelte"; import { get, writable, type Writable } from "svelte/store"; export interface ContextMenuOptions { items: ContextMenuItem[]; } -interface ContextMenuWritable extends Writable { +interface ContextMenuStore extends Writable | undefined> { close: () => void; } -export let contextMenu: ContextMenuWritable = createContextMenuStore(); - -function createContextMenuStore(): ContextMenuWritable { - const store: Writable = writable(undefined); +function createContextMenuStore(): ContextMenuStore { + const store: Writable | undefined> = writable(undefined); const close = () => { const cm = get(store); if (cm) { - cm.$destroy(); // Ensure that the context menu has a $destroy method + unmount(cm); store.set(undefined); } }; @@ -29,6 +28,8 @@ function createContextMenuStore(): ContextMenuWritable { }; } +export const contextMenu: ContextMenuStore = createContextMenuStore(); + export const contextTarget: Action = ( node: HTMLElement, options: ContextMenuOptions, @@ -45,7 +46,7 @@ export const contextTarget: Action = ( contextMenu.close(); contextMenu.set( - new ContextMenu({ + mount(ContextMenu, { target: document.body, props: { target: node,