@keenmate/svelte-treeview 4.2.1 → 4.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -69,7 +69,7 @@
69
69
  onNodeDragStart?: (node: LTreeNode<T>, event: DragEvent) => void;
70
70
  onNodeDragOver?: (node: LTreeNode<T>, event: DragEvent) => void;
71
71
  onNodeDrop?: (node: LTreeNode<T>, draggedNode: LTreeNode<T>, event: DragEvent) => void;
72
- contextMenuCallback?: (node: LTreeNode<T>) => ContextMenuItem[];
72
+ contextMenuCallback?: (node: LTreeNode<T>, closeMenuCallback: () => void) => ContextMenuItem[];
73
73
 
74
74
  // VISUALS
75
75
  bodyClass?: string | null | undefined;
@@ -178,6 +178,13 @@
178
178
  return tree?.searchNodes(searchText, searchOptions) || [];
179
179
  }
180
180
 
181
+ // svelte-ignore non_reactive_update
182
+ export function closeContextMenu() {
183
+ contextMenuVisible = false;
184
+ contextMenuNode = null;
185
+ isDebugMenuActive = false;
186
+ }
187
+
181
188
  export async function scrollToPath(
182
189
  path: string,
183
190
  options?: { expand?: boolean; highlight?: boolean; scrollOptions?: ScrollIntoViewOptions }
@@ -325,11 +332,6 @@
325
332
  isDebugMenuActive = false; // This is a user-triggered menu, not debug menu
326
333
  }
327
334
 
328
- function closeContextMenu() {
329
- contextMenuVisible = false;
330
- contextMenuNode = null;
331
- isDebugMenuActive = false;
332
- }
333
335
 
334
336
  function _onNodeDragStart(node: LTreeNode<T>, event: DragEvent) {
335
337
  draggedNode = node;
@@ -529,15 +531,23 @@
529
531
  {#if contextMenuVisible && contextMenuNode}
530
532
  <div class="ltree-context-menu" style="left: {contextMenuX}px; top: {contextMenuY}px;">
531
533
  {#if contextMenuCallback}
532
- {@const menuItems = contextMenuCallback(contextMenuNode)}
534
+ {@const menuItems = contextMenuCallback(contextMenuNode, closeContextMenu)}
533
535
  {#each menuItems as item}
534
536
  {#if item.isDivider}
535
537
  <div class="ltree-context-menu-divider"></div>
536
538
  {:else}
537
539
  <div
538
- class="ltree-context-menu-item"
540
+ class="ltree-context-menu-item {item.className || ''}"
539
541
  class:ltree-context-menu-item-disabled={item.isDisabled}
540
- onclick={() => !item.isDisabled && item.callback()}
542
+ onclick={async () => {
543
+ if (!item.isDisabled) {
544
+ try {
545
+ await item.callback();
546
+ } catch (error) {
547
+ console.error('Context menu callback error:', error);
548
+ }
549
+ }
550
+ }}
541
551
  >
542
552
  {#if item.icon}
543
553
  <span class="ltree-context-menu-icon">{item.icon}</span>
@@ -43,7 +43,7 @@ declare function $$render<T>(): {
43
43
  onNodeDragStart?: (node: LTreeNode<T>, event: DragEvent) => void;
44
44
  onNodeDragOver?: (node: LTreeNode<T>, event: DragEvent) => void;
45
45
  onNodeDrop?: (node: LTreeNode<T>, draggedNode: LTreeNode<T>, event: DragEvent) => void;
46
- contextMenuCallback?: (node: LTreeNode<T>) => ContextMenuItem[];
46
+ contextMenuCallback?: (node: LTreeNode<T>, closeMenuCallback: () => void) => ContextMenuItem[];
47
47
  bodyClass?: string | null | undefined;
48
48
  selectedNodeClass?: string | null | undefined;
49
49
  dragOverNodeClass?: string | null | undefined;
@@ -62,6 +62,7 @@ declare function $$render<T>(): {
62
62
  collapseAll: (nodePath?: string | null | undefined) => void;
63
63
  filterNodes: (searchText: string, searchOptions?: SearchOptions) => void;
64
64
  searchNodes: (searchText: string | null | undefined, searchOptions?: SearchOptions) => LTreeNode<T>[];
65
+ closeContextMenu: () => void;
65
66
  scrollToPath: (path: string, options?: {
66
67
  expand?: boolean;
67
68
  highlight?: boolean;
@@ -84,6 +85,7 @@ declare class __sveltets_Render<T> {
84
85
  collapseAll: (nodePath?: string | null | undefined) => void;
85
86
  filterNodes: (searchText: string, searchOptions?: SearchOptions) => void;
86
87
  searchNodes: (searchText: string | null | undefined, searchOptions?: SearchOptions) => LTreeNode<T>[];
88
+ closeContextMenu: () => void;
87
89
  scrollToPath: (path: string, options?: {
88
90
  expand?: boolean;
89
91
  highlight?: boolean;
@@ -5,8 +5,9 @@ export interface ContextMenuItem {
5
5
  icon?: string;
6
6
  title: string;
7
7
  isDisabled?: boolean;
8
- callback: () => void;
8
+ callback: () => void | Promise<void>;
9
9
  isDivider?: boolean;
10
+ className?: string;
10
11
  }
11
12
  export interface InsertArrayResult<T> {
12
13
  successful: number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@keenmate/svelte-treeview",
3
- "version": "4.2.1",
3
+ "version": "4.3.1",
4
4
  "scripts": {
5
5
  "dev": "vite dev --port 17777",
6
6
  "build": "vite build && npm run prepack",