diff --git a/src/lib/svelte-json-tree/SvelteJsonTree/JSONNested.svelte b/src/lib/svelte-json-tree/SvelteJsonTree/JSONNested.svelte index b99d5c9..123da71 100644 --- a/src/lib/svelte-json-tree/SvelteJsonTree/JSONNested.svelte +++ b/src/lib/svelte-json-tree/SvelteJsonTree/JSONNested.svelte @@ -38,6 +38,34 @@ $expanded = !$expanded; } + // Track mouse events to prevent collapse during text selection + let mouseDownTarget: EventTarget | null = null; + let mouseDownTime = 0; + + function handleMouseDown(event: MouseEvent) { + mouseDownTarget = event.target; + mouseDownTime = Date.now(); + } + + function handleClick(event: MouseEvent) { + const clickTime = Date.now(); + const timeDiff = clickTime - mouseDownTime; + + // If the mouse moved to a different target or took longer than 200ms, + // it's likely a text selection drag, so don't toggle + if (mouseDownTarget !== event.target || timeDiff > 200) { + return; + } + + // Check if there's any text selection + const selection = window.getSelection(); + if (selection && selection.toString().length > 0) { + return; + } + + toggleExpand(); + } + $: child_expanded = keys.map(() => writable(false)); @@ -56,7 +84,7 @@ {#if $expanded} -