diff --git a/frontend/src/lib/components/GfmMarkdown.svelte b/frontend/src/lib/components/GfmMarkdown.svelte
index 7392de5484..83cce90fbe 100644
--- a/frontend/src/lib/components/GfmMarkdown.svelte
+++ b/frontend/src/lib/components/GfmMarkdown.svelte
@@ -3,7 +3,12 @@
import { gfmPlugin } from 'svelte-exmarkdown/gfm'
import rehypeRaw from 'rehype-raw'
import { rehypeGithubAlerts } from 'rehype-github-alerts'
- export let md: string
+ interface Props {
+ md: string
+ noPadding?: boolean
+ }
+
+ let { md, noPadding }: Props = $props()
const plugins: Plugin[] = [
gfmPlugin(),
{ rehypePlugin: [rehypeRaw] },
@@ -11,7 +16,7 @@
]
-
+
diff --git a/frontend/src/lib/components/graph/NoteTool.svelte b/frontend/src/lib/components/graph/NoteTool.svelte
index 0dd3163801..01db3d8f05 100644
--- a/frontend/src/lib/components/graph/NoteTool.svelte
+++ b/frontend/src/lib/components/graph/NoteTool.svelte
@@ -29,7 +29,6 @@
}
function onPointerMove(event: PointerEvent) {
- console.log('NoteTool: pointer move', event)
if (event.buttons !== 1) return
// Use page coordinates as reference
diff --git a/frontend/src/lib/components/graph/renderers/nodes/NoteNode.svelte b/frontend/src/lib/components/graph/renderers/nodes/NoteNode.svelte
index 136138e166..0c02e71a9d 100644
--- a/frontend/src/lib/components/graph/renderers/nodes/NoteNode.svelte
+++ b/frontend/src/lib/components/graph/renderers/nodes/NoteNode.svelte
@@ -2,6 +2,8 @@
import { NodeResizer } from '@xyflow/svelte'
import { X } from 'lucide-svelte'
import { twMerge } from 'tailwind-merge'
+ import GfmMarkdown from '$lib/components/GfmMarkdown.svelte'
+ import { fade } from 'svelte/transition'
interface Props {
data: {
@@ -18,15 +20,14 @@
let { data, selected = false, dragging = false }: Props = $props()
let textareaElement: HTMLTextAreaElement | undefined = $state(undefined)
+ let editMode = $state(false)
+ let hovering = $state(false)
function handleTextChange(event: Event) {
const target = event.target as HTMLTextAreaElement
+ console.log('Text change detected', target.value)
// Call the update callback
data.onUpdate?.(target.value)
-
- // Auto-resize textarea
- target.style.height = 'auto'
- target.style.height = target.scrollHeight + 'px'
}
function handleDelete(event: Event) {
@@ -36,14 +37,31 @@
data.onDelete?.()
}
- // Auto-resize textarea when text changes
+ function handleDoubleClick(event: Event) {
+ console.log('Double click detected', { editMode, selected, dragging })
+ event.preventDefault()
+ event.stopPropagation()
+ editMode = true
+ // Focus the textarea after a short delay to ensure it's rendered
+ setTimeout(() => {
+ textareaElement?.focus()
+ }, 0)
+ }
+
+ function handleMouseEnter() {
+ hovering = true
+ }
+
+ function handleMouseLeave() {
+ hovering = false
+ }
+
+ // Exit edit mode when note is deselected
$effect(() => {
- if (textareaElement) {
- textareaElement.style.height = 'auto'
- textareaElement.style.height = textareaElement.scrollHeight + 'px'
+ if (!selected) {
+ editMode = false
}
})
- $inspect('dbg selected', selected)
{
dragging = false
}}
+ onmouseenter={handleMouseEnter}
+ onmouseleave={handleMouseLeave}
role="note"
>
+
+ {#if hovering}
+ {#if !editMode && data.text}
+
+ Double click to edit
+
+ {:else}
+
GH Markdown
+ {/if}
+ {/if}
+
-
-
+
+ {#if editMode}
+
+
+ {:else}
+
+
+
+ {#if data.text}
+
+
+
+ {:else}
+
Double-click to add a note
+ {/if}
+
+ {/if}