diff --git a/src/App.svelte b/src/App.svelte
index b92f7d7..3e74034 100644
--- a/src/App.svelte
+++ b/src/App.svelte
@@ -17,6 +17,7 @@
import { fly } from "svelte/transition";
import LogMessage from "./lib/LogMessage.svelte";
import { LogMessageType } from "./lib/LogMessageType.ts";
+ import MeltContextMenu from "./lib/MeltContextMenu.svelte";
import { tooltip } from "./lib/tooltip.ts";
@@ -246,6 +247,7 @@
ContextMenu and context-target:
+
+ import { createContextMenu, melt } from "@melt-ui/svelte";
+ import { get, writable } from "svelte/store";
+
+ ///////// USER CODE: Business logic of the actual context menu instance /////////////
+
+ const settingsSync = writable(true);
+ const hideMeltUI = writable(false);
+
+ let settingsSyncState = $state($settingsSync);
+ settingsSync.subscribe((s) => {
+ console.log(s);
+ settingsSyncState = s;
+ });
+
+ const {
+ elements: { trigger, menu, item, separator },
+ builders: { createSubmenu, createMenuRadioGroup, createCheckboxItem },
+ } = createContextMenu();
+
+ const {
+ elements: { subMenu: subMenuA, subTrigger: subTriggerA },
+ } = createSubmenu();
+
+ const {
+ elements: { radioGroup, radioItem },
+ helpers: { isChecked },
+ } = createMenuRadioGroup({
+ defaultValue: "Hunter Johnston",
+ });
+
+ const {
+ elements: { checkboxItem },
+ } = createCheckboxItem({
+ checked: settingsSync,
+ });
+
+ const {
+ elements: { checkboxItem: checkboxItemA },
+ } = createCheckboxItem({
+ checked: hideMeltUI,
+ });
+
+ const personsArr = [
+ "Hunter Johnston",
+ "Thomas G. Lopes",
+ "Adrian Gonz",
+ "Franck Poingt",
+ ];
+
+ let menuRender = [
+ {
+ fn: menuItem,
+ descr: item,
+ fields: {
+ label: "About Melt UI",
+ diabled: false,
+ hotkey: "⇧⌘N",
+ },
+ },
+ {
+ fn: menuItem,
+ descr: item,
+ fields: {
+ label: "Check for Updates...",
+ diabled: true,
+ hotkey: "⇧U",
+ },
+ },
+ {
+ fn: menuSeparator,
+ descr: separator,
+ },
+ {
+ fn: menuCheckbox,
+ descr: checkboxItem,
+ fields: {
+ label: "Settings Sync is On",
+ disabled: false,
+ hotkey: "ABC",
+ ischecked: () => settingsSyncState,
+ },
+ },
+ {
+ fn: menuItem,
+ descr: subTriggerA,
+ fields: {
+ label: "Select profile",
+ diabled: false,
+ hotkey: "⇧P",
+ },
+ },
+ {
+ fn: menuSeparator,
+ descr: separator,
+ },
+ {
+ fn: menuSubmenu,
+ fields: {
+ subtree: [
+ {
+ fn: menuCheckbox,
+ descr: checkboxItem,
+ fields: {
+ label: "Settings Sync is On",
+ disabled: false,
+ hotkey: "ABC",
+ ischecked: () => settingsSyncState,
+ },
+ },
+ ],
+ },
+ descr: subMenuA,
+ },
+ ];
+
+ let menuMain = {
+ fn: menuSubmenu,
+ descr: menu,
+ subtree: menuRender,
+ };
+
+ let menuRef1 = () => {
+ return $menu;
+ };
+ let menuRef2 = () => menu;
+
+
+
+
+
+
+
+ Right click me.
+
+
+{@render menuMenu(()=> {return $menu}, () => menu, {subtree: menuRender})}
+
+
+
+
+
+
+{#snippet content(arr)}
+ {#each arr as element, i}
+ {@render element.fn(element.descr, element.fields)}
+ {/each}
+{/snippet}
+
+{#snippet menuSubmenu(descriptor, fields)}
+
+{/snippet}
+
+{#snippet menuMenu(descriptor1, descriptor2, fields)}
+
+{/snippet}
+
+{#snippet menuSeparator(descriptor)}
+
+{/snippet}
+
+{#snippet menuRadio(descriptor, fields)}
+
+
+ {#if get(fields.helper)(fields.label) === true}
+ [x]
+ {:else if get(fields.helper)(fields.label) === false}
+ [ ]
+ {/if}
+
+ {label}
+
{fields.hotkey}
+
+{/snippet}
+
+{#snippet menuCheckbox(descriptor, fields)}
+
+
+ {#if fields.ischecked() == true}
+ [x]
+ {:else}
+ [ ]
+ {/if}
+
+ {fields.label}
+
{fields.hotkey}
+
+{/snippet}
+
+{#snippet menuItem(descriptor, fields)}
+
+ {fields.label}
+
{fields.hotkey}
+
+{/snippet}
+
+