{"version":3,"sources":["../src/env.ts","../src/core/load-mermaid.ts","../src/core/export.ts","../src/core/editor/adapters/registry.ts","../src/core/checks/parse.ts","../src/core/orid/model.ts","../src/core/orid/theme.ts","../src/core/orid/transpile.ts","../src/core/tips/parse.ts","../src/core/themes/colorize.ts","../src/core/themes/sketch.ts","../src/core/styles.css.ts","../src/core/ensure-styles.ts","../src/core/resolve-theme.ts","../src/core/render-pipeline.ts","../src/core/editor/form/form-styles.ts","../src/core/editor/form/orid-editor.ts","../src/core/editor/form/timeline-model.ts","../src/core/editor/form/timeline-editor.ts","../src/core/node-index.ts","../src/core/editor/scene/geometry.ts","../src/core/editor/render/node-metrics.ts","../src/core/editor/layout/mermaid-svg-layout.ts","../src/core/editor/interaction/commands.ts","../src/core/editor/scene/scene-ops.ts","../src/core/editor/round-trip/quadrant/model.ts","../src/core/editor/round-trip/xychart/index.ts","../src/core/editor/render/palette.ts","../src/core/editor/round-trip/c4/shapes.ts","../src/core/editor/layout/lanes.ts","../src/core/editor/round-trip/gitgraph/index.ts","../src/core/editor/scene/node-factory.ts","../src/core/editor/scene/shape-meta.ts","../src/core/editor/interaction/snap.ts","../src/core/editor/interaction/pointer.ts","../src/core/editor/interaction/text-edit.ts","../src/core/editor/render/dom.ts","../src/core/editor/interaction/viewport.ts","../src/core/editor/interaction/overlay.ts","../node_modules/roughjs/bundled/rough.esm.js","../src/core/editor/render/edges.ts","../src/core/editor/render/arch-icon.ts","../src/core/editor/round-trip/pie/index.ts","../src/core/editor/round-trip/packet/index.ts","../src/core/editor/round-trip/flowchart/syntax-maps.ts","../src/core/editor/round-trip/block/index.ts","../src/core/editor/round-trip/gantt/model.ts","../src/core/editor/render/shapes.ts","../src/core/editor/render/scene-renderer.ts","../src/core/editor/render/editor-styles.ts","../src/core/editor/scene/types.ts","../src/core/editor/controller.ts","../src/core/editor/round-trip/flowchart/parse.ts","../src/core/editor/round-trip/flowchart/serialize.ts","../src/core/editor/adapters/flowchart/index.ts","../src/core/editor/round-trip/state/parse.ts","../src/core/editor/round-trip/state/serialize.ts","../src/core/editor/adapters/state/index.ts","../src/core/editor/round-trip/er/parse.ts","../src/core/editor/round-trip/er/serialize.ts","../src/core/editor/adapters/er/index.ts","../src/core/editor/round-trip/class/parse.ts","../src/core/editor/round-trip/class/serialize.ts","../src/core/editor/adapters/class/index.ts","../src/core/editor/round-trip/mindmap/parse.ts","../src/core/editor/round-trip/mindmap/serialize.ts","../src/core/editor/adapters/mindmap/index.ts","../src/core/editor/round-trip/sequence/parse.ts","../src/core/editor/round-trip/sequence/serialize.ts","../src/core/editor/adapters/sequence/index.ts","../src/core/editor/round-trip/requirement/parse.ts","../src/core/editor/round-trip/requirement/serialize.ts","../src/core/editor/adapters/requirement/index.ts","../src/core/editor/round-trip/quadrant/parse.ts","../src/core/editor/round-trip/quadrant/serialize.ts","../src/core/editor/adapters/quadrant/index.ts","../src/core/editor/round-trip/c4/parse.ts","../src/core/editor/round-trip/c4/serialize.ts","../src/core/editor/adapters/c4/index.ts","../src/core/editor/round-trip/kanban/parse.ts","../src/core/editor/round-trip/kanban/serialize.ts","../src/core/editor/adapters/kanban/index.ts","../src/core/editor/round-trip/sankey/index.ts","../src/core/editor/adapters/sankey/index.ts","../src/core/editor/round-trip/journey/index.ts","../src/core/editor/adapters/journey/index.ts","../src/core/editor/round-trip/gantt/parse.ts","../src/core/editor/round-trip/gantt/serialize.ts","../src/core/editor/adapters/gantt/index.ts","../src/core/editor/adapters/pie/index.ts","../src/core/editor/adapters/xychart/index.ts","../src/core/editor/round-trip/architecture/index.ts","../src/core/editor/adapters/architecture/index.ts","../src/core/editor/adapters/block/index.ts","../src/core/editor/adapters/packet/index.ts","../src/core/editor/adapters/gitgraph/index.ts","../src/core/editor/render/shape-icon.ts"],"names":["m","svgEl","clone","el","i","l","e","x","y","w","h","resolve","a","body","url","lower","v","s","title","_","FRONTMATTER_RE","t","p","QUOTED_TARGET_RE","BARE_TARGET_RE","parseHeader","scan","c","n","r","g","b","stroke","SVG_NS","cached","k","d","events","wrap","rows","POINT_BOX","at","NODE_PALETTE","CLUSTER_PALETTE","INK_DARK","o","st","z","cap","u","f","M","P","S","O","L","T","D","A","passthrough","unit","isPseudo","j","W","ROW_H","OPENERS","CSS","strip","styleLines","escapeLabel","normalizeDirection","estimateSize","prescan","INDENT","bySourceIndex","normalizeDir","q","fmt","ORIGIN","NODE_W","NODE_H","EDGE_RE","H"],"mappings":"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A;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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","file":"editor.cjs","sourcesContent":["// SSR 安全:本套件可被 Next.js 等 server 端 import,故任何 DOM 存取都必須在\n// 執行階段(函式被呼叫時)才發生,且先經過這裡的瀏覽器環境判斷。\n\nexport function isBrowser(): boolean {\n  return typeof document !== 'undefined' && typeof window !== 'undefined';\n}\n\n/** 在需要 DOM 的進入點呼叫;非瀏覽器環境拋出明確錯誤而非無聲失敗。 */\nexport function assertBrowser(api: string): void {\n  if (!isBrowser()) {\n    throw new Error(`[react-super-mermaid] ${api} 需要瀏覽器 DOM(document / window)。`);\n  }\n}\n","// 「載入外部 mermaid」解析器。\n// 解析順序:(a) 注入實例 > (b) peer 動態 import('mermaid') > (c) CDN ESM import。\n// 模組級 memoize,讓笨重的 mermaid 模組整頁只載入一次。\n// 全程無頂層 DOM 存取,SSR 安全(快取初始為 null)。\n\nimport { assertBrowser } from '../env';\nimport type { LoadMermaidOptions, MermaidLike } from '../types';\n\nlet cached: Promise<MermaidLike> | null = null;\n\nexport function loadMermaid(opts: LoadMermaidOptions = {}): Promise<MermaidLike> {\n  const source = opts.source ?? {};\n\n  // (a) 注入實例 — 同步、不觸網、不打包。\n  if (source.instance) {\n    cached = Promise.resolve(normalize(source.instance));\n    return cached;\n  }\n\n  if (opts.fresh) {\n    cached = null;\n  }\n  if (cached) {\n    return cached;\n  }\n\n  cached = resolve(source).catch((err) => {\n    cached = null; // 暫時性失敗後允許重試。\n    throw err;\n  });\n  return cached;\n}\n\nasync function resolve(source: { cdnUrl?: string }): Promise<MermaidLike> {\n  // (c) 明確指定 CDN → 直接動態 import 該 ESM 網址,完全不碰 peer 'mermaid'。\n  // ignore 註解只加在「執行階段 URL」這條,讓 Vite/webpack 不要嘗試靜態打包它。\n  if (source.cdnUrl) {\n    assertBrowser('loadMermaid({ cdnUrl })');\n    const mod = (await import(/* @vite-ignore */ /* webpackIgnore: true */ source.cdnUrl)) as {\n      default?: MermaidLike;\n    };\n    return normalize(mod.default ?? (mod as unknown as MermaidLike));\n  }\n  // (b) peer 動態 import('mermaid')。保留為可被 bundler 解析的 bare specifier,\n  // 故 host 安裝了 mermaid 時 Vite/webpack 會正確處理。未安裝則拋出明確指引。\n  try {\n    const mod = (await import('mermaid')) as { default?: MermaidLike };\n    return normalize(mod.default ?? (mod as unknown as MermaidLike));\n  } catch (peerErr) {\n    throw new Error(\n      '[react-super-mermaid] 找不到 mermaid。請安裝 mermaid(peer dependency)、' +\n        '傳入 { instance },或傳入 { cdnUrl }。\\n' +\n        `原始錯誤:${peerErr instanceof Error ? peerErr.message : String(peerErr)}`,\n    );\n  }\n}\n\nfunction normalize(m: MermaidLike): MermaidLike {\n  if (typeof m.render !== 'function' || typeof m.initialize !== 'function') {\n    throw new Error('[react-super-mermaid] 解析到的物件不是有效的 mermaid 實例。');\n  }\n  return m;\n}\n","// 匯出基元:把 SVG 序列化成可攜字串、或經 canvas 點陣化成 PNG/JPEG/WebP Blob。\r\n// 改寫自 super-mermaid 的 webview/main.ts(renderPristineSvg / prepareSvgText /\r\n// rasterize / cannotRasterize)。本檔只做純轉換,不依賴 mermaid;\r\n// 由呼叫端(hook)決定是用 live SVG 還是重繪的 pristine SVG。\r\n\r\nimport type { ExportRasterOptions, RasterType } from '../types';\r\n\r\nexport interface PreparedSvg {\r\n  serialized: string;\r\n  width: number;\r\n  height: number;\r\n  /** 含 <foreignObject>(htmlLabels)→ 點陣化可能污染 canvas,呼叫端宜退回 SVG。 */\r\n  hasForeignObject: boolean;\r\n}\r\n\r\nconst RASTER_MIME: Record<RasterType, string> = {\r\n  png: 'image/png',\r\n  jpeg: 'image/jpeg',\r\n  webp: 'image/webp',\r\n};\r\n\r\nfunction sizeFromViewBox(svgEl: SVGSVGElement): { width: number; height: number } {\r\n  const viewBox = (svgEl.getAttribute('viewBox') ?? '0 0 800 600').split(/[\\s,]+/).map(Number);\r\n  return {\r\n    width: Math.max(1, Math.ceil(viewBox[2] || 800)),\r\n    height: Math.max(1, Math.ceil(viewBox[3] || 600)),\r\n  };\r\n}\r\n\r\nfunction finalizePrepared(svgEl: SVGSVGElement): PreparedSvg {\r\n  const { width, height } = sizeFromViewBox(svgEl);\r\n  svgEl.setAttribute('width', String(width));\r\n  svgEl.setAttribute('height', String(height));\r\n  svgEl.removeAttribute('style');\r\n  const serialized = new XMLSerializer().serializeToString(svgEl);\r\n  return { serialized, width, height, hasForeignObject: serialized.includes('<foreignObject') };\r\n}\r\n\r\n/** 解析 mermaid 重繪出來的 SVG 字串(htmlLabels 關閉的 pristine 版),整理成可匯出形式。 */\r\nexport function prepareSvgString(svgText: string): PreparedSvg | undefined {\r\n  const holder = document.createElement('div');\r\n  holder.innerHTML = svgText;\r\n  const svgEl = holder.querySelector('svg');\r\n  if (!svgEl) {\r\n    return undefined;\r\n  }\r\n  return finalizePrepared(svgEl);\r\n}\r\n\r\n/** 整理一個已存在的 SVG 元素(就地設定尺寸、移除 style 後序列化)。 */\r\nexport function prepareSvgElement(svg: SVGSVGElement): PreparedSvg {\r\n  return finalizePrepared(svg);\r\n}\r\n\r\n/**\r\n * 從畫面上 live SVG(已上色、可能被 pan/zoom 包了 viewport transform)複製一份、\r\n * 還原縮放平移後序列化。供同步的 exportSvg() 使用。\r\n */\r\nexport function serializeLiveSvg(svg: SVGSVGElement): PreparedSvg {\r\n  const clone = svg.cloneNode(true) as SVGSVGElement;\r\n  // 移除 svg-pan-zoom 注入的 viewport transform,讓匯出回到自然 viewBox 版面。\r\n  const vp = clone.querySelector<SVGGElement>('.svg-pan-zoom_viewport');\r\n  if (vp) {\r\n    vp.removeAttribute('transform');\r\n    vp.style.transform = '';\r\n  }\r\n  return finalizePrepared(clone);\r\n}\r\n\r\nconst SVG_NS_EXPORT = 'http://www.w3.org/2000/svg';\r\n\r\n/** 取 foreignObject 內的文字行(依 <br> 與區塊 <div> / 文字內 \\n 斷行)。 */\r\nfunction extractFoLines(el: Element): string[] {\r\n  const lines: string[] = [];\r\n  let cur = '';\r\n  const flush = (): void => {\r\n    if (cur.trim()) lines.push(cur.trim());\r\n    cur = '';\r\n  };\r\n  const walk = (node: Node): void => {\r\n    node.childNodes.forEach((child) => {\r\n      if (child.nodeType === 3) {\r\n        const parts = (child.textContent ?? '').split('\\n');\r\n        cur += parts[0];\r\n        for (let i = 1; i < parts.length; i++) {\r\n          flush();\r\n          cur = parts[i];\r\n        }\r\n      } else if (child.nodeName === 'BR') {\r\n        flush();\r\n      } else if (child.nodeName === 'DIV') {\r\n        flush();\r\n        walk(child);\r\n        flush();\r\n      } else {\r\n        walk(child); // span / strong / em / code → 視為行內\r\n      }\r\n    });\r\n  };\r\n  walk(el);\r\n  flush();\r\n  return lines.map((l) => l.replace(/\\s+/g, ' ').trim()).filter(Boolean);\r\n}\r\n\r\n/** 在 foreignObject 子樹找第一個 color: 樣式值(供文字色)。 */\r\nfunction findFoColor(el: Element): string | null {\r\n  const stack: Element[] = [el];\r\n  while (stack.length) {\r\n    const e = stack.shift() as Element;\r\n    const m = (e.getAttribute('style') ?? '').match(/(?:^|;)\\s*color\\s*:\\s*([^;]+)/);\r\n    if (m) return m[1].trim();\r\n    stack.push(...Array.from(e.children));\r\n  }\r\n  return null;\r\n}\r\n\r\n/**\r\n * 把 <foreignObject>(HTML 標籤)就地換成 SVG <text>,讓 canvas 點陣化不被污染\r\n * (Chromium 對含 foreignObject 的 SVG img 會 taint canvas → toBlob 失敗)。\r\n * 失真:粗體 / 斜體 / 隔間分隔線簡化為純文字置中;僅供 PNG 匯出(SVG 匯出保留 foreignObject)。\r\n */\r\nexport function flattenForeignObjects(svg: SVGSVGElement): void {\r\n  for (const fo of Array.from(svg.querySelectorAll('foreignObject'))) {\r\n    const x = parseFloat(fo.getAttribute('x') ?? '0');\r\n    const y = parseFloat(fo.getAttribute('y') ?? '0');\r\n    const w = parseFloat(fo.getAttribute('width') ?? '0');\r\n    const h = parseFloat(fo.getAttribute('height') ?? '0');\r\n    const lines = extractFoLines(fo);\r\n    if (!lines.length) {\r\n      fo.remove();\r\n      continue;\r\n    }\r\n    const color = findFoColor(fo) ?? '#1f2937';\r\n    // 巢狀 div = 結構化(ER/class 隔間)→ 用較小字避免溢出;單純標籤 → 對齊編輯器 14px/600。\r\n    const structured = fo.querySelectorAll('div').length > 1;\r\n    const fontSize = structured ? 13 : 14;\r\n    const lineH = fontSize * 1.35;\r\n    const text = document.createElementNS(SVG_NS_EXPORT, 'text');\r\n    text.setAttribute('text-anchor', 'middle');\r\n    text.setAttribute('fill', color);\r\n    text.setAttribute('font-family', 'system-ui,-apple-system,\"Segoe UI\",\"Microsoft JhengHei\",sans-serif');\r\n    text.setAttribute('font-size', String(fontSize));\r\n    text.setAttribute('font-weight', structured ? '400' : '600');\r\n    const cx = x + w / 2;\r\n    const startY = y + h / 2 - ((lines.length - 1) * lineH) / 2 + fontSize / 3;\r\n    lines.forEach((ln, i) => {\r\n      const tspan = document.createElementNS(SVG_NS_EXPORT, 'tspan');\r\n      tspan.setAttribute('x', String(cx));\r\n      tspan.setAttribute('y', String(startY + i * lineH));\r\n      tspan.textContent = ln;\r\n      text.appendChild(tspan);\r\n    });\r\n    fo.parentNode?.replaceChild(text, fo);\r\n  }\r\n}\r\n\r\nexport function svgBlob(serialized: string): Blob {\r\n  const xml = serialized.startsWith('<?xml')\r\n    ? serialized\r\n    : '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n' + serialized;\r\n  return new Blob([xml], { type: 'image/svg+xml;charset=utf-8' });\r\n}\r\n\r\n/** 把整理好的 SVG 經 Image + canvas 點陣化成 Blob。 */\r\nexport async function rasterizeToBlob(\r\n  prepared: PreparedSvg,\r\n  opts: ExportRasterOptions & { dark?: boolean } = {},\r\n): Promise<Blob> {\r\n  const scale = opts.scale ?? 2;\r\n  const type = opts.type ?? 'png';\r\n  const mime = RASTER_MIME[type];\r\n  const transparent = opts.transparent === true;\r\n\r\n  const blob = new Blob([prepared.serialized], { type: 'image/svg+xml;charset=utf-8' });\r\n  const url = URL.createObjectURL(blob);\r\n  try {\r\n    const img = new Image();\r\n    await new Promise<void>((resolve, reject) => {\r\n      img.onload = () => resolve();\r\n      img.onerror = () => reject(new Error('無法點陣化 SVG(圖片載入失敗)。'));\r\n      img.src = url;\r\n    });\r\n    const canvas = document.createElement('canvas');\r\n    canvas.width = Math.max(1, Math.round(prepared.width * scale));\r\n    canvas.height = Math.max(1, Math.round(prepared.height * scale));\r\n    const ctx = canvas.getContext('2d');\r\n    if (!ctx) {\r\n      throw new Error('取不到 Canvas 2D context。');\r\n    }\r\n    // JPEG 無 alpha,一律填背景;其餘格式僅在非透明時填。\r\n    if (!transparent || mime === 'image/jpeg') {\r\n      ctx.fillStyle = opts.background ?? (opts.dark ? '#1e1e1e' : '#ffffff');\r\n      ctx.fillRect(0, 0, canvas.width, canvas.height);\r\n    }\r\n    ctx.scale(scale, scale);\r\n    ctx.drawImage(img, 0, 0, prepared.width, prepared.height);\r\n    return await canvasToBlob(canvas, mime, type === 'png' ? undefined : (opts.quality ?? 0.92));\r\n  } finally {\r\n    URL.revokeObjectURL(url);\r\n  }\r\n}\r\n\r\nfunction canvasToBlob(canvas: HTMLCanvasElement, mime: string, quality?: number): Promise<Blob> {\r\n  return new Promise((resolve, reject) => {\r\n    canvas.toBlob(\r\n      (blob) => {\r\n        if (blob) {\r\n          resolve(blob);\r\n        } else {\r\n          // toBlob 回 null 多半是 <foreignObject> 污染了 canvas。\r\n          reject(new Error('匯出失敗:此圖含 HTML 標籤(foreignObject),請改用 SVG 匯出。'));\r\n        }\r\n      },\r\n      mime,\r\n      quality,\r\n    );\r\n  });\r\n}\r\n\r\n/** 觸發瀏覽器下載一個 Blob。 */\r\nexport function downloadBlob(blob: Blob, filename: string): void {\r\n  const url = URL.createObjectURL(blob);\r\n  const a = document.createElement('a');\r\n  a.href = url;\r\n  a.download = filename;\r\n  document.body.appendChild(a);\r\n  a.click();\r\n  a.remove();\r\n  // 給瀏覽器一點時間開始下載再回收 URL。\r\n  setTimeout(() => URL.revokeObjectURL(url), 1000);\r\n}\r\n","// 圖種 adapter 註冊表 + 型別偵測。\r\n// 偵測邏輯刻意對齊 VS Code 擴充的 mermaidExtract.ts#diagramType(去 frontmatter/%% 後取首 token),\r\n// 讓 core 與擴充對「這是哪種圖」判定一致。\r\n\r\nimport type { DiagramType } from '../scene/types';\r\nimport type { DiagramAdapter } from './types';\r\n\r\nconst registry = new Map<DiagramType, DiagramAdapter>();\r\n\r\nexport function registerAdapter(adapter: DiagramAdapter): void {\r\n  registry.set(adapter.capabilities.type, adapter);\r\n}\r\n\r\nexport function getAdapter(type: DiagramType): DiagramAdapter | undefined {\r\n  return registry.get(type);\r\n}\r\n\r\nexport function listAdapters(): DiagramAdapter[] {\r\n  return [...registry.values()];\r\n}\r\n\r\n/** 取第一個有意義關鍵字(略過 frontmatter 與 %% 註解、init 指令)。 */\r\nexport function firstKeyword(text: string): string {\r\n  let src = text.trim();\r\n  // 去除開頭 YAML frontmatter(--- ... ---)。\r\n  if (src.startsWith('---')) {\r\n    const end = src.indexOf('\\n---', 3);\r\n    if (end !== -1) {\r\n      const after = src.indexOf('\\n', end + 1);\r\n      src = after === -1 ? '' : src.slice(after + 1);\r\n    }\r\n  }\r\n  for (const rawLine of src.split('\\n')) {\r\n    const line = rawLine.trim();\r\n    if (!line) continue;\r\n    if (line.startsWith('%%')) continue; // 註解 / init 指令\r\n    // 與 mermaidExtract.ts 相同:用空白 / : / ( / { 斷詞取首 token。\r\n    return line.split(/[\\s:({]/)[0].toLowerCase();\r\n  }\r\n  return '';\r\n}\r\n\r\n/** 由文字偵測圖種;比對已註冊 adapter 的 keywords。 */\r\nexport function detectDiagramType(text: string): DiagramType | undefined {\r\n  const kw = firstKeyword(text);\r\n  if (!kw) return undefined;\r\n  for (const adapter of registry.values()) {\r\n    if (adapter.keywords.includes(kw)) return adapter.capabilities.type;\r\n  }\r\n  return undefined;\r\n}\r\n","// 從 mermaid 原始碼解析 `%% @check` 檢查提示指令。\r\n//\r\n// 為什麼用 `%%` 註解當載體:`%%` 是 mermaid 各圖型通用的註解語法,AI 產一段 mermaid 就能把提示一起帶出來,\r\n// 消費端(例如 markdown 的 ```mermaid 圍欄)完全不用改。繪圖編輯器的 round-trip 也本來就會保留 `%%` 註解。\r\n//\r\n// 語法(行導向、可容錯):\r\n//\r\n//   %% @check <target> [標題...]\r\n//   %% severity: warn\r\n//   %% desc: 一行說明\r\n//   %% steps:\r\n//   %%   第一步\r\n//   %%   第二步\r\n//   %% sql: |\r\n//   %%   SELECT ...\r\n//   %%   WHERE Id = {TpId};\r\n//   %% link: 標籤 | https://...\r\n//   %% elk: Properties.TransId : \"{TransId}\"\r\n//\r\n// 保留鍵 = severity / desc / steps / link / match / elk;**其餘任何鍵一律當成可複製片段,鍵名即 lang**\r\n// (`sql:` / `kql:` / `sh:` / `json:` …)—— 未來要加片段型別不必動解析器。\r\n\r\nimport type { CheckLink, CheckSeverity, CheckSnippet, DiagramCheck } from '../../types';\r\n\r\n/** `%% @check` 起始行(允許 `%%@check`,並容忍大小寫)。 */\r\nconst CHECK_START_RE = /^@check\\b\\s*(.*)$/i;\r\n\r\n/** `key: value` — key 限英數與 `-` / `_`,避免把圖裡的中文冒號句子誤判成欄位。 */\r\nconst FIELD_RE = /^([A-Za-z_][\\w-]*)\\s*:\\s?(.*)$/;\r\n\r\n/** 帶引號的 target = 以標籤文字比對(節點 id 不會有空白與中文標點,靠引號區分最直觀)。 */\r\nconst QUOTED_TARGET_RE = /^\"([^\"]+)\"\\s*(.*)$/;\r\n\r\n/** 未加引號的 target:第一個空白前為 id,其餘是標題。 */\r\nconst BARE_TARGET_RE = /^(\\S+)\\s*(.*)$/;\r\n\r\nconst SEVERITIES = new Set<string>(['info', 'warn', 'error']);\r\n\r\n/** 這些鍵有專屬語意,不會被當成程式碼片段。 */\r\nconst RESERVED_KEYS = new Set(['severity', 'desc', 'steps', 'link', 'match', 'elk']);\r\n\r\n/** 收集多行值時的暫存模式。 */\r\ntype PendingMode = 'none' | 'scalar' | 'list';\r\n\r\ninterface Pending {\r\n  mode: PendingMode;\r\n  key: string;\r\n  lines: string[];\r\n}\r\n\r\ninterface ScanResult {\r\n  checks: DiagramCheck[];\r\n  /** 屬於指令的行號(0-based)—— 交給 stripCheckDirectives 剔除。 */\r\n  directiveLines: Set<number>;\r\n}\r\n\r\n/**\r\n * 取註解行的內容(去掉開頭 `%%`,保留其後縮排供多行值判斷);非註解行回 undefined。\r\n * 匯出供 tips/parse 重用 —— 兩種指令共用同一套「什麼是註解 / 什麼是 init 指令」判斷。\r\n */\r\nexport function commentBody(line: string): string | undefined {\r\n  const trimmed = line.trimStart();\r\n  if (!trimmed.startsWith('%%')) {\r\n    return undefined;\r\n  }\r\n  // `%%{ ... }%%` 是 mermaid 的 init / 設定指令,不是一般註解,不能碰。\r\n  if (trimmed.startsWith('%%{')) {\r\n    return undefined;\r\n  }\r\n  // 剝掉 CRLF 殘留的 \\r。單行欄位本來就被 trim() 洗掉了,但 block scalar 的續行是逐行原樣收集,\r\n  // 不在這裡剝就會把 \\r 夾進多行 SQL —— 而本 workspace 的 .mmd 慣例正是 CRLF,\r\n  // 片段的用途又剛好是貼進 db-kit / qland,帶著看不見的 \\r 很難查。\r\n  // 注意:只影響「解析出來的值」;stripCheckDirectives 仍以原始行切 / 接,原始碼的 CRLF 不受影響。\r\n  const body = trimmed.slice(2).replace(/\\r$/, '');\r\n  // 只吃掉一個緊鄰的空白,其餘縮排保留(block scalar 靠縮排判斷續行)。\r\n  return body.startsWith(' ') ? body.slice(1) : body;\r\n}\r\n\r\n/** 註解內容是否有縮排(= 多行值的續行)。匯出供 tips/parse 重用。 */\r\nexport function isIndented(body: string): boolean {\r\n  return /^\\s/.test(body);\r\n}\r\n\r\n/** `標籤 | https://...` 或純網址。 */\r\nfunction parseLink(value: string): CheckLink | undefined {\r\n  const [rawLabel, ...rest] = value.split('|');\r\n  if (rest.length > 0) {\r\n    const url = rest.join('|').trim();\r\n    const label = rawLabel.trim();\r\n    return url ? { label: label || url, url } : undefined;\r\n  }\r\n  const url = rawLabel.trim();\r\n  return url ? { label: url, url } : undefined;\r\n}\r\n\r\n/** 把收集到的一組欄位值套進 check。 */\r\nfunction applyField(check: DiagramCheck, key: string, value: string): void {\r\n  const lower = key.toLowerCase();\r\n\r\n  if (lower === 'severity') {\r\n    const v = value.trim().toLowerCase();\r\n    if (SEVERITIES.has(v)) {\r\n      check.severity = v as CheckSeverity;\r\n    }\r\n    return;\r\n  }\r\n  if (lower === 'desc') {\r\n    check.desc = value.trim();\r\n    return;\r\n  }\r\n  if (lower === 'match') {\r\n    const v = value.trim().toLowerCase();\r\n    if (v === 'id' || v === 'label') {\r\n      check.match = v;\r\n    }\r\n    return;\r\n  }\r\n  if (lower === 'steps') {\r\n    const steps = value\r\n      .split('\\n')\r\n      .map((s) => s.trim().replace(/^[-*]\\s*/, ''))\r\n      .filter(Boolean);\r\n    if (steps.length > 0) {\r\n      check.steps = [...(check.steps ?? []), ...steps];\r\n    }\r\n    return;\r\n  }\r\n  if (lower === 'link') {\r\n    const link = parseLink(value);\r\n    if (link) {\r\n      check.links = [...(check.links ?? []), link];\r\n    }\r\n    return;\r\n  }\r\n  if (lower === 'elk') {\r\n    const kql = value.trim();\r\n    if (kql) {\r\n      check.elk = { ...(check.elk ?? {}), kql };\r\n    }\r\n    return;\r\n  }\r\n\r\n  // 其餘鍵 → 可複製片段,鍵名即語言。\r\n  const code = value.replace(/\\s+$/, '');\r\n  if (code.trim()) {\r\n    const snippet: CheckSnippet = { lang: lower, code };\r\n    check.snippets = [...(check.snippets ?? []), snippet];\r\n  }\r\n}\r\n\r\n/** 解析 `@check` 後面那串 → { target, match, title }。 */\r\nfunction parseHeader(rest: string): Pick<DiagramCheck, 'target' | 'match' | 'title'> | undefined {\r\n  const text = rest.trim();\r\n  if (!text) {\r\n    return undefined;\r\n  }\r\n  const quoted = QUOTED_TARGET_RE.exec(text);\r\n  if (quoted) {\r\n    const title = quoted[2].trim();\r\n    return { target: quoted[1], match: 'label', ...(title ? { title } : {}) };\r\n  }\r\n  const bare = BARE_TARGET_RE.exec(text);\r\n  if (!bare) {\r\n    return undefined;\r\n  }\r\n  const title = bare[2].trim();\r\n  return { target: bare[1], ...(title ? { title } : {}) };\r\n}\r\n\r\n/**\r\n * 單次掃描:同時產出 checks 與「屬於指令的行號」,讓解析與剔除共用同一套判斷,\r\n * 不會出現「解析得到卻沒剔乾淨」導致 mermaid 收到殘留行的情形。\r\n */\r\nfunction scan(code: string): ScanResult {\r\n  const lines = code.split('\\n');\r\n  const checks: DiagramCheck[] = [];\r\n  const directiveLines = new Set<number>();\r\n\r\n  let current: DiagramCheck | undefined;\r\n  let pending: Pending = { mode: 'none', key: '', lines: [] };\r\n\r\n  const flushPending = (): void => {\r\n    if (pending.mode !== 'none' && current) {\r\n      applyField(current, pending.key, pending.lines.join('\\n'));\r\n    }\r\n    pending = { mode: 'none', key: '', lines: [] };\r\n  };\r\n\r\n  const closeBlock = (): void => {\r\n    flushPending();\r\n    current = undefined;\r\n  };\r\n\r\n  for (let i = 0; i < lines.length; i += 1) {\r\n    const line = lines[i];\r\n    const body = commentBody(line);\r\n\r\n    if (body === undefined) {\r\n      // 空白行不中斷區塊(圖源常在提示之間留空行);真正的語句才結束區塊。\r\n      if (line.trim()) {\r\n        closeBlock();\r\n      }\r\n      continue;\r\n    }\r\n\r\n    const start = CHECK_START_RE.exec(body.trim());\r\n    if (start) {\r\n      closeBlock();\r\n      const header = parseHeader(start[1]);\r\n      if (header) {\r\n        current = { ...header };\r\n        checks.push(current);\r\n        directiveLines.add(i);\r\n      }\r\n      continue;\r\n    }\r\n\r\n    if (!current) {\r\n      // 與檢查提示無關的一般 `%%` 註解 —— 原樣留給 mermaid(它自己會忽略)。\r\n      continue;\r\n    }\r\n\r\n    // 多行值的續行:必須有縮排,否則視為新欄位。\r\n    if (pending.mode !== 'none' && isIndented(body)) {\r\n      pending.lines.push(body.replace(/^\\s{1,2}/, ''));\r\n      directiveLines.add(i);\r\n      continue;\r\n    }\r\n\r\n    const field = FIELD_RE.exec(body.trim());\r\n    if (!field) {\r\n      // 區塊內無法辨識的行 → 結束這個區塊,把該行還給 mermaid。\r\n      closeBlock();\r\n      continue;\r\n    }\r\n\r\n    flushPending();\r\n    directiveLines.add(i);\r\n    const key = field[1];\r\n    const value = field[2];\r\n\r\n    if (value.trim() === '|' || value.trim() === '') {\r\n      // `key: |` 或 `steps:` → 後續縮排行為多行值。\r\n      pending = { mode: value.trim() === '|' ? 'scalar' : 'list', key, lines: [] };\r\n      continue;\r\n    }\r\n    applyField(current, key, value);\r\n  }\r\n\r\n  closeBlock();\r\n  return { checks, directiveLines };\r\n}\r\n\r\n/** 解析原始碼中的 `%% @check` 指令。無指令時回空陣列(零成本)。 */\r\nexport function parseChecks(code: string): DiagramCheck[] {\r\n  if (!code.includes('@check')) {\r\n    return [];\r\n  }\r\n  return scan(code).checks;\r\n}\r\n\r\n/**\r\n * 剔除 `%% @check` 指令行,回傳可安全交給 mermaid 的原始碼。\r\n *\r\n * mermaid 本來就會忽略 `%%` 註解,但多行 SQL 片段裡可能出現讓 lexer 誤判的字元,\r\n * 先剔除最保險;也讓 `parse()` 的錯誤訊息行號不被提示內容干擾。\r\n */\r\nexport function stripCheckDirectives(code: string): string {\r\n  if (!code.includes('@check')) {\r\n    return code;\r\n  }\r\n  const { directiveLines } = scan(code);\r\n  if (directiveLines.size === 0) {\r\n    return code;\r\n  }\r\n  return code\r\n    .split('\\n')\r\n    .filter((_, i) => !directiveLines.has(i))\r\n    .join('\\n');\r\n}\r\n\r\n/**\r\n * 合併兩組 checks:`overrides`(通常來自 prop)覆寫 `base`(通常來自原始碼)中同 target 的項目。\r\n * target 相同但 base 有多筆時整組被覆寫 —— prop 的語意是「這個節點就用我這份」。\r\n */\r\nexport function mergeChecks(base: DiagramCheck[], overrides?: DiagramCheck[]): DiagramCheck[] {\r\n  if (!overrides || overrides.length === 0) {\r\n    return base;\r\n  }\r\n  const overridden = new Set(overrides.map((c) => c.target));\r\n  return [...base.filter((c) => !overridden.has(c.target)), ...overrides];\r\n}\r\n","// ORID(焦點討論法)結構化模型 + 雙向 round-trip(純函式、零 DOM)。\r\n//\r\n// ORID 不是 mermaid 原生圖種,而是本專案自訂的第一個「引導式討論」圖表:\r\n// 四個固定階段 Objective(客觀事實)→ Reflective(感受反應)→\r\n// Interpretive(意義詮釋)→ Decisional(決定行動),每階段各是一串條列項目。\r\n// 渲染時由 orid/transpile.ts 轉成原生 flowchart(見該檔),故所有既有能力\r\n// (主題、pan/zoom、搜尋、匯出、check/tip)全部原封不動繼承。\r\n//\r\n// 語法:\r\n//\r\n//   ---\r\n//   title: 中繼標題            ← frontmatter(逐字保留)\r\n//   ---\r\n//   orid\r\n//       title 上線後回顧        ← 圖表顯示標題\r\n//       objective 客觀事實      ← 階段關鍵字 + 選填的自訂段落標題\r\n//           錯誤率 3.2%         ← 項目(縮排;可加 - / * / • 前綴)\r\n//           - 平均延遲 850ms\r\n//       reflective\r\n//           團隊感到焦慮\r\n//       interpretive\r\n//           監控缺口是根因\r\n//       decisional\r\n//           補上告警 @mark 8/25\r\n//\r\n// 設計:解析永遠成功並降級(保留原文於 raw),序列化永遠輸出合法 ORID。\r\n\r\nexport type OridStageKey = 'objective' | 'reflective' | 'interpretive' | 'decisional';\r\n\r\nexport interface OridStageSpec {\r\n  key: OridStageKey;\r\n  /** 序列化時輸出的正規關鍵字。 */\r\n  keyword: string;\r\n  /**\r\n   * 解析時可接受的別名(全小寫;含正規關鍵字本身)。\r\n   *\r\n   * 刻意不收單字母縮寫(o / r / i / d):英文項目常以 \"I …\" 開頭\r\n   * (「I feel anxious about the rollout」),那會被靜靜地當成一個新的\r\n   * Interpretive 階段,把後面的項目全接到錯的段落去。省四個字母不值這個風險。\r\n   */\r\n  aliases: string[];\r\n  /** 圓圈數字序號,渲染段落標題用。 */\r\n  ordinal: string;\r\n  /** 預設段落標題(作者未自訂時使用)。 */\r\n  zh: string;\r\n  en: string;\r\n  /** 一句話說明(hover / 表單提示 / 空欄位 placeholder 共用)。 */\r\n  hint: string;\r\n}\r\n\r\n/**\r\n * 四階段的單一真相。順序即渲染順序 —— 不論作者用什麼順序書寫,\r\n * 一律以 O → R → I → D 呈現(ORID 的價值就在這個固定推進順序)。\r\n */\r\nexport const ORID_STAGES: readonly OridStageSpec[] = [\r\n  {\r\n    key: 'objective',\r\n    keyword: 'objective',\r\n    aliases: ['objective'],\r\n    ordinal: '①',\r\n    zh: '客觀事實',\r\n    en: 'Objective',\r\n    hint: '看到 / 聽到什麼?只寫可查證的事實與數據,不含評價。',\r\n  },\r\n  {\r\n    key: 'reflective',\r\n    keyword: 'reflective',\r\n    aliases: ['reflective'],\r\n    ordinal: '②',\r\n    zh: '感受反應',\r\n    en: 'Reflective',\r\n    hint: '當下的感覺、直覺反應與情緒,不必先講道理。',\r\n  },\r\n  {\r\n    key: 'interpretive',\r\n    keyword: 'interpretive',\r\n    aliases: ['interpretive'],\r\n    ordinal: '③',\r\n    zh: '意義詮釋',\r\n    en: 'Interpretive',\r\n    hint: '這代表什麼?根因、洞察、學到的事。',\r\n  },\r\n  {\r\n    key: 'decisional',\r\n    keyword: 'decisional',\r\n    aliases: ['decisional'],\r\n    ordinal: '④',\r\n    zh: '決定行動',\r\n    en: 'Decisional',\r\n    hint: '接下來要做什麼?誰負責、何時完成。',\r\n  },\r\n];\r\n\r\nconst STAGE_BY_ALIAS = new Map<string, OridStageSpec>();\r\nfor (const spec of ORID_STAGES) {\r\n  for (const alias of spec.aliases) STAGE_BY_ALIAS.set(alias, spec);\r\n}\r\n\r\n/** 由關鍵字(不分大小寫)取階段規格;非階段關鍵字回 undefined。 */\r\nexport function oridStageByKeyword(word: string): OridStageSpec | undefined {\r\n  return STAGE_BY_ALIAS.get(word.trim().toLowerCase());\r\n}\r\n\r\nexport function oridStageSpec(key: OridStageKey): OridStageSpec {\r\n  // key 為聯集型別,查表必中;findIndex 之後的 ! 由型別保證。\r\n  return ORID_STAGES.find((s) => s.key === key) as OridStageSpec;\r\n}\r\n\r\nexport interface OridStage {\r\n  key: OridStageKey;\r\n  /** 作者自訂的段落標題;未指定 = 渲染時用 `序號 中文 · English`。 */\r\n  heading?: string;\r\n  items: string[];\r\n}\r\n\r\nexport interface OridModel {\r\n  /** 逐字保留的 YAML frontmatter(含 --- 標記),無則 undefined。 */\r\n  frontmatter?: string;\r\n  /** `title X` 顯示標題。 */\r\n  title?: string;\r\n  /** 作者實際宣告的階段(書寫順序);渲染 / 序列化一律照 ORID_STAGES 正規排序。 */\r\n  stages: OridStage[];\r\n  /** 解析無法辨識為合法 ORID 時的完整原文(降級防覆寫用)。 */\r\n  raw?: string;\r\n}\r\n\r\nconst FRONTMATTER_RE = /^---\\r?\\n[\\s\\S]*?\\r?\\n---(?:\\r?\\n|$)/;\r\n/** 條列項目前綴:- / * / • / ‧ / ・(有前綴就一定是項目,不會被誤判成階段關鍵字)。 */\r\nconst BULLET_RE = /^[-*•‧・]\\s*/;\r\n\r\n/** 空白模型(新建時的起手骨架):四階段齊備,各給一個提示性項目。 */\r\nexport function emptyOridModel(): OridModel {\r\n  return {\r\n    title: 'ORID 焦點討論',\r\n    stages: ORID_STAGES.map((spec) => ({ key: spec.key, items: [`（${spec.zh}）`] })),\r\n  };\r\n}\r\n\r\n/** 依 ORID 正規順序取出階段;未宣告的階段不補。 */\r\nexport function orderedStages(model: OridModel): OridStage[] {\r\n  const out: OridStage[] = [];\r\n  for (const spec of ORID_STAGES) {\r\n    const found = model.stages.find((s) => s.key === spec.key);\r\n    if (found) out.push(found);\r\n  }\r\n  // 保險:理論上 stages 的 key 必在聯集內,萬一有未知 key 也不要吃掉資料。\r\n  for (const s of model.stages) {\r\n    if (!ORID_STAGES.some((spec) => spec.key === s.key)) out.push(s);\r\n  }\r\n  return out;\r\n}\r\n\r\n/**\r\n * 段落標題的顯示文字。序號一律保留 —— 四段的推進順序正是 ORID 的重點,\r\n * 只有其中一兩段被自訂就少了編號的話,漏斗會讀不出節奏。\r\n */\r\nexport function stageHeading(stage: OridStage): string {\r\n  const spec = oridStageSpec(stage.key);\r\n  const custom = stage.heading?.trim();\r\n  return custom ? `${spec.ordinal} ${custom}` : `${spec.ordinal} ${spec.zh} · ${spec.en}`;\r\n}\r\n\r\n/** ORID 文字 → 結構化模型。永不拋例外;無法解析時於 raw 保留原文。 */\r\nexport function parseOrid(text: string): OridModel {\r\n  const original = text;\r\n  let frontmatter: string | undefined;\r\n  let body = text;\r\n  const fm = text.match(FRONTMATTER_RE);\r\n  if (fm) {\r\n    frontmatter = fm[0].replace(/\\r?\\n$/, '');\r\n    body = text.slice(fm[0].length);\r\n  }\r\n\r\n  let title: string | undefined;\r\n  const stages: OridStage[] = [];\r\n  let cur: OridStage | null = null;\r\n  let sawOrid = false;\r\n\r\n  /** 取得(或建立)目前階段;項目寫在任何階段關鍵字之前時,隱含開啟 objective。 */\r\n  const ensureStage = (): OridStage => {\r\n    if (!cur) {\r\n      cur = { key: 'objective', items: [] };\r\n      stages.push(cur);\r\n    }\r\n    return cur;\r\n  };\r\n\r\n  for (const rawLine of body.split('\\n')) {\r\n    const line = rawLine.trim();\r\n    if (!line) continue;\r\n    if (line.startsWith('%%')) continue; // 註解 / init 指令\r\n    if (!sawOrid) {\r\n      // 第一個有意義 token 必須是 orid,否則整段視為非 ORID(降級)。\r\n      if (/^orid\\b/i.test(line)) {\r\n        sawOrid = true;\r\n        continue;\r\n      }\r\n      return { frontmatter, stages: [], raw: original };\r\n    }\r\n\r\n    // 有 bullet 前綴 → 一定是項目(使用者強制不走關鍵字判定的逃生口)。\r\n    const bullet = line.match(BULLET_RE);\r\n    if (bullet) {\r\n      const value = line.slice(bullet[0].length).trim();\r\n      if (value) ensureStage().items.push(value);\r\n      continue;\r\n    }\r\n\r\n    // 首 token 是階段關鍵字 → 開新階段,其餘文字為自訂段落標題。\r\n    const firstSpace = line.search(/\\s/);\r\n    const head = firstSpace === -1 ? line : line.slice(0, firstSpace);\r\n    const rest = firstSpace === -1 ? '' : line.slice(firstSpace).trim();\r\n    const spec = oridStageByKeyword(head.replace(/[:：]$/, ''));\r\n    if (spec) {\r\n      // 同一階段重複宣告 → 併入既有階段(不覆蓋已收集的項目)。\r\n      const existing = stages.find((s) => s.key === spec.key);\r\n      cur = existing ?? { key: spec.key, items: [] };\r\n      if (!existing) stages.push(cur);\r\n      if (rest) cur.heading = rest;\r\n      continue;\r\n    }\r\n\r\n    // `title X` 顯示標題(必須在任何階段之前;之後出現的視為項目,避免吃掉名為 title 的項目)。\r\n    if (!cur && /^title\\s+/i.test(line)) {\r\n      title = line.replace(/^title\\s+/i, '').trim();\r\n      continue;\r\n    }\r\n\r\n    ensureStage().items.push(line);\r\n  }\r\n\r\n  return { frontmatter, title, stages };\r\n}\r\n\r\n/**\r\n * 這個項目重新解析時會被誤讀成別的東西嗎?會的話序列化要補 `- ` 前綴。\r\n * 三種情況:首字是階段關鍵字(objective / reflective / …)、本來就以 bullet 字元開頭、\r\n * 或長得像 `title X`。少了這道保護,「objective 這個詞很模糊」這種項目\r\n * 存檔再開就變成一個新階段,資料就這樣被吃掉了。\r\n */\r\nfunction needsBullet(value: string): boolean {\r\n  if (BULLET_RE.test(value)) return true;\r\n  if (/^title\\s+/i.test(value)) return true;\r\n  const firstSpace = value.search(/\\s/);\r\n  const head = (firstSpace === -1 ? value : value.slice(0, firstSpace)).replace(/[:：]$/, '');\r\n  return oridStageByKeyword(head) !== undefined;\r\n}\r\n\r\n/** 結構化模型 → ORID 文字。純函式、永遠合法、階段一律正規排序。 */\r\nexport function serializeOrid(model: OridModel): string {\r\n  // 降級:解析失敗保留的原文逐字回吐,避免覆寫使用者資料。\r\n  if (model.raw && model.stages.length === 0 && !model.title) {\r\n    return model.raw;\r\n  }\r\n  const lines: string[] = [];\r\n  if (model.frontmatter) lines.push(model.frontmatter);\r\n  lines.push('orid');\r\n  if (model.title && model.title.trim()) lines.push(`    title ${model.title.trim()}`);\r\n  for (const stage of orderedStages(model)) {\r\n    const spec = oridStageSpec(stage.key);\r\n    const heading = stage.heading && stage.heading.trim() ? ` ${stage.heading.trim()}` : '';\r\n    lines.push(`    ${spec?.keyword ?? stage.key}${heading}`);\r\n    for (const item of stage.items) {\r\n      const value = item.trim();\r\n      if (!value) continue; // 全空項目略過,避免輸出空行\r\n      lines.push(`        ${needsBullet(value) ? `- ${value}` : value}`);\r\n    }\r\n  }\r\n  return lines.join('\\n') + '\\n';\r\n}\r\n","// ORID 的語意配色與 CSS 類名 —— 轉譯器(產生 classDef)與 colorful 後處理上色器\r\n// (在 SVG 上重畫)兩邊共用的單一真相。\r\n//\r\n// 色相是刻意選的,不是輪播調色盤:\r\n//   O 客觀事實 → 藍(冷靜、可查證的事實)\r\n//   R 感受反應 → 橘(情緒溫度)\r\n//   I 意義詮釋 → 紫(洞察)\r\n//   D 決定行動 → 綠(GO、往前走)\r\n// 四段一眼分得出來,而且顏色本身就在講 ORID 的推進節奏。\r\n\r\nimport type { OridStageKey } from './model';\r\n\r\nexport interface OridPaletteEntry {\r\n  /** 項目方塊的底色 / 邊框。 */\r\n  itemFill: string;\r\n  itemStroke: string;\r\n  /** 階段容器(subgraph)的底色 / 邊框。 */\r\n  stageFill: string;\r\n  stageStroke: string;\r\n  /** 深色主題下的項目底色(colorful 後處理用;classDef 走淺色版即可)。 */\r\n  itemFillDark: string;\r\n  stageFillDark: string;\r\n}\r\n\r\n/** 項目方塊在淺色底上的文字色(對齊 colorize 的 NODE_TEXT)。 */\r\nexport const ORID_ITEM_TEXT = '#1F2937';\r\n\r\nexport const ORID_PALETTE: Record<OridStageKey, OridPaletteEntry> = {\r\n  objective: {\r\n    itemFill: '#DBEAFE',\r\n    itemStroke: '#3B82F6',\r\n    stageFill: '#3B82F61F',\r\n    stageStroke: '#3B82F6',\r\n    itemFillDark: '#1E3A5F',\r\n    stageFillDark: '#3B82F633',\r\n  },\r\n  reflective: {\r\n    itemFill: '#FFEDD5',\r\n    itemStroke: '#F97316',\r\n    stageFill: '#F973161F',\r\n    stageStroke: '#F97316',\r\n    itemFillDark: '#5C3211',\r\n    stageFillDark: '#F9731633',\r\n  },\r\n  interpretive: {\r\n    itemFill: '#F3E8FF',\r\n    itemStroke: '#A855F7',\r\n    stageFill: '#A855F71F',\r\n    stageStroke: '#A855F7',\r\n    itemFillDark: '#432069',\r\n    stageFillDark: '#A855F733',\r\n  },\r\n  decisional: {\r\n    itemFill: '#DCFCE7',\r\n    itemStroke: '#22C55E',\r\n    stageFill: '#22C55E1F',\r\n    stageStroke: '#22C55E',\r\n    itemFillDark: '#14432A',\r\n    stageFillDark: '#22C55E33',\r\n  },\r\n};\r\n\r\n/** 階段代號字母(節點 id 前綴 / CSS 類名字尾):objective → O。 */\r\nexport const ORID_LETTER: Record<OridStageKey, string> = {\r\n  objective: 'O',\r\n  reflective: 'R',\r\n  interpretive: 'I',\r\n  decisional: 'D',\r\n};\r\n\r\n/** 項目方塊的 CSS 類名(mermaid `:::className` → SVG g.node 的 class)。 */\r\nexport const oridItemClass = (key: OridStageKey): string => `oridItem${ORID_LETTER[key]}`;\r\n/** 階段容器的 CSS 類名(mermaid `class ORID_O oridStageO` → SVG g.cluster 的 class)。 */\r\nexport const oridStageClass = (key: OridStageKey): string => `oridStage${ORID_LETTER[key]}`;\r\n\r\n/** 空階段的佔位方塊類名(虛線、淡色,提醒「這段還沒填」)。 */\r\nexport const ORID_EMPTY_CLASS = 'oridEmpty';\r\n/** 空階段佔位方塊的文字。 */\r\nexport const ORID_EMPTY_LABEL = '（待填）';\r\n\r\n/** 由 SVG 上的 class 反查階段;非 ORID 類名回 undefined(colorful 後處理用)。 */\r\nexport function oridStageFromClassList(classes: DOMTokenList | string[]): OridStageKey | undefined {\r\n  const list = Array.isArray(classes) ? classes : Array.from(classes);\r\n  for (const key of Object.keys(ORID_PALETTE) as OridStageKey[]) {\r\n    if (list.includes(oridItemClass(key)) || list.includes(oridStageClass(key))) return key;\r\n  }\r\n  return undefined;\r\n}\r\n","// ORID → 原生 mermaid flowchart 轉譯器(純函式、零 DOM)。\r\n//\r\n// ORID 不是 mermaid 的圖種,mermaid 也不認得 `orid` 關鍵字。與其自己畫一套 SVG\r\n// (那會失去主題、pan/zoom、搜尋、匯出、check/tip 全部既有能力),這裡選擇在\r\n// 「送進 mermaid.render 之前」把 ORID 轉成等價的 flowchart:\r\n//\r\n//   - 每個階段 = 一個 subgraph(縱向 TB 依序往下,箭頭串成漏斗)\r\n//   - 階段內 `direction LR` + `~~~` 隱形連線 = 項目排成橫向網格\r\n//   - classDef / class = 四段語意配色(colorful 主題會再依同一組類名重畫,見 themes/colorize)\r\n//\r\n// 轉譯後就是一張普通 flowchart,所以下游一切照舊 —— 這是本功能能「所有地方都支援」的關鍵。\r\n\r\nimport {\r\n  ORID_STAGES,\r\n  orderedStages,\r\n  oridStageSpec,\r\n  parseOrid,\r\n  stageHeading,\r\n  type OridModel,\r\n  type OridStage,\r\n} from './model';\r\nimport {\r\n  ORID_EMPTY_CLASS,\r\n  ORID_EMPTY_LABEL,\r\n  ORID_ITEM_TEXT,\r\n  ORID_LETTER,\r\n  ORID_PALETTE,\r\n  oridItemClass,\r\n  oridStageClass,\r\n} from './theme';\r\n\r\n/** 一列最多幾個項目;超過就換列(在 LR 階段內形成網格,避免長條圖橫向爆開)。 */\r\nexport const ORID_ITEMS_PER_ROW = 4;\r\n\r\nconst FRONTMATTER_RE = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---(?:\\r?\\n|$)/;\r\n\r\n/** 首個有意義關鍵字是不是 orid(略過 frontmatter 與 %% 註解)。 */\r\nexport function isOridSource(text: string): boolean {\r\n  let src = (text ?? '').trim();\r\n  if (src.startsWith('---')) {\r\n    const end = src.indexOf('\\n---', 3);\r\n    if (end !== -1) {\r\n      const after = src.indexOf('\\n', end + 1);\r\n      src = after === -1 ? '' : src.slice(after + 1);\r\n    }\r\n  }\r\n  for (const rawLine of src.split('\\n')) {\r\n    const line = rawLine.trim();\r\n    if (!line || line.startsWith('%%')) continue;\r\n    return /^orid\\b/i.test(line);\r\n  }\r\n  return false;\r\n}\r\n\r\n/** 節點標籤跳脫(對齊 flowchart serializer:雙引號轉實體、換行轉 <br/>)。 */\r\nfunction escapeLabel(text: string): string {\r\n  return text.replace(/\"/g, '&quot;').replace(/\\r?\\n/g, '<br/>');\r\n}\r\n\r\n/** YAML 雙引號字串跳脫(frontmatter title 用)。 */\r\nfunction yamlQuote(text: string): string {\r\n  return `\"${text.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')}\"`;\r\n}\r\n\r\n/**\r\n * 產生要放到輸出最前面的 frontmatter。\r\n * ORID 的 `title` 是圖表標題的單一真相:有寫就取代 frontmatter 既有的 title,\r\n * 沒寫則原樣沿用作者的 frontmatter(可能本來就有 title)。\r\n */\r\nfunction buildFrontmatter(model: OridModel): string | undefined {\r\n  const title = model.title?.trim();\r\n  const existing = model.frontmatter?.match(FRONTMATTER_RE)?.[1];\r\n  if (!title) return model.frontmatter;\r\n\r\n  const kept = (existing ?? '')\r\n    .split('\\n')\r\n    .filter((line) => !/^\\s*title\\s*:/.test(line))\r\n    .filter((line, i, arr) => !(line.trim() === '' && i === arr.length - 1));\r\n  const body = [...kept, `title: ${yamlQuote(title)}`].filter((l) => l.trim() !== '').join('\\n');\r\n  return `---\\n${body}\\n---`;\r\n}\r\n\r\n/** 階段內的項目 id:O1 / R2 / I3 …(短、好記,方便 %% @tip / @check 指定)。 */\r\nexport function oridItemId(stage: OridStage, index: number): string {\r\n  return `${ORID_LETTER[stage.key]}${index + 1}`;\r\n}\r\n\r\n/** 階段容器 id:ORID_O / ORID_R / …。 */\r\nexport function oridStageId(stage: OridStage): string {\r\n  return `ORID_${ORID_LETTER[stage.key]}`;\r\n}\r\n\r\n/** 結構化模型 → mermaid flowchart 原始碼。純函式、永遠輸出合法 mermaid。 */\r\nexport function oridToMermaid(model: OridModel): string {\r\n  const stages = orderedStages(model).filter((s) => oridStageSpec(s.key));\r\n  const lines: string[] = [];\r\n  const frontmatter = buildFrontmatter(model);\r\n  if (frontmatter) lines.push(frontmatter);\r\n  lines.push('flowchart TB');\r\n\r\n  for (const stage of stages) {\r\n    const stageId = oridStageId(stage);\r\n    lines.push(`    subgraph ${stageId}[\"${escapeLabel(stageHeading(stage))}\"]`);\r\n    lines.push('        direction LR');\r\n    const items = stage.items.map((t) => t.trim()).filter(Boolean);\r\n    if (items.length === 0) {\r\n      // 空階段:給一個虛線佔位塊。留空的 subgraph mermaid 雖然畫得出來,\r\n      // 但會塌成一條沒有意義的細帶,讀者看不出「這段還沒填」。\r\n      lines.push(`        ${ORID_LETTER[stage.key]}0[\"${ORID_EMPTY_LABEL}\"]:::${ORID_EMPTY_CLASS}`);\r\n    } else {\r\n      items.forEach((text, i) => {\r\n        lines.push(\r\n          `        ${oridItemId(stage, i)}[\"${escapeLabel(text)}\"]:::${oridItemClass(stage.key)}`,\r\n        );\r\n      });\r\n      // 每列以隱形連線串起來 → LR 方向排成一橫列;分列則自然疊成網格。\r\n      for (let start = 0; start < items.length; start += ORID_ITEMS_PER_ROW) {\r\n        const row = items\r\n          .slice(start, start + ORID_ITEMS_PER_ROW)\r\n          .map((_, i) => oridItemId(stage, start + i));\r\n        if (row.length > 1) lines.push(`        ${row.join(' ~~~ ')}`);\r\n      }\r\n    }\r\n    lines.push('    end');\r\n  }\r\n\r\n  // 階段之間的推進箭頭(漏斗的骨幹)。\r\n  for (let i = 1; i < stages.length; i += 1) {\r\n    lines.push(`    ${oridStageId(stages[i - 1])} --> ${oridStageId(stages[i])}`);\r\n  }\r\n\r\n  // 語意配色。colorful 主題會在 SVG 上以同一組類名重畫(見 themes/colorize 的 styleOrid),\r\n  // 這裡的 classDef 則讓 neutral / dark / forest / sketch 等未後處理的主題也有正確顏色。\r\n  for (const spec of ORID_STAGES) {\r\n    if (!stages.some((s) => s.key === spec.key)) continue;\r\n    const p = ORID_PALETTE[spec.key];\r\n    lines.push(\r\n      `    classDef ${oridItemClass(spec.key)} fill:${p.itemFill},stroke:${p.itemStroke},` +\r\n        `stroke-width:1.5px,color:${ORID_ITEM_TEXT}`,\r\n    );\r\n  }\r\n  if (stages.some((s) => s.items.filter((t) => t.trim()).length === 0)) {\r\n    lines.push(\r\n      `    classDef ${ORID_EMPTY_CLASS} fill:transparent,stroke:#94A3B8,stroke-width:1px,` +\r\n        'stroke-dasharray:4 4,color:#94A3B8',\r\n    );\r\n  }\r\n  for (const stage of stages) {\r\n    const p = ORID_PALETTE[stage.key];\r\n    lines.push(\r\n      `    classDef ${oridStageClass(stage.key)} fill:${p.stageFill},stroke:${p.stageStroke},stroke-width:1.5px`,\r\n    );\r\n    lines.push(`    class ${oridStageId(stage)} ${oridStageClass(stage.key)}`);\r\n  }\r\n\r\n  return lines.join('\\n') + '\\n';\r\n}\r\n\r\n/**\r\n * 若 text 是 ORID 就轉成 flowchart,否則原樣回傳。\r\n * 這是所有渲染路徑(lib 的 render-pipeline、VS Code 各 webview、Slack harness)\r\n * 唯一需要呼叫的函式 —— 對非 ORID 原始碼是零成本的直通。\r\n */\r\nexport function transpileOrid(text: string): string {\r\n  if (!isOridSource(text)) return text;\r\n  return oridToMermaid(parseOrid(text));\r\n}\r\n","// 從 mermaid 原始碼解析 `%% @tip` 懸停提示指令。\r\n//\r\n// 與 `%% @check` 同一個設計哲學:用 `%%` 註解當載體,AI 產一段 mermaid 就能把懸停說明一起帶出來,\r\n// 消費端(markdown 圍欄、round-trip 編輯器)完全不用改。語法刻意比 @check 輕 —— 一則提示就是一段文字:\r\n//\r\n//   %% @tip A 這一步從佇列撈批次,批次大小 500\r\n//   %%   逾時 30s 會整批重排,觀察 requeue_count\r\n//   %% @tip \"人工覆核\" 只有金額 > 10 萬才會走到這裡\r\n//\r\n// 起始行:`@tip <target> <文字>`;target 帶引號 = 以標籤文字比對(同 @check)。\r\n// 之後的**縮排**註解行是續行,併入同一則(以換行相接);未縮排行結束這一則。\r\n\r\nimport type { DiagramTip } from '../../types';\r\nimport { commentBody, isIndented } from '../checks/parse';\r\n\r\n/** `%% @tip` 起始行(允許 `%%@tip`,並容忍大小寫)。 */\r\nconst TIP_START_RE = /^@tip\\b\\s*(.*)$/i;\r\n\r\n/** 帶引號的 target = 以標籤文字比對。 */\r\nconst QUOTED_TARGET_RE = /^\"([^\"]+)\"\\s*(.*)$/;\r\n\r\n/** 未加引號的 target:第一個空白前為 id,其餘是提示文字。 */\r\nconst BARE_TARGET_RE = /^(\\S+)\\s*(.*)$/;\r\n\r\ninterface ScanResult {\r\n  tips: DiagramTip[];\r\n  /** 屬於指令的行號(0-based)—— 交給 stripTipDirectives 剔除。 */\r\n  directiveLines: Set<number>;\r\n}\r\n\r\n/** 解析 `@tip` 後面那串 → { target, match, text };無 target 回 undefined。 */\r\nfunction parseHeader(rest: string): DiagramTip | undefined {\r\n  const text = rest.trim();\r\n  if (!text) {\r\n    return undefined;\r\n  }\r\n  const quoted = QUOTED_TARGET_RE.exec(text);\r\n  if (quoted) {\r\n    return { target: quoted[1], match: 'label', text: quoted[2].trim() };\r\n  }\r\n  const bare = BARE_TARGET_RE.exec(text);\r\n  if (!bare) {\r\n    return undefined;\r\n  }\r\n  return { target: bare[1], text: bare[2].trim() };\r\n}\r\n\r\n/**\r\n * 單次掃描:同時產出 tips 與「屬於指令的行號」—— 解析與剔除共用同一套判斷,\r\n * 不會出現「解析得到卻沒剔乾淨」的殘留(同 checks/parse 的 scan)。\r\n */\r\nfunction scan(code: string): ScanResult {\r\n  const lines = code.split('\\n');\r\n  const tips: DiagramTip[] = [];\r\n  const directiveLines = new Set<number>();\r\n\r\n  let current: DiagramTip | undefined;\r\n\r\n  for (let i = 0; i < lines.length; i += 1) {\r\n    const line = lines[i];\r\n    const body = commentBody(line);\r\n\r\n    if (body === undefined) {\r\n      // 空白行不中斷(圖源常在指令與語句間留空行);真正的語句才結束這一則。\r\n      if (line.trim()) {\r\n        current = undefined;\r\n      }\r\n      continue;\r\n    }\r\n\r\n    const start = TIP_START_RE.exec(body.trim());\r\n    if (start) {\r\n      current = parseHeader(start[1]);\r\n      if (current) {\r\n        tips.push(current);\r\n        directiveLines.add(i);\r\n      }\r\n      continue;\r\n    }\r\n\r\n    // 縮排的註解行 = 續行;其餘 `%%` 註解與本指令無關,原樣留給 mermaid。\r\n    if (current && isIndented(body)) {\r\n      const cont = body.trim();\r\n      current.text = current.text ? `${current.text}\\n${cont}` : cont;\r\n      directiveLines.add(i);\r\n      continue;\r\n    }\r\n    current = undefined;\r\n  }\r\n\r\n  // 只有 target 沒有文字的空提示沒東西可顯示,丟掉。\r\n  return { tips: tips.filter((t) => t.text), directiveLines };\r\n}\r\n\r\n/** 解析原始碼中的 `%% @tip` 指令。無指令時回空陣列(零成本)。 */\r\nexport function parseTips(code: string): DiagramTip[] {\r\n  if (!code.includes('@tip')) {\r\n    return [];\r\n  }\r\n  return scan(code).tips;\r\n}\r\n\r\n/**\r\n * 剔除 `%% @tip` 指令行,回傳可安全交給 mermaid 的原始碼。\r\n * mermaid 本來就會忽略 `%%` 註解,但剔除可讓 parse 錯誤訊息的行號不被提示內容干擾,\r\n * 與 stripCheckDirectives 行為一致。\r\n */\r\nexport function stripTipDirectives(code: string): string {\r\n  if (!code.includes('@tip')) {\r\n    return code;\r\n  }\r\n  const { directiveLines } = scan(code);\r\n  if (directiveLines.size === 0) {\r\n    return code;\r\n  }\r\n  return code\r\n    .split('\\n')\r\n    .filter((_, i) => !directiveLines.has(i))\r\n    .join('\\n');\r\n}\r\n\r\n/**\r\n * 合併兩組 tips:`overrides`(通常來自 prop)覆寫 `base`(通常來自原始碼)中同 target 的項目。\r\n * 語意同 mergeChecks —— prop 是「這個節點就用我這份」。\r\n */\r\nexport function mergeTips(base: DiagramTip[], overrides?: DiagramTip[]): DiagramTip[] {\r\n  if (!overrides || overrides.length === 0) {\r\n    return base;\r\n  }\r\n  const overridden = new Set(overrides.map((t) => t.target));\r\n  return [...base.filter((t) => !overridden.has(t.target)), ...overrides];\r\n}\r\n\r\n/** 把 `tips` prop 的簡寫形(Record<target, text>)正規化成 DiagramTip[]。 */\r\nexport function normalizeTips(\r\n  tips: DiagramTip[] | Record<string, string> | undefined,\r\n): DiagramTip[] | undefined {\r\n  if (!tips) {\r\n    return undefined;\r\n  }\r\n  if (Array.isArray(tips)) {\r\n    return tips;\r\n  }\r\n  return Object.entries(tips).map(([target, text]) => ({ target, text }));\r\n}\r\n","// Colorful 樣式的後處理上色器:在 mermaid 輸出的 SVG 上重新套用現代調色盤\r\n// (Tailwind 100 底色 / 500 邊框) + 圓角 + 軟陰影 + slate 邊線。\r\n// 純 DOM 操作,需在瀏覽器端執行;每個 pass 在零命中時自動跳過,\r\n// 故 mermaid 的 DOM 結構變動不會讓渲染中斷。\r\n\r\nimport {\r\n  ORID_EMPTY_CLASS,\r\n  ORID_PALETTE,\r\n  oridItemClass,\r\n  oridStageClass,\r\n  type OridPaletteEntry,\r\n} from '../orid/theme';\r\nimport type { OridStageKey } from '../orid/model';\r\n\r\nexport interface ColorizeOptions {\r\n  dark?: boolean;\r\n}\r\n\r\ninterface PaletteEntry {\r\n  fill: string;\r\n  stroke: string;\r\n}\r\n\r\nconst NODE_PALETTE: PaletteEntry[] = [\r\n  { fill: '#DBEAFE', stroke: '#3B82F6' }, // blue\r\n  { fill: '#DCFCE7', stroke: '#22C55E' }, // green\r\n  { fill: '#FFEDD5', stroke: '#F97316' }, // orange\r\n  { fill: '#F3E8FF', stroke: '#A855F7' }, // purple\r\n  { fill: '#FEE2E2', stroke: '#EF4444' }, // red\r\n  { fill: '#CFFAFE', stroke: '#06B6D4' }, // cyan\r\n  { fill: '#FEF9C3', stroke: '#EAB308' }, // yellow\r\n  { fill: '#EDE9FE', stroke: '#8B5CF6' }, // violet\r\n];\r\n\r\n// 叢集 / 水道底色。色相對齊 NODE_PALETTE;底色夠濃(16% 而非舊的 7%)、\r\n// 邊框夠飽和,相鄰水道一眼可辨,標題也更清楚。\r\nconst CLUSTER_PALETTE: PaletteEntry[] = [\r\n  { fill: 'rgba(59, 130, 246, 0.16)', stroke: '#3B82F6' }, // blue\r\n  { fill: 'rgba(34, 197, 94, 0.16)', stroke: '#22C55E' }, // green\r\n  { fill: 'rgba(249, 115, 22, 0.16)', stroke: '#F97316' }, // orange\r\n  { fill: 'rgba(168, 85, 247, 0.16)', stroke: '#A855F7' }, // purple\r\n  { fill: 'rgba(239, 68, 68, 0.16)', stroke: '#EF4444' }, // red\r\n  { fill: 'rgba(6, 182, 212, 0.16)', stroke: '#06B6D4' }, // cyan\r\n  { fill: 'rgba(234, 179, 8, 0.16)', stroke: '#EAB308' }, // yellow\r\n  { fill: 'rgba(139, 92, 246, 0.16)', stroke: '#8B5CF6' }, // violet\r\n];\r\n\r\n// 圓餅 / 圓環專用的鮮明調色盤。mermaid 在 dark base 主題下的預設圓餅色又暗又糊\r\n// (顏色太死),這裡整組換成飽和、相鄰色相差異大的版本,讓圖表「活」起來。\r\nconst PIE_PALETTE = [\r\n  '#3B82F6', // blue\r\n  '#22C55E', // green\r\n  '#F59E0B', // amber\r\n  '#A855F7', // purple\r\n  '#EF4444', // red\r\n  '#06B6D4', // cyan\r\n  '#EC4899', // pink\r\n  '#84CC16', // lime\r\n  '#F97316', // orange\r\n  '#14B8A6', // teal\r\n  '#6366F1', // indigo\r\n  '#EAB308', // yellow\r\n];\r\n\r\nconst NODE_TEXT = '#1F2937';\r\nconst SHADOW_FILTER_ID = 'rsm-soft-shadow';\r\nconst SVG_NS = 'http://www.w3.org/2000/svg';\r\n\r\nfunction resolveSvg(root: ParentNode): Element | null {\r\n  if (root instanceof Element && root.tagName.toLowerCase() === 'svg') {\r\n    return root;\r\n  }\r\n  return root.querySelector('svg');\r\n}\r\n\r\n/** 把顏色字串正規化成 \"r,g,b\",讓 attribute(hex)與 inline style(瀏覽器會轉成 rgb)互相對得上。 */\r\nfunction canonColor(input: string): string {\r\n  const s = (input || '').trim();\r\n  const hex = /^#?([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(s);\r\n  if (hex) {\r\n    let h = hex[1];\r\n    if (h.length === 3) {\r\n      h = h\r\n        .split('')\r\n        .map((c) => c + c)\r\n        .join('');\r\n    }\r\n    const n = parseInt(h, 16);\r\n    return `${(n >> 16) & 255},${(n >> 8) & 255},${n & 255}`;\r\n  }\r\n  const rgb = /rgba?\\(([^)]+)\\)/i.exec(s);\r\n  if (rgb) {\r\n    const p = rgb[1].split(',').map((x) => Math.round(parseFloat(x)));\r\n    return `${p[0]},${p[1]},${p[2]}`;\r\n  }\r\n  return s.toLowerCase();\r\n}\r\n\r\n/** 以 sRGB 相對亮度決定:在這個底色上要用白字還是深字,確保對比清楚。 */\r\nfunction readableTextOn(color: string): string {\r\n  const m = /^#?([0-9a-f]{6})$/i.exec(color.trim());\r\n  if (!m) {\r\n    return '#FFFFFF';\r\n  }\r\n  const n = parseInt(m[1], 16);\r\n  const r = (n >> 16) & 255;\r\n  const g = (n >> 8) & 255;\r\n  const b = n & 255;\r\n  const lum = (0.299 * r + 0.587 * g + 0.114 * b) / 255;\r\n  return lum > 0.62 ? '#1F2937' : '#FFFFFF';\r\n}\r\n\r\n/** 共用的軟陰影 filter — 讓節點看起來更接近商業工具。 */\r\nfunction ensureShadowFilter(svg: Element): void {\r\n  if (svg.querySelector(`#${SHADOW_FILTER_ID}`)) {\r\n    return;\r\n  }\r\n  let defs = svg.querySelector(':scope > defs');\r\n  if (!defs) {\r\n    defs = document.createElementNS(SVG_NS, 'defs');\r\n    svg.insertBefore(defs, svg.firstChild);\r\n  }\r\n  const filter = document.createElementNS(SVG_NS, 'filter');\r\n  filter.setAttribute('id', SHADOW_FILTER_ID);\r\n  filter.setAttribute('x', '-25%');\r\n  filter.setAttribute('y', '-25%');\r\n  filter.setAttribute('width', '150%');\r\n  filter.setAttribute('height', '150%');\r\n  const drop = document.createElementNS(SVG_NS, 'feDropShadow');\r\n  drop.setAttribute('dx', '0');\r\n  drop.setAttribute('dy', '1.5');\r\n  drop.setAttribute('stdDeviation', '2');\r\n  drop.setAttribute('flood-color', '#0F172A');\r\n  drop.setAttribute('flood-opacity', '0.22');\r\n  filter.appendChild(drop);\r\n  defs.appendChild(filter);\r\n}\r\n\r\nfunction roundRect(shape: SVGElement, radius: number): void {\r\n  if (shape.tagName.toLowerCase() !== 'rect') {\r\n    return;\r\n  }\r\n  // Stadium 形狀本身已帶大 rx,別把它壓平。\r\n  const rx = Number(shape.getAttribute('rx') ?? '0');\r\n  if (rx < radius + 1) {\r\n    shape.setAttribute('rx', String(radius));\r\n    shape.setAttribute('ry', String(radius));\r\n  }\r\n}\r\n\r\nfunction paintShapes(group: Element, entry: PaletteEntry): void {\r\n  const direct = Array.from(\r\n    group.querySelectorAll<SVGElement>(\r\n      ':scope > rect, :scope > polygon, :scope > circle, :scope > ellipse, :scope > path',\r\n    ),\r\n  );\r\n  if (direct.length > 0) {\r\n    for (const shape of direct) {\r\n      shape.style.fill = entry.fill;\r\n      shape.style.stroke = entry.stroke;\r\n      shape.style.strokeWidth = '1.4px';\r\n      roundRect(shape, 8);\r\n    }\r\n    direct[0].setAttribute('filter', `url(#${SHADOW_FILTER_ID})`);\r\n    return;\r\n  }\r\n  // v11 unified-renderer 節點(如 erDiagram 實體)把形狀包在子群組:\r\n  // g.outer-path 放背景與邊框、g.row-rect-odd/even 放屬性列、g.divider 放分隔線。\r\n  for (const path of Array.from(group.querySelectorAll<SVGElement>(':scope > g.outer-path > *'))) {\r\n    if (path.getAttribute('fill') && path.getAttribute('fill') !== 'none') {\r\n      path.style.fill = entry.fill;\r\n      path.setAttribute('filter', `url(#${SHADOW_FILTER_ID})`);\r\n    }\r\n    if (path.getAttribute('stroke') && path.getAttribute('stroke') !== 'none') {\r\n      path.style.stroke = entry.stroke;\r\n      path.style.strokeWidth = '1.4px';\r\n    }\r\n  }\r\n  for (const row of Array.from(group.querySelectorAll<SVGElement>(':scope > g.row-rect-odd > *'))) {\r\n    row.style.fill = 'rgba(255, 255, 255, 0.55)';\r\n  }\r\n  for (const row of Array.from(group.querySelectorAll<SVGElement>(':scope > g.row-rect-even > *'))) {\r\n    row.style.fill = 'rgba(255, 255, 255, 0.3)';\r\n  }\r\n  for (const divider of Array.from(group.querySelectorAll<SVGElement>(':scope > g.divider > *'))) {\r\n    divider.style.stroke = entry.stroke;\r\n  }\r\n}\r\n\r\nfunction darkenNodeText(group: Element, dark = false): void {\r\n  // 亮色:底色是淺 pastel → 深字才清楚;暗色:底色改半透明深色票 → 亮字才清楚。\r\n  const c = dark ? '#E2E8F0' : NODE_TEXT;\r\n  for (const el of Array.from(group.querySelectorAll<SVGTextElement>('text, tspan'))) {\r\n    el.style.fill = c;\r\n  }\r\n  for (const el of Array.from(group.querySelectorAll<HTMLElement>('.nodeLabel, span, p'))) {\r\n    el.style.color = c;\r\n  }\r\n}\r\n\r\n/** slate 色、圓角端點的邊線,比 mermaid 預設更乾淨。 */\r\nfunction styleEdges(svg: Element, dark: boolean): void {\r\n  const edgeColor = dark ? '#94A3B8' : '#64748B';\r\n  const edgeSelectors = [\r\n    '.edgePaths path',\r\n    'g.edgePath path',\r\n    'path.flowchart-link',\r\n    'path.relationshipLine',\r\n  ].join(', ');\r\n  for (const edge of Array.from(svg.querySelectorAll<SVGElement>(edgeSelectors))) {\r\n    // `~~~` 隱形連線只是排版用的骨架(ORID 的項目列就靠它),不能被重新上色畫成實線。\r\n    if (edge.classList.contains('edge-thickness-invisible')) {\r\n      edge.style.stroke = 'none';\r\n      edge.style.strokeWidth = '0';\r\n      continue;\r\n    }\r\n    edge.style.stroke = edgeColor;\r\n    edge.style.strokeWidth = '1.7px';\r\n    edge.style.strokeLinecap = 'round';\r\n  }\r\n  for (const marker of Array.from(svg.querySelectorAll<SVGElement>('marker path'))) {\r\n    marker.style.fill = edgeColor;\r\n    marker.style.stroke = edgeColor;\r\n  }\r\n}\r\n\r\nfunction styleEdgeLabels(svg: Element): void {\r\n  for (const label of Array.from(svg.querySelectorAll<HTMLElement>('.edgeLabel span, .edgeLabel p'))) {\r\n    label.style.borderRadius = '6px';\r\n  }\r\n  for (const rect of Array.from(svg.querySelectorAll<SVGElement>('.edgeLabel rect'))) {\r\n    rect.setAttribute('rx', '4');\r\n    rect.setAttribute('ry', '4');\r\n  }\r\n}\r\n\r\n/**\r\n * 訊息文字 / flowchart 邊標籤沿用 mermaid 偏淡的預設色,落在淺色畫布上會糊掉 —\r\n * 一律改成深色(深色主題改淺色),維持像 Excalidraw 一樣清楚。\r\n */\r\nfunction styleLabelText(svg: Element, dark: boolean): void {\r\n  const color = dark ? '#E2E8F0' : NODE_TEXT;\r\n  for (const t of Array.from(\r\n    svg.querySelectorAll<SVGElement>('text.messageText, .edgeLabel text, .edgeLabel tspan'),\r\n  )) {\r\n    t.style.fill = color;\r\n  }\r\n  for (const t of Array.from(svg.querySelectorAll<HTMLElement>('.edgeLabel span, .edgeLabel p'))) {\r\n    t.style.color = color;\r\n  }\r\n}\r\n\r\n/** 對舊版 ER markup(mermaid < 11.x)的實體標題列上色。 */\r\nfunction colorizeLegacyEr(svg: Element): void {\r\n  const erGroups: Element[] = [];\r\n  for (const rect of Array.from(svg.querySelectorAll<SVGElement>('rect.er.entityBox'))) {\r\n    const group = rect.parentElement;\r\n    if (group && !erGroups.includes(group)) {\r\n      erGroups.push(group);\r\n    }\r\n  }\r\n  erGroups.forEach((group, i) => {\r\n    const entry = NODE_PALETTE[i % NODE_PALETTE.length];\r\n    for (const rect of Array.from(group.querySelectorAll<SVGElement>('rect.er.entityBox')).slice(0, 1)) {\r\n      rect.style.fill = entry.fill;\r\n      rect.style.stroke = entry.stroke;\r\n    }\r\n    for (const label of Array.from(group.querySelectorAll<SVGElement>('text.er.entityLabel'))) {\r\n      label.style.fill = NODE_TEXT;\r\n    }\r\n  });\r\n}\r\n\r\n/**\r\n * sequenceDiagram 上色:每條水道(actor 方框 + 生命線 + 啟用條)依名稱輪用調色盤,\r\n * 讓原本同色的各水道一眼可辨。其餘圖型(flowchart / ER …)無 rect.actor,整段自動略過。\r\n */\r\nfunction colorizeSequence(svg: Element, dark: boolean): void {\r\n  const actorRects = Array.from(svg.querySelectorAll<SVGRectElement>('rect.actor'));\r\n  if (actorRects.length === 0) {\r\n    return;\r\n  }\r\n\r\n  // 依「DOM 出現順序」(頂端 actor 由左至右)替每個名稱配色;頂 / 底方框與生命線共用同色。\r\n  const colorByName = new Map<string, PaletteEntry>();\r\n  let nextIndex = 0;\r\n  for (const rect of actorRects) {\r\n    const name = rect.getAttribute('name') ?? `#${nextIndex}`;\r\n    let entry = colorByName.get(name);\r\n    if (!entry) {\r\n      entry = NODE_PALETTE[nextIndex % NODE_PALETTE.length];\r\n      colorByName.set(name, entry);\r\n      nextIndex += 1;\r\n    }\r\n    rect.style.fill = entry.fill;\r\n    rect.style.stroke = entry.stroke;\r\n    rect.style.strokeWidth = '1.4px';\r\n    rect.setAttribute('rx', '8');\r\n    rect.setAttribute('ry', '8');\r\n    rect.setAttribute('filter', `url(#${SHADOW_FILTER_ID})`);\r\n    // 標題文字(與 rect 同群組)轉深色,落在淺色 pastel 上才清楚。\r\n    const group = rect.parentElement;\r\n    if (group) {\r\n      for (const text of Array.from(group.querySelectorAll<SVGTextElement>('text, tspan'))) {\r\n        text.style.fill = NODE_TEXT;\r\n      }\r\n    }\r\n  }\r\n\r\n  // 生命線:改用所屬水道的描邊色(以 name 對應),縱向流程比單一灰虛線更好追蹤;\r\n  // 同時記下每條生命線的 x 座標 → 水道色,供啟用條對應歸屬。\r\n  const lanesByX: { x: number; entry: PaletteEntry }[] = [];\r\n  for (const line of Array.from(svg.querySelectorAll<SVGElement>('line.actor-line'))) {\r\n    const entry = colorByName.get(line.getAttribute('name') ?? '');\r\n    if (!entry) {\r\n      continue;\r\n    }\r\n    line.style.stroke = entry.stroke;\r\n    line.style.strokeOpacity = '0.45';\r\n    line.style.strokeWidth = '1.3px';\r\n    line.style.strokeDasharray = '4 5';\r\n    const x = Number(line.getAttribute('x1'));\r\n    if (Number.isFinite(x)) {\r\n      lanesByX.push({ x, entry });\r\n    }\r\n  }\r\n\r\n  // 啟用條:以中心 x 對應到最近的生命線,套上該水道色,讓「此刻是哪條水道在執行」一眼可辨。\r\n  const activations = Array.from(\r\n    svg.querySelectorAll<SVGRectElement>('rect.activation0, rect.activation1, rect.activation2'),\r\n  );\r\n  for (const bar of activations) {\r\n    const x = Number(bar.getAttribute('x'));\r\n    const w = Number(bar.getAttribute('width'));\r\n    if (!Number.isFinite(x) || !Number.isFinite(w) || lanesByX.length === 0) {\r\n      continue;\r\n    }\r\n    const center = x + w / 2;\r\n    let best = lanesByX[0];\r\n    for (const lane of lanesByX) {\r\n      if (Math.abs(lane.x - center) < Math.abs(best.x - center)) {\r\n        best = lane;\r\n      }\r\n    }\r\n    bar.style.fill = best.entry.fill;\r\n    bar.style.stroke = best.entry.stroke;\r\n    bar.style.strokeWidth = '1px';\r\n    bar.setAttribute('rx', '3');\r\n    bar.setAttribute('ry', '3');\r\n  }\r\n\r\n  // note:便利貼風(amber)+ 圓角 + 軟陰影 + 深色字。\r\n  for (const note of Array.from(svg.querySelectorAll<SVGRectElement>('rect.note'))) {\r\n    note.style.fill = '#FEF9C3';\r\n    note.style.stroke = '#EAB308';\r\n    note.style.strokeWidth = '1.2px';\r\n    note.setAttribute('rx', '6');\r\n    note.setAttribute('ry', '6');\r\n    note.setAttribute('filter', `url(#${SHADOW_FILTER_ID})`);\r\n  }\r\n  for (const text of Array.from(svg.querySelectorAll<SVGTextElement>('.noteText, .noteText tspan'))) {\r\n    text.style.fill = NODE_TEXT;\r\n  }\r\n\r\n  // 訊息線 / loop·alt·opt 外框:統一成 slate 墨線,與 flowchart edge 風格一致;訊息文字轉深色。\r\n  const ink = dark ? '#94A3B8' : '#64748B';\r\n  for (const line of Array.from(svg.querySelectorAll<SVGElement>('.messageLine0, .messageLine1'))) {\r\n    line.style.stroke = ink;\r\n    line.style.strokeWidth = '1.6px';\r\n    line.style.strokeLinecap = 'round';\r\n  }\r\n  for (const loop of Array.from(svg.querySelectorAll<SVGElement>('.loopLine'))) {\r\n    loop.style.stroke = ink;\r\n    loop.style.strokeOpacity = '0.55';\r\n  }\r\n  for (const text of Array.from(\r\n    svg.querySelectorAll<SVGTextElement>('.messageText, .loopText, .labelText'),\r\n  )) {\r\n    text.style.fill = dark ? '#E2E8F0' : NODE_TEXT;\r\n  }\r\n}\r\n\r\n/** Pie / 圓環:換上鮮明調色盤(取代又暗又糊的原生深色),白色分隔線 + 對比文字。 */\r\nfunction stylePie(svg: Element, dark: boolean): void {\r\n  const slices = Array.from(svg.querySelectorAll<SVGElement>('path.pieCircle'));\r\n  const swatches = Array.from(svg.querySelectorAll<SVGElement>('g.legend rect'));\r\n  if (slices.length === 0 && swatches.length === 0) {\r\n    return;\r\n  }\r\n\r\n  // 以「目前填色」為鍵建立 舊色→新鮮明色 對映,讓同一資料項的扇形與圖例色塊拿到同一個新色\r\n  // (mermaid 用 ordinal scale 依 label 上色,同 label 的扇形與圖例底色字串一致)。\r\n  const remap = new Map<string, string>();\r\n  let next = 0;\r\n  const newColorFor = (old: string): string => {\r\n    const key = canonColor(old) || `#slot-${next}`;\r\n    let c = remap.get(key);\r\n    if (!c) {\r\n      c = PIE_PALETTE[next % PIE_PALETTE.length];\r\n      remap.set(key, c);\r\n      next += 1;\r\n    }\r\n    return c;\r\n  };\r\n\r\n  const sliceNewColors: string[] = [];\r\n  for (const slice of slices) {\r\n    const old = slice.style.fill || slice.getAttribute('fill') || '';\r\n    const c = newColorFor(old);\r\n    sliceNewColors.push(c);\r\n    slice.style.fill = c;\r\n    slice.style.opacity = '1'; // 原生深色主題的 pieOpacity < 1 會讓扇形發灰 → 拉回不透明。\r\n    slice.style.stroke = dark ? '#0F172A' : '#FFFFFF';\r\n    slice.style.strokeWidth = '2px';\r\n    slice.style.strokeLinejoin = 'round';\r\n  }\r\n  // 圖例色塊:依「索引」對齊對應扇形的新色(扇形與圖例同資料順序)。不可改用舊色比對——\r\n  // mermaid 扇形填 hex/hsl、圖例填 rgb,canonColor 對 hsl↔rgb 正規化不一致 → 第三項起圖例與扇形錯色。\r\n  for (let i = 0; i < swatches.length; i++) {\r\n    const sw = swatches[i];\r\n    const c =\r\n      i < sliceNewColors.length\r\n        ? sliceNewColors[i]\r\n        : newColorFor(sw.style.fill || sw.getAttribute('fill') || '');\r\n    sw.style.fill = c;\r\n    sw.style.stroke = c;\r\n    sw.setAttribute('rx', '3');\r\n    sw.setAttribute('ry', '3');\r\n  }\r\n  // 扇形上的百分比文字:依該扇形新色挑白字 / 深字(mermaid 扇形與 .slice 文字同順序)。\r\n  Array.from(svg.querySelectorAll<SVGElement>('text.slice')).forEach((label, i) => {\r\n    const slice = slices[i];\r\n    const c = slice ? slice.style.fill || PIE_PALETTE[0] : PIE_PALETTE[0];\r\n    label.style.fill = readableTextOn(c);\r\n    label.style.fontWeight = '600';\r\n  });\r\n  for (const title of Array.from(svg.querySelectorAll<SVGElement>('text.pieTitleText'))) {\r\n    title.style.fontWeight = '700';\r\n    title.style.fill = dark ? '#E2E8F0' : '#1F2937';\r\n  }\r\n  for (const t of Array.from(svg.querySelectorAll<SVGElement>('g.legend text'))) {\r\n    t.style.fill = dark ? '#E2E8F0' : '#1F2937';\r\n  }\r\n  for (const oc of Array.from(svg.querySelectorAll<SVGElement>('circle.pieOuterCircle'))) {\r\n    oc.style.stroke = dark ? '#334155' : '#CBD5E1';\r\n  }\r\n}\r\n\r\n/** Gantt:依 section 替任務上色,保留 done/active/crit 的語意色不動。 */\r\nfunction styleGantt(svg: Element, dark: boolean): void {\r\n  const tasks = Array.from(svg.querySelectorAll<SVGElement>('rect.task'));\r\n  if (tasks.length === 0) {\r\n    return;\r\n  }\r\n  // 亮色用實心淺色票(深字);暗色用半透明色票(深底)+ 亮字,維持與其他圖表暗色一致。\r\n  const taskPalette = dark ? CLUSTER_PALETTE : NODE_PALETTE;\r\n  for (const task of tasks) {\r\n    const cls = task.getAttribute('class') ?? '';\r\n    if (/\\b(done|active|crit|milestone)\\d*\\b/.test(cls)) {\r\n      continue;\r\n    }\r\n    const m = cls.match(/task(\\d+)/);\r\n    if (!m) {\r\n      continue;\r\n    }\r\n    const entry = taskPalette[Number(m[1]) % taskPalette.length];\r\n    task.style.fill = entry.fill;\r\n    task.style.stroke = entry.stroke;\r\n    task.setAttribute('rx', '4');\r\n    task.setAttribute('ry', '4');\r\n  }\r\n  Array.from(svg.querySelectorAll<SVGElement>('rect.section')).forEach((band) => {\r\n    const m = (band.getAttribute('class') ?? '').match(/section(\\d+)/);\r\n    if (m) {\r\n      band.style.fill = CLUSTER_PALETTE[Number(m[1]) % CLUSTER_PALETTE.length].fill;\r\n    }\r\n  });\r\n  for (const t of Array.from(svg.querySelectorAll<SVGElement>('text.taskText'))) {\r\n    // 暗色:所有任務字(條內 + 條外)轉亮;亮色:只把條內字壓深(條外維持 mermaid 預設)。\r\n    if (dark) {\r\n      t.style.fill = '#E2E8F0';\r\n    } else if (!/Outside/.test(t.getAttribute('class') ?? '')) {\r\n      t.style.fill = NODE_TEXT;\r\n    }\r\n  }\r\n  for (const tick of Array.from(svg.querySelectorAll<SVGElement>('g.grid g.tick line'))) {\r\n    tick.style.stroke = dark ? '#334155' : '#E2E8F0';\r\n  }\r\n}\r\n\r\n/** Timeline:同一 section 的節點共用一色(以 section-N class 取得)。 */\r\nfunction styleTimeline(svg: Element, dark: boolean): void {\r\n  // 亮色用實心淺色票(深字);暗色用半透明色票(深底柔和塊)+ 亮字,避免淺塊在暗色刺眼 / 淺字看不見。\r\n  const palette = dark ? CLUSTER_PALETTE : NODE_PALETTE;\r\n  const nodes = Array.from(svg.querySelectorAll<SVGGElement>('g[class*=\"timeline-node\"]'));\r\n  nodes.forEach((node, i) => {\r\n    const m = (node.getAttribute('class') ?? '').match(/section-(-?\\d+)/);\r\n    const section = m ? Number(m[1]) : i;\r\n    const entry = section < 0 ? palette[7] : palette[section % palette.length];\r\n    const backgrounds = Array.from(node.querySelectorAll<SVGElement>('.node-bkg'));\r\n    if (backgrounds.length > 0) {\r\n      for (const bkg of backgrounds) {\r\n        bkg.style.fill = entry.fill;\r\n        bkg.style.stroke = entry.stroke;\r\n        bkg.style.strokeWidth = '1.4px';\r\n      }\r\n    } else {\r\n      paintShapes(node, entry);\r\n    }\r\n    darkenNodeText(node, dark);\r\n  });\r\n  if (dark) {\r\n    // 標題 / 期間軸等節點外的文字也轉亮色。\r\n    Array.from(svg.querySelectorAll<SVGElement>('text, tspan')).forEach((t) => {\r\n      if (!t.style.fill || t.style.fill === NODE_TEXT) {\r\n        t.style.fill = '#E2E8F0';\r\n      }\r\n    });\r\n  }\r\n}\r\n\r\n/** Mindmap:以 section-N class 為鍵,讓同一分支的兄弟節點共用一色。 */\r\nfunction styleMindmap(svg: Element, dark: boolean): void {\r\n  const nodes = Array.from(svg.querySelectorAll<SVGGElement>('g.mindmap-node'));\r\n  if (nodes.length === 0) {\r\n    return;\r\n  }\r\n  // 亮色實心淺色票(深字);暗色半透明色票(深底)+ 亮字。\r\n  const palette = dark ? CLUSTER_PALETTE : NODE_PALETTE;\r\n  for (const node of nodes) {\r\n    const m = (node.getAttribute('class') ?? '').match(/section-(-?\\d+)/);\r\n    const section = m ? Number(m[1]) : 0;\r\n    const entry =\r\n      section < 0\r\n        ? palette[7] // root → violet\r\n        : palette[section % palette.length];\r\n    for (const shape of Array.from(\r\n      node.querySelectorAll<SVGElement>('path, rect, circle, ellipse'),\r\n    )) {\r\n      if (shape.closest('g.children')) {\r\n        continue; // 只上自己的形狀,不動子孫\r\n      }\r\n      shape.style.fill = entry.fill;\r\n      shape.style.stroke = entry.stroke;\r\n      shape.style.strokeWidth = '1.4px';\r\n    }\r\n    darkenNodeText(node, dark);\r\n  }\r\n  for (const edge of Array.from(svg.querySelectorAll<SVGElement>('path[class*=\"edge\"]'))) {\r\n    const m = (edge.getAttribute('class') ?? '').match(/section-edge-(-?\\d+)/);\r\n    if (m) {\r\n      const section = Number(m[1]);\r\n      const entry = section < 0 ? NODE_PALETTE[7] : NODE_PALETTE[section % NODE_PALETTE.length];\r\n      edge.style.stroke = entry.stroke;\r\n      edge.style.strokeWidth = '2px';\r\n      edge.style.opacity = '0.6';\r\n      edge.style.fill = 'none';\r\n    }\r\n  }\r\n}\r\n\r\n/** Journey:依任務型別替圓點上色,笑臉維持不動。 */\r\nfunction styleJourney(svg: Element, dark: boolean): void {\r\n  // 任務方塊:亮色用實心淺色票(深字可讀);暗色改用半透明色票(CLUSTER_PALETTE,在深底是柔和深色塊),\r\n  // 配下方強制亮字,避免「淺底+淺字」在暗色幾乎看不見。\r\n  const taskPalette = dark ? CLUSTER_PALETTE : NODE_PALETTE;\r\n  const tasks = Array.from(\r\n    svg.querySelectorAll<SVGElement>('circle[class*=\"task-type\"], rect[class*=\"task-type\"]'),\r\n  );\r\n  tasks.forEach((shape) => {\r\n    const m = (shape.getAttribute('class') ?? '').match(/task-type-(\\d+)/);\r\n    if (m) {\r\n      const entry = taskPalette[Number(m[1]) % taskPalette.length];\r\n      shape.style.fill = entry.fill;\r\n      shape.style.stroke = entry.stroke;\r\n    }\r\n  });\r\n  Array.from(svg.querySelectorAll<SVGElement>('rect[class*=\"section-type\"]')).forEach((rect) => {\r\n    const m = (rect.getAttribute('class') ?? '').match(/section-type-(\\d+)/);\r\n    if (m) {\r\n      const entry = CLUSTER_PALETTE[Number(m[1]) % CLUSTER_PALETTE.length];\r\n      rect.style.fill = entry.fill;\r\n      rect.style.stroke = entry.stroke;\r\n    }\r\n  });\r\n  if (dark) {\r\n    Array.from(svg.querySelectorAll<SVGElement>('text')).forEach((t) => {\r\n      t.style.fill = '#E2E8F0';\r\n    });\r\n  }\r\n}\r\n\r\nfunction styleXychart(svg: Element): void {\r\n  // xychart-beta:每個 bar-plot-N 是一個資料系列;mermaid 預設長條填淺紫(#ECECFF)在白底幾乎\r\n  // 看不見 → 給每個系列一個鮮明色(系列內同色=標準長條圖),折線系列上鮮明描邊。\r\n  const barSeries = Array.from(svg.querySelectorAll<SVGElement>('g[class*=\"bar-plot-\"]'));\r\n  barSeries.forEach((g, i) => {\r\n    const c = PIE_PALETTE[i % PIE_PALETTE.length];\r\n    Array.from(g.querySelectorAll<SVGElement>('rect')).forEach((rect) => {\r\n      rect.style.fill = c;\r\n      rect.setAttribute('rx', '2');\r\n      rect.setAttribute('ry', '2');\r\n    });\r\n  });\r\n  Array.from(svg.querySelectorAll<SVGElement>('g[class*=\"line-plot-\"]')).forEach((g, i) => {\r\n    const c = PIE_PALETTE[(barSeries.length + i) % PIE_PALETTE.length];\r\n    Array.from(g.querySelectorAll<SVGElement>('path')).forEach((p) => {\r\n      p.style.stroke = c;\r\n      p.style.strokeWidth = '2.5px';\r\n      p.style.fill = 'none';\r\n    });\r\n  });\r\n}\r\n\r\nfunction styleQuadrant(svg: Element, dark: boolean): void {\r\n  // 4 個象限底色:mermaid 預設給幾乎一樣的淺紫(#ECECFF/#f1f1ff/#f6f6ff/#fbfbff)難以區分 →\r\n  // 換成 4 個柔和但可辨識的分區色(對標付費優先級矩陣)。暗色用半透明深色疊加,亮色用淺色票。\r\n  // 比對那幾個固定底色,改不到就略過。\r\n  const QUAD_TINTS = dark\r\n    ? ['rgba(59,130,246,0.20)', 'rgba(34,197,94,0.20)', 'rgba(234,179,8,0.20)', 'rgba(239,68,68,0.20)']\r\n    : ['#EFF6FF', '#ECFDF5', '#FEFCE8', '#FEF2F2'];\r\n  const palePat = /^#(ececff|f1f1ff|f6f6ff|fbfbff)$/i;\r\n  Array.from(svg.querySelectorAll<SVGElement>('rect'))\r\n    .filter((r) => palePat.test((r.style.fill || r.getAttribute('fill') || '').trim()))\r\n    .slice(0, 4)\r\n    .forEach((r, i) => {\r\n      r.style.fill = QUAD_TINTS[i % QUAD_TINTS.length];\r\n    });\r\n  // 資料點:colorful 主題下點的 fill 被算成 hsl(...NaN%) 而失效(變黑小點)→ 給鮮明色 + 描邊 + 放大。\r\n  Array.from(svg.querySelectorAll<SVGElement>('circle')).forEach((c, i) => {\r\n    c.style.fill = PIE_PALETTE[i % PIE_PALETTE.length];\r\n    c.style.stroke = dark ? '#0F172A' : '#FFFFFF';\r\n    c.style.strokeWidth = '1.5px';\r\n    if (Number(c.getAttribute('r') ?? '0') < 7) {\r\n      c.setAttribute('r', '7');\r\n    }\r\n  });\r\n  // 暗色:象限標題 / 軸標籤 / 點標籤確保亮色,在深底可讀(mermaid 有時留深字)。\r\n  if (dark) {\r\n    Array.from(svg.querySelectorAll<SVGElement>('text')).forEach((t) => {\r\n      t.style.fill = '#E2E8F0';\r\n    });\r\n  }\r\n}\r\n\r\n/**\r\n * 字體清晰度:對「任何主題」渲染出的圖加重文字字重,小字與縮圖也讀得清楚。\r\n * 只動 font-weight(不改色),故對原生 neutral/forest/dark 主題也安全,不會打架。\r\n */\r\n/**\r\n * ORID 圖的語意配色。\r\n *\r\n * 一般 flowchart 的節點是「依 DOM 順序輪播調色盤」,但 ORID 的顏色是有意義的\r\n * (藍=事實 / 橘=感受 / 紫=詮釋 / 綠=行動),同一階段的項目必須同色才看得出分段。\r\n * 所以這裡不看順序,只看轉譯器種在節點上的類名(見 orid/theme.ts),\r\n * 在通用 pass 之後覆蓋回正確的顏色。非 ORID 圖零命中、直接早退。\r\n */\r\nfunction styleOrid(svg: Element, dark: boolean): void {\r\n  // 轉譯器產生的 classDef 會被 mermaid 寫成帶 !important 的 <style> 規則\r\n  // (`.oridItemO>*{fill:…!important}`),普通 inline style 蓋不過去 ——\r\n  // 深色模式下就會變成「淺底 + 淺字」的看不見。故這裡一律用 important 寫回。\r\n  const set = (el: ElementCSSInlineStyle, prop: string, value: string): void =>\r\n    el.style.setProperty(prop, value, 'important');\r\n\r\n  const paint = (group: Element, entry: OridPaletteEntry, cluster: boolean): void => {\r\n    const fill = cluster\r\n      ? dark\r\n        ? entry.stageFillDark\r\n        : entry.stageFill\r\n      : dark\r\n        ? entry.itemFillDark\r\n        : entry.itemFill;\r\n    const stroke = cluster ? entry.stageStroke : entry.itemStroke;\r\n    for (const shape of Array.from(\r\n      group.querySelectorAll<SVGElement>(':scope > rect, :scope > polygon, :scope > path'),\r\n    )) {\r\n      set(shape, 'fill', fill);\r\n      set(shape, 'stroke', stroke);\r\n      set(shape, 'stroke-width', '1.5px');\r\n      shape.style.removeProperty('stroke-dasharray');\r\n      roundRect(shape, cluster ? 10 : 8);\r\n    }\r\n  };\r\n\r\n  /** 項目文字:底色深淺跟著主題走,字色也得跟著翻,否則對比會歸零。 */\r\n  const paintText = (group: Element, color: string): void => {\r\n    for (const el of Array.from(group.querySelectorAll<SVGTextElement>('text, tspan'))) {\r\n      set(el, 'fill', color);\r\n    }\r\n    for (const el of Array.from(group.querySelectorAll<HTMLElement>('.nodeLabel, span, p'))) {\r\n      set(el, 'color', color);\r\n    }\r\n  };\r\n\r\n  let hit = false;\r\n  const itemText = dark ? '#E2E8F0' : NODE_TEXT;\r\n  for (const key of Object.keys(ORID_PALETTE) as OridStageKey[]) {\r\n    const entry = ORID_PALETTE[key];\r\n    for (const node of Array.from(svg.querySelectorAll<SVGGElement>(`g.node.${oridItemClass(key)}`))) {\r\n      hit = true;\r\n      paint(node, entry, false);\r\n      paintText(node, itemText);\r\n    }\r\n    for (const cluster of Array.from(\r\n      svg.querySelectorAll<SVGGElement>(`g.cluster.${oridStageClass(key)}`),\r\n    )) {\r\n      hit = true;\r\n      paint(cluster, entry, true);\r\n      // 段落標題用該階段的主色 + 粗體,四段的節奏一眼看得出來。\r\n      const label = cluster.querySelector(':scope > .cluster-label');\r\n      if (!label) continue;\r\n      paintText(label, entry.stageStroke);\r\n      for (const el of Array.from(\r\n        label.querySelectorAll<SVGTextElement | HTMLElement>('text, tspan, .nodeLabel, span, p'),\r\n      )) {\r\n        set(el, 'font-weight', '700');\r\n      }\r\n      for (const lr of Array.from(label.querySelectorAll<SVGElement>('rect'))) {\r\n        set(lr, 'fill', 'transparent');\r\n      }\r\n    }\r\n  }\r\n  if (!hit) return;\r\n\r\n  // 空階段的佔位塊:通用 pass 會把它塗成實心色票,這裡改回虛線淡框(「這段還沒填」)。\r\n  const muted = dark ? '#64748B' : '#94A3B8';\r\n  for (const node of Array.from(svg.querySelectorAll<SVGGElement>(`g.node.${ORID_EMPTY_CLASS}`))) {\r\n    for (const shape of Array.from(\r\n      node.querySelectorAll<SVGElement>(':scope > rect, :scope > polygon, :scope > path'),\r\n    )) {\r\n      set(shape, 'fill', 'transparent');\r\n      set(shape, 'stroke', muted);\r\n      set(shape, 'stroke-width', '1px');\r\n      set(shape, 'stroke-dasharray', '4 4');\r\n      shape.removeAttribute('filter');\r\n    }\r\n    paintText(node, muted);\r\n  }\r\n}\r\n\r\nexport function boostLegibility(root: ParentNode): void {\r\n  const svg = resolveSvg(root);\r\n  if (!svg) {\r\n    return;\r\n  }\r\n  // 節點 / 心智圖 / 時間軸 / actor 標籤:semibold(標題交給各 styler 設更重的 700,\r\n  // 這裡不碰,以免把 colorful 已設好的 700 標題壓回 600)。\r\n  for (const el of Array.from(\r\n    svg.querySelectorAll<SVGElement>(\r\n      'g.node text, g.node tspan, g.mindmap-node text, g[class*=\"timeline-node\"] text, text.actor',\r\n    ),\r\n  )) {\r\n    el.style.fontWeight = '600';\r\n  }\r\n  for (const el of Array.from(svg.querySelectorAll<HTMLElement>('.nodeLabel, g.node span, g.node p'))) {\r\n    el.style.fontWeight = '600';\r\n  }\r\n  // 其餘文字(邊標籤 / 訊息 / 圖例 / 軸…)至少 medium,整體提升可讀性。\r\n  for (const el of Array.from(svg.querySelectorAll<SVGElement>('text'))) {\r\n    if (!el.style.fontWeight) {\r\n      el.style.fontWeight = '500';\r\n    }\r\n  }\r\n}\r\n\r\n/** 在已渲染的 mermaid SVG 上套用 Colorful 樣式(就地修改 DOM)。 */\r\nexport function colorizeDiagram(root: ParentNode, opts: ColorizeOptions = {}): void {\r\n  const svg = resolveSvg(root);\r\n  if (!svg) {\r\n    return;\r\n  }\r\n  ensureShadowFilter(svg);\r\n  const dark = opts.dark === true;\r\n\r\n  // flowchart / state / class / ER 節點(每個節點依序輪用調色盤)\r\n  Array.from(svg.querySelectorAll<SVGGElement>('g.node')).forEach((node, i) => {\r\n    paintShapes(node, NODE_PALETTE[i % NODE_PALETTE.length]);\r\n    darkenNodeText(node);\r\n  });\r\n\r\n  // flowchart subgraph(叢集):濃淡分明的底色 + 飽和邊框 + 同色粗體標題,水道一眼可辨。\r\n  Array.from(svg.querySelectorAll<SVGGElement>('g.cluster')).forEach((cluster, i) => {\r\n    const entry = CLUSTER_PALETTE[i % CLUSTER_PALETTE.length];\r\n    for (const rect of Array.from(cluster.querySelectorAll<SVGElement>(':scope > rect'))) {\r\n      rect.style.fill = entry.fill;\r\n      rect.style.stroke = entry.stroke;\r\n      rect.style.strokeWidth = '1.5px';\r\n      roundRect(rect, 10);\r\n    }\r\n    // 標題在 g.cluster-label 內,可能是 HTML label(live)或 <text>(htmlLabels:false 匯出)— 兩種都上色 + 加粗。\r\n    const label = cluster.querySelector(':scope > .cluster-label');\r\n    if (label) {\r\n      for (const el of Array.from(label.querySelectorAll<SVGTextElement>('text, tspan'))) {\r\n        el.style.fill = entry.stroke;\r\n        el.style.fontWeight = '700';\r\n      }\r\n      for (const el of Array.from(label.querySelectorAll<HTMLElement>('.nodeLabel, span, p'))) {\r\n        el.style.color = entry.stroke;\r\n        el.style.fontWeight = '700';\r\n      }\r\n      for (const lr of Array.from(label.querySelectorAll<SVGElement>('rect'))) {\r\n        lr.style.fill = entry.fill;\r\n      }\r\n    }\r\n  });\r\n\r\n  colorizeLegacyEr(svg);\r\n  colorizeSequence(svg, dark);\r\n  styleEdges(svg, dark);\r\n  styleEdgeLabels(svg);\r\n  styleLabelText(svg, dark);\r\n\r\n  // 依 aria-roledescription 分派各圖型專屬上色;未知型別自動略過,每個 styler 零命中即早退,\r\n  // 故 mermaid 的 DOM 變動永遠不會讓渲染中斷。\r\n  const kind = svg.getAttribute('aria-roledescription') ?? '';\r\n  if (kind === 'pie' || kind === 'pieChart') {\r\n    stylePie(svg, dark);\r\n  } else if (kind === 'gantt') {\r\n    styleGantt(svg, dark);\r\n  } else if (kind === 'timeline') {\r\n    styleTimeline(svg, dark);\r\n  } else if (kind === 'mindmap') {\r\n    styleMindmap(svg, dark);\r\n  } else if (kind === 'journey') {\r\n    styleJourney(svg, dark);\r\n  } else if (kind === 'xychart') {\r\n    styleXychart(svg);\r\n  } else if (kind === 'quadrantChart') {\r\n    styleQuadrant(svg, dark);\r\n  }\r\n\r\n  // ORID 轉譯出來的就是一張 flowchart(aria-roledescription 也是 flowchart),\r\n  // 故不走上面的分派,改以類名偵測;必須排在通用節點 / 叢集 pass 之後才蓋得掉輪播配色。\r\n  styleOrid(svg, dark);\r\n}\r\n","// 手繪風(Sketch)後處理器。\n// Mermaid 原生 look:'handDrawn'(rough.js)只作用於走 unified renderer 的圖\n// (flowchart / state / class / ER / venn …);sequenceDiagram 使用獨立 renderer,\n// 設了 handDrawn 也毫無效果。本模組針對「已渲染完成的 sequence SVG」就地補上手繪質感:\n//   1) feTurbulence + feDisplacementMap 位移濾鏡 — 讓直線 / 方框抖動成手繪線條;\n//      因為位移的是 render 後的圖元而非字體,故對 CJK 文字同樣有效。\n//   2) 手寫風字體(Latin / 數字直接生效,CJK 自動 fallback 系統字)。\n//   3) pastel actor 標題 + slate ink 訊息線 + 便利貼 note,讓畫面更精緻。\n// 純 DOM 操作,僅瀏覽器端可用;非 sequence 圖直接略過並回傳 false,\n// 不影響 flowchart / ER 既有的原生 handDrawn 結果。\n\nexport interface SketchOptions {\n  dark?: boolean;\n  /** 位移濾鏡亂數種子,固定值可確保每次 render 的抖動一致(與 handDrawnSeed 對齊)。 */\n  seed?: number;\n}\n\ninterface PaletteEntry {\n  fill: string;\n  stroke: string;\n}\n\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst SKETCH_FILTER_ID = 'rsm-sketch-wobble';\nconst FONT_FACE_ID = 'rsm-sketch-fontface';\nconst DEFAULT_SEED = 42;\n\n// Excalidraw 招牌手寫字體 Virgil;CJK 用 Windows 內建 KaiTi(標楷體)\n// 補手寫筆刷感,最後回退 Comic Sans MS / cursive。\nexport const SKETCH_FONT = \"'Virgil', 'KaiTi', 'Comic Sans MS', cursive\";\n\n// 預設從本套件發佈在 jsDelivr 的 dist 取 Virgil;host 可用 ensureSketchFont(fontUrl) 覆寫\n// 成自家 /public 路徑或其他 CDN。載入失敗會靜默退回 fallback 字鏈,不阻斷渲染。\nexport const DEFAULT_VIRGIL_FONT_URL =\n  'https://cdn.jsdelivr.net/npm/react-super-mermaid/dist/Virgil.woff2';\n\n// actor 標題用的調色盤 — Excalidraw Open Color 元素底色 + 對應描邊。\nconst ACTOR_PALETTE: PaletteEntry[] = [\n  { fill: '#a5d8ff', stroke: '#1971c2' }, // blue\n  { fill: '#b2f2bb', stroke: '#2f9e44' }, // green\n  { fill: '#ffd8a8', stroke: '#e8590c' }, // orange\n  { fill: '#d0bfff', stroke: '#6741d9' }, // violet\n  { fill: '#99e9f2', stroke: '#0c8599' }, // cyan\n  { fill: '#ffc9c9', stroke: '#e03131' }, // red\n  { fill: '#ffec99', stroke: '#f08c00' }, // yellow\n  { fill: '#eebefa', stroke: '#9c36b5' }, // grape\n];\n\nconst NOTE_FILL = '#ffec99';\nconst NOTE_STROKE = '#f08c00';\n// Excalidraw 預設黑墨;落在彩色 / 便利貼底色上的文字一律用它,深淺色主題下都看得清楚。\nconst INK_DARK = '#1e1e1e';\n\n/** 是否為 sequenceDiagram 的 SVG(只有它需要本模組補手繪)。 */\nfunction isSequenceSvg(svg: Element): boolean {\n  return (\n    svg.getAttribute('aria-roledescription') === 'sequence' ||\n    svg.querySelector('.actor, .messageLine0, .actor-line') !== null\n  );\n}\n\n/** 建立(或重用)位移濾鏡:fractalNoise 噪聲驅動 feDisplacementMap,使線條呈手繪抖動。 */\nfunction ensureWobbleFilter(svg: Element, seed: number): void {\n  if (svg.querySelector(`#${SKETCH_FILTER_ID}`)) {\n    return;\n  }\n  let defs = svg.querySelector(':scope > defs');\n  if (!defs) {\n    defs = document.createElementNS(SVG_NS, 'defs');\n    svg.insertBefore(defs, svg.firstChild);\n  }\n  const filter = document.createElementNS(SVG_NS, 'filter');\n  filter.setAttribute('id', SKETCH_FILTER_ID);\n  // 濾鏡區域略為外擴,避免抖動位移把邊緣圖元裁掉。\n  filter.setAttribute('x', '-3%');\n  filter.setAttribute('y', '-3%');\n  filter.setAttribute('width', '106%');\n  filter.setAttribute('height', '106%');\n  const turbulence = document.createElementNS(SVG_NS, 'feTurbulence');\n  turbulence.setAttribute('type', 'fractalNoise');\n  turbulence.setAttribute('baseFrequency', '0.012');\n  turbulence.setAttribute('numOctaves', '2');\n  turbulence.setAttribute('seed', String(seed));\n  turbulence.setAttribute('result', 'noise');\n  const displace = document.createElementNS(SVG_NS, 'feDisplacementMap');\n  displace.setAttribute('in', 'SourceGraphic');\n  displace.setAttribute('in2', 'noise');\n  // 位移幅度:夠明顯能讀出手繪感,又不至於讓文字糊掉。\n  displace.setAttribute('scale', '2.2');\n  displace.setAttribute('xChannelSelector', 'R');\n  displace.setAttribute('yChannelSelector', 'G');\n  filter.appendChild(turbulence);\n  filter.appendChild(displace);\n  defs.appendChild(filter);\n}\n\n/** 把 svg 內所有圖元(defs / style 除外)包進一個套了位移濾鏡的群組。 */\nfunction wrapWithWobble(svg: SVGSVGElement): void {\n  if (svg.querySelector(':scope > g.rsm-sketch-layer')) {\n    return;\n  }\n  const layer = document.createElementNS(SVG_NS, 'g');\n  layer.setAttribute('class', 'rsm-sketch-layer');\n  layer.style.filter = `url(#${SKETCH_FILTER_ID})`;\n  const movable = Array.from(svg.childNodes).filter((node): node is Element => {\n    if (node.nodeType !== Node.ELEMENT_NODE) {\n      return false;\n    }\n    const tag = (node as Element).tagName.toLowerCase();\n    return tag !== 'defs' && tag !== 'style';\n  });\n  // 依原順序搬入,維持 z-order(背景 → 線 → 框 → 文字)。\n  for (const node of movable) {\n    layer.appendChild(node);\n  }\n  svg.appendChild(layer);\n}\n\n/** 套用手寫風字體到所有文字節點(<text> 與 htmlLabels 的 span/p 都涵蓋)。 */\nfunction applyHandwritingFont(svg: Element): void {\n  for (const text of Array.from(svg.querySelectorAll<SVGTextElement>('text, tspan'))) {\n    text.style.fontFamily = SKETCH_FONT;\n  }\n  for (const html of Array.from(\n    svg.querySelectorAll<HTMLElement>('.messageText, .noteText, .loopText, .labelText, span, p'),\n  )) {\n    html.style.fontFamily = SKETCH_FONT;\n  }\n}\n\n/** 依 actor 名稱分組上色:同一 actor 的頂 / 底方框共用同一個 pastel 色,label 文字轉深色。 */\nfunction colorizeActors(svg: Element): void {\n  const rects = Array.from(svg.querySelectorAll<SVGRectElement>('rect.actor'));\n  if (rects.length === 0) {\n    return;\n  }\n  const colorByName = new Map<string, PaletteEntry>();\n  let nextIndex = 0;\n  for (const rect of rects) {\n    const name = rect.getAttribute('name') ?? `#${nextIndex}`;\n    let entry = colorByName.get(name);\n    if (!entry) {\n      entry = ACTOR_PALETTE[nextIndex % ACTOR_PALETTE.length];\n      colorByName.set(name, entry);\n      nextIndex += 1;\n    }\n    rect.style.fill = entry.fill;\n    rect.style.stroke = entry.stroke;\n    rect.style.strokeWidth = '2px';\n    rect.setAttribute('rx', '8');\n    rect.setAttribute('ry', '8');\n    // label 文字與 rect 同在一個 <g> 內 → 把該群組的文字轉黑墨(彩色底色需深字)。\n    const group = rect.parentElement;\n    if (group) {\n      for (const text of Array.from(group.querySelectorAll<SVGTextElement>('text, tspan'))) {\n        text.style.fill = INK_DARK;\n      }\n    }\n  }\n}\n\n/** 便利貼風 note:Excalidraw 黃底 + 橘框 + 黑墨字。 */\nfunction colorizeNotes(svg: Element): void {\n  for (const note of Array.from(svg.querySelectorAll<SVGRectElement>('rect.note'))) {\n    note.style.fill = NOTE_FILL;\n    note.style.stroke = NOTE_STROKE;\n    note.style.strokeWidth = '1.8px';\n    note.setAttribute('rx', '6');\n    note.setAttribute('ry', '6');\n  }\n  for (const text of Array.from(svg.querySelectorAll<SVGTextElement>('.noteText, .noteText tspan'))) {\n    text.style.fill = INK_DARK;\n  }\n}\n\n/** 訊息線 / 生命線 / 迴圈框:統一成 Excalidraw 黑墨線條,端點圓潤。 */\nfunction styleLines(svg: Element, ink: string): void {\n  for (const line of Array.from(svg.querySelectorAll<SVGElement>('.messageLine0, .messageLine1'))) {\n    line.style.stroke = ink;\n    line.style.strokeWidth = '1.8px';\n    line.style.strokeLinecap = 'round';\n    line.style.strokeLinejoin = 'round';\n  }\n  for (const marker of Array.from(\n    svg.querySelectorAll<SVGElement>('marker path, .arrowhead, path.arrowMarkerPath'),\n  )) {\n    marker.style.fill = ink;\n    marker.style.stroke = ink;\n  }\n  // 生命線:更淡的虛線,退到背景。\n  for (const life of Array.from(svg.querySelectorAll<SVGElement>('.actor-line'))) {\n    life.style.stroke = ink;\n    life.style.strokeOpacity = '0.3';\n    life.style.strokeDasharray = '2 5';\n  }\n  // alt / opt / loop 外框 + 標籤(便利貼黃標籤,呼應 Excalidraw)\n  for (const loop of Array.from(svg.querySelectorAll<SVGElement>('.loopLine'))) {\n    loop.style.stroke = ink;\n    loop.style.strokeOpacity = '0.5';\n  }\n  for (const box of Array.from(svg.querySelectorAll<SVGElement>('polygon.labelBox'))) {\n    box.style.fill = NOTE_FILL;\n    box.style.stroke = ink;\n    box.style.strokeOpacity = '0.6';\n  }\n  for (const text of Array.from(\n    svg.querySelectorAll<SVGTextElement>('.messageText, .loopText, .labelText'),\n  )) {\n    text.style.fill = ink;\n  }\n}\n\n/**\n * 對已渲染的 mermaid SVG 套用手繪風(就地修改 DOM)。\n * 僅處理 sequenceDiagram;其他圖型回傳 false 由呼叫端維持原生 handDrawn 結果。\n */\nexport function sketchifyDiagram(root: ParentNode, opts: SketchOptions = {}): boolean {\n  const svg = root instanceof SVGSVGElement ? root : root.querySelector<SVGSVGElement>('svg');\n  if (!svg || !isSequenceSvg(svg)) {\n    return false;\n  }\n  // Excalidraw 黑墨;深色主題下退成淺墨,維持線條可讀。\n  const ink = opts.dark === true ? '#e9ecef' : INK_DARK;\n\n  // 先上色(此時圖元仍是 svg 的直接子節點,選擇器最單純),再包進抖動群組。\n  colorizeActors(svg);\n  colorizeNotes(svg);\n  styleLines(svg, ink);\n  applyHandwritingFont(svg);\n\n  ensureWobbleFilter(svg, opts.seed ?? DEFAULT_SEED);\n  wrapWithWobble(svg);\n  return true;\n}\n\n// 字體載入依 URL 快取,避免重複注入 / 重複等待;不同 URL 各自獨立。\nconst fontPromises = new Map<string, Promise<void>>();\n\n/**\n * 注入 Virgil 的 @font-face 並等待載入完成。\n * 必須在 mermaid.render 之前 await — 否則 mermaid 會用 fallback 字體量測文字寬度,\n * 導致換成 Virgil 後文字溢出方框。載入失敗時靜默退回 fallback 字體,不阻斷渲染。\n *\n * @param fontUrl Virgil woff2 的來源網址;省略則用 DEFAULT_VIRGIL_FONT_URL(jsDelivr)。\n */\nexport function ensureSketchFont(fontUrl: string = DEFAULT_VIRGIL_FONT_URL): Promise<void> {\n  if (typeof document === 'undefined') {\n    return Promise.resolve();\n  }\n  const cached = fontPromises.get(fontUrl);\n  if (cached) {\n    return cached;\n  }\n  const promise = (async () => {\n    const styleId = `${FONT_FACE_ID}-${hashUrl(fontUrl)}`;\n    if (!document.getElementById(styleId)) {\n      const style = document.createElement('style');\n      style.id = styleId;\n      style.textContent =\n        `@font-face{font-family:'Virgil';` +\n        `src:url(\"${fontUrl}\") format('woff2');font-display:swap;}`;\n      document.head.appendChild(style);\n    }\n    try {\n      await document.fonts.load(\"16px 'Virgil'\");\n    } catch {\n      // 字體載入失敗 → 沿用 fallback(KaiTi / Comic Sans),不中斷流程。\n    }\n  })();\n  fontPromises.set(fontUrl, promise);\n  return promise;\n}\n\n/** 把 URL 壓成短雜湊,當 <style> 的 id 後綴(允許多來源並存)。 */\nfunction hashUrl(url: string): string {\n  let hash = 0;\n  for (let i = 0; i < url.length; i += 1) {\n    hash = (hash * 31 + url.charCodeAt(i)) | 0;\n  }\n  return (hash >>> 0).toString(36);\n}\n","// 套件內建樣式(無 Tailwind),由 ensure-styles 一次性注入 <head>。\r\n// 全部 scope 在 .rsm-root 之下,避免污染 host 頁面;顏色用 CSS 變數,host 可覆寫。\r\n\r\nexport const RSM_STYLE_ID = 'react-super-mermaid-styles';\r\n\r\nexport const RSM_CSS = `\r\n.rsm-root {\r\n  --rsm-border: #e5e7eb;\r\n  --rsm-fg: #374151;\r\n  --rsm-muted: #6b7280;\r\n  --rsm-accent: #2563eb;\r\n  --rsm-hover: #f3f4f6;\r\n  --rsm-surface: #ffffff;\r\n  /* --rsm-paper = 畫布底色,對齊 VS Code 擴充套件的 editor-background(亮)。 */\r\n  --rsm-paper: #ffffff;\r\n  --rsm-canvas-bg: transparent;\r\n  /* 點陣格線:對齊 VS Code 的 color-mix(foreground 9%) 公式。 */\r\n  --rsm-grid-dot: color-mix(in srgb, var(--rsm-fg) 9%, transparent);\r\n  /* 網格線:比網點再淡一點,避免線條搶過圖表。 */\r\n  --rsm-grid-line: color-mix(in srgb, var(--rsm-fg) 7%, transparent);\r\n  --rsm-radius: 8px;\r\n  display: flex;\r\n  flex-direction: column;\r\n  height: 100%;\r\n  width: 100%;\r\n  box-sizing: border-box;\r\n  border: 1px solid var(--rsm-border);\r\n  border-radius: var(--rsm-radius);\r\n  background: var(--rsm-surface);\r\n  color: var(--rsm-fg);\r\n  font-family: ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif;\r\n  overflow: hidden;\r\n}\r\n.rsm-root *, .rsm-root *::before, .rsm-root *::after { box-sizing: border-box; }\r\n\r\n.rsm-toolbar {\r\n  display: flex;\r\n  flex-wrap: wrap;\r\n  align-items: center;\r\n  gap: 8px;\r\n  padding: 8px 10px;\r\n  border-bottom: 1px solid var(--rsm-border);\r\n}\r\n.rsm-toolbar-spacer { margin-left: auto; }\r\n.rsm-toolbar-group { display: inline-flex; align-items: center; gap: 6px; }\r\n\r\n.rsm-label { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; color: var(--rsm-muted); }\r\n\r\n.rsm-select {\r\n  border: 1px solid var(--rsm-border);\r\n  background: var(--rsm-surface);\r\n  color: var(--rsm-fg);\r\n  border-radius: 6px;\r\n  padding: 4px 8px;\r\n  font-size: 13px;\r\n  cursor: pointer;\r\n}\r\n.rsm-select:focus { outline: none; border-color: var(--rsm-accent); }\r\n\r\n.rsm-btn {\r\n  display: inline-flex;\r\n  align-items: center;\r\n  gap: 4px;\r\n  border: 1px solid var(--rsm-border);\r\n  background: var(--rsm-surface);\r\n  color: var(--rsm-fg);\r\n  border-radius: 6px;\r\n  padding: 4px 10px;\r\n  font-size: 13px;\r\n  line-height: 1.4;\r\n  cursor: pointer;\r\n  transition: background 0.12s ease, border-color 0.12s ease, color 0.12s ease;\r\n}\r\n.rsm-btn:hover { background: var(--rsm-hover); }\r\n.rsm-btn[aria-pressed=\"true\"] {\r\n  border-color: var(--rsm-accent);\r\n  color: var(--rsm-accent);\r\n  background: color-mix(in srgb, var(--rsm-accent) 10%, transparent);\r\n}\r\n.rsm-btn:disabled { opacity: 0.6; cursor: default; }\r\n\r\n/* 工具列控制項高度一致(樣式下拉 / 一般鈕 / 縮放群 / 背景鈕),避免高低不齊。 */\r\n.rsm-toolbar .rsm-btn,\r\n.rsm-toolbar .rsm-select,\r\n.rsm-toolbar .rsm-zoom { min-height: 30px; }\r\n.rsm-toolbar .rsm-btn,\r\n.rsm-toolbar .rsm-select { align-items: center; }\r\n.rsm-toolbar .rsm-zoom > button { display: inline-flex; align-items: center; justify-content: center; }\r\n\r\n.rsm-zoom {\r\n  display: inline-flex;\r\n  align-items: stretch;\r\n  border: 1px solid var(--rsm-border);\r\n  border-radius: 6px;\r\n  overflow: hidden;\r\n}\r\n.rsm-zoom > button {\r\n  border: 0;\r\n  background: var(--rsm-surface);\r\n  color: var(--rsm-fg);\r\n  padding: 4px 10px;\r\n  font-size: 13px;\r\n  cursor: pointer;\r\n}\r\n.rsm-zoom > button:hover { background: var(--rsm-hover); }\r\n.rsm-zoom > button + button { border-left: 1px solid var(--rsm-border); }\r\n.rsm-zoom-percent { min-width: 52px; text-align: center; font-variant-numeric: tabular-nums; font-size: 12px; }\r\n\r\n.rsm-searchbar {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 8px;\r\n  padding: 8px 10px;\r\n  border-bottom: 1px solid var(--rsm-border);\r\n  background: var(--rsm-hover);\r\n}\r\n.rsm-input {\r\n  flex: 0 1 320px;\r\n  border: 1px solid var(--rsm-border);\r\n  background: var(--rsm-surface);\r\n  color: var(--rsm-fg);\r\n  border-radius: 6px;\r\n  padding: 5px 10px;\r\n  font-size: 13px;\r\n}\r\n.rsm-input:focus { outline: none; border-color: var(--rsm-accent); }\r\n.rsm-count { min-width: 48px; font-size: 12px; color: var(--rsm-muted); font-variant-numeric: tabular-nums; }\r\n.rsm-searchbar-spacer { margin-left: auto; }\r\n\r\n.rsm-canvas {\r\n  position: relative;\r\n  flex: 1 1 auto;\r\n  min-height: 0;\r\n  overflow: hidden;\r\n  /* 底色由 --rsm-canvas-bg 控制(預設透明,跟隨頁面);圖樣疊在其上(background-image)。 */\r\n  background-color: var(--rsm-canvas-bg, transparent);\r\n}\r\n.rsm-stage { width: 100%; height: 100%; }\r\n/* touch-action 決定觸控手勢歸誰:行內讓單指捲動頁面(pan-y),雙指捏合縮放交給本套件;\r\n * 全螢幕(下方覆寫成 none)則單指平移、雙指縮放全由套件接管。 */\r\n.rsm-canvas { touch-action: pan-y; }\r\n.rsm-root svg { cursor: grab; user-select: none; touch-action: pan-y; }\r\n.rsm-root svg.rsm-grabbing { cursor: grabbing; }\r\n.rsm-root.rsm-fullscreen .rsm-canvas,\r\n.rsm-root.rsm-fullscreen svg { touch-action: none; }\r\n\r\n.rsm-overlay {\r\n  position: absolute;\r\n  inset: 0;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  padding: 0 16px;\r\n  text-align: center;\r\n  font-size: 13px;\r\n  color: var(--rsm-muted);\r\n  pointer-events: none;\r\n}\r\n.rsm-overlay.rsm-error { color: #dc2626; }\r\n\r\n/* 搜尋:命中以外的節點變暗,當前命中加暖色光暈。 */\r\n.rsm-root .rsm-dim { opacity: 0.22; transition: opacity 0.15s ease; }\r\n.rsm-root .rsm-hit { filter: drop-shadow(0 0 5px #f59e0b) drop-shadow(0 0 1.5px #f59e0b); }\r\n\r\n/* ── 節點懸停提示(tips)──\r\n * 一顆跟著游標走的 HTML tooltip,絕對定位在 .rsm-canvas 內。\r\n * pointer-events:none:它永遠不擋 svg-pan-zoom 的拖曳,也不會自己觸發 hover 抖動。 */\r\n.rsm-tip {\r\n  position: absolute;\r\n  z-index: 30;\r\n  max-width: min(340px, calc(100% - 16px));\r\n  padding: 8px 11px;\r\n  border: 1px solid var(--rsm-border);\r\n  border-radius: 8px;\r\n  background: var(--rsm-surface);\r\n  color: var(--rsm-fg);\r\n  font-size: 12.5px;\r\n  line-height: 1.55;\r\n  box-shadow: 0 6px 20px rgba(15, 23, 42, 0.16);\r\n  pointer-events: none;\r\n  opacity: 0;\r\n  transform: translateY(2px);\r\n  transition: opacity 0.12s ease, transform 0.12s ease;\r\n  overflow-wrap: break-word;\r\n}\r\n.rsm-tip.rsm-tip-visible { opacity: 1; transform: none; }\r\n.rsm-tip-title { font-weight: 600; font-size: 12px; }\r\n.rsm-tip-title + .rsm-tip-body { margin-top: 3px; }\r\n.rsm-tip-body { color: var(--rsm-muted); white-space: pre-line; }\r\n.rsm-root.rsm-dark .rsm-tip { box-shadow: 0 6px 20px rgba(0, 0, 0, 0.5); }\r\n\r\n/* ── 檢查提示(checks)──\r\n * 角標是 SVG 元素、掛在節點的 <g> 內(繼承 transform,跟著 pan/zoom 走,也會進匯出);\r\n * 卡片 / 跳窗 / 清單是 HTML,絕對定位在 .rsm-canvas 內。\r\n * 對焦用獨立的 rsm-check-focus,不與搜尋的 rsm-hit / rsm-dim 共用,否則兩套高亮會互相蓋掉。 */\r\n.rsm-root {\r\n  --rsm-check-info: #2563eb;\r\n  --rsm-check-warn: #d97706;\r\n  --rsm-check-error: #dc2626;\r\n}\r\n.rsm-root.rsm-dark {\r\n  --rsm-check-info: #60a5fa;\r\n  --rsm-check-warn: #fbbf24;\r\n  --rsm-check-error: #f87171;\r\n}\r\n\r\n/* 角標的「上色」規則不在這裡 —— 它們由 annotateChecks 注入到 SVG 內部,才能跟著匯出走\r\n * (見 core/checks/annotate.ts 的 BADGE_CSS)。這裡只留純互動、不需要跟著匯出的部分。 */\r\n.rsm-root .rsm-check-badge { cursor: pointer; }\r\n/* 拿掉預設 outline(SVG 上的方框很醜),但 :focus-visible 必須換一個看得見的替代品 ——\r\n * 只靠透明度變化,鍵盤使用者根本認不出焦點在哪一顆。 */\r\n.rsm-root .rsm-check-badge:focus { outline: none; }\r\n.rsm-root .rsm-check-badge:focus-visible .rsm-check-badge-hit {\r\n  fill: none !important;\r\n  stroke: var(--rsm-accent) !important;\r\n  stroke-width: 2px !important;\r\n}\r\n.rsm-root .rsm-check-badge .rsm-check-badge-bg { transition: opacity 0.12s ease; }\r\n.rsm-root .rsm-check-badge .rsm-check-badge-text { pointer-events: none; }\r\n.rsm-root .rsm-check-badge:hover .rsm-check-badge-bg,\r\n.rsm-root .rsm-check-badge:focus-visible .rsm-check-badge-bg { opacity: 0.75; }\r\n\r\n/* 有提示的節點:淡淡的光暈,讓人知道這裡可以點。對焦時加強。 */\r\n.rsm-root .rsm-has-check-info { filter: drop-shadow(0 0 2px var(--rsm-check-info)); }\r\n.rsm-root .rsm-has-check-warn { filter: drop-shadow(0 0 2px var(--rsm-check-warn)); }\r\n.rsm-root .rsm-has-check-error { filter: drop-shadow(0 0 2px var(--rsm-check-error)); }\r\n.rsm-root .rsm-check-hidden { filter: none; }\r\n.rsm-root .rsm-check-focus {\r\n  filter: drop-shadow(0 0 6px var(--rsm-accent)) drop-shadow(0 0 2px var(--rsm-accent));\r\n}\r\n\r\n/* 跳窗:貼在角標旁,內容過長時自身捲動(不撐破畫布)。 */\r\n.rsm-check-pop {\r\n  position: absolute;\r\n  z-index: 20;\r\n  width: min(420px, calc(100% - 16px));\r\n  max-height: calc(100% - 16px);\r\n  display: flex;\r\n  flex-direction: column;\r\n  border: 1px solid var(--rsm-border);\r\n  border-radius: var(--rsm-radius);\r\n  background: var(--rsm-surface);\r\n  box-shadow: 0 8px 28px rgba(15, 23, 42, 0.18);\r\n}\r\n.rsm-check-pop-head,\r\n.rsm-check-list-head {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 8px;\r\n  padding: 8px 10px;\r\n  border-bottom: 1px solid var(--rsm-border);\r\n}\r\n.rsm-check-pop-count,\r\n.rsm-check-list-title { font-size: 12px; font-weight: 600; color: var(--rsm-muted); }\r\n.rsm-check-pop-head > .rsm-btn,\r\n.rsm-check-list-head > .rsm-btn { margin-left: auto; }\r\n.rsm-check-pop:focus { outline: none; }\r\n.rsm-check-pop-body,\r\n.rsm-check-list-body { overflow: auto; padding: 10px; display: grid; gap: 12px; }\r\n/* 複製失敗要看得出來 —— 靜默無反應會讓人以為工具壞了。 */\r\n.rsm-check-copy-failed { color: var(--rsm-check-error); border-color: var(--rsm-check-error); }\r\n\r\n/* 側邊清單:停在畫布右緣,窄螢幕時佔滿寬度。 */\r\n.rsm-check-list {\r\n  position: absolute;\r\n  top: 0;\r\n  right: 0;\r\n  bottom: 0;\r\n  z-index: 15;\r\n  width: min(360px, 100%);\r\n  display: flex;\r\n  flex-direction: column;\r\n  border-left: 1px solid var(--rsm-border);\r\n  background: var(--rsm-surface);\r\n  box-shadow: -6px 0 18px rgba(15, 23, 42, 0.12);\r\n}\r\n.rsm-check-list-item {\r\n  display: grid;\r\n  gap: 8px;\r\n  padding-bottom: 12px;\r\n  border-bottom: 1px dashed var(--rsm-border);\r\n}\r\n.rsm-check-list-item:last-child { border-bottom: 0; padding-bottom: 0; }\r\n.rsm-check-list-item.rsm-selected { outline: 2px solid var(--rsm-accent); outline-offset: 4px; }\r\n.rsm-check-list-jump {\r\n  justify-self: start;\r\n  border: 1px solid var(--rsm-border);\r\n  background: var(--rsm-surface);\r\n  color: var(--rsm-accent);\r\n  border-radius: 6px;\r\n  padding: 2px 8px;\r\n  font-size: 12px;\r\n  cursor: pointer;\r\n}\r\n.rsm-check-list-jump:hover { background: var(--rsm-hover); }\r\n.rsm-check-empty { margin: 0; font-size: 13px; color: var(--rsm-muted); }\r\n\r\n/* 卡片內容 */\r\n.rsm-check-card { display: grid; gap: 8px; font-size: 13px; line-height: 1.55; }\r\n.rsm-check-card-head { display: flex; align-items: baseline; gap: 8px; }\r\n.rsm-check-title { font-weight: 700; }\r\n.rsm-check-chip {\r\n  flex: none;\r\n  border-radius: 999px;\r\n  padding: 1px 8px;\r\n  font-size: 11px;\r\n  font-weight: 700;\r\n  color: #ffffff;\r\n  background: var(--rsm-check-info);\r\n}\r\n.rsm-check-chip.rsm-check-warn { background: var(--rsm-check-warn); }\r\n.rsm-check-chip.rsm-check-error { background: var(--rsm-check-error); }\r\n.rsm-check-desc { margin: 0; color: var(--rsm-fg); }\r\n.rsm-check-steps { margin: 0; padding-left: 20px; display: grid; gap: 3px; }\r\n\r\n.rsm-check-snippet { border: 1px solid var(--rsm-border); border-radius: 6px; overflow: hidden; }\r\n.rsm-check-snippet-head {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 8px;\r\n  padding: 4px 6px 4px 10px;\r\n  background: var(--rsm-hover);\r\n}\r\n.rsm-check-lang {\r\n  font-size: 11px;\r\n  font-weight: 700;\r\n  text-transform: uppercase;\r\n  letter-spacing: 0.04em;\r\n  color: var(--rsm-muted);\r\n}\r\n.rsm-check-snippet-head .rsm-check-copy { margin-left: auto; padding: 2px 8px; font-size: 12px; }\r\n.rsm-check-code {\r\n  margin: 0;\r\n  padding: 8px 10px;\r\n  overflow-x: auto;\r\n  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\r\n  font-size: 12px;\r\n  line-height: 1.5;\r\n  white-space: pre;\r\n  color: var(--rsm-fg);\r\n}\r\n.rsm-check-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }\r\n.rsm-check-elk { display: inline-flex; align-items: center; gap: 6px; }\r\n.rsm-check-elk-error { font-size: 12px; color: var(--rsm-check-error); }\r\n.rsm-check-link,\r\n.rsm-check-elk-link { text-decoration: none; }\r\n\r\n.rsm-root.rsm-dark {\r\n  /* 暗色面板對齊 VS Code Dark+ / Dark Modern 的中性灰(非藍調)。 */\r\n  --rsm-border: #3c3c3c;\r\n  --rsm-fg: #cccccc;\r\n  --rsm-muted: #9d9d9d;\r\n  --rsm-accent: #3794ff;\r\n  --rsm-hover: #2a2d2e;\r\n  --rsm-surface: #252526;\r\n  /* 畫布底色 = VS Code editor-background(暗);grid-dot 由 --rsm-fg 9% 自動推導。 */\r\n  --rsm-paper: #1e1e1e;\r\n}\r\n\r\n/* ── 背景 ── 底色 + 疊加圖樣,兩者獨立。\r\n * 底色:--rsm-canvas-bg(由色票 / 自訂色 inline 覆寫;未設 = 透明跟隨頁面)。\r\n * 圖樣:.rsm-pattern-dots(網點) / .rsm-pattern-grid(網格線),疊在底色之上。 */\r\n.rsm-root.rsm-pattern-dots .rsm-canvas {\r\n  background-image: radial-gradient(var(--rsm-grid-dot) 1px, transparent 1px);\r\n  background-size: 18px 18px;\r\n  background-position: -9px -9px;\r\n}\r\n.rsm-root.rsm-pattern-grid .rsm-canvas {\r\n  background-image:\r\n    linear-gradient(to right, var(--rsm-grid-line) 1px, transparent 1px),\r\n    linear-gradient(to bottom, var(--rsm-grid-line) 1px, transparent 1px);\r\n  background-size: 22px 22px;\r\n  background-position: -1px -1px;\r\n}\r\n\r\n/* ── 背景選擇器(toolbar 內的色井按鈕 + 彈出面板)── */\r\n.rsm-bg { position: relative; display: inline-flex; }\r\n\r\n/* 觸發鈕左側的「色井」:反映目前底色;透明 / 預設時畫一道斜線表示「不覆寫」。 */\r\n.rsm-bg-well {\r\n  width: 16px;\r\n  height: 16px;\r\n  border-radius: 4px;\r\n  border: 1px solid color-mix(in srgb, var(--rsm-fg) 28%, transparent);\r\n  background-color: var(--rsm-well-color, transparent);\r\n}\r\n.rsm-bg-well[data-empty=\"true\"] {\r\n  background-color: var(--rsm-surface);\r\n  background-image: linear-gradient(\r\n    to top right,\r\n    transparent calc(50% - 1px),\r\n    #ef4444 calc(50% - 1px),\r\n    #ef4444 calc(50% + 1px),\r\n    transparent calc(50% + 1px)\r\n  );\r\n}\r\n\r\n/* 彈出面板:卡片式、輕陰影、淡入。 */\r\n.rsm-bg-pop {\r\n  position: absolute;\r\n  top: calc(100% + 8px);\r\n  left: 0;\r\n  z-index: 50;\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 12px;\r\n  padding: 12px;\r\n  min-width: 260px;\r\n  border: 1px solid var(--rsm-border);\r\n  border-radius: 12px;\r\n  background: var(--rsm-surface);\r\n  color: var(--rsm-fg);\r\n  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.16), 0 2px 6px rgba(0, 0, 0, 0.08);\r\n  animation: rsm-pop-in 0.13s ease-out;\r\n}\r\n@keyframes rsm-pop-in {\r\n  from { opacity: 0; transform: translateY(-5px); }\r\n  to { opacity: 1; transform: none; }\r\n}\r\n.rsm-bg-section { display: flex; flex-direction: column; gap: 8px; }\r\n.rsm-bg-section-label {\r\n  font-size: 11px;\r\n  font-weight: 600;\r\n  letter-spacing: 0.03em;\r\n  color: var(--rsm-muted);\r\n}\r\n.rsm-bg-swatches { display: flex; flex-wrap: wrap; gap: 8px; }\r\n\r\n/* 色票:圓角小方塊;選中加同色外環。 */\r\n.rsm-swatch {\r\n  position: relative;\r\n  width: 26px;\r\n  height: 26px;\r\n  padding: 0;\r\n  border: 1px solid color-mix(in srgb, var(--rsm-fg) 16%, transparent);\r\n  border-radius: 7px;\r\n  cursor: pointer;\r\n  transition: transform 0.1s ease, box-shadow 0.1s ease;\r\n}\r\n.rsm-swatch:hover { transform: scale(1.12); }\r\n.rsm-swatch:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--rsm-accent); }\r\n.rsm-swatch.rsm-selected { outline: 2px solid var(--rsm-accent); outline-offset: 2px; }\r\n.rsm-swatch[data-empty=\"true\"] {\r\n  background-color: var(--rsm-surface);\r\n  background-image: linear-gradient(\r\n    to top right,\r\n    transparent calc(50% - 1px),\r\n    #ef4444 calc(50% - 1px),\r\n    #ef4444 calc(50% + 1px),\r\n    transparent calc(50% + 1px)\r\n  );\r\n}\r\n\r\n/* 自訂色票:覆一個隱形的原生 color input,未選時顯示 🎨。 */\r\n.rsm-swatch-custom {\r\n  display: inline-flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  overflow: hidden;\r\n  background:\r\n    conic-gradient(from 180deg, #f87171, #fbbf24, #34d399, #60a5fa, #a78bfa, #f87171);\r\n}\r\n.rsm-swatch-custom.rsm-has-color { background: none; }\r\n.rsm-swatch-custom input[type=\"color\"] {\r\n  position: absolute;\r\n  inset: 0;\r\n  width: 100%;\r\n  height: 100%;\r\n  margin: 0;\r\n  padding: 0;\r\n  border: 0;\r\n  opacity: 0;\r\n  cursor: pointer;\r\n}\r\n.rsm-swatch-custom-icon {\r\n  font-size: 12px;\r\n  line-height: 1;\r\n  pointer-events: none;\r\n  filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.35));\r\n}\r\n\r\n/* 圖樣切換:分段式按鈕(無 / 網點 / 網格)。 */\r\n.rsm-seg {\r\n  display: inline-flex;\r\n  align-self: flex-start;\r\n  border: 1px solid var(--rsm-border);\r\n  border-radius: 8px;\r\n  overflow: hidden;\r\n}\r\n.rsm-seg > button {\r\n  flex: 1 1 0;\r\n  min-width: 58px;\r\n  display: inline-flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  gap: 5px;\r\n  border: 0;\r\n  background: var(--rsm-surface);\r\n  color: var(--rsm-fg);\r\n  padding: 6px 11px;\r\n  font-size: 12px;\r\n  line-height: 1.3;\r\n  white-space: nowrap;\r\n  cursor: pointer;\r\n  transition: background 0.1s ease, color 0.1s ease;\r\n}\r\n.rsm-seg > button + button { border-left: 1px solid var(--rsm-border); }\r\n.rsm-seg > button:hover { background: var(--rsm-hover); }\r\n.rsm-seg > button[aria-pressed=\"true\"] {\r\n  background: color-mix(in srgb, var(--rsm-accent) 14%, transparent);\r\n  color: var(--rsm-accent);\r\n  font-weight: 600;\r\n}\r\n.rsm-seg-glyph { font-size: 13px; line-height: 1; }\r\n\r\n/* ── 全螢幕跳窗 ── position:fixed 覆蓋整個視窗,RWD 友善。 */\r\n.rsm-root.rsm-fullscreen {\r\n  position: fixed;\r\n  inset: 0;\r\n  width: 100vw;\r\n  width: 100dvw;\r\n  height: 100vh;\r\n  height: 100dvh;\r\n  max-width: 100vw;\r\n  max-height: 100dvh;\r\n  margin: 0;\r\n  z-index: 2147483000;\r\n  border: 0;\r\n  border-radius: 0;\r\n  animation: rsm-fs-in 0.16s ease-out;\r\n}\r\n@keyframes rsm-fs-in {\r\n  from { opacity: 0; }\r\n  to { opacity: 1; }\r\n}\r\n\r\n/* 全螢幕右上角的離開鈕(toolbar 隱藏時也能關閉)。 */\r\n.rsm-fs-close {\r\n  position: absolute;\r\n  top: 10px;\r\n  right: 10px;\r\n  z-index: 5;\r\n  display: inline-flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  width: 34px;\r\n  height: 34px;\r\n  padding: 0;\r\n  font-size: 16px;\r\n  line-height: 1;\r\n  border: 1px solid var(--rsm-border);\r\n  border-radius: 8px;\r\n  background: var(--rsm-surface);\r\n  color: var(--rsm-fg);\r\n  cursor: pointer;\r\n  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.18);\r\n  transition: background 0.12s ease, color 0.12s ease;\r\n}\r\n.rsm-fs-close:hover { background: var(--rsm-hover); }\r\n\r\n/* ── RWD ── 小螢幕收緊 toolbar、縮短搜尋框,避免換行擠壓畫布。 */\r\n@media (max-width: 640px) {\r\n  .rsm-toolbar { gap: 6px; padding: 6px 8px; }\r\n  .rsm-btn { padding: 4px 8px; font-size: 12px; }\r\n  .rsm-label { font-size: 11px; }\r\n  .rsm-select { padding: 3px 6px; font-size: 12px; }\r\n  .rsm-zoom > button { padding: 4px 8px; font-size: 12px; }\r\n  .rsm-input { flex-basis: 150px; }\r\n  /* 換行時 margin-left:auto 會把後段鈕推到右邊、留下一大塊空白(看起來「排太空」)。\r\n   * 小螢幕關掉這個推擠,讓所有控制項由左到右等距緊湊排列、自然換行。 */\r\n  .rsm-toolbar-spacer { display: none; }\r\n}\r\n\r\n/* ── 標籤字重(量測階段就生效)──\r\n * boostLegibility 在「渲染後」才把標籤字重加到 600/700,但 mermaid 是在「渲染中」\r\n * 量測文字寬度來決定 foreignObject / 節點外框的大小。若只在事後加粗,粗體字會比已量好的\r\n * 框更寬 → foreignObject 把尾字裁掉(心智圖節點「react-super-mermaid」尾巴的 d 不見就是這個)。\r\n * 解法:把同樣的字重用 CSS 提前宣告,且「不」scope 在 .rsm-root 之下,而是 scope 在 mermaid\r\n * 的渲染 id(svg[id^=\"rsm-\"])——因為量測時那顆暫時的 svg 還在 <body> 下、尚未掛進 .rsm-root。\r\n * 這樣 mermaid 量到的就是粗體寬度,框會剛好容納,事後 boostLegibility 設同值不再撐破。\r\n * 只 scope 我們自己渲染出的 svg,故不會污染 host 頁面其它 mermaid。 */\r\nsvg[id^=\"rsm-\"] g.node text,\r\nsvg[id^=\"rsm-\"] g.node tspan,\r\nsvg[id^=\"rsm-\"] g.node .nodeLabel,\r\nsvg[id^=\"rsm-\"] g.mindmap-node text,\r\nsvg[id^=\"rsm-\"] g.mindmap-node .nodeLabel,\r\nsvg[id^=\"rsm-\"] g[class*=\"timeline-node\"] text,\r\nsvg[id^=\"rsm-\"] text.actor { font-weight: 600 !important; }\r\nsvg[id^=\"rsm-\"] .cluster-label text,\r\nsvg[id^=\"rsm-\"] .cluster-label .nodeLabel,\r\nsvg[id^=\"rsm-\"] text.pieTitleText { font-weight: 700 !important; }\r\n\r\n/* ── HTML 標籤不裁字(量測階段就生效)──\r\n * mermaid 對 htmlLabels 的量測 div 會硬上 inline 的 max-width:200px(flowchart.wrappingWidth)+\r\n * white-space:nowrap,量到頂時本該以 bbox.width === width 的「嚴格相等」切成自動換行——但在\r\n * 非整數 DPI(如 Windows 125%/150% 縮放)下 getBoundingClientRect 回傳 200.00003…,相等判斷\r\n * 永遠不成立 → 標籤停在 nowrap 又被 200px 上限卡住,節點框只開 200px,尾字整段被裁掉。\r\n * 解法:用 !important 蓋掉 inline max-width,讓量測直接得到整行真實寬度,節點框剛好容納 →\r\n * 文字完整呈現。代價是放棄 200px 自動換行(行寬交給圖源的 <br> 控制),對檢視器是正確取捨。\r\n * 與上方字重規則同理 scope 在 svg[id^=\"rsm-\"],量測時暫掛 <body> 下也吃得到,且不污染 host。 */\r\nsvg[id^=\"rsm-\"] foreignObject > div { max-width: none !important; }\r\n\r\n/* ── HTML 標籤不吃 host 的閱讀排版(量測階段就生效)──\r\n * mermaid 量測 htmlLabels 時,是把一顆暫時的 svg 掛在 <body> 底下量,量完把結果「寫死」進\r\n * <foreignObject width/height>。等圖真的掛進 host 容器後,容器自己的排版才開始作用 —— 部落格\r\n * 文章、文件網站、Notion 風格頁面幾乎都會對 <p> 下 line-height / letter-spacing(例如\r\n * #article p { line-height: 1.9; letter-spacing: .01em }),而 mermaid 11 的節點標籤內層正好\r\n * 就是 <p>(div > span.nodeLabel > p)。於是同一段文字在框裡變得又高又寬:量到 96x48 的標籤\r\n * 實際畫出來是 96x91(行高 +27%、字距把字推到多折一行),下緣直接被節點框裁掉。\r\n * 解法:跟上面兩條同理,把所有「會改變行框尺寸」的可繼承屬性 scope 在 svg[id^=\"rsm-\"] 上釘死。\r\n * 量測時(暫掛 <body>)與掛進 host 後吃到的是同一組值 → 量到的框永遠等於畫出來的字。\r\n * !important 不可省:host 常用 id 選擇器(如 #single-entry-content p),純 class 打不贏;\r\n * 同理 host 端加 .not-prose 也沒用 —— 那只關得掉 tailwind typography,關不掉 host 自己的規則。\r\n * 只放行 padding/margin 給 <p>(edge label 的 .labelBkg 靠 padding 撐底色,不能一起清掉)。 */\r\nsvg[id^=\"rsm-\"] foreignObject div,\r\nsvg[id^=\"rsm-\"] foreignObject span,\r\nsvg[id^=\"rsm-\"] foreignObject p {\r\n  line-height: 1.5 !important;\r\n  letter-spacing: normal !important;\r\n  word-spacing: normal !important;\r\n  text-indent: 0 !important;\r\n  text-transform: none !important;\r\n  text-wrap: wrap !important;\r\n  overflow-wrap: normal !important;\r\n  word-break: normal !important;\r\n}\r\nsvg[id^=\"rsm-\"] foreignObject p { margin: 0 !important; padding: 0 !important; }\r\n`;\r\n","// 一次性把套件內建 CSS 注入 <head>(以 id 去重)。SSR 安全:非瀏覽器直接略過。\r\n\r\nimport { RSM_CSS, RSM_STYLE_ID } from './styles.css';\r\n\r\nexport function ensureStyles(): void {\r\n  if (typeof document === 'undefined') {\r\n    return;\r\n  }\r\n  const existing = document.getElementById(RSM_STYLE_ID) as HTMLStyleElement | null;\r\n  if (existing) {\r\n    // 已注入過:若內容過時(版本升級 / HMR 換 bundle),就刷新——否則舊 CSS 會卡住,\r\n    // 新元件 markup 配舊樣式 → 例如背景彈窗變成行內排版而非浮層。比對成本低(字串相等)。\r\n    if (existing.textContent !== RSM_CSS) {\r\n      existing.textContent = RSM_CSS;\r\n    }\r\n    return;\r\n  }\r\n  const style = document.createElement('style');\r\n  style.id = RSM_STYLE_ID;\r\n  style.textContent = RSM_CSS;\r\n  document.head.appendChild(style);\r\n}\r\n","// 把對外的 MermaidTheme 對映成「mermaid base theme + look + 後處理種類」。\n\nimport type { MermaidBaseTheme, MermaidTheme } from '../types';\n\nexport type PostProcess = 'colorful' | 'sketch' | 'none';\n\nexport interface ResolvedTheme {\n  base: MermaidBaseTheme;\n  look: 'classic' | 'handDrawn';\n  postProcess: PostProcess;\n}\n\nexport function resolveTheme(theme: MermaidTheme, dark: boolean): ResolvedTheme {\n  // colorful / sketch / auto 都以 default|dark base 渲染,colorful/sketch 之後再後處理。\n  if (theme === 'colorful') {\n    return { base: dark ? 'dark' : 'default', look: 'classic', postProcess: 'colorful' };\n  }\n  if (theme === 'sketch') {\n    return { base: dark ? 'dark' : 'default', look: 'handDrawn', postProcess: 'sketch' };\n  }\n  if (theme === 'auto') {\n    return { base: dark ? 'dark' : 'default', look: 'classic', postProcess: 'none' };\n  }\n  // default / dark / neutral / forest:原生主題直接套用。\n  return { base: theme, look: 'classic', postProcess: 'none' };\n}\n","// 渲染管線(框架無關),供 React hook 與一次性 renderDiagram() 共用。\r\n// 順序:ensureStyles → resolveTheme →(sketch 先載字)→ initialize → render → 後處理。\r\n\r\nimport { assertBrowser } from '../env';\r\nimport type { MermaidLike, MermaidTheme, RenderDiagramOptions, RenderResult } from '../types';\r\nimport { stripCheckDirectives } from './checks/parse';\r\nimport { transpileOrid } from './orid/transpile';\r\nimport { stripTipDirectives } from './tips/parse';\r\nimport { boostLegibility, colorizeDiagram } from './themes/colorize';\r\nimport { ensureSketchFont, SKETCH_FONT, sketchifyDiagram } from './themes/sketch';\r\nimport { ensureStyles } from './ensure-styles';\r\nimport { loadMermaid } from './load-mermaid';\r\nimport { resolveTheme, type PostProcess } from './resolve-theme';\r\n\r\n// mermaid.render 需要唯一且合法的 id,用模組級流水號確保不衝突(無 DOM,SSR 安全)。\r\nlet renderSeq = 0;\r\n\r\nexport interface RenderToSvgArgs {\r\n  code: string;\r\n  theme: MermaidTheme;\r\n  dark: boolean;\r\n  seed: number;\r\n  fontUrl?: string;\r\n  mermaidConfig?: Record<string, unknown>;\r\n  mermaid: MermaidLike;\r\n  /** 強制關閉 htmlLabels(供匯出 pristine SVG 用,避免 foreignObject)。 */\r\n  pristine?: boolean;\r\n}\r\n\r\nexport interface RenderedSvg {\r\n  svgString: string;\r\n  id: string;\r\n  postProcess: PostProcess;\r\n}\r\n\r\nfunction buildConfig(args: RenderToSvgArgs): Record<string, unknown> {\r\n  const resolved = resolveTheme(args.theme, args.dark);\r\n  const htmlLabels = args.pristine ? false : true;\r\n  const config: Record<string, unknown> = {\r\n    startOnLoad: false,\r\n    theme: resolved.base,\r\n    securityLevel: 'loose',\r\n    htmlLabels,\r\n    flowchart: { htmlLabels, useMaxWidth: false },\r\n  };\r\n  if (args.theme === 'colorful') {\r\n    config.flowchart = { htmlLabels, useMaxWidth: false, nodeSpacing: 60, rankSpacing: 65, padding: 12 };\r\n  }\r\n  if (resolved.look === 'handDrawn') {\r\n    config.look = 'handDrawn';\r\n    config.handDrawnSeed = args.seed;\r\n    config.fontFamily = SKETCH_FONT;\r\n  }\r\n  // host 自訂設定最後覆蓋(flowchart 做一層淺合併)。\r\n  if (args.mermaidConfig) {\r\n    const userFlowchart = (args.mermaidConfig.flowchart as Record<string, unknown>) ?? {};\r\n    Object.assign(config, args.mermaidConfig);\r\n    config.flowchart = { ...(config.flowchart as Record<string, unknown>), ...userFlowchart };\r\n  }\r\n  return config;\r\n}\r\n\r\n/** 解析設定 → 載字(sketch)→ initialize → render,回傳 mermaid 的 SVG 字串。 */\r\nexport async function renderToSvg(args: RenderToSvgArgs): Promise<RenderedSvg> {\r\n  const resolved = resolveTheme(args.theme, args.dark);\r\n  if (resolved.look === 'handDrawn') {\r\n    // 先載入手寫字體再 render,確保 mermaid 量測文字寬度時用的就是 Virgil。\r\n    await ensureSketchFont(args.fontUrl);\r\n  }\r\n  args.mermaid.initialize(buildConfig(args));\r\n  renderSeq += 1;\r\n  const id = `rsm-${renderSeq}`;\r\n  // 檢查 / 懸停提示指令在這個唯一咽喉點剝除,viewer / renderDiagram / 編輯器排版三條路徑同時受惠。\r\n  // (原始碼本身不動 —— 編輯器 round-trip 讀的是原始碼,提示不會在來回轉換中遺失。)\r\n  // 剝完再轉譯 ORID:transpileOrid 對非 ORID 是零成本直通,對 ORID 則吐出等價 flowchart,\r\n  // 於是 mermaid 完全不必認識 `orid` 這個關鍵字,下游(主題 / 搜尋 / 匯出)也一律照舊。\r\n  const prepared = transpileOrid(stripTipDirectives(stripCheckDirectives(args.code)));\r\n  const { svg } = await args.mermaid.render(id, prepared);\r\n  return { svgString: svg, id, postProcess: args.pristine ? 'none' : resolved.postProcess };\r\n}\r\n\r\n/** 把 mermaid SVG 字串塞入 host、套後處理、設定填滿尺寸,回傳 live SVG 元素。 */\r\nexport function mountSvg(\r\n  host: HTMLElement,\r\n  svgString: string,\r\n  postProcess: PostProcess,\r\n  opts: { dark: boolean; seed: number },\r\n): SVGSVGElement | null {\r\n  host.innerHTML = svgString;\r\n  const svg = host.querySelector('svg');\r\n  if (!svg) {\r\n    return null;\r\n  }\r\n  applyPostProcess(svg, postProcess, opts);\r\n  svg.style.maxWidth = 'none';\r\n  svg.style.width = '100%';\r\n  svg.style.height = '100%';\r\n  return svg;\r\n}\r\n\r\nexport function applyPostProcess(\r\n  svg: SVGSVGElement,\r\n  postProcess: PostProcess,\r\n  opts: { dark: boolean; seed: number },\r\n): void {\r\n  if (postProcess === 'colorful') {\r\n    colorizeDiagram(svg, { dark: opts.dark });\r\n  } else if (postProcess === 'sketch') {\r\n    // 原生 handDrawn 不作用於 sequenceDiagram,這裡補手繪後處理;非序列圖會自動略過。\r\n    sketchifyDiagram(svg, { dark: opts.dark, seed: opts.seed });\r\n  }\r\n  // 字體清晰度:所有主題(含原生 neutral/forest/dark)都套用,只加粗不改色,安全。\r\n  boostLegibility(svg);\r\n}\r\n\r\n/**\r\n * 一次性渲染:載入 mermaid、渲染、後處理並(若有 container)注入頁面。\r\n * 不附 pan/zoom — 適合靜態美化輸出。互動請用 createViewer / <MermaidViewer>。\r\n */\r\nexport async function renderDiagram(opts: RenderDiagramOptions): Promise<RenderResult> {\r\n  assertBrowser('renderDiagram');\r\n  const dark = opts.dark ?? false;\r\n  const seed = opts.seed ?? 42;\r\n  if (opts.injectStyles !== false) {\r\n    ensureStyles();\r\n  }\r\n  const mermaid = await loadMermaid({ source: opts.mermaid });\r\n  const { svgString, id, postProcess } = await renderToSvg({\r\n    code: opts.code,\r\n    theme: opts.theme ?? 'colorful',\r\n    dark,\r\n    seed,\r\n    fontUrl: opts.fontUrl,\r\n    mermaidConfig: opts.mermaidConfig,\r\n    mermaid,\r\n  });\r\n\r\n  const host =\r\n    typeof opts.container === 'string'\r\n      ? document.querySelector<HTMLElement>(opts.container)\r\n      : (opts.container ?? document.createElement('div'));\r\n  if (!host) {\r\n    throw new Error(`[react-super-mermaid] 找不到 container:${String(opts.container)}`);\r\n  }\r\n  const svg = mountSvg(host, svgString, postProcess, { dark, seed });\r\n  if (!svg) {\r\n    throw new Error('[react-super-mermaid] mermaid 未輸出 SVG。');\r\n  }\r\n  return { svg, svgString, id };\r\n}\r\n","// Form 編輯器(timeline 等資料圖表)的 CSS,注入一次。深淺色皆涵蓋。\r\n\r\nexport const RSM_FORM_STYLE_ID = 'rsm-form-styles';\r\n\r\nconst CSS = `\r\n.rsm-form-root{position:absolute;inset:0;display:flex;min-height:0;overflow:hidden;\r\n  font:14px/1.5 system-ui,-apple-system,\"Segoe UI\",\"Microsoft JhengHei\",\"PingFang TC\",sans-serif;\r\n  --rsm-form-bg:#f8fafc;--rsm-form-card:#ffffff;--rsm-form-border:#e2e8f0;--rsm-form-fg:#1f2937;\r\n  --rsm-form-muted:#64748b;--rsm-form-accent:#3b82f6;--rsm-form-danger:#ef4444;\r\n  background:var(--rsm-form-bg);color:var(--rsm-form-fg);}\r\n.rsm-editor-root.rsm-dark .rsm-form-root{--rsm-form-bg:#0d1117;--rsm-form-card:#161b22;\r\n  --rsm-form-border:#30363d;--rsm-form-fg:#e2e8f0;--rsm-form-muted:#8b949e;--rsm-form-accent:#58a6ff;}\r\n\r\n.rsm-form-pane{flex:1 1 52%;min-width:0;overflow:auto;padding:16px;}\r\n.rsm-form-preview{flex:1 1 48%;min-width:0;overflow:auto;display:flex;align-items:center;justify-content:center;\r\n  padding:16px;border-left:1px solid var(--rsm-form-border);background:var(--rsm-form-bg);}\r\n.rsm-form-preview svg{max-width:100%;height:auto;}\r\n.rsm-form-preview-err{color:var(--rsm-form-danger);font:13px/1.5 ui-monospace,monospace;white-space:pre-wrap;padding:12px;}\r\n\r\n.rsm-form-title-row{display:flex;align-items:center;gap:8px;margin-bottom:14px;}\r\n.rsm-form-title-row label{font-weight:600;color:var(--rsm-form-muted);white-space:nowrap;}\r\n\r\n.rsm-form-input{flex:1;min-width:0;padding:6px 9px;border:1px solid var(--rsm-form-border);border-radius:7px;\r\n  background:var(--rsm-form-card);color:var(--rsm-form-fg);font:inherit;outline:none;}\r\n.rsm-form-input:focus{border-color:var(--rsm-form-accent);box-shadow:0 0 0 2px color-mix(in srgb,var(--rsm-form-accent) 30%,transparent);}\r\n\r\n.rsm-form-section{background:var(--rsm-form-card);border:1px solid var(--rsm-form-border);border-radius:11px;\r\n  padding:11px;margin-bottom:12px;box-shadow:0 1px 2px rgba(0,0,0,0.04);}\r\n.rsm-form-section-head{display:flex;align-items:center;gap:6px;margin-bottom:8px;}\r\n.rsm-form-section-head .rsm-form-input{font-weight:600;}\r\n.rsm-form-section-tag{font-size:12px;font-weight:700;color:var(--rsm-form-muted);white-space:nowrap;}\r\n\r\n.rsm-form-period{border-left:3px solid var(--rsm-form-accent);margin:8px 0 8px 4px;padding:0 0 0 10px;}\r\n.rsm-form-period-head{display:flex;align-items:center;gap:6px;margin-bottom:5px;}\r\n.rsm-form-period-head .rsm-form-input{font-weight:500;}\r\n.rsm-form-events{display:flex;flex-direction:column;gap:5px;padding-left:8px;}\r\n.rsm-form-event{display:flex;align-items:center;gap:6px;}\r\n.rsm-form-event::before{content:\"•\";color:var(--rsm-form-muted);flex:0 0 auto;}\r\n\r\n.rsm-form-iconbtn{flex:0 0 auto;width:26px;height:26px;display:inline-flex;align-items:center;justify-content:center;\r\n  border:1px solid var(--rsm-form-border);border-radius:6px;background:var(--rsm-form-card);color:var(--rsm-form-muted);\r\n  cursor:pointer;font-size:13px;line-height:1;padding:0;}\r\n.rsm-form-iconbtn:hover{color:var(--rsm-form-fg);border-color:var(--rsm-form-accent);}\r\n.rsm-form-iconbtn.rsm-form-del:hover{color:#fff;background:var(--rsm-form-danger);border-color:var(--rsm-form-danger);}\r\n.rsm-form-iconbtn:disabled{opacity:0.35;cursor:default;}\r\n\r\n.rsm-form-addbtn{display:inline-flex;align-items:center;gap:5px;padding:5px 11px;border:1px dashed var(--rsm-form-border);\r\n  border-radius:7px;background:transparent;color:var(--rsm-form-accent);cursor:pointer;font:inherit;font-size:13px;margin-top:4px;}\r\n.rsm-form-addbtn:hover{border-color:var(--rsm-form-accent);background:color-mix(in srgb,var(--rsm-form-accent) 8%,transparent);}\r\n.rsm-form-add-event{font-size:12px;padding:3px 9px;}\r\n.rsm-form-add-section{font-weight:600;}\r\n\r\n/* ── ORID:四段各有語意主色(--rsm-orid-accent 由 orid-editor 逐卡設定) ── */\r\n.rsm-orid-stage{border-left:4px solid var(--rsm-orid-accent,var(--rsm-form-accent));}\r\n.rsm-orid-stage .rsm-orid-tag{color:var(--rsm-orid-accent,var(--rsm-form-accent));font-size:13px;}\r\n.rsm-orid-stage .rsm-form-input:focus{border-color:var(--rsm-orid-accent,var(--rsm-form-accent));\r\n  box-shadow:0 0 0 2px color-mix(in srgb,var(--rsm-orid-accent,var(--rsm-form-accent)) 30%,transparent);}\r\n.rsm-orid-stage .rsm-form-addbtn{color:var(--rsm-orid-accent,var(--rsm-form-accent));}\r\n.rsm-orid-hint{font-size:12px;color:var(--rsm-form-muted);margin:-2px 0 8px;line-height:1.45;}\r\n.rsm-orid-missing{display:flex;flex-wrap:wrap;align-items:center;gap:7px;margin-top:6px;}\r\n.rsm-orid-missing .rsm-form-section-tag{margin-right:2px;}\r\n.rsm-orid-add-stage{margin-top:0;font-size:13px;}\r\n`;\r\n\r\nexport function ensureFormStyles(): void {\r\n  if (typeof document === 'undefined') return;\r\n  let style = document.getElementById(RSM_FORM_STYLE_ID) as HTMLStyleElement | null;\r\n  if (!style) {\r\n    style = document.createElement('style');\r\n    style.id = RSM_FORM_STYLE_ID;\r\n    document.head.appendChild(style);\r\n  }\r\n  if (style.textContent !== CSS) style.textContent = CSS;\r\n}\r\n","// ORID 表單編輯器(框架無關)。ORID 是條列式的引導討論資料,不是自由拖拉的畫布圖,\r\n// 故沿用 timeline 的「結構化表單 + 即時預覽」模式:左側四段固定卡片(O/R/I/D)可增刪、\r\n// 排序項目,右側即時渲染。所有變更序列化回 ORID 原始碼並透過 emit 通知 host 寫回原檔。\r\n//\r\n// 與 timeline 的差別:階段是固定的四個、順序不可改(那正是 ORID 的方法論本身),\r\n// 所以卡片沒有「上移 / 下移 / 刪除階段」,改成「這段先不談 → 收合(移除)/ 加回來」。\r\n//\r\n// 由 controller.createDiagramEditor 在偵測到 orid 時惰性建立並接管 handle 的子集。\r\n\r\nimport { assertBrowser } from '../../../env';\r\nimport { renderDiagram } from '../../render-pipeline';\r\nimport { prepareSvgElement, rasterizeToBlob, flattenForeignObjects } from '../../export';\r\nimport type { MermaidSource } from '../../../types';\r\nimport {\r\n  ORID_STAGES,\r\n  emptyOridModel,\r\n  orderedStages,\r\n  oridStageSpec,\r\n  parseOrid,\r\n  serializeOrid,\r\n  type OridModel,\r\n  type OridStage,\r\n  type OridStageKey,\r\n} from '../../orid/model';\r\nimport { ORID_PALETTE } from '../../orid/theme';\r\nimport { ensureFormStyles } from './form-styles';\r\nimport type { FormEditorHandle } from './types';\r\n\r\nexport interface OridFormOptions {\r\n  mermaid?: MermaidSource;\r\n  dark?: boolean;\r\n  fontUrl?: string;\r\n  /** 轉發給 controller 的事件匯流(change / mermaidchange / historychange / error)。 */\r\n  emit?: (event: string, payload?: unknown) => void;\r\n}\r\n\r\nexport interface OridFormHandle extends FormEditorHandle {\r\n  getModel(): OridModel;\r\n}\r\n\r\ntype Attrs = Record<string, string | undefined>;\r\nfunction el<K extends keyof HTMLElementTagNameMap>(\r\n  tag: K,\r\n  attrs?: Attrs,\r\n  children?: Array<Node | string>,\r\n): HTMLElementTagNameMap[K] {\r\n  const node = document.createElement(tag);\r\n  if (attrs) {\r\n    for (const [k, v] of Object.entries(attrs)) {\r\n      if (v === undefined) continue;\r\n      if (k === 'class') node.className = v;\r\n      else node.setAttribute(k, v);\r\n    }\r\n  }\r\n  if (children) for (const c of children) node.append(c);\r\n  return node;\r\n}\r\n\r\nconst clone = (m: OridModel): OridModel => JSON.parse(JSON.stringify(m)) as OridModel;\r\n\r\nexport function createOridForm(host: HTMLElement, opts: OridFormOptions = {}): OridFormHandle {\r\n  assertBrowser('createOridForm');\r\n  ensureFormStyles();\r\n\r\n  let dark = opts.dark ?? false;\r\n  let model: OridModel = { stages: [] };\r\n  const undoStack: OridModel[] = [];\r\n  const redoStack: OridModel[] = [];\r\n  let lastPreviewSvg: SVGSVGElement | null = null;\r\n  let previewTimer: ReturnType<typeof setTimeout> | null = null;\r\n  let mermaidTimer: ReturnType<typeof setTimeout> | null = null;\r\n  let destroyed = false;\r\n  /** 重建表單後要自動聚焦的輸入(由結構操作設定)。 */\r\n  let focusKey: string | null = null;\r\n\r\n  const root = el('div', { class: 'rsm-form-root rsm-orid-root' });\r\n  const pane = el('div', { class: 'rsm-form-pane' });\r\n  const preview = el('div', { class: 'rsm-form-preview' });\r\n  root.append(pane, preview);\r\n  host.append(root);\r\n\r\n  const emit = (event: string, payload?: unknown): void => opts.emit?.(event, payload);\r\n  const emitHistory = (): void =>\r\n    emit('historychange', { canUndo: undoStack.length > 0, canRedo: redoStack.length > 0 });\r\n\r\n  function schedulePreview(): void {\r\n    if (previewTimer) clearTimeout(previewTimer);\r\n    previewTimer = setTimeout(() => {\r\n      void doRenderPreview();\r\n    }, 140);\r\n  }\r\n\r\n  async function doRenderPreview(): Promise<void> {\r\n    if (destroyed) return;\r\n    const code = serializeOrid(model);\r\n    try {\r\n      // renderDiagram 內部會轉譯 ORID → flowchart,故這裡直接餵 ORID 原始碼即可。\r\n      const { svg } = await renderDiagram({\r\n        code,\r\n        container: preview,\r\n        theme: 'colorful',\r\n        dark,\r\n        mermaid: opts.mermaid,\r\n      });\r\n      lastPreviewSvg = svg;\r\n    } catch (err) {\r\n      lastPreviewSvg = null;\r\n      preview.replaceChildren(\r\n        el('div', { class: 'rsm-form-preview-err' }, [\r\n          '預覽失敗:\\n' + (err instanceof Error ? err.message : String(err)),\r\n        ]),\r\n      );\r\n      emit('error', err);\r\n    }\r\n  }\r\n\r\n  /** mermaidchange 寫回防抖(對齊畫布編輯器,避免每個按鍵都觸發 host 寫回原檔)。 */\r\n  function emitMermaidDebounced(): void {\r\n    if (mermaidTimer) clearTimeout(mermaidTimer);\r\n    mermaidTimer = setTimeout(() => emit('mermaidchange', serializeOrid(model)), 220);\r\n  }\r\n\r\n  /** 文字編輯:即時更新模型 + 預覽 + 寫回,但不重建表單(保留游標)。 */\r\n  function softSync(): void {\r\n    emit('change');\r\n    emitMermaidDebounced();\r\n    schedulePreview();\r\n  }\r\n\r\n  /** 結構編輯:重建表單 + 同步。 */\r\n  function hardSync(): void {\r\n    renderForm();\r\n    emit('change');\r\n    emitMermaidDebounced();\r\n    schedulePreview();\r\n  }\r\n\r\n  /** 結構性變更:先存歷史快照,套用,再硬同步。 */\r\n  function mutate(fn: () => void): void {\r\n    undoStack.push(clone(model));\r\n    if (undoStack.length > 100) undoStack.shift();\r\n    redoStack.length = 0;\r\n    fn();\r\n    hardSync();\r\n    emitHistory();\r\n  }\r\n\r\n  /** 文字輸入綁定:input 即時更新模型(軟同步);整段編輯合併為一個 undo 步。 */\r\n  function bindText(input: HTMLInputElement, apply: (v: string) => void): void {\r\n    let baseline: string | null = null;\r\n    input.addEventListener('focus', () => {\r\n      baseline = JSON.stringify(model);\r\n    });\r\n    input.addEventListener('input', () => {\r\n      apply(input.value);\r\n      softSync();\r\n    });\r\n    input.addEventListener('change', () => {\r\n      if (baseline !== null && baseline !== JSON.stringify(model)) {\r\n        undoStack.push(JSON.parse(baseline) as OridModel);\r\n        if (undoStack.length > 100) undoStack.shift();\r\n        redoStack.length = 0;\r\n        emitHistory();\r\n      }\r\n      baseline = null;\r\n    });\r\n  }\r\n\r\n  function iconBtn(\r\n    glyph: string,\r\n    title: string,\r\n    onClick: () => void,\r\n    opts2: { danger?: boolean; disabled?: boolean } = {},\r\n  ): HTMLButtonElement {\r\n    const b = el(\r\n      'button',\r\n      { type: 'button', class: 'rsm-form-iconbtn' + (opts2.danger ? ' rsm-form-del' : ''), title },\r\n      [glyph],\r\n    );\r\n    if (opts2.disabled) b.disabled = true;\r\n    b.addEventListener('click', onClick);\r\n    return b;\r\n  }\r\n\r\n  function addBtn(label: string, cls: string, onClick: () => void): HTMLButtonElement {\r\n    const b = el('button', { type: 'button', class: 'rsm-form-addbtn ' + cls }, [label]);\r\n    b.addEventListener('click', onClick);\r\n    return b;\r\n  }\r\n\r\n  function swap<T>(arr: T[], a: number, b: number): void {\r\n    if (a < 0 || b < 0 || a >= arr.length || b >= arr.length) return;\r\n    [arr[a], arr[b]] = [arr[b], arr[a]];\r\n  }\r\n\r\n  const stageOf = (key: OridStageKey): OridStage | undefined => model.stages.find((s) => s.key === key);\r\n\r\n  function renderItem(stage: OridStage, index: number): HTMLElement {\r\n    const row = el('div', { class: 'rsm-form-event' });\r\n    const input = el('input', {\r\n      class: 'rsm-form-input',\r\n      type: 'text',\r\n      value: stage.items[index],\r\n      placeholder: oridStageSpec(stage.key).hint,\r\n    }) as HTMLInputElement;\r\n    bindText(input, (v) => {\r\n      stage.items[index] = v;\r\n    });\r\n    if (focusKey === `i:${stage.key}:${index}`) setTimeout(() => input.focus(), 0);\r\n    row.append(\r\n      input,\r\n      iconBtn('↑', '上移項目', () => mutate(() => swap(stage.items, index, index - 1)), {\r\n        disabled: index === 0,\r\n      }),\r\n      iconBtn('↓', '下移項目', () => mutate(() => swap(stage.items, index, index + 1)), {\r\n        disabled: index === stage.items.length - 1,\r\n      }),\r\n      iconBtn('✕', '刪除項目', () => mutate(() => stage.items.splice(index, 1)), { danger: true }),\r\n    );\r\n    return row;\r\n  }\r\n\r\n  /** 已納入圖表的階段卡片。 */\r\n  function renderStage(stage: OridStage): HTMLElement {\r\n    const spec = oridStageSpec(stage.key);\r\n    const palette = ORID_PALETTE[stage.key];\r\n    const card = el('div', { class: 'rsm-form-section rsm-orid-stage' });\r\n    card.style.setProperty('--rsm-orid-accent', palette.itemStroke);\r\n\r\n    const head = el('div', { class: 'rsm-form-section-head' });\r\n    head.append(\r\n      el('span', { class: 'rsm-form-section-tag rsm-orid-tag' }, [`${spec.ordinal} ${spec.zh}`]),\r\n    );\r\n    const headingInput = el('input', {\r\n      class: 'rsm-form-input',\r\n      type: 'text',\r\n      value: stage.heading ?? '',\r\n      placeholder: `段落標題(留空 = ${spec.ordinal} ${spec.zh} · ${spec.en})`,\r\n    }) as HTMLInputElement;\r\n    bindText(headingInput, (v) => {\r\n      stage.heading = v.trim() === '' ? undefined : v;\r\n    });\r\n    if (focusKey === `h:${stage.key}`) setTimeout(() => headingInput.focus(), 0);\r\n    head.append(\r\n      headingInput,\r\n      iconBtn(\r\n        '✕',\r\n        `這次不談「${spec.zh}」(從圖表移除整段)`,\r\n        () =>\r\n          mutate(() => {\r\n            model.stages = model.stages.filter((s) => s.key !== stage.key);\r\n          }),\r\n        { danger: true },\r\n      ),\r\n    );\r\n    card.append(head);\r\n    card.append(el('div', { class: 'rsm-orid-hint' }, [spec.hint]));\r\n\r\n    const items = el('div', { class: 'rsm-form-events' });\r\n    stage.items.forEach((_, i) => items.append(renderItem(stage, i)));\r\n    items.append(\r\n      addBtn('＋ 項目', 'rsm-form-add-event', () =>\r\n        mutate(() => {\r\n          stage.items.push('');\r\n          focusKey = `i:${stage.key}:${stage.items.length - 1}`;\r\n        }),\r\n      ),\r\n    );\r\n    card.append(items);\r\n    return card;\r\n  }\r\n\r\n  /** 尚未納入的階段:一顆「加回來」按鈕,順序仍照 O→R→I→D 插回正確位置。 */\r\n  function renderMissingStage(key: OridStageKey): HTMLElement {\r\n    const spec = oridStageSpec(key);\r\n    return addBtn(`＋ ${spec.ordinal} ${spec.zh} · ${spec.en}`, 'rsm-orid-add-stage', () =>\r\n      mutate(() => {\r\n        model.stages.push({ key, items: [''] });\r\n        model.stages = orderedStages(model);\r\n        focusKey = `i:${key}:0`;\r\n      }),\r\n    );\r\n  }\r\n\r\n  function renderForm(): void {\r\n    const consumedFocus = focusKey;\r\n    pane.replaceChildren();\r\n\r\n    const titleRow = el('div', { class: 'rsm-form-title-row' });\r\n    titleRow.append(el('label', {}, ['圖表標題']));\r\n    const titleInput = el('input', {\r\n      class: 'rsm-form-input',\r\n      type: 'text',\r\n      value: model.title ?? '',\r\n      placeholder: '例:上線後回顧會議',\r\n    }) as HTMLInputElement;\r\n    bindText(titleInput, (v) => {\r\n      model.title = v;\r\n    });\r\n    titleRow.append(titleInput);\r\n    pane.append(titleRow);\r\n\r\n    for (const stage of orderedStages(model)) pane.append(renderStage(stage));\r\n\r\n    const missing = ORID_STAGES.filter((spec) => !stageOf(spec.key));\r\n    if (missing.length > 0) {\r\n      const row = el('div', { class: 'rsm-orid-missing' });\r\n      row.append(el('span', { class: 'rsm-form-section-tag' }, ['加回階段']));\r\n      for (const spec of missing) row.append(renderMissingStage(spec.key));\r\n      pane.append(row);\r\n    }\r\n\r\n    if (consumedFocus === focusKey) focusKey = null; // 已消費(setTimeout 內聚焦)\r\n  }\r\n\r\n  const handle: OridFormHandle = {\r\n    loadSource: (text) => {\r\n      const parsed = parseOrid(text);\r\n      // 只有 `orid` 一行(全新圖)→ 用四段齊備的骨架起手,別給使用者一張空白表單。\r\n      model = parsed.stages.length === 0 && !parsed.raw ? { ...parsed, ...emptyOridModel() } : parsed;\r\n      undoStack.length = 0;\r\n      redoStack.length = 0;\r\n      renderForm();\r\n      emit('change');\r\n      emit('mermaidchange', serializeOrid(model));\r\n      emitHistory();\r\n      void doRenderPreview();\r\n    },\r\n    toMermaid: () => serializeOrid(model),\r\n    getModel: () => model,\r\n    undo: () => {\r\n      const prev = undoStack.pop();\r\n      if (!prev) return;\r\n      redoStack.push(clone(model));\r\n      model = prev;\r\n      hardSync();\r\n      emitHistory();\r\n    },\r\n    redo: () => {\r\n      const next = redoStack.pop();\r\n      if (!next) return;\r\n      undoStack.push(clone(model));\r\n      model = next;\r\n      hardSync();\r\n      emitHistory();\r\n    },\r\n    canUndo: () => undoStack.length > 0,\r\n    canRedo: () => redoStack.length > 0,\r\n    setDark: (d) => {\r\n      dark = d;\r\n      void doRenderPreview();\r\n    },\r\n    exportSvg: () => {\r\n      if (!lastPreviewSvg) return '';\r\n      const c = lastPreviewSvg.cloneNode(true) as SVGSVGElement;\r\n      c.removeAttribute('style');\r\n      return prepareSvgElement(c).serialized;\r\n    },\r\n    exportPng: async (rasterOpts) => {\r\n      if (!lastPreviewSvg) throw new Error('尚未產生預覽圖,無法匯出。');\r\n      const c = lastPreviewSvg.cloneNode(true) as SVGSVGElement;\r\n      c.removeAttribute('style');\r\n      flattenForeignObjects(c);\r\n      return rasterizeToBlob(prepareSvgElement(c), { ...rasterOpts, dark });\r\n    },\r\n    show: () => {\r\n      root.style.display = '';\r\n    },\r\n    hide: () => {\r\n      root.style.display = 'none';\r\n    },\r\n    isVisible: () => root.style.display !== 'none',\r\n    destroy: () => {\r\n      destroyed = true;\r\n      if (previewTimer) clearTimeout(previewTimer);\r\n      if (mermaidTimer) clearTimeout(mermaidTimer);\r\n      root.remove();\r\n    },\r\n  };\r\n\r\n  return handle;\r\n}\r\n","// Timeline(時間軸)結構化模型 + 雙向 round-trip(純函式、零 DOM)。\r\n//\r\n// timeline 不是「拖拉繪製」圖,而是 section → time-period → events 的表格式資料。\r\n// 故用 form 編輯器(本模型)而非畫布 adapter。語法:\r\n//\r\n//   ---\r\n//   title: 圖表中繼標題          ← frontmatter(逐字保留)\r\n//   ---\r\n//   timeline\r\n//       title 顯示標題           ← chart title\r\n//       section 2025            ← 區段(可省略 → 視為無名區段)\r\n//           Q1 : 事件A : 事件B   ← time-period 與其事件(冒號分隔)\r\n//           Q3 : 事件C\r\n//              : 事件D           ← 以冒號開頭 = 延續上一個 period 的事件\r\n//\r\n// 設計:解析永遠成功並降級(保留原文於 raw),序列化永遠輸出合法 mermaid。\r\n\r\nexport interface TimelinePeriod {\r\n  /** 時間點文字,如 \"Q1\" / \"2025-07\"。 */\r\n  period: string;\r\n  /** 此時間點發生的事件(可 0..n)。 */\r\n  events: string[];\r\n}\r\n\r\nexport interface TimelineSection {\r\n  /** 區段名稱;null = 區段前(無名)的時間點。 */\r\n  name: string | null;\r\n  periods: TimelinePeriod[];\r\n}\r\n\r\nexport interface TimelineModel {\r\n  /** 逐字保留的 YAML frontmatter(含 --- 標記),無則 undefined。 */\r\n  frontmatter?: string;\r\n  /** `title X` 顯示標題。 */\r\n  title?: string;\r\n  sections: TimelineSection[];\r\n  /** 解析無法辨識為合法 timeline 時的完整原文(降級防覆寫用)。 */\r\n  raw?: string;\r\n}\r\n\r\nconst FRONTMATTER_RE = /^---\\r?\\n[\\s\\S]*?\\r?\\n---(?:\\r?\\n|$)/;\r\n\r\n/** 空白模型(新建時的起手骨架)。 */\r\nexport function emptyTimelineModel(): TimelineModel {\r\n  return {\r\n    title: '時間軸標題',\r\n    sections: [{ name: '區段一', periods: [{ period: '時間點', events: ['事件'] }] }],\r\n  };\r\n}\r\n\r\n/** mermaid timeline 文字 → 結構化模型。永不拋例外;無法解析時於 raw 保留原文。 */\r\nexport function parseTimeline(text: string): TimelineModel {\r\n  const original = text;\r\n  // 抽出開頭 frontmatter(逐字保留含 --- 標記),其餘為 body。\r\n  let frontmatter: string | undefined;\r\n  let body = text;\r\n  const fm = text.match(FRONTMATTER_RE);\r\n  if (fm) {\r\n    frontmatter = fm[0].replace(/\\r?\\n$/, '');\r\n    body = text.slice(fm[0].length);\r\n  }\r\n\r\n  let title: string | undefined;\r\n  const sections: TimelineSection[] = [];\r\n  let cur: TimelineSection | null = null;\r\n  let sawTimeline = false;\r\n\r\n  const ensureSection = (): TimelineSection => {\r\n    if (!cur) {\r\n      cur = { name: null, periods: [] };\r\n      sections.push(cur);\r\n    }\r\n    return cur;\r\n  };\r\n\r\n  for (const rawLine of body.split('\\n')) {\r\n    const line = rawLine.trim();\r\n    if (!line) continue;\r\n    if (line.startsWith('%%')) continue; // 註解 / init\r\n    if (!sawTimeline) {\r\n      // 第一個有意義 token 必須是 timeline,否則整段視為非 timeline(降級)。\r\n      if (/^timeline\\b/i.test(line)) {\r\n        sawTimeline = true;\r\n        continue;\r\n      }\r\n      // 不是 timeline 開頭 → 整段保留原文降級。\r\n      return { frontmatter, title: undefined, sections: [], raw: original };\r\n    }\r\n    // chart title:`title <text>`(無冒號才當標題,避免吃掉名為 \"title\" 的時間點)。\r\n    const tm = line.match(/^title\\s+(.+)$/i);\r\n    if (tm && !line.includes(':')) {\r\n      title = tm[1].trim();\r\n      continue;\r\n    }\r\n    // section:`section <name>`。\r\n    const sm = line.match(/^section\\s+(.+)$/i);\r\n    if (sm) {\r\n      cur = { name: sm[1].trim(), periods: [] };\r\n      sections.push(cur);\r\n      continue;\r\n    }\r\n    // 以冒號開頭 = 延續上一個 period 的事件。\r\n    if (line.startsWith(':')) {\r\n      const events = line\r\n        .split(':')\r\n        .slice(1)\r\n        .map((s) => s.trim())\r\n        .filter(Boolean);\r\n      const sec = ensureSection();\r\n      const last = sec.periods[sec.periods.length - 1];\r\n      if (last) last.events.push(...events);\r\n      else sec.periods.push({ period: '', events });\r\n      continue;\r\n    }\r\n    // 一般時間點:`period : event1 : event2 ...`。\r\n    const parts = line.split(':').map((s) => s.trim());\r\n    const period = parts[0];\r\n    const events = parts.slice(1).filter(Boolean);\r\n    ensureSection().periods.push({ period, events });\r\n  }\r\n\r\n  // 完全沒有內容(只有 timeline 關鍵字)→ 視為空模型(可編輯),非降級。\r\n  return { frontmatter, title, sections };\r\n}\r\n\r\n/** 結構化模型 → mermaid timeline 文字。純函式、永遠合法。 */\r\nexport function serializeTimeline(model: TimelineModel): string {\r\n  // 降級:解析失敗保留的原文逐字回吐,避免覆寫使用者資料。\r\n  if (model.raw && model.sections.length === 0 && !model.title) {\r\n    return model.raw;\r\n  }\r\n  const lines: string[] = [];\r\n  if (model.frontmatter) lines.push(model.frontmatter);\r\n  lines.push('timeline');\r\n  if (model.title && model.title.trim()) lines.push(`    title ${model.title.trim()}`);\r\n  for (const section of model.sections) {\r\n    const named = section.name !== null && section.name !== undefined;\r\n    if (named) lines.push(`    section ${section.name}`);\r\n    const indent = named ? '        ' : '    ';\r\n    for (const p of section.periods) {\r\n      const cells = [p.period, ...p.events.filter((e) => e.trim())];\r\n      // 全空的時間點略過(避免輸出空行 / 非法 period)。\r\n      if (cells.every((c) => !c.trim())) continue;\r\n      lines.push(indent + cells.map((c) => c.trim()).join(' : '));\r\n    }\r\n  }\r\n  return lines.join('\\n') + '\\n';\r\n}\r\n","// Timeline 表單編輯器(框架無關)。timeline 不吃畫布拖拉,故用「結構化表單 + 即時預覽」:\r\n// 左側編輯 section / time-period / events,右側即時渲染 mermaid。所有變更序列化回 mermaid\r\n// 並透過 emit 回呼通知 host(VS Code webview / React)寫回原檔。\r\n//\r\n// 由 controller.createDiagramEditor 在偵測到 timeline 時惰性建立並接管 handle 的子集。\r\n\r\nimport { assertBrowser } from '../../../env';\r\nimport { renderDiagram } from '../../render-pipeline';\r\nimport {\r\n  prepareSvgElement,\r\n  rasterizeToBlob,\r\n  flattenForeignObjects,\r\n} from '../../export';\r\nimport type { MermaidSource } from '../../../types';\r\nimport {\r\n  parseTimeline,\r\n  serializeTimeline,\r\n  type TimelineModel,\r\n  type TimelineSection,\r\n  type TimelinePeriod,\r\n} from './timeline-model';\r\nimport { ensureFormStyles } from './form-styles';\r\nimport type { FormEditorHandle } from './types';\r\n\r\nexport interface TimelineFormOptions {\r\n  mermaid?: MermaidSource;\r\n  dark?: boolean;\r\n  fontUrl?: string;\r\n  /** 轉發給 controller 的事件匯流(change / mermaidchange / historychange / error)。 */\r\n  emit?: (event: string, payload?: unknown) => void;\r\n}\r\n\r\nexport interface TimelineFormHandle extends FormEditorHandle {\r\n  getModel(): TimelineModel;\r\n}\r\n\r\ntype Attrs = Record<string, string | undefined>;\r\nfunction el<K extends keyof HTMLElementTagNameMap>(\r\n  tag: K,\r\n  attrs?: Attrs,\r\n  children?: Array<Node | string>,\r\n): HTMLElementTagNameMap[K] {\r\n  const node = document.createElement(tag);\r\n  if (attrs) {\r\n    for (const [k, v] of Object.entries(attrs)) {\r\n      if (v === undefined) continue;\r\n      if (k === 'class') node.className = v;\r\n      else node.setAttribute(k, v);\r\n    }\r\n  }\r\n  if (children) for (const c of children) node.append(c);\r\n  return node;\r\n}\r\n\r\nconst clone = (m: TimelineModel): TimelineModel => JSON.parse(JSON.stringify(m)) as TimelineModel;\r\n\r\nexport function createTimelineForm(host: HTMLElement, opts: TimelineFormOptions = {}): TimelineFormHandle {\r\n  assertBrowser('createTimelineForm');\r\n  ensureFormStyles();\r\n\r\n  let dark = opts.dark ?? false;\r\n  let model: TimelineModel = { sections: [] };\r\n  const undoStack: TimelineModel[] = [];\r\n  const redoStack: TimelineModel[] = [];\r\n  let lastPreviewSvg: SVGSVGElement | null = null;\r\n  let previewTimer: ReturnType<typeof setTimeout> | null = null;\r\n  let mermaidTimer: ReturnType<typeof setTimeout> | null = null;\r\n  let destroyed = false;\r\n  /** 重建表單後要自動聚焦的輸入(由結構操作設定)。 */\r\n  let focusKey: string | null = null;\r\n\r\n  const root = el('div', { class: 'rsm-form-root' });\r\n  const pane = el('div', { class: 'rsm-form-pane' });\r\n  const preview = el('div', { class: 'rsm-form-preview' });\r\n  root.append(pane, preview);\r\n  host.append(root);\r\n\r\n  const emit = (event: string, payload?: unknown): void => opts.emit?.(event, payload);\r\n  const emitHistory = (): void =>\r\n    emit('historychange', { canUndo: undoStack.length > 0, canRedo: redoStack.length > 0 });\r\n\r\n  function schedulePreview(): void {\r\n    if (previewTimer) clearTimeout(previewTimer);\r\n    previewTimer = setTimeout(() => {\r\n      void doRenderPreview();\r\n    }, 140);\r\n  }\r\n\r\n  async function doRenderPreview(): Promise<void> {\r\n    if (destroyed) return;\r\n    const code = serializeTimeline(model);\r\n    try {\r\n      const { svg } = await renderDiagram({\r\n        code,\r\n        container: preview,\r\n        theme: 'colorful',\r\n        dark,\r\n        mermaid: opts.mermaid,\r\n      });\r\n      lastPreviewSvg = svg;\r\n    } catch (err) {\r\n      lastPreviewSvg = null;\r\n      preview.replaceChildren(\r\n        el('div', { class: 'rsm-form-preview-err' }, [\r\n          '預覽失敗:\\n' + (err instanceof Error ? err.message : String(err)),\r\n        ]),\r\n      );\r\n      emit('error', err);\r\n    }\r\n  }\r\n\r\n  /** mermaidchange 寫回防抖(對齊畫布編輯器,避免每個按鍵都觸發 host 寫回原檔)。 */\r\n  function emitMermaidDebounced(): void {\r\n    if (mermaidTimer) clearTimeout(mermaidTimer);\r\n    mermaidTimer = setTimeout(() => emit('mermaidchange', serializeTimeline(model)), 220);\r\n  }\r\n\r\n  /** 文字編輯:即時更新模型 + 預覽 + 寫回,但不重建表單(保留游標)。 */\r\n  function softSync(): void {\r\n    emit('change'); // 即時(供 React 原始碼面板 / 型別),mermaidchange 寫回則防抖\r\n    emitMermaidDebounced();\r\n    schedulePreview();\r\n  }\r\n\r\n  /** 結構編輯:重建表單 + 同步。 */\r\n  function hardSync(): void {\r\n    renderForm();\r\n    emit('change');\r\n    emitMermaidDebounced();\r\n    schedulePreview();\r\n  }\r\n\r\n  /** 結構性變更:先存歷史快照,套用,再硬同步。 */\r\n  function mutate(fn: () => void): void {\r\n    undoStack.push(clone(model));\r\n    if (undoStack.length > 100) undoStack.shift();\r\n    redoStack.length = 0;\r\n    fn();\r\n    hardSync();\r\n    emitHistory();\r\n  }\r\n\r\n  /** 文字輸入綁定:input 即時更新模型(軟同步);整段編輯合併為一個 undo 步。 */\r\n  function bindText(input: HTMLInputElement, apply: (v: string) => void): void {\r\n    let baseline: string | null = null;\r\n    input.addEventListener('focus', () => {\r\n      baseline = JSON.stringify(model);\r\n    });\r\n    input.addEventListener('input', () => {\r\n      apply(input.value);\r\n      softSync();\r\n    });\r\n    input.addEventListener('change', () => {\r\n      if (baseline !== null && baseline !== JSON.stringify(model)) {\r\n        undoStack.push(JSON.parse(baseline) as TimelineModel);\r\n        if (undoStack.length > 100) undoStack.shift();\r\n        redoStack.length = 0;\r\n        emitHistory();\r\n      }\r\n      baseline = null;\r\n    });\r\n  }\r\n\r\n  function iconBtn(glyph: string, title: string, onClick: () => void, opts2: { danger?: boolean; disabled?: boolean } = {}): HTMLButtonElement {\r\n    const b = el('button', {\r\n      type: 'button',\r\n      class: 'rsm-form-iconbtn' + (opts2.danger ? ' rsm-form-del' : ''),\r\n      title,\r\n    }, [glyph]);\r\n    if (opts2.disabled) b.disabled = true;\r\n    b.addEventListener('click', onClick);\r\n    return b;\r\n  }\r\n\r\n  function addBtn(label: string, cls: string, onClick: () => void): HTMLButtonElement {\r\n    const b = el('button', { type: 'button', class: 'rsm-form-addbtn ' + cls }, [label]);\r\n    b.addEventListener('click', onClick);\r\n    return b;\r\n  }\r\n\r\n  function renderEvent(section: TimelineSection, period: TimelinePeriod, ei: number): HTMLElement {\r\n    const row = el('div', { class: 'rsm-form-event' });\r\n    const input = el('input', {\r\n      class: 'rsm-form-input',\r\n      type: 'text',\r\n      value: period.events[ei],\r\n      placeholder: '事件',\r\n    }) as HTMLInputElement;\r\n    bindText(input, (v) => {\r\n      period.events[ei] = v;\r\n    });\r\n    if (focusKey === `e:${section.name}:${period.period}:${ei}`) setTimeout(() => input.focus(), 0);\r\n    row.append(\r\n      input,\r\n      iconBtn('✕', '刪除事件', () => mutate(() => period.events.splice(ei, 1)), { danger: true }),\r\n    );\r\n    return row;\r\n  }\r\n\r\n  function renderPeriod(section: TimelineSection, pi: number): HTMLElement {\r\n    const period = section.periods[pi];\r\n    const wrap = el('div', { class: 'rsm-form-period' });\r\n    const head = el('div', { class: 'rsm-form-period-head' });\r\n    const pInput = el('input', {\r\n      class: 'rsm-form-input',\r\n      type: 'text',\r\n      value: period.period,\r\n      placeholder: '時間點(如 Q1 / 2025-07)',\r\n    }) as HTMLInputElement;\r\n    bindText(pInput, (v) => {\r\n      period.period = v;\r\n    });\r\n    if (focusKey === `p:${section.name}:${pi}`) setTimeout(() => pInput.focus(), 0);\r\n    head.append(\r\n      pInput,\r\n      iconBtn('↑', '上移時間點', () => mutate(() => swap(section.periods, pi, pi - 1)), { disabled: pi === 0 }),\r\n      iconBtn('↓', '下移時間點', () => mutate(() => swap(section.periods, pi, pi + 1)), {\r\n        disabled: pi === section.periods.length - 1,\r\n      }),\r\n      iconBtn('✕', '刪除時間點', () => mutate(() => section.periods.splice(pi, 1)), { danger: true }),\r\n    );\r\n    wrap.append(head);\r\n\r\n    const events = el('div', { class: 'rsm-form-events' });\r\n    period.events.forEach((_, ei) => events.append(renderEvent(section, period, ei)));\r\n    events.append(\r\n      addBtn('＋ 事件', 'rsm-form-add-event', () =>\r\n        mutate(() => {\r\n          period.events.push('');\r\n          focusKey = `e:${section.name}:${period.period}:${period.events.length - 1}`;\r\n        }),\r\n      ),\r\n    );\r\n    wrap.append(events);\r\n    return wrap;\r\n  }\r\n\r\n  function renderSection(si: number): HTMLElement {\r\n    const section = model.sections[si];\r\n    const card = el('div', { class: 'rsm-form-section' });\r\n    const head = el('div', { class: 'rsm-form-section-head' });\r\n    head.append(el('span', { class: 'rsm-form-section-tag' }, ['區段']));\r\n    const nameInput = el('input', {\r\n      class: 'rsm-form-input',\r\n      type: 'text',\r\n      value: section.name ?? '',\r\n      placeholder: '區段名稱(可留空)',\r\n    }) as HTMLInputElement;\r\n    bindText(nameInput, (v) => {\r\n      section.name = v === '' ? null : v;\r\n    });\r\n    if (focusKey === `s:${si}`) setTimeout(() => nameInput.focus(), 0);\r\n    head.append(\r\n      nameInput,\r\n      iconBtn('↑', '上移區段', () => mutate(() => swap(model.sections, si, si - 1)), { disabled: si === 0 }),\r\n      iconBtn('↓', '下移區段', () => mutate(() => swap(model.sections, si, si + 1)), {\r\n        disabled: si === model.sections.length - 1,\r\n      }),\r\n      iconBtn('✕', '刪除區段', () => mutate(() => model.sections.splice(si, 1)), { danger: true }),\r\n    );\r\n    card.append(head);\r\n\r\n    section.periods.forEach((_, pi) => card.append(renderPeriod(section, pi)));\r\n    card.append(\r\n      addBtn('＋ 時間點', '', () =>\r\n        mutate(() => {\r\n          section.periods.push({ period: '', events: [] });\r\n          focusKey = `p:${section.name}:${section.periods.length - 1}`;\r\n        }),\r\n      ),\r\n    );\r\n    return card;\r\n  }\r\n\r\n  function renderForm(): void {\r\n    const consumedFocus = focusKey;\r\n    pane.replaceChildren();\r\n\r\n    const titleRow = el('div', { class: 'rsm-form-title-row' });\r\n    titleRow.append(el('label', {}, ['圖表標題']));\r\n    const titleInput = el('input', {\r\n      class: 'rsm-form-input',\r\n      type: 'text',\r\n      value: model.title ?? '',\r\n      placeholder: '時間軸顯示標題',\r\n    }) as HTMLInputElement;\r\n    bindText(titleInput, (v) => {\r\n      model.title = v;\r\n    });\r\n    titleRow.append(titleInput);\r\n    pane.append(titleRow);\r\n\r\n    model.sections.forEach((_, si) => pane.append(renderSection(si)));\r\n\r\n    pane.append(\r\n      addBtn('＋ 新增區段', 'rsm-form-add-section', () =>\r\n        mutate(() => {\r\n          model.sections.push({ name: '新區段', periods: [{ period: '時間點', events: ['事件'] }] });\r\n          focusKey = `s:${model.sections.length - 1}`;\r\n        }),\r\n      ),\r\n    );\r\n\r\n    if (consumedFocus === focusKey) focusKey = null; // 已消費(setTimeout 內聚焦)\r\n  }\r\n\r\n  function swap<T>(arr: T[], a: number, b: number): void {\r\n    if (a < 0 || b < 0 || a >= arr.length || b >= arr.length) return;\r\n    [arr[a], arr[b]] = [arr[b], arr[a]];\r\n  }\r\n\r\n  const handle: TimelineFormHandle = {\r\n    loadSource: (text) => {\r\n      model = parseTimeline(text);\r\n      undoStack.length = 0;\r\n      redoStack.length = 0;\r\n      renderForm();\r\n      emit('change');\r\n      emit('mermaidchange', serializeTimeline(model));\r\n      emitHistory();\r\n      void doRenderPreview();\r\n    },\r\n    toMermaid: () => serializeTimeline(model),\r\n    getModel: () => model,\r\n    undo: () => {\r\n      const prev = undoStack.pop();\r\n      if (!prev) return;\r\n      redoStack.push(clone(model));\r\n      model = prev;\r\n      hardSync();\r\n      emitHistory();\r\n    },\r\n    redo: () => {\r\n      const next = redoStack.pop();\r\n      if (!next) return;\r\n      undoStack.push(clone(model));\r\n      model = next;\r\n      hardSync();\r\n      emitHistory();\r\n    },\r\n    canUndo: () => undoStack.length > 0,\r\n    canRedo: () => redoStack.length > 0,\r\n    setDark: (d) => {\r\n      dark = d;\r\n      void doRenderPreview();\r\n    },\r\n    exportSvg: () => {\r\n      if (!lastPreviewSvg) return '';\r\n      const c = lastPreviewSvg.cloneNode(true) as SVGSVGElement;\r\n      c.removeAttribute('style');\r\n      return prepareSvgElement(c).serialized;\r\n    },\r\n    exportPng: async (rasterOpts) => {\r\n      if (!lastPreviewSvg) throw new Error('尚未產生預覽圖,無法匯出。');\r\n      const c = lastPreviewSvg.cloneNode(true) as SVGSVGElement;\r\n      c.removeAttribute('style');\r\n      flattenForeignObjects(c);\r\n      return rasterizeToBlob(prepareSvgElement(c), { ...rasterOpts, dark });\r\n    },\r\n    show: () => {\r\n      root.style.display = '';\r\n    },\r\n    hide: () => {\r\n      root.style.display = 'none';\r\n    },\r\n    isVisible: () => root.style.display !== 'none',\r\n    destroy: () => {\r\n      destroyed = true;\r\n      if (previewTimer) clearTimeout(previewTimer);\r\n      if (mermaidTimer) clearTimeout(mermaidTimer);\r\n      root.remove();\r\n    },\r\n  };\r\n\r\n  return handle;\r\n}\r\n","// 在已渲染的 mermaid SVG 裡定位「作者在原始碼寫的那個節點」。\r\n//\r\n// 原本只有繪圖編輯器的排版引擎需要這件事(讀 mermaid 算出的座標),現在檢查提示也要(掛角標),\r\n// 故抽成共用模組 —— 兩邊共用同一套 id 還原規則,避免各自維護一份而漂移。\r\n\r\n/**\r\n * mermaid 11 的節點 DOM id 形如 `<renderId>-flowchart-<作者id>-<n>`(例:rsm-1-flowchart-A-0)。\r\n * 先剝掉已知的 renderId 前綴,再用 `<型別>-<作者id>-<n>` 取出作者 id\r\n * (作者 id 可含連字號,故用貪婪 `(.+)` 搭配尾端 `-<數字>`)。\r\n */\r\nconst NODE_ID_RE = /^[A-Za-z][\\w]*-(.+)-\\d+$/;\r\n/**\r\n * 退路:少了型別那一段的 `<作者id>-<n>`。requirementDiagram 就是這種形狀\r\n * (`rsm-1-login_req-0`),用嚴格式會還原不出來,整張圖的節點就全部落在原點。\r\n */\r\nconst NODE_ID_RE_LOOSE = /^(.+)-\\d+$/;\r\n\r\n/** 從節點的 DOM id 還原作者在原始碼寫的 id;取不到回 undefined。 */\r\nexport function authorIdFromDomId(domId: string, renderId?: string): string | undefined {\r\n  const prefix = renderId ? `${renderId}-` : '';\r\n  const rest = prefix && domId.startsWith(prefix) ? domId.slice(prefix.length) : domId;\r\n  const m = rest.match(NODE_ID_RE) ?? rest.match(NODE_ID_RE_LOOSE);\r\n  return m ? m[1] : undefined;\r\n}\r\n\r\n/** 節點的可見文字(htmlLabels 與純 SVG 文字兩種渲染都涵蓋),用於以標籤比對。 */\r\nexport function nodeLabelText(el: Element): string {\r\n  return (el.textContent ?? '').replace(/\\s+/g, ' ').trim();\r\n}\r\n\r\n/** 可被掛提示的圖形元素層級。順序即優先序:一般節點 → 子圖 / 群組 → 序列圖角色。 */\r\nconst TARGETABLE = ['g.node[id]', 'g.cluster[id]', 'g.node', 'g.cluster', '.actor'] as const;\r\n\r\nexport interface FindNodeOptions {\r\n  /** 本次 render 的 id(mermaid 會把它當 DOM id 前綴)。 */\r\n  renderId?: string;\r\n  /** `id` = 比對作者 id(預設);`label` = 比對節點文字。 */\r\n  match?: 'id' | 'label';\r\n}\r\n\r\n/**\r\n * 依 target 找出圖上的節點元素。\r\n *\r\n * `match: 'id'` 先走精準的作者 id 還原;找不到時**退回標籤文字比對** —— 因為不同圖型\r\n * (序列圖角色、mindmap…)的 DOM id 規則不一致,退路讓提示在那些圖上仍可用。\r\n */\r\nexport function findDiagramNode(\r\n  svg: SVGSVGElement,\r\n  target: string,\r\n  opts: FindNodeOptions = {},\r\n): Element | undefined {\r\n  const wanted = target.trim();\r\n  if (!wanted) {\r\n    return undefined;\r\n  }\r\n\r\n  if (opts.match !== 'label') {\r\n    for (const selector of ['g.node[id]', 'g.cluster[id]'] as const) {\r\n      for (const el of Array.from(svg.querySelectorAll(selector))) {\r\n        if (authorIdFromDomId(el.id, opts.renderId) === wanted) {\r\n          return el;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  // 標籤比對:先找完全相同,再退回「包含」(圖上標籤常帶 <br/> 造成多餘空白)。\r\n  const lower = wanted.toLowerCase();\r\n  let loose: Element | undefined;\r\n  for (const selector of TARGETABLE) {\r\n    for (const el of Array.from(svg.querySelectorAll(selector))) {\r\n      const text = nodeLabelText(el).toLowerCase();\r\n      if (!text) {\r\n        continue;\r\n      }\r\n      if (text === lower) {\r\n        return el;\r\n      }\r\n      if (!loose && text.includes(lower)) {\r\n        loose = el;\r\n      }\r\n    }\r\n  }\r\n  return loose;\r\n}\r\n","// 純幾何工具(零 DOM):bbox、命中測試、節點周界錨點。場景座標系。\r\n\r\nimport type { EdgeAnchor, Point, SceneEdge, SceneNode } from './types';\r\n\r\nexport interface Rect {\r\n  x: number;\r\n  y: number;\r\n  w: number;\r\n  h: number;\r\n}\r\n\r\nexport function nodeRect(n: SceneNode): Rect {\r\n  return { x: n.x, y: n.y, w: n.w, h: n.h };\r\n}\r\n\r\n/**\r\n * draw.io 式的 8 個固定連線錨點(相對 bbox 的分數位置:4 邊中點 + 4 角)。\r\n * 拉線時可從來源錨點起、貼到目標錨點上,讓使用者「選擇連結位置」。\r\n */\r\nexport const PERIMETER_ANCHORS: ReadonlyArray<EdgeAnchor> = [\r\n  { fx: 0.5, fy: 0 }, // 上\r\n  { fx: 1, fy: 0 }, // 右上\r\n  { fx: 1, fy: 0.5 }, // 右\r\n  { fx: 1, fy: 1 }, // 右下\r\n  { fx: 0.5, fy: 1 }, // 下\r\n  { fx: 0, fy: 1 }, // 左下\r\n  { fx: 0, fy: 0.5 }, // 左\r\n  { fx: 0, fy: 0 }, // 左上\r\n];\r\n\r\n/** 固定錨點(分數)→ 場景座標。 */\r\nexport function anchorPoint(r: Rect, a: EdgeAnchor): Point {\r\n  return { x: r.x + r.w * a.fx, y: r.y + r.h * a.fy };\r\n}\r\n\r\n/** 兩錨點是否為同一格(用於高亮已吸附的候選點)。 */\r\nexport function sameAnchor(a: EdgeAnchor, b: EdgeAnchor): boolean {\r\n  return Math.abs(a.fx - b.fx) < 1e-6 && Math.abs(a.fy - b.fy) < 1e-6;\r\n}\r\n\r\n/** 僅 4 邊中點(不含角)。供「已選取節點」用:4 角已是縮放控制點,連線只取邊中點。 */\r\nexport const SIDE_ANCHORS: ReadonlyArray<EdgeAnchor> = PERIMETER_ANCHORS.filter(\r\n  (a) => a.fx === 0.5 || a.fy === 0.5,\r\n);\r\n\r\n/** 找出 world 點在容差(世界座標)內最靠近 rect 的哪個候選錨點;皆超出則回 null(=浮動)。 */\r\nexport function nearestAnchor(\r\n  r: Rect,\r\n  world: Point,\r\n  tolWorld: number,\r\n  candidates: ReadonlyArray<EdgeAnchor> = PERIMETER_ANCHORS,\r\n): EdgeAnchor | null {\r\n  let best: EdgeAnchor | null = null;\r\n  let bestD = tolWorld;\r\n  for (const a of candidates) {\r\n    const p = anchorPoint(r, a);\r\n    const d = Math.hypot(world.x - p.x, world.y - p.y);\r\n    if (d <= bestD) {\r\n      bestD = d;\r\n      best = a;\r\n    }\r\n  }\r\n  return best;\r\n}\r\n\r\nexport function rectCenter(r: Rect): Point {\r\n  return { x: r.x + r.w / 2, y: r.y + r.h / 2 };\r\n}\r\n\r\nexport function pointInRect(p: Point, r: Rect, pad = 0): boolean {\r\n  return p.x >= r.x - pad && p.x <= r.x + r.w + pad && p.y >= r.y - pad && p.y <= r.y + r.h + pad;\r\n}\r\n\r\n/** 兩矩形是否相交(AABB),供框選用。 */\r\nexport function rectsIntersect(a: Rect, b: Rect): boolean {\r\n  return !(a.x + a.w < b.x || b.x + b.w < a.x || a.y + a.h < b.y || b.y + b.h < a.y);\r\n}\r\n\r\n/** 矩形完全被另一矩形包住。 */\r\nexport function rectContains(outer: Rect, inner: Rect): boolean {\r\n  return (\r\n    inner.x >= outer.x &&\r\n    inner.y >= outer.y &&\r\n    inner.x + inner.w <= outer.x + outer.w &&\r\n    inner.y + inner.h <= outer.y + outer.h\r\n  );\r\n}\r\n\r\n/** 包住一組矩形的最小外框。 */\r\nexport function boundingBox(rects: Rect[]): Rect | null {\r\n  if (rects.length === 0) return null;\r\n  let minX = Infinity;\r\n  let minY = Infinity;\r\n  let maxX = -Infinity;\r\n  let maxY = -Infinity;\r\n  for (const r of rects) {\r\n    minX = Math.min(minX, r.x);\r\n    minY = Math.min(minY, r.y);\r\n    maxX = Math.max(maxX, r.x + r.w);\r\n    maxY = Math.max(maxY, r.y + r.h);\r\n  }\r\n  return { x: minX, y: minY, w: maxX - minX, h: maxY - minY };\r\n}\r\n\r\nexport function distance(a: Point, b: Point): number {\r\n  return Math.hypot(a.x - b.x, a.y - b.y);\r\n}\r\n\r\n/**\r\n * 從矩形中心朝 `toward` 方向射線,求與矩形邊界的交點(節點周界錨點)。\r\n * 用於連線端點貼齊節點外框,而非穿到中心。\r\n */\r\nexport function perimeterAnchor(r: Rect, toward: Point): Point {\r\n  const c = rectCenter(r);\r\n  const dx = toward.x - c.x;\r\n  const dy = toward.y - c.y;\r\n  if (dx === 0 && dy === 0) return c;\r\n  const halfW = r.w / 2;\r\n  const halfH = r.h / 2;\r\n  // 以中心為原點,找與四邊相交時最小的縮放比例 t。\r\n  const scaleX = dx === 0 ? Infinity : halfW / Math.abs(dx);\r\n  const scaleY = dy === 0 ? Infinity : halfH / Math.abs(dy);\r\n  const t = Math.min(scaleX, scaleY);\r\n  return { x: c.x + dx * t, y: c.y + dy * t };\r\n}\r\n\r\n/**\r\n * 形狀感知的周界錨點:diamond / circle / ellipse 用真實外形求交點(避免用 bbox 造成\r\n * 線與圖形之間留空隙);其餘外形用矩形 bbox 近似(足夠貼合)。\r\n */\r\nexport function shapeAnchor(node: SceneNode, toward: Point): Point {\r\n  const r = nodeRect(node);\r\n  const c = rectCenter(r);\r\n  const dx = toward.x - c.x;\r\n  const dy = toward.y - c.y;\r\n  if (dx === 0 && dy === 0) return c;\r\n  const a = r.w / 2;\r\n  const b = r.h / 2;\r\n  if (node.shape === 'diamond') {\r\n    // |x|/a + |y|/b = 1 沿射線解 t。\r\n    const t = 1 / (Math.abs(dx) / a + Math.abs(dy) / b);\r\n    return { x: c.x + dx * t, y: c.y + dy * t };\r\n  }\r\n  if (node.shape === 'circle' || node.shape === 'doubleCircle' || node.shape === 'ellipse') {\r\n    const t = 1 / Math.hypot(dx / a, dy / b);\r\n    return { x: c.x + dx * t, y: c.y + dy * t };\r\n  }\r\n  return perimeterAnchor(r, toward);\r\n}\r\n\r\n/** 一條邊的兩端錨點(以對方中心為朝向),供繪製與 hit-test。 */\r\nexport function edgeAnchors(\r\n  edge: SceneEdge,\r\n  source: SceneNode | undefined,\r\n  target: SceneNode | undefined,\r\n): { start: Point; end: Point } | null {\r\n  if (!source || !target) return null;\r\n  const sc = rectCenter(nodeRect(source));\r\n  const tc = rectCenter(nodeRect(target));\r\n  return {\r\n    start: shapeAnchor(source, tc),\r\n    end: shapeAnchor(target, sc),\r\n  };\r\n}\r\n\r\n/** 點到線段距離(供邊的 hit-test;搭配粗 hit path 也可純算)。 */\r\nexport function pointToSegment(p: Point, a: Point, b: Point): number {\r\n  const dx = b.x - a.x;\r\n  const dy = b.y - a.y;\r\n  const len2 = dx * dx + dy * dy;\r\n  if (len2 === 0) return distance(p, a);\r\n  let t = ((p.x - a.x) * dx + (p.y - a.y) * dy) / len2;\r\n  t = Math.max(0, Math.min(1, t));\r\n  return distance(p, { x: a.x + t * dx, y: a.y + t * dy });\r\n}\r\n\r\n/** 沿折線(多段)的最短點距。 */\r\nexport function pointToPolyline(p: Point, pts: Point[]): number {\r\n  if (pts.length === 0) return Infinity;\r\n  if (pts.length === 1) return distance(p, pts[0]);\r\n  let min = Infinity;\r\n  for (let i = 0; i < pts.length - 1; i++) {\r\n    min = Math.min(min, pointToSegment(p, pts[i], pts[i + 1]));\r\n  }\r\n  return min;\r\n}\r\n","// 節點「內容需要多大」的單一真相。\r\n//\r\n// class 框與 ER 實體框的隔間(標題列 / 成員列 / 屬性列)是本編輯器自己畫的,尺寸只有這裡算得準。\r\n// 先前有三份各自為政的估算:parse 時一份、controller 結構化編輯提交時一份,而排版階段又直接\r\n// 沿用 mermaid dagre 量出來的節點框 —— mermaid 是用它自己的字型與內距量的,結果框比內容高一大截,\r\n// 畫面上每個類別框 / 實體框底下都浮一塊死白。這裡集中定義,排版後也用它把尺寸校正回來。\r\n//\r\n// 常數對齊 scene-renderer 的 fillClassBox / fillErEntity 內聯樣式;改那邊的 padding / font 要一起改。\r\n\r\nimport type { ErAttribute, NodeData, RequirementData, SceneNode } from '../scene/types';\r\n\r\n/** 全形(CJK / 全形標點)視為 1em,其餘約 0.55em。用於免 DOM 的文字寬度估算。 */\r\nconst WIDE = /[ᄀ-ᅟ⺀-鿿가-힣豈-﫿︰-﹏＀-｠￠-￦]/;\r\n\r\nexport function textWidth(text: string, fontPx: number): number {\r\n  let w = 0;\r\n  for (const ch of text) w += WIDE.test(ch) ? fontPx : fontPx * 0.55;\r\n  return w;\r\n}\r\n\r\nconst widest = (rows: string[], fontPx: number): number =>\r\n  rows.reduce((m, r) => Math.max(m, textWidth(r, fontPx)), 0);\r\n\r\n// ── class ──────────────────────────────────────────────────────────────────\r\nconst CLASS_TITLE_FONT = 12;\r\nconst CLASS_ROW_FONT = 12;\r\nconst CLASS_LINE = 1.45;\r\nconst CLASS_TITLE_H = Math.round(CLASS_TITLE_FONT * CLASS_LINE) + 8; // padding 4px 上下\r\nconst CLASS_ROW_H = Math.round(CLASS_ROW_FONT * CLASS_LINE);\r\nconst CLASS_SECTION_PAD = 6; // padding 3px 上下\r\nconst CLASS_PAD_X = 16 + 10; // padding 8px 左右 + 一點寬鬆\r\n\r\nexport interface ClassBody {\r\n  members?: string[];\r\n  methods?: string[];\r\n  stereotype?: string;\r\n  generic?: string;\r\n}\r\n\r\nexport function classBoxSize(label: string, body: ClassBody | undefined): { w: number; h: number } {\r\n  const members = body?.members ?? [];\r\n  const methods = body?.methods ?? [];\r\n  const titleText = body?.generic ? `${label}<${body.generic}>` : label;\r\n  const titleLines = body?.stereotype ? 2 : 1;\r\n  const w = Math.max(\r\n    92,\r\n    Math.ceil(\r\n      Math.max(\r\n        textWidth(titleText, CLASS_TITLE_FONT) + 4,\r\n        textWidth(body?.stereotype ? `«${body.stereotype}»` : '', CLASS_TITLE_FONT),\r\n        widest([...members, ...methods], CLASS_ROW_FONT),\r\n      ) + CLASS_PAD_X,\r\n    ),\r\n  );\r\n  let h = CLASS_TITLE_H + (titleLines - 1) * CLASS_ROW_H;\r\n  if (members.length) h += CLASS_SECTION_PAD + members.length * CLASS_ROW_H;\r\n  if (methods.length) h += CLASS_SECTION_PAD + methods.length * CLASS_ROW_H;\r\n  // 只有標題的類別:留一點呼吸空間,但不要留出一整個空隔間。\r\n  if (!members.length && !methods.length) h += 8;\r\n  return { w, h: Math.ceil(h) + 2 };\r\n}\r\n\r\n// ── ER ─────────────────────────────────────────────────────────────────────\r\nconst ER_TITLE_FONT = 13;\r\nconst ER_ROW_FONT = 12;\r\nconst ER_TITLE_H = Math.round(ER_TITLE_FONT * 1.4) + 10; // padding 5px 上下\r\nconst ER_ROW_H = 20; // 對齊 fillErEntity 的 min-height\r\nconst ER_PAD_X = 16 + 10;\r\n\r\nexport function erEntitySize(label: string, attributes: readonly ErAttribute[]): { w: number; h: number } {\r\n  const rows = attributes.map((a) => {\r\n    const keys = a.keys && a.keys.length ? ` ${a.keys.join(',')}` : '';\r\n    const comment = a.comment ? `  ${a.comment}` : '';\r\n    return `${a.type ?? ''} ${a.name}${keys}${comment}`.trim();\r\n  });\r\n  const w = Math.max(\r\n    104,\r\n    Math.ceil(Math.max(textWidth(label, ER_TITLE_FONT) + 4, widest(rows, ER_ROW_FONT)) + ER_PAD_X),\r\n  );\r\n  const h = ER_TITLE_H + attributes.length * ER_ROW_H + (attributes.length ? 0 : 8);\r\n  return { w, h: Math.ceil(h) + 2 };\r\n}\r\n\r\n// ── requirement ────────────────────────────────────────────────────────────\r\nconst REQ_TITLE_FONT = 12;\r\nconst REQ_ROW_FONT = 11;\r\nconst REQ_KIND_H = 15; // «Requirement» 那一行\r\nconst REQ_TITLE_H = Math.round(REQ_TITLE_FONT * 1.4) + 8;\r\nconst REQ_ROW_H = Math.round(REQ_ROW_FONT * 1.45) + 2;\r\nconst REQ_PAD_X = 16 + 12;\r\n\r\n/** 需求框 / 元素框上要顯示的欄位列(渲染與量測共用,避免兩邊算出不同高度)。 */\r\nexport function requirementRows(req: RequirementData): string[] {\r\n  if (req.element) {\r\n    const rows = [`type: ${req.elementType ?? ''}`];\r\n    if (req.docRef) rows.push(`docRef: ${req.docRef}`);\r\n    return rows;\r\n  }\r\n  const rows: string[] = [];\r\n  if (req.reqId) rows.push(`id: ${req.reqId}`);\r\n  if (req.text) rows.push(`text: ${req.text}`);\r\n  if (req.risk) rows.push(`risk: ${req.risk}`);\r\n  if (req.verifyMethod) rows.push(`verify: ${req.verifyMethod}`);\r\n  return rows;\r\n}\r\n\r\n/** 需求框上方的類別標示(mermaid 也是這樣畫的:«Requirement» / «Element»)。 */\r\nexport function requirementKind(req: RequirementData): string {\r\n  if (req.element) return '«Element»';\r\n  const spaced = req.reqType.replace(/([A-Z])/g, ' $1');\r\n  return `«${spaced.charAt(0).toUpperCase()}${spaced.slice(1)}»`;\r\n}\r\n\r\nexport function requirementBoxSize(label: string, req: RequirementData): { w: number; h: number } {\r\n  const rows = requirementRows(req);\r\n  const kind = requirementKind(req);\r\n  const w = Math.max(\r\n    132,\r\n    Math.min(\r\n      320,\r\n      Math.ceil(\r\n        Math.max(\r\n          textWidth(label, REQ_TITLE_FONT) + 4,\r\n          textWidth(kind, REQ_ROW_FONT),\r\n          widest(rows, REQ_ROW_FONT),\r\n        ) + REQ_PAD_X,\r\n      ),\r\n    ),\r\n  );\r\n  const h = REQ_KIND_H + REQ_TITLE_H + (rows.length ? 6 + rows.length * REQ_ROW_H : 8);\r\n  return { w, h: Math.ceil(h) + 2 };\r\n}\r\n\r\n// ── C4 ─────────────────────────────────────────────────────────────────────\r\nconst C4_W = 190;\r\nconst C4_TITLE_FONT = 13;\r\nconst C4_META_FONT = 10.5;\r\nconst C4_ROW = 15;\r\n\r\n/** C4 元素框上的文字列(«型別» / 名稱 / [技術] / 說明);渲染與量測共用。 */\r\nexport function c4Lines(\r\n  label: string,\r\n  data: { c4Type: string; techn?: string; descr?: string },\r\n): { kind: string; title: string; techn?: string; descr?: string } {\r\n  const t = data.c4Type.replace(/^external_/, '').replace(/_/g, ' ');\r\n  const ext = data.c4Type.startsWith('external_') ? ', external' : '';\r\n  return {\r\n    kind: `«${t}${ext}»`,\r\n    title: label,\r\n    techn: data.techn ? `[${data.techn}]` : undefined,\r\n    descr: data.descr,\r\n  };\r\n}\r\n\r\n/** 說明文字在固定寬度下大約會佔幾行(免 DOM 的粗估;寧可多算一行也不要被裁掉)。 */\r\nfunction wrapRows(text: string | undefined, fontPx: number, innerW: number): number {\r\n  if (!text) return 0;\r\n  return Math.max(1, Math.ceil(textWidth(text, fontPx) / innerW));\r\n}\r\n\r\nexport function c4BoxSize(\r\n  label: string,\r\n  data: { c4Type: string; techn?: string; descr?: string },\r\n): { w: number; h: number } {\r\n  const parts = c4Lines(label, data);\r\n  const w = Math.max(C4_W, Math.ceil(textWidth(label, C4_TITLE_FONT) + 32));\r\n  const inner = w - 24;\r\n  // 人物圖示頂端多留一點高度(頭像圓)。圓半徑 10 + 上緣 2 → 內容從 y=20 起算,\r\n  // 這裡只需補上圓突出框內的那一段,補太多框上方就會空一塊。\r\n  const head = data.c4Type.includes('person') ? 20 : 0;\r\n  const rows =\r\n    wrapRows(parts.kind, C4_META_FONT, inner) +\r\n    wrapRows(parts.title, C4_TITLE_FONT, inner) +\r\n    wrapRows(parts.techn, C4_META_FONT, inner) +\r\n    wrapRows(parts.descr, C4_META_FONT, inner);\r\n  return { w, h: Math.max(74, head + 16 + rows * C4_ROW) };\r\n}\r\n\r\n/**\r\n * 依節點內容算出它「該有」的尺寸。只有隔間框(class / er / requirement)有自己的內容模型;\r\n * 其餘外形交給排版引擎 / 使用者拖曳決定,回傳 null 表示「不要動它」。\r\n */\r\nexport function contentSize(node: { label: string; data?: NodeData }): { w: number; h: number } | null {\r\n  const d = node.data;\r\n  if (d?.kind === 'class') return classBoxSize(node.label, d);\r\n  if (d?.kind === 'er') return erEntitySize(node.label, d.attributes);\r\n  if (d?.kind === 'requirement') return requirementBoxSize(node.label, d.req);\r\n  if (d?.kind === 'c4') return c4BoxSize(node.label, d);\r\n  return null;\r\n}\r\n\r\n/** 把一個節點的尺寸校正成內容尺寸,並維持原本的中心點(排版引擎給的位置不變)。 */\r\nexport function fitToContent(node: SceneNode): SceneNode {\r\n  const size = contentSize(node);\r\n  if (!size) return node;\r\n  const cx = node.x + node.w / 2;\r\n  const cy = node.y + node.h / 2;\r\n  return { ...node, x: cx - size.w / 2, y: cy - size.h / 2, w: size.w, h: size.h };\r\n}\r\n","// 預設排版引擎:重用既有 render-pipeline 把場景序列化的 mermaid 渲染到隱藏 host,\r\n// 讀回 mermaid 自身(dagre)算出的節點座標。零新依賴、mermaid-faithful。\r\n\r\nimport { assertBrowser } from '../../../env';\r\nimport { loadMermaid } from '../../load-mermaid';\r\nimport { authorIdFromDomId, nodeLabelText } from '../../node-index';\r\nimport { renderToSvg } from '../../render-pipeline';\r\nimport { boundingBox, type Rect } from '../scene/geometry';\r\nimport { fitToContent } from '../render/node-metrics';\r\nimport type { EditorScene, SceneNode } from '../scene/types';\r\nimport type { LayoutContext, LayoutEngine } from './types';\r\n\r\nconst PADDING = 40;\r\n\r\n/** 取元素在 SVG root 座標系中的中心點與尺寸(假設無縮放,mermaid useMaxWidth:false 成立)。 */\r\nfunction readBox(g: SVGGraphicsElement): { cx: number; cy: number; w: number; h: number } | null {\r\n  let bb: DOMRect;\r\n  try {\r\n    bb = g.getBBox();\r\n  } catch {\r\n    return null;\r\n  }\r\n  const ctm = g.getCTM();\r\n  if (!ctm) return { cx: bb.x + bb.width / 2, cy: bb.y + bb.height / 2, w: bb.width, h: bb.height };\r\n  const c = new DOMPoint(bb.x + bb.width / 2, bb.y + bb.height / 2).matrixTransform(ctm);\r\n  return { cx: c.x, cy: c.y, w: bb.width, h: bb.height };\r\n}\r\n\r\n/**\r\n * 內建後援排版:依容器分組,每組排成格狀,組與組之間上下堆疊。\r\n *\r\n * 只在「向 mermaid 問座標失敗」時用。刻意做得簡單且**確定性** —— 它的工作不是排得漂亮,\r\n * 而是保證每個元素都在畫面上、各自分開、可以被拖到使用者要的位置。\r\n */\r\nfunction gridLayout(scene: EditorScene): EditorScene {\r\n  const GAP_X = 46;\r\n  const GAP_Y = 40;\r\n  const GROUP_GAP = 56;\r\n  const byParent = new Map<string | null, SceneNode[]>();\r\n  for (const n of scene.nodes) {\r\n    const p = n.parentId ?? null;\r\n    byParent.set(p, [...(byParent.get(p) ?? []), n]);\r\n  }\r\n  const placed = new Map<string, { x: number; y: number }>();\r\n  let cursorY = PADDING;\r\n  // 先排根層,再依序排每個容器(容器本身的框由 renderer 依子節點 bbox 算)。\r\n  const groups: Array<string | null> = [null, ...scene.containers.map((c) => c.id)];\r\n  for (const gid of groups) {\r\n    const list = byParent.get(gid) ?? [];\r\n    if (!list.length) continue;\r\n    const cols = Math.max(1, Math.min(3, Math.ceil(Math.sqrt(list.length))));\r\n    const colW = Math.max(...list.map((n) => n.w)) + GAP_X;\r\n    const rowH = Math.max(...list.map((n) => n.h)) + GAP_Y;\r\n    list.forEach((n, i) => {\r\n      placed.set(n.id, {\r\n        x: PADDING + (i % cols) * colW,\r\n        y: cursorY + Math.floor(i / cols) * rowH,\r\n      });\r\n    });\r\n    cursorY += Math.ceil(list.length / cols) * rowH + GROUP_GAP;\r\n  }\r\n  return {\r\n    ...scene,\r\n    nodes: scene.nodes.map((n) => {\r\n      const p = placed.get(n.id);\r\n      return p ? { ...n, x: p.x, y: p.y } : n;\r\n    }),\r\n    layoutOwner: 'user',\r\n  };\r\n}\r\n\r\nexport const mermaidSvgLayout: LayoutEngine = {\r\n  async layout(scene: EditorScene, ctx: LayoutContext): Promise<EditorScene> {\r\n    assertBrowser('mermaidSvgLayout');\r\n    // 空場景 / 空白原始碼:mermaid render 會丟 \"No diagram type detected\"。無需排版,原樣返回\r\n    // (空白畫布提示會顯示),避免載入空 / 純空白圖時拋例外。\r\n    if (scene.nodes.length === 0 || !ctx.code.trim()) return scene;\r\n    const mermaid = await loadMermaid({ source: ctx.mermaid });\r\n\r\n    // pristine 渲染(htmlLabels:false)→ 節點是 <rect>,getBBox 可靠。\r\n    const { svgString, id: renderId } = await renderToSvg({\r\n      code: ctx.code,\r\n      theme: 'default',\r\n      dark: false,\r\n      seed: 42,\r\n      mermaid,\r\n      pristine: true,\r\n    });\r\n\r\n    // 掛到隱藏但仍會排版的 host(visibility:hidden,非 display:none)。\r\n    const host = document.createElement('div');\r\n    host.style.cssText = 'position:absolute;left:-99999px;top:0;visibility:hidden;width:2000px;height:2000px;';\r\n    host.innerHTML = svgString;\r\n    document.body.appendChild(host);\r\n\r\n    const positions = new Map<string, { cx: number; cy: number; w: number; h: number }>();\r\n    try {\r\n      const svg = host.querySelector('svg');\r\n      if (svg) {\r\n        const spare: Array<{ text: string; box: NonNullable<ReturnType<typeof readBox>> }> = [];\r\n        svg.querySelectorAll<SVGGElement>('g.node[id]').forEach((g) => {\r\n          const box = readBox(g);\r\n          if (!box) return;\r\n          const author = authorIdFromDomId(g.id, renderId);\r\n          if (author) positions.set(author, box);\r\n          spare.push({ text: nodeLabelText(g), box });\r\n        });\r\n        // 退路:用「節點文字含這個 id / label」對。各圖種的 DOM id 規則不一致,萬一 id 還原失敗,\r\n        // 沒有這條退路整張圖會全部疊在原點(比錯位難看得多)。\r\n        for (const n of scene.nodes) {\r\n          if (positions.has(n.id)) continue;\r\n          const key = (n.label || n.id).trim();\r\n          const hit = key ? spare.find((s) => s.text.includes(key)) : undefined;\r\n          if (hit) positions.set(n.id, hit.box);\r\n        }\r\n      }\r\n    } finally {\r\n      host.remove();\r\n    }\r\n\r\n    if (positions.size === 0) {\r\n      // 有些圖種(C4 等)的渲染器不吐 `g.node[id]`,一個座標都抓不到 —— 原樣返回代表整張圖疊在\r\n      // 原點,比排得不完美難看得多。改用內建的簡單分組排版,至少每個元素都看得到、拖得動。\r\n      return gridLayout(scene);\r\n    }\r\n\r\n    // 正規化:平移使最小左上角落在 (PADDING, PADDING)。\r\n    let minX = Infinity;\r\n    let minY = Infinity;\r\n    for (const [, b] of positions) {\r\n      minX = Math.min(minX, b.cx - b.w / 2);\r\n      minY = Math.min(minY, b.cy - b.h / 2);\r\n    }\r\n    const shiftX = PADDING - minX;\r\n    const shiftY = PADDING - minY;\r\n\r\n    // mermaid 以自身字型量節點;編輯器標籤用較大的 14px → 短標籤(如 \"DB\")可能在抓到的\r\n    // 框內換行。對每個節點以編輯器字型估一個下限,只把過窄/過矮者撐大(不縮小 mermaid 佈局)。\r\n    const labelMin = (label: string): { w: number; h: number } => {\r\n      const lines = label.split(/<br\\s*\\/?>|\\n/);\r\n      const longest = lines.reduce((m, s) => Math.max(m, s.length), 0);\r\n      return { w: longest * 9 + 22, h: lines.length * 19 + 14 };\r\n    };\r\n    const nodes: SceneNode[] = scene.nodes.map((n) => {\r\n      const b = positions.get(n.id);\r\n      if (!b) return n;\r\n      const min = n.label ? labelMin(n.label) : { w: 0, h: 0 };\r\n      const placed: SceneNode = {\r\n        ...n,\r\n        x: b.cx - b.w / 2 + shiftX,\r\n        y: b.cy - b.h / 2 + shiftY,\r\n        w: Math.max(b.w, min.w),\r\n        h: Math.max(b.h, min.h),\r\n      };\r\n      // class / er 的隔間框是本編輯器自己畫的:mermaid 是用它自己的字型與內距量的,直接沿用\r\n      // 會讓框比內容高一大截(框底浮一塊死白)。位置照 mermaid 的,尺寸校正回內容尺寸。\r\n      return fitToContent(placed);\r\n    });\r\n\r\n    // 容器幾何:由子節點 bounding box + padding 推得(比抓 cluster id 穩健)。\r\n    const byId = new Map(nodes.map((n) => [n.id, n] as const));\r\n    const containers = scene.containers.map((c) => {\r\n      const childRects: Rect[] = c.childNodeIds\r\n        .map((cid) => byId.get(cid))\r\n        .filter((n): n is SceneNode => Boolean(n))\r\n        .map((n) => ({ x: n.x, y: n.y, w: n.w, h: n.h }));\r\n      const bb = boundingBox(childRects);\r\n      if (!bb) return c;\r\n      const pad = 24;\r\n      return { ...c, x: bb.x - pad, y: bb.y - pad - 18, w: bb.w + pad * 2, h: bb.h + pad * 2 + 18 };\r\n    });\r\n\r\n    return { ...scene, nodes, containers, layoutOwner: 'user' };\r\n  },\r\n};\r\n","// 命令 + 歷史(undo/redo)。命令為純函式:scene → { scene, patch }。\r\n// 歷史保存 before/after 兩個不可變場景(diagram 不大,快照成本低)+ patch(增量重繪提示)。\r\n\r\nimport type {\r\n  EdgeAnchor,\r\n  EdgeData,\r\n  EditorScene,\r\n  ElementStyle,\r\n  LineKind,\r\n  NodeData,\r\n  NodeShape,\r\n  Point,\r\n  SceneContainer,\r\n  SceneEdge,\r\n  SceneNode,\r\n  SeqStatement,\r\n} from '../scene/types';\r\nimport {\r\n  addEdge,\r\n  addNode,\r\n  deleteEdges,\r\n  deleteNodes,\r\n  groupIntoContainer,\r\n  moveNodes,\r\n  reconnectEdge,\r\n  resizeNode,\r\n  setLabel,\r\n  setShape,\r\n} from '../scene/scene-ops';\r\n\r\n/** 增量重繪提示:哪些 id 變了。structural=true 代表拓樸變動(需重繞邊 / 重建)。 */\r\nexport interface ScenePatch {\r\n  nodes?: string[];\r\n  edges?: string[];\r\n  containers?: string[];\r\n  structural?: boolean;\r\n}\r\n\r\nexport interface CommandResult {\r\n  scene: EditorScene;\r\n  patch: ScenePatch;\r\n}\r\n\r\n/** 命令 = 給定場景算出新場景 + patch 的純函式。 */\r\nexport type Command = (scene: EditorScene) => CommandResult;\r\n\r\n// ── 命令工廠 ──\r\n\r\nexport function cmdAddNode(node: SceneNode): Command {\r\n  return (scene) => ({ scene: addNode(scene, node), patch: { nodes: [node.id], structural: true } });\r\n}\r\n\r\nexport function cmdAddEdge(edge: SceneEdge): Command {\r\n  return (scene) => ({ scene: addEdge(scene, edge), patch: { edges: [edge.id], structural: true } });\r\n}\r\n\r\n/** 拖線到空白處 → 一步新增「節點 + 連到它的邊」(draw.io 招牌操作),只算一次 undo。 */\r\nexport function cmdAddConnectedNode(node: SceneNode, edge: SceneEdge): Command {\r\n  return (scene) => ({\r\n    scene: addEdge(addNode(scene, node), edge),\r\n    patch: { nodes: [node.id], edges: [edge.id], structural: true },\r\n  });\r\n}\r\n\r\n/** 一次加入多個節點 + 邊(複製 / 貼上 用),只算一次 undo。 */\r\nexport function cmdAddElements(nodes: SceneNode[], edges: SceneEdge[]): Command {\r\n  return (scene) => ({\r\n    scene: { ...scene, nodes: [...scene.nodes, ...nodes], edges: [...scene.edges, ...edges] },\r\n    patch: { nodes: nodes.map((n) => n.id), edges: edges.map((e) => e.id), structural: true },\r\n  });\r\n}\r\n\r\nexport function cmdMoveNodes(ids: string[], dx: number, dy: number): Command {\r\n  const set = new Set(ids);\r\n  return (scene) => {\r\n    const next = moveNodes(scene, set, dx, dy);\r\n    // 受影響的邊 = 任一端在 ids 內。\r\n    const edges = next.edges.filter((e) => set.has(e.source) || set.has(e.target)).map((e) => e.id);\r\n    return { scene: next, patch: { nodes: ids, edges } };\r\n  };\r\n}\r\n\r\nexport function cmdResizeNode(id: string, rect: { x: number; y: number; w: number; h: number }): Command {\r\n  return (scene) => {\r\n    const next = resizeNode(scene, id, rect);\r\n    const edges = next.edges.filter((e) => e.source === id || e.target === id).map((e) => e.id);\r\n    return { scene: next, patch: { nodes: [id], edges } };\r\n  };\r\n}\r\n\r\nexport function cmdSetLabel(id: string, label: string): Command {\r\n  return (scene) => ({ scene: setLabel(scene, id, label), patch: { nodes: [id], edges: [id] } });\r\n}\r\n\r\nexport function cmdSetShape(id: string, shape: NodeShape): Command {\r\n  return (scene) => ({ scene: setShape(scene, id, shape), patch: { nodes: [id] } });\r\n}\r\n\r\n/** 設定節點內聯樣式(底色 / 框線)。 */\r\nexport function cmdSetNodeStyle(id: string, patch: Partial<ElementStyle>): Command {\r\n  return (scene) => ({\r\n    scene: {\r\n      ...scene,\r\n      nodes: scene.nodes.map((n) => (n.id === id ? { ...n, style: { ...n.style, ...patch } } : n)),\r\n    },\r\n    patch: { nodes: [id] },\r\n  });\r\n}\r\n\r\nexport type AlignAxis = 'left' | 'centerX' | 'right' | 'top' | 'middleY' | 'bottom';\r\n\r\n/** 對齊多個選取節點到共同邊/中線。 */\r\nexport function cmdAlignNodes(ids: string[], axis: AlignAxis): Command {\r\n  return (scene) => {\r\n    const sel = scene.nodes.filter((n) => ids.includes(n.id));\r\n    if (sel.length < 2) return { scene, patch: {} };\r\n    const minX = Math.min(...sel.map((n) => n.x));\r\n    const maxR = Math.max(...sel.map((n) => n.x + n.w));\r\n    const minY = Math.min(...sel.map((n) => n.y));\r\n    const maxB = Math.max(...sel.map((n) => n.y + n.h));\r\n    const idset = new Set(ids);\r\n    const nodes = scene.nodes.map((n) => {\r\n      if (!idset.has(n.id)) return n;\r\n      switch (axis) {\r\n        case 'left':\r\n          return { ...n, x: minX };\r\n        case 'right':\r\n          return { ...n, x: maxR - n.w };\r\n        case 'centerX':\r\n          return { ...n, x: (minX + maxR) / 2 - n.w / 2 };\r\n        case 'top':\r\n          return { ...n, y: minY };\r\n        case 'bottom':\r\n          return { ...n, y: maxB - n.h };\r\n        default:\r\n          return { ...n, y: (minY + maxB) / 2 - n.h / 2 };\r\n      }\r\n    });\r\n    return { scene: { ...scene, nodes }, patch: { nodes: ids } };\r\n  };\r\n}\r\n\r\nexport function cmdReconnectEdge(\r\n  edgeId: string,\r\n  endpoint: 'source' | 'target',\r\n  nodeId: string,\r\n  anchor?: EdgeAnchor | null,\r\n): Command {\r\n  return (scene) => ({\r\n    scene: reconnectEdge(scene, edgeId, endpoint, nodeId, anchor),\r\n    patch: { edges: [edgeId], structural: true },\r\n  });\r\n}\r\n\r\nexport function cmdDeleteSelection(nodeIds: string[], edgeIds: string[]): Command {\r\n  const nset = new Set(nodeIds);\r\n  const eset = new Set(edgeIds);\r\n  return (scene) => {\r\n    let next = scene;\r\n    const removedEdgeIds: string[] = [...edgeIds];\r\n    if (nset.size > 0) {\r\n      const res = deleteNodes(next, nset);\r\n      next = res.scene;\r\n      for (const e of res.removedEdges) removedEdgeIds.push(e.id);\r\n    }\r\n    if (eset.size > 0) next = deleteEdges(next, eset);\r\n    return { scene: next, patch: { nodes: nodeIds, edges: removedEdgeIds, structural: true } };\r\n  };\r\n}\r\n\r\nexport function cmdGroup(container: SceneContainer): Command {\r\n  return (scene) => ({\r\n    scene: groupIntoContainer(scene, container),\r\n    patch: { containers: [container.id], nodes: container.childNodeIds, structural: true },\r\n  });\r\n}\r\n\r\n/** sequence:新增參與者(附加一欄,座標沿用 parse 的欄位佈局 GAP=56)。 */\r\nexport function cmdAddSeqParticipant(): Command {\r\n  return (scene) => {\r\n    if (!scene.sequence) return { scene, patch: {} };\r\n    const ids = new Set(scene.sequence.participants.map((p) => p.id));\r\n    let n = 1;\r\n    while (ids.has(`P${n}`)) n += 1;\r\n    const id = `P${n}`;\r\n    const label = id;\r\n    const w = Math.max(96, label.length * 9 + 28);\r\n    const seqNodes = scene.nodes.filter((x) => x.data?.kind === 'sequence');\r\n    const last = seqNodes[seqNodes.length - 1];\r\n    const x = last ? last.x + last.w + 56 : 40;\r\n    const node: SceneNode = {\r\n      id,\r\n      shape: 'participant',\r\n      label,\r\n      x,\r\n      y: 12,\r\n      w,\r\n      h: 40,\r\n      data: { kind: 'sequence', actor: false },\r\n      sourceIndex: scene.nodes.length,\r\n    };\r\n    return {\r\n      scene: {\r\n        ...scene,\r\n        nodes: [...scene.nodes, node],\r\n        sequence: { ...scene.sequence, participants: [...scene.sequence.participants, { id, label, actor: false }] },\r\n      },\r\n      patch: { structural: true },\r\n    };\r\n  };\r\n}\r\n\r\n/** sequence:新增一條訊息(預設在前兩個參與者之間)。 */\r\nexport function cmdAddSeqMessage(): Command {\r\n  return (scene) => {\r\n    if (!scene.sequence || scene.sequence.participants.length === 0) return { scene, patch: {} };\r\n    const ps = scene.sequence.participants;\r\n    const from = ps[0].id;\r\n    const to = ps[Math.min(1, ps.length - 1)].id;\r\n    const statements = [\r\n      ...scene.sequence.statements,\r\n      { kind: 'message' as const, from, to, arrow: '->>', text: 'message' },\r\n    ];\r\n    return { scene: { ...scene, sequence: { ...scene.sequence, statements } }, patch: { structural: true } };\r\n  };\r\n}\r\n\r\n/**\r\n * sequence:在指定位置插入一則訊息(拖曳繪製用)。\r\n *\r\n * 與 cmdAddSeqMessage 的差別在「插在哪」:拖曳是從一條生命線拉到另一條,落點的垂直位置\r\n * 就是使用者想插入的時間點,所以必須能插在中間,而不是一律附加到最後。\r\n * index 以 statements 陣列為準(含 note / loop / alt 等非訊息陳述),超界會夾到合法區間。\r\n */\r\nexport function cmdInsertSeqMessage(\r\n  from: string,\r\n  to: string,\r\n  index: number,\r\n  arrow = '->>',\r\n  text = 'message',\r\n): Command {\r\n  return (scene) => {\r\n    if (!scene.sequence) return { scene, patch: {} };\r\n    const ids = new Set(scene.sequence.participants.map((p) => p.id));\r\n    if (!ids.has(from) || !ids.has(to)) return { scene, patch: {} };\r\n    const statements = [...scene.sequence.statements];\r\n    const i = Math.max(0, Math.min(index, statements.length));\r\n    statements.splice(i, 0, { kind: 'message' as const, from, to, arrow, text });\r\n    return { scene: { ...scene, sequence: { ...scene.sequence, statements } }, patch: { structural: true } };\r\n  };\r\n}\r\n\r\n/** sequence:新增 note(預設 over 第一位參與者;新增後可直接編輯文字)。 */\r\nexport function cmdAddSeqNote(): Command {\r\n  return (scene) => {\r\n    if (!scene.sequence || scene.sequence.participants.length === 0) return { scene, patch: {} };\r\n    const actors = scene.sequence.participants[0].id;\r\n    const statements = [\r\n      ...scene.sequence.statements,\r\n      { kind: 'note' as const, placement: 'over' as const, actors, text: 'note' },\r\n    ];\r\n    return { scene: { ...scene, sequence: { ...scene.sequence, statements } }, patch: { structural: true } };\r\n  };\r\n}\r\n\r\n/** sequence:刪除參與者(同步移除鏡像 node、相關訊息,並重排剩餘欄位)。 */\r\nexport function cmdDeleteSeqParticipant(id: string): Command {\r\n  return (scene) => {\r\n    if (!scene.sequence) return { scene, patch: {} };\r\n    const participants = scene.sequence.participants.filter((p) => p.id !== id);\r\n    const statements = scene.sequence.statements.filter(\r\n      (s) => s.kind !== 'message' || (s.from !== id && s.to !== id),\r\n    );\r\n    let px = 40;\r\n    const nodes = scene.nodes\r\n      .filter((n) => n.id !== id)\r\n      .map((n) => {\r\n        if (n.data?.kind !== 'sequence') return n;\r\n        const nn = { ...n, x: px };\r\n        px += n.w + 56;\r\n        return nn;\r\n      });\r\n    return {\r\n      scene: { ...scene, nodes, sequence: { ...scene.sequence, participants, statements } },\r\n      patch: { structural: true },\r\n    };\r\n  };\r\n}\r\n\r\n/** sequence:刪除某條陳述(訊息/note 等)。 */\r\nexport function cmdDeleteSeqStatement(index: number): Command {\r\n  return (scene) => {\r\n    if (!scene.sequence) return { scene, patch: {} };\r\n    const statements = scene.sequence.statements.filter((_, i) => i !== index);\r\n    return { scene: { ...scene, sequence: { ...scene.sequence, statements } }, patch: { structural: true } };\r\n  };\r\n}\r\n\r\n// 片段開頭關鍵字(與 round-trip/sequence/serialize.ts 的 OPENERS 同一份語意)。\r\n// 這裡不 import 是因為 commands 層只該依賴 scene/,不該反向依賴 round-trip 的序列化細節。\r\nconst SEQ_BLOCK_OPENERS = new Set(['loop', 'alt', 'opt', 'par', 'critical', 'break', 'rect', 'box']);\r\n\r\n/** 從 statements[start] 這個片段開頭往下數到配對的 end,回傳整個區塊的長度(含頭尾)。 */\r\nfunction seqBlockLength(statements: readonly SeqStatement[], start: number): number {\r\n  let depth = 0;\r\n  for (let i = start; i < statements.length; i += 1) {\r\n    const s = statements[i];\r\n    if (s.kind === 'fragment' && SEQ_BLOCK_OPENERS.has(s.keyword)) depth += 1;\r\n    else if (s.kind === 'end') {\r\n      depth -= 1;\r\n      if (depth <= 0) return i - start + 1;\r\n    }\r\n  }\r\n  return statements.length - start; // 沒有配對的 end(來源本來就不完整)→ 搬到尾巴為止。\r\n}\r\n\r\n/**\r\n * sequence:把某條陳述搬到新的時間位置,並(可選)換到另外兩條生命線之間。\r\n *\r\n * to 是「插入點」而非目的索引:與 cmdInsertSeqMessage 一致,指的是搬移前陣列中要插在誰前面。\r\n * 拖的若是 loop/alt/opt 這類片段開頭,單獨搬走會把配對的 end 留在原地、整段縮排爛掉,\r\n * 所以連同整個區塊一起搬;反過來抓著 end 拖則不動作 —— 要搬區塊請抓開頭,\r\n * 否則使用者一拖就能把 end 丟到自己的開頭前面,產生一份 mermaid 根本不吃的原始碼。\r\n *\r\n * retarget 是「跨水道」:一次拖曳同時改了時間位置與收發雙方時,兩件事必須在同一個指令裡完成,\r\n * 否則 undo 一次只退一半,使用者得按兩次才回得到原狀。\r\n */\r\nexport function cmdMoveSeqStatement(\r\n  from: number,\r\n  to: number,\r\n  retarget?: { from: string; to: string },\r\n): Command {\r\n  return (scene) => {\r\n    if (!scene.sequence) return { scene, patch: {} };\r\n    const statements = scene.sequence.statements;\r\n    if (from < 0 || from >= statements.length) return { scene, patch: {} };\r\n    const src = statements[from];\r\n    if (src.kind === 'end') return { scene, patch: {} };\r\n    const len = src.kind === 'fragment' && SEQ_BLOCK_OPENERS.has(src.keyword) ? seqBlockLength(statements, from) : 1;\r\n    const target = Math.max(0, Math.min(to, statements.length));\r\n    // 換水道只對訊息有意義(筆記綁的是 actors 欄位、片段根本沒有收發方),且兩端不能是同一位。\r\n    const ids = new Set(scene.sequence.participants.map((p) => p.id));\r\n    const canRetarget =\r\n      Boolean(retarget) &&\r\n      src.kind === 'message' &&\r\n      retarget!.from !== retarget!.to &&\r\n      ids.has(retarget!.from) &&\r\n      ids.has(retarget!.to) &&\r\n      (retarget!.from !== src.from || retarget!.to !== src.to);\r\n    const moved = !(target >= from && target <= from + len);\r\n    // 位置沒動、水道也沒換 → 這次拖曳什麼都沒發生,不留 undo 紀錄。\r\n    if (!moved && !canRetarget) return { scene, patch: {} };\r\n\r\n    let next = [...statements];\r\n    if (canRetarget) next[from] = { ...src, from: retarget!.from, to: retarget!.to };\r\n    if (moved) {\r\n      const cut = next.splice(from, len);\r\n      // 往下搬時,前面被抽走的 len 條會讓插入點整體上移。\r\n      next.splice(target > from ? target - len : target, 0, ...cut);\r\n    }\r\n    return { scene: { ...scene, sequence: { ...scene.sequence, statements: next } }, patch: { structural: true } };\r\n  };\r\n}\r\n\r\n/** sequence:切換某條訊息的實線/虛線箭頭(->> ↔ -->>)。 */\r\nexport function cmdToggleSeqArrow(index: number): Command {\r\n  return (scene) => {\r\n    if (!scene.sequence) return { scene, patch: {} };\r\n    const statements = scene.sequence.statements.map((s, i) =>\r\n      i === index && s.kind === 'message'\r\n        ? { ...s, arrow: s.arrow.includes('--') ? '->>' : '-->>' }\r\n        : s,\r\n    );\r\n    return { scene: { ...scene, sequence: { ...scene.sequence, statements } }, patch: { structural: true } };\r\n  };\r\n}\r\n\r\n/** sequence:改某條訊息 / note 的文字(scene.sequence.statements[index])。 */\r\nexport function cmdSetSeqMessageText(index: number, text: string): Command {\r\n  return (scene) => {\r\n    if (!scene.sequence) return { scene, patch: {} };\r\n    const statements = scene.sequence.statements.map((s, i) =>\r\n      i === index && (s.kind === 'message' || s.kind === 'note') ? { ...s, text } : s,\r\n    );\r\n    return { scene: { ...scene, sequence: { ...scene.sequence, statements } }, patch: { structural: true } };\r\n  };\r\n}\r\n\r\n/** sequence:改參與者顯示名(同步更新鏡像 node.label 與 scene.sequence.participants)。 */\r\nexport function cmdRenameSeqParticipant(id: string, label: string): Command {\r\n  return (scene) => {\r\n    if (!scene.sequence) return { scene, patch: {} };\r\n    return {\r\n      scene: {\r\n        ...scene,\r\n        nodes: scene.nodes.map((n) => (n.id === id ? { ...n, label } : n)),\r\n        sequence: {\r\n          ...scene.sequence,\r\n          participants: scene.sequence.participants.map((p) => (p.id === id ? { ...p, label } : p)),\r\n        },\r\n      },\r\n      patch: { nodes: [id], structural: true },\r\n    };\r\n  };\r\n}\r\n\r\n/**\r\n * sequence:把參與者移到新的欄位索引(左右換序)。targetIndex 為「移除被拖者後」的插入位置。\r\n * 同步重排 scene.sequence.participants、鏡像 nodes 的陣列順序與欄位 x(沿用 GAP=56 佈局),\r\n * 讓渲染 / 命中測試 / serialize 三者一致。serialize 會在順序無法由訊息推斷時補顯式宣告以鎖序。\r\n */\r\nexport function cmdReorderSeqParticipant(id: string, targetIndex: number): Command {\r\n  return (scene) => {\r\n    if (!scene.sequence) return { scene, patch: {} };\r\n    const parts = scene.sequence.participants;\r\n    const from = parts.findIndex((p) => p.id === id);\r\n    if (from < 0) return { scene, patch: {} };\r\n    const clamped = Math.max(0, Math.min(parts.length - 1, targetIndex));\r\n    if (clamped === from) return { scene, patch: {} };\r\n    const nextParts = [...parts];\r\n    const [moved] = nextParts.splice(from, 1);\r\n    nextParts.splice(clamped, 0, moved);\r\n    // 依新序取回鏡像 node 並重算欄位 x(x0=40, GAP=56,與 parse / cmdAdd 一致)。\r\n    const byId = new Map(scene.nodes.map((n) => [n.id, n] as const));\r\n    let px = 40;\r\n    const relaid: SceneNode[] = [];\r\n    for (const p of nextParts) {\r\n      const n = byId.get(p.id);\r\n      if (!n) continue;\r\n      relaid.push({ ...n, x: px });\r\n      px += n.w + 56;\r\n    }\r\n    const nonSeq = scene.nodes.filter((n) => n.data?.kind !== 'sequence');\r\n    return {\r\n      scene: {\r\n        ...scene,\r\n        nodes: [...relaid, ...nonSeq],\r\n        sequence: { ...scene.sequence, participants: nextParts },\r\n      },\r\n      patch: { nodes: relaid.map((n) => n.id), structural: true },\r\n    };\r\n  };\r\n}\r\n\r\n/** 新增一個容器(看板 / 旅程圖的欄位;不含任何子節點)。 */\r\nexport function cmdAddContainer(container: SceneContainer): Command {\r\n  return (scene) => ({\r\n    scene: { ...scene, containers: [...scene.containers, container] },\r\n    patch: { containers: [container.id], structural: true },\r\n  });\r\n}\r\n\r\n/** 改容器標籤(看板欄名 / 旅程圖 section 名)。 */\r\nexport function cmdSetContainerLabel(id: string, label: string): Command {\r\n  return (scene) => ({\r\n    scene: { ...scene, containers: scene.containers.map((c) => (c.id === id ? { ...c, label } : c)) },\r\n    patch: { containers: [id], structural: true },\r\n  });\r\n}\r\n\r\n/** 刪除容器(連同它目前涵蓋的子節點一起,語意上等於「刪掉這一欄」)。 */\r\nexport function cmdDeleteContainer(id: string, childIds: string[]): Command {\r\n  const kill = new Set(childIds);\r\n  return (scene) => ({\r\n    scene: {\r\n      ...scene,\r\n      containers: scene.containers.filter((c) => c.id !== id),\r\n      nodes: scene.nodes.filter((n) => !kill.has(n.id)),\r\n      edges: scene.edges.filter((e) => !kill.has(e.source) && !kill.has(e.target)),\r\n    },\r\n    patch: { structural: true },\r\n  });\r\n}\r\n\r\n/** 設定連線的型別專屬資料(需求圖的關係種類 / ER 基數等)。 */\r\nexport function cmdSetEdgeData(edgeId: string, data: EdgeData): Command {\r\n  return (scene) => ({\r\n    scene: { ...scene, edges: scene.edges.map((e) => (e.id === edgeId ? { ...e, data } : e)) },\r\n    patch: { edges: [edgeId], structural: true },\r\n  });\r\n}\r\n\r\n/** 設定節點的 label + data(+ 重算尺寸)。供 ER 屬性 / class 成員結構化編輯。 */\r\nexport function cmdSetNodeData(\r\n  id: string,\r\n  patch: { label?: string; data?: NodeData; w?: number; h?: number },\r\n): Command {\r\n  return (scene) => ({\r\n    scene: {\r\n      ...scene,\r\n      nodes: scene.nodes.map((n) =>\r\n        n.id === id\r\n          ? {\r\n              ...n,\r\n              label: patch.label ?? n.label,\r\n              data: patch.data ?? n.data,\r\n              w: patch.w ?? n.w,\r\n              h: patch.h ?? n.h,\r\n            }\r\n          : n,\r\n      ),\r\n    },\r\n    patch: { nodes: [id] },\r\n  });\r\n}\r\n\r\n/** 解除群組:移除容器,並清掉其子節點的 parentId(節點本身保留)。 */\r\nexport function cmdUngroup(containerId: string): Command {\r\n  return (scene) => ({\r\n    scene: {\r\n      ...scene,\r\n      containers: scene.containers.filter((c) => c.id !== containerId),\r\n      nodes: scene.nodes.map((n) => (n.parentId === containerId ? { ...n, parentId: undefined } : n)),\r\n    },\r\n    patch: { structural: true },\r\n  });\r\n}\r\n\r\n/** 均分:把 3+ 個選取節點在水平('h')或垂直('v')方向等距分佈(頭尾固定)。 */\r\nexport function cmdDistributeNodes(ids: string[], axis: 'h' | 'v'): Command {\r\n  return (scene) => {\r\n    const sel = scene.nodes.filter((n) => ids.includes(n.id));\r\n    if (sel.length < 3) return { scene, patch: {} };\r\n    const cOf = (n: SceneNode): number => (axis === 'h' ? n.x + n.w / 2 : n.y + n.h / 2);\r\n    const sorted = [...sel].sort((a, b) => cOf(a) - cOf(b));\r\n    const firstC = cOf(sorted[0]);\r\n    const lastC = cOf(sorted[sorted.length - 1]);\r\n    const step = (lastC - firstC) / (sorted.length - 1);\r\n    const target = new Map<string, number>();\r\n    sorted.forEach((n, i) => target.set(n.id, firstC + step * i));\r\n    const nodes = scene.nodes.map((n) => {\r\n      const c = target.get(n.id);\r\n      if (c == null) return n;\r\n      return axis === 'h' ? { ...n, x: c - n.w / 2 } : { ...n, y: c - n.h / 2 };\r\n    });\r\n    return { scene: { ...scene, nodes }, patch: { nodes: ids } };\r\n  };\r\n}\r\n\r\nexport function cmdSetDirection(direction: 'TB' | 'TD' | 'BT' | 'LR' | 'RL'): Command {\r\n  return (scene) => {\r\n    // flowchart / state / class / er 的序列化都會輸出 `direction`(flowchart 是寫在標頭)。\r\n    // 先前只放行 flowchart,於是狀態圖 / 類別圖 / ER 圖的方向下拉是顆死按鈕。\r\n    const m = scene.meta;\r\n    if (m.type !== 'flowchart' && m.type !== 'state' && m.type !== 'class' && m.type !== 'er') {\r\n      return { scene, patch: {} };\r\n    }\r\n    return { scene: { ...scene, meta: { ...m, direction } }, patch: { structural: true } };\r\n  };\r\n}\r\n\r\n/**\r\n * 把節點掛到新的父節點底下(或解除,parentId=undefined)。\r\n *\r\n * mindmap 沒有連線語法,階層完全由 parentId 決定 → 在心智圖上「拉一條線」語意上就是改父子關係。\r\n * 會擋掉會造成循環的接法(把節點掛到自己的後代之下),否則序列化會無窮遞迴。\r\n */\r\nexport function cmdSetParent(nodeId: string, parentId: string | undefined): Command {\r\n  return (scene) => {\r\n    const node = scene.nodes.find((n) => n.id === nodeId);\r\n    if (!node || nodeId === parentId) return { scene, patch: {} };\r\n    // 循環偵測:沿著 parentId 往上爬,若遇到 nodeId 代表 parent 是它的後代。\r\n    let cur = parentId;\r\n    const seen = new Set<string>();\r\n    while (cur) {\r\n      if (cur === nodeId) return { scene, patch: {} };\r\n      if (seen.has(cur)) break;\r\n      seen.add(cur);\r\n      cur = scene.nodes.find((n) => n.id === cur)?.parentId ?? undefined;\r\n    }\r\n    return {\r\n      scene: { ...scene, nodes: scene.nodes.map((n) => (n.id === nodeId ? { ...n, parentId } : n)) },\r\n      patch: { structural: true },\r\n    };\r\n  };\r\n}\r\n\r\nexport function cmdAddWaypoint(edgeId: string, waypoints: Point[]): Command {\r\n  return (scene) => ({\r\n    scene: { ...scene, edges: scene.edges.map((e) => (e.id === edgeId ? { ...e, waypoints } : e)) },\r\n    patch: { edges: [edgeId] },\r\n  });\r\n}\r\n\r\nexport function cmdSetLineKind(edgeId: string, lineKind: LineKind): Command {\r\n  return (scene) => ({\r\n    scene: { ...scene, edges: scene.edges.map((e) => (e.id === edgeId ? { ...e, lineKind } : e)) },\r\n    patch: { edges: [edgeId] },\r\n  });\r\n}\r\n\r\n/** 一次設定連線樣式(線型 / 箭頭),供右鍵選單用。 */\r\nexport function cmdSetEdgeStyle(\r\n  edgeId: string,\r\n  patch: Partial<Pick<SceneEdge, 'lineKind' | 'arrowStart' | 'arrowEnd'>>,\r\n): Command {\r\n  return (scene) => ({\r\n    scene: { ...scene, edges: scene.edges.map((e) => (e.id === edgeId ? { ...e, ...patch } : e)) },\r\n    patch: { edges: [edgeId] },\r\n  });\r\n}\r\n\r\n/** 批次設定多條連線的樣式(線型 / 箭頭),只算一次 undo。供工具列「套用到選取連線」。 */\r\nexport function cmdSetEdgesStyle(\r\n  edgeIds: string[],\r\n  patch: Partial<Pick<SceneEdge, 'lineKind' | 'arrowStart' | 'arrowEnd'>>,\r\n): Command {\r\n  const set = new Set(edgeIds);\r\n  return (scene) => ({\r\n    scene: { ...scene, edges: scene.edges.map((e) => (set.has(e.id) ? { ...e, ...patch } : e)) },\r\n    patch: { edges: edgeIds },\r\n  });\r\n}\r\n\r\n// ── 歷史 ──\r\n\r\ninterface HistoryEntry {\r\n  before: EditorScene;\r\n  after: EditorScene;\r\n  patch: ScenePatch;\r\n  label: string;\r\n}\r\n\r\nconst MAX_HISTORY = 200;\r\n\r\nexport class History {\r\n  private undoStack: HistoryEntry[] = [];\r\n  private redoStack: HistoryEntry[] = [];\r\n\r\n  /** 套用命令,推入歷史。回傳新場景 + patch。 */\r\n  run(scene: EditorScene, command: Command, label: string): CommandResult {\r\n    const { scene: after, patch } = command(scene);\r\n    this.undoStack.push({ before: scene, after, patch, label });\r\n    if (this.undoStack.length > MAX_HISTORY) this.undoStack.shift();\r\n    this.redoStack = [];\r\n    return { scene: after, patch };\r\n  }\r\n\r\n  /**\r\n   * 合併到上一筆(相同 label,如連續拖曳):把 after/patch 換掉,before 維持原本。\r\n   * 若上一筆 label 不符則退化為一般 run。\r\n   */\r\n  amend(scene: EditorScene, command: Command, label: string): CommandResult {\r\n    const last = this.undoStack[this.undoStack.length - 1];\r\n    if (!last || last.label !== label) return this.run(scene, command, label);\r\n    const { scene: after, patch } = command(last.before);\r\n    last.after = after;\r\n    last.patch = mergePatch(last.patch, patch);\r\n    this.redoStack = [];\r\n    return { scene: after, patch: last.patch };\r\n  }\r\n\r\n  canUndo(): boolean {\r\n    return this.undoStack.length > 0;\r\n  }\r\n  canRedo(): boolean {\r\n    return this.redoStack.length > 0;\r\n  }\r\n\r\n  undo(): { scene: EditorScene; patch: ScenePatch } | null {\r\n    const entry = this.undoStack.pop();\r\n    if (!entry) return null;\r\n    this.redoStack.push(entry);\r\n    return { scene: entry.before, patch: entry.patch };\r\n  }\r\n\r\n  redo(): { scene: EditorScene; patch: ScenePatch } | null {\r\n    const entry = this.redoStack.pop();\r\n    if (!entry) return null;\r\n    this.undoStack.push(entry);\r\n    return { scene: entry.after, patch: entry.patch };\r\n  }\r\n\r\n  clear(): void {\r\n    this.undoStack = [];\r\n    this.redoStack = [];\r\n  }\r\n}\r\n\r\nfunction mergePatch(a: ScenePatch, b: ScenePatch): ScenePatch {\r\n  return {\r\n    nodes: [...new Set([...(a.nodes ?? []), ...(b.nodes ?? [])])],\r\n    edges: [...new Set([...(a.edges ?? []), ...(b.edges ?? [])])],\r\n    containers: [...new Set([...(a.containers ?? []), ...(b.containers ?? [])])],\r\n    structural: a.structural || b.structural,\r\n  };\r\n}\r\n","// 純場景操作:全部回傳「新場景」(immutable),不就地修改。\r\n// 命令層(commands.ts)在此之上包 inverse 與 undo/redo。\r\n\r\nimport type {\r\n  ArrowHead,\r\n  EdgeAnchor,\r\n  EditorScene,\r\n  LineKind,\r\n  NodeShape,\r\n  Point,\r\n  SceneContainer,\r\n  SceneEdge,\r\n  SceneNode,\r\n} from './types';\r\nimport type { Rect } from './geometry';\r\nimport { anchorPoint, boundingBox, nodeRect, perimeterAnchor, rectCenter, shapeAnchor } from './geometry';\r\nimport { PLOT } from '../round-trip/quadrant/model';\r\nimport { XY as XY_PLOT } from '../round-trip/xychart';\r\n\r\nlet nodeCounter = 0;\r\nlet edgeCounter = 0;\r\n\r\n/** 產生確定性的新節點 id(n1, n2, …)。不由 label 衍生 → 改名不動 id。 */\r\nexport function nextNodeId(scene: EditorScene): string {\r\n  const taken = new Set(scene.nodes.map((n) => n.id));\r\n  do {\r\n    nodeCounter += 1;\r\n  } while (taken.has(`n${nodeCounter}`));\r\n  return `n${nodeCounter}`;\r\n}\r\n\r\nexport function nextEdgeId(scene: EditorScene): string {\r\n  const taken = new Set(scene.edges.map((e) => e.id));\r\n  do {\r\n    edgeCounter += 1;\r\n  } while (taken.has(`e${edgeCounter}`));\r\n  return `e${edgeCounter}`;\r\n}\r\n\r\n/** 測試用:重置流水號(讓 id 可預期)。 */\r\nexport function _resetIdCounters(): void {\r\n  nodeCounter = 0;\r\n  edgeCounter = 0;\r\n}\r\n\r\nexport function getNode(scene: EditorScene, id: string): SceneNode | undefined {\r\n  return scene.nodes.find((n) => n.id === id);\r\n}\r\n\r\n// 容器外框內距(對齊 scene-renderer.renderContainers,讓連到容器的邊錨在實際畫出的框上)。\r\nconst C_PAD = 18;\r\nconst C_LABEL_H = 22;\r\n\r\n/**\r\n * 容器(複合狀態 / subgraph / 泳道)外框矩形:遞迴涵蓋子節點 + 子容器 + 內距。\r\n *\r\n * 這是「容器畫出來多大」的**唯一**定義 —— 渲染、符合畫面、匯出 SVG 都走這裡。\r\n * 先前渲染器另外抄了一份同樣的算式,結果是任何一邊調內距,框線就會和點擊 / 裁切範圍對不上。\r\n */\r\nexport function containerRect(scene: EditorScene, id: string): Rect | null {\r\n  const c = scene.containers.find((k) => k.id === id);\r\n  if (!c) return null;\r\n  // 看板的欄與 git 線圖的分支是**固定泳道**,不是「包住小孩的框」:空的泳道也必須畫得出來\r\n  // (不然拖不進去),寬度也不該隨裡面幾張卡片而忽長忽短。所以直接用容器自己的幾何。\r\n  if (scene.diagramType === 'kanban' || scene.diagramType === 'gitgraph') {\r\n    return { x: c.x, y: c.y, w: c.w, h: c.h };\r\n  }\r\n  const rects = c.childNodeIds\r\n    .map((cid) => getNode(scene, cid))\r\n    .filter((n): n is SceneNode => Boolean(n))\r\n    .map(nodeRect);\r\n  for (const sub of scene.containers) {\r\n    if (sub.parentId === id) {\r\n      const sr = containerRect(scene, sub.id);\r\n      if (sr) rects.push(sr);\r\n    }\r\n  }\r\n  const bb = boundingBox(rects);\r\n  if (!bb) return null;\r\n  // architecture 的服務名稱掛在方塊**外面**下方(方塊本身要等於節點框,連線才接得上),\r\n  // 所以群組下緣要多讓一截,否則最底下那排名稱會壓在群組邊框上。\r\n  const bottom = scene.diagramType === 'architecture' ? C_PAD + 26 : C_PAD;\r\n  return {\r\n    x: bb.x - C_PAD,\r\n    y: bb.y - C_PAD - C_LABEL_H,\r\n    w: bb.w + C_PAD * 2,\r\n    h: bb.h + C_PAD + bottom + C_LABEL_H,\r\n  };\r\n}\r\n\r\n/**\r\n * 一張圖「實際畫出來多大」:節點 + 容器框。\r\n *\r\n * 容器框比裡面的節點大一圈,標題還畫在框的上緣 —— 只量節點的話,「符合畫面」與匯出 SVG\r\n * 都會把群組名稱、泳道欄名切在畫面外。\r\n */\r\nexport function sceneRects(scene: EditorScene): Rect[] {\r\n  const containerRects = scene.containers\r\n    .map((c) => containerRect(scene, c.id))\r\n    .filter((r): r is Rect => Boolean(r));\r\n  return [...scene.nodes.map(nodeRect), ...containerRects];\r\n}\r\n\r\n/**\r\n * 邊的兩端錨點,支援節點 *與容器*(複合狀態)端點。容器端用矩形周界錨點。\r\n * 端點若設了固定錨點(edge.sourceAnchor / targetAnchor,draw.io 式)則用該點;\r\n * 否則維持「動態朝對端」的浮動錨。一端固定、另一端浮動時,浮動端朝固定點(而非對端中心)。\r\n */\r\nexport function resolveEdgeAnchors(\r\n  scene: EditorScene,\r\n  edge: SceneEdge,\r\n): { start: Point; end: Point } | null {\r\n  const sNode = getNode(scene, edge.source);\r\n  const tNode = getNode(scene, edge.target);\r\n  const sRect = sNode ? nodeRect(sNode) : containerRect(scene, edge.source);\r\n  const tRect = tNode ? nodeRect(tNode) : containerRect(scene, edge.target);\r\n  if (!sRect || !tRect) return null;\r\n  const sFixed = edge.sourceAnchor ? anchorPoint(sRect, edge.sourceAnchor) : null;\r\n  const tFixed = edge.targetAnchor ? anchorPoint(tRect, edge.targetAnchor) : null;\r\n  const sRef = sFixed ?? rectCenter(sRect);\r\n  const tRef = tFixed ?? rectCenter(tRect);\r\n  return {\r\n    start: sFixed ?? (sNode ? shapeAnchor(sNode, tRef) : perimeterAnchor(sRect, tRef)),\r\n    end: tFixed ?? (tNode ? shapeAnchor(tNode, sRef) : perimeterAnchor(tRect, sRef)),\r\n  };\r\n}\r\n\r\nexport function getEdge(scene: EditorScene, id: string): SceneEdge | undefined {\r\n  return scene.edges.find((e) => e.id === id);\r\n}\r\n\r\nexport function addNode(scene: EditorScene, node: SceneNode): EditorScene {\r\n  return { ...scene, nodes: [...scene.nodes, node] };\r\n}\r\n\r\nexport function addEdge(scene: EditorScene, edge: SceneEdge): EditorScene {\r\n  return { ...scene, edges: [...scene.edges, edge] };\r\n}\r\n\r\n/** 建立一個帶預設尺寸的新節點(尚未加入場景)。 */\r\nexport function makeNode(\r\n  id: string,\r\n  at: Point,\r\n  opts: { shape?: NodeShape; label?: string; w?: number; h?: number } = {},\r\n): SceneNode {\r\n  const w = opts.w ?? 120;\r\n  const h = opts.h ?? 56;\r\n  return {\r\n    id,\r\n    shape: opts.shape ?? 'rectangle',\r\n    label: opts.label ?? '',\r\n    x: at.x - w / 2,\r\n    y: at.y - h / 2,\r\n    w,\r\n    h,\r\n    data: { kind: 'flowchart' },\r\n  };\r\n}\r\n\r\nexport function makeEdge(\r\n  id: string,\r\n  source: string,\r\n  target: string,\r\n  opts: {\r\n    label?: string;\r\n    lineKind?: LineKind;\r\n    arrowStart?: ArrowHead;\r\n    arrowEnd?: ArrowHead;\r\n    sourceAnchor?: EdgeAnchor;\r\n    targetAnchor?: EdgeAnchor;\r\n  } = {},\r\n): SceneEdge {\r\n  return {\r\n    id,\r\n    source,\r\n    target,\r\n    label: opts.label,\r\n    lineKind: opts.lineKind ?? 'solid',\r\n    arrowStart: opts.arrowStart ?? 'none',\r\n    arrowEnd: opts.arrowEnd ?? 'arrow',\r\n    sourceAnchor: opts.sourceAnchor,\r\n    targetAnchor: opts.targetAnchor,\r\n    data: { kind: 'flowchart' },\r\n  };\r\n}\r\n\r\n/** 平移一組節點(dx/dy);同時平移其後代容器幾何。 */\r\nexport function moveNodes(scene: EditorScene, ids: Set<string>, dx: number, dy: number): EditorScene {\r\n  // 象限圖的位置就是資料值(0..1),拖出繪圖區的部分序列化時會被夾住 ——\r\n  // 與其讓畫面上的點停在框外、存檔後卻跳回邊界,不如在拖曳當下就夾住。\r\n  // xychart 同理,而且它的 x 是分類軸:橫向自由移動沒有意義,所以只放行垂直方向。\r\n  const clamp =\r\n    scene.diagramType === 'quadrant' ? clampToPlot : scene.diagramType === 'xychart' ? clampToXyPlot : null;\r\n  return {\r\n    ...scene,\r\n    nodes: scene.nodes.map((n) => {\r\n      if (!ids.has(n.id)) return n;\r\n      const moved = { ...n, x: n.x + dx, y: n.y + dy };\r\n      return { ...(clamp ? clamp(moved, n.x) : moved), pinned: true };\r\n    }),\r\n  };\r\n}\r\n\r\n/** 把節點中心夾在象限圖的繪圖區內。 */\r\nfunction clampToPlot<T extends { x: number; y: number; w: number; h: number }>(n: T): T {\r\n  const cx = Math.min(PLOT.x + PLOT.w, Math.max(PLOT.x, n.x + n.w / 2));\r\n  const cy = Math.min(PLOT.y + PLOT.h, Math.max(PLOT.y, n.y + n.h / 2));\r\n  return { ...n, x: cx - n.w / 2, y: cy - n.h / 2 };\r\n}\r\n\r\n/** xychart:x 鎖回原本的欄位(分類軸),y 夾在繪圖區內。 */\r\nfunction clampToXyPlot<T extends { x: number; y: number; w: number; h: number }>(n: T, origX: number): T {\r\n  const cy = Math.min(XY_PLOT.y + XY_PLOT.h, Math.max(XY_PLOT.y, n.y + n.h / 2));\r\n  return { ...n, x: origX, y: cy - n.h / 2 };\r\n}\r\n\r\nexport function resizeNode(scene: EditorScene, id: string, rect: { x: number; y: number; w: number; h: number }): EditorScene {\r\n  return {\r\n    ...scene,\r\n    nodes: scene.nodes.map((n) => (n.id === id ? { ...n, ...rect, pinned: true } : n)),\r\n  };\r\n}\r\n\r\nexport function setLabel(scene: EditorScene, id: string, label: string): EditorScene {\r\n  const inNodes = scene.nodes.some((n) => n.id === id);\r\n  if (inNodes) {\r\n    return { ...scene, nodes: scene.nodes.map((n) => (n.id === id ? { ...n, label } : n)) };\r\n  }\r\n  return { ...scene, edges: scene.edges.map((e) => (e.id === id ? { ...e, label } : e)) };\r\n}\r\n\r\nexport function setShape(scene: EditorScene, id: string, shape: NodeShape): EditorScene {\r\n  return { ...scene, nodes: scene.nodes.map((n) => (n.id === id ? { ...n, shape } : n)) };\r\n}\r\n\r\nexport function reconnectEdge(\r\n  scene: EditorScene,\r\n  edgeId: string,\r\n  endpoint: 'source' | 'target',\r\n  nodeId: string,\r\n  anchor?: EdgeAnchor | null,\r\n): EditorScene {\r\n  // 重接時一併更新該端的固定錨點:吸附到候選點 → 設錨;放在節點本體 → 清成浮動。\r\n  const anchorKey = endpoint === 'source' ? 'sourceAnchor' : 'targetAnchor';\r\n  return {\r\n    ...scene,\r\n    edges: scene.edges.map((e) =>\r\n      e.id === edgeId ? { ...e, [endpoint]: nodeId, [anchorKey]: anchor ?? undefined } : e,\r\n    ),\r\n  };\r\n}\r\n\r\n/** 刪除節點 + 連帶刪除入射邊 + 從容器移除。回傳新場景 + 被刪除的邊(供 undo)。 */\r\nexport function deleteNodes(\r\n  scene: EditorScene,\r\n  ids: Set<string>,\r\n): { scene: EditorScene; removedEdges: SceneEdge[] } {\r\n  const removedEdges = scene.edges.filter((e) => ids.has(e.source) || ids.has(e.target));\r\n  const next: EditorScene = {\r\n    ...scene,\r\n    nodes: scene.nodes.filter((n) => !ids.has(n.id)),\r\n    edges: scene.edges.filter((e) => !ids.has(e.source) && !ids.has(e.target)),\r\n    containers: scene.containers.map((c) => ({\r\n      ...c,\r\n      childNodeIds: c.childNodeIds.filter((cid) => !ids.has(cid)),\r\n    })),\r\n  };\r\n  return { scene: next, removedEdges };\r\n}\r\n\r\nexport function deleteEdges(scene: EditorScene, ids: Set<string>): EditorScene {\r\n  return { ...scene, edges: scene.edges.filter((e) => !ids.has(e.id)) };\r\n}\r\n\r\n/** 把一組節點包進新的 subgraph 容器。 */\r\nexport function groupIntoContainer(\r\n  scene: EditorScene,\r\n  container: SceneContainer,\r\n): EditorScene {\r\n  const childSet = new Set(container.childNodeIds);\r\n  return {\r\n    ...scene,\r\n    containers: [...scene.containers, container],\r\n    nodes: scene.nodes.map((n) => (childSet.has(n.id) ? { ...n, parentId: container.id } : n)),\r\n  };\r\n}\r\n","// quadrantChart 的座標系:場景座標 ↔ 0..1 的資料值。\r\n//\r\n// 這張圖之所以特別適合「拖著畫」,是因為點的**位置就是它的值** —— 不像流程圖那樣位置只是排版。\r\n// 所以場景不另存 x/y 值:節點的 x/y 就是唯一真相,序列化時再換算回 [0.xx, 0.yy]。\r\n// 拖曳因此完全不必特別處理(cmdMoveNodes 改的 x/y 直接就是新值)。\r\n\r\nimport type { Point } from '../../scene/types';\r\n\r\n/** 繪圖區(場景座標)。四邊留白給軸標籤,尺寸取 mermaid 預設 chartWidth/Height 的觀感。 */\r\nexport const PLOT = { x: 90, y: 70, w: 520, h: 520 } as const;\r\n\r\n/** 點的命中方塊邊長(圓點本身只有 12px,太小不好抓)。 */\r\nexport const POINT_BOX = 26;\r\n\r\nconst clamp01 = (v: number): number => Math.min(1, Math.max(0, v));\r\n\r\n/** 0..1 值 → 場景座標(節點中心)。y 值 1 在上方,與圖表直覺一致。 */\r\nexport function valueToScene(qx: number, qy: number): Point {\r\n  return { x: PLOT.x + clamp01(qx) * PLOT.w, y: PLOT.y + (1 - clamp01(qy)) * PLOT.h };\r\n}\r\n\r\n/** 場景座標(節點中心)→ 0..1 值,夾在繪圖區內。 */\r\nexport function sceneToValue(cx: number, cy: number): { qx: number; qy: number } {\r\n  return {\r\n    qx: clamp01((cx - PLOT.x) / PLOT.w),\r\n    qy: clamp01(1 - (cy - PLOT.y) / PLOT.h),\r\n  };\r\n}\r\n\r\n/** 四個象限在場景座標的矩形(索引 0..3 對應 mermaid 的 quadrant-1..4)。 */\r\nexport function quadrantRects(): Array<{ x: number; y: number; w: number; h: number }> {\r\n  const hw = PLOT.w / 2;\r\n  const hh = PLOT.h / 2;\r\n  return [\r\n    { x: PLOT.x + hw, y: PLOT.y, w: hw, h: hh }, // quadrant-1 右上\r\n    { x: PLOT.x, y: PLOT.y, w: hw, h: hh }, // quadrant-2 左上\r\n    { x: PLOT.x, y: PLOT.y + hh, w: hw, h: hh }, // quadrant-3 左下\r\n    { x: PLOT.x + hw, y: PLOT.y + hh, w: hw, h: hh }, // quadrant-4 右下\r\n  ];\r\n}\r\n","// xychart-beta 的雙向 round-trip + 版面。\r\n//\r\n// 每個資料點是一個節點,**垂直位置就是它的值**:往上拖就是把數字調大。水平位置鎖在該類別的\r\n// 欄位中心(x 是分類軸,橫向自由移動沒有意義,只會讓人以為改到了別的東西)。\r\n//\r\n// 自己逐行解析:mermaid 的 xychart DB 只吐已經算成像素的繪圖指令,原始數值拿不回來。\r\n\r\nimport type { ParseResult, ParseWarning } from '../../adapters/types';\r\nimport type { DataLossWarning, SerializeResult } from '../../adapters/types';\r\nimport type { EditorScene, SceneNode, XyChartMeta } from '../../scene/types';\r\n\r\nexport const XY = { x: 90, y: 70, w: 620, h: 420 } as const;\r\nexport const POINT_BOX = 26;\r\n\r\n/** 第 i 個類別的欄位中心 x(共 n 個類別)。 */\r\nexport function bandX(i: number, n: number): number {\r\n  const band = XY.w / Math.max(1, n);\r\n  return XY.x + band * (i + 0.5);\r\n}\r\n\r\n/** x → 類別索引(拖到欄與欄之間時取最近的一欄)。 */\r\nexport function xToBand(x: number, n: number): number {\r\n  const band = XY.w / Math.max(1, n);\r\n  return Math.max(0, Math.min(n - 1, Math.floor((x - XY.x) / band)));\r\n}\r\n\r\nexport function valueToY(v: number, min: number, max: number): number {\r\n  const span = max - min || 1;\r\n  return XY.y + XY.h * (1 - (v - min) / span);\r\n}\r\n\r\nexport function yToValue(y: number, min: number, max: number): number {\r\n  const span = max - min || 1;\r\n  const v = min + (1 - (y - XY.y) / XY.h) * span;\r\n  // 兩位小數就夠了:再多只是把拖曳的浮點雜訊寫進使用者的檔案。\r\n  return Math.round(Math.min(max, Math.max(min, v)) * 100) / 100;\r\n}\r\n\r\n/** `[a, b, c]` → 字串陣列(去引號)。 */\r\nfunction parseList(text: string): string[] {\r\n  const inner = /^\\[(.*)\\]$/.exec(text.trim());\r\n  if (!inner) return [];\r\n  return inner[1]\r\n    .split(',')\r\n    .map((s) => s.trim().replace(/^[\"']|[\"']$/g, ''))\r\n    .filter((s) => s.length > 0);\r\n}\r\n\r\nconst strip = (s: string): string => s.trim().replace(/^[\"']|[\"']$/g, '');\r\n\r\nexport function xychartToScene(text: string): ParseResult {\r\n  const warnings: ParseWarning[] = [];\r\n  const comments: string[] = [];\r\n  const meta: XyChartMeta = { categories: [], series: [], yMin: 0, yMax: 100 };\r\n  let seenHeader = false;\r\n  let horizontal = false;\r\n\r\n  for (const raw of text.split('\\n')) {\r\n    const line = raw.trim();\r\n    if (!line) continue;\r\n    if (line.startsWith('%%')) {\r\n      comments.push(line);\r\n      continue;\r\n    }\r\n    if (!seenHeader) {\r\n      const h = /^xychart(-beta)?\\b(.*)$/i.exec(line);\r\n      if (h) {\r\n        seenHeader = true;\r\n        if (/horizontal/i.test(h[2])) horizontal = true;\r\n        continue;\r\n      }\r\n    }\r\n    const t = /^title\\s+(.*)$/i.exec(line);\r\n    if (t) {\r\n      meta.title = strip(t[1]);\r\n      continue;\r\n    }\r\n    const xa = /^x-axis\\s+(.*)$/i.exec(line);\r\n    if (xa) {\r\n      const rest = xa[1].trim();\r\n      if (rest.startsWith('[')) meta.categories = parseList(rest);\r\n      else {\r\n        // `x-axis \"標題\" [a, b]` 或數值區間 —— 標題以外的部分才是類別。\r\n        const br = rest.indexOf('[');\r\n        if (br >= 0) {\r\n          meta.xTitle = strip(rest.slice(0, br));\r\n          meta.categories = parseList(rest.slice(br));\r\n        } else {\r\n          meta.xTitle = strip(rest);\r\n        }\r\n      }\r\n      continue;\r\n    }\r\n    const ya = /^y-axis\\s+(.*)$/i.exec(line);\r\n    if (ya) {\r\n      const rest = ya[1].trim();\r\n      const range = /(-?[0-9.]+)\\s*-->\\s*(-?[0-9.]+)\\s*$/.exec(rest);\r\n      if (range) {\r\n        meta.yMin = Number(range[1]);\r\n        meta.yMax = Number(range[2]);\r\n        const head = rest.slice(0, range.index).trim();\r\n        if (head) meta.yTitle = strip(head);\r\n      } else {\r\n        meta.yTitle = strip(rest);\r\n      }\r\n      continue;\r\n    }\r\n    const s = /^(bar|line)\\s+(.*)$/i.exec(line);\r\n    if (s) {\r\n      const kind = s[1].toLowerCase() as 'bar' | 'line';\r\n      const rest = s[2].trim();\r\n      const br = rest.indexOf('[');\r\n      const name = br > 0 ? strip(rest.slice(0, br)) : undefined;\r\n      const values = parseList(br >= 0 ? rest.slice(br) : rest).map((v) => Number(v));\r\n      meta.series.push({ kind, name, values: values.map((v) => (Number.isFinite(v) ? v : 0)) });\r\n      continue;\r\n    }\r\n    warnings.push({ message: `略過看不懂的一行:${line}` });\r\n  }\r\n\r\n  if (!seenHeader) warnings.push({ message: '找不到 xychart-beta 標頭,已以空圖處理。' });\r\n  if (horizontal) {\r\n    warnings.push({ message: 'horizontal 版面尚未支援拖曳編輯,已改為唯讀。' });\r\n    return {\r\n      scene: {\r\n        version: 1,\r\n        diagramType: 'xychart',\r\n        meta: { type: 'xychart', xy: meta },\r\n        nodes: [],\r\n        edges: [],\r\n        containers: [],\r\n        raw: { comments, fullSource: text },\r\n        layoutOwner: 'user',\r\n      },\r\n      warnings,\r\n    };\r\n  }\r\n\r\n  // 類別數以最長的一組資料為準(x-axis 沒寫類別時就用序號)。\r\n  const n = Math.max(meta.categories.length, ...meta.series.map((s) => s.values.length), 1);\r\n  if (meta.categories.length === 0) meta.categories = Array.from({ length: n }, (_, i) => String(i + 1));\r\n\r\n  const nodes: SceneNode[] = [];\r\n  meta.series.forEach((series, si) => {\r\n    series.values.forEach((v, i) => {\r\n      const cx = bandX(i, n);\r\n      const cy = valueToY(v, meta.yMin, meta.yMax);\r\n      nodes.push({\r\n        id: `s${si}p${i}`,\r\n        shape: 'xyPoint',\r\n        label: '',\r\n        x: cx - POINT_BOX / 2,\r\n        y: cy - POINT_BOX / 2,\r\n        w: POINT_BOX,\r\n        h: POINT_BOX,\r\n        data: { kind: 'xy', series: si, index: i },\r\n        sourceIndex: si * 1000 + i,\r\n        pinned: true,\r\n      });\r\n    });\r\n  });\r\n\r\n  const scene: EditorScene = {\r\n    version: 1,\r\n    diagramType: 'xychart',\r\n    meta: { type: 'xychart', xy: meta },\r\n    nodes,\r\n    edges: [],\r\n    containers: [],\r\n    raw: { comments, fullSource: seenHeader ? undefined : text },\r\n    layoutOwner: 'user',\r\n  };\r\n  return { scene, warnings };\r\n}\r\n\r\nconst fmt = (v: number): string => String(Math.round(v * 100) / 100);\r\nconst quote = (s: string): string => (/^[A-Za-z0-9_.-]+$/.test(s) ? s : `\"${s.replace(/\"/g, '')}\"`);\r\n\r\nexport function sceneToXychart(scene: EditorScene): SerializeResult {\r\n  if (scene.nodes.length === 0 && scene.raw?.fullSource) {\r\n    return { text: scene.raw.fullSource, warnings: [] };\r\n  }\r\n  const warnings: DataLossWarning[] = [];\r\n  const meta = scene.meta.type === 'xychart' ? scene.meta.xy : undefined;\r\n  if (!meta) return { text: scene.raw?.fullSource ?? 'xychart-beta\\n', warnings };\r\n  const lines: string[] = [];\r\n  for (const c of scene.raw?.comments ?? []) {\r\n    if (c.trim().startsWith('%%{')) lines.push(c.trim());\r\n  }\r\n  lines.push('xychart-beta');\r\n  if (meta.title) lines.push(`    title ${quote(meta.title)}`);\r\n  lines.push(\r\n    `    x-axis ${meta.xTitle ? `${quote(meta.xTitle)} ` : ''}[${meta.categories.map(quote).join(', ')}]`,\r\n  );\r\n  lines.push(`    y-axis ${meta.yTitle ? `${quote(meta.yTitle)} ` : ''}${fmt(meta.yMin)} --> ${fmt(meta.yMax)}`);\r\n  for (const c of scene.raw?.comments ?? []) {\r\n    const t = c.trim();\r\n    if (t.startsWith('%%') && !t.startsWith('%%{')) lines.push(`    ${t}`);\r\n  }\r\n\r\n  // 值由節點的 y 決定(垂直拖曳就是在改數字)。\r\n  const n = Math.max(1, meta.categories.length);\r\n  meta.series.forEach((series, si) => {\r\n    const values = series.values.map((v, i) => {\r\n      const node = scene.nodes.find((x) => x.data?.kind === 'xy' && x.data.series === si && x.data.index === i);\r\n      return node ? yToValue(node.y + node.h / 2, meta.yMin, meta.yMax) : v;\r\n    });\r\n    void n;\r\n    lines.push(`    ${series.kind} ${series.name ? `${quote(series.name)} ` : ''}[${values.map(fmt).join(', ')}]`);\r\n  });\r\n\r\n  return { text: lines.join('\\n') + '\\n', warnings };\r\n}\r\n\r\n/** 「整理」= 把每個點放回它所屬類別的欄位中心(垂直位置 = 值,不動)。 */\r\nexport function layoutXychart(scene: EditorScene): EditorScene {\r\n  const meta = scene.meta.type === 'xychart' ? scene.meta.xy : undefined;\r\n  if (!meta) return scene;\r\n  const n = Math.max(1, meta.categories.length);\r\n  return {\r\n    ...scene,\r\n    nodes: scene.nodes.map((node) => {\r\n      if (node.data?.kind !== 'xy') return node;\r\n      const cx = bandX(node.data.index, n);\r\n      return { ...node, x: cx - node.w / 2 };\r\n    }),\r\n  };\r\n}\r\n","// 編輯畫布配色 —— 與「Edit Diagram」(Colorful 主題,core/themes/colorize.ts)**完全對齊**:\r\n// 同一組顏色 + 同一順序。Colorful 依節點 DOM 順序取 NODE_PALETTE[i%8],本編輯器依場景節點\r\n// 順序 paletteByIndex(i),兩者順序一致 → 同一節點在 Draw 與 Edit Diagram 得到相同顏色。\r\n\r\nexport interface PaletteEntry {\r\n  fill: string;\r\n  stroke: string;\r\n}\r\n\r\nexport const NODE_PALETTE: PaletteEntry[] = [\r\n  { fill: '#DBEAFE', stroke: '#3B82F6' }, // blue\r\n  { fill: '#DCFCE7', stroke: '#22C55E' }, // green\r\n  { fill: '#FFEDD5', stroke: '#F97316' }, // orange\r\n  { fill: '#F3E8FF', stroke: '#A855F7' }, // purple\r\n  { fill: '#FEE2E2', stroke: '#EF4444' }, // red\r\n  { fill: '#CFFAFE', stroke: '#06B6D4' }, // cyan\r\n  { fill: '#FEF9C3', stroke: '#EAB308' }, // yellow\r\n  { fill: '#EDE9FE', stroke: '#8B5CF6' }, // violet\r\n];\r\n\r\n// 叢集 / subgraph 底色(對齊 colorize.ts CLUSTER_PALETTE:同色相、16% 濃度)。\r\nexport const CLUSTER_PALETTE: PaletteEntry[] = [\r\n  { fill: 'rgba(59, 130, 246, 0.16)', stroke: '#3B82F6' },\r\n  { fill: 'rgba(34, 197, 94, 0.16)', stroke: '#22C55E' },\r\n  { fill: 'rgba(249, 115, 22, 0.16)', stroke: '#F97316' },\r\n  { fill: 'rgba(168, 85, 247, 0.16)', stroke: '#A855F7' },\r\n  { fill: 'rgba(239, 68, 68, 0.16)', stroke: '#EF4444' },\r\n  { fill: 'rgba(6, 182, 212, 0.16)', stroke: '#06B6D4' },\r\n  { fill: 'rgba(234, 179, 8, 0.16)', stroke: '#EAB308' },\r\n  { fill: 'rgba(139, 92, 246, 0.16)', stroke: '#8B5CF6' },\r\n];\r\n\r\n// 文字色對齊 colorize.ts NODE_TEXT。\r\nexport const INK = '#1F2937';\r\nexport const INK_DARK = '#e9ecef';\r\n\r\n/** 依容器順序取叢集底色(對齊 Edit Diagram 的 subgraph 上色)。 */\r\nexport function clusterByIndex(i: number): PaletteEntry {\r\n  const n = CLUSTER_PALETTE.length;\r\n  return CLUSTER_PALETTE[((i % n) + n) % n];\r\n}\r\n\r\n/** 字串 → 32-bit 雜湊(取色 / 取 seed 用,穩定且確定性)。 */\r\nexport function hashStr(s: string): number {\r\n  let h = 0;\r\n  for (let i = 0; i < s.length; i += 1) {\r\n    h = (h * 31 + s.charCodeAt(i)) | 0;\r\n  }\r\n  return h >>> 0;\r\n}\r\n\r\nexport function paletteFor(id: string): PaletteEntry {\r\n  return NODE_PALETTE[hashStr(id) % NODE_PALETTE.length];\r\n}\r\n\r\n/** 依節點順序(非雜湊)循序取色 → 相鄰節點色彩和諧,不像 hash 那樣亂跳。 */\r\nexport function paletteByIndex(i: number): PaletteEntry {\r\n  const n = NODE_PALETTE.length;\r\n  return NODE_PALETTE[((i % n) + n) % n];\r\n}\r\n\r\nexport function seedFor(id: string, base: number): number {\r\n  return (hashStr(id) ^ base) >>> 0;\r\n}\r\n","// C4 的元素型別 ↔ mermaid 關鍵字對照。\r\n//\r\n// mermaid 的 C4 DB 把型別存成蛇底線小寫(`external_container_db`),但語法關鍵字是駝峰加後綴\r\n// (`ContainerDb_Ext`)。兩邊用規則互轉,而不是列一張 20 幾筆的表 —— 少了任何一筆就會在\r\n// 序列化時默默把型別降級。\r\n\r\nimport type { NodeShape } from '../../scene/types';\r\n\r\nconst cap = (s: string): string => s.charAt(0).toUpperCase() + s.slice(1);\r\n\r\n/** `external_container_db` → `ContainerDb_Ext`。 */\r\nexport function c4Keyword(c4Type: string): string {\r\n  const ext = c4Type.startsWith('external_');\r\n  const base = ext ? c4Type.slice('external_'.length) : c4Type;\r\n  const name = base\r\n    .split('_')\r\n    .map((seg) => (seg === 'db' ? 'Db' : seg === 'queue' ? 'Queue' : cap(seg)))\r\n    .join('');\r\n  return ext ? `${name}_Ext` : name;\r\n}\r\n\r\n/** `ContainerDb_Ext` → `external_container_db`(解析器沒給型別時的反推;主要供手寫測試)。 */\r\nexport function c4TypeFromKeyword(keyword: string): string {\r\n  const ext = keyword.endsWith('_Ext');\r\n  const name = ext ? keyword.slice(0, -4) : keyword;\r\n  const snake = name.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toLowerCase();\r\n  return ext ? `external_${snake}` : snake;\r\n}\r\n\r\n/** 型別的引數順序:container / component 家族多一個「技術」欄位。 */\r\nexport function c4HasTechn(c4Type: string): boolean {\r\n  return /(^|_)(container|component|node)(_|$)/.test(c4Type);\r\n}\r\n\r\n/** 型別 → 場景外形(渲染用;細分型別仍存在 data.c4Type)。 */\r\nexport function c4Shape(c4Type: string): NodeShape {\r\n  if (c4Type.includes('person')) return 'c4Person';\r\n  if (c4Type.endsWith('_db')) return 'c4Db';\r\n  if (c4Type.endsWith('_queue')) return 'c4Queue';\r\n  return 'c4Box';\r\n}\r\n\r\n/** 工具列上的四顆按鈕 → 預設型別(其餘變體由右鍵切換)。 */\r\nexport const C4_SHAPE_DEFAULT_TYPE: Partial<Record<NodeShape, string>> = {\r\n  c4Person: 'person',\r\n  c4Box: 'system',\r\n  c4Db: 'system_db',\r\n  c4Queue: 'system_queue',\r\n};\r\n\r\n/** 邊界種類 → 關鍵字。 */\r\nexport function boundaryKeyword(type: string | undefined): string {\r\n  switch ((type ?? '').toUpperCase()) {\r\n    case 'ENTERPRISE':\r\n      return 'Enterprise_Boundary';\r\n    case 'SYSTEM':\r\n      return 'System_Boundary';\r\n    case 'CONTAINER':\r\n      return 'Container_Boundary';\r\n    case 'NODE':\r\n      return 'Node';\r\n    default:\r\n      return 'Boundary';\r\n  }\r\n}\r\n","// 「直向泳道」版面:欄橫排、卡片在欄內上下堆疊。看板與使用者旅程圖共用。\r\n//\r\n// 核心設計:**卡片屬於哪一欄由它的位置決定**,場景不另存 parentId。這類圖的主要編輯動作就是\r\n// 「把卡片拖到另一欄」,若同時維護座標與 parentId 兩份真相,拖曳就得同步兩邊,漏一邊就會出現\r\n// 「畫面在 A 欄、存檔卻在 B 欄」。序列化時依幾何判欄、依 y 排序,永遠與畫面一致。\r\n\r\nimport type { EditorScene, SceneContainer, SceneNode } from '../scene/types';\r\n\r\nexport const LANE = { x0: 40, y0: 40, w: 240, gap: 26, headerH: 44, pad: 16, cardGap: 12 } as const;\r\n// 卡片再內縮一點:卡片有陰影與左緣色條,貼著欄框畫會看起來像「溢出欄外」。\r\nexport const CARD = { w: LANE.w - LANE.pad * 2 - 4, minH: 46 } as const;\r\n\r\n/** 第 i 欄的矩形(高度由呼叫端依內容決定)。 */\r\nexport function laneRect(i: number, h: number): { x: number; y: number; w: number; h: number } {\r\n  return { x: LANE.x0 + i * (LANE.w + LANE.gap), y: LANE.y0, w: LANE.w, h };\r\n}\r\n\r\n/**\r\n * 依卡片中心點找出它落在哪一欄;落在欄與欄之間 / 圖外時取最近的一欄。\r\n * (欄 i 的卡片中心約在 i + 0.45 欄寬處,四捨五入正好回到 i。)\r\n */\r\nexport function laneIndexAt(cx: number, laneCount: number): number {\r\n  if (laneCount <= 0) return 0;\r\n  const rel = (cx - LANE.x0) / (LANE.w + LANE.gap);\r\n  return Math.max(0, Math.min(laneCount - 1, Math.round(rel)));\r\n}\r\n\r\n/** 第 i 欄裡卡片的左上角 x(供初始佈點)。 */\r\nexport function laneCardX(i: number): number {\r\n  return LANE.x0 + i * (LANE.w + LANE.gap) + LANE.pad;\r\n}\r\n\r\n/** 依幾何把卡片分到各欄,欄內依 y 排序。序列化與版面計算共用同一份判定。 */\r\nexport function bucketByLane(scene: EditorScene, lanes: SceneContainer[]): SceneNode[][] {\r\n  const buckets: SceneNode[][] = lanes.map(() => []);\r\n  if (lanes.length === 0) return buckets;\r\n  for (const n of scene.nodes) buckets[laneIndexAt(n.x + n.w / 2, lanes.length)].push(n);\r\n  for (const b of buckets) b.sort((a, c) => a.y - c.y);\r\n  return buckets;\r\n}\r\n\r\n/** 依 sourceIndex 取得穩定的欄順序。 */\r\nexport function sortedLanes(scene: EditorScene): SceneContainer[] {\r\n  return [...scene.containers].sort((a, b) => (a.sourceIndex ?? 0) - (b.sourceIndex ?? 0));\r\n}\r\n\r\n/** 把場景排成泳道版面:欄依序橫排、卡片在欄內依目前 y 的順序上下堆疊。 */\r\nexport function layoutLanes(scene: EditorScene): EditorScene {\r\n  const lanes = sortedLanes(scene);\r\n  if (lanes.length === 0) return scene;\r\n  const buckets = bucketByLane(scene, lanes);\r\n\r\n  const nodes: SceneNode[] = [];\r\n  const containers: SceneContainer[] = [];\r\n  let maxH = LANE.headerH + LANE.pad;\r\n  buckets.forEach((cards, i) => {\r\n    let y = LANE.y0 + LANE.headerH + LANE.pad;\r\n    const x = laneCardX(i);\r\n    for (const c of cards) {\r\n      nodes.push({ ...c, x, y, w: CARD.w, parentId: lanes[i].id, pinned: true });\r\n      y += c.h + LANE.cardGap;\r\n    }\r\n    maxH = Math.max(maxH, y - LANE.y0 + LANE.pad - LANE.cardGap);\r\n  });\r\n  buckets.forEach((cards, i) => {\r\n    containers.push({ ...lanes[i], ...laneRect(i, maxH), childNodeIds: cards.map((c) => c.id) });\r\n  });\r\n  return { ...scene, nodes, containers, layoutOwner: 'user' };\r\n}\r\n","// gitGraph 的雙向 round-trip + 版面。\r\n//\r\n// 關鍵觀察:gitGraph 的**父子關係是從指令順序推導出來的**,原始碼裡並沒有寫。所以只要留住\r\n// 「每個 commit 在哪一條分支、排第幾」,就能完整重建整份指令流 —— 而這兩件事正好就是\r\n// 「它在哪一列、在哪個水平位置」。因此橫向拖 = 改順序、縱向拖到別條泳道 = 改分支。\r\n//\r\n// 解析走 mermaid 的 DB(它已經把 branch / seq / type / tags 都算好);cherry-pick 這種\r\n// 目前還原不出來的指令一出現就整份原文回吐,降為唯讀。\r\n\r\nimport type { ParseResult, ParseWarning } from '../../adapters/types';\r\nimport type { DataLossWarning, SerializeResult } from '../../adapters/types';\r\nimport type { EditorScene, SceneContainer, SceneNode } from '../../scene/types';\r\nimport type { MermaidLike } from '../../../../types';\r\n\r\nexport const GIT = { x0: 120, y0: 70, dx: 130, laneH: 86, node: 40 } as const;\r\n\r\n/** mermaid 的 commit type 代碼。 */\r\nconst TYPE_NORMAL = 0;\r\nconst TYPE_REVERSE = 1;\r\nconst TYPE_HIGHLIGHT = 2;\r\nconst TYPE_MERGE = 3;\r\nconst TYPE_CHERRY_PICK = 4;\r\n\r\n/** 右鍵選單用的記號清單(merge 不在其中 —— 它由「有沒有來源分支」決定,不能隨手切)。 */\r\nexport const GIT_COMMIT_TYPES: Array<[number, string]> = [\r\n  [TYPE_NORMAL, '一般提交'],\r\n  [TYPE_HIGHLIGHT, '重點提交(實心)'],\r\n  [TYPE_REVERSE, '回退提交(打叉)'],\r\n];\r\n\r\n/** 新增一條分支泳道時的矩形(和 layoutGitgraph 用同一組常數)。 */\r\nexport function gitLaneRect(index: number, commitCount: number): { x: number; y: number; w: number; h: number } {\r\n  return {\r\n    x: GIT.x0 - 90,\r\n    y: GIT.y0 + index * GIT.laneH - GIT.laneH / 2,\r\n    w: 90 + Math.max(1, commitCount) * GIT.dx,\r\n    h: GIT.laneH,\r\n  };\r\n}\r\n\r\ninterface MermaidApiLike {\r\n  mermaidAPI?: { getDiagramFromText?: (t: string) => Promise<{ db?: unknown }> | { db?: unknown } };\r\n  getDiagramFromText?: (t: string) => Promise<{ db?: unknown }> | { db?: unknown };\r\n}\r\ninterface GitCommitLike {\r\n  id?: string;\r\n  message?: string;\r\n  seq?: number;\r\n  type?: number;\r\n  tags?: string[];\r\n  parents?: string[];\r\n  branch?: string;\r\n  customId?: boolean;\r\n}\r\ninterface GitDbLike {\r\n  getCommitsArray?: () => GitCommitLike[];\r\n  getBranchesAsObjArray?: () => Array<{ name?: string }>;\r\n}\r\n\r\nasync function getGitDb(text: string, mermaid: MermaidLike): Promise<GitDbLike | undefined> {\r\n  const api = mermaid as unknown as MermaidApiLike;\r\n  const fn = api.mermaidAPI?.getDiagramFromText ?? api.getDiagramFromText;\r\n  if (typeof fn !== 'function') return undefined;\r\n  try {\r\n    mermaid.initialize?.({ startOnLoad: false });\r\n  } catch {\r\n    /* ignore */\r\n  }\r\n  const diagram = await fn.call(api.mermaidAPI ?? api, text);\r\n  const db = diagram?.db as GitDbLike | undefined;\r\n  if (!db || typeof db.getCommitsArray !== 'function') return undefined;\r\n  return db;\r\n}\r\n\r\nfunction passthrough(text: string, comments: string[], warnings: ParseWarning[]): ParseResult {\r\n  return {\r\n    scene: {\r\n      version: 1,\r\n      diagramType: 'gitgraph',\r\n      meta: { type: 'gitgraph' },\r\n      nodes: [],\r\n      edges: [],\r\n      containers: [],\r\n      raw: { comments, fullSource: text },\r\n      layoutOwner: 'user',\r\n    },\r\n    warnings,\r\n  };\r\n}\r\n\r\nexport async function gitgraphDbToScene(text: string, mermaid: MermaidLike): Promise<ParseResult> {\r\n  const warnings: ParseWarning[] = [];\r\n  const comments = text\r\n    .split('\\n')\r\n    .map((l) => l.trim())\r\n    .filter((l) => l.startsWith('%%'));\r\n  let db: GitDbLike | undefined;\r\n  try {\r\n    db = await getGitDb(text, mermaid);\r\n  } catch (err) {\r\n    warnings.push({ message: `mermaid 解析失敗:${(err as Error).message}` });\r\n  }\r\n  if (!db) {\r\n    warnings.push({ message: 'mermaid 解析 API 不可用。' });\r\n    return passthrough(text, comments, warnings);\r\n  }\r\n\r\n  const commits = [...(db.getCommitsArray?.() ?? [])].sort((a, b) => (a.seq ?? 0) - (b.seq ?? 0));\r\n  if (commits.some((c) => c.type === TYPE_CHERRY_PICK)) {\r\n    warnings.push({ message: '含 cherry-pick 指令,目前還原不出來,已改為唯讀以免改壞原檔。' });\r\n    return passthrough(text, comments, warnings);\r\n  }\r\n  if (commits.length === 0) return passthrough(text, comments, warnings);\r\n\r\n  // 分支的顯示順序:以「第一次出現」為準(main 通常就是第一條)。\r\n  const lanes: string[] = [];\r\n  for (const c of commits) {\r\n    const b = c.branch ?? 'main';\r\n    if (!lanes.includes(b)) lanes.push(b);\r\n  }\r\n  for (const b of db.getBranchesAsObjArray?.() ?? []) {\r\n    if (b.name && !lanes.includes(b.name)) lanes.push(b.name);\r\n  }\r\n\r\n  const containers: SceneContainer[] = lanes.map((name, i) => ({\r\n    id: name,\r\n    label: name,\r\n    x: GIT.x0 - 90,\r\n    y: GIT.y0 + i * GIT.laneH - GIT.laneH / 2,\r\n    w: 90 + Math.max(1, commits.length) * GIT.dx,\r\n    h: GIT.laneH,\r\n    parentId: null,\r\n    childNodeIds: [],\r\n    sourceIndex: i,\r\n  }));\r\n\r\n  const nodes: SceneNode[] = commits.map((c, i) => {\r\n    const lane = Math.max(0, lanes.indexOf(c.branch ?? 'main'));\r\n    return {\r\n      id: c.id ?? `c${i}`,\r\n      shape: 'gitCommit',\r\n      // 自訂 id 才是使用者寫的文字;mermaid 自動產生的 id(customId=false 的 merge)不顯示。\r\n      label: c.type === TYPE_MERGE && c.customId === false ? '' : (c.id ?? ''),\r\n      x: GIT.x0 + i * GIT.dx - GIT.node / 2,\r\n      y: GIT.y0 + lane * GIT.laneH - GIT.node / 2,\r\n      w: GIT.node,\r\n      h: GIT.node,\r\n      parentId: lanes[lane],\r\n      data: {\r\n        kind: 'gitgraph',\r\n        commitType: c.type ?? TYPE_NORMAL,\r\n        tags: c.tags ?? [],\r\n        // merge 的來源分支 = 第二個 parent 所在的分支。\r\n        mergeFrom:\r\n          c.type === TYPE_MERGE\r\n            ? commits.find((p) => p.id === (c.parents ?? [])[1])?.branch\r\n            : undefined,\r\n      },\r\n      sourceIndex: i,\r\n      pinned: true,\r\n    };\r\n  });\r\n\r\n  const scene: EditorScene = {\r\n    version: 1,\r\n    diagramType: 'gitgraph',\r\n    meta: { type: 'gitgraph' },\r\n    nodes,\r\n    edges: [],\r\n    containers,\r\n    raw: { comments },\r\n    layoutOwner: 'user',\r\n  };\r\n  return { scene, warnings };\r\n}\r\n\r\n/** 依 y 找出它落在哪一條泳道(拖到列與列之間時取最近的一條)。 */\r\nexport function gitLaneIndexAt(y: number, laneCount: number): number {\r\n  return laneOf(y, laneCount);\r\n}\r\n\r\nfunction laneOf(y: number, laneCount: number): number {\r\n  const rel = (y + GIT.node / 2 - GIT.y0) / GIT.laneH;\r\n  return Math.max(0, Math.min(laneCount - 1, Math.round(rel)));\r\n}\r\n\r\n/** 依 x 排序、依 y 判分支:這兩件事就是整份指令流的全部資訊。 */\r\nfunction commitsInOrder(scene: EditorScene): Array<{ node: SceneNode; branch: string }> {\r\n  const lanes = [...scene.containers].sort((a, b) => (a.sourceIndex ?? 0) - (b.sourceIndex ?? 0));\r\n  const names = lanes.map((l) => l.id);\r\n  return [...scene.nodes]\r\n    .sort((a, b) => a.x - b.x || (a.sourceIndex ?? 0) - (b.sourceIndex ?? 0))\r\n    .map((node) => ({ node, branch: names[laneOf(node.y, names.length)] ?? names[0] ?? 'main' }));\r\n}\r\n\r\nconst TYPE_KEYWORD: Record<number, string | undefined> = {\r\n  [TYPE_REVERSE]: 'REVERSE',\r\n  [TYPE_HIGHLIGHT]: 'HIGHLIGHT',\r\n};\r\n\r\nexport function sceneToGitgraph(scene: EditorScene): SerializeResult {\r\n  if (scene.nodes.length === 0 && scene.raw?.fullSource) {\r\n    return { text: scene.raw.fullSource, warnings: [] };\r\n  }\r\n  const warnings: DataLossWarning[] = [];\r\n  const lines: string[] = [];\r\n  for (const c of scene.raw?.comments ?? []) {\r\n    if (c.trim().startsWith('%%{')) lines.push(c.trim());\r\n  }\r\n  lines.push('gitGraph');\r\n  for (const c of scene.raw?.comments ?? []) {\r\n    const t = c.trim();\r\n    if (t.startsWith('%%') && !t.startsWith('%%{')) lines.push(`   ${t}`);\r\n  }\r\n\r\n  const ordered = commitsInOrder(scene);\r\n  const firstBranch = ordered[0]?.branch ?? 'main';\r\n  const created = new Set<string>([firstBranch]);\r\n  let current = firstBranch;\r\n\r\n  for (const { node, branch } of ordered) {\r\n    if (branch !== current) {\r\n      // `branch X` 會「從目前分支建立並切過去」,已存在的分支則用 checkout。\r\n      lines.push(`   ${created.has(branch) ? 'checkout' : 'branch'} ${branch}`);\r\n      created.add(branch);\r\n      current = branch;\r\n    }\r\n    const d = node.data?.kind === 'gitgraph' ? node.data : undefined;\r\n    const tag = d?.tags?.length ? ` tag: \"${d.tags[0].replace(/\"/g, '')}\"` : '';\r\n    if (d?.commitType === TYPE_MERGE) {\r\n      const from = d.mergeFrom;\r\n      if (!from || from === branch || !created.has(from)) {\r\n        // 拖曳把 merge 排到來源分支還不存在的位置 → 降級成一般 commit,並講明白。\r\n        warnings.push({\r\n          message: `合併節點「${node.label || node.id}」的來源分支尚未建立,已改成一般 commit`,\r\n          elementId: node.id,\r\n        });\r\n        lines.push(`   commit${node.label ? ` id: \"${node.label}\"` : ''}${tag}`);\r\n        continue;\r\n      }\r\n      lines.push(`   merge ${from}${tag}`);\r\n      continue;\r\n    }\r\n    const type = TYPE_KEYWORD[d?.commitType ?? TYPE_NORMAL];\r\n    lines.push(\r\n      `   commit${node.label ? ` id: \"${node.label}\"` : ''}${type ? ` type: ${type}` : ''}${tag}`,\r\n    );\r\n  }\r\n  return { text: lines.join('\\n') + '\\n', warnings };\r\n}\r\n\r\n/**\r\n * 依「順序 + 分支」推導出實際的父子連線,給渲染器畫。\r\n * 規則與 git 本身一致:接到同分支上一個提交;該分支的第一個提交接到「分支出來的那一點」;\r\n * merge 再多接一條來源分支的最後一個提交。\r\n */\r\nexport function gitgraphLinks(scene: EditorScene): Array<{ from: string; to: string; merge: boolean }> {\r\n  const ordered = commitsInOrder(scene);\r\n  const links: Array<{ from: string; to: string; merge: boolean }> = [];\r\n  const tip = new Map<string, string>();\r\n  let current = ordered[0]?.branch ?? 'main';\r\n  for (const { node, branch } of ordered) {\r\n    if (!tip.has(branch) && branch !== current && tip.has(current)) {\r\n      // 分支點:新分支從目前分支的 tip 長出來。\r\n      tip.set(branch, tip.get(current) as string);\r\n    }\r\n    const parent = tip.get(branch);\r\n    if (parent) links.push({ from: parent, to: node.id, merge: false });\r\n    const d = node.data?.kind === 'gitgraph' ? node.data : undefined;\r\n    if (d?.commitType === TYPE_MERGE && d.mergeFrom && d.mergeFrom !== branch) {\r\n      const other = tip.get(d.mergeFrom);\r\n      if (other) links.push({ from: other, to: node.id, merge: true });\r\n    }\r\n    tip.set(branch, node.id);\r\n    current = branch;\r\n  }\r\n  return links;\r\n}\r\n\r\n/** 「整理」= 依目前順序與分支,重新等距排回各自的泳道。 */\r\nexport function layoutGitgraph(scene: EditorScene): EditorScene {\r\n  const lanes = [...scene.containers].sort((a, b) => (a.sourceIndex ?? 0) - (b.sourceIndex ?? 0));\r\n  const names = lanes.map((l) => l.id);\r\n  const ordered = commitsInOrder(scene);\r\n  const nodes = ordered.map(({ node, branch }, i) => ({\r\n    ...node,\r\n    x: GIT.x0 + i * GIT.dx - GIT.node / 2,\r\n    y: GIT.y0 + Math.max(0, names.indexOf(branch)) * GIT.laneH - GIT.node / 2,\r\n    parentId: branch,\r\n  }));\r\n  const containers = lanes.map((l, i) => ({\r\n    ...l,\r\n    x: GIT.x0 - 90,\r\n    y: GIT.y0 + i * GIT.laneH - GIT.laneH / 2,\r\n    w: 90 + Math.max(1, nodes.length) * GIT.dx,\r\n    h: GIT.laneH,\r\n    childNodeIds: ordered.filter((o) => o.branch === l.id).map((o) => o.node.id),\r\n  }));\r\n  return { ...scene, nodes, containers, layoutOwner: 'user' };\r\n}\r\n","// 「依圖種建立元素」的單一真相。\r\n//\r\n// 為什麼需要它:拖拉繪製有六條入口(工具列外形鈕、node-create 工具、雙擊空白、Tab 快速接續、\r\n// 右鍵「在此新增」、拉線到空白處一步建點),先前每條都直接叫 makeNode(),而 makeNode 寫死\r\n// `data:{kind:'flowchart'}` + rectangle。結果在 class / er / mindmap / state 上拖出來的節點\r\n// 帶著 flowchart 的資料形狀,渲染不出隔間、序列化也退化(class 少了 {} 區塊、er 沒有屬性表、\r\n// mindmap 變成第二個 root 直接讓 mermaid 報錯)。這裡集中處理,六條入口共用。\r\n\r\nimport type {\r\n  ArrowHead,\r\n  DiagramType,\r\n  EdgeAnchor,\r\n  EditorScene,\r\n  LineKind,\r\n  NodeData,\r\n  NodeShape,\r\n  Point,\r\n  SceneEdge,\r\n  SceneNode,\r\n} from './types';\r\nimport { c4BoxSize, classBoxSize, erEntitySize, requirementBoxSize } from '../render/node-metrics';\r\nimport { POINT_BOX } from '../round-trip/quadrant/model';\r\nimport { C4_SHAPE_DEFAULT_TYPE } from '../round-trip/c4/shapes';\r\nimport { CARD as KANBAN_CARD } from '../round-trip/kanban/model';\r\nimport { GIT } from '../round-trip/gitgraph';\r\n\r\n/**\r\n * 新拖出來的需求 / 元素預填的內容。\r\n * mermaid 的 requirementDiagram 對這兩者的必填欄位很嚴格(需求少了 id 或 text 就整份語法錯誤),\r\n * 所以「空白節點」不能真的空白 —— 一律先給合法的預設值,使用者再改。\r\n */\r\nconst NEW_REQUIREMENT = {\r\n  element: false as const,\r\n  reqType: 'requirement' as const,\r\n  reqId: '1',\r\n  text: '待填寫需求描述',\r\n  risk: 'medium' as const,\r\n  verifyMethod: 'test' as const,\r\n};\r\nconst NEW_ELEMENT = { element: true as const, elementType: 'simulation' };\r\n\r\n/** 各圖種新節點的預設外形(adapter capabilities.defaults.nodeShape 的 core 版對照)。 */\r\nconst DEFAULT_SHAPE: Partial<Record<DiagramType, NodeShape>> = {\r\n  state: 'state',\r\n  class: 'classBox',\r\n  er: 'entity',\r\n  mindmap: 'rounded',\r\n  requirement: 'requirementBox',\r\n  quadrant: 'point',\r\n  c4: 'c4Box',\r\n  kanban: 'kanbanCard',\r\n  sankey: 'sankeyNode',\r\n  journey: 'journeyTask',\r\n  gantt: 'ganttBar',\r\n  pie: 'pieSlice',\r\n  xychart: 'xyPoint',\r\n  architecture: 'archNode',\r\n  block: 'rectangle',\r\n  packet: 'packetField',\r\n  gitgraph: 'gitCommit',\r\n  sequence: 'participant',\r\n};\r\n\r\nexport function defaultShapeFor(type: DiagramType): NodeShape {\r\n  return DEFAULT_SHAPE[type] ?? 'rectangle';\r\n}\r\n\r\n/** 外形決定初始尺寸:偽狀態是小圓點、fork 是細長條、class/er 要放得下標題列。 */\r\nexport function defaultSizeFor(type: DiagramType, shape: NodeShape): { w: number; h: number } {\r\n  switch (shape) {\r\n    case 'stateStart':\r\n      return { w: 22, h: 22 };\r\n    case 'stateEnd':\r\n      return { w: 26, h: 26 };\r\n    case 'choice':\r\n      return { w: 44, h: 44 };\r\n    case 'fork':\r\n      return { w: 120, h: 12 };\r\n    case 'circle':\r\n    case 'doubleCircle':\r\n      return { w: 76, h: 76 };\r\n    // 隔間框:交給內容尺寸模型,新建的空框才不會比它畫出來的東西大一圈。\r\n    case 'classBox':\r\n      return classBoxSize('', {});\r\n    case 'entity':\r\n      return erEntitySize('', []);\r\n    case 'requirementBox':\r\n      return requirementBoxSize('', NEW_REQUIREMENT);\r\n    case 'elementBox':\r\n      return requirementBoxSize('', NEW_ELEMENT);\r\n    case 'point':\r\n      return { w: POINT_BOX, h: POINT_BOX };\r\n    case 'c4Person':\r\n    case 'c4Box':\r\n    case 'c4Db':\r\n    case 'c4Queue':\r\n      return c4BoxSize('', { c4Type: C4_SHAPE_DEFAULT_TYPE[shape] ?? 'system' });\r\n    case 'kanbanCard':\r\n    case 'journeyTask':\r\n      return { w: KANBAN_CARD.w, h: KANBAN_CARD.minH };\r\n    case 'gitCommit':\r\n      return { w: GIT.node, h: GIT.node };\r\n    default:\r\n      return type === 'mindmap' ? { w: 110, h: 46 } : { w: 120, h: 56 };\r\n  }\r\n}\r\n\r\n/** 圖種 → 節點的判別式資料(渲染器與序列化都靠它分辨隔間 / 括號 / 偽狀態)。 */\r\nfunction defaultDataFor(type: DiagramType, shape: NodeShape): NodeData {\r\n  switch (type) {\r\n    case 'state':\r\n      return { kind: 'state', isStart: shape === 'stateStart', isEnd: shape === 'stateEnd' };\r\n    case 'class':\r\n      return { kind: 'class', members: [], methods: [] };\r\n    case 'er':\r\n      return { kind: 'er', attributes: [] };\r\n    case 'mindmap':\r\n      return { kind: 'mindmap', shapeType: mindmapShapeType(shape) };\r\n    case 'requirement':\r\n      return { kind: 'requirement', req: shape === 'elementBox' ? { ...NEW_ELEMENT } : { ...NEW_REQUIREMENT } };\r\n    case 'quadrant':\r\n      return { kind: 'quadrant' };\r\n    case 'c4':\r\n      return { kind: 'c4', c4Type: C4_SHAPE_DEFAULT_TYPE[shape] ?? 'system' };\r\n    case 'kanban':\r\n      return { kind: 'kanban' };\r\n    case 'sankey':\r\n      return { kind: 'sankey' };\r\n    case 'journey':\r\n      return { kind: 'journey', score: 3, actors: [] };\r\n    case 'gantt':\r\n      return { kind: 'gantt', flags: [], startRaw: '', endRaw: '1d' };\r\n    case 'pie':\r\n      return { kind: 'pie', value: 1 };\r\n    case 'xychart':\r\n      return { kind: 'xy', series: 0, index: 0 };\r\n    case 'architecture':\r\n      return { kind: 'architecture' };\r\n    case 'block':\r\n      return { kind: 'block', span: 1 };\r\n    case 'packet':\r\n      return { kind: 'packet' };\r\n    case 'gitgraph':\r\n      return { kind: 'gitgraph', commitType: 0, tags: [] };\r\n    case 'sequence':\r\n      return { kind: 'sequence', actor: shape === 'actor' };\r\n    default:\r\n      return { kind: 'flowchart' };\r\n  }\r\n}\r\n\r\n/** mindmap 外形 → mermaid 括號代碼(對齊 round-trip/mindmap/serialize.wrap)。 */\r\nexport function mindmapShapeType(shape: NodeShape): number {\r\n  switch (shape) {\r\n    case 'rounded':\r\n      return 1;\r\n    case 'rectangle':\r\n      return 2;\r\n    case 'circle':\r\n      return 3;\r\n    case 'ellipse':\r\n      return 5;\r\n    case 'hexagon':\r\n      return 6;\r\n    default:\r\n      return 0;\r\n  }\r\n}\r\n\r\n/**\r\n * mindmap 的新節點該掛在誰底下。\r\n *\r\n * mermaid mindmap 只允許**一個**根:兩個 parentId=null 的節點會直接讓渲染報錯。所以新節點\r\n * 一律掛在「目前選取的節點」之下,沒有選取就掛在既有根節點之下;場景全空時才讓它自己當根。\r\n */\r\nexport function mindmapParent(scene: EditorScene, preferId?: string): string | undefined {\r\n  if (scene.nodes.length === 0) return undefined;\r\n  if (preferId && scene.nodes.some((n) => n.id === preferId)) return preferId;\r\n  const root = scene.nodes.find((n) => !n.parentId);\r\n  return root?.id ?? scene.nodes[0].id;\r\n}\r\n\r\nexport interface MakeNodeOptions {\r\n  shape?: NodeShape;\r\n  label?: string;\r\n  w?: number;\r\n  h?: number;\r\n  /** 建立時直接指定父節點(mindmap 掛樹 / subgraph 內建點)。 */\r\n  parentId?: string | null;\r\n  /** 建點時「目前選取」的節點,mindmap 用來決定掛在誰底下。 */\r\n  preferParentId?: string;\r\n}\r\n\r\n/**\r\n * 依場景圖種建立一個新節點(外形 / 資料 / 尺寸 / 父節點都對)。\r\n * at = 節點中心的世界座標(與舊 makeNode 一致)。\r\n */\r\nexport function makeNodeFor(\r\n  scene: EditorScene,\r\n  id: string,\r\n  at: Point,\r\n  opts: MakeNodeOptions = {},\r\n): SceneNode {\r\n  const type = scene.diagramType;\r\n  const shape = opts.shape ?? defaultShapeFor(type);\r\n  const size = defaultSizeFor(type, shape);\r\n  const w = opts.w ?? size.w;\r\n  const h = opts.h ?? size.h;\r\n  const parentId =\r\n    opts.parentId !== undefined\r\n      ? opts.parentId\r\n      : type === 'mindmap'\r\n        ? mindmapParent(scene, opts.preferParentId)\r\n        : undefined;\r\n  return {\r\n    id,\r\n    shape,\r\n    label: opts.label ?? '',\r\n    x: at.x - w / 2,\r\n    y: at.y - h / 2,\r\n    w,\r\n    h,\r\n    parentId,\r\n    data: defaultDataFor(type, shape),\r\n    // 拖出來的節點就是使用者定位的 → 標記 pinned,「整理排版」才不會把它彈回引擎座標。\r\n    pinned: true,\r\n  };\r\n}\r\n\r\nexport interface MakeEdgeOptions {\r\n  label?: string;\r\n  lineKind?: LineKind;\r\n  arrowStart?: ArrowHead;\r\n  arrowEnd?: ArrowHead;\r\n  sourceAnchor?: EdgeAnchor;\r\n  targetAnchor?: EdgeAnchor;\r\n}\r\n\r\n/** 圖種 → 連線的判別式資料(關係種類 / 基數等,序列化靠它決定符號)。 */\r\nfunction defaultEdgeDataFor(type: DiagramType): SceneEdge['data'] {\r\n  switch (type) {\r\n    case 'state':\r\n      return { kind: 'state' };\r\n    case 'class':\r\n      return { kind: 'class', relation: 'association' };\r\n    case 'er':\r\n      return { kind: 'er', identifying: true, cardStart: 'onlyOne', cardEnd: 'zeroOrMore' };\r\n    case 'requirement':\r\n      return { kind: 'requirement', relation: 'satisfies' };\r\n    case 'c4':\r\n      return { kind: 'c4', relType: 'rel' };\r\n    case 'architecture':\r\n      return { kind: 'architecture', fromSide: 'R', toSide: 'L' };\r\n    default:\r\n      return { kind: 'flowchart' };\r\n  }\r\n}\r\n\r\n/** 依場景圖種建立一條新連線(帶對的 data,序列化才畫得出三角 / 鳥足等關係符號)。 */\r\nexport function makeEdgeFor(\r\n  scene: EditorScene,\r\n  id: string,\r\n  source: string,\r\n  target: string,\r\n  opts: MakeEdgeOptions = {},\r\n): SceneEdge {\r\n  return {\r\n    id,\r\n    source,\r\n    target,\r\n    label: opts.label,\r\n    lineKind: opts.lineKind ?? 'solid',\r\n    arrowStart: opts.arrowStart ?? 'none',\r\n    arrowEnd: opts.arrowEnd ?? 'arrow',\r\n    sourceAnchor: opts.sourceAnchor,\r\n    targetAnchor: opts.targetAnchor,\r\n    data: defaultEdgeDataFor(scene.diagramType),\r\n  };\r\n}\r\n","// 節點外形的顯示中繼資料(字形 + 中文名)。\r\n//\r\n// 刻意放在框架無關的 core:React 工具列與 VS Code webview 工具列先前各自硬寫一份 *flowchart*\r\n// 外形清單,於是 class / er / state / mindmap 也被塞進「菱形 / 圓柱 / 梯形」這些它們根本無法\r\n// 序列化的外形。單一真相 + adapter 能力(capabilities.shapes)驅動後,每種圖只會看到自己畫得出來的外形。\r\n\r\nimport type { NodeShape } from './types';\r\n\r\nexport interface ShapeMeta {\r\n  /** 按鈕上的字形(單一字元,免圖檔)。 */\r\n  glyph: string;\r\n  /** 中文名(按鈕文字 / title)。 */\r\n  label: string;\r\n}\r\n\r\nconst META: Record<NodeShape, ShapeMeta> = {\r\n  // flowchart\r\n  rectangle: { glyph: '▭', label: '方框' },\r\n  rounded: { glyph: '⬭', label: '圓角' },\r\n  stadium: { glyph: '⬮', label: '膠囊' },\r\n  subroutine: { glyph: '⧈', label: '子流程' },\r\n  cylinder: { glyph: '⛁', label: '資料庫' },\r\n  circle: { glyph: '◯', label: '圓形' },\r\n  doubleCircle: { glyph: '◎', label: '雙圈' },\r\n  diamond: { glyph: '◇', label: '菱形' },\r\n  hexagon: { glyph: '⬡', label: '六角' },\r\n  odd: { glyph: '⬠', label: '旗標' },\r\n  trapezoid: { glyph: '⏢', label: '梯形' },\r\n  trapezoidAlt: { glyph: '⏏', label: '梯形(倒)' },\r\n  parallelogram: { glyph: '▱', label: '平行四邊形' },\r\n  parallelogramAlt: { glyph: '▰', label: '平行四邊形(左)' },\r\n  ellipse: { glyph: '⬭', label: '橢圓' },\r\n  // state\r\n  state: { glyph: '▢', label: '狀態' },\r\n  stateStart: { glyph: '●', label: '起始' },\r\n  stateEnd: { glyph: '◉', label: '結束' },\r\n  fork: { glyph: '▬', label: '分岔/匯合' },\r\n  choice: { glyph: '◈', label: '選擇' },\r\n  // class / er / sequence\r\n  classBox: { glyph: '🏷', label: '類別' },\r\n  entity: { glyph: '▤', label: '實體' },\r\n  actor: { glyph: '☻', label: '角色' },\r\n  participant: { glyph: '▭', label: '參與者' },\r\n  note: { glyph: '🗒', label: '筆記' },\r\n  // requirement\r\n  requirementBox: { glyph: '▤', label: '需求' },\r\n  elementBox: { glyph: '▥', label: '元素' },\r\n  // quadrant\r\n  point: { glyph: '●', label: '資料點' },\r\n  // C4\r\n  c4Person: { glyph: '☻', label: '人員' },\r\n  c4Box: { glyph: '▭', label: '系統' },\r\n  c4Db: { glyph: '⛁', label: '資料庫' },\r\n  c4Queue: { glyph: '▤', label: '佇列' },\r\n  // kanban\r\n  kanbanCard: { glyph: '▤', label: '卡片' },\r\n  // sankey\r\n  sankeyNode: { glyph: '▮', label: '節點' },\r\n  // journey\r\n  journeyTask: { glyph: '▤', label: '任務' },\r\n  // gantt\r\n  ganttBar: { glyph: '▬', label: '任務' },\r\n  // pie\r\n  pieSlice: { glyph: '◔', label: '扇形' },\r\n  // xychart\r\n  xyPoint: { glyph: '●', label: '資料點' },\r\n  // architecture\r\n  archNode: { glyph: '▣', label: '服務' },\r\n  // packet\r\n  packetField: { glyph: '▭', label: '欄位' },\r\n  // gitgraph\r\n  gitCommit: { glyph: '●', label: '提交' },\r\n  // 未模型化\r\n  passthrough: { glyph: '▭', label: '原樣保留' },\r\n};\r\n\r\nexport function shapeMeta(shape: NodeShape): ShapeMeta {\r\n  return META[shape] ?? { glyph: '▭', label: shape };\r\n}\r\n","// 吸附:格線 + 物件對齊(Excalidraw 式),回傳調整後位移與導引線。\r\n\r\nimport type { Rect } from '../scene/geometry';\r\nimport { boundingBox } from '../scene/geometry';\r\n\r\nexport const GRID = 8;\r\n\r\nexport interface Guide {\r\n  x1: number;\r\n  y1: number;\r\n  x2: number;\r\n  y2: number;\r\n}\r\n\r\nexport interface SnapResult {\r\n  dx: number;\r\n  dy: number;\r\n  guides: Guide[];\r\n}\r\n\r\nexport function snapValueToGrid(v: number): number {\r\n  return Math.round(v / GRID) * GRID;\r\n}\r\n\r\n/**\r\n * 給定移動中節點集合的原始矩形 + 靜止節點矩形,算出對齊吸附後的位移。\r\n * tol 為世界座標容差(由螢幕容差 ÷ zoom 換算)。\r\n */\r\nexport function computeSnap(\r\n  movingRects: Rect[],\r\n  staticRects: Rect[],\r\n  dx: number,\r\n  dy: number,\r\n  tol: number,\r\n): SnapResult {\r\n  const bb = boundingBox(movingRects);\r\n  if (!bb) return { dx, dy, guides: [] };\r\n  const moved: Rect = { x: bb.x + dx, y: bb.y + dy, w: bb.w, h: bb.h };\r\n\r\n  const guides: Guide[] = [];\r\n  let adjX = dx;\r\n  let adjY = dy;\r\n\r\n  // 候選對齊位置(移動框的 left/centerX/right、top/centerY/bottom)。\r\n  const movX = [moved.x, moved.x + moved.w / 2, moved.x + moved.w];\r\n  const movY = [moved.y, moved.y + moved.h / 2, moved.y + moved.h];\r\n\r\n  let bestX: { delta: number; line: number } | null = null;\r\n  let bestY: { delta: number; line: number } | null = null;\r\n\r\n  for (const s of staticRects) {\r\n    const sX = [s.x, s.x + s.w / 2, s.x + s.w];\r\n    const sY = [s.y, s.y + s.h / 2, s.y + s.h];\r\n    for (const mx of movX) {\r\n      for (const sx of sX) {\r\n        const d = sx - mx;\r\n        if (Math.abs(d) <= tol && (!bestX || Math.abs(d) < Math.abs(bestX.delta))) {\r\n          bestX = { delta: d, line: sx };\r\n        }\r\n      }\r\n    }\r\n    for (const my of movY) {\r\n      for (const sy of sY) {\r\n        const d = sy - my;\r\n        if (Math.abs(d) <= tol && (!bestY || Math.abs(d) < Math.abs(bestY.delta))) {\r\n          bestY = { delta: d, line: sy };\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  if (bestX) {\r\n    adjX += bestX.delta;\r\n    guides.push({ x1: bestX.line, y1: moved.y - 400, x2: bestX.line, y2: moved.y + moved.h + 400 });\r\n  } else {\r\n    adjX = snapValueToGrid(bb.x + dx) - bb.x;\r\n  }\r\n  if (bestY) {\r\n    adjY += bestY.delta;\r\n    guides.push({ x1: moved.x - 400, y1: bestY.line, x2: moved.x + moved.w + 400, y2: bestY.line });\r\n  } else {\r\n    adjY = snapValueToGrid(bb.y + dy) - bb.y;\r\n  }\r\n\r\n  return { dx: adjX, dy: adjY, guides };\r\n}\r\n","// 指標互動狀態機(Pointer Events,統一鼠/筆/觸控)。\r\n// 工具:select | pan | node-create | edge-create。把拖曳/點擊轉成命令交給 host 套用。\r\n// 平滑要點:transform-only 拖曳(放手才重 rough)、rAF 批次、pointer capture、吸附。\r\n\r\nimport {\r\n  anchorPoint,\r\n  boundingBox,\r\n  nearestAnchor,\r\n  nodeRect,\r\n  perimeterAnchor,\r\n  rectCenter,\r\n  rectsIntersect,\r\n  SIDE_ANCHORS,\r\n  type Rect,\r\n} from '../scene/geometry';\r\nimport {\r\n  getNode,\r\n  nextEdgeId,\r\n  nextNodeId,\r\n  resolveEdgeAnchors,\r\n} from '../scene/scene-ops';\r\nimport { makeEdgeFor, makeNodeFor } from '../scene/node-factory';\r\nimport type { ArrowHead, EdgeAnchor, EditorScene, LineKind, NodeShape, Point, SceneNode } from '../scene/types';\r\nimport {\r\n  cmdAddConnectedNode,\r\n  cmdAddEdge,\r\n  cmdAddNode,\r\n  cmdMoveNodes,\r\n  cmdReconnectEdge,\r\n  cmdInsertSeqMessage,\r\n  cmdMoveSeqStatement,\r\n  cmdReorderSeqParticipant,\r\n  cmdResizeNode,\r\n  cmdSetParent,\r\n  type Command,\r\n} from './commands';\r\nimport { computeSnap } from './snap';\r\nimport type { Overlay, ResizeDir } from './overlay';\r\nimport type { Viewport } from './viewport';\r\nimport type { SceneRenderer } from '../render/scene-renderer';\r\n\r\nexport type Tool = 'select' | 'pan' | 'node-create' | 'edge-create';\r\n\r\nexport interface PointerHost {\r\n  getScene(): EditorScene;\r\n  viewport: Viewport;\r\n  renderer: SceneRenderer;\r\n  overlay: Overlay;\r\n  /** 套用命令(含 history + 重繪 + overlay 更新)。 */\r\n  runCommand(cmd: Command, label: string): void;\r\n  refreshOverlay(): void;\r\n  requestTextEdit(nodeId: string): void;\r\n  requestEdgeLabelEdit(edgeId: string): void;\r\n  /** sequence:雙擊訊息要求編輯其文字(statement index)。 */\r\n  requestSeqMessageEdit?(index: number): void;\r\n  onSelectionChange(ids: string[]): void;\r\n  onToolChange(tool: Tool): void;\r\n  /** node-create 工具要放的外形。 */\r\n  createShape(): NodeShape;\r\n  /** 新連線的預設樣式(線型 / 箭頭),由工具列設定。 */\r\n  createEdgeStyle(): { lineKind: LineKind; arrowStart: ArrowHead; arrowEnd: ArrowHead };\r\n  /** 目前圖種有沒有「連線」這回事(象限圖 / 看板 / 旅程圖沒有)。未提供 = 有。 */\r\n  supportsEdges?(): boolean;\r\n}\r\n\r\nconst DRAG_THRESHOLD = 4; // 螢幕 px\r\nconst MIN_W = 40;\r\nconst MIN_H = 28;\r\nconst SNAP_TOL_SCREEN = 6;\r\n// 連線錨點命中 / 吸附半徑(螢幕 px;除以 zoom 換算世界座標)。\r\nconst ANCHOR_HIT_SCREEN = 16;\r\n// sequence 生命線的水平命中寬容(世界 px)。生命線本身只有 1px,不給寬容根本拖不準。\r\nconst SEQ_LIFELINE_HIT = 28;\r\n// select 工具抓生命線換序的容差(世界 px)。刻意比 SEQ_LIFELINE_HIT 小很多,理由見 seqLifelineUnder。\r\nconst SEQ_LIFELINE_GRAB = 10;\r\n// 訊息兩端的「端點區」最小寬度(世界 px):按在這裡拖 = 只換這一端接到哪條水道。\r\nconst SEQ_END_GRAB = 26;\r\n\r\ntype Mode =\r\n  | { kind: 'idle' }\r\n  | { kind: 'maybe-drag'; startWorld: Point; ids: string[]; bases: Map<string, Rect> }\r\n  | { kind: 'move'; startWorld: Point; ids: string[]; bases: Map<string, Rect>; dx: number; dy: number }\r\n  // sequence 專屬:參與者只能左右拖換序(非自由位移)。targetIndex = 移除被拖者後的插入位置。\r\n  | { kind: 'seq-reorder'; id: string; startWorld: Point; base: Rect; targetIndex: number }\r\n  // sequence 專屬:從生命線拖到另一條 → 插入一則訊息。落點的 Y 決定插在第幾則。\r\n  | { kind: 'seq-msg-draw'; fromId: string; startWorld: Point }\r\n  // sequence 專屬:抓著訊息 / note 拖 —— 上下改時間順序,左右跨水道換收發雙方。\r\n  // grab 決定左右拖的意思:抓箭尾只動寄件方、抓箭頭只動收件方、抓中段整條平移(跨度不變)。\r\n  | {\r\n      kind: 'seq-msg-move';\r\n      idx: number;\r\n      startClient: Point;\r\n      targetIndex: number;\r\n      grab: 'from' | 'to' | 'both';\r\n      /** 原本的收發雙方;非訊息(筆記 / 片段)為空字串 = 不支援跨水道。 */\r\n      fromId: string;\r\n      toId: string;\r\n      /** 按下當時指標所在的水道序號,'both' 用它算位移了幾條。 */\r\n      grabLane: number;\r\n      /** 目前指到的收發雙方;null = 還沒跨過水道。 */\r\n      retarget: { from: string; to: string } | null;\r\n    }\r\n  | { kind: 'resize'; nodeId: string; dir: ResizeDir; startRect: Rect; startWorld: Point; cur: Rect }\r\n  // fromAnchor:從來源節點哪個固定錨點起拉(null = 從節點本體拉 → 浮動來源錨)。\r\n  | { kind: 'rubber-edge'; sourceId: string; from: Point; fromAnchor: EdgeAnchor | null }\r\n  | { kind: 'reconnect-edge'; edgeId: string; endpoint: 'source' | 'target'; anchorFixed: Point }\r\n  | { kind: 'marquee'; startWorld: Point; additive: boolean }\r\n  | { kind: 'pan'; lastClient: Point; deselectAt?: Point };\r\n\r\nexport class PointerController {\r\n  private tool: Tool = 'select';\r\n  private selection = new Set<string>();\r\n  private mode: Mode = { kind: 'idle' };\r\n  private rafId = 0;\r\n  private pendingClient: Point | null = null;\r\n  private activePointers = new Set<number>();\r\n  private boundHandlers: Array<[string, EventListener]> = [];\r\n  private hoverNodeId: string | null = null;\r\n  // 手動偵測雙擊(setPointerCapture 會抑制瀏覽器原生 dblclick,故不依賴它)。\r\n  private lastClickNodeId: string | null = null;\r\n  private lastClickTime = 0;\r\n  private lastClickEdgeId: string | null = null;\r\n  private lastEdgeClickTime = 0;\r\n  private lastEmptyClickTime = 0;\r\n\r\n  constructor(\r\n    private svg: SVGSVGElement,\r\n    private host: PointerHost,\r\n  ) {\r\n    this.bind();\r\n  }\r\n\r\n  getTool(): Tool {\r\n    return this.tool;\r\n  }\r\n  setTool(tool: Tool): void {\r\n    this.tool = tool;\r\n    this.svg.style.cursor = tool === 'pan' ? 'grab' : tool === 'select' ? 'default' : 'crosshair';\r\n    this.host.onToolChange(tool);\r\n  }\r\n\r\n  getSelection(): string[] {\r\n    return [...this.selection];\r\n  }\r\n  setSelection(ids: string[]): void {\r\n    this.selection = new Set(ids);\r\n    this.host.onSelectionChange(this.getSelection());\r\n    this.host.refreshOverlay();\r\n  }\r\n  clearSelection(): void {\r\n    this.setSelection([]);\r\n  }\r\n  selectAll(): void {\r\n    this.setSelection(this.host.getScene().nodes.map((n) => n.id));\r\n  }\r\n\r\n  private bind(): void {\r\n    const add = (type: string, fn: EventListener, opts?: AddEventListenerOptions): void => {\r\n      this.svg.addEventListener(type, fn, opts);\r\n      this.boundHandlers.push([type, fn]);\r\n    };\r\n    add('pointerdown', this.onPointerDown as EventListener);\r\n    add('pointermove', this.onPointerMove as EventListener);\r\n    add('pointerup', this.onPointerUp as EventListener);\r\n    add('pointercancel', this.onPointerCancel as EventListener);\r\n    add('wheel', this.onWheel as EventListener, { passive: false });\r\n    add('pointerleave', this.onPointerLeave as EventListener);\r\n  }\r\n\r\n  destroy(): void {\r\n    for (const [type, fn] of this.boundHandlers) this.svg.removeEventListener(type, fn);\r\n    this.boundHandlers = [];\r\n    if (this.rafId) cancelAnimationFrame(this.rafId);\r\n  }\r\n\r\n  // ── 命中測試 ──\r\n  private hitResize(t: Element): { node: string; dir: ResizeDir } | null {\r\n    const el = t.closest('[data-resize]');\r\n    if (!el) return null;\r\n    return { node: el.getAttribute('data-resize-node') ?? '', dir: el.getAttribute('data-resize') as ResizeDir };\r\n  }\r\n  private hitConn(t: Element): { nodeId: string; anchor: EdgeAnchor | null } | null {\r\n    const el = t.closest('[data-conn-handle]');\r\n    if (!el) return null;\r\n    const nodeId = el.getAttribute('data-conn-node');\r\n    if (!nodeId) return null;\r\n    const fx = el.getAttribute('data-conn-fx');\r\n    const fy = el.getAttribute('data-conn-fy');\r\n    const anchor = fx != null && fy != null ? { fx: Number(fx), fy: Number(fy) } : null;\r\n    return { nodeId, anchor };\r\n  }\r\n  private hitNode(t: Element): string | null {\r\n    const el = t.closest('[data-node-id]');\r\n    return el ? el.getAttribute('data-node-id') : null;\r\n  }\r\n  private hitEdge(t: Element): string | null {\r\n    const el = t.closest('[data-edge-hit]');\r\n    return el ? el.getAttribute('data-edge-hit') : null;\r\n  }\r\n\r\n  private nodeUnder(clientX: number, clientY: number, exclude?: string): SceneNode | null {\r\n    const w = this.host.viewport.screenToWorld(clientX, clientY);\r\n    const scene = this.host.getScene();\r\n    // 由上而下(後繪在上)。\r\n    for (let i = scene.nodes.length - 1; i >= 0; i--) {\r\n      const n = scene.nodes[i];\r\n      if (n.id === exclude) continue;\r\n      if (w.x >= n.x && w.x <= n.x + n.w && w.y >= n.y && w.y <= n.y + n.h) return n;\r\n    }\r\n    return null;\r\n  }\r\n\r\n  /**\r\n   * sequence 專用命中:找出游標所在的參與者。\r\n   *\r\n   * 不能用 nodeUnder —— 那是矩形命中,只涵蓋頂端(與底端)的參與者方框。使用者拖曳時是沿著\r\n   * **生命線**走的,游標多半落在兩個方框之間的長條空白區,矩形命中會回 null。這裡改成只比對\r\n   * X 是否落在該參與者的水平範圍內(生命線就在方框正中央向下延伸),Y 一律接受。\r\n   */\r\n  private seqParticipantUnder(clientX: number, clientY: number, exclude?: string): SceneNode | null {\r\n    const w = this.host.viewport.screenToWorld(clientX, clientY);\r\n    const scene = this.host.getScene();\r\n    if (scene.diagramType !== 'sequence') return null;\r\n    let best: SceneNode | null = null;\r\n    let bestDist = Infinity;\r\n    for (const n of scene.nodes) {\r\n      if (n.id === exclude || n.data?.kind !== 'sequence') continue;\r\n      // 同一個參與者在頂端與底端各有一個框,取水平距離最近的那個中心。\r\n      const cx = n.x + n.w / 2;\r\n      const dist = Math.abs(w.x - cx);\r\n      if (dist <= n.w / 2 + SEQ_LIFELINE_HIT && dist < bestDist) {\r\n        bestDist = dist;\r\n        best = n;\r\n      }\r\n    }\r\n    return best;\r\n  }\r\n\r\n  /**\r\n   * 按壓點是不是落在某條「生命線」上(select 工具拖曳換序用)。\r\n   *\r\n   * 與 seqParticipantUnder 的差別在容差要多貪:那個是給訊息工具的,吃掉整個欄位寬度 + 28 是對的\r\n   * (使用者只是想從這根柱子拉一條線出去);select 這裡若照抄,參與者間 56 的間隙會被兩側各 28\r\n   * 完全瓜分,拖空白處平移畫布與框選就再也做不到了。所以只認線本身左右 SEQ_LIFELINE_GRAB 的範圍。\r\n   */\r\n  private seqLifelineUnder(clientX: number, clientY: number): SceneNode | null {\r\n    const w = this.host.viewport.screenToWorld(clientX, clientY);\r\n    const scene = this.host.getScene();\r\n    if (scene.diagramType !== 'sequence') return null;\r\n    let best: SceneNode | null = null;\r\n    let bestDist = Infinity;\r\n    for (const n of scene.nodes) {\r\n      if (n.data?.kind !== 'sequence') continue;\r\n      const dist = Math.abs(w.x - (n.x + n.w / 2));\r\n      if (dist <= SEQ_LIFELINE_GRAB && dist < bestDist) {\r\n        bestDist = dist;\r\n        best = n;\r\n      }\r\n    }\r\n    return best;\r\n  }\r\n\r\n  /**\r\n   * 由放開時的螢幕 Y 推出要插在第幾則陳述。\r\n   *\r\n   * 用已渲染的 `[data-seq-msg]` 元素直接比 client 座標,不做世界座標換算 —— 那些元素身上的\r\n   * 屬性值就是 statements 的索引,所以「第一個中心點在放開位置下方的訊息」就是插入點;\r\n   * 都在上方(或圖上還沒有任何訊息)則附加到最後。\r\n   */\r\n  private seqInsertIndexAt(clientY: number): number {\r\n    const total = this.host.getScene().sequence?.statements.length ?? 0;\r\n    const els = [...this.svg.querySelectorAll('[data-seq-msg]')];\r\n    let insertAt = total;\r\n    for (const el of els) {\r\n      const idx = Number(el.getAttribute('data-seq-msg'));\r\n      if (!Number.isFinite(idx)) continue;\r\n      const box = (el as SVGGraphicsElement).getBoundingClientRect();\r\n      if (box.y + box.height / 2 > clientY) {\r\n        insertAt = Math.min(insertAt, idx);\r\n      }\r\n    }\r\n    return insertAt;\r\n  }\r\n\r\n  /**\r\n   * 指標落在第幾條水道。\r\n   *\r\n   * 與 seqLifelineUnder 的差別:那個要判斷「有沒有抓到線」,所以給容差;這個是拖曳中的落點判斷,\r\n   * 整片水平空間都必須歸屬於某一條水道,不然指標飄到兩條線中間時回饋就斷掉了。\r\n   */\r\n  private seqLaneAt(clientX: number): { id: string; index: number } | null {\r\n    const w = this.host.viewport.screenToWorld(clientX, 0);\r\n    const cols = this.host.getScene().nodes.filter((n) => n.data?.kind === 'sequence');\r\n    if (cols.length === 0) return null;\r\n    let best = 0;\r\n    let bestDist = Infinity;\r\n    cols.forEach((n, i) => {\r\n      const d = Math.abs(w.x - (n.x + n.w / 2));\r\n      if (d < bestDist) {\r\n        bestDist = d;\r\n        best = i;\r\n      }\r\n    });\r\n    return { id: cols[best].id, index: best };\r\n  }\r\n\r\n  /** 某位參與者的水道中心 X(世界座標);找不到回 null。 */\r\n  private seqLaneCenterX(id: string): number | null {\r\n    const n = this.host.getScene().nodes.find((x) => x.id === id && x.data?.kind === 'sequence');\r\n    return n ? n.x + n.w / 2 : null;\r\n  }\r\n\r\n  /**\r\n   * 拖曳訊息換序時的插入指示線:一條橫跨所有生命線、畫在「放手後會落在哪」的高度的線。\r\n   *\r\n   * Y 同樣用已渲染的 `[data-seq-msg]` client 座標推(與 seqInsertIndexAt 同一套依據,\r\n   * 兩者才不會各說各話);插入點指到的若是片段之類沒有命中區的陳述,就取索引大於等於它的\r\n   * 第一個訊息,再不然就落到最後一則下方。X 用參與者欄位的世界座標左右各留 24 的餘裕。\r\n   */\r\n  private seqInsertGuide(insertAt: number): { x1: number; y1: number; x2: number; y2: number } | null {\r\n    const els = [...this.svg.querySelectorAll('[data-seq-msg]')] as SVGGraphicsElement[];\r\n    if (els.length === 0) return null;\r\n    let clientY: number | null = null;\r\n    let bestIdx = Infinity;\r\n    for (const el of els) {\r\n      const idx = Number(el.getAttribute('data-seq-msg'));\r\n      if (!Number.isFinite(idx) || idx < insertAt || idx >= bestIdx) continue;\r\n      bestIdx = idx;\r\n      clientY = el.getBoundingClientRect().y - 5;\r\n    }\r\n    if (clientY == null) {\r\n      const last = els[els.length - 1].getBoundingClientRect();\r\n      clientY = last.y + last.height + 5;\r\n    }\r\n    const cols = this.host.getScene().nodes.filter((n) => n.data?.kind === 'sequence');\r\n    if (cols.length === 0) return null;\r\n    const x1 = Math.min(...cols.map((n) => n.x)) - 24;\r\n    const x2 = Math.max(...cols.map((n) => n.x + n.w)) + 24;\r\n    const y = this.host.viewport.screenToWorld(0, clientY).y;\r\n    return { x1, y1: y, x2, y2: y };\r\n  }\r\n\r\n  /**\r\n   * 回傳「按壓點靠近其某個固定錨點(8 點:4 邊中點 + 4 角)」的節點與該錨點;優先檢查 hover 的節點。\r\n   * 純幾何判定 → 即使白點凸出到節點外、DOM 命中抓不到,也能起連線。\r\n   */\r\n  private connectAnchorNode(\r\n    world: Point,\r\n    preferId: string | null,\r\n  ): { nodeId: string; anchor: EdgeAnchor } | null {\r\n    const tolWorld = ANCHOR_HIT_SCREEN / this.host.viewport.getZoom();\r\n    const scene = this.host.getScene();\r\n    const check = (n: SceneNode): { nodeId: string; anchor: EdgeAnchor } | null => {\r\n      // 節點比容差還小時不給錨點:白點會蓋滿整個節點,連「按住拖曳」的立足之地都不剩。\r\n      if (Math.min(n.w, n.h) < tolWorld * 2.2) return null;\r\n      // 已選取節點:4 角是縮放控制點 → 連線只取 4 邊中點(與畫面上顯示的控制點一致)。\r\n      const cands = this.selection.has(n.id) ? SIDE_ANCHORS : undefined;\r\n      const a = nearestAnchor(nodeRect(n), world, tolWorld, cands);\r\n      return a ? { nodeId: n.id, anchor: a } : null;\r\n    };\r\n    if (preferId) {\r\n      const pn = getNode(scene, preferId);\r\n      if (pn) {\r\n        const hit = check(pn);\r\n        if (hit) return hit;\r\n      }\r\n    }\r\n    for (let i = scene.nodes.length - 1; i >= 0; i--) {\r\n      const hit = check(scene.nodes[i]);\r\n      if (hit) return hit;\r\n    }\r\n    return null;\r\n  }\r\n\r\n  /** 拖線端落在 node 上時,吸附到最近的固定錨點(8 點);皆超出容差 → null(浮動,接整個節點)。 */\r\n  private snapAnchor(node: SceneNode, world: Point): EdgeAnchor | null {\r\n    const tolWorld = ANCHOR_HIT_SCREEN / this.host.viewport.getZoom();\r\n    return nearestAnchor(nodeRect(node), world, tolWorld);\r\n  }\r\n\r\n  private onPointerDown = (e: PointerEvent): void => {\r\n    this.activePointers.add(e.pointerId);\r\n    if (this.activePointers.size >= 2) {\r\n      // 多指 → 交給觸控縮放(此處不處理),取消單指操作。\r\n      this.mode = { kind: 'idle' };\r\n      return;\r\n    }\r\n    const target = e.target as Element;\r\n    this.svg.setPointerCapture(e.pointerId);\r\n    const hovered = this.hoverNodeId; // 清掉前記住目前 hover 的節點(白點所屬)\r\n    this.host.overlay.clearHover();\r\n    this.hoverNodeId = null;\r\n    const world = this.host.viewport.screenToWorld(e.clientX, e.clientY);\r\n\r\n    // sequence 訊息:雙擊命中區 → 編輯訊息文字(訊息非 node/edge,獨立處理)。\r\n    const seqMsgEl = target.closest('[data-seq-msg]');\r\n    if (seqMsgEl && this.host.requestSeqMessageEdit) {\r\n      const i = Number(seqMsgEl.getAttribute('data-seq-msg'));\r\n      const key = `seq:${i}`;\r\n      const tnow = performance.now();\r\n      if (this.lastClickEdgeId === key && tnow - this.lastEdgeClickTime < 350) {\r\n        this.lastEdgeClickTime = 0;\r\n        this.lastClickEdgeId = null;\r\n        this.mode = { kind: 'idle' };\r\n        this.host.requestSeqMessageEdit(i);\r\n        return;\r\n      }\r\n      this.lastEdgeClickTime = tnow;\r\n      this.lastClickEdgeId = key;\r\n      // 選起來 —— 訊息不是 node 也不是 edge,以 `seq:{index}` 這個假 id 進選取集合。\r\n      // mermaid 的參與者 alias 不可能含冒號,不會跟真的 node id 撞名。\r\n      // 有了它,選取框畫得出來、Delete 也知道要刪誰。\r\n      this.setSelection([key]);\r\n      // 單擊不只是「等第二下」:按住拖 = 上下改時間順序、左右跨水道換收發雙方。\r\n      // 之前這裡直接 mode=idle 然後 return,等於在圖上最顯眼的箭頭身上開了一塊死區 ——\r\n      // 拖曳不但不換序,連「拖空白處平移畫布」都被這個 return 一起吃掉,體感就是整張圖卡住。\r\n      // 有沒有真的要搬,交給 processMove 的位移門檻判斷;沒過門檻就還原成單純的一次點擊。\r\n      const st = this.host.getScene().sequence?.statements[i];\r\n      const msg = st?.kind === 'message' ? st : null;\r\n      const fromX = msg ? this.seqLaneCenterX(msg.from) : null;\r\n      const toX = msg ? this.seqLaneCenterX(msg.to) : null;\r\n      // 抓在哪一段決定左右拖的語意。端點區取跨度的 30%,但至少 SEQ_END_GRAB —— 兩條相鄰生命線\r\n      // 之間的訊息很短,按比例算會小到抓不到;跨很多條的長訊息則不該讓端點區吃掉整條。\r\n      let grab: 'from' | 'to' | 'both' = 'both';\r\n      if (fromX != null && toX != null) {\r\n        const wx = world.x;\r\n        const span = Math.abs(toX - fromX);\r\n        const zone = Math.max(SEQ_END_GRAB, span * 0.3);\r\n        if (Math.abs(wx - fromX) <= zone) grab = 'from';\r\n        else if (Math.abs(wx - toX) <= zone) grab = 'to';\r\n      }\r\n      this.mode = {\r\n        kind: 'seq-msg-move',\r\n        idx: i,\r\n        startClient: { x: e.clientX, y: e.clientY },\r\n        targetIndex: -1,\r\n        grab,\r\n        fromId: msg?.from ?? '',\r\n        toId: msg?.to ?? '',\r\n        grabLane: this.seqLaneAt(e.clientX)?.index ?? 0,\r\n        retarget: null,\r\n      };\r\n      return;\r\n    }\r\n\r\n    // node-create:放一個節點。\r\n    if (this.tool === 'node-create') {\r\n      const scene = this.host.getScene();\r\n      const id = nextNodeId(scene);\r\n      const node = makeNodeFor(scene, id, world, {\r\n        shape: this.host.createShape(),\r\n        preferParentId: this.getSelection()[0],\r\n      });\r\n      this.host.runCommand(cmdAddNode(node), 'add-node');\r\n      this.setSelection([id]);\r\n      this.setTool('select');\r\n      this.host.requestTextEdit(id);\r\n      return;\r\n    }\r\n\r\n    // pan 工具 / 中鍵 → 平移。\r\n    if (this.tool === 'pan' || e.button === 1) {\r\n      this.mode = { kind: 'pan', lastClient: { x: e.clientX, y: e.clientY } };\r\n      this.svg.style.cursor = 'grabbing';\r\n      return;\r\n    }\r\n\r\n    // sequence:自由位移 / 縮放對序列圖無意義(拖了不寫回 code、又會弄亂版面),所以在此攔截,\r\n    // 不落入下方 resize 分支。但兩件事是有意義的,分別對應兩個工具:\r\n    //   edge-create → 從生命線拖到另一條生命線 = 插入一則訊息(落點 Y 決定插在第幾則)\r\n    //   select      → 左右拖曳參與者換序 + 雙擊改名\r\n    {\r\n      const seqScene = this.host.getScene();\r\n      if (seqScene.diagramType === 'sequence') {\r\n        // 訊息模式的起點用**幾何**命中,不能用 DOM 命中:使用者是沿著生命線拖的,\r\n        // 起點多半落在兩個參與者方框之間的空白處,那裡沒有 [data-node-id] 元素。\r\n        if (this.tool === 'edge-create') {\r\n          const start = this.seqParticipantUnder(e.clientX, e.clientY);\r\n          if (start) {\r\n            this.setSelection([start.id]);\r\n            this.mode = { kind: 'seq-msg-draw', fromId: start.id, startWorld: world };\r\n            return;\r\n          }\r\n        }\r\n        // 方框用 DOM 命中,生命線改用幾何命中:生命線是 pointerEvents:none 的細線,DOM 抓不到,\r\n        // 但在使用者眼裡「那條線就是這個參與者」,沿著它拖卻變成平移畫布 + 放手清空選取,很莫名。\r\n        const sid = this.hitNode(target) ?? this.seqLifelineUnder(e.clientX, e.clientY)?.id ?? null;\r\n        const snode = sid ? getNode(seqScene, sid) : null;\r\n        if (snode && snode.data?.kind === 'sequence') {\r\n          const now = performance.now();\r\n          if (this.lastClickNodeId === sid && now - this.lastClickTime < 350) {\r\n            this.lastClickTime = 0;\r\n            this.lastClickNodeId = null;\r\n            this.mode = { kind: 'idle' };\r\n            this.setSelection([sid as string]);\r\n            this.host.requestTextEdit(sid as string);\r\n            return;\r\n          }\r\n          this.lastClickTime = now;\r\n          this.lastClickNodeId = sid;\r\n          this.setSelection([sid as string]);\r\n          this.mode = { kind: 'seq-reorder', id: sid as string, startWorld: world, base: nodeRect(snode), targetIndex: -1 };\r\n          return;\r\n        }\r\n      }\r\n    }\r\n\r\n    // resize 控制點。\r\n    const rz = this.hitResize(target);\r\n    if (rz && rz.node) {\r\n      const n = getNode(this.host.getScene(), rz.node);\r\n      if (n) {\r\n        this.mode = { kind: 'resize', nodeId: rz.node, dir: rz.dir, startRect: nodeRect(n), startWorld: world, cur: nodeRect(n) };\r\n        return;\r\n      }\r\n    }\r\n\r\n    // 連線控制點 / edge-create 工具在節點上 → 橡皮筋。從錨點起拉時記下該錨點(→ sourceAnchor)。\r\n    // 沒有連線語法的圖種(象限圖 / 看板 / 旅程圖)完全跳過這一段:它們的節點小,錨點白點會蓋滿\r\n    // 整個節點,按下去會被判成「拉線」而不是「拖曳」—— 象限圖的點會因此完全拖不動。\r\n    const canConnect = this.host.supportsEdges?.() ?? true;\r\n    const connHit = canConnect ? this.hitConn(target) : null;\r\n    const nodeId = this.hitNode(target);\r\n    if (connHit || (canConnect && this.tool === 'edge-create' && nodeId)) {\r\n      const srcId = connHit?.nodeId ?? (nodeId as string);\r\n      const src = getNode(this.host.getScene(), srcId);\r\n      if (src) {\r\n        this.mode = {\r\n          kind: 'rubber-edge',\r\n          sourceId: srcId,\r\n          from: rectCenter(nodeRect(src)),\r\n          fromAnchor: connHit?.anchor ?? null,\r\n        };\r\n        return;\r\n      }\r\n    }\r\n\r\n    // 已選取的連線:按住其端點附近 → 重新接線(拖到別的節點)。端點在節點邊上,故須早於節點分支。\r\n    const scene0 = this.host.getScene();\r\n    const reconnectHitR = 12 / this.host.viewport.getZoom();\r\n    for (const eid of this.selection) {\r\n      const edge = scene0.edges.find((x) => x.id === eid);\r\n      if (!edge) continue;\r\n      const anchors = resolveEdgeAnchors(scene0, edge);\r\n      if (!anchors) continue;\r\n      if (Math.hypot(world.x - anchors.start.x, world.y - anchors.start.y) <= reconnectHitR) {\r\n        this.mode = { kind: 'reconnect-edge', edgeId: eid, endpoint: 'source', anchorFixed: anchors.end };\r\n        return;\r\n      }\r\n      if (Math.hypot(world.x - anchors.end.x, world.y - anchors.end.y) <= reconnectHitR) {\r\n        this.mode = { kind: 'reconnect-edge', edgeId: eid, endpoint: 'target', anchorFixed: anchors.start };\r\n        return;\r\n      }\r\n    }\r\n\r\n    // 按在「連線白點」附近(節點 8 個固定錨點)→ 從該位置拉線(像 draw.io)。優先用 hover 中的節點。\r\n    const connectSrc = canConnect ? this.connectAnchorNode(world, hovered) : null;\r\n    if (connectSrc) {\r\n      const src = getNode(this.host.getScene(), connectSrc.nodeId);\r\n      if (src) {\r\n        this.mode = {\r\n          kind: 'rubber-edge',\r\n          sourceId: connectSrc.nodeId,\r\n          from: rectCenter(nodeRect(src)),\r\n          fromAnchor: connectSrc.anchor,\r\n        };\r\n        return;\r\n      }\r\n    }\r\n\r\n    // 點到節點 → 選取 + 預備拖曳。\r\n    if (nodeId) {\r\n      // 手動雙擊偵測:同一節點 350ms 內再次按下 → 進入改名(取代被抑制的原生 dblclick)。\r\n      const now = performance.now();\r\n      if (this.lastClickNodeId === nodeId && now - this.lastClickTime < 350) {\r\n        this.lastClickTime = 0;\r\n        this.lastClickNodeId = null;\r\n        this.mode = { kind: 'idle' };\r\n        this.setSelection([nodeId]);\r\n        this.host.requestTextEdit(nodeId);\r\n        return;\r\n      }\r\n      this.lastClickTime = now;\r\n      this.lastClickNodeId = nodeId;\r\n      if (!this.selection.has(nodeId)) {\r\n        this.setSelection(e.shiftKey ? [...this.selection, nodeId] : [nodeId]);\r\n      } else if (e.shiftKey) {\r\n        const next = new Set(this.selection);\r\n        next.delete(nodeId);\r\n        this.setSelection([...next]);\r\n      }\r\n      const ids = this.getSelection();\r\n      const bases = new Map<string, Rect>();\r\n      const scene = this.host.getScene();\r\n      for (const id of ids) {\r\n        const n = getNode(scene, id);\r\n        if (n) bases.set(id, nodeRect(n));\r\n      }\r\n      this.mode = { kind: 'maybe-drag', startWorld: world, ids, bases };\r\n      return;\r\n    }\r\n\r\n    // 點到邊 → 選取邊;雙擊邊 → 編輯連線文字。\r\n    const edgeId = this.hitEdge(target);\r\n    if (edgeId) {\r\n      const tnow = performance.now();\r\n      if (this.lastClickEdgeId === edgeId && tnow - this.lastEdgeClickTime < 350) {\r\n        this.lastEdgeClickTime = 0;\r\n        this.lastClickEdgeId = null;\r\n        this.mode = { kind: 'idle' };\r\n        this.host.requestEdgeLabelEdit(edgeId);\r\n        return;\r\n      }\r\n      this.lastEdgeClickTime = tnow;\r\n      this.lastClickEdgeId = edgeId;\r\n      this.setSelection([edgeId]);\r\n      this.mode = { kind: 'idle' };\r\n      return;\r\n    }\r\n\r\n    // 雙擊空白 → 在該處新增節點(Excalidraw/draw.io 式,直覺好發現)。\r\n    // sequence 例外:自由節點對它無意義(會變孤兒節點),改由右鍵選單新增參與者 / 訊息 / 筆記。\r\n    const emptyNow = performance.now();\r\n    if (this.host.getScene().diagramType === 'sequence') {\r\n      this.lastEmptyClickTime = emptyNow;\r\n      if (e.shiftKey) {\r\n        this.mode = { kind: 'marquee', startWorld: world, additive: true };\r\n      } else {\r\n        this.mode = { kind: 'pan', lastClient: { x: e.clientX, y: e.clientY }, deselectAt: { x: e.clientX, y: e.clientY } };\r\n        this.svg.style.cursor = 'grabbing';\r\n      }\r\n      return;\r\n    }\r\n    if (!e.shiftKey && emptyNow - this.lastEmptyClickTime < 350) {\r\n      this.lastEmptyClickTime = 0;\r\n      this.mode = { kind: 'idle' };\r\n      const scene = this.host.getScene();\r\n      const id = nextNodeId(scene);\r\n      const node = makeNodeFor(scene, id, world, {\r\n        shape: this.host.createShape(),\r\n        preferParentId: this.getSelection()[0],\r\n      });\r\n      this.host.runCommand(cmdAddNode(node), 'add-node');\r\n      this.setSelection([id]);\r\n      this.host.requestTextEdit(id);\r\n      return;\r\n    }\r\n    this.lastEmptyClickTime = emptyNow;\r\n\r\n    // 空白處:Shift+拖曳 → 框選(保留多選能力);一般拖曳 → 平移畫布(放開後仍是選取工具);\r\n    // 純點擊未拖曳 → 取消選取。\r\n    if (e.shiftKey) {\r\n      this.mode = { kind: 'marquee', startWorld: world, additive: true };\r\n      return;\r\n    }\r\n    this.mode = { kind: 'pan', lastClient: { x: e.clientX, y: e.clientY }, deselectAt: { x: e.clientX, y: e.clientY } };\r\n    this.svg.style.cursor = 'grabbing';\r\n  };\r\n\r\n  /** 閒置時:滑過節點顯示連線控制點(讓「點到節點就能拉線」直覺可發現)。 */\r\n  private updateHover(clientX: number, clientY: number, target?: Element | null): void {\r\n    // sequence 不支援自由拉線,不顯示連線控制點以免誤導 —— 但它的訊息可以上下拖換序,\r\n    // 完全不給 hover 回饋就沒人猜得到,所以改成「滑過訊息就把它框起來」。\r\n    if (this.host.getScene().diagramType === 'sequence') {\r\n      const el = target?.closest('[data-seq-msg]') ?? null;\r\n      const idx = el ? Number(el.getAttribute('data-seq-msg')) : NaN;\r\n      const rect = Number.isFinite(idx) ? this.host.renderer.getSeqMsgRect(idx) : undefined;\r\n      const key = rect ? `seq:${idx}` : null;\r\n      if (key === this.hoverNodeId) return;\r\n      this.hoverNodeId = key;\r\n      // 已經選起來的那條不用再畫 hover —— 選取框已經在同一個位置了,疊起來只是變髒。\r\n      if (rect && key && !this.selection.has(key)) {\r\n        this.host.overlay.showHoverRect(rect, this.host.viewport.getZoom());\r\n      } else {\r\n        this.host.overlay.clearHover();\r\n      }\r\n      return;\r\n    }\r\n    const n = this.nodeUnder(clientX, clientY);\r\n    const id = n?.id ?? null;\r\n    if (id === this.hoverNodeId) return;\r\n    this.hoverNodeId = id;\r\n    if (n && !this.selection.has(n.id)) {\r\n      this.host.overlay.showHoverHandles(n.id, nodeRect(n), this.host.viewport.getZoom());\r\n    } else {\r\n      this.host.overlay.clearHover();\r\n    }\r\n  }\r\n\r\n  private onPointerLeave = (): void => {\r\n    this.hoverNodeId = null;\r\n    this.host.overlay.clearHover();\r\n  };\r\n\r\n  private onPointerMove = (e: PointerEvent): void => {\r\n    if (this.mode.kind === 'idle') {\r\n      if (this.tool === 'select') this.updateHover(e.clientX, e.clientY, e.target as Element | null);\r\n      return;\r\n    }\r\n    this.pendingClient = { x: e.clientX, y: e.clientY };\r\n    if (this.rafId) return;\r\n    this.rafId = requestAnimationFrame(() => {\r\n      this.rafId = 0;\r\n      const c = this.pendingClient;\r\n      if (c) this.processMove(c);\r\n    });\r\n  };\r\n\r\n  private processMove(c: Point): void {\r\n    const world = this.host.viewport.screenToWorld(c.x, c.y);\r\n    const zoom = this.host.viewport.getZoom();\r\n    const m = this.mode;\r\n\r\n    if (m.kind === 'pan') {\r\n      this.host.viewport.panBy(c.x - m.lastClient.x, c.y - m.lastClient.y);\r\n      m.lastClient = { x: c.x, y: c.y };\r\n      this.host.refreshOverlay();\r\n      return;\r\n    }\r\n\r\n    if (m.kind === 'maybe-drag') {\r\n      const start = this.host.viewport.worldToScreen(m.startWorld);\r\n      if (Math.hypot(c.x - start.x, c.y - start.y) < DRAG_THRESHOLD) return;\r\n      this.mode = { kind: 'move', startWorld: m.startWorld, ids: m.ids, bases: m.bases, dx: 0, dy: 0 };\r\n      return this.processMove(c);\r\n    }\r\n\r\n    if (m.kind === 'move') {\r\n      const rawDx = world.x - m.startWorld.x;\r\n      const rawDy = world.y - m.startWorld.y;\r\n      const movingRects = [...m.bases.values()];\r\n      const ids = new Set(m.ids);\r\n      const staticRects = this.host\r\n        .getScene()\r\n        .nodes.filter((n) => !ids.has(n.id))\r\n        .map(nodeRect);\r\n      const snap = computeSnap(movingRects, staticRects, rawDx, rawDy, SNAP_TOL_SCREEN / zoom);\r\n      m.dx = snap.dx;\r\n      m.dy = snap.dy;\r\n      this.host.renderer.previewMove(ids, snap.dx, snap.dy);\r\n      this.host.overlay.showGuides(snap.guides, zoom);\r\n      // 選取框跟著預覽位置。\r\n      const rects = m.ids.map((id) => {\r\n        const b = m.bases.get(id)!;\r\n        return { id, rect: { x: b.x + snap.dx, y: b.y + snap.dy, w: b.w, h: b.h } };\r\n      });\r\n      this.host.overlay.showSelection(rects, zoom, { handles: rects.length === 1 });\r\n      return;\r\n    }\r\n\r\n    if (m.kind === 'seq-reorder') {\r\n      const dx = world.x - m.startWorld.x;\r\n      // 參與者欄不進 nodeCache(renderSequence 直接畫),previewMove 對它無效 → 拖曳回饋\r\n      // 只移動「選取框」+ 一條插入指示線,實際欄位放手後才重排,絕不出現重疊亂掉的暫態。\r\n      this.host.overlay.showSelection([{ id: m.id, rect: { ...m.base, x: m.base.x + dx } }], zoom, { handles: false });\r\n      const seqNodes = this.host.getScene().nodes.filter((n) => n.data?.kind === 'sequence');\r\n      const draggedCx = m.base.x + m.base.w / 2 + dx;\r\n      const others = seqNodes.filter((n) => n.id !== m.id);\r\n      let target = 0;\r\n      for (const n of others) if (n.x + n.w / 2 < draggedCx) target += 1;\r\n      m.targetIndex = target;\r\n      const top = seqNodes[0]?.y ?? 12;\r\n      let gx: number;\r\n      if (others.length === 0) gx = draggedCx;\r\n      else if (target <= 0) gx = others[0].x - 14;\r\n      else if (target >= others.length) gx = others[others.length - 1].x + others[others.length - 1].w + 14;\r\n      else gx = (others[target - 1].x + others[target - 1].w + others[target].x) / 2;\r\n      this.host.overlay.showGuides([{ x1: gx, y1: top - 10, x2: gx, y2: top + 64 }], zoom);\r\n      return;\r\n    }\r\n\r\n    if (m.kind === 'resize') {\r\n      m.cur = resizeRect(m.startRect, m.dir, world, m.startWorld);\r\n      this.host.renderer.previewResize(m.nodeId, m.cur);\r\n      this.host.overlay.showSelection([{ id: m.nodeId, rect: m.cur }], zoom, { handles: true });\r\n      return;\r\n    }\r\n\r\n    if (m.kind === 'rubber-edge') {\r\n      const tgt = this.nodeUnder(c.x, c.y, m.sourceId);\r\n      const snap = tgt ? this.snapAnchor(tgt, world) : null;\r\n      // 端點:吸附到目標錨點時貼齊該點,否則跟著游標。\r\n      const to = snap && tgt ? anchorPoint(nodeRect(tgt), snap) : world;\r\n      const src = getNode(this.host.getScene(), m.sourceId);\r\n      if (src) {\r\n        // 起點:從固定錨點起 → 用該錨點;否則用朝向終點的浮動周界錨。\r\n        const from = m.fromAnchor ? anchorPoint(nodeRect(src), m.fromAnchor) : perimeterAnchor(nodeRect(src), to);\r\n        this.host.overlay.showRubberBand(from, to, zoom);\r\n      }\r\n      this.host.overlay.showDropTarget(tgt ? nodeRect(tgt) : null, zoom);\r\n      this.host.overlay.showAnchorPoints(tgt ? nodeRect(tgt) : null, zoom, snap);\r\n      return;\r\n    }\r\n\r\n    if (m.kind === 'seq-msg-draw') {\r\n      // 訊息是水平箭頭:兩端都固定在游標當下的 Y,拖出來的橡皮筋才長得像將要產生的那條訊息。\r\n      const src = getNode(this.host.getScene(), m.fromId);\r\n      const tgt = this.seqParticipantUnder(c.x, c.y, m.fromId);\r\n      if (src) {\r\n        const fromX = nodeRect(src).x + nodeRect(src).w / 2;\r\n        const toX = tgt ? nodeRect(tgt).x + nodeRect(tgt).w / 2 : world.x;\r\n        this.host.overlay.showRubberBand({ x: fromX, y: world.y }, { x: toX, y: world.y }, zoom);\r\n      }\r\n      this.host.overlay.showDropTarget(tgt ? nodeRect(tgt) : null, zoom);\r\n      return;\r\n    }\r\n\r\n    if (m.kind === 'seq-msg-move') {\r\n      // 還在點擊容差內就別動:這一下很可能只是雙擊改字的第一擊,提早畫線會像誤觸。\r\n      // 用直線距離而不是只看垂直位移 —— 純左右的跨水道拖曳也必須過得了門檻。\r\n      if (Math.hypot(c.x - m.startClient.x, c.y - m.startClient.y) < DRAG_THRESHOLD) return;\r\n      m.targetIndex = this.seqInsertIndexAt(c.y);\r\n      const guide = this.seqInsertGuide(m.targetIndex);\r\n      if (guide) this.host.overlay.showInsertLine(guide.x1, guide.x2, guide.y1, zoom);\r\n      // 被拖的那則本身給個選取框當「我抓到的是這條」的回饋 —— 訊息不是 node,\r\n      // previewMove 對它無效,所以只移動框、不動真正的圖元,放手才重排。\r\n      const rect = this.host.renderer.getSeqMsgRect(m.idx);\r\n      if (rect) this.host.overlay.showSelection([{ id: `seq:${m.idx}`, rect }], zoom, { handles: false });\r\n\r\n      // ── 跨水道 ── 指標橫向落到哪條水道,就把抓住的那一端接過去。\r\n      if (m.fromId && m.toId) {\r\n        const lane = this.seqLaneAt(c.x);\r\n        const cols = this.host.getScene().nodes.filter((n) => n.data?.kind === 'sequence');\r\n        if (lane) {\r\n          let from = m.fromId;\r\n          let to = m.toId;\r\n          if (m.grab === 'from') from = lane.id;\r\n          else if (m.grab === 'to') to = lane.id;\r\n          else {\r\n            // 抓中段 = 整條平移:兩端各移動同樣的水道數,跨度不變。任一端會被推出邊界就整個不動,\r\n            // 免得訊息在畫布邊緣被壓扁成「同一條水道發給自己」。\r\n            const shift = lane.index - m.grabLane;\r\n            const fi = cols.findIndex((n) => n.id === m.fromId) + shift;\r\n            const ti = cols.findIndex((n) => n.id === m.toId) + shift;\r\n            if (fi >= 0 && ti >= 0 && fi < cols.length && ti < cols.length) {\r\n              from = cols[fi].id;\r\n              to = cols[ti].id;\r\n            }\r\n          }\r\n          // 同一條水道發給自己不是合法的目的地,維持上一個有效落點。\r\n          if (from !== to) m.retarget = { from, to };\r\n        }\r\n        const r = m.retarget;\r\n        const fx = r ? this.seqLaneCenterX(r.from) : null;\r\n        const tx = r ? this.seqLaneCenterX(r.to) : null;\r\n        if (fx != null && tx != null) {\r\n          // 橡皮筋畫在指標當下的高度,長得就像放手後會生出來的那條訊息。\r\n          this.host.overlay.showRubberBand({ x: fx, y: world.y }, { x: tx, y: world.y }, zoom);\r\n          const tgt = cols.find((n) => n.id === r!.to);\r\n          this.host.overlay.showDropTarget(tgt ? nodeRect(tgt) : null, zoom);\r\n        }\r\n      }\r\n      return;\r\n    }\r\n\r\n    if (m.kind === 'reconnect-edge') {\r\n      const tgt = this.nodeUnder(c.x, c.y);\r\n      const snap = tgt ? this.snapAnchor(tgt, world) : null;\r\n      const to = snap && tgt ? anchorPoint(nodeRect(tgt), snap) : world;\r\n      this.host.overlay.showRubberBand(m.anchorFixed, to, zoom);\r\n      this.host.overlay.showDropTarget(tgt ? nodeRect(tgt) : null, zoom);\r\n      this.host.overlay.showAnchorPoints(tgt ? nodeRect(tgt) : null, zoom, snap);\r\n      return;\r\n    }\r\n\r\n    if (m.kind === 'marquee') {\r\n      this.host.overlay.showMarquee(m.startWorld, world, zoom);\r\n      return;\r\n    }\r\n  }\r\n\r\n  private onPointerUp = (e: PointerEvent): void => {\r\n    this.activePointers.delete(e.pointerId);\r\n    try {\r\n      this.svg.releasePointerCapture(e.pointerId);\r\n    } catch {\r\n      /* ignore */\r\n    }\r\n    const m = this.mode;\r\n    const world = this.host.viewport.screenToWorld(e.clientX, e.clientY);\r\n    this.mode = { kind: 'idle' };\r\n\r\n    if (m.kind === 'move') {\r\n      // 沒有實際位移時不會走 runCommand → 不會重繪 → 落點提示會留在畫面上,這裡自己收掉。\r\n      this.host.renderer.clearDropTarget();\r\n      if (m.dx !== 0 || m.dy !== 0) this.host.runCommand(cmdMoveNodes(m.ids, m.dx, m.dy), 'move');\r\n      this.host.overlay.clearGuides();\r\n      this.host.refreshOverlay();\r\n      return;\r\n    }\r\n    if (m.kind === 'seq-reorder') {\r\n      this.host.overlay.clearGuides();\r\n      const fromIdx = this.host.getScene().sequence?.participants.findIndex((p) => p.id === m.id) ?? -1;\r\n      if (m.targetIndex >= 0 && m.targetIndex !== fromIdx) {\r\n        this.host.runCommand(cmdReorderSeqParticipant(m.id, m.targetIndex), 'reorder-participant');\r\n      } else {\r\n        this.host.refreshOverlay(); // 沒換序(或只是點一下)→ 選取框彈回原位。\r\n      }\r\n      return;\r\n    }\r\n    if (m.kind === 'seq-msg-move') {\r\n      this.host.overlay.clearGuides();\r\n      this.host.overlay.clearTransient();\r\n      this.host.overlay.showDropTarget(null, 1);\r\n      // targetIndex 還是 -1 = 從頭到尾沒超過位移門檻 → 這就是一次單純的點擊(可能是雙擊的第一下),\r\n      // 什麼都不做,也不留 undo 紀錄。\r\n      if (m.targetIndex >= 0) {\r\n        // 位置與水道包在同一個指令裡:一次拖曳改了兩件事,undo 也該一次退回去。\r\n        this.host.runCommand(\r\n          cmdMoveSeqStatement(m.idx, m.targetIndex, m.retarget ?? undefined),\r\n          'move-statement',\r\n        );\r\n      } else {\r\n        this.host.refreshOverlay();\r\n      }\r\n      return;\r\n    }\r\n    if (m.kind === 'seq-msg-draw') {\r\n      this.host.overlay.clearTransient();\r\n      this.host.overlay.showDropTarget(null, 1);\r\n      const tgt = this.seqParticipantUnder(e.clientX, e.clientY, m.fromId);\r\n      if (tgt) {\r\n        this.host.runCommand(\r\n          cmdInsertSeqMessage(m.fromId, tgt.id, this.seqInsertIndexAt(e.clientY)),\r\n          'add-message',\r\n        );\r\n      } else {\r\n        this.host.refreshOverlay(); // 放在空白處 = 取消,不留下半條訊息。\r\n      }\r\n      return;\r\n    }\r\n    if (m.kind === 'resize') {\r\n      this.host.runCommand(cmdResizeNode(m.nodeId, m.cur), 'resize');\r\n      this.host.refreshOverlay();\r\n      return;\r\n    }\r\n    if (m.kind === 'rubber-edge') {\r\n      const target = this.nodeUnder(e.clientX, e.clientY, m.sourceId);\r\n      this.host.overlay.clearTransient();\r\n      this.host.overlay.showDropTarget(null, 1);\r\n      this.host.overlay.clearAnchorPoints();\r\n      const scene = this.host.getScene();\r\n      const sourceAnchor = m.fromAnchor ?? undefined;\r\n      if (target && target.id !== m.sourceId) {\r\n        // mindmap 沒有連線語法,階層由 parentId 決定 → 拉線 = 把目標改掛到來源之下。\r\n        if (scene.diagramType === 'mindmap') {\r\n          this.host.runCommand(cmdSetParent(target.id, m.sourceId), 'reparent');\r\n          this.setSelection([target.id]);\r\n          this.host.refreshOverlay();\r\n          return;\r\n        }\r\n        // 放在另一個節點上 → 連到它;吸附到目標錨點則一併設 targetAnchor(白點拉線的主要用途)。\r\n        const targetAnchor = this.snapAnchor(target, world) ?? undefined;\r\n        const edge = makeEdgeFor(scene, nextEdgeId(scene), m.sourceId, target.id, {\r\n          ...this.host.createEdgeStyle(),\r\n          sourceAnchor,\r\n          targetAnchor,\r\n        });\r\n        this.host.runCommand(cmdAddEdge(edge), 'add-edge');\r\n      } else if (!target && this.tool === 'edge-create') {\r\n        // 只有「明確使用連線工具」拖到空白,才一步建立新節點並連上(draw.io 招牌)。\r\n        const id = nextNodeId(scene);\r\n        // mindmap:新節點直接掛在來源之下(它本來就沒有邊可以畫)。\r\n        if (scene.diagramType === 'mindmap') {\r\n          const child = makeNodeFor(scene, id, world, { parentId: m.sourceId });\r\n          this.host.runCommand(cmdAddNode(child), 'add-node');\r\n          this.setSelection([id]);\r\n          this.host.requestTextEdit(id);\r\n          this.host.refreshOverlay();\r\n          return;\r\n        }\r\n        const node = makeNodeFor(scene, id, world, {});\r\n        const edge = makeEdgeFor(scene, nextEdgeId(scene), m.sourceId, id, {\r\n          ...this.host.createEdgeStyle(),\r\n          sourceAnchor,\r\n        });\r\n        this.host.runCommand(cmdAddConnectedNode(node, edge), 'add-connected');\r\n        this.setSelection([id]);\r\n        this.host.requestTextEdit(id);\r\n      } else if (!target) {\r\n        // 從白點拉線(select 模式)放到空白 → 取消,不自動新增形狀,僅選取來源節點。\r\n        this.setSelection([m.sourceId]);\r\n      }\r\n      this.host.refreshOverlay();\r\n      return;\r\n    }\r\n    if (m.kind === 'reconnect-edge') {\r\n      const target = this.nodeUnder(e.clientX, e.clientY);\r\n      this.host.overlay.clearTransient();\r\n      this.host.overlay.showDropTarget(null, 1);\r\n      this.host.overlay.clearAnchorPoints();\r\n      if (target) {\r\n        // 重接同時更新該端錨點:吸附到候選點 → 設錨;放在節點本體 → 清成浮動。\r\n        const anchor = this.snapAnchor(target, world);\r\n        this.host.runCommand(cmdReconnectEdge(m.edgeId, m.endpoint, target.id, anchor), 'reconnect');\r\n      }\r\n      this.host.refreshOverlay();\r\n      return;\r\n    }\r\n    if (m.kind === 'marquee') {\r\n      const marquee: Rect = {\r\n        x: Math.min(m.startWorld.x, world.x),\r\n        y: Math.min(m.startWorld.y, world.y),\r\n        w: Math.abs(m.startWorld.x - world.x),\r\n        h: Math.abs(m.startWorld.y - world.y),\r\n      };\r\n      this.host.overlay.clearTransient();\r\n      if (marquee.w > 3 || marquee.h > 3) {\r\n        const hits = this.host\r\n          .getScene()\r\n          .nodes.filter((n) => rectsIntersect(marquee, nodeRect(n)))\r\n          .map((n) => n.id);\r\n        this.setSelection(m.additive ? [...new Set([...this.getSelection(), ...hits])] : hits);\r\n      }\r\n      return;\r\n    }\r\n    if (m.kind === 'pan') {\r\n      this.svg.style.cursor = this.tool === 'pan' ? 'grab' : 'default';\r\n      // 從空白處按下且幾乎沒拖曳 → 視為點擊空白 → 取消選取。\r\n      if (m.deselectAt && Math.hypot(e.clientX - m.deselectAt.x, e.clientY - m.deselectAt.y) < 4) {\r\n        this.clearSelection();\r\n      }\r\n    }\r\n  };\r\n\r\n  private onPointerCancel = (e: PointerEvent): void => {\r\n    this.activePointers.delete(e.pointerId);\r\n    // 還原預覽:用目前模型重畫。\r\n    this.host.renderer.render(this.host.getScene());\r\n    this.host.overlay.clearGuides();\r\n    this.host.overlay.clearTransient();\r\n    this.host.overlay.showDropTarget(null, 1);\r\n    this.host.overlay.clearAnchorPoints();\r\n    this.host.refreshOverlay();\r\n    this.mode = { kind: 'idle' };\r\n  };\r\n\r\n  private onWheel = (e: WheelEvent): void => {\r\n    e.preventDefault();\r\n    const factor = e.deltaY < 0 ? 1.12 : 1 / 1.12;\r\n    this.host.viewport.zoomAtClient(factor, e.clientX, e.clientY);\r\n    this.host.refreshOverlay();\r\n  };\r\n\r\n  /** 內容外框(供 fit)。 */\r\n  contentBounds(): Rect | null {\r\n    return boundingBox(this.host.getScene().nodes.map(nodeRect));\r\n  }\r\n}\r\n\r\n/** 依拖動方向 dir 計算 resize 後的矩形(對角固定)。 */\r\nfunction resizeRect(start: Rect, dir: ResizeDir, world: Point, startWorld: Point): Rect {\r\n  let { x, y, w, h } = start;\r\n  const dx = world.x - startWorld.x;\r\n  const dy = world.y - startWorld.y;\r\n  if (dir.includes('e')) w = start.w + dx;\r\n  if (dir.includes('s')) h = start.h + dy;\r\n  if (dir.includes('w')) {\r\n    w = start.w - dx;\r\n    x = start.x + dx;\r\n  }\r\n  if (dir.includes('n')) {\r\n    h = start.h - dy;\r\n    y = start.y + dy;\r\n  }\r\n  // 夾住最小值(維持對角固定)。\r\n  if (w < MIN_W) {\r\n    if (dir.includes('w')) x -= MIN_W - w;\r\n    w = MIN_W;\r\n  }\r\n  if (h < MIN_H) {\r\n    if (dir.includes('n')) y -= MIN_H - h;\r\n    h = MIN_H;\r\n  }\r\n  return { x, y, w, h };\r\n}\r\n","// 行內文字編輯:在容器上疊一個絕對定位的 <textarea>,定位到節點螢幕矩形。\r\n// 用真實 DOM 輸入 → 平滑游標 + IME(CJK)友善。Enter 送出、Shift+Enter 換行、Esc 取消。\r\n\r\nimport { SKETCH_FONT } from '../../themes/sketch';\r\n\r\nexport interface TextEditScreenRect {\r\n  left: number;\r\n  top: number;\r\n  width: number;\r\n  height: number;\r\n}\r\n\r\nexport interface TextEditOptions {\r\n  /** 多行結構編輯(ER 屬性 / class 成員):Enter 換行,Ctrl/⌘+Enter 或失焦才送出。 */\r\n  multiline?: boolean;\r\n}\r\n\r\nexport function openTextEditor(\r\n  container: HTMLElement,\r\n  rect: TextEditScreenRect,\r\n  initial: string,\r\n  onCommit: (value: string) => void,\r\n  onCancel: () => void,\r\n  opts: TextEditOptions = {},\r\n): () => void {\r\n  const ml = opts.multiline === true;\r\n  const ta = document.createElement('textarea');\r\n  ta.value = initial.replace(/<br\\s*\\/?>/g, '\\n');\r\n  ta.setAttribute(\r\n    'style',\r\n    `position:absolute;left:${rect.left}px;top:${rect.top}px;` +\r\n      `width:${Math.max(60, rect.width)}px;height:${Math.max(ml ? 60 : 28, rect.height)}px;` +\r\n      `font:${ml ? '13px/1.5 ui-monospace,monospace' : `14px/1.25 ${SKETCH_FONT}`};` +\r\n      `text-align:${ml ? 'left' : 'center'};resize:none;z-index:30;` +\r\n      'box-sizing:border-box;padding:4px 6px;border:2px solid #2563eb;border-radius:6px;' +\r\n      'background:#fff;color:#1e1e1e;outline:none;overflow:auto;',\r\n  );\r\n  let done = false;\r\n  const finish = (commit: boolean): void => {\r\n    if (done) return;\r\n    done = true;\r\n    const value = ta.value;\r\n    ta.remove();\r\n    if (commit) onCommit(value);\r\n    else onCancel();\r\n  };\r\n  ta.addEventListener('keydown', (e) => {\r\n    const commitKey = ml ? e.key === 'Enter' && (e.ctrlKey || e.metaKey) : e.key === 'Enter' && !e.shiftKey;\r\n    if (commitKey) {\r\n      e.preventDefault();\r\n      finish(true);\r\n    } else if (e.key === 'Escape') {\r\n      e.preventDefault();\r\n      finish(false);\r\n    }\r\n    e.stopPropagation(); // 不要讓編輯器快捷鍵(刪除等)觸發。\r\n  });\r\n  ta.addEventListener('blur', () => finish(true));\r\n  container.appendChild(ta);\r\n  ta.focus();\r\n  ta.select();\r\n  return () => finish(false);\r\n}\r\n","// 小型 SVG/HTML 命名空間建立工具。\r\n\r\nexport const SVG_NS = 'http://www.w3.org/2000/svg';\r\nexport const XHTML_NS = 'http://www.w3.org/1999/xhtml';\r\n\r\nexport function svgEl<K extends keyof SVGElementTagNameMap>(\r\n  tag: K,\r\n  attrs?: Record<string, string | number>,\r\n): SVGElementTagNameMap[K] {\r\n  const el = document.createElementNS(SVG_NS, tag);\r\n  if (attrs) for (const [k, v] of Object.entries(attrs)) el.setAttribute(k, String(v));\r\n  return el;\r\n}\r\n\r\nexport function clearChildren(el: Element): void {\r\n  while (el.firstChild) el.removeChild(el.firstChild);\r\n}\r\n\r\n/**\r\n * markdown label(mermaid 反引號標籤)行內格式:**粗體** / *斜體* / `程式碼` / <br>。\r\n * 以建立 DOM 節點呈現(非 innerHTML)→ 無注入風險。共用於節點與邊標籤。\r\n */\r\nexport function appendInlineMarkdown(parent: HTMLElement, text: string): void {\r\n  const lines = text.split(/<br\\s*\\/?>/);\r\n  const re = /(\\*\\*|__)(.+?)\\1|(\\*|_)(.+?)\\3|`([^`]+)`/g;\r\n  lines.forEach((line, li) => {\r\n    if (li > 0) parent.appendChild(document.createElementNS(XHTML_NS, 'br') as unknown as Node);\r\n    let last = 0;\r\n    let m: RegExpExecArray | null;\r\n    re.lastIndex = 0;\r\n    while ((m = re.exec(line)) !== null) {\r\n      if (m.index > last) parent.appendChild(document.createTextNode(line.slice(last, m.index)));\r\n      let tag: 'strong' | 'em' | 'code';\r\n      let content: string;\r\n      if (m[1]) {\r\n        tag = 'strong';\r\n        content = m[2];\r\n      } else if (m[3]) {\r\n        tag = 'em';\r\n        content = m[4];\r\n      } else {\r\n        tag = 'code';\r\n        content = m[5];\r\n      }\r\n      const el = document.createElementNS(XHTML_NS, tag) as unknown as HTMLElement;\r\n      el.textContent = content;\r\n      if (tag === 'code') el.setAttribute('style', 'font-family:monospace;font-size:0.9em;');\r\n      parent.appendChild(el as unknown as Node);\r\n      last = re.lastIndex;\r\n    }\r\n    if (last < line.length) parent.appendChild(document.createTextNode(line.slice(last)));\r\n  });\r\n}\r\n","// 編輯器自管視口(不用 svg-pan-zoom,避免它攔截拖曳與編輯互動衝突)。\r\n// 在一個 <g class=\"rsm-viewport\"> 上維護 transform = translate(panX,panY) scale(zoom)。\r\n// 提供 screen↔world 換算、zoom-to-cursor、fit/reset。\r\n\r\nimport type { Point } from '../scene/types';\r\nimport type { Rect } from '../scene/geometry';\r\nimport { svgEl } from '../render/dom';\r\n\r\nexport interface ViewportOptions {\r\n  minZoom?: number;\r\n  maxZoom?: number;\r\n  onChange?: () => void;\r\n}\r\n\r\nexport class Viewport {\r\n  readonly group: SVGGElement;\r\n  private panX = 0;\r\n  private panY = 0;\r\n  private zoom = 1;\r\n  private minZoom: number;\r\n  private maxZoom: number;\r\n  private onChange?: () => void;\r\n\r\n  constructor(private svg: SVGSVGElement, opts: ViewportOptions = {}) {\r\n    this.minZoom = opts.minZoom ?? 0.1;\r\n    this.maxZoom = opts.maxZoom ?? 8;\r\n    this.onChange = opts.onChange;\r\n    this.group = svgEl('g', { class: 'rsm-viewport' });\r\n    // 建構期間只設 transform,不觸發 onChange:呼叫端的 onChange 閉包可能尚未能引用\r\n    // 本實例(const viewport = new Viewport({ onChange: () => viewport... }))→ 避免 TDZ。\r\n    this.setTransform();\r\n  }\r\n\r\n  private setTransform(): void {\r\n    this.group.setAttribute('transform', `translate(${this.panX},${this.panY}) scale(${this.zoom})`);\r\n  }\r\n\r\n  private apply(): void {\r\n    this.setTransform();\r\n    this.onChange?.();\r\n  }\r\n\r\n  getZoom(): number {\r\n    return this.zoom;\r\n  }\r\n\r\n  /** 容器(svg)左上角為原點的螢幕座標。 */\r\n  private clientToContainer(clientX: number, clientY: number): Point {\r\n    const rect = this.svg.getBoundingClientRect();\r\n    return { x: clientX - rect.left, y: clientY - rect.top };\r\n  }\r\n\r\n  screenToWorld(clientX: number, clientY: number): Point {\r\n    const c = this.clientToContainer(clientX, clientY);\r\n    return { x: (c.x - this.panX) / this.zoom, y: (c.y - this.panY) / this.zoom };\r\n  }\r\n\r\n  worldToScreen(p: Point): Point {\r\n    return { x: p.x * this.zoom + this.panX, y: p.y * this.zoom + this.panY };\r\n  }\r\n\r\n  panBy(dxScreen: number, dyScreen: number): void {\r\n    this.panX += dxScreen;\r\n    this.panY += dyScreen;\r\n    this.apply();\r\n  }\r\n\r\n  /** 以游標為錨點縮放(factor>1 放大);錨點世界座標維持在原螢幕位置。 */\r\n  zoomAtClient(factor: number, clientX: number, clientY: number): void {\r\n    const next = Math.max(this.minZoom, Math.min(this.maxZoom, this.zoom * factor));\r\n    if (next === this.zoom) return;\r\n    const c = this.clientToContainer(clientX, clientY);\r\n    // 維持錨點:world = (c - pan)/zoom 不變 → pan' = c - world*next\r\n    const worldX = (c.x - this.panX) / this.zoom;\r\n    const worldY = (c.y - this.panY) / this.zoom;\r\n    this.zoom = next;\r\n    this.panX = c.x - worldX * this.zoom;\r\n    this.panY = c.y - worldY * this.zoom;\r\n    this.apply();\r\n  }\r\n\r\n  zoomBy(factor: number): void {\r\n    const rect = this.svg.getBoundingClientRect();\r\n    this.zoomAtClient(factor, rect.left + rect.width / 2, rect.top + rect.height / 2);\r\n  }\r\n\r\n  setZoom(z: number): void {\r\n    this.zoom = Math.max(this.minZoom, Math.min(this.maxZoom, z));\r\n    this.apply();\r\n  }\r\n\r\n  /** 把內容外框置中且符合容器(留白 margin)。 */\r\n  fit(content: Rect | null, margin = 48): void {\r\n    const rect = this.svg.getBoundingClientRect();\r\n    const vw = rect.width || 800;\r\n    const vh = rect.height || 600;\r\n    if (!content || content.w === 0 || content.h === 0) {\r\n      this.zoom = 1;\r\n      this.panX = vw / 2;\r\n      this.panY = vh / 2;\r\n      this.apply();\r\n      return;\r\n    }\r\n    const z = Math.min((vw - margin * 2) / content.w, (vh - margin * 2) / content.h);\r\n    this.zoom = Math.max(this.minZoom, Math.min(this.maxZoom, z));\r\n    const cx = content.x + content.w / 2;\r\n    const cy = content.y + content.h / 2;\r\n    this.panX = vw / 2 - cx * this.zoom;\r\n    this.panY = vh / 2 - cy * this.zoom;\r\n    this.apply();\r\n  }\r\n\r\n  getZoomPercent(base = 1): number {\r\n    return Math.round((this.zoom / base) * 100);\r\n  }\r\n}\r\n","// 選取 / 控制點 / 框選 / 橡皮筋 / 吸附導引線疊層。畫在 renderer 的 overlayLayer(在 viewport 內)。\r\n// 控制點尺寸除以 zoom → 螢幕上恆定大小。\r\n\r\nimport type { Rect } from '../scene/geometry';\r\nimport { PERIMETER_ANCHORS, sameAnchor } from '../scene/geometry';\r\nimport { svgEl, clearChildren } from '../render/dom';\r\nimport type { EdgeAnchor, Point } from '../scene/types';\r\nimport type { Guide } from './snap';\r\n\r\nconst ACCENT = '#2563eb';\r\nconst SNAP_COLOR = '#e64980';\r\nconst HANDLE_PX = 9;\r\n\r\nexport type ResizeDir = 'nw' | 'n' | 'ne' | 'e' | 'se' | 's' | 'sw' | 'w';\r\nexport type ConnSide = 'top' | 'right' | 'bottom' | 'left';\r\n\r\n// 只用 4 角當縮放控制點;4 邊中點留給「連線控制點」,避免重疊衝突。\r\nconst RESIZE_DIRS: Array<{ dir: ResizeDir; fx: number; fy: number }> = [\r\n  { dir: 'nw', fx: 0, fy: 0 },\r\n  { dir: 'ne', fx: 1, fy: 0 },\r\n  { dir: 'se', fx: 1, fy: 1 },\r\n  { dir: 'sw', fx: 0, fy: 1 },\r\n];\r\n\r\n// 選取時:4 角已被縮放控制點占用,故連線點只放 4 邊中點(避免重疊衝突)。\r\n// 滑過(未選取)時則用 geometry 的完整 8 點(PERIMETER_ANCHORS),含 4 角。\r\nconst CONN_SIDES: Array<{ side: ConnSide; fx: number; fy: number }> = [\r\n  { side: 'top', fx: 0.5, fy: 0 },\r\n  { side: 'right', fx: 1, fy: 0.5 },\r\n  { side: 'bottom', fx: 0.5, fy: 1 },\r\n  { side: 'left', fx: 0, fy: 0.5 },\r\n];\r\n\r\nexport class Overlay {\r\n  private selLayer: SVGGElement;\r\n  private selEdgeLayer: SVGGElement;\r\n  private hoverLayer: SVGGElement;\r\n  private dropLayer: SVGGElement;\r\n  private anchorLayer: SVGGElement;\r\n  private guideLayer: SVGGElement;\r\n  private transientLayer: SVGGElement;\r\n\r\n  constructor(private layer: SVGGElement) {\r\n    this.selEdgeLayer = svgEl('g', { class: 'rsm-ov-sel-edge' });\r\n    this.hoverLayer = svgEl('g', { class: 'rsm-ov-hover' });\r\n    this.dropLayer = svgEl('g', { class: 'rsm-ov-drop' });\r\n    this.anchorLayer = svgEl('g', { class: 'rsm-ov-anchors' });\r\n    this.selLayer = svgEl('g', { class: 'rsm-ov-sel' });\r\n    this.guideLayer = svgEl('g', { class: 'rsm-ov-guides' });\r\n    this.transientLayer = svgEl('g', { class: 'rsm-ov-transient' });\r\n    layer.appendChild(this.guideLayer);\r\n    layer.appendChild(this.dropLayer);\r\n    layer.appendChild(this.selEdgeLayer);\r\n    layer.appendChild(this.hoverLayer);\r\n    layer.appendChild(this.selLayer);\r\n    // anchorLayer 疊在最上層(transient 之下),拉線時的候選點要蓋過 drop 高亮框。\r\n    layer.appendChild(this.anchorLayer);\r\n    layer.appendChild(this.transientLayer);\r\n  }\r\n\r\n  /** 連線/重接時:把游標下的目標節點外框高亮(draw.io 式的可放置回饋)。 */\r\n  showDropTarget(r: Rect | null, zoom: number): void {\r\n    clearChildren(this.dropLayer);\r\n    if (!r) return;\r\n    const pad = 3 / zoom;\r\n    const box = svgEl('rect', {\r\n      x: r.x - pad,\r\n      y: r.y - pad,\r\n      width: r.w + pad * 2,\r\n      height: r.h + pad * 2,\r\n      fill: `${ACCENT}1f`,\r\n      stroke: ACCENT,\r\n      'stroke-width': 2 / zoom,\r\n      rx: 4 / zoom,\r\n    });\r\n    box.style.pointerEvents = 'none';\r\n    this.dropLayer.appendChild(box);\r\n  }\r\n\r\n  /**\r\n   * 滑過「可以拖、但不是 node」的東西時的外框(目前用於 sequence 的訊息 / 筆記)。\r\n   *\r\n   * 沒有這層回饋,那些箭頭看起來就只是圖上的線 —— 使用者不會想到它抓得起來。\r\n   * 畫在 hoverLayer,選取框在它上層,兩者同時出現也不打架。\r\n   */\r\n  showHoverRect(r: Rect, zoom: number): void {\r\n    clearChildren(this.hoverLayer);\r\n    const pad = 3 / zoom;\r\n    const box = svgEl('rect', {\r\n      x: r.x - pad,\r\n      y: r.y - pad,\r\n      width: r.w + pad * 2,\r\n      height: r.h + pad * 2,\r\n      fill: `${ACCENT}14`,\r\n      stroke: ACCENT,\r\n      'stroke-width': 1 / zoom,\r\n      'stroke-dasharray': `${3 / zoom} ${2 / zoom}`,\r\n      rx: 3 / zoom,\r\n    });\r\n    box.style.pointerEvents = 'none';\r\n    this.hoverLayer.appendChild(box);\r\n  }\r\n\r\n  /**\r\n   * 拖曳換序時的落點指示線。\r\n   *\r\n   * 刻意跟吸附導引線(showGuides 的細虛線)長得不一樣:那條是「你對齊到什麼」的參考,\r\n   * 這條是「放手會發生什麼」的承諾 —— 是整個手勢裡最需要被看見的東西。實線、粗一點,\r\n   * 兩端加短豎線把範圍圈出來,才不會在滿是箭頭的序列圖裡被看漏。\r\n   */\r\n  showInsertLine(x1: number, x2: number, y: number, zoom: number): void {\r\n    clearChildren(this.guideLayer);\r\n    const w = 2 / zoom;\r\n    const cap = 5 / zoom;\r\n    const add = (attrs: Record<string, string | number>): void => {\r\n      const el = svgEl('line', { stroke: ACCENT, 'stroke-width': w, 'stroke-linecap': 'round', ...attrs });\r\n      el.style.pointerEvents = 'none';\r\n      this.guideLayer.appendChild(el);\r\n    };\r\n    add({ x1, y1: y, x2, y2: y });\r\n    add({ x1, y1: y - cap, x2: x1, y2: y + cap });\r\n    add({ x1: x2, y1: y - cap, x2, y2: y + cap });\r\n  }\r\n\r\n  /**\r\n   * 滑過節點時顯示 8 個固定連線錨點(藍點:4 邊中點 + 4 角)→ 從某點拖出即可從該位置拉線\r\n   * (draw.io 式,免先選取,直覺好發現)。每點帶 fx/fy 供拉線時記成 edge.sourceAnchor。\r\n   */\r\n  showHoverHandles(nodeId: string, r: Rect, zoom: number): void {\r\n    clearChildren(this.hoverLayer);\r\n    const hs = HANDLE_PX / zoom;\r\n    for (const a of PERIMETER_ANCHORS) {\r\n      const dot = svgEl('circle', {\r\n        cx: r.x + r.w * a.fx,\r\n        cy: r.y + r.h * a.fy,\r\n        r: hs * 0.55,\r\n        fill: '#fff',\r\n        stroke: ACCENT,\r\n        'stroke-width': 1.5 / zoom,\r\n        'data-conn-handle': '1',\r\n        'data-conn-node': nodeId,\r\n        'data-conn-fx': String(a.fx),\r\n        'data-conn-fy': String(a.fy),\r\n      });\r\n      dot.style.cursor = 'crosshair';\r\n      this.hoverLayer.appendChild(dot);\r\n    }\r\n  }\r\n\r\n  clearHover(): void {\r\n    clearChildren(this.hoverLayer);\r\n  }\r\n\r\n  /**\r\n   * 拉線 / 重接時,在目標節點上畫出 8 個候選錨點;`highlight` 為目前吸附中的點(放大實心)。\r\n   * 讓使用者明確看到「會接到哪個位置」(draw.io 式)。r=null → 清除。\r\n   */\r\n  showAnchorPoints(r: Rect | null, zoom: number, highlight: EdgeAnchor | null): void {\r\n    clearChildren(this.anchorLayer);\r\n    if (!r) return;\r\n    const hs = HANDLE_PX / zoom;\r\n    for (const a of PERIMETER_ANCHORS) {\r\n      const hi = highlight ? sameAnchor(a, highlight) : false;\r\n      const dot = svgEl('circle', {\r\n        cx: r.x + r.w * a.fx,\r\n        cy: r.y + r.h * a.fy,\r\n        r: (hi ? 0.95 : 0.5) * hs,\r\n        fill: hi ? ACCENT : '#fff',\r\n        stroke: ACCENT,\r\n        'stroke-width': 1.5 / zoom,\r\n      });\r\n      dot.style.pointerEvents = 'none';\r\n      this.anchorLayer.appendChild(dot);\r\n    }\r\n  }\r\n\r\n  clearAnchorPoints(): void {\r\n    clearChildren(this.anchorLayer);\r\n  }\r\n\r\n  /** 選取的連線:沿路徑畫半透明粗描邊(accent)當高亮 + 兩端可拖曳端點(重新接線)。 */\r\n  showEdges(paths: Point[][], zoom: number): void {\r\n    clearChildren(this.selEdgeLayer);\r\n    const hs = HANDLE_PX / zoom;\r\n    for (const pts of paths) {\r\n      if (pts.length < 2) continue;\r\n      const d = pts.map((p, i) => `${i ? 'L' : 'M'}${p.x},${p.y}`).join(' ');\r\n      const hl = svgEl('path', {\r\n        d,\r\n        fill: 'none',\r\n        stroke: ACCENT,\r\n        'stroke-width': 8 / zoom,\r\n        'stroke-opacity': 0.4,\r\n      });\r\n      hl.setAttribute('stroke-linecap', 'round');\r\n      hl.setAttribute('stroke-linejoin', 'round');\r\n      hl.style.pointerEvents = 'none';\r\n      this.selEdgeLayer.appendChild(hl);\r\n      // 兩端端點(可拖曳重新接線的視覺提示)。\r\n      for (const ep of [pts[0], pts[pts.length - 1]]) {\r\n        const dot = svgEl('circle', {\r\n          cx: ep.x,\r\n          cy: ep.y,\r\n          r: hs * 0.62,\r\n          fill: '#fff',\r\n          stroke: ACCENT,\r\n          'stroke-width': 1.5 / zoom,\r\n        });\r\n        dot.style.pointerEvents = 'none';\r\n        this.selEdgeLayer.appendChild(dot);\r\n      }\r\n    }\r\n  }\r\n\r\n  /** 畫選取外框 + 控制點。單選時含 8 resize + 4 連線控制點。 */\r\n  showSelection(rects: Array<{ id: string; rect: Rect }>, zoom: number, opts: { handles: boolean }): void {\r\n    clearChildren(this.selLayer);\r\n    const hs = HANDLE_PX / zoom;\r\n    for (const { rect: r } of rects) {\r\n      const outline = svgEl('rect', {\r\n        x: r.x - 2 / zoom,\r\n        y: r.y - 2 / zoom,\r\n        width: r.w + 4 / zoom,\r\n        height: r.h + 4 / zoom,\r\n        fill: 'none',\r\n        stroke: ACCENT,\r\n        'stroke-width': 1.5 / zoom,\r\n        rx: 3 / zoom,\r\n      });\r\n      outline.style.pointerEvents = 'none';\r\n      this.selLayer.appendChild(outline);\r\n    }\r\n    if (!opts.handles || rects.length !== 1) return;\r\n    const r = rects[0].rect;\r\n    const nodeId = rects[0].id;\r\n    // 連線控制點(圓)。4 角被縮放控制點占用 → 選取時只放 4 邊中點;各帶 fx/fy 供設 sourceAnchor。\r\n    for (const c of CONN_SIDES) {\r\n      const cx = r.x + r.w * c.fx;\r\n      const cy = r.y + r.h * c.fy;\r\n      const dot = svgEl('circle', {\r\n        cx,\r\n        cy,\r\n        r: hs * 0.6,\r\n        fill: '#fff',\r\n        stroke: ACCENT,\r\n        'stroke-width': 1.5 / zoom,\r\n        'data-conn-handle': c.side,\r\n        'data-conn-node': nodeId,\r\n        'data-conn-fx': String(c.fx),\r\n        'data-conn-fy': String(c.fy),\r\n      });\r\n      dot.style.cursor = 'crosshair';\r\n      this.selLayer.appendChild(dot);\r\n    }\r\n    // resize 控制點(方)。\r\n    for (const h of RESIZE_DIRS) {\r\n      const cx = r.x + r.w * h.fx;\r\n      const cy = r.y + r.h * h.fy;\r\n      const box = svgEl('rect', {\r\n        x: cx - hs / 2,\r\n        y: cy - hs / 2,\r\n        width: hs,\r\n        height: hs,\r\n        fill: '#fff',\r\n        stroke: ACCENT,\r\n        'stroke-width': 1.5 / zoom,\r\n        'data-resize': h.dir,\r\n        'data-resize-node': nodeId,\r\n      });\r\n      box.style.cursor = `${h.dir}-resize`;\r\n      this.selLayer.appendChild(box);\r\n    }\r\n  }\r\n\r\n  clearSelection(): void {\r\n    clearChildren(this.selLayer);\r\n  }\r\n\r\n  showGuides(guides: Guide[], zoom: number): void {\r\n    clearChildren(this.guideLayer);\r\n    for (const g of guides) {\r\n      const line = svgEl('line', {\r\n        x1: g.x1,\r\n        y1: g.y1,\r\n        x2: g.x2,\r\n        y2: g.y2,\r\n        stroke: SNAP_COLOR,\r\n        'stroke-width': 1 / zoom,\r\n        'stroke-dasharray': `${4 / zoom} ${3 / zoom}`,\r\n      });\r\n      line.style.pointerEvents = 'none';\r\n      this.guideLayer.appendChild(line);\r\n    }\r\n  }\r\n\r\n  clearGuides(): void {\r\n    clearChildren(this.guideLayer);\r\n  }\r\n\r\n  showMarquee(a: Point, b: Point, zoom: number): void {\r\n    clearChildren(this.transientLayer);\r\n    const rect = svgEl('rect', {\r\n      x: Math.min(a.x, b.x),\r\n      y: Math.min(a.y, b.y),\r\n      width: Math.abs(a.x - b.x),\r\n      height: Math.abs(a.y - b.y),\r\n      fill: `${ACCENT}1a`,\r\n      stroke: ACCENT,\r\n      'stroke-width': 1 / zoom,\r\n      'stroke-dasharray': `${4 / zoom} ${2 / zoom}`,\r\n    });\r\n    rect.style.pointerEvents = 'none';\r\n    this.transientLayer.appendChild(rect);\r\n  }\r\n\r\n  showRubberBand(from: Point, to: Point, zoom: number): void {\r\n    clearChildren(this.transientLayer);\r\n    const line = svgEl('line', {\r\n      x1: from.x,\r\n      y1: from.y,\r\n      x2: to.x,\r\n      y2: to.y,\r\n      stroke: ACCENT,\r\n      'stroke-width': 1.8 / zoom,\r\n      'stroke-dasharray': `${5 / zoom} ${4 / zoom}`,\r\n    });\r\n    line.style.pointerEvents = 'none';\r\n    this.transientLayer.appendChild(line);\r\n    const dot = svgEl('circle', { cx: to.x, cy: to.y, r: 4 / zoom, fill: ACCENT });\r\n    dot.style.pointerEvents = 'none';\r\n    this.transientLayer.appendChild(dot);\r\n  }\r\n\r\n  clearTransient(): void {\r\n    clearChildren(this.transientLayer);\r\n  }\r\n}\r\n","function t(t,e,s){if(t&&t.length){const[n,o]=e,a=Math.PI/180*s,h=Math.cos(a),r=Math.sin(a);for(const e of t){const[t,s]=e;e[0]=(t-n)*h-(s-o)*r+n,e[1]=(t-n)*r+(s-o)*h+o}}}function e(t,e){return t[0]===e[0]&&t[1]===e[1]}function s(s,n,o,a=1){const h=o,r=Math.max(n,.1),i=s[0]&&s[0][0]&&\"number\"==typeof s[0][0]?[s]:s,c=[0,0];if(h)for(const e of i)t(e,c,h);const l=function(t,s,n){const o=[];for(const s of t){const t=[...s];e(t[0],t[t.length-1])||t.push([t[0][0],t[0][1]]),t.length>2&&o.push(t)}const a=[];s=Math.max(s,.1);const h=[];for(const t of o)for(let e=0;e<t.length-1;e++){const s=t[e],n=t[e+1];if(s[1]!==n[1]){const t=Math.min(s[1],n[1]);h.push({ymin:t,ymax:Math.max(s[1],n[1]),x:t===s[1]?s[0]:n[0],islope:(n[0]-s[0])/(n[1]-s[1])})}}if(h.sort(((t,e)=>t.ymin<e.ymin?-1:t.ymin>e.ymin?1:t.x<e.x?-1:t.x>e.x?1:t.ymax===e.ymax?0:(t.ymax-e.ymax)/Math.abs(t.ymax-e.ymax))),!h.length)return a;let r=[],i=h[0].ymin,c=0;for(;r.length||h.length;){if(h.length){let t=-1;for(let e=0;e<h.length&&!(h[e].ymin>i);e++)t=e;h.splice(0,t+1).forEach((t=>{r.push({s:i,edge:t})}))}if(r=r.filter((t=>!(t.edge.ymax<=i))),r.sort(((t,e)=>t.edge.x===e.edge.x?0:(t.edge.x-e.edge.x)/Math.abs(t.edge.x-e.edge.x))),(1!==n||c%s==0)&&r.length>1)for(let t=0;t<r.length;t+=2){const e=t+1;if(e>=r.length)break;const s=r[t].edge,n=r[e].edge;a.push([[Math.round(s.x),i],[Math.round(n.x),i]])}i+=n,r.forEach((t=>{t.edge.x=t.edge.x+n*t.edge.islope})),c++}return a}(i,r,a);if(h){for(const e of i)t(e,c,-h);!function(e,s,n){const o=[];e.forEach((t=>o.push(...t))),t(o,s,n)}(l,c,-h)}return l}function n(t,e){var n;const o=e.hachureAngle+90;let a=e.hachureGap;a<0&&(a=4*e.strokeWidth),a=Math.round(Math.max(a,.1));let h=1;return e.roughness>=1&&((null===(n=e.randomizer)||void 0===n?void 0:n.next())||Math.random())>.7&&(h=a),s(t,a,o,h||1)}class o{constructor(t){this.helper=t}fillPolygons(t,e){return this._fillPolygons(t,e)}_fillPolygons(t,e){const s=n(t,e);return{type:\"fillSketch\",ops:this.renderLines(s,e)}}renderLines(t,e){const s=[];for(const n of t)s.push(...this.helper.doubleLineOps(n[0][0],n[0][1],n[1][0],n[1][1],e));return s}}function a(t){const e=t[0],s=t[1];return Math.sqrt(Math.pow(e[0]-s[0],2)+Math.pow(e[1]-s[1],2))}class h extends o{fillPolygons(t,e){let s=e.hachureGap;s<0&&(s=4*e.strokeWidth),s=Math.max(s,.1);const o=n(t,Object.assign({},e,{hachureGap:s})),h=Math.PI/180*e.hachureAngle,r=[],i=.5*s*Math.cos(h),c=.5*s*Math.sin(h);for(const[t,e]of o)a([t,e])&&r.push([[t[0]-i,t[1]+c],[...e]],[[t[0]+i,t[1]-c],[...e]]);return{type:\"fillSketch\",ops:this.renderLines(r,e)}}}class r extends o{fillPolygons(t,e){const s=this._fillPolygons(t,e),n=Object.assign({},e,{hachureAngle:e.hachureAngle+90}),o=this._fillPolygons(t,n);return s.ops=s.ops.concat(o.ops),s}}class i{constructor(t){this.helper=t}fillPolygons(t,e){const s=n(t,e=Object.assign({},e,{hachureAngle:0}));return this.dotsOnLines(s,e)}dotsOnLines(t,e){const s=[];let n=e.hachureGap;n<0&&(n=4*e.strokeWidth),n=Math.max(n,.1);let o=e.fillWeight;o<0&&(o=e.strokeWidth/2);const h=n/4;for(const r of t){const t=a(r),i=t/n,c=Math.ceil(i)-1,l=t-c*n,u=(r[0][0]+r[1][0])/2-n/4,p=Math.min(r[0][1],r[1][1]);for(let t=0;t<c;t++){const a=p+l+t*n,r=u-h+2*Math.random()*h,i=a-h+2*Math.random()*h,c=this.helper.ellipse(r,i,o,o,e);s.push(...c.ops)}}return{type:\"fillSketch\",ops:s}}}class c{constructor(t){this.helper=t}fillPolygons(t,e){const s=n(t,e);return{type:\"fillSketch\",ops:this.dashedLine(s,e)}}dashedLine(t,e){const s=e.dashOffset<0?e.hachureGap<0?4*e.strokeWidth:e.hachureGap:e.dashOffset,n=e.dashGap<0?e.hachureGap<0?4*e.strokeWidth:e.hachureGap:e.dashGap,o=[];return t.forEach((t=>{const h=a(t),r=Math.floor(h/(s+n)),i=(h+n-r*(s+n))/2;let c=t[0],l=t[1];c[0]>l[0]&&(c=t[1],l=t[0]);const u=Math.atan((l[1]-c[1])/(l[0]-c[0]));for(let t=0;t<r;t++){const a=t*(s+n),h=a+s,r=[c[0]+a*Math.cos(u)+i*Math.cos(u),c[1]+a*Math.sin(u)+i*Math.sin(u)],l=[c[0]+h*Math.cos(u)+i*Math.cos(u),c[1]+h*Math.sin(u)+i*Math.sin(u)];o.push(...this.helper.doubleLineOps(r[0],r[1],l[0],l[1],e))}})),o}}class l{constructor(t){this.helper=t}fillPolygons(t,e){const s=e.hachureGap<0?4*e.strokeWidth:e.hachureGap,o=e.zigzagOffset<0?s:e.zigzagOffset,a=n(t,e=Object.assign({},e,{hachureGap:s+o}));return{type:\"fillSketch\",ops:this.zigzagLines(a,o,e)}}zigzagLines(t,e,s){const n=[];return t.forEach((t=>{const o=a(t),h=Math.round(o/(2*e));let r=t[0],i=t[1];r[0]>i[0]&&(r=t[1],i=t[0]);const c=Math.atan((i[1]-r[1])/(i[0]-r[0]));for(let t=0;t<h;t++){const o=2*t*e,a=2*(t+1)*e,h=Math.sqrt(2*Math.pow(e,2)),i=[r[0]+o*Math.cos(c),r[1]+o*Math.sin(c)],l=[r[0]+a*Math.cos(c),r[1]+a*Math.sin(c)],u=[i[0]+h*Math.cos(c+Math.PI/4),i[1]+h*Math.sin(c+Math.PI/4)];n.push(...this.helper.doubleLineOps(i[0],i[1],u[0],u[1],s),...this.helper.doubleLineOps(u[0],u[1],l[0],l[1],s))}})),n}}const u={};class p{constructor(t){this.seed=t}next(){return this.seed?(2**31-1&(this.seed=Math.imul(48271,this.seed)))/2**31:Math.random()}}const f=0,d=1,g=2,M={A:7,a:7,C:6,c:6,H:1,h:1,L:2,l:2,M:2,m:2,Q:4,q:4,S:4,s:4,T:2,t:2,V:1,v:1,Z:0,z:0};function k(t,e){return t.type===e}function b(t){const e=[],s=function(t){const e=new Array;for(;\"\"!==t;)if(t.match(/^([ \\t\\r\\n,]+)/))t=t.substr(RegExp.$1.length);else if(t.match(/^([aAcChHlLmMqQsStTvVzZ])/))e[e.length]={type:f,text:RegExp.$1},t=t.substr(RegExp.$1.length);else{if(!t.match(/^(([-+]?[0-9]+(\\.[0-9]*)?|[-+]?\\.[0-9]+)([eE][-+]?[0-9]+)?)/))return[];e[e.length]={type:d,text:`${parseFloat(RegExp.$1)}`},t=t.substr(RegExp.$1.length)}return e[e.length]={type:g,text:\"\"},e}(t);let n=\"BOD\",o=0,a=s[o];for(;!k(a,g);){let h=0;const r=[];if(\"BOD\"===n){if(\"M\"!==a.text&&\"m\"!==a.text)return b(\"M0,0\"+t);o++,h=M[a.text],n=a.text}else k(a,d)?h=M[n]:(o++,h=M[a.text],n=a.text);if(!(o+h<s.length))throw new Error(\"Path data ended short\");for(let t=o;t<o+h;t++){const e=s[t];if(!k(e,d))throw new Error(\"Param not a number: \"+n+\",\"+e.text);r[r.length]=+e.text}if(\"number\"!=typeof M[n])throw new Error(\"Bad segment: \"+n);{const t={key:n,data:r};e.push(t),o+=h,a=s[o],\"M\"===n&&(n=\"L\"),\"m\"===n&&(n=\"l\")}}return e}function y(t){let e=0,s=0,n=0,o=0;const a=[];for(const{key:h,data:r}of t)switch(h){case\"M\":a.push({key:\"M\",data:[...r]}),[e,s]=r,[n,o]=r;break;case\"m\":e+=r[0],s+=r[1],a.push({key:\"M\",data:[e,s]}),n=e,o=s;break;case\"L\":a.push({key:\"L\",data:[...r]}),[e,s]=r;break;case\"l\":e+=r[0],s+=r[1],a.push({key:\"L\",data:[e,s]});break;case\"C\":a.push({key:\"C\",data:[...r]}),e=r[4],s=r[5];break;case\"c\":{const t=r.map(((t,n)=>n%2?t+s:t+e));a.push({key:\"C\",data:t}),e=t[4],s=t[5];break}case\"Q\":a.push({key:\"Q\",data:[...r]}),e=r[2],s=r[3];break;case\"q\":{const t=r.map(((t,n)=>n%2?t+s:t+e));a.push({key:\"Q\",data:t}),e=t[2],s=t[3];break}case\"A\":a.push({key:\"A\",data:[...r]}),e=r[5],s=r[6];break;case\"a\":e+=r[5],s+=r[6],a.push({key:\"A\",data:[r[0],r[1],r[2],r[3],r[4],e,s]});break;case\"H\":a.push({key:\"H\",data:[...r]}),e=r[0];break;case\"h\":e+=r[0],a.push({key:\"H\",data:[e]});break;case\"V\":a.push({key:\"V\",data:[...r]}),s=r[0];break;case\"v\":s+=r[0],a.push({key:\"V\",data:[s]});break;case\"S\":a.push({key:\"S\",data:[...r]}),e=r[2],s=r[3];break;case\"s\":{const t=r.map(((t,n)=>n%2?t+s:t+e));a.push({key:\"S\",data:t}),e=t[2],s=t[3];break}case\"T\":a.push({key:\"T\",data:[...r]}),e=r[0],s=r[1];break;case\"t\":e+=r[0],s+=r[1],a.push({key:\"T\",data:[e,s]});break;case\"Z\":case\"z\":a.push({key:\"Z\",data:[]}),e=n,s=o}return a}function m(t){const e=[];let s=\"\",n=0,o=0,a=0,h=0,r=0,i=0;for(const{key:c,data:l}of t){switch(c){case\"M\":e.push({key:\"M\",data:[...l]}),[n,o]=l,[a,h]=l;break;case\"C\":e.push({key:\"C\",data:[...l]}),n=l[4],o=l[5],r=l[2],i=l[3];break;case\"L\":e.push({key:\"L\",data:[...l]}),[n,o]=l;break;case\"H\":n=l[0],e.push({key:\"L\",data:[n,o]});break;case\"V\":o=l[0],e.push({key:\"L\",data:[n,o]});break;case\"S\":{let t=0,a=0;\"C\"===s||\"S\"===s?(t=n+(n-r),a=o+(o-i)):(t=n,a=o),e.push({key:\"C\",data:[t,a,...l]}),r=l[0],i=l[1],n=l[2],o=l[3];break}case\"T\":{const[t,a]=l;let h=0,c=0;\"Q\"===s||\"T\"===s?(h=n+(n-r),c=o+(o-i)):(h=n,c=o);const u=n+2*(h-n)/3,p=o+2*(c-o)/3,f=t+2*(h-t)/3,d=a+2*(c-a)/3;e.push({key:\"C\",data:[u,p,f,d,t,a]}),r=h,i=c,n=t,o=a;break}case\"Q\":{const[t,s,a,h]=l,c=n+2*(t-n)/3,u=o+2*(s-o)/3,p=a+2*(t-a)/3,f=h+2*(s-h)/3;e.push({key:\"C\",data:[c,u,p,f,a,h]}),r=t,i=s,n=a,o=h;break}case\"A\":{const t=Math.abs(l[0]),s=Math.abs(l[1]),a=l[2],h=l[3],r=l[4],i=l[5],c=l[6];if(0===t||0===s)e.push({key:\"C\",data:[n,o,i,c,i,c]}),n=i,o=c;else if(n!==i||o!==c){x(n,o,i,c,t,s,a,h,r).forEach((function(t){e.push({key:\"C\",data:t})})),n=i,o=c}break}case\"Z\":e.push({key:\"Z\",data:[]}),n=a,o=h}s=c}return e}function w(t,e,s){return[t*Math.cos(s)-e*Math.sin(s),t*Math.sin(s)+e*Math.cos(s)]}function x(t,e,s,n,o,a,h,r,i,c){const l=(u=h,Math.PI*u/180);var u;let p=[],f=0,d=0,g=0,M=0;if(c)[f,d,g,M]=c;else{[t,e]=w(t,e,-l),[s,n]=w(s,n,-l);const h=(t-s)/2,c=(e-n)/2;let u=h*h/(o*o)+c*c/(a*a);u>1&&(u=Math.sqrt(u),o*=u,a*=u);const p=o*o,k=a*a,b=p*k-p*c*c-k*h*h,y=p*c*c+k*h*h,m=(r===i?-1:1)*Math.sqrt(Math.abs(b/y));g=m*o*c/a+(t+s)/2,M=m*-a*h/o+(e+n)/2,f=Math.asin(parseFloat(((e-M)/a).toFixed(9))),d=Math.asin(parseFloat(((n-M)/a).toFixed(9))),t<g&&(f=Math.PI-f),s<g&&(d=Math.PI-d),f<0&&(f=2*Math.PI+f),d<0&&(d=2*Math.PI+d),i&&f>d&&(f-=2*Math.PI),!i&&d>f&&(d-=2*Math.PI)}let k=d-f;if(Math.abs(k)>120*Math.PI/180){const t=d,e=s,r=n;d=i&&d>f?f+120*Math.PI/180*1:f+120*Math.PI/180*-1,p=x(s=g+o*Math.cos(d),n=M+a*Math.sin(d),e,r,o,a,h,0,i,[d,t,g,M])}k=d-f;const b=Math.cos(f),y=Math.sin(f),m=Math.cos(d),P=Math.sin(d),v=Math.tan(k/4),S=4/3*o*v,O=4/3*a*v,L=[t,e],T=[t+S*y,e-O*b],D=[s+S*P,n-O*m],A=[s,n];if(T[0]=2*L[0]-T[0],T[1]=2*L[1]-T[1],c)return[T,D,A].concat(p);{p=[T,D,A].concat(p);const t=[];for(let e=0;e<p.length;e+=3){const s=w(p[e][0],p[e][1],l),n=w(p[e+1][0],p[e+1][1],l),o=w(p[e+2][0],p[e+2][1],l);t.push([s[0],s[1],n[0],n[1],o[0],o[1]])}return t}}const P={randOffset:function(t,e){return G(t,e)},randOffsetWithRange:function(t,e,s){return E(t,e,s)},ellipse:function(t,e,s,n,o){const a=T(s,n,o);return D(t,e,o,a).opset},doubleLineOps:function(t,e,s,n,o){return $(t,e,s,n,o,!0)}};function v(t,e,s,n,o){return{type:\"path\",ops:$(t,e,s,n,o)}}function S(t,e,s){const n=(t||[]).length;if(n>2){const o=[];for(let e=0;e<n-1;e++)o.push(...$(t[e][0],t[e][1],t[e+1][0],t[e+1][1],s));return e&&o.push(...$(t[n-1][0],t[n-1][1],t[0][0],t[0][1],s)),{type:\"path\",ops:o}}return 2===n?v(t[0][0],t[0][1],t[1][0],t[1][1],s):{type:\"path\",ops:[]}}function O(t,e,s,n,o){return function(t,e){return S(t,!0,e)}([[t,e],[t+s,e],[t+s,e+n],[t,e+n]],o)}function L(t,e){if(t.length){const s=\"number\"==typeof t[0][0]?[t]:t,n=j(s[0],1*(1+.2*e.roughness),e),o=e.disableMultiStroke?[]:j(s[0],1.5*(1+.22*e.roughness),z(e));for(let t=1;t<s.length;t++){const a=s[t];if(a.length){const t=j(a,1*(1+.2*e.roughness),e),s=e.disableMultiStroke?[]:j(a,1.5*(1+.22*e.roughness),z(e));for(const e of t)\"move\"!==e.op&&n.push(e);for(const t of s)\"move\"!==t.op&&o.push(t)}}return{type:\"path\",ops:n.concat(o)}}return{type:\"path\",ops:[]}}function T(t,e,s){const n=Math.sqrt(2*Math.PI*Math.sqrt((Math.pow(t/2,2)+Math.pow(e/2,2))/2)),o=Math.ceil(Math.max(s.curveStepCount,s.curveStepCount/Math.sqrt(200)*n)),a=2*Math.PI/o;let h=Math.abs(t/2),r=Math.abs(e/2);const i=1-s.curveFitting;return h+=G(h*i,s),r+=G(r*i,s),{increment:a,rx:h,ry:r}}function D(t,e,s,n){const[o,a]=F(n.increment,t,e,n.rx,n.ry,1,n.increment*E(.1,E(.4,1,s),s),s);let h=q(o,null,s);if(!s.disableMultiStroke&&0!==s.roughness){const[o]=F(n.increment,t,e,n.rx,n.ry,1.5,0,s),a=q(o,null,s);h=h.concat(a)}return{estimatedPoints:a,opset:{type:\"path\",ops:h}}}function A(t,e,s,n,o,a,h,r,i){const c=t,l=e;let u=Math.abs(s/2),p=Math.abs(n/2);u+=G(.01*u,i),p+=G(.01*p,i);let f=o,d=a;for(;f<0;)f+=2*Math.PI,d+=2*Math.PI;d-f>2*Math.PI&&(f=0,d=2*Math.PI);const g=2*Math.PI/i.curveStepCount,M=Math.min(g/2,(d-f)/2),k=V(M,c,l,u,p,f,d,1,i);if(!i.disableMultiStroke){const t=V(M,c,l,u,p,f,d,1.5,i);k.push(...t)}return h&&(r?k.push(...$(c,l,c+u*Math.cos(f),l+p*Math.sin(f),i),...$(c,l,c+u*Math.cos(d),l+p*Math.sin(d),i)):k.push({op:\"lineTo\",data:[c,l]},{op:\"lineTo\",data:[c+u*Math.cos(f),l+p*Math.sin(f)]})),{type:\"path\",ops:k}}function _(t,e){const s=m(y(b(t))),n=[];let o=[0,0],a=[0,0];for(const{key:t,data:h}of s)switch(t){case\"M\":a=[h[0],h[1]],o=[h[0],h[1]];break;case\"L\":n.push(...$(a[0],a[1],h[0],h[1],e)),a=[h[0],h[1]];break;case\"C\":{const[t,s,o,r,i,c]=h;n.push(...Z(t,s,o,r,i,c,a,e)),a=[i,c];break}case\"Z\":n.push(...$(a[0],a[1],o[0],o[1],e)),a=[o[0],o[1]]}return{type:\"path\",ops:n}}function I(t,e){const s=[];for(const n of t)if(n.length){const t=e.maxRandomnessOffset||0,o=n.length;if(o>2){s.push({op:\"move\",data:[n[0][0]+G(t,e),n[0][1]+G(t,e)]});for(let a=1;a<o;a++)s.push({op:\"lineTo\",data:[n[a][0]+G(t,e),n[a][1]+G(t,e)]})}}return{type:\"fillPath\",ops:s}}function C(t,e){return function(t,e){let s=t.fillStyle||\"hachure\";if(!u[s])switch(s){case\"zigzag\":u[s]||(u[s]=new h(e));break;case\"cross-hatch\":u[s]||(u[s]=new r(e));break;case\"dots\":u[s]||(u[s]=new i(e));break;case\"dashed\":u[s]||(u[s]=new c(e));break;case\"zigzag-line\":u[s]||(u[s]=new l(e));break;default:s=\"hachure\",u[s]||(u[s]=new o(e))}return u[s]}(e,P).fillPolygons(t,e)}function z(t){const e=Object.assign({},t);return e.randomizer=void 0,t.seed&&(e.seed=t.seed+1),e}function W(t){return t.randomizer||(t.randomizer=new p(t.seed||0)),t.randomizer.next()}function E(t,e,s,n=1){return s.roughness*n*(W(s)*(e-t)+t)}function G(t,e,s=1){return E(-t,t,e,s)}function $(t,e,s,n,o,a=!1){const h=a?o.disableMultiStrokeFill:o.disableMultiStroke,r=R(t,e,s,n,o,!0,!1);if(h)return r;const i=R(t,e,s,n,o,!0,!0);return r.concat(i)}function R(t,e,s,n,o,a,h){const r=Math.pow(t-s,2)+Math.pow(e-n,2),i=Math.sqrt(r);let c=1;c=i<200?1:i>500?.4:-.0016668*i+1.233334;let l=o.maxRandomnessOffset||0;l*l*100>r&&(l=i/10);const u=l/2,p=.2+.2*W(o);let f=o.bowing*o.maxRandomnessOffset*(n-e)/200,d=o.bowing*o.maxRandomnessOffset*(t-s)/200;f=G(f,o,c),d=G(d,o,c);const g=[],M=()=>G(u,o,c),k=()=>G(l,o,c),b=o.preserveVertices;return a&&(h?g.push({op:\"move\",data:[t+(b?0:M()),e+(b?0:M())]}):g.push({op:\"move\",data:[t+(b?0:G(l,o,c)),e+(b?0:G(l,o,c))]})),h?g.push({op:\"bcurveTo\",data:[f+t+(s-t)*p+M(),d+e+(n-e)*p+M(),f+t+2*(s-t)*p+M(),d+e+2*(n-e)*p+M(),s+(b?0:M()),n+(b?0:M())]}):g.push({op:\"bcurveTo\",data:[f+t+(s-t)*p+k(),d+e+(n-e)*p+k(),f+t+2*(s-t)*p+k(),d+e+2*(n-e)*p+k(),s+(b?0:k()),n+(b?0:k())]}),g}function j(t,e,s){if(!t.length)return[];const n=[];n.push([t[0][0]+G(e,s),t[0][1]+G(e,s)]),n.push([t[0][0]+G(e,s),t[0][1]+G(e,s)]);for(let o=1;o<t.length;o++)n.push([t[o][0]+G(e,s),t[o][1]+G(e,s)]),o===t.length-1&&n.push([t[o][0]+G(e,s),t[o][1]+G(e,s)]);return q(n,null,s)}function q(t,e,s){const n=t.length,o=[];if(n>3){const a=[],h=1-s.curveTightness;o.push({op:\"move\",data:[t[1][0],t[1][1]]});for(let e=1;e+2<n;e++){const s=t[e];a[0]=[s[0],s[1]],a[1]=[s[0]+(h*t[e+1][0]-h*t[e-1][0])/6,s[1]+(h*t[e+1][1]-h*t[e-1][1])/6],a[2]=[t[e+1][0]+(h*t[e][0]-h*t[e+2][0])/6,t[e+1][1]+(h*t[e][1]-h*t[e+2][1])/6],a[3]=[t[e+1][0],t[e+1][1]],o.push({op:\"bcurveTo\",data:[a[1][0],a[1][1],a[2][0],a[2][1],a[3][0],a[3][1]]})}if(e&&2===e.length){const t=s.maxRandomnessOffset;o.push({op:\"lineTo\",data:[e[0]+G(t,s),e[1]+G(t,s)]})}}else 3===n?(o.push({op:\"move\",data:[t[1][0],t[1][1]]}),o.push({op:\"bcurveTo\",data:[t[1][0],t[1][1],t[2][0],t[2][1],t[2][0],t[2][1]]})):2===n&&o.push(...R(t[0][0],t[0][1],t[1][0],t[1][1],s,!0,!0));return o}function F(t,e,s,n,o,a,h,r){const i=[],c=[];if(0===r.roughness){t/=4,c.push([e+n*Math.cos(-t),s+o*Math.sin(-t)]);for(let a=0;a<=2*Math.PI;a+=t){const t=[e+n*Math.cos(a),s+o*Math.sin(a)];i.push(t),c.push(t)}c.push([e+n*Math.cos(0),s+o*Math.sin(0)]),c.push([e+n*Math.cos(t),s+o*Math.sin(t)])}else{const l=G(.5,r)-Math.PI/2;c.push([G(a,r)+e+.9*n*Math.cos(l-t),G(a,r)+s+.9*o*Math.sin(l-t)]);const u=2*Math.PI+l-.01;for(let h=l;h<u;h+=t){const t=[G(a,r)+e+n*Math.cos(h),G(a,r)+s+o*Math.sin(h)];i.push(t),c.push(t)}c.push([G(a,r)+e+n*Math.cos(l+2*Math.PI+.5*h),G(a,r)+s+o*Math.sin(l+2*Math.PI+.5*h)]),c.push([G(a,r)+e+.98*n*Math.cos(l+h),G(a,r)+s+.98*o*Math.sin(l+h)]),c.push([G(a,r)+e+.9*n*Math.cos(l+.5*h),G(a,r)+s+.9*o*Math.sin(l+.5*h)])}return[c,i]}function V(t,e,s,n,o,a,h,r,i){const c=a+G(.1,i),l=[];l.push([G(r,i)+e+.9*n*Math.cos(c-t),G(r,i)+s+.9*o*Math.sin(c-t)]);for(let a=c;a<=h;a+=t)l.push([G(r,i)+e+n*Math.cos(a),G(r,i)+s+o*Math.sin(a)]);return l.push([e+n*Math.cos(h),s+o*Math.sin(h)]),l.push([e+n*Math.cos(h),s+o*Math.sin(h)]),q(l,null,i)}function Z(t,e,s,n,o,a,h,r){const i=[],c=[r.maxRandomnessOffset||1,(r.maxRandomnessOffset||1)+.3];let l=[0,0];const u=r.disableMultiStroke?1:2,p=r.preserveVertices;for(let f=0;f<u;f++)0===f?i.push({op:\"move\",data:[h[0],h[1]]}):i.push({op:\"move\",data:[h[0]+(p?0:G(c[0],r)),h[1]+(p?0:G(c[0],r))]}),l=p?[o,a]:[o+G(c[f],r),a+G(c[f],r)],i.push({op:\"bcurveTo\",data:[t+G(c[f],r),e+G(c[f],r),s+G(c[f],r),n+G(c[f],r),l[0],l[1]]});return i}function Q(t){return[...t]}function H(t,e=0){const s=t.length;if(s<3)throw new Error(\"A curve must have at least three points.\");const n=[];if(3===s)n.push(Q(t[0]),Q(t[1]),Q(t[2]),Q(t[2]));else{const s=[];s.push(t[0],t[0]);for(let e=1;e<t.length;e++)s.push(t[e]),e===t.length-1&&s.push(t[e]);const o=[],a=1-e;n.push(Q(s[0]));for(let t=1;t+2<s.length;t++){const e=s[t];o[0]=[e[0],e[1]],o[1]=[e[0]+(a*s[t+1][0]-a*s[t-1][0])/6,e[1]+(a*s[t+1][1]-a*s[t-1][1])/6],o[2]=[s[t+1][0]+(a*s[t][0]-a*s[t+2][0])/6,s[t+1][1]+(a*s[t][1]-a*s[t+2][1])/6],o[3]=[s[t+1][0],s[t+1][1]],n.push(o[1],o[2],o[3])}}return n}function N(t,e){return Math.pow(t[0]-e[0],2)+Math.pow(t[1]-e[1],2)}function B(t,e,s){const n=N(e,s);if(0===n)return N(t,e);let o=((t[0]-e[0])*(s[0]-e[0])+(t[1]-e[1])*(s[1]-e[1]))/n;return o=Math.max(0,Math.min(1,o)),N(t,J(e,s,o))}function J(t,e,s){return[t[0]+(e[0]-t[0])*s,t[1]+(e[1]-t[1])*s]}function K(t,e,s,n){const o=n||[];if(function(t,e){const s=t[e+0],n=t[e+1],o=t[e+2],a=t[e+3];let h=3*n[0]-2*s[0]-a[0];h*=h;let r=3*n[1]-2*s[1]-a[1];r*=r;let i=3*o[0]-2*a[0]-s[0];i*=i;let c=3*o[1]-2*a[1]-s[1];return c*=c,h<i&&(h=i),r<c&&(r=c),h+r}(t,e)<s){const s=t[e+0];if(o.length){(a=o[o.length-1],h=s,Math.sqrt(N(a,h)))>1&&o.push(s)}else o.push(s);o.push(t[e+3])}else{const n=.5,a=t[e+0],h=t[e+1],r=t[e+2],i=t[e+3],c=J(a,h,n),l=J(h,r,n),u=J(r,i,n),p=J(c,l,n),f=J(l,u,n),d=J(p,f,n);K([a,c,p,d],0,s,o),K([d,f,u,i],0,s,o)}var a,h;return o}function U(t,e){return X(t,0,t.length,e)}function X(t,e,s,n,o){const a=o||[],h=t[e],r=t[s-1];let i=0,c=1;for(let n=e+1;n<s-1;++n){const e=B(t[n],h,r);e>i&&(i=e,c=n)}return Math.sqrt(i)>n?(X(t,e,c+1,n,a),X(t,c,s,n,a)):(a.length||a.push(h),a.push(r)),a}function Y(t,e=.15,s){const n=[],o=(t.length-1)/3;for(let s=0;s<o;s++){K(t,3*s,e,n)}return s&&s>0?X(n,0,n.length,s):n}const tt=\"none\";class et{constructor(t){this.defaultOptions={maxRandomnessOffset:2,roughness:1,bowing:1,stroke:\"#000\",strokeWidth:1,curveTightness:0,curveFitting:.95,curveStepCount:9,fillStyle:\"hachure\",fillWeight:-1,hachureAngle:-41,hachureGap:-1,dashOffset:-1,dashGap:-1,zigzagOffset:-1,seed:0,disableMultiStroke:!1,disableMultiStrokeFill:!1,preserveVertices:!1,fillShapeRoughnessGain:.8},this.config=t||{},this.config.options&&(this.defaultOptions=this._o(this.config.options))}static newSeed(){return Math.floor(Math.random()*2**31)}_o(t){return t?Object.assign({},this.defaultOptions,t):this.defaultOptions}_d(t,e,s){return{shape:t,sets:e||[],options:s||this.defaultOptions}}line(t,e,s,n,o){const a=this._o(o);return this._d(\"line\",[v(t,e,s,n,a)],a)}rectangle(t,e,s,n,o){const a=this._o(o),h=[],r=O(t,e,s,n,a);if(a.fill){const o=[[t,e],[t+s,e],[t+s,e+n],[t,e+n]];\"solid\"===a.fillStyle?h.push(I([o],a)):h.push(C([o],a))}return a.stroke!==tt&&h.push(r),this._d(\"rectangle\",h,a)}ellipse(t,e,s,n,o){const a=this._o(o),h=[],r=T(s,n,a),i=D(t,e,a,r);if(a.fill)if(\"solid\"===a.fillStyle){const s=D(t,e,a,r).opset;s.type=\"fillPath\",h.push(s)}else h.push(C([i.estimatedPoints],a));return a.stroke!==tt&&h.push(i.opset),this._d(\"ellipse\",h,a)}circle(t,e,s,n){const o=this.ellipse(t,e,s,s,n);return o.shape=\"circle\",o}linearPath(t,e){const s=this._o(e);return this._d(\"linearPath\",[S(t,!1,s)],s)}arc(t,e,s,n,o,a,h=!1,r){const i=this._o(r),c=[],l=A(t,e,s,n,o,a,h,!0,i);if(h&&i.fill)if(\"solid\"===i.fillStyle){const h=Object.assign({},i);h.disableMultiStroke=!0;const r=A(t,e,s,n,o,a,!0,!1,h);r.type=\"fillPath\",c.push(r)}else c.push(function(t,e,s,n,o,a,h){const r=t,i=e;let c=Math.abs(s/2),l=Math.abs(n/2);c+=G(.01*c,h),l+=G(.01*l,h);let u=o,p=a;for(;u<0;)u+=2*Math.PI,p+=2*Math.PI;p-u>2*Math.PI&&(u=0,p=2*Math.PI);const f=(p-u)/h.curveStepCount,d=[];for(let t=u;t<=p;t+=f)d.push([r+c*Math.cos(t),i+l*Math.sin(t)]);return d.push([r+c*Math.cos(p),i+l*Math.sin(p)]),d.push([r,i]),C([d],h)}(t,e,s,n,o,a,i));return i.stroke!==tt&&c.push(l),this._d(\"arc\",c,i)}curve(t,e){const s=this._o(e),n=[],o=L(t,s);if(s.fill&&s.fill!==tt)if(\"solid\"===s.fillStyle){const e=L(t,Object.assign(Object.assign({},s),{disableMultiStroke:!0,roughness:s.roughness?s.roughness+s.fillShapeRoughnessGain:0}));n.push({type:\"fillPath\",ops:this._mergedShape(e.ops)})}else{const e=[],o=t;if(o.length){const t=\"number\"==typeof o[0][0]?[o]:o;for(const n of t)n.length<3?e.push(...n):3===n.length?e.push(...Y(H([n[0],n[0],n[1],n[2]]),10,(1+s.roughness)/2)):e.push(...Y(H(n),10,(1+s.roughness)/2))}e.length&&n.push(C([e],s))}return s.stroke!==tt&&n.push(o),this._d(\"curve\",n,s)}polygon(t,e){const s=this._o(e),n=[],o=S(t,!0,s);return s.fill&&(\"solid\"===s.fillStyle?n.push(I([t],s)):n.push(C([t],s))),s.stroke!==tt&&n.push(o),this._d(\"polygon\",n,s)}path(t,e){const s=this._o(e),n=[];if(!t)return this._d(\"path\",n,s);t=(t||\"\").replace(/\\n/g,\" \").replace(/(-\\s)/g,\"-\").replace(\"/(ss)/g\",\" \");const o=s.fill&&\"transparent\"!==s.fill&&s.fill!==tt,a=s.stroke!==tt,h=!!(s.simplification&&s.simplification<1),r=function(t,e,s){const n=m(y(b(t))),o=[];let a=[],h=[0,0],r=[];const i=()=>{r.length>=4&&a.push(...Y(r,e)),r=[]},c=()=>{i(),a.length&&(o.push(a),a=[])};for(const{key:t,data:e}of n)switch(t){case\"M\":c(),h=[e[0],e[1]],a.push(h);break;case\"L\":i(),a.push([e[0],e[1]]);break;case\"C\":if(!r.length){const t=a.length?a[a.length-1]:h;r.push([t[0],t[1]])}r.push([e[0],e[1]]),r.push([e[2],e[3]]),r.push([e[4],e[5]]);break;case\"Z\":i(),a.push([h[0],h[1]])}if(c(),!s)return o;const l=[];for(const t of o){const e=U(t,s);e.length&&l.push(e)}return l}(t,1,h?4-4*(s.simplification||1):(1+s.roughness)/2),i=_(t,s);if(o)if(\"solid\"===s.fillStyle)if(1===r.length){const e=_(t,Object.assign(Object.assign({},s),{disableMultiStroke:!0,roughness:s.roughness?s.roughness+s.fillShapeRoughnessGain:0}));n.push({type:\"fillPath\",ops:this._mergedShape(e.ops)})}else n.push(I(r,s));else n.push(C(r,s));return a&&(h?r.forEach((t=>{n.push(S(t,!1,s))})):n.push(i)),this._d(\"path\",n,s)}opsToPath(t,e){let s=\"\";for(const n of t.ops){const t=\"number\"==typeof e&&e>=0?n.data.map((t=>+t.toFixed(e))):n.data;switch(n.op){case\"move\":s+=`M${t[0]} ${t[1]} `;break;case\"bcurveTo\":s+=`C${t[0]} ${t[1]}, ${t[2]} ${t[3]}, ${t[4]} ${t[5]} `;break;case\"lineTo\":s+=`L${t[0]} ${t[1]} `}}return s.trim()}toPaths(t){const e=t.sets||[],s=t.options||this.defaultOptions,n=[];for(const t of e){let e=null;switch(t.type){case\"path\":e={d:this.opsToPath(t),stroke:s.stroke,strokeWidth:s.strokeWidth,fill:tt};break;case\"fillPath\":e={d:this.opsToPath(t),stroke:tt,strokeWidth:0,fill:s.fill||tt};break;case\"fillSketch\":e=this.fillSketch(t,s)}e&&n.push(e)}return n}fillSketch(t,e){let s=e.fillWeight;return s<0&&(s=e.strokeWidth/2),{d:this.opsToPath(t),stroke:e.fill||tt,strokeWidth:s,fill:tt}}_mergedShape(t){return t.filter(((t,e)=>0===e||\"move\"!==t.op))}}class st{constructor(t,e){this.canvas=t,this.ctx=this.canvas.getContext(\"2d\"),this.gen=new et(e)}draw(t){const e=t.sets||[],s=t.options||this.getDefaultOptions(),n=this.ctx,o=t.options.fixedDecimalPlaceDigits;for(const a of e)switch(a.type){case\"path\":n.save(),n.strokeStyle=\"none\"===s.stroke?\"transparent\":s.stroke,n.lineWidth=s.strokeWidth,s.strokeLineDash&&n.setLineDash(s.strokeLineDash),s.strokeLineDashOffset&&(n.lineDashOffset=s.strokeLineDashOffset),this._drawToContext(n,a,o),n.restore();break;case\"fillPath\":{n.save(),n.fillStyle=s.fill||\"\";const e=\"curve\"===t.shape||\"polygon\"===t.shape||\"path\"===t.shape?\"evenodd\":\"nonzero\";this._drawToContext(n,a,o,e),n.restore();break}case\"fillSketch\":this.fillSketch(n,a,s)}}fillSketch(t,e,s){let n=s.fillWeight;n<0&&(n=s.strokeWidth/2),t.save(),s.fillLineDash&&t.setLineDash(s.fillLineDash),s.fillLineDashOffset&&(t.lineDashOffset=s.fillLineDashOffset),t.strokeStyle=s.fill||\"\",t.lineWidth=n,this._drawToContext(t,e,s.fixedDecimalPlaceDigits),t.restore()}_drawToContext(t,e,s,n=\"nonzero\"){t.beginPath();for(const n of e.ops){const e=\"number\"==typeof s&&s>=0?n.data.map((t=>+t.toFixed(s))):n.data;switch(n.op){case\"move\":t.moveTo(e[0],e[1]);break;case\"bcurveTo\":t.bezierCurveTo(e[0],e[1],e[2],e[3],e[4],e[5]);break;case\"lineTo\":t.lineTo(e[0],e[1])}}\"fillPath\"===e.type?t.fill(n):t.stroke()}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}line(t,e,s,n,o){const a=this.gen.line(t,e,s,n,o);return this.draw(a),a}rectangle(t,e,s,n,o){const a=this.gen.rectangle(t,e,s,n,o);return this.draw(a),a}ellipse(t,e,s,n,o){const a=this.gen.ellipse(t,e,s,n,o);return this.draw(a),a}circle(t,e,s,n){const o=this.gen.circle(t,e,s,n);return this.draw(o),o}linearPath(t,e){const s=this.gen.linearPath(t,e);return this.draw(s),s}polygon(t,e){const s=this.gen.polygon(t,e);return this.draw(s),s}arc(t,e,s,n,o,a,h=!1,r){const i=this.gen.arc(t,e,s,n,o,a,h,r);return this.draw(i),i}curve(t,e){const s=this.gen.curve(t,e);return this.draw(s),s}path(t,e){const s=this.gen.path(t,e);return this.draw(s),s}}const nt=\"http://www.w3.org/2000/svg\";class ot{constructor(t,e){this.svg=t,this.gen=new et(e)}draw(t){const e=t.sets||[],s=t.options||this.getDefaultOptions(),n=this.svg.ownerDocument||window.document,o=n.createElementNS(nt,\"g\"),a=t.options.fixedDecimalPlaceDigits;for(const h of e){let e=null;switch(h.type){case\"path\":e=n.createElementNS(nt,\"path\"),e.setAttribute(\"d\",this.opsToPath(h,a)),e.setAttribute(\"stroke\",s.stroke),e.setAttribute(\"stroke-width\",s.strokeWidth+\"\"),e.setAttribute(\"fill\",\"none\"),s.strokeLineDash&&e.setAttribute(\"stroke-dasharray\",s.strokeLineDash.join(\" \").trim()),s.strokeLineDashOffset&&e.setAttribute(\"stroke-dashoffset\",`${s.strokeLineDashOffset}`);break;case\"fillPath\":e=n.createElementNS(nt,\"path\"),e.setAttribute(\"d\",this.opsToPath(h,a)),e.setAttribute(\"stroke\",\"none\"),e.setAttribute(\"stroke-width\",\"0\"),e.setAttribute(\"fill\",s.fill||\"\"),\"curve\"!==t.shape&&\"polygon\"!==t.shape||e.setAttribute(\"fill-rule\",\"evenodd\");break;case\"fillSketch\":e=this.fillSketch(n,h,s)}e&&o.appendChild(e)}return o}fillSketch(t,e,s){let n=s.fillWeight;n<0&&(n=s.strokeWidth/2);const o=t.createElementNS(nt,\"path\");return o.setAttribute(\"d\",this.opsToPath(e,s.fixedDecimalPlaceDigits)),o.setAttribute(\"stroke\",s.fill||\"\"),o.setAttribute(\"stroke-width\",n+\"\"),o.setAttribute(\"fill\",\"none\"),s.fillLineDash&&o.setAttribute(\"stroke-dasharray\",s.fillLineDash.join(\" \").trim()),s.fillLineDashOffset&&o.setAttribute(\"stroke-dashoffset\",`${s.fillLineDashOffset}`),o}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}opsToPath(t,e){return this.gen.opsToPath(t,e)}line(t,e,s,n,o){const a=this.gen.line(t,e,s,n,o);return this.draw(a)}rectangle(t,e,s,n,o){const a=this.gen.rectangle(t,e,s,n,o);return this.draw(a)}ellipse(t,e,s,n,o){const a=this.gen.ellipse(t,e,s,n,o);return this.draw(a)}circle(t,e,s,n){const o=this.gen.circle(t,e,s,n);return this.draw(o)}linearPath(t,e){const s=this.gen.linearPath(t,e);return this.draw(s)}polygon(t,e){const s=this.gen.polygon(t,e);return this.draw(s)}arc(t,e,s,n,o,a,h=!1,r){const i=this.gen.arc(t,e,s,n,o,a,h,r);return this.draw(i)}curve(t,e){const s=this.gen.curve(t,e);return this.draw(s)}path(t,e){const s=this.gen.path(t,e);return this.draw(s)}}var at={canvas:(t,e)=>new st(t,e),svg:(t,e)=>new ot(t,e),generator:t=>new et(t),newSeed:()=>et.newSeed()};export{at as default};\n","// 連線繪製:plain <path> + 正確掛載的箭頭 marker + 粗透明 hit path + label。\r\n// 邊用平滑曲線(非 rough)以確保箭頭端點對齊;節點才是手繪主視覺。\r\n\r\nimport type { ArrowHead, EditorScene, Point, SceneEdge } from '../scene/types';\r\nimport { getNode, resolveEdgeAnchors } from '../scene/scene-ops';\r\nimport { appendInlineMarkdown, svgEl, XHTML_NS } from './dom';\r\nimport { INK, INK_DARK, paletteByIndex } from './palette';\r\n\r\nexport function markerIdFor(head: ArrowHead, dark: boolean): string | null {\r\n  if (head === 'none' || head === 'open') return null;\r\n  return `rsm-mk-${head}${dark ? '-d' : ''}`;\r\n}\r\n\r\n/** 建立箭頭 marker 定義(掛進 defs)。 */\r\nexport function buildMarkers(dark: boolean): SVGMarkerElement[] {\r\n  const ink = dark ? INK_DARK : INK;\r\n  // hollow marker 內填底色,避免連線從中穿過(近似畫布底色)。\r\n  const bg = dark ? '#23232e' : '#ffffff';\r\n  // 各 head 的 marker box 尺寸 / 參考點(tip 對齊節點邊界)。\r\n  const specs: Record<string, { vb: string; refX: number; refY: number; w: number; h: number }> = {\r\n    arrow: { vb: '0 0 12 12', refX: 10, refY: 6, w: 9, h: 9 },\r\n    dot: { vb: '0 0 12 12', refX: 6, refY: 6, w: 9, h: 9 },\r\n    cross: { vb: '0 0 12 12', refX: 6, refY: 6, w: 9, h: 9 },\r\n    triangle: { vb: '0 0 16 16', refX: 15, refY: 8, w: 15, h: 15 },\r\n    diamond: { vb: '0 0 20 16', refX: 19, refY: 8, w: 18, h: 14 },\r\n    diamondFilled: { vb: '0 0 20 16', refX: 19, refY: 8, w: 18, h: 14 },\r\n  };\r\n  const heads: ArrowHead[] = ['arrow', 'dot', 'cross', 'triangle', 'diamond', 'diamondFilled'];\r\n  return heads.map((head) => {\r\n    const sp = specs[head];\r\n    const m = svgEl('marker', {\r\n      id: markerIdFor(head, dark) as string,\r\n      viewBox: sp.vb,\r\n      refX: sp.refX,\r\n      refY: sp.refY,\r\n      markerWidth: sp.w,\r\n      markerHeight: sp.h,\r\n      orient: 'auto-start-reverse',\r\n    });\r\n    if (head === 'arrow') {\r\n      m.appendChild(svgEl('path', { d: 'M1,1 L11,6 L1,11 z', fill: ink, stroke: ink }));\r\n    } else if (head === 'dot') {\r\n      m.appendChild(svgEl('circle', { cx: 6, cy: 6, r: 4, fill: ink }));\r\n    } else if (head === 'cross') {\r\n      m.appendChild(svgEl('path', { d: 'M2,2 L10,10 M10,2 L2,10', stroke: ink, 'stroke-width': 1.8, fill: 'none' }));\r\n    } else if (head === 'triangle') {\r\n      // 空心三角(繼承 / 實作):尖端朝節點。\r\n      m.appendChild(svgEl('path', { d: 'M1,1 L15,8 L1,15 z', fill: bg, stroke: ink, 'stroke-width': 1.3, 'stroke-linejoin': 'round' }));\r\n    } else {\r\n      // 菱形(聚合空心 / 組合實心):近端頂點觸及節點。\r\n      const fill = head === 'diamondFilled' ? ink : bg;\r\n      m.appendChild(svgEl('path', { d: 'M19,8 L10,2 L1,8 L10,14 z', fill, stroke: ink, 'stroke-width': 1.3, 'stroke-linejoin': 'round' }));\r\n    }\r\n    return m;\r\n  });\r\n}\r\n\r\n/**\r\n * ER 基數記號(crow's foot):於實體邊界端依基數畫「內層(基數:一=短橫 / 多=鳥足)+\r\n * 外層(模態:強制=短橫 / 可選=圓圈)」。p=實體邊界點,u=沿線往外的單位向量。\r\n */\r\nfunction drawErCardinality(\r\n  g: SVGGElement,\r\n  p: Point,\r\n  u: Point,\r\n  card: 'zeroOrOne' | 'onlyOne' | 'zeroOrMore' | 'oneOrMore',\r\n  ink: string,\r\n  dark: boolean,\r\n): void {\r\n  const bg = dark ? '#23232e' : '#ffffff';\r\n  const vx = -u.y;\r\n  const vy = u.x; // 垂直單位向量\r\n  const at = (d: number): Point => ({ x: p.x + u.x * d, y: p.y + u.y * d });\r\n  const tick = (d: number, h: number): string => {\r\n    const c = at(d);\r\n    return `M${c.x + vx * h},${c.y + vy * h} L${c.x - vx * h},${c.y - vy * h}`;\r\n  };\r\n  const stroke = (d: string): void => {\r\n    g.appendChild(svgEl('path', { d, stroke: ink, 'stroke-width': 1.4, fill: 'none', 'stroke-linecap': 'round' }));\r\n  };\r\n  const isMany = card === 'zeroOrMore' || card === 'oneOrMore';\r\n  const isOptional = card === 'zeroOrOne' || card === 'zeroOrMore';\r\n  // 由實體往外:先畫基數(鳥足 / 單槓),再畫模態(圓圈 / 單槓)。\r\n  // 記號要貼著實體框畫 —— 離太遠會看起來像浮在線中間的裝飾,而不是這一端的基數。\r\n  if (isMany) {\r\n    const tip = at(13);\r\n    const b = at(0);\r\n    const bp = { x: b.x + vx * 6.5, y: b.y + vy * 6.5 };\r\n    const bm = { x: b.x - vx * 6.5, y: b.y - vy * 6.5 };\r\n    stroke(`M${tip.x},${tip.y} L${bp.x},${bp.y} M${tip.x},${tip.y} L${b.x},${b.y} M${tip.x},${tip.y} L${bm.x},${bm.y}`);\r\n  } else {\r\n    stroke(tick(5, 6.5));\r\n  }\r\n  if (isOptional) {\r\n    const c = at(isMany ? 20 : 13);\r\n    g.appendChild(svgEl('circle', { cx: c.x, cy: c.y, r: 4.5, fill: bg, stroke: ink, 'stroke-width': 1.4 }));\r\n  } else {\r\n    stroke(tick(isMany ? 19 : 12, 6.5));\r\n  }\r\n}\r\n\r\nfunction unit(from: Point, to: Point): Point {\r\n  const dx = to.x - from.x;\r\n  const dy = to.y - from.y;\r\n  const len = Math.hypot(dx, dy) || 1;\r\n  return { x: dx / len, y: dy / len };\r\n}\r\n\r\nfunction pathThrough(points: Point[]): string {\r\n  if (points.length < 2) return '';\r\n  const [first, ...rest] = points;\r\n  let d = `M${first.x},${first.y}`;\r\n  for (const p of rest) d += ` L${p.x},${p.y}`;\r\n  return d;\r\n}\r\n\r\n/** 依圖種挑線形:心智圖走平滑曲線,其餘沿用折線。 */\r\nfunction edgePath(scene: EditorScene, points: Point[]): string {\r\n  return scene.diagramType === 'mindmap' ? mindmapPath(points) : pathThrough(points);\r\n}\r\n\r\n/**\r\n * 心智圖的分枝畫成平滑曲線。\r\n *\r\n * 心智圖的線就是「從這裡長出去」,直線折線看起來會像流程圖的箭頭。控制點只往水平方向拉,\r\n * 分枝離開父節點與接進子節點時都保持水平,和手畫的心智圖一樣。使用者自己拗過折點(waypoints)\r\n * 就照他拗的走,不自作主張。\r\n */\r\nfunction mindmapPath(points: Point[]): string {\r\n  if (points.length !== 2) return pathThrough(points);\r\n  const [a, b] = points;\r\n  const k = Math.max(24, Math.abs(b.x - a.x) * 0.45);\r\n  const dir = b.x >= a.x ? 1 : -1;\r\n  return `M${a.x},${a.y} C${a.x + k * dir},${a.y} ${b.x - k * dir},${b.y} ${b.x},${b.y}`;\r\n}\r\n\r\nfunction midpoint(points: Point[]): Point {\r\n  if (points.length === 0) return { x: 0, y: 0 };\r\n  const i = Math.floor((points.length - 1) / 2);\r\n  const a = points[i];\r\n  const b = points[Math.min(i + 1, points.length - 1)];\r\n  return { x: (a.x + b.x) / 2, y: (a.y + b.y) / 2 };\r\n}\r\n\r\n/**\r\n * 平行邊(同一對節點之間多條 / 雙向)彼此外凸避免重疊:回傳一個垂直位移後的中點。\r\n * 單一邊(絕大多數)回 null → 維持原本兩點直線,零影響。\r\n */\r\nfunction parallelMid(scene: EditorScene, edge: SceneEdge, start: Point, end: Point): Point | null {\r\n  const a = edge.source < edge.target ? edge.source : edge.target;\r\n  const b = edge.source < edge.target ? edge.target : edge.source;\r\n  const sibs = scene.edges.filter((e) => {\r\n    const x = e.source < e.target ? e.source : e.target;\r\n    const y = e.source < e.target ? e.target : e.source;\r\n    return x === a && y === b;\r\n  });\r\n  if (sibs.length <= 1) return null;\r\n  const idx = sibs.findIndex((e) => e.id === edge.id);\r\n  const offset = (idx - (sibs.length - 1) / 2) * 22;\r\n  if (offset === 0) return null;\r\n  // 用「規範方向」(小 id → 大 id)算垂直軸,確保同對的各邊往兩側分開。\r\n  const na = getNode(scene, a);\r\n  const nb = getNode(scene, b);\r\n  if (!na || !nb) return null;\r\n  const dx = nb.x + nb.w / 2 - (na.x + na.w / 2);\r\n  const dy = nb.y + nb.h / 2 - (na.y + na.h / 2);\r\n  const len = Math.hypot(dx, dy) || 1;\r\n  const px = -dy / len;\r\n  const py = dx / len;\r\n  return { x: (start.x + end.x) / 2 + px * offset, y: (start.y + end.y) / 2 + py * offset };\r\n}\r\n\r\n/** 自迴圈(A→A):從節點右緣繞出、再回到頂緣,避免兩端錨點重合成零長度。 */\r\nfunction selfLoopPoints(scene: EditorScene, edge: SceneEdge): Point[] | null {\r\n  const n = getNode(scene, edge.source);\r\n  if (!n) return null;\r\n  const { x, y, w, h } = n;\r\n  const cx = x + w / 2;\r\n  const cy = y + h / 2;\r\n  const out = Math.max(22, Math.min(46, h * 0.7));\r\n  return [\r\n    { x: x + w, y: cy - h * 0.18 }, // 右緣出\r\n    { x: x + w + out, y: cy - h * 0.18 },\r\n    { x: x + w + out, y: y - out },\r\n    { x: cx + w * 0.18, y: y - out },\r\n    { x: cx + w * 0.18, y: y }, // 頂緣入(箭頭朝下)\r\n  ];\r\n}\r\n\r\n/** 計算一條邊的折線點(start anchor → waypoints → end anchor)。 */\r\nexport function edgePoints(scene: EditorScene, edge: SceneEdge): Point[] | null {\r\n  if (edge.source === edge.target) return selfLoopPoints(scene, edge);\r\n  const anchors = resolveEdgeAnchors(scene, edge);\r\n  if (!anchors) return null;\r\n  if (edge.waypoints && edge.waypoints.length) return [anchors.start, ...edge.waypoints, anchors.end];\r\n  const mid = parallelMid(scene, edge, anchors.start, anchors.end);\r\n  return mid ? [anchors.start, mid, anchors.end] : [anchors.start, anchors.end];\r\n}\r\n\r\n/** 建立一條邊的 <g data-edge-id>(可見路徑 + hit path + label)。 */\r\n/**\r\n * sankey 連線的粗細。\r\n *\r\n * 先前是 `sqrt(value) * 1.6`,結果 30 與 45 兩條流量畫出來只差 2px —— 而「哪一條比較粗」\r\n * 正是這種圖唯一要講的事。改成**以整張圖的最大流量為滿刻度**線性換算:比例忠實,而且無論\r\n * 資料是幾十還是幾萬,畫出來的粗細範圍都一樣。\r\n */\r\nfunction sankeyWidth(scene: EditorScene, value: number): number {\r\n  const max = scene.edges.reduce(\r\n    (m, e) => (e.data?.kind === 'sankey' ? Math.max(m, Math.abs(e.data.value)) : m),\r\n    0,\r\n  );\r\n  if (max <= 0) return 3;\r\n  return 3 + (Math.abs(value) / max) * 25;\r\n}\r\n\r\n/** sankey 連線的顏色 = 來源節點的顏色(節點配色是依場景順序循序取的)。 */\r\nfunction sankeyInk(scene: EditorScene, edge: SceneEdge): string {\r\n  const i = scene.nodes.findIndex((n) => n.id === edge.source);\r\n  return paletteByIndex(i >= 0 ? i : 0).stroke;\r\n}\r\n\r\nexport function renderEdge(scene: EditorScene, edge: SceneEdge, dark: boolean): SVGGElement {\r\n  const ink = dark ? INK_DARK : INK;\r\n  const g = svgEl('g', { 'data-edge-id': edge.id, class: 'rsm-edge' });\r\n  const pts = edgePoints(scene, edge);\r\n  const d = pts ? edgePath(scene, pts) : '';\r\n\r\n  // 粗透明 hit path(讓細線好點選)。\r\n  const hit = svgEl('path', { d, fill: 'none', stroke: 'transparent', 'stroke-width': 14, 'data-edge-hit': edge.id });\r\n  hit.style.pointerEvents = 'stroke';\r\n  hit.style.cursor = 'pointer';\r\n  g.appendChild(hit);\r\n\r\n  // 可見路徑。linkStyle 自訂色/寬(edge.style)優先於主題墨色與 lineKind 寬度。\r\n  const customStroke = edge.style?.stroke;\r\n  // sankey 的連線是「流」不是「線」:染上來源節點的顏色,一眼看得出東西從哪裡流出去。\r\n  const strokeColor = customStroke || (edge.data?.kind === 'sankey' ? sankeyInk(scene, edge) : ink);\r\n  const vis = svgEl('path', { d, fill: 'none', stroke: strokeColor });\r\n  vis.setAttribute('stroke-linecap', 'round');\r\n  vis.setAttribute('stroke-linejoin', 'round');\r\n  vis.setAttribute('vector-effect', 'non-scaling-stroke');\r\n  vis.style.pointerEvents = 'none';\r\n  // sankey:線寬**就是**流量,這正是這種圖的重點(看得出哪一條比較粗)。\r\n  const widthByKind =\r\n    edge.data?.kind === 'sankey'\r\n      ? sankeyWidth(scene, edge.data.value)\r\n      : edge.lineKind === 'thick'\r\n        ? 3.4\r\n        : 1.8;\r\n  vis.setAttribute('stroke-width', String(edge.style?.strokeWidth ?? widthByKind));\r\n  if (edge.data?.kind === 'sankey') vis.setAttribute('stroke-opacity', '0.5');\r\n  if (edge.style?.strokeDasharray) vis.setAttribute('stroke-dasharray', edge.style.strokeDasharray);\r\n  else if (edge.lineKind === 'dotted') vis.setAttribute('stroke-dasharray', '3 5');\r\n  if (edge.lineKind === 'invisible') vis.setAttribute('stroke-opacity', '0');\r\n  const startMk = markerIdFor(edge.arrowStart, dark);\r\n  // 自訂色的箭頭:就地建一個同色 marker 讓箭頭與線同色(僅常見的實心箭頭)。\r\n  if (customStroke && edge.arrowEnd === 'arrow') {\r\n    const mid = `rsm-mk-arrow-${edge.id}`;\r\n    const mk = svgEl('marker', {\r\n      id: mid,\r\n      viewBox: '0 0 12 12',\r\n      refX: 10,\r\n      refY: 6,\r\n      markerWidth: 9,\r\n      markerHeight: 9,\r\n      orient: 'auto-start-reverse',\r\n    });\r\n    mk.appendChild(svgEl('path', { d: 'M1,1 L11,6 L1,11 z', fill: customStroke, stroke: customStroke }));\r\n    g.appendChild(mk);\r\n    vis.setAttribute('marker-end', `url(#${mid})`);\r\n  } else {\r\n    const endMk = markerIdFor(edge.arrowEnd, dark);\r\n    if (endMk) vis.setAttribute('marker-end', `url(#${endMk})`);\r\n  }\r\n  if (startMk) vis.setAttribute('marker-start', `url(#${startMk})`);\r\n  g.appendChild(vis);\r\n\r\n  // ER 基數記號(crow's foot):兩端各依 cardStart / cardEnd 繪製。\r\n  if (edge.data?.kind === 'er' && pts && pts.length >= 2) {\r\n    const s = pts[0];\r\n    const e = pts[pts.length - 1];\r\n    if (edge.data.cardStart) drawErCardinality(g, s, unit(s, pts[1]), edge.data.cardStart, ink, dark);\r\n    if (edge.data.cardEnd) drawErCardinality(g, e, unit(e, pts[pts.length - 2]), edge.data.cardEnd, ink, dark);\r\n  }\r\n\r\n  // label。需求圖沒有自由文字標籤,線上顯示的就是關係種類(mermaid 也是這樣畫);\r\n  // sankey 的連線本身就是「流量」,線上顯示數值。\r\n  const labelText =\r\n    edge.data?.kind === 'requirement'\r\n      ? edge.data.relation\r\n      : edge.data?.kind === 'sankey'\r\n        ? String(edge.data.value)\r\n        : edge.label;\r\n  if (labelText && pts) {\r\n    const mid = midpoint(pts);\r\n    const fo = svgEl('foreignObject', { x: mid.x - 60, y: mid.y - 14, width: 120, height: 28, class: 'rsm-edge-label' });\r\n    fo.style.pointerEvents = 'none';\r\n    fo.style.overflow = 'visible';\r\n    // 置中容器透明,膠囊底色由內層 span 包住文字(緊貼字寬,避免相鄰標籤底色連成一條寬帶)。\r\n    const div = document.createElementNS(XHTML_NS, 'div') as unknown as HTMLDivElement;\r\n    div.setAttribute('style', 'display:flex;align-items:center;justify-content:center;height:28px;');\r\n    const span = document.createElementNS(XHTML_NS, 'span') as unknown as HTMLSpanElement;\r\n    if (edge.labelKind === 'markdown' && edge.label) appendInlineMarkdown(span as unknown as HTMLElement, edge.label);\r\n    else span.textContent = labelText;\r\n    // 膠囊底色隨主題(--rsm-edge-label-bg 淺/深),文字色也須隨主題,否則暗色=深字深底看不見。\r\n    const labelInk = dark ? INK_DARK : INK;\r\n    const labelBg = dark ? 'rgba(30,30,30,0.85)' : '#ffffffe6';\r\n    span.setAttribute(\r\n      'style',\r\n      `font:600 13px/1.2 var(--rsm-editor-font);color:${labelInk};` +\r\n        `background:var(--rsm-edge-label-bg,${labelBg});border-radius:4px;padding:1px 6px;white-space:nowrap;`,\r\n    );\r\n    div.appendChild(span as unknown as Node);\r\n    fo.appendChild(div as unknown as Node);\r\n    g.appendChild(fo);\r\n  }\r\n  return g;\r\n}\r\n\r\n/** 只更新既有邊 <g> 的幾何(端點移動時重繞,不重建)。 */\r\nexport function updateEdgeGeometry(g: SVGGElement, scene: EditorScene, edge: SceneEdge): void {\r\n  const pts = edgePoints(scene, edge);\r\n  const d = pts ? edgePath(scene, pts) : '';\r\n  g.querySelectorAll('path').forEach((p) => p.setAttribute('d', d));\r\n  const fo = g.querySelector('foreignObject');\r\n  if (fo && pts) {\r\n    const mid = midpoint(pts);\r\n    fo.setAttribute('x', String(mid.x - 60));\r\n    fo.setAttribute('y', String(mid.y - 14));\r\n  }\r\n}\r\n","// architecture-beta 的服務圖示。\r\n//\r\n// 為什麼是自己畫的:mermaid 那邊靠 iconify 圖庫,離線的擴充包不該為了五個圖示多背一份圖庫。\r\n// 這裡用手寫路徑覆蓋 mermaid 內建的五種(cloud / database / disk / server / internet),\r\n// 其餘名稱回落到首字母 —— 至少還看得出是不同的東西。\r\n//\r\n// 座標一律以 24×24 描述,由呼叫端縮放到節點大小。\r\n\r\nimport { svgEl } from './dom';\r\n\r\n/** 24×24 座標系下的圖示;stroke 用呼叫端給的顏色。 */\r\ntype IconDraw = (color: string) => SVGElement[];\r\n\r\nconst stroke = (d: string, color: string, width = 1.6): SVGElement =>\r\n  svgEl('path', {\r\n    d,\r\n    fill: 'none',\r\n    stroke: color,\r\n    'stroke-width': width,\r\n    'stroke-linecap': 'round',\r\n    'stroke-linejoin': 'round',\r\n  });\r\n\r\nconst ICONS: Record<string, IconDraw> = {\r\n  cloud: (c) => [\r\n    stroke('M7 18h10.5a3.5 3.5 0 0 0 .3-6.99A5.5 5.5 0 0 0 7.4 9.6 3.7 3.7 0 0 0 7 18Z', c),\r\n  ],\r\n  database: (c) => [\r\n    stroke('M4.5 6.5c0-1.4 3.4-2.5 7.5-2.5s7.5 1.1 7.5 2.5-3.4 2.5-7.5 2.5S4.5 7.9 4.5 6.5Z', c),\r\n    stroke('M4.5 6.5v11c0 1.4 3.4 2.5 7.5 2.5s7.5-1.1 7.5-2.5v-11', c),\r\n    stroke('M4.5 12c0 1.4 3.4 2.5 7.5 2.5s7.5-1.1 7.5-2.5', c, 1.2),\r\n  ],\r\n  disk: (c) => [\r\n    stroke('M4 6.5A2.5 2.5 0 0 1 6.5 4h11A2.5 2.5 0 0 1 20 6.5v11a2.5 2.5 0 0 1-2.5 2.5h-11A2.5 2.5 0 0 1 4 17.5Z', c),\r\n    stroke('M12 8.6a3.4 3.4 0 1 1 0 6.8 3.4 3.4 0 0 1 0-6.8Z', c, 1.3),\r\n    svgEl('circle', { cx: 12, cy: 12, r: 1.1, fill: c, stroke: 'none' }),\r\n  ],\r\n  server: (c) => [\r\n    stroke('M4 5.2h16v5.2H4Z', c),\r\n    stroke('M4 13.4h16v5.2H4Z', c),\r\n    svgEl('circle', { cx: 7, cy: 7.8, r: 1, fill: c, stroke: 'none' }),\r\n    svgEl('circle', { cx: 7, cy: 16, r: 1, fill: c, stroke: 'none' }),\r\n    stroke('M10.5 7.8h6M10.5 16h6', c, 1.2),\r\n  ],\r\n  internet: (c) => [\r\n    stroke('M12 3.6a8.4 8.4 0 1 1 0 16.8 8.4 8.4 0 0 1 0-16.8Z', c),\r\n    stroke('M3.6 12h16.8', c, 1.2),\r\n    stroke('M12 3.6c2.2 2.3 3.3 5.1 3.3 8.4s-1.1 6.1-3.3 8.4c-2.2-2.3-3.3-5.1-3.3-8.4S9.8 5.9 12 3.6Z', c, 1.2),\r\n  ],\r\n};\r\n\r\nexport function hasArchIcon(icon: string | undefined): boolean {\r\n  return Boolean(icon && ICONS[icon.toLowerCase()]);\r\n}\r\n\r\n/**\r\n * 畫出一個服務圖示,置中於 (cx, cy),佔 `size` 見方。\r\n * 認不得的名稱回傳 null,讓呼叫端退回首字母。\r\n */\r\nexport function archIconGroup(\r\n  icon: string | undefined,\r\n  color: string,\r\n  cx: number,\r\n  cy: number,\r\n  size: number,\r\n): SVGGElement | null {\r\n  const draw = icon ? ICONS[icon.toLowerCase()] : undefined;\r\n  if (!draw) return null;\r\n  const k = size / 24;\r\n  const g = svgEl('g', { transform: `translate(${cx - size / 2},${cy - size / 2}) scale(${k})` });\r\n  for (const el of draw(color)) g.appendChild(el);\r\n  g.style.pointerEvents = 'none';\r\n  return g;\r\n}\r\n","// pie 的雙向 round-trip + 版面。\r\n//\r\n// 語法極簡:`pie [showData]` / `title X` / `\"標籤\" : 數值`。自己逐行解析(比繞 DB 精確,\r\n// DB 只給一個 label→value 的物件,順序與 showData 之外的東西都拿不回來)。\r\n//\r\n// 編輯模型:每個扇形是一個節點,節點放在該扇形的「質心」上。\r\n// - 繞著圓拖曳 = 改變扇形順序(圓餅圖真正會做的排列操作)\r\n// - 雙擊 = 編輯「標籤: 數值」\r\n// 值不做拖曳改動:圓餅的角度是相對值,拖一個扇形要同時改動別人的份額才對得起來,\r\n// 那會讓使用者以為自己只動了一個數字。\r\n\r\nimport type { ParseResult, ParseWarning } from '../../adapters/types';\r\nimport type { DataLossWarning, SerializeResult } from '../../adapters/types';\r\nimport type { EditorScene, SceneNode } from '../../scene/types';\r\n\r\nexport const PIE = { cx: 300, cy: 300, r: 200 } as const;\r\n/** 扇形節點(質心把手)的方塊邊長。 */\r\nexport const SLICE_BOX = 76;\r\n\r\nconst TAU = Math.PI * 2;\r\n\r\n/** 依序算出每個扇形的起訖角(從 12 點鐘方向順時針,與 mermaid 一致)。 */\r\nexport function sliceAngles(values: number[]): Array<{ from: number; to: number }> {\r\n  const total = values.reduce((s, v) => s + Math.max(0, v), 0) || 1;\r\n  let acc = -Math.PI / 2;\r\n  return values.map((v) => {\r\n    const from = acc;\r\n    acc += (Math.max(0, v) / total) * TAU;\r\n    return { from, to: acc };\r\n  });\r\n}\r\n\r\n/** 扇形質心(放標籤 / 把手的位置)。 */\r\nexport function sliceCentroid(a: { from: number; to: number }): { x: number; y: number } {\r\n  const mid = (a.from + a.to) / 2;\r\n  const rr = PIE.r * 0.62;\r\n  return { x: PIE.cx + Math.cos(mid) * rr, y: PIE.cy + Math.sin(mid) * rr };\r\n}\r\n\r\n/** 節點中心 → 以 12 點鐘為 0、順時針增加的角度(0..2π),用來排序扇形。 */\r\nexport function angleOf(cx: number, cy: number): number {\r\n  const a = Math.atan2(cy - PIE.cy, cx - PIE.cx) + Math.PI / 2;\r\n  return ((a % TAU) + TAU) % TAU;\r\n}\r\n\r\n/** 依目前節點位置的角度重排,再把節點擺回各自扇形的質心。 */\r\nexport function layoutPie(scene: EditorScene): EditorScene {\r\n  const ordered = [...scene.nodes].sort(\r\n    (a, b) => angleOf(a.x + a.w / 2, a.y + a.h / 2) - angleOf(b.x + b.w / 2, b.y + b.h / 2),\r\n  );\r\n  const angles = sliceAngles(ordered.map((n) => (n.data?.kind === 'pie' ? n.data.value : 0)));\r\n  const placed = ordered.map((n, i) => {\r\n    const c = sliceCentroid(angles[i]);\r\n    return { ...n, x: c.x - n.w / 2, y: c.y - n.h / 2, sourceIndex: i, pinned: true };\r\n  });\r\n  return { ...scene, nodes: placed, layoutOwner: 'user' };\r\n}\r\n\r\nconst LINE_RE = /^\\s*(\"?)(.*?)\\1\\s*:\\s*([0-9.]+)\\s*$/;\r\n\r\nexport function pieToScene(text: string): ParseResult {\r\n  const warnings: ParseWarning[] = [];\r\n  const comments: string[] = [];\r\n  const nodes: SceneNode[] = [];\r\n  let title: string | undefined;\r\n  let showData = false;\r\n  let seenHeader = false;\r\n  let idx = 0;\r\n\r\n  for (const raw of text.split('\\n')) {\r\n    const line = raw.trim();\r\n    if (!line) continue;\r\n    if (line.startsWith('%%')) {\r\n      comments.push(line);\r\n      continue;\r\n    }\r\n    if (!seenHeader) {\r\n      const h = /^pie\\b(.*)$/i.exec(line);\r\n      if (h) {\r\n        seenHeader = true;\r\n        const rest = h[1].trim();\r\n        if (/^showData\\b/i.test(rest)) {\r\n          showData = true;\r\n          const t = rest.replace(/^showData\\s*/i, '').replace(/^title\\s+/i, '').trim();\r\n          if (t) title = t;\r\n        } else if (/^title\\s+/i.test(rest)) {\r\n          title = rest.replace(/^title\\s+/i, '').trim();\r\n        }\r\n        continue;\r\n      }\r\n    }\r\n    const t = /^title\\s+(.*)$/i.exec(line);\r\n    if (t) {\r\n      title = t[1].trim();\r\n      continue;\r\n    }\r\n    const m = LINE_RE.exec(line);\r\n    if (!m) {\r\n      warnings.push({ message: `略過看不懂的一行:${line}` });\r\n      continue;\r\n    }\r\n    const value = Number(m[3]);\r\n    nodes.push({\r\n      id: `s${idx}`,\r\n      shape: 'pieSlice',\r\n      label: m[2],\r\n      x: 0,\r\n      y: 0,\r\n      w: SLICE_BOX,\r\n      h: SLICE_BOX,\r\n      data: { kind: 'pie', value: Number.isFinite(value) ? value : 0 },\r\n      sourceIndex: idx++,\r\n    });\r\n  }\r\n\r\n  if (!seenHeader) warnings.push({ message: '找不到 pie 標頭,已以空圖處理。' });\r\n\r\n  // 初始位置:先照原始順序放到各扇形質心(layoutPie 會依角度排序,順序因此得以保持)。\r\n  const angles = sliceAngles(nodes.map((n) => (n.data?.kind === 'pie' ? n.data.value : 0)));\r\n  const placed = nodes.map((n, i) => {\r\n    const c = sliceCentroid(angles[i]);\r\n    return { ...n, x: c.x - n.w / 2, y: c.y - n.h / 2 };\r\n  });\r\n\r\n  const scene: EditorScene = {\r\n    version: 1,\r\n    diagramType: 'pie',\r\n    meta: { type: 'pie', title, showData },\r\n    nodes: placed,\r\n    edges: [],\r\n    containers: [],\r\n    raw: { comments, fullSource: seenHeader ? undefined : text },\r\n    layoutOwner: 'user',\r\n  };\r\n  return { scene, warnings };\r\n}\r\n\r\nexport function sceneToPie(scene: EditorScene): SerializeResult {\r\n  if (scene.nodes.length === 0 && scene.raw?.fullSource) {\r\n    return { text: scene.raw.fullSource, warnings: [] };\r\n  }\r\n  const warnings: DataLossWarning[] = [];\r\n  const meta = scene.meta.type === 'pie' ? scene.meta : { title: undefined, showData: false };\r\n  const lines: string[] = [];\r\n  for (const c of scene.raw?.comments ?? []) {\r\n    if (c.trim().startsWith('%%{')) lines.push(c.trim());\r\n  }\r\n  lines.push(`pie${meta.showData ? ' showData' : ''}${meta.title ? ` title ${meta.title}` : ''}`);\r\n  for (const c of scene.raw?.comments ?? []) {\r\n    const t = c.trim();\r\n    if (t.startsWith('%%') && !t.startsWith('%%{')) lines.push(`    ${t}`);\r\n  }\r\n  // 順序由角度決定(繞著圓拖曳就是在排順序)。\r\n  const ordered = [...scene.nodes].sort(\r\n    (a, b) => angleOf(a.x + a.w / 2, a.y + a.h / 2) - angleOf(b.x + b.w / 2, b.y + b.h / 2),\r\n  );\r\n  for (const n of ordered) {\r\n    const v = n.data?.kind === 'pie' ? n.data.value : 0;\r\n    // 標籤一律加引號:mermaid 的 pie 標籤本來就是字串,含空白 / 冒號時不加會解錯。\r\n    lines.push(`    \"${(n.label || n.id).replace(/\"/g, '')}\" : ${v}`);\r\n  }\r\n  return { text: lines.join('\\n') + '\\n', warnings };\r\n}\r\n","// packet-beta 的雙向 round-trip + 版面。\r\n//\r\n// 封包圖是一條連續的位元帶:每個欄位接在前一個之後,起始位元完全由前面欄位的寬度累加決定。\r\n// 所以編輯模型是:**欄位的寬度就是它佔幾個 bit,左右順序就是它的先後**。拉右緣改寬度、\r\n// 左右拖改順序,序列化時再把起始位元重新累加出來 —— 位元編號永遠自動保持連續,\r\n// 不會出現「改了一個欄位、後面全部對不上」這種只有手寫才會犯的錯。\r\n//\r\n// 編輯畫布刻意畫成**一條不換行的長帶**(mermaid 渲染時每 32 bit 換行)。換行會把一個欄位\r\n// 切成兩段,拖曳時就沒有一個明確的「這個欄位的矩形」可以抓。\r\n\r\nimport type { ParseResult, ParseWarning } from '../../adapters/types';\r\nimport type { DataLossWarning, SerializeResult } from '../../adapters/types';\r\nimport type { EditorScene, SceneNode } from '../../scene/types';\r\n\r\n// 一個 bit 的寬度與整條帶的高度。\r\n// 26×62 的話,一份 96-bit 的封包會畫成 2496×62 的細長條 —— 符合畫面只好縮到 5 成,\r\n// 欄名跟著小到看不清楚。壓窄每個 bit、加高整條帶,同一份封包的長寬比從 40:1 降到 12:1。\r\nexport const BIT = { w: 14, h: 104, x0: 60, y0: 90 } as const;\r\n\r\nconst RANGE_RE = /^(\\d+)\\s*(?:-\\s*(\\d+))?\\s*:\\s*\"?(.*?)\"?\\s*$/;\r\nconst REL_RE = /^\\+\\s*(\\d+)\\s*:\\s*\"?(.*?)\"?\\s*$/;\r\n\r\nexport function packetToScene(text: string): ParseResult {\r\n  const warnings: ParseWarning[] = [];\r\n  const comments: string[] = [];\r\n  const nodes: SceneNode[] = [];\r\n  let title: string | undefined;\r\n  let seenHeader = false;\r\n  /** 原本寫的是相對寬度(+N)還是絕對範圍?整份沿用作者的寫法。 */\r\n  let relative = false;\r\n  let bit = 0;\r\n  let idx = 0;\r\n\r\n  for (const raw of text.split('\\n')) {\r\n    const line = raw.trim();\r\n    if (!line) continue;\r\n    if (line.startsWith('%%')) {\r\n      comments.push(line);\r\n      continue;\r\n    }\r\n    if (!seenHeader && /^packet(-beta)?$/i.test(line)) {\r\n      seenHeader = true;\r\n      continue;\r\n    }\r\n    const t = /^title\\s+(.*)$/i.exec(line);\r\n    if (t) {\r\n      title = t[1].trim();\r\n      continue;\r\n    }\r\n    const rel = REL_RE.exec(line);\r\n    const abs = rel ? null : RANGE_RE.exec(line);\r\n    if (!rel && !abs) {\r\n      warnings.push({ message: `略過看不懂的一行:${line}` });\r\n      continue;\r\n    }\r\n    let start: number;\r\n    let end: number;\r\n    let label: string;\r\n    if (rel) {\r\n      relative = true;\r\n      start = bit;\r\n      end = bit + Number(rel[1]) - 1;\r\n      label = rel[2];\r\n    } else {\r\n      start = Number(abs![1]);\r\n      end = abs![2] === undefined ? start : Number(abs![2]);\r\n      label = abs![3];\r\n    }\r\n    if (!Number.isFinite(start) || !Number.isFinite(end) || end < start) {\r\n      warnings.push({ message: `略過看不懂的位元範圍:${line}` });\r\n      continue;\r\n    }\r\n    bit = end + 1;\r\n    nodes.push({\r\n      id: `f${idx}`,\r\n      shape: 'packetField',\r\n      label,\r\n      x: BIT.x0 + start * BIT.w,\r\n      y: BIT.y0,\r\n      w: (end - start + 1) * BIT.w,\r\n      h: BIT.h,\r\n      data: { kind: 'packet' },\r\n      sourceIndex: idx++,\r\n      pinned: true,\r\n    });\r\n  }\r\n\r\n  if (!seenHeader) warnings.push({ message: '找不到 packet-beta 標頭,已以空圖處理。' });\r\n\r\n  const scene: EditorScene = {\r\n    version: 1,\r\n    diagramType: 'packet',\r\n    meta: { type: 'packet', title, relative },\r\n    nodes,\r\n    edges: [],\r\n    containers: [],\r\n    raw: { comments, fullSource: seenHeader ? undefined : text },\r\n    layoutOwner: 'user',\r\n  };\r\n  return { scene, warnings };\r\n}\r\n\r\n/** 依目前的 x 排序,並把每個欄位的寬度換算成位元數(至少 1 bit)。 */\r\nfunction fieldsInOrder(scene: EditorScene): Array<{ node: SceneNode; bits: number }> {\r\n  return [...scene.nodes]\r\n    .sort((a, b) => a.x - b.x || (a.sourceIndex ?? 0) - (b.sourceIndex ?? 0))\r\n    .map((node) => ({ node, bits: Math.max(1, Math.round(node.w / BIT.w)) }));\r\n}\r\n\r\nexport function sceneToPacket(scene: EditorScene): SerializeResult {\r\n  if (scene.nodes.length === 0 && scene.raw?.fullSource) {\r\n    return { text: scene.raw.fullSource, warnings: [] };\r\n  }\r\n  const warnings: DataLossWarning[] = [];\r\n  const meta = scene.meta.type === 'packet' ? scene.meta : { title: undefined, relative: false };\r\n  const lines: string[] = [];\r\n  for (const c of scene.raw?.comments ?? []) {\r\n    if (c.trim().startsWith('%%{')) lines.push(c.trim());\r\n  }\r\n  lines.push('packet-beta');\r\n  if (meta.title) lines.push(`title ${meta.title}`);\r\n  for (const c of scene.raw?.comments ?? []) {\r\n    const t = c.trim();\r\n    if (t.startsWith('%%') && !t.startsWith('%%{')) lines.push(t);\r\n  }\r\n\r\n  let bit = 0;\r\n  for (const { node, bits } of fieldsInOrder(scene)) {\r\n    const label = (node.label || node.id).replace(/\"/g, '');\r\n    if (meta.relative) {\r\n      lines.push(`+${bits}: \"${label}\"`);\r\n    } else {\r\n      const end = bit + bits - 1;\r\n      // 單一 bit 的欄位 mermaid 允許寫成 `16: \"…\"`(不必寫成 16-16)。\r\n      lines.push(`${bit === end ? bit : `${bit}-${end}`}: \"${label}\"`);\r\n    }\r\n    bit += bits;\r\n  }\r\n  return { text: lines.join('\\n') + '\\n', warnings };\r\n}\r\n\r\n/** 「整理」= 依目前順序把欄位接成一條連續的位元帶(寬度不變)。 */\r\nexport function layoutPacket(scene: EditorScene): EditorScene {\r\n  let bit = 0;\r\n  const nodes = fieldsInOrder(scene).map(({ node, bits }) => {\r\n    const x = BIT.x0 + bit * BIT.w;\r\n    bit += bits;\r\n    return { ...node, x, y: BIT.y0, w: bits * BIT.w, h: BIT.h };\r\n  });\r\n  return { ...scene, nodes, layoutOwner: 'user' };\r\n}\r\n","// flowchart 語法的單一雙向真相來源:shape ↔ bracket、arrow ↔ 連線語法。\r\n// parse 與 serialize 都引用同一張表,避免兩邊漂移。\r\n\r\nimport type { ArrowHead, LineKind, NodeShape } from '../../scene/types';\r\n\r\n/** 節點外形 → 包裹括號(serialize 用)。`{left}LABEL{right}`。 */\r\nexport interface ShapeBrackets {\r\n  left: string;\r\n  right: string;\r\n}\r\n\r\n/** Scene NodeShape → mermaid 括號。順序即 serialize 偏好。 */\r\nexport const SHAPE_TO_BRACKETS: Record<string, ShapeBrackets> = {\r\n  rectangle: { left: '[', right: ']' },\r\n  rounded: { left: '(', right: ')' },\r\n  stadium: { left: '([', right: '])' },\r\n  subroutine: { left: '[[', right: ']]' },\r\n  cylinder: { left: '[(', right: ')]' },\r\n  circle: { left: '((', right: '))' },\r\n  doubleCircle: { left: '(((', right: ')))' },\r\n  diamond: { left: '{', right: '}' },\r\n  hexagon: { left: '{{', right: '}}' },\r\n  odd: { left: '>', right: ']' },\r\n  trapezoid: { left: '[/', right: '\\\\]' },\r\n  trapezoidAlt: { left: '[\\\\', right: '/]' },\r\n  parallelogram: { left: '[/', right: '/]' },\r\n  parallelogramAlt: { left: '[\\\\', right: '\\\\]' },\r\n  ellipse: { left: '(-', right: '-)' },\r\n};\r\n\r\n/**\r\n * mermaid FlowVertex.type → Scene NodeShape(parse 用)。\r\n * 對映 mermaid 的 FlowVertexTypeParam 詞彙表。\r\n */\r\nexport const FLOW_TYPE_TO_SHAPE: Record<string, NodeShape> = {\r\n  square: 'rectangle',\r\n  rect: 'rectangle',\r\n  round: 'rounded',\r\n  stadium: 'stadium',\r\n  subroutine: 'subroutine',\r\n  cylinder: 'cylinder',\r\n  circle: 'circle',\r\n  doublecircle: 'doubleCircle',\r\n  diamond: 'diamond',\r\n  hexagon: 'hexagon',\r\n  odd: 'odd',\r\n  trapezoid: 'trapezoid',\r\n  inv_trapezoid: 'trapezoidAlt',\r\n  lean_right: 'parallelogram',\r\n  lean_left: 'parallelogramAlt',\r\n  ellipse: 'ellipse',\r\n};\r\n\r\nexport function shapeFromFlowType(type: string | undefined): NodeShape {\r\n  if (!type) return 'rectangle';\r\n  return FLOW_TYPE_TO_SHAPE[type] ?? 'rectangle';\r\n}\r\n\r\n// ── 箭頭 / 線條 ──\r\n//\r\n// mermaid 連線由「線體 + 端頭」組成:\r\n//   線體: --(normal) / ==(thick) / -.(dotted) / ~~~(invisible)\r\n//   端頭: >(arrow) / o(circle/dot) / x(cross) / 無(open)\r\n// serialize 由 lineKind + arrowStart/arrowEnd 組出語法字串。\r\n\r\n/** 線體基礎符號(無端頭時的「無箭頭」線)。 */\r\nconst LINE_BODY: Record<LineKind, { mid: string; plain: string }> = {\r\n  // mid = 帶箭頭時的線體(接端頭符號前的部分);plain = 無箭頭整條線。\r\n  solid: { mid: '--', plain: '---' },\r\n  thick: { mid: '==', plain: '===' },\r\n  dotted: { mid: '-.', plain: '-.-' },\r\n  invisible: { mid: '~~', plain: '~~~' },\r\n};\r\n\r\nconst HEAD_SYMBOL: Partial<Record<ArrowHead, string>> = {\r\n  arrow: '>',\r\n  dot: 'o',\r\n  cross: 'x',\r\n};\r\n// 起點端頭:箭頭朝左用 `<`(`>` 只對終點);圓圈 / 交叉左右對稱。\r\nconst START_HEAD_SYMBOL: Partial<Record<ArrowHead, string>> = {\r\n  arrow: '<',\r\n  dot: 'o',\r\n  cross: 'x',\r\n};\r\n\r\n/**\r\n * 組出 source→target 的連線運算子(不含 label)。\r\n * 例:solid+arrowEnd=arrow → `-->`;dotted+arrow → `-.->`;thick+arrow → `==>`;\r\n *     solid+none → `---`;solid+dot → `--o`;雙向 arrow → `<-->`。\r\n */\r\nexport function buildLinkOperator(edge: {\r\n  lineKind: LineKind;\r\n  arrowStart: ArrowHead;\r\n  arrowEnd: ArrowHead;\r\n  minLen?: number;\r\n}): string {\r\n  const body = LINE_BODY[edge.lineKind];\r\n  const startSym = START_HEAD_SYMBOL[edge.arrowStart] ?? '';\r\n  const endSym = HEAD_SYMBOL[edge.arrowEnd] ?? '';\r\n  const hasHead = Boolean(startSym || endSym);\r\n  // 額外秩距:minLen=2 → 多一節線體(mermaid 用線長控制 rank 距離)。\r\n  const extra = Math.max(0, (edge.minLen ?? 1) - 1);\r\n\r\n  if (!hasHead) {\r\n    // 無箭頭:用 plain 線體,依秩距加長。\r\n    const seg = body.plain;\r\n    if (edge.lineKind === 'dotted') {\r\n      // 點線無箭頭:-.- / -..- …\r\n      return '-' + '.'.repeat(1 + extra) + '-';\r\n    }\r\n    return seg + body.mid[0].repeat(extra);\r\n  }\r\n\r\n  // 有箭頭:startSym + 線體 + endSym;加長線體表示秩距。\r\n  // 點線帶箭頭的合法 mermaid 是 `-.->`(dash-dot-dash-head),故線體需為 `-.-`(收尾補 dash)。\r\n  let mid = body.mid;\r\n  if (edge.lineKind === 'dotted') {\r\n    mid = '-' + '.'.repeat(1 + extra) + '-';\r\n  } else {\r\n    mid = body.mid + body.mid[body.mid.length - 1].repeat(extra);\r\n  }\r\n  return `${startSym}${mid}${endSym}`;\r\n}\r\n\r\n/**\r\n * 由 mermaid FlowEdge 的 {type, stroke, length} 重建 Scene 箭頭描述(parse 用)。\r\n * stroke: 'normal'|'thick'|'dotted'|'invisible';type 編碼端頭。\r\n */\r\nexport function arrowFromFlowEdge(edge: {\r\n  type?: string;\r\n  stroke?: string;\r\n  length?: number;\r\n}): { lineKind: LineKind; arrowStart: ArrowHead; arrowEnd: ArrowHead; minLen: number } {\r\n  const lineKind: LineKind =\r\n    edge.stroke === 'thick'\r\n      ? 'thick'\r\n      : edge.stroke === 'dotted'\r\n        ? 'dotted'\r\n        : edge.stroke === 'invisible'\r\n          ? 'invisible'\r\n          : 'solid';\r\n\r\n  const type = edge.type ?? 'arrow_point';\r\n  // mermaid type 命名:arrow_point(>) / arrow_circle(o) / arrow_cross(x) / arrow_open(無端頭)\r\n  // 雙向以 double_ 前綴或兩端同符號表示。\r\n  let arrowEnd: ArrowHead = 'arrow';\r\n  let arrowStart: ArrowHead = 'none';\r\n  const headOf = (s: string): ArrowHead =>\r\n    s.includes('circle') ? 'dot' : s.includes('cross') ? 'cross' : s.includes('open') ? 'open' : 'arrow';\r\n\r\n  if (type.startsWith('double_') || type.startsWith('arrow_double')) {\r\n    const h = headOf(type);\r\n    arrowStart = h;\r\n    arrowEnd = h;\r\n  } else if (type.includes('open')) {\r\n    arrowEnd = 'open';\r\n  } else {\r\n    arrowEnd = headOf(type);\r\n  }\r\n\r\n  return { lineKind, arrowStart, arrowEnd, minLen: Math.max(1, edge.length ?? 1) };\r\n}\r\n","// block-beta 的雙向 round-trip + 版面。\r\n//\r\n// 積木圖是「按欄位流動」的網格:區塊依序填格,`columns N` 決定一列幾格。所以**位置就是順序** ——\r\n// 把區塊拖到別的格子就是在重排,這正是這種圖唯一要做的編輯。\r\n//\r\n// 只吃可以完整還原的子集;遇到 `block:… end` 巢狀、帶文字的箭頭、style 行等,整份原文回吐\r\n// 並降為唯讀。積木圖的語法變化很多,半懂不懂地改寫比不能編輯糟糕得多。\r\n\r\nimport type { ParseResult, ParseWarning } from '../../adapters/types';\r\nimport type { DataLossWarning, SerializeResult } from '../../adapters/types';\r\nimport type { EditorScene, NodeShape, SceneEdge, SceneNode } from '../../scene/types';\r\nimport { SHAPE_TO_BRACKETS } from '../flowchart/syntax-maps';\r\n\r\nexport const CELL = { w: 150, h: 78, gapX: 16, gapY: 16, x0: 60, y0: 60 } as const;\r\n\r\n/** 括號 → 外形(SHAPE_TO_BRACKETS 的反查;長括號優先,`[[` 不可以被 `[` 先吃掉)。 */\r\nconst BRACKET_ENTRIES = Object.entries(SHAPE_TO_BRACKETS).sort(\r\n  (a, b) => b[1].left.length - a[1].left.length,\r\n);\r\n\r\n/**\r\n * 積木 id 允許的字元。**不是** `[A-Za-z0-9_-]`:mermaid 的 id 可以是中文,把中文擋掉等於\r\n * 讓所有中文積木圖都退成唯讀。這裡只排除會與語法本身衝突的字元。\r\n */\r\nconst ID_RE = /^[^\\s[\\](){}<>:\"']+$/;\r\n\r\n/** `id[\"文字\"]:2` → { id, shape, label, span }。看不懂回 null。 */\r\nfunction parseBlockToken(token: string): { id: string; shape: NodeShape; label: string; span: number } | null {\r\n  // 先切出結尾的 `:N` 欄寬(但別把 `[\"a:b\"]` 裡的冒號切掉)。\r\n  let span = 1;\r\n  let body = token;\r\n  const spanMatch = /^(.*?[\\]})>])\\s*:\\s*(\\d+)$/.exec(token) ?? /^([^\\s:]+)\\s*:\\s*(\\d+)$/.exec(token);\r\n  if (spanMatch) {\r\n    body = spanMatch[1];\r\n    span = Math.max(1, Number(spanMatch[2]));\r\n  }\r\n  if (ID_RE.test(body)) return { id: body, shape: 'rectangle', label: body, span };\r\n  for (const [shape, br] of BRACKET_ENTRIES) {\r\n    const i = body.indexOf(br.left);\r\n    if (i <= 0 || !body.endsWith(br.right)) continue;\r\n    const id = body.slice(0, i);\r\n    if (!ID_RE.test(id)) continue;\r\n    const label = body.slice(i + br.left.length, body.length - br.right.length).replace(/^[\"']|[\"']$/g, '');\r\n    return { id, shape: shape as NodeShape, label, span };\r\n  }\r\n  return null;\r\n}\r\n\r\nconst EDGE_RE = /^([^\\s[\\](){}<>:\"']+)\\s*(-->|---|<-->)\\s*([^\\s[\\](){}<>:\"']+)$/;\r\n/** 需要整份放棄的語法(巢狀積木 / 樣式 / 帶標籤箭頭)。 */\r\nconst BAIL_RE = /^(block\\s*:|end\\b|style\\b|classDef\\b|class\\b)|--\\s*\"/;\r\n\r\nfunction passthrough(text: string, comments: string[], warnings: ParseWarning[]): ParseResult {\r\n  return {\r\n    scene: {\r\n      version: 1,\r\n      diagramType: 'block',\r\n      meta: { type: 'block', columns: 1 },\r\n      nodes: [],\r\n      edges: [],\r\n      containers: [],\r\n      raw: { comments, fullSource: text },\r\n      layoutOwner: 'user',\r\n    },\r\n    warnings,\r\n  };\r\n}\r\n\r\nexport function blockToScene(text: string): ParseResult {\r\n  const warnings: ParseWarning[] = [];\r\n  const comments: string[] = [];\r\n  const nodes: SceneNode[] = [];\r\n  const edges: SceneEdge[] = [];\r\n  let columns = 1;\r\n  let seenHeader = false;\r\n  let cell = 0;\r\n  let eIdx = 0;\r\n\r\n  for (const raw of text.split('\\n')) {\r\n    const line = raw.trim();\r\n    if (!line) continue;\r\n    if (line.startsWith('%%')) {\r\n      comments.push(line);\r\n      continue;\r\n    }\r\n    if (!seenHeader && /^block(-beta)?$/i.test(line)) {\r\n      seenHeader = true;\r\n      continue;\r\n    }\r\n    if (BAIL_RE.test(line)) {\r\n      warnings.push({ message: `包含尚未支援的語法(${line}),已改為唯讀以免改壞原檔。` });\r\n      return passthrough(text, comments, warnings);\r\n    }\r\n    const col = /^columns\\s+(\\d+)$/i.exec(line);\r\n    if (col) {\r\n      columns = Math.max(1, Number(col[1]));\r\n      continue;\r\n    }\r\n    const e = EDGE_RE.exec(line);\r\n    if (e) {\r\n      edges.push({\r\n        id: `e${eIdx}`,\r\n        source: e[1],\r\n        target: e[3],\r\n        lineKind: 'solid',\r\n        arrowStart: e[2] === '<-->' ? 'arrow' : 'none',\r\n        arrowEnd: e[2] === '---' ? 'none' : 'arrow',\r\n        data: { kind: 'flowchart' },\r\n        sourceIndex: eIdx++,\r\n      });\r\n      continue;\r\n    }\r\n    // 其餘皆視為「一列積木」:以空白切,每個 token 一格。\r\n    for (const token of line.split(/\\s+/)) {\r\n      const space = /^space(?::(\\d+))?$/i.exec(token);\r\n      if (space) {\r\n        cell += Math.max(1, Number(space[1] ?? 1));\r\n        continue;\r\n      }\r\n      const b = parseBlockToken(token);\r\n      if (!b) {\r\n        warnings.push({ message: `看不懂的積木「${token}」,已改為唯讀以免改壞原檔。` });\r\n        return passthrough(text, comments, warnings);\r\n      }\r\n      const cx = cell % columns;\r\n      const cy = Math.floor(cell / columns);\r\n      nodes.push({\r\n        id: b.id,\r\n        shape: b.shape,\r\n        label: b.label,\r\n        x: CELL.x0 + cx * (CELL.w + CELL.gapX),\r\n        y: CELL.y0 + cy * (CELL.h + CELL.gapY),\r\n        w: CELL.w * b.span + CELL.gapX * (b.span - 1),\r\n        h: CELL.h,\r\n        data: { kind: 'block', span: b.span },\r\n        sourceIndex: nodes.length,\r\n        pinned: true,\r\n      });\r\n      cell += b.span;\r\n    }\r\n  }\r\n\r\n  if (!seenHeader) {\r\n    warnings.push({ message: '找不到 block-beta 標頭,已以空圖處理。' });\r\n    return passthrough(text, comments, warnings);\r\n  }\r\n\r\n  const scene: EditorScene = {\r\n    version: 1,\r\n    diagramType: 'block',\r\n    meta: { type: 'block', columns },\r\n    nodes,\r\n    edges,\r\n    containers: [],\r\n    raw: { comments },\r\n    layoutOwner: 'user',\r\n  };\r\n  return { scene, warnings };\r\n}\r\n\r\n/** 節點中心 → 格座標(拖到哪一格就算哪一格)。 */\r\nfunction cellOf(n: SceneNode): { col: number; row: number } {\r\n  return {\r\n    col: Math.max(0, Math.round((n.x - CELL.x0) / (CELL.w + CELL.gapX))),\r\n    row: Math.max(0, Math.round((n.y - CELL.y0) / (CELL.h + CELL.gapY))),\r\n  };\r\n}\r\n\r\nexport function sceneToBlock(scene: EditorScene): SerializeResult {\r\n  if (scene.nodes.length === 0 && scene.raw?.fullSource) {\r\n    return { text: scene.raw.fullSource, warnings: [] };\r\n  }\r\n  const warnings: DataLossWarning[] = [];\r\n  const columns = scene.meta.type === 'block' ? scene.meta.columns : 1;\r\n  const lines: string[] = [];\r\n  for (const c of scene.raw?.comments ?? []) {\r\n    if (c.trim().startsWith('%%{')) lines.push(c.trim());\r\n  }\r\n  lines.push('block-beta');\r\n  for (const c of scene.raw?.comments ?? []) {\r\n    const t = c.trim();\r\n    if (t.startsWith('%%') && !t.startsWith('%%{')) lines.push(`  ${t}`);\r\n  }\r\n  lines.push(`  columns ${columns}`);\r\n\r\n  // 位置就是順序:先依列、再依欄排序,列與列之間換行輸出。\r\n  const placed = scene.nodes\r\n    .map((n) => ({ n, c: cellOf(n) }))\r\n    .sort((a, b) => a.c.row - b.c.row || a.c.col - b.c.col);\r\n  let curRow = -1;\r\n  let row: string[] = [];\r\n  const flush = (): void => {\r\n    if (row.length) lines.push(`  ${row.join(' ')}`);\r\n    row = [];\r\n  };\r\n  for (const { n, c } of placed) {\r\n    if (c.row !== curRow) {\r\n      flush();\r\n      curRow = c.row;\r\n    }\r\n    const d = n.data?.kind === 'block' ? n.data : undefined;\r\n    const br = SHAPE_TO_BRACKETS[n.shape] ?? SHAPE_TO_BRACKETS.rectangle;\r\n    const label = (n.label || n.id).replace(/[\"]/g, '');\r\n    const spanPart = d && d.span > 1 ? `:${d.span}` : '';\r\n    // 標籤與 id 相同且是單純識別字時可以只寫 id(維持作者原本的簡潔寫法)。\r\n    const body = label === n.id && ID_RE.test(label) ? n.id : `${n.id}${br.left}\"${label}\"${br.right}`;\r\n    row.push(`${body}${spanPart}`);\r\n  }\r\n  flush();\r\n\r\n  const ids = new Set(scene.nodes.map((n) => n.id));\r\n  for (const e of [...scene.edges].sort(\r\n    (a, b) => (a.sourceIndex ?? 0) - (b.sourceIndex ?? 0),\r\n  )) {\r\n    if (!ids.has(e.source) || !ids.has(e.target)) {\r\n      warnings.push({ message: `略過懸空連線 ${e.id}`, elementId: e.id });\r\n      continue;\r\n    }\r\n    const arrow = e.arrowStart !== 'none' ? '<-->' : e.arrowEnd !== 'none' ? '-->' : '---';\r\n    lines.push(`  ${e.source} ${arrow} ${e.target}`);\r\n  }\r\n  return { text: lines.join('\\n') + '\\n', warnings };\r\n}\r\n\r\n/** 「整理」= 依目前的格座標重新對齊到網格。 */\r\nexport function layoutBlock(scene: EditorScene): EditorScene {\r\n  const columns = scene.meta.type === 'block' ? scene.meta.columns : 1;\r\n  const placed = scene.nodes\r\n    .map((n) => ({ n, c: cellOf(n) }))\r\n    .sort((a, b) => a.c.row - b.c.row || a.c.col - b.c.col);\r\n  let cell = 0;\r\n  const nodes = placed.map(({ n }) => {\r\n    const span = n.data?.kind === 'block' ? n.data.span : 1;\r\n    // 這一列放不下就換到下一列開頭(與 mermaid 的填格規則一致)。\r\n    if ((cell % columns) + span > columns) cell += columns - (cell % columns);\r\n    const col = cell % columns;\r\n    const rowIdx = Math.floor(cell / columns);\r\n    cell += span;\r\n    return {\r\n      ...n,\r\n      x: CELL.x0 + col * (CELL.w + CELL.gapX),\r\n      y: CELL.y0 + rowIdx * (CELL.h + CELL.gapY),\r\n    };\r\n  });\r\n  return { ...scene, nodes, layoutOwner: 'user' };\r\n}\r\n","// 甘特圖的時間 ↔ 座標對映。\r\n//\r\n// 這張圖之所以值得拖:**橫向位置就是日期、寬度就是工期**。所以場景座標是唯一真相,\r\n// 序列化時再把 x / w 換算回日期與 `7d`。垂直位置決定它屬於哪個 section(與看板同一套想法)。\r\n//\r\n// 刻意只支援 `dateFormat YYYY-MM-DD`(壓倒性多數的用法)。遇到別的格式就整份原文回吐 ——\r\n// 半懂不懂地改寫使用者的甘特圖比不能編輯糟糕得多。\r\n\r\nexport const DAY_W = 26;\r\nexport const ROW_H = 34;\r\nexport const BAR_H = 22;\r\nexport const ORIGIN = { x: 70, y: 96 } as const;\r\n/** section 標題帶的高度(畫在該 section 第一列上方)。 */\r\nexport const SECTION_H = 26;\r\n\r\nexport const SUPPORTED_DATE_FORMAT = 'YYYY-MM-DD';\r\n\r\nconst MS_PER_DAY = 86400000;\r\n\r\n// 一律用**本地**日期欄位:mermaid 內部是用 dayjs 以本地時區解析日期的,拿它給的 Date 去讀\r\n// UTC 欄位,在 UTC+8 會整整差一天(2026-01-01 會被印成 2025-12-31)。\r\n\r\n/** `YYYY-MM-DD` → 本地午夜的毫秒;格式不符回 null。 */\r\nexport function parseDay(text: string): number | null {\r\n  const m = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(text.trim());\r\n  if (!m) return null;\r\n  const t = new Date(Number(m[1]), Number(m[2]) - 1, Number(m[3])).getTime();\r\n  return Number.isFinite(t) ? t : null;\r\n}\r\n\r\nexport function formatDay(ms: number): string {\r\n  const d = new Date(ms);\r\n  const p = (n: number): string => String(n).padStart(2, '0');\r\n  return `${d.getFullYear()}-${p(d.getMonth() + 1)}-${p(d.getDate())}`;\r\n}\r\n\r\n/** 加減天數。用日期欄位而不是加毫秒,才不會被日光節約時間差掉一小時而跨錯日。 */\r\nexport function addDays(ms: number, days: number): number {\r\n  const d = new Date(ms);\r\n  d.setDate(d.getDate() + Math.round(days));\r\n  return d.getTime();\r\n}\r\n\r\n/** 兩個時間相差幾天(以本地日界計)。 */\r\nexport function diffDays(from: number, to: number): number {\r\n  return Math.round((to - from) / MS_PER_DAY);\r\n}\r\n\r\n/** `7d` / `2w` / `12h` → 天數(可為小數);看不懂回 null。 */\r\nexport function parseDuration(text: string): number | null {\r\n  const m = /^([0-9.]+)\\s*([dwhms]?)$/i.exec(text.trim());\r\n  if (!m) return null;\r\n  const n = Number(m[1]);\r\n  if (!Number.isFinite(n)) return null;\r\n  switch (m[2].toLowerCase()) {\r\n    case 'w':\r\n      return n * 7;\r\n    case 'h':\r\n      return n / 24;\r\n    case 'm':\r\n      return n / 1440;\r\n    case 's':\r\n      return n / 86400;\r\n    default:\r\n      return n;\r\n  }\r\n}\r\n\r\n/** 天數 → 與原本相同單位的字串(原本寫 `2w` 就還你 `2w`,不要無故改寫成 14d)。 */\r\nexport function formatDuration(days: number, likeUnit: string): string {\r\n  const unit = /[dwhms]$/i.exec(likeUnit.trim())?.[0]?.toLowerCase() ?? 'd';\r\n  const round = (n: number): string => String(Math.round(n * 100) / 100);\r\n  switch (unit) {\r\n    case 'w':\r\n      return `${round(days / 7)}w`;\r\n    case 'h':\r\n      return `${round(days * 24)}h`;\r\n    case 'm':\r\n      return `${round(days * 1440)}m`;\r\n    case 's':\r\n      return `${round(days * 86400)}s`;\r\n    default:\r\n      return `${round(days)}d`;\r\n  }\r\n}\r\n\r\n/** 以圖上最早的日期為原點的座標換算。 */\r\nexport interface TimeAxis {\r\n  /** 第 0 天(UTC 毫秒)。 */\r\n  epoch: number;\r\n}\r\n\r\nexport const dayToX = (axis: TimeAxis, ms: number): number =>\r\n  ORIGIN.x + ((ms - axis.epoch) / MS_PER_DAY) * DAY_W;\r\n\r\nexport const xToDay = (axis: TimeAxis, x: number): number =>\r\n  addDays(axis.epoch, Math.round((x - ORIGIN.x) / DAY_W));\r\n\r\nexport const daysToWidth = (days: number): number => Math.max(6, days * DAY_W);\r\nexport const widthToDays = (w: number): number => Math.max(0, Math.round(w / DAY_W));\r\n\r\n/** 第 i 列的 y(列與列之間不留縫,靠 BAR_H 與 ROW_H 的差當間距)。 */\r\nexport const rowY = (i: number): number => ORIGIN.y + i * ROW_H;\r\n/** y → 第幾列(拖到列與列之間時取最近的一列)。 */\r\nexport const yToRow = (y: number): number => Math.max(0, Math.round((y - ORIGIN.y) / ROW_H));\r\n","// 用 rough.js generator 把節點外形畫成 Drawable(本地座標 0..w, 0..h)。\r\n// scene-renderer 再呼叫 gen.toPaths() 轉成 <path>。沒有原生方法的外形用 path 字串。\r\n\r\nimport type { NodeShape } from '../scene/types';\r\n\r\n// rough generator 的最小型別介面(避免硬綁 roughjs 型別匯出路徑)。\r\nexport interface RoughOptionsLike {\r\n  seed?: number;\r\n  roughness?: number;\r\n  bowing?: number;\r\n  stroke?: string;\r\n  strokeWidth?: number;\r\n  fill?: string;\r\n  fillStyle?: string;\r\n  fillWeight?: number;\r\n  hachureGap?: number;\r\n  strokeLineDash?: number[];\r\n  /** 只畫一道筆觸(rough 預設來回兩道)。帶箭頭的線要用,否則一條線會長出兩個箭頭。 */\r\n  disableMultiStroke?: boolean;\r\n}\r\n\r\nexport interface RoughGeneratorLike {\r\n  rectangle(x: number, y: number, w: number, h: number, options?: RoughOptionsLike): unknown;\r\n  ellipse(x: number, y: number, w: number, h: number, options?: RoughOptionsLike): unknown;\r\n  circle(x: number, y: number, diameter: number, options?: RoughOptionsLike): unknown;\r\n  polygon(points: Array<[number, number]>, options?: RoughOptionsLike): unknown;\r\n  linearPath(points: Array<[number, number]>, options?: RoughOptionsLike): unknown;\r\n  line(x1: number, y1: number, x2: number, y2: number, options?: RoughOptionsLike): unknown;\r\n  path(d: string, options?: RoughOptionsLike): unknown;\r\n  curve(points: Array<[number, number]>, options?: RoughOptionsLike): unknown;\r\n  toPaths(drawable: unknown): RoughPathInfo[];\r\n}\r\n\r\nexport interface RoughPathInfo {\r\n  d: string;\r\n  stroke: string;\r\n  strokeWidth: number;\r\n  fill?: string;\r\n  fillStyle?: string;\r\n}\r\n\r\n/** 本地座標(0..w / 0..h)的圓角矩形路徑;r 可任意指定,r<=0 視為直角。 */\r\nexport function roundedRectPath(w: number, h: number, r: number): string {\r\n  const rr = Math.min(r, w / 2, h / 2);\r\n  if (rr <= 0) return `M0,0 L${w},0 L${w},${h} L0,${h} Z`;\r\n  return (\r\n    `M${rr},0 L${w - rr},0 Q${w},0 ${w},${rr} ` +\r\n    `L${w},${h - rr} Q${w},${h} ${w - rr},${h} ` +\r\n    `L${rr},${h} Q0,${h} 0,${h - rr} ` +\r\n    `L0,${rr} Q0,0 ${rr},0 Z`\r\n  );\r\n}\r\n\r\nfunction stadiumPath(w: number, h: number): string {\r\n  const r = h / 2;\r\n  return `M${r},0 L${w - r},0 A${r},${r} 0 0 1 ${w - r},${h} L${r},${h} A${r},${r} 0 0 1 ${r},0 Z`;\r\n}\r\n\r\n/**\r\n * 給定外形與尺寸,回傳一組 rough Drawable(本地座標 0..w / 0..h)。\r\n * 多數外形回傳單一 Drawable;cylinder / subroutine / doubleCircle 回傳多個。\r\n */\r\nexport function buildNodeDrawables(\r\n  gen: RoughGeneratorLike,\r\n  shape: NodeShape,\r\n  w: number,\r\n  h: number,\r\n  options: RoughOptionsLike,\r\n): unknown[] {\r\n  switch (shape) {\r\n    case 'rounded':\r\n      return [gen.path(roundedRectPath(w, h, 14), options)];\r\n    case 'stadium':\r\n      return [gen.path(stadiumPath(w, h), options)];\r\n    case 'circle':\r\n      return [gen.circle(w / 2, h / 2, Math.min(w, h), options)];\r\n    case 'state':\r\n      return [gen.path(roundedRectPath(w, h, 10), options)];\r\n    case 'stateStart': {\r\n      // [*] 起點:實心小圓點。\r\n      const ink = options.stroke ?? '#1e1e1e';\r\n      return [gen.circle(w / 2, h / 2, Math.min(w, h), { ...options, fill: ink, fillStyle: 'solid' })];\r\n    }\r\n    case 'stateEnd': {\r\n      // [*] 終點:外圈 + 實心內圈。\r\n      const d = Math.min(w, h);\r\n      const ink = options.stroke ?? '#1e1e1e';\r\n      return [\r\n        gen.circle(w / 2, h / 2, d, { ...options, fill: undefined }),\r\n        gen.circle(w / 2, h / 2, Math.max(4, d - 7), { ...options, fill: ink, fillStyle: 'solid' }),\r\n      ];\r\n    }\r\n    case 'choice':\r\n      return [gen.polygon([[w / 2, 0], [w, h / 2], [w / 2, h], [0, h / 2]], options)];\r\n    case 'fork':\r\n      return [gen.rectangle(0, 0, w, h, { ...options, fill: options.stroke ?? '#1e1e1e', fillStyle: 'solid' })];\r\n    case 'doubleCircle': {\r\n      const d = Math.min(w, h);\r\n      return [gen.circle(w / 2, h / 2, d, options), gen.circle(w / 2, h / 2, d - 10, { ...options, fill: undefined })];\r\n    }\r\n    case 'ellipse':\r\n      return [gen.ellipse(w / 2, h / 2, w, h, options)];\r\n    case 'diamond':\r\n      return [gen.polygon([[w / 2, 0], [w, h / 2], [w / 2, h], [0, h / 2]], options)];\r\n    case 'hexagon': {\r\n      const o = Math.min(w * 0.2, 22);\r\n      return [gen.polygon([[o, 0], [w - o, 0], [w, h / 2], [w - o, h], [o, h], [0, h / 2]], options)];\r\n    }\r\n    case 'parallelogram': {\r\n      const o = Math.min(w * 0.18, 22);\r\n      return [gen.polygon([[o, 0], [w, 0], [w - o, h], [0, h]], options)];\r\n    }\r\n    case 'parallelogramAlt': {\r\n      const o = Math.min(w * 0.18, 22);\r\n      return [gen.polygon([[0, 0], [w - o, 0], [w, h], [o, h]], options)];\r\n    }\r\n    case 'trapezoid': {\r\n      const o = Math.min(w * 0.18, 22);\r\n      return [gen.polygon([[o, 0], [w - o, 0], [w, h], [0, h]], options)];\r\n    }\r\n    case 'trapezoidAlt': {\r\n      const o = Math.min(w * 0.18, 22);\r\n      return [gen.polygon([[0, 0], [w, 0], [w - o, h], [o, h]], options)];\r\n    }\r\n    case 'subroutine': {\r\n      const inset = 8;\r\n      return [\r\n        gen.rectangle(0, 0, w, h, options),\r\n        gen.line(inset, 0, inset, h, { ...options, fill: undefined }),\r\n        gen.line(w - inset, 0, w - inset, h, { ...options, fill: undefined }),\r\n      ];\r\n    }\r\n    case 'cylinder': {\r\n      const ry = Math.min(h * 0.15, 12);\r\n      const top = `M0,${ry} A${w / 2},${ry} 0 0 1 ${w},${ry} A${w / 2},${ry} 0 0 1 0,${ry} Z`;\r\n      const body = `M0,${ry} L0,${h - ry} A${w / 2},${ry} 0 0 0 ${w},${h - ry} L${w},${ry}`;\r\n      return [gen.path(body, options), gen.path(top, { ...options, fill: undefined })];\r\n    }\r\n    case 'odd': {\r\n      const o = Math.min(w * 0.15, 18);\r\n      return [gen.polygon([[0, 0], [w, 0], [w, h], [0, h], [o, h / 2]], options)];\r\n    }\r\n    case 'rectangle':\r\n    default:\r\n      return [gen.rectangle(0, 0, w, h, options)];\r\n  }\r\n}\r\n","// 增量場景渲染器:把 EditorScene 畫成手繪 SVG。\r\n// 節點用 rough.js(快取 Drawable,幾何不變只改 transform);邊每次重建(成本低)。\r\n// 互動層拖曳時呼叫 previewMove() 只改 transform + 重繞入射邊,放手後才 render() 重 rough。\r\n\r\nimport rough from 'roughjs';\r\nimport { ensureSketchFont } from '../../themes/sketch';\r\nimport { boundingBox } from '../scene/geometry';\r\nimport { containerRect, moveNodes } from '../scene/scene-ops';\r\nimport type { EditorScene, SceneContainer, SceneNode } from '../scene/types';\r\nimport { appendInlineMarkdown, svgEl, XHTML_NS } from './dom';\r\nimport { renderEdge, buildMarkers, markerIdFor, updateEdgeGeometry } from './edges';\r\nimport { INK, INK_DARK, clusterByIndex, paletteByIndex, seedFor } from './palette';\r\nimport { c4Lines, requirementKind, requirementRows, textWidth } from './node-metrics';\r\nimport { archIconGroup } from './arch-icon';\r\nimport { PLOT, quadrantRects } from '../round-trip/quadrant/model';\r\nimport { PIE as PIE_GEO, angleOf as pieAngleOf, sliceAngles as pieSliceAngles } from '../round-trip/pie';\r\nimport { XY as XY_PLOT, bandX as xyBandX, yToValue as xyYToValue } from '../round-trip/xychart';\r\nimport { BIT as PACKET_BIT } from '../round-trip/packet';\r\nimport { CELL as BLOCK_CELL } from '../round-trip/block';\r\nimport { DAY_W as GANTT_DAY_W, ORIGIN as GANTT_ORIGIN, ROW_H as GANTT_ROW_H, formatDay as ganttFormatDay } from '../round-trip/gantt/model';\r\n\r\nimport { GIT, gitLaneIndexAt, gitgraphLinks } from '../round-trip/gitgraph';\r\n\r\n/** 甘特圖的版面常數(集中成一個物件,渲染這邊讀起來比一串同名 import 清楚)。 */\r\nconst GANTT = { DAY_W: GANTT_DAY_W, ROW_H: GANTT_ROW_H, ORIGIN: GANTT_ORIGIN } as const;\r\n\r\n/** 用「泳道」呈現的圖種:容器框要可被點到(改名 / 刪除),其餘圖種維持穿透。 */\r\nconst LANE_DIAGRAMS = new Set(['kanban', 'journey', 'gitgraph']);\r\n\r\n/** 中日韓字元(含全形標點)。 */\r\nconst CJK_RE = /[　-鿿豈-﫿＀-￯]/;\r\n\r\n/**\r\n * 直排的軸標籤。\r\n *\r\n * 中日韓文字轉 90 度會整排「躺著」—— 直排的正確排法是每個字立著往下疊,所以 CJK 走\r\n * writing-mode,西文才維持由下往上轉的慣例。象限圖與 xychart 兩邊共用同一個判斷。\r\n */\r\nfunction verticalAxisText(\r\n  s: string,\r\n  x: number,\r\n  y: number,\r\n  ink: string,\r\n  font: string,\r\n  anchor: string,\r\n): SVGElement {\r\n  const cjk = CJK_RE.test(s);\r\n  const t = svgEl('text', {\r\n    x,\r\n    y,\r\n    fill: ink,\r\n    'text-anchor': anchor,\r\n    'dominant-baseline': 'middle',\r\n    style:\r\n      `font:${font} var(--rsm-editor-font);opacity:0.7;pointer-events:none;` +\r\n      (cjk ? 'writing-mode:vertical-rl;text-orientation:upright;letter-spacing:1px;' : ''),\r\n    ...(cjk ? {} : { transform: `rotate(-90 ${x} ${y})` }),\r\n  });\r\n  t.textContent = s;\r\n  return t;\r\n}\r\nimport { buildNodeDrawables, roundedRectPath, type RoughGeneratorLike, type RoughPathInfo } from './shapes';\r\n\r\n/** 'sketch' = Excalidraw 手繪抖動;'clean' = 俐落圓角 + 柔和陰影(貼近 colorful 主題)。 */\r\nexport type EditorLook = 'sketch' | 'clean';\r\n\r\nexport interface SceneRendererOptions {\r\n  dark?: boolean;\r\n  seed?: number;\r\n  fontUrl?: string;\r\n  look?: EditorLook;\r\n}\r\n\r\ninterface NodeCache {\r\n  g: SVGGElement;\r\n  geomKey: string;\r\n  labelKey: string;\r\n}\r\n\r\nconst NODE_SHADOW_ID = 'rsm-node-shadow';\r\n\r\nconst ROUGH_LOOKS: Record<EditorLook, { roughness: number; bowing: number; strokeWidth: number; fillStyle: 'solid' }> = {\r\n  sketch: { roughness: 1.05, bowing: 0.8, strokeWidth: 1.6, fillStyle: 'solid' },\r\n  clean: { roughness: 0, bowing: 0, strokeWidth: 1.5, fillStyle: 'solid' },\r\n};\r\n\r\nexport class SceneRenderer {\r\n  private gen: RoughGeneratorLike;\r\n  private dark: boolean;\r\n  private baseSeed: number;\r\n  private fontUrl?: string;\r\n  private look: EditorLook;\r\n\r\n  private defs!: SVGDefsElement;\r\n  private frameLayer!: SVGGElement;\r\n  private containersLayer!: SVGGElement;\r\n  edgesLayer!: SVGGElement;\r\n  nodesLayer!: SVGGElement;\r\n  overlayLayer!: SVGGElement;\r\n\r\n  private nodeCache = new Map<string, NodeCache>();\r\n  private edgeEls = new Map<string, SVGGElement>();\r\n  private scene: EditorScene | null = null;\r\n  /** 上一次渲染走的是 sequence 路徑(直接寫入 layers、不經 nodeCache)。切換到非 sequence 圖種時,\r\n   *  diff 渲染靠 nodeCache 找不到這些殘留元素,需先強制清空 layers,否則上一張圖會疊著留下來。 */\r\n  private renderedSequence = false;\r\n  /** sequence:訊息陳述 index → 世界座標矩形(供雙擊編輯訊息文字定位)。 */\r\n  private seqMsgRects = new Map<number, { x: number; y: number; w: number; h: number }>();\r\n  /** sequence:整張圖的世界座標範圍(供 fit;sequence 內容延伸到節點下方,不能只用節點 bbox)。 */\r\n  private seqBounds: { x: number; y: number; w: number; h: number } | null = null;\r\n\r\n  /** 取得 sequence 訊息的世界座標矩形(host 開啟文字編輯器定位、拖曳換序時畫選取框用)。 */\r\n  getSeqMsgRect(index: number): { x: number; y: number; w: number; h: number } | undefined {\r\n    return this.seqMsgRects.get(index);\r\n  }\r\n\r\n  /** sequence / quadrant 模式下的整張圖範圍(供 fit 用);其他圖種回 null(改用節點 bbox)。 */\r\n  getContentBounds(): { x: number; y: number; w: number; h: number } | null {\r\n    return this.seqBounds;\r\n  }\r\n\r\n  /** quadrant:繪圖區的世界座標(含四周軸標籤留白),供 fit 用。 */\r\n  private static quadrantBounds(): { x: number; y: number; w: number; h: number } {\r\n    return { x: PLOT.x - 70, y: PLOT.y - 50, w: PLOT.w + 110, h: PLOT.h + 100 };\r\n  }\r\n\r\n  constructor(opts: SceneRendererOptions = {}) {\r\n    this.gen = (rough as unknown as { generator(): RoughGeneratorLike }).generator();\r\n    this.dark = opts.dark ?? false;\r\n    this.baseSeed = opts.seed ?? 42;\r\n    this.fontUrl = opts.fontUrl;\r\n    this.look = opts.look ?? 'sketch';\r\n  }\r\n\r\n  /** clean 風的柔和陰影濾鏡(貼近 colorful 主題的卡片陰影)。 */\r\n  private appendShadowFilter(): void {\r\n    const sh = svgEl('filter', { id: NODE_SHADOW_ID, x: '-40%', y: '-40%', width: '180%', height: '180%' });\r\n    // 柔和投影:暗色下原本純黑 0.55 + 模糊不足 → 像一塊醜黑塊。改用偏藍黑、低不透明、加大模糊。\r\n    const fd = svgEl('feDropShadow', {\r\n      dx: 0,\r\n      dy: 1.5,\r\n      stdDeviation: this.dark ? 6 : 4,\r\n      'flood-color': this.dark ? '#0b1220' : '#1e293b',\r\n      'flood-opacity': this.dark ? '0.28' : '0.14',\r\n    });\r\n    sh.appendChild(fd);\r\n    this.defs.appendChild(sh);\r\n  }\r\n\r\n  /** 建立圖層結構於 parent(編輯器的 viewport <g>)內。 */\r\n  mount(parent: SVGElement): void {\r\n    void ensureSketchFont(this.fontUrl);\r\n    this.defs = svgEl('defs');\r\n    for (const m of buildMarkers(this.dark)) this.defs.appendChild(m);\r\n    if (this.look === 'clean') this.appendShadowFilter();\r\n    // 圖表外框(象限圖等「有背景的圖種」)。壓在最底層,不參與節點 / 容器的差異渲染。\r\n    this.frameLayer = svgEl('g', { class: 'rsm-frame' });\r\n    this.containersLayer = svgEl('g', { class: 'rsm-containers' });\r\n    this.edgesLayer = svgEl('g', { class: 'rsm-edges' });\r\n    this.nodesLayer = svgEl('g', { class: 'rsm-nodes' });\r\n    this.overlayLayer = svgEl('g', { class: 'rsm-overlay' });\r\n    parent.appendChild(this.defs);\r\n    parent.appendChild(this.frameLayer);\r\n    parent.appendChild(this.containersLayer);\r\n    parent.appendChild(this.edgesLayer);\r\n    parent.appendChild(this.nodesLayer);\r\n    parent.appendChild(this.overlayLayer);\r\n  }\r\n\r\n  setDark(dark: boolean): void {\r\n    if (dark === this.dark) return;\r\n    this.dark = dark;\r\n    // 重建 markers + 全部重畫。\r\n    while (this.defs.firstChild) this.defs.removeChild(this.defs.firstChild);\r\n    for (const m of buildMarkers(this.dark)) this.defs.appendChild(m);\r\n    if (this.look === 'clean') this.appendShadowFilter();\r\n    this.nodeCache.clear();\r\n    while (this.nodesLayer.firstChild) this.nodesLayer.removeChild(this.nodesLayer.firstChild);\r\n    if (this.scene) this.render(this.scene);\r\n  }\r\n\r\n  getLook(): EditorLook {\r\n    return this.look;\r\n  }\r\n\r\n  /** 切換手繪(sketch)/ 簡潔(clean)風:重建 defs(陰影只 clean 用)+ 清快取全部重畫。 */\r\n  setLook(look: EditorLook): void {\r\n    if (look === this.look) return;\r\n    this.look = look;\r\n    while (this.defs.firstChild) this.defs.removeChild(this.defs.firstChild);\r\n    for (const m of buildMarkers(this.dark)) this.defs.appendChild(m);\r\n    if (this.look === 'clean') this.appendShadowFilter();\r\n    this.nodeCache.clear();\r\n    while (this.nodesLayer.firstChild) this.nodesLayer.removeChild(this.nodesLayer.firstChild);\r\n    if (this.scene) this.render(this.scene);\r\n  }\r\n\r\n  private buildNodeGroup(node: SceneNode): SVGGElement {\r\n    const g = svgEl('g', { 'data-node-id': node.id, class: 'rsm-node' });\r\n    g.setAttribute('transform', `translate(${node.x},${node.y})`);\r\n    this.fillNodeContent(g, node);\r\n    return g;\r\n  }\r\n\r\n  private fillNodeContent(g: SVGGElement, node: SceneNode): void {\r\n    while (g.firstChild) g.removeChild(g.firstChild);\r\n    // 透明 hit rect(rough 線條有縫,確保整個 bbox 可點)。\r\n    const hit = svgEl('rect', { x: 0, y: 0, width: node.w, height: node.h, fill: 'transparent', rx: 6 });\r\n    hit.style.cursor = 'move';\r\n    g.appendChild(hit);\r\n\r\n    // 資料點 / 扇形把手:不走外形 + 手繪那一套。它們不是「框」,外形描邊只會多畫一個\r\n    // 沒有意義的方框(圓餅圖的把手尤其明顯:文字外面憑空多一個框)。\r\n    if (node.data?.kind === 'quadrant') {\r\n      this.fillQuadrantPoint(g, node);\r\n      return;\r\n    }\r\n    if (node.data?.kind === 'pie') {\r\n      this.fillPieSlice(g, node);\r\n      return;\r\n    }\r\n    if (node.data?.kind === 'xy') {\r\n      this.fillXyPoint(g, node);\r\n      return;\r\n    }\r\n    if (node.data?.kind === 'architecture') {\r\n      this.fillArchNode(g, node);\r\n      return;\r\n    }\r\n    if (node.data?.kind === 'packet') {\r\n      this.fillPacketField(g, node);\r\n      return;\r\n    }\r\n    if (node.data?.kind === 'gitgraph') {\r\n      this.fillGitCommit(g, node);\r\n      return;\r\n    }\r\n    // 泳道卡片與甘特長條也是自己畫底框的:再讓 rough 畫一次同尺寸的框,四個角就會露出\r\n    // 手繪筆觸多出來的那一小截,看起來像卡片破角。\r\n    if (node.data?.kind === 'gantt') {\r\n      this.fillGanttBar(g, node);\r\n      return;\r\n    }\r\n    if (node.data?.kind === 'kanban' || node.data?.kind === 'journey') {\r\n      this.fillKanbanCard(g, node);\r\n      return;\r\n    }\r\n\r\n    // 依節點順序循序取色(非 hash),相鄰節點配色和諧。\r\n    const idx = this.scene ? this.scene.nodes.findIndex((n) => n.id === node.id) : 0;\r\n    // 偽狀態(起點 / 終點 / 分岔匯合)是「記號」不是「狀態」,mermaid 一律畫成墨色實心。\r\n    // 讓它們跟著彩色輪盤走會冒出藍色起點、紫色終點,看起來像三個地位相同的狀態。\r\n    const isPseudo = node.shape === 'stateStart' || node.shape === 'stateEnd' || node.shape === 'fork';\r\n    const ink = this.dark ? INK_DARK : INK;\r\n    const pal = isPseudo ? { fill: ink, stroke: ink } : paletteByIndex(idx >= 0 ? idx : 0);\r\n    const opts = {\r\n      ...ROUGH_LOOKS[this.look],\r\n      seed: seedFor(node.id, this.baseSeed),\r\n      stroke: node.style?.stroke ?? pal.stroke,\r\n      strokeWidth: node.style?.strokeWidth ?? ROUGH_LOOKS[this.look].strokeWidth,\r\n      fill: node.style?.fill ?? pal.fill,\r\n    };\r\n    const dash = node.style?.strokeDasharray;\r\n    // 形狀畫進子群組;clean 風的柔和陰影只套形狀(不套文字,文字才清晰銳利)。\r\n    const shapesG = svgEl('g', { class: 'rsm-node-shapes' });\r\n    if (this.look === 'clean') shapesG.style.filter = `url(#${NODE_SHADOW_ID})`;\r\n    // clean 風把直角方框畫成圓角,視覺更貼近 colorful 主題。\r\n    const shape = this.look === 'clean' && node.shape === 'rectangle' ? 'rounded' : node.shape;\r\n    this.appendRoughPaths(shapesG, buildNodeDrawables(this.gen, shape, node.w, node.h, opts), { dash });\r\n    g.appendChild(shapesG);\r\n\r\n    // ER 實體 / class:多隔間框(標題列 + 屬性/成員列),貼近「Edit Diagram」預覽外觀。\r\n    if (node.data?.kind === 'er') {\r\n      this.fillErEntity(g, node);\r\n      return;\r\n    }\r\n    if (node.data?.kind === 'class') {\r\n      this.fillClassBox(g, node);\r\n      return;\r\n    }\r\n    if (node.data?.kind === 'requirement') {\r\n      this.fillRequirementBox(g, node);\r\n      return;\r\n    }\r\n    if (node.data?.kind === 'c4') {\r\n      this.fillC4Box(g, node);\r\n      return;\r\n    }\r\n\r\n    // label foreignObject(置中):預設深色墨字(節點底色多為淺色);classDef/style 指定 color 時尊重之\r\n    // (例如深底 fill + color:#fff)。\r\n    if (node.label) {\r\n      const fo = svgEl('foreignObject', { x: 0, y: 0, width: node.w, height: node.h });\r\n      fo.style.pointerEvents = 'none';\r\n      const div = document.createElementNS(XHTML_NS, 'div') as unknown as HTMLDivElement;\r\n      if (node.labelKind === 'markdown') appendInlineMarkdown(div, node.label);\r\n      else div.textContent = node.label.replace(/<br\\s*\\/?>/g, '\\n');\r\n      const textColor = node.style?.color ?? INK;\r\n      div.setAttribute(\r\n        'style',\r\n        'display:flex;align-items:center;justify-content:center;width:100%;height:100%;' +\r\n          'box-sizing:border-box;padding:4px 8px;font:600 14px/1.3 var(--rsm-editor-font);' +\r\n          `color:${textColor};text-align:center;white-space:pre-wrap;word-break:break-word;overflow:hidden;`,\r\n      );\r\n      fo.appendChild(div as unknown as Node);\r\n      g.appendChild(fo);\r\n    }\r\n  }\r\n\r\n  /** ER 實體框:標題列(實體名)+ 屬性列。外框矩形已由 fillNodeContent 畫好,這裡疊內容。 */\r\n  private fillErEntity(g: SVGGElement, node: SceneNode): void {\r\n    const attrs = node.data?.kind === 'er' ? node.data.attributes : [];\r\n    const fo = svgEl('foreignObject', { x: 0, y: 0, width: node.w, height: node.h });\r\n    fo.style.pointerEvents = 'none';\r\n    const root = document.createElementNS(XHTML_NS, 'div') as unknown as HTMLDivElement;\r\n    root.setAttribute(\r\n      'style',\r\n      'display:flex;flex-direction:column;width:100%;height:100%;box-sizing:border-box;' +\r\n        `overflow:hidden;font:13px/1.4 var(--rsm-editor-font);color:${INK};`,\r\n    );\r\n    const title = document.createElementNS(XHTML_NS, 'div') as unknown as HTMLDivElement;\r\n    title.textContent = node.label;\r\n    title.setAttribute(\r\n      'style',\r\n      // 沒有屬性就不畫分隔線 —— 否則框裡會多出一格空隔間(mermaid 對無屬性的實體也只畫一個名稱框)。\r\n      `font-weight:700;text-align:center;padding:5px 8px;${attrs.length ? `border-bottom:1px solid ${INK};` : ''}` +\r\n        'white-space:nowrap;overflow:hidden;text-overflow:ellipsis;',\r\n    );\r\n    root.appendChild(title as unknown as Node);\r\n    if (attrs.length) {\r\n      // 屬性以「表格列」呈現:平均分配高度填滿框體(對齊 mermaid 把框撐高的尺寸),列間細分隔線。\r\n      const body = document.createElementNS(XHTML_NS, 'div') as unknown as HTMLDivElement;\r\n      body.setAttribute('style', 'flex:1;display:flex;flex-direction:column;overflow:hidden;');\r\n      attrs.forEach((a, i) => {\r\n        const row = document.createElementNS(XHTML_NS, 'div') as unknown as HTMLDivElement;\r\n        const keys = a.keys && a.keys.length ? ` ${a.keys.join(',')}` : '';\r\n        row.textContent = `${a.type ?? ''} ${a.name}${keys}`.trim();\r\n        row.setAttribute(\r\n          'style',\r\n          'flex:1;display:flex;align-items:center;padding:0 8px;min-height:20px;font-size:12px;' +\r\n            `white-space:nowrap;overflow:hidden;text-overflow:ellipsis;${i > 0 ? `border-top:1px solid ${INK}22;` : ''}`,\r\n        );\r\n        // 屬性備註(description)以淡色斜體附在後面,對齊 mermaid ER 的備註欄。\r\n        if (a.comment) {\r\n          const c = document.createElementNS(XHTML_NS, 'span') as unknown as HTMLSpanElement;\r\n          c.textContent = `  ${a.comment}`;\r\n          c.setAttribute('style', 'opacity:0.55;font-style:italic;');\r\n          row.appendChild(c as unknown as Node);\r\n        }\r\n        body.appendChild(row as unknown as Node);\r\n      });\r\n      root.appendChild(body as unknown as Node);\r\n    }\r\n    fo.appendChild(root as unknown as Node);\r\n    g.appendChild(fo);\r\n  }\r\n\r\n  /** class 框:標題(+«stereotype»)/ 成員 / 方法 三隔間,以分隔線區隔。 */\r\n  private fillClassBox(g: SVGGElement, node: SceneNode): void {\r\n    const data = node.data?.kind === 'class' ? node.data : undefined;\r\n    const fo = svgEl('foreignObject', { x: 0, y: 0, width: node.w, height: node.h });\r\n    fo.style.pointerEvents = 'none';\r\n    const root = document.createElementNS(XHTML_NS, 'div') as unknown as HTMLDivElement;\r\n    root.setAttribute(\r\n      'style',\r\n      'display:flex;flex-direction:column;width:100%;height:100%;box-sizing:border-box;' +\r\n        `overflow:hidden;font:12px/1.45 var(--rsm-editor-font);color:${INK};`,\r\n    );\r\n    const mkSection = (style: string): HTMLDivElement => {\r\n      const d = document.createElementNS(XHTML_NS, 'div') as unknown as HTMLDivElement;\r\n      d.setAttribute('style', style);\r\n      return d;\r\n    };\r\n    // mermaid 泛型語法 ~T~ 在顯示時呈現為 <T>(序列化仍保留 ~T~)。\r\n    const genericDisplay = (s: string): string => s.replace(/~([^~]+)~/g, '<$1>');\r\n    // 沒有成員也沒有方法就不畫分隔線 —— 否則只有類別名的框裡會多出一整格空隔間。\r\n    const hasBody = (data?.members?.length ?? 0) > 0 || (data?.methods?.length ?? 0) > 0;\r\n    const title = mkSection(\r\n      `font-weight:700;text-align:center;padding:4px 8px;${hasBody ? `border-bottom:1px solid ${INK};` : ''}white-space:pre-wrap;`,\r\n    );\r\n    const nameWithGeneric = data?.generic ? `${node.label}~${data.generic}~` : node.label;\r\n    title.textContent = (data?.stereotype ? `«${data.stereotype}»\\n` : '') + genericDisplay(nameWithGeneric);\r\n    root.appendChild(title as unknown as Node);\r\n    const addRows = (rows: string[], borderTop: boolean, fill: boolean): void => {\r\n      if (!rows.length) return;\r\n      // 最後一個隔間 flex:1 撐到框底(UML 標準外觀,消除框底浮空空白)。\r\n      const sec = mkSection(\r\n        `flex:${fill ? '1 1 auto' : '0 0 auto'};padding:3px 8px;${borderTop ? `border-top:1px solid ${INK};` : ''}`,\r\n      );\r\n      for (const r of rows) {\r\n        const row = document.createElementNS(XHTML_NS, 'div') as unknown as HTMLDivElement;\r\n        // classifier:抽象(*)→ 斜體、靜態($)→ 底線(UML 慣例),顯示時去掉標記。\r\n        let text = r;\r\n        let extra = '';\r\n        const afterParen = text.match(/\\)([*$])(\\s|$)/);\r\n        const trailing = afterParen ? null : text.match(/([*$])\\s*$/);\r\n        const mark = afterParen?.[1] ?? trailing?.[1];\r\n        if (mark === '*') extra = 'font-style:italic;';\r\n        else if (mark === '$') extra = 'text-decoration:underline;';\r\n        if (afterParen) text = text.replace(/\\)[*$]/, ')');\r\n        else if (trailing) text = text.replace(/[*$]\\s*$/, '');\r\n        row.textContent = genericDisplay(text);\r\n        row.setAttribute('style', `white-space:nowrap;overflow:hidden;text-overflow:ellipsis;${extra}`);\r\n        sec.appendChild(row as unknown as Node);\r\n      }\r\n      root.appendChild(sec as unknown as Node);\r\n    };\r\n    const hasMembers = (data?.members?.length ?? 0) > 0;\r\n    const hasMethods = (data?.methods?.length ?? 0) > 0;\r\n    addRows(data?.members ?? [], false, !hasMethods);\r\n    addRows(data?.methods ?? [], hasMembers, true);\r\n    fo.appendChild(root as unknown as Node);\r\n    g.appendChild(fo);\r\n  }\r\n\r\n  /** 象限圖外框:四個象限底色 + 名稱、兩軸端點文字、中線、標題。 */\r\n  private renderQuadrantFrame(scene: EditorScene): void {\r\n    const meta = scene.meta.type === 'quadrant' ? scene.meta.quadrant : undefined;\r\n    const ink = this.dark ? INK_DARK : INK;\r\n    const g = this.frameLayer;\r\n    const text = (\r\n      s: string,\r\n      x: number,\r\n      y: number,\r\n      opts: { size?: number; weight?: number; anchor?: string; opacity?: number } = {},\r\n    ): void => {\r\n      if (!s) return;\r\n      const t = svgEl('text', {\r\n        x,\r\n        y,\r\n        fill: ink,\r\n        'text-anchor': opts.anchor ?? 'middle',\r\n        'dominant-baseline': 'middle',\r\n        style:\r\n          `font:${opts.weight ?? 500} ${opts.size ?? 13}px var(--rsm-editor-font);` +\r\n          `opacity:${opts.opacity ?? 0.85};pointer-events:none;`,\r\n      });\r\n      t.textContent = s;\r\n      g.appendChild(t);\r\n    };\r\n\r\n    quadrantRects().forEach((r, i) => {\r\n      // 用叢集色(飽和色的低透明度)而不是節點的淺色 fill:淺粉彩壓在深色底上會糊成一片灰褐,\r\n      // 四個象限就分不出來了。叢集色本來就是為了「淺底深底都成立」設計的。\r\n      const pal = clusterByIndex(i);\r\n      g.appendChild(\r\n        svgEl('rect', {\r\n          x: r.x,\r\n          y: r.y,\r\n          width: r.w,\r\n          height: r.h,\r\n          fill: pal.fill,\r\n          stroke: 'none',\r\n        }),\r\n      );\r\n      // 象限名放在該象限的上緣內側,不會和資料點打架。\r\n      text(meta?.quadrants[i] ?? '', r.x + r.w / 2, r.y + 20, { size: 14, weight: 600, opacity: 0.75 });\r\n    });\r\n\r\n    // 外框 + 十字中線。\r\n    g.appendChild(\r\n      svgEl('rect', {\r\n        x: PLOT.x,\r\n        y: PLOT.y,\r\n        width: PLOT.w,\r\n        height: PLOT.h,\r\n        fill: 'none',\r\n        stroke: ink,\r\n        'stroke-opacity': 0.35,\r\n      }),\r\n    );\r\n    for (const d of [\r\n      `M${PLOT.x + PLOT.w / 2},${PLOT.y} L${PLOT.x + PLOT.w / 2},${PLOT.y + PLOT.h}`,\r\n      `M${PLOT.x},${PLOT.y + PLOT.h / 2} L${PLOT.x + PLOT.w},${PLOT.y + PLOT.h / 2}`,\r\n    ]) {\r\n      g.appendChild(svgEl('path', { d, stroke: ink, 'stroke-opacity': 0.25, 'stroke-dasharray': '4 4', fill: 'none' }));\r\n    }\r\n\r\n    if (meta?.title) text(meta.title, PLOT.x + PLOT.w / 2, PLOT.y - 28, { size: 17, weight: 700, opacity: 1 });\r\n    // x 軸:左右端文字置於下緣;y 軸:上下端文字直排於左緣。\r\n    if (meta?.xAxis) {\r\n      text(meta.xAxis.left, PLOT.x + 4, PLOT.y + PLOT.h + 22, { anchor: 'start', opacity: 0.7 });\r\n      text(meta.xAxis.right ?? '', PLOT.x + PLOT.w - 4, PLOT.y + PLOT.h + 22, { anchor: 'end', opacity: 0.7 });\r\n    }\r\n    if (meta?.yAxis) {\r\n      const rot = (s: string, y: number, anchor: string): void => {\r\n        if (!s) return;\r\n        g.appendChild(verticalAxisText(s, PLOT.x - 24, y, ink, '500 13px', anchor));\r\n      };\r\n      rot(meta.yAxis.bottom, PLOT.y + PLOT.h - 4, 'start');\r\n      rot(meta.yAxis.top ?? '', PLOT.y + 4, 'end');\r\n    }\r\n  }\r\n\r\n  /** 甘特圖外框:日期刻度 + 每日格線 + section 帶(長條本身是節點)。 */\r\n  private renderGanttFrame(scene: EditorScene): void {\r\n    const meta = scene.meta.type === 'gantt' ? scene.meta.gantt : undefined;\r\n    const epoch = meta?.epoch ?? 0;\r\n    const ink = this.dark ? INK_DARK : INK;\r\n    const g = this.frameLayer;\r\n    if (scene.nodes.length === 0) return;\r\n\r\n    const right = Math.max(...scene.nodes.map((n) => n.x + n.w)) + GANTT.DAY_W * 2;\r\n    const bottom = Math.max(...scene.nodes.map((n) => n.y + n.h)) + GANTT.ROW_H;\r\n    const days = Math.ceil((right - GANTT.ORIGIN.x) / GANTT.DAY_W);\r\n    const top = GANTT.ORIGIN.y - 26;\r\n\r\n    // 每日格線 + 每 7 天標一次日期(每天都標會擠成一團)。\r\n    for (let d = 0; d <= days; d += 1) {\r\n      const x = GANTT.ORIGIN.x + d * GANTT.DAY_W;\r\n      const week = d % 7 === 0;\r\n      g.appendChild(\r\n        svgEl('path', {\r\n          d: `M${x},${top} L${x},${bottom}`,\r\n          stroke: ink,\r\n          'stroke-opacity': week ? 0.22 : 0.08,\r\n          fill: 'none',\r\n        }),\r\n      );\r\n      if (week) {\r\n        const t = svgEl('text', {\r\n          x,\r\n          y: top - 8,\r\n          fill: ink,\r\n          'text-anchor': 'middle',\r\n          style: 'font:500 11px var(--rsm-editor-font);opacity:0.7;pointer-events:none;',\r\n        });\r\n        t.textContent = ganttFormatDay(epoch + d * 86400000);\r\n        g.appendChild(t);\r\n      }\r\n    }\r\n\r\n    // section 帶:淡色底 + 左側名稱。\r\n    [...scene.containers]\r\n      .sort((a, b) => (a.sourceIndex ?? 0) - (b.sourceIndex ?? 0))\r\n      .forEach((c, i) => {\r\n        const pal = clusterByIndex(i);\r\n        g.appendChild(\r\n          svgEl('rect', {\r\n            x: GANTT.ORIGIN.x - 60,\r\n            y: c.y,\r\n            width: right - GANTT.ORIGIN.x + 60,\r\n            height: c.h,\r\n            fill: pal.fill,\r\n            stroke: 'none',\r\n            'data-container-id': c.id,\r\n          }),\r\n        );\r\n        if (!c.label) return;\r\n        const fo = svgEl('foreignObject', { x: GANTT.ORIGIN.x - 58, y: c.y + 2, width: 56, height: 20 });\r\n        fo.style.pointerEvents = 'none';\r\n        const div = document.createElementNS(XHTML_NS, 'div') as unknown as HTMLDivElement;\r\n        div.textContent = c.label;\r\n        div.setAttribute(\r\n          'style',\r\n          `font:700 11px/20px var(--rsm-editor-font);color:${pal.stroke};white-space:nowrap;overflow:hidden;text-overflow:ellipsis;`,\r\n        );\r\n        fo.appendChild(div as unknown as Node);\r\n        g.appendChild(fo);\r\n      });\r\n\r\n    if (meta?.title) {\r\n      const t = svgEl('text', {\r\n        x: GANTT.ORIGIN.x,\r\n        y: top - 34,\r\n        fill: ink,\r\n        style: 'font:700 16px var(--rsm-editor-font);pointer-events:none;',\r\n      });\r\n      t.textContent = meta.title;\r\n      g.appendChild(t);\r\n    }\r\n    this.seqBounds = {\r\n      x: GANTT.ORIGIN.x - 80,\r\n      y: top - 50,\r\n      w: right - GANTT.ORIGIN.x + 120,\r\n      h: bottom - top + 70,\r\n    };\r\n  }\r\n\r\n  /** xychart 外框:座標軸 + 刻度 + 長條 / 折線(資料點本身是節點)。 */\r\n  private renderXyFrame(scene: EditorScene): void {\r\n    const meta = scene.meta.type === 'xychart' ? scene.meta.xy : undefined;\r\n    if (!meta) return;\r\n    const ink = this.dark ? INK_DARK : INK;\r\n    const g = this.frameLayer;\r\n    const n = Math.max(1, meta.categories.length);\r\n    const pointOf = (si: number, i: number): SceneNode | undefined =>\r\n      scene.nodes.find((x) => x.data?.kind === 'xy' && x.data.series === si && x.data.index === i);\r\n\r\n    // 水平刻度線(5 等分)+ 值標。\r\n    for (let k = 0; k <= 4; k += 1) {\r\n      const y = XY_PLOT.y + (XY_PLOT.h * k) / 4;\r\n      g.appendChild(\r\n        svgEl('path', {\r\n          d: `M${XY_PLOT.x},${y} L${XY_PLOT.x + XY_PLOT.w},${y}`,\r\n          stroke: ink,\r\n          'stroke-opacity': k === 4 ? 0.4 : 0.12,\r\n          fill: 'none',\r\n        }),\r\n      );\r\n      const t = svgEl('text', {\r\n        x: XY_PLOT.x - 10,\r\n        y,\r\n        fill: ink,\r\n        'text-anchor': 'end',\r\n        'dominant-baseline': 'middle',\r\n        style: 'font:500 11px var(--rsm-editor-font);opacity:0.65;pointer-events:none;',\r\n      });\r\n      t.textContent = String(Math.round((meta.yMax - ((meta.yMax - meta.yMin) * k) / 4) * 100) / 100);\r\n      g.appendChild(t);\r\n    }\r\n    // 類別標籤。\r\n    meta.categories.forEach((c, i) => {\r\n      const t = svgEl('text', {\r\n        x: xyBandX(i, n),\r\n        y: XY_PLOT.y + XY_PLOT.h + 18,\r\n        fill: ink,\r\n        'text-anchor': 'middle',\r\n        style: 'font:500 11px var(--rsm-editor-font);opacity:0.75;pointer-events:none;',\r\n      });\r\n      t.textContent = c;\r\n      g.appendChild(t);\r\n    });\r\n\r\n    // 系列:bar 畫長條、line 畫折線(都直接吃節點目前的位置,所以拖曳當下就看得到結果)。\r\n    const barSeries = meta.series.filter((s) => s.kind === 'bar').length;\r\n    let barSlot = 0;\r\n    meta.series.forEach((series, si) => {\r\n      const pal = paletteByIndex(si);\r\n      if (series.kind === 'bar') {\r\n        const band = XY_PLOT.w / n;\r\n        const bw = Math.max(6, (band * 0.62) / Math.max(1, barSeries));\r\n        const offset = (barSlot - (barSeries - 1) / 2) * bw;\r\n        barSlot += 1;\r\n        series.values.forEach((_, i) => {\r\n          const p = pointOf(si, i);\r\n          if (!p) return;\r\n          const cy = p.y + p.h / 2;\r\n          const base = XY_PLOT.y + XY_PLOT.h;\r\n          g.appendChild(\r\n            svgEl('rect', {\r\n              x: xyBandX(i, n) + offset - bw / 2,\r\n              y: Math.min(cy, base),\r\n              width: bw,\r\n              height: Math.abs(base - cy),\r\n              rx: 2,\r\n              fill: pal.stroke,\r\n              'fill-opacity': 0.75,\r\n            }),\r\n          );\r\n        });\r\n        return;\r\n      }\r\n      const pts = series.values\r\n        .map((_, i) => pointOf(si, i))\r\n        .filter((p): p is SceneNode => Boolean(p))\r\n        .map((p) => `${p.x + p.w / 2},${p.y + p.h / 2}`);\r\n      if (pts.length > 1) {\r\n        g.appendChild(\r\n          svgEl('path', {\r\n            d: `M${pts.join(' L')}`,\r\n            stroke: pal.stroke,\r\n            'stroke-width': 2.4,\r\n            fill: 'none',\r\n            'stroke-linejoin': 'round',\r\n          }),\r\n        );\r\n      }\r\n    });\r\n\r\n    if (meta.title) {\r\n      const t = svgEl('text', {\r\n        x: XY_PLOT.x + XY_PLOT.w / 2,\r\n        y: XY_PLOT.y - 26,\r\n        fill: ink,\r\n        'text-anchor': 'middle',\r\n        style: 'font:700 16px var(--rsm-editor-font);pointer-events:none;',\r\n      });\r\n      t.textContent = meta.title;\r\n      g.appendChild(t);\r\n    }\r\n    // 兩軸的名稱原本解析進來就擱著沒畫 —— 少了它,「80」是萬元還是件數只能用猜的。\r\n    if (meta.xTitle) {\r\n      const t = svgEl('text', {\r\n        x: XY_PLOT.x + XY_PLOT.w / 2,\r\n        y: XY_PLOT.y + XY_PLOT.h + 46,\r\n        fill: ink,\r\n        'text-anchor': 'middle',\r\n        style: 'font:600 12px var(--rsm-editor-font);opacity:0.72;pointer-events:none;',\r\n      });\r\n      t.textContent = meta.xTitle;\r\n      g.appendChild(t);\r\n    }\r\n    if (meta.yTitle) {\r\n      const cy = XY_PLOT.y + XY_PLOT.h / 2;\r\n      g.appendChild(verticalAxisText(meta.yTitle, XY_PLOT.x - 54, cy, ink, '600 12px', 'middle'));\r\n    }\r\n    this.seqBounds = {\r\n      x: XY_PLOT.x - 80,\r\n      y: XY_PLOT.y - 50,\r\n      w: XY_PLOT.w + 120,\r\n      h: XY_PLOT.h + 116,\r\n    };\r\n  }\r\n\r\n  /** xychart 資料點:小圓點 + 數值(值即位置,拖著就是在改它)。 */\r\n  private fillXyPoint(g: SVGGElement, node: SceneNode): void {\r\n    const meta = this.scene?.meta.type === 'xychart' ? this.scene.meta.xy : undefined;\r\n    const si = node.data?.kind === 'xy' ? node.data.series : 0;\r\n    const pal = paletteByIndex(si);\r\n    g.appendChild(\r\n      svgEl('circle', {\r\n        cx: node.w / 2,\r\n        cy: node.h / 2,\r\n        r: 5.5,\r\n        fill: pal.stroke,\r\n        stroke: this.dark ? '#0b1220' : '#ffffff',\r\n        'stroke-width': 2,\r\n      }),\r\n    );\r\n    if (!meta) return;\r\n    const value = xyYToValue(node.y + node.h / 2, meta.yMin, meta.yMax);\r\n    const fo = svgEl('foreignObject', { x: -30 + node.w / 2, y: -16, width: 60, height: 16 });\r\n    fo.style.pointerEvents = 'none';\r\n    fo.style.overflow = 'visible';\r\n    const div = document.createElementNS(XHTML_NS, 'div') as unknown as HTMLDivElement;\r\n    div.textContent = String(value);\r\n    div.setAttribute(\r\n      'style',\r\n      `text-align:center;font:600 11px/16px var(--rsm-editor-font);color:${this.dark ? INK_DARK : INK};white-space:nowrap;`,\r\n    );\r\n    fo.appendChild(div as unknown as Node);\r\n    g.appendChild(fo);\r\n  }\r\n\r\n  /** 圓餅圖外框:標題 + 各扇形(扇形本身畫在這裡,節點只是它的質心把手)。 */\r\n  private renderPieFrame(scene: EditorScene): void {\r\n    const meta = scene.meta.type === 'pie' ? scene.meta : undefined;\r\n    const ink = this.dark ? INK_DARK : INK;\r\n    const g = this.frameLayer;\r\n    // 順序由角度決定 —— 與序列化同一套判定,畫面才會等於存檔內容。\r\n    const ordered = [...scene.nodes].sort(\r\n      (a, b) => pieAngleOf(a.x + a.w / 2, a.y + a.h / 2) - pieAngleOf(b.x + b.w / 2, b.y + b.h / 2),\r\n    );\r\n    const values = ordered.map((n) => (n.data?.kind === 'pie' ? n.data.value : 0));\r\n    const total = values.reduce((s, v) => s + Math.max(0, v), 0);\r\n    const angles = pieSliceAngles(values);\r\n    const arc = (from: number, to: number): string => {\r\n      // 整圈用兩段半圓畫(單一 arc 起訖同點會退化成什麼都畫不出來)。\r\n      if (to - from >= Math.PI * 2 - 1e-6) {\r\n        return (\r\n          `M${PIE_GEO.cx},${PIE_GEO.cy - PIE_GEO.r} A${PIE_GEO.r},${PIE_GEO.r} 0 1 1 ${PIE_GEO.cx},${PIE_GEO.cy + PIE_GEO.r}` +\r\n          ` A${PIE_GEO.r},${PIE_GEO.r} 0 1 1 ${PIE_GEO.cx},${PIE_GEO.cy - PIE_GEO.r} Z`\r\n        );\r\n      }\r\n      const x1 = PIE_GEO.cx + Math.cos(from) * PIE_GEO.r;\r\n      const y1 = PIE_GEO.cy + Math.sin(from) * PIE_GEO.r;\r\n      const x2 = PIE_GEO.cx + Math.cos(to) * PIE_GEO.r;\r\n      const y2 = PIE_GEO.cy + Math.sin(to) * PIE_GEO.r;\r\n      const large = to - from > Math.PI ? 1 : 0;\r\n      return `M${PIE_GEO.cx},${PIE_GEO.cy} L${x1},${y1} A${PIE_GEO.r},${PIE_GEO.r} 0 ${large} 1 ${x2},${y2} Z`;\r\n    };\r\n    ordered.forEach((n, i) => {\r\n      const pal = paletteByIndex(i);\r\n      g.appendChild(\r\n        svgEl('path', {\r\n          d: arc(angles[i].from, angles[i].to),\r\n          fill: pal.fill,\r\n          stroke: this.dark ? '#23232e' : '#ffffff',\r\n          'stroke-width': 2,\r\n        }),\r\n      );\r\n    });\r\n    if (meta?.title) {\r\n      const t = svgEl('text', {\r\n        x: PIE_GEO.cx,\r\n        y: PIE_GEO.cy - PIE_GEO.r - 28,\r\n        fill: ink,\r\n        'text-anchor': 'middle',\r\n        style: 'font:700 17px var(--rsm-editor-font);pointer-events:none;',\r\n      });\r\n      t.textContent = meta.title;\r\n      g.appendChild(t);\r\n    }\r\n    // 百分比曾經另外標在扇形上,結果和把手上的「名稱 + 數值」幾乎疊在同一點。\r\n    // 現在一律併進把手那一塊(見 fillPieSlice),一個扇形只有一處文字。\r\n    void total;\r\n    this.seqBounds = {\r\n      x: PIE_GEO.cx - PIE_GEO.r - 60,\r\n      y: PIE_GEO.cy - PIE_GEO.r - 60,\r\n      w: PIE_GEO.r * 2 + 120,\r\n      h: PIE_GEO.r * 2 + 110,\r\n    };\r\n  }\r\n\r\n  /** 圓餅扇形的把手:名稱 + 數值 + 佔比,收在一枚白色小牌上(扇形本身畫在外框層)。 */\r\n  private fillPieSlice(g: SVGGElement, node: SceneNode): void {\r\n    const d = node.data?.kind === 'pie' ? node.data : undefined;\r\n    const value = d?.value ?? 0;\r\n    const total = (this.scene?.nodes ?? []).reduce(\r\n      (s, n) => s + (n.data?.kind === 'pie' ? Math.max(0, n.data.value) : 0),\r\n      0,\r\n    );\r\n    const share = total > 0 ? Math.round((Math.max(0, value) / total) * 1000) / 10 : null;\r\n    const fo = svgEl('foreignObject', { x: -20, y: 0, width: node.w + 40, height: node.h });\r\n    fo.style.pointerEvents = 'none';\r\n    fo.style.overflow = 'visible';\r\n    const wrap = document.createElementNS(XHTML_NS, 'div') as unknown as HTMLDivElement;\r\n    wrap.setAttribute('style', 'display:flex;align-items:center;justify-content:center;height:100%;');\r\n    const root = document.createElementNS(XHTML_NS, 'div') as unknown as HTMLDivElement;\r\n    root.setAttribute(\r\n      'style',\r\n      // 牌子貼著文字大小(而不是撐滿節點框),小扇形上才不會蓋掉半塊派。\r\n      'display:inline-flex;flex-direction:column;align-items:center;gap:1px;' +\r\n        // 牌子壓在彩色扇形上 → 底色與墨色都固定,不跟著主題翻面。\r\n        `text-align:center;color:${INK};background:rgba(255,255,255,0.88);border-radius:8px;` +\r\n        'padding:4px 10px;box-shadow:0 1px 3px rgba(15,23,42,0.18);',\r\n    );\r\n    const name = document.createElementNS(XHTML_NS, 'div') as unknown as HTMLDivElement;\r\n    name.textContent = node.label;\r\n    name.setAttribute('style', 'font:700 12px/1.3 var(--rsm-editor-font);word-break:break-word;');\r\n    root.appendChild(name as unknown as Node);\r\n    const val = document.createElementNS(XHTML_NS, 'div') as unknown as HTMLDivElement;\r\n    val.textContent = share === null ? String(value) : `${value} · ${share}%`;\r\n    val.setAttribute('style', 'font:11px/1.2 var(--rsm-editor-font);opacity:0.7;white-space:nowrap;');\r\n    root.appendChild(val as unknown as Node);\r\n    wrap.appendChild(root as unknown as Node);\r\n    fo.appendChild(wrap as unknown as Node);\r\n    g.appendChild(fo);\r\n  }\r\n\r\n  /** 封包位元帶:位元刻度尺 + 標題(欄位本身是節點)。 */\r\n  private renderPacketFrame(scene: EditorScene): void {\r\n    const meta = scene.meta.type === 'packet' ? scene.meta : undefined;\r\n    const ink = this.dark ? INK_DARK : INK;\r\n    const g = this.frameLayer;\r\n    if (scene.nodes.length === 0) return;\r\n    const totalBits = Math.max(\r\n      ...scene.nodes.map((n) => Math.round((n.x - PACKET_BIT.x0 + n.w) / PACKET_BIT.w)),\r\n    );\r\n    // 每 8 bit 一個刻度(位元組界線),讀起來才有依據。\r\n    for (let b = 0; b <= totalBits; b += 8) {\r\n      const x = PACKET_BIT.x0 + b * PACKET_BIT.w;\r\n      g.appendChild(\r\n        svgEl('path', {\r\n          d: `M${x},${PACKET_BIT.y0 - 18} L${x},${PACKET_BIT.y0 + PACKET_BIT.h + 8}`,\r\n          stroke: ink,\r\n          'stroke-opacity': 0.25,\r\n          fill: 'none',\r\n        }),\r\n      );\r\n      const t = svgEl('text', {\r\n        x,\r\n        y: PACKET_BIT.y0 - 24,\r\n        fill: ink,\r\n        'text-anchor': 'middle',\r\n        style: 'font:500 11px var(--rsm-editor-font);opacity:0.7;pointer-events:none;',\r\n      });\r\n      t.textContent = String(b);\r\n      g.appendChild(t);\r\n    }\r\n    if (meta?.title) {\r\n      const t = svgEl('text', {\r\n        x: PACKET_BIT.x0,\r\n        y: PACKET_BIT.y0 - 48,\r\n        fill: ink,\r\n        style: 'font:700 16px var(--rsm-editor-font);pointer-events:none;',\r\n      });\r\n      t.textContent = meta.title;\r\n      g.appendChild(t);\r\n    }\r\n    this.seqBounds = {\r\n      x: PACKET_BIT.x0 - 40,\r\n      y: PACKET_BIT.y0 - 70,\r\n      w: totalBits * PACKET_BIT.w + 80,\r\n      h: PACKET_BIT.h + 110,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * 積木圖的網格底線。\r\n   *\r\n   * 積木圖唯一要講的事就是「這塊在哪一格」,可是畫面上原本什麼參考線都沒有 —— 拖動時\r\n   * 完全看不出自己會落到哪一格。這裡把 `columns N` 的格線畫成極淡的底圖當作對位參考。\r\n   */\r\n  private renderBlockFrame(scene: EditorScene): void {\r\n    const cols = scene.meta.type === 'block' ? Math.max(1, scene.meta.columns) : 1;\r\n    if (scene.nodes.length === 0) return;\r\n    const ink = this.dark ? INK_DARK : INK;\r\n    const g = this.frameLayer;\r\n    const stepX = BLOCK_CELL.w + BLOCK_CELL.gapX;\r\n    const stepY = BLOCK_CELL.h + BLOCK_CELL.gapY;\r\n    const rows = Math.max(\r\n      1,\r\n      Math.ceil((Math.max(...scene.nodes.map((n) => n.y + n.h)) - BLOCK_CELL.y0 + 1) / stepY),\r\n    );\r\n    for (let r = 0; r < rows; r += 1) {\r\n      for (let c = 0; c < cols; c += 1) {\r\n        g.appendChild(\r\n          svgEl('rect', {\r\n            x: BLOCK_CELL.x0 + c * stepX,\r\n            y: BLOCK_CELL.y0 + r * stepY,\r\n            width: BLOCK_CELL.w,\r\n            height: BLOCK_CELL.h,\r\n            rx: 8,\r\n            fill: ink,\r\n            'fill-opacity': 0.035,\r\n            stroke: ink,\r\n            'stroke-opacity': 0.12,\r\n            'stroke-dasharray': '4 4',\r\n          }),\r\n        );\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * gitGraph 的骨架:每條分支一條水平軸線,加上「從順序推導出來的」父子連線。\r\n   * 連線畫在背景層而非 edges 層 —— 它們是衍生值(拖動就會重算),不是使用者畫的邊。\r\n   */\r\n  private renderGitgraphFrame(scene: EditorScene): void {\r\n    const g = this.frameLayer;\r\n    const laneY = new Map<string, number>();\r\n    const laneColor = new Map<string, string>();\r\n    const lanes = [...scene.containers].sort((a, b) => (a.sourceIndex ?? 0) - (b.sourceIndex ?? 0));\r\n    lanes.forEach((c, i) => {\r\n      laneY.set(c.id, c.y + c.h / 2);\r\n      laneColor.set(c.id, clusterByIndex(i).stroke);\r\n    });\r\n    const right = Math.max(GIT.x0, ...scene.nodes.map((n) => n.x + n.w)) + GIT.dx / 2;\r\n    for (const c of lanes) {\r\n      const y = laneY.get(c.id) as number;\r\n      g.appendChild(\r\n        svgEl('path', {\r\n          d: `M${c.x + 12},${y} L${right},${y}`,\r\n          stroke: laneColor.get(c.id) as string,\r\n          'stroke-opacity': 0.35,\r\n          'stroke-width': 2,\r\n          fill: 'none',\r\n        }),\r\n      );\r\n    }\r\n    const center = (id: string): { x: number; y: number } | undefined => {\r\n      const n = scene.nodes.find((v) => v.id === id);\r\n      return n ? { x: n.x + n.w / 2, y: n.y + n.h / 2 } : undefined;\r\n    };\r\n    // 讓「符合畫面」把泳道整條算進去 —— 只框節點的話,左端的分支名稱會被切在畫面外。\r\n    if (lanes.length) {\r\n      const x = Math.min(...lanes.map((c) => c.x));\r\n      const y = Math.min(...lanes.map((c) => c.y));\r\n      this.seqBounds = {\r\n        x: x - 12,\r\n        y: y - 12,\r\n        w: Math.max(...lanes.map((c) => c.x + c.w), right) - x + 24,\r\n        h: Math.max(...lanes.map((c) => c.y + c.h)) - y + 24,\r\n      };\r\n    }\r\n    for (const link of gitgraphLinks(scene)) {\r\n      const a = center(link.from);\r\n      const b = center(link.to);\r\n      if (!a || !b) continue;\r\n      // 同一條泳道就是直線;跨泳道(分支 / 合併)走 S 形貝茲,和 mermaid 畫的一樣。\r\n      const d =\r\n        Math.abs(a.y - b.y) < 1\r\n          ? `M${a.x},${a.y} L${b.x},${b.y}`\r\n          : `M${a.x},${a.y} C${(a.x + b.x) / 2},${a.y} ${(a.x + b.x) / 2},${b.y} ${b.x},${b.y}`;\r\n      g.appendChild(\r\n        svgEl('path', {\r\n          d,\r\n          stroke: this.dark ? INK_DARK : INK,\r\n          'stroke-opacity': link.merge ? 0.4 : 0.55,\r\n          'stroke-width': 2,\r\n          'stroke-dasharray': link.merge ? '5 3' : '',\r\n          fill: 'none',\r\n        }),\r\n      );\r\n    }\r\n  }\r\n\r\n  /** git 提交:實心圓點 + 下方 id;合併是雙環,tag 掛成小旗標。 */\r\n  private fillGitCommit(g: SVGGElement, node: SceneNode): void {\r\n    const d = node.data?.kind === 'gitgraph' ? node.data : undefined;\r\n    const ink = this.dark ? INK_DARK : INK;\r\n    // 顏色跟著「它現在落在哪一條泳道」走,而不是 parentId —— 拖到別條分支時顏色要立刻跟上,\r\n    // 而 parentId 要等「整理排版」才會回填。\r\n    const lane = gitLaneIndexAt(node.y, this.scene?.containers.length ?? 1);\r\n    const pal = clusterByIndex(lane);\r\n    const cx = node.w / 2;\r\n    const cy = node.h / 2;\r\n    const merge = d?.commitType === 3;\r\n    const highlight = d?.commitType === 2;\r\n    const reverse = d?.commitType === 1;\r\n    g.appendChild(\r\n      svgEl('circle', {\r\n        cx,\r\n        cy,\r\n        r: merge ? 11 : 9,\r\n        fill: highlight ? pal.stroke : this.dark ? '#1e222b' : '#ffffff',\r\n        stroke: pal.stroke,\r\n        'stroke-width': highlight ? 2.4 : 2,\r\n      }),\r\n    );\r\n    // 合併=雙環(和 mermaid 的 merge 記號一致);REVERSE=打叉。\r\n    if (merge) {\r\n      g.appendChild(\r\n        svgEl('circle', { cx, cy, r: 5, fill: pal.stroke, stroke: 'none' }),\r\n      );\r\n    } else if (reverse) {\r\n      g.appendChild(\r\n        svgEl('path', {\r\n          d: `M${cx - 4},${cy - 4} L${cx + 4},${cy + 4} M${cx + 4},${cy - 4} L${cx - 4},${cy + 4}`,\r\n          stroke: pal.stroke,\r\n          'stroke-width': 2,\r\n          fill: 'none',\r\n        }),\r\n      );\r\n    }\r\n    // 標籤畫成一枚小色片(而不是 🏷 emoji —— 系統 UI 字型不一定畫得出來)。\r\n    const tag = d?.tags?.[0];\r\n    if (tag) {\r\n      const w = Math.max(24, textWidth(tag, 10.5) + 12);\r\n      g.appendChild(\r\n        svgEl('rect', {\r\n          x: cx - w / 2,\r\n          y: cy - 34,\r\n          width: w,\r\n          height: 17,\r\n          rx: 4,\r\n          fill: pal.stroke,\r\n          stroke: 'none',\r\n        }),\r\n      );\r\n      const t = svgEl('text', {\r\n        x: cx,\r\n        y: cy - 22,\r\n        fill: '#ffffff',\r\n        'text-anchor': 'middle',\r\n        style: 'font:600 10.5px var(--rsm-editor-font);pointer-events:none;',\r\n      });\r\n      t.textContent = tag;\r\n      g.appendChild(t);\r\n    }\r\n    if (node.label) {\r\n      const t = svgEl('text', {\r\n        x: cx,\r\n        y: node.h + 13,\r\n        fill: ink,\r\n        'text-anchor': 'middle',\r\n        style: 'font:11.5px var(--rsm-editor-font);opacity:0.85;pointer-events:none;',\r\n      });\r\n      t.textContent = node.label;\r\n      g.appendChild(t);\r\n    }\r\n  }\r\n\r\n  /** 封包欄位:實心格 + 欄名 + 位元範圍。 */\r\n  private fillPacketField(g: SVGGElement, node: SceneNode): void {\r\n    const idx = this.scene ? this.scene.nodes.findIndex((n) => n.id === node.id) : 0;\r\n    const pal = paletteByIndex(idx >= 0 ? idx : 0);\r\n    g.appendChild(\r\n      svgEl('rect', {\r\n        x: 0,\r\n        y: 0,\r\n        width: node.w,\r\n        height: node.h,\r\n        rx: 3,\r\n        fill: pal.fill,\r\n        stroke: pal.stroke,\r\n        'stroke-width': 1.4,\r\n      }),\r\n    );\r\n    const startBit = Math.round((node.x - PACKET_BIT.x0) / PACKET_BIT.w);\r\n    const bits = Math.max(1, Math.round(node.w / PACKET_BIT.w));\r\n    const fo = svgEl('foreignObject', { x: 2, y: 0, width: Math.max(0, node.w - 4), height: node.h });\r\n    fo.style.pointerEvents = 'none';\r\n    const root = document.createElementNS(XHTML_NS, 'div') as unknown as HTMLDivElement;\r\n    root.setAttribute(\r\n      'style',\r\n      'display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;height:100%;' +\r\n        // 文字壓在淺色欄位底上 → 墨色固定深色。\r\n        `overflow:hidden;text-align:center;color:${INK};`,\r\n    );\r\n    const name = document.createElementNS(XHTML_NS, 'div') as unknown as HTMLDivElement;\r\n    name.textContent = node.label;\r\n    name.setAttribute('style', 'font:600 12px/1.25 var(--rsm-editor-font);word-break:break-word;');\r\n    root.appendChild(name as unknown as Node);\r\n    const range = document.createElementNS(XHTML_NS, 'div') as unknown as HTMLDivElement;\r\n    range.textContent = bits === 1 ? `${startBit}` : `${startBit}–${startBit + bits - 1}`;\r\n    range.setAttribute('style', 'font:10.5px/1.2 var(--rsm-editor-font);opacity:0.7;');\r\n    root.appendChild(range as unknown as Node);\r\n    fo.appendChild(root as unknown as Node);\r\n    g.appendChild(fo);\r\n  }\r\n\r\n  /** architecture 服務:圖示方塊 + 下方名稱;junction 只畫一個小點。 */\r\n  private fillArchNode(g: SVGGElement, node: SceneNode): void {\r\n    const d = node.data?.kind === 'architecture' ? node.data : undefined;\r\n    const idx = this.scene ? this.scene.nodes.findIndex((n) => n.id === node.id) : 0;\r\n    const pal = paletteByIndex(idx >= 0 ? idx : 0);\r\n    const ink = this.dark ? INK_DARK : INK;\r\n    if (d?.junction) {\r\n      g.appendChild(\r\n        svgEl('circle', { cx: node.w / 2, cy: node.h / 2, r: 7, fill: ink, stroke: 'none' }),\r\n      );\r\n      return;\r\n    }\r\n    // 方塊就是整個節點 —— 先前只在節點中央畫一個 56px 的小框,連線卻接在(看不見的)節點外框上,\r\n    // 於是每條線都停在方塊外面一段距離,看起來根本沒接上。\r\n    g.appendChild(\r\n      svgEl('rect', {\r\n        x: 0,\r\n        y: 0,\r\n        width: node.w,\r\n        height: node.h,\r\n        rx: 12,\r\n        fill: pal.fill,\r\n        stroke: pal.stroke,\r\n        'stroke-width': 1.6,\r\n      }),\r\n    );\r\n    const iconG = archIconGroup(d?.icon, pal.stroke, node.w / 2, node.h / 2, Math.min(node.w, node.h) * 0.62);\r\n    if (iconG) g.appendChild(iconG);\r\n    else {\r\n      // 不認得的圖示名:退回首字母,至少看得出彼此不同。\r\n      const t = svgEl('text', {\r\n        x: node.w / 2,\r\n        y: node.h / 2,\r\n        fill: pal.stroke,\r\n        'text-anchor': 'middle',\r\n        'dominant-baseline': 'central',\r\n        style: 'font:700 22px var(--rsm-editor-font);pointer-events:none;',\r\n      });\r\n      t.textContent = (d?.icon ?? node.label ?? '?').trim().charAt(0).toUpperCase();\r\n      g.appendChild(t);\r\n    }\r\n\r\n    // 名稱掛在方塊下方(節點外),節點框才等於畫出來的方塊。\r\n    const fo = svgEl('foreignObject', { x: -30, y: node.h + 4, width: node.w + 60, height: 40 });\r\n    fo.style.pointerEvents = 'none';\r\n    fo.style.overflow = 'visible';\r\n    const div = document.createElementNS(XHTML_NS, 'div') as unknown as HTMLDivElement;\r\n    div.textContent = node.label;\r\n    div.setAttribute(\r\n      'style',\r\n      `text-align:center;font:600 12px/1.3 var(--rsm-editor-font);color:${ink};word-break:break-word;`,\r\n    );\r\n    fo.appendChild(div as unknown as Node);\r\n    g.appendChild(fo);\r\n  }\r\n\r\n  /** 甘特長條:實心圓角條 + 條上任務名;milestone 畫成菱形。 */\r\n  private fillGanttBar(g: SVGGElement, node: SceneNode): void {\r\n    const d = node.data?.kind === 'gantt' ? node.data : undefined;\r\n    const idx = this.scene ? this.scene.nodes.findIndex((n) => n.id === node.id) : 0;\r\n    const pal = paletteByIndex(idx >= 0 ? idx : 0);\r\n    const crit = d?.flags.includes('crit');\r\n    const done = d?.flags.includes('done');\r\n    if (d?.flags.includes('milestone')) {\r\n      const c = node.h / 2;\r\n      g.appendChild(\r\n        svgEl('path', {\r\n          d: `M${node.w / 2},0 L${node.w / 2 + c},${c} L${node.w / 2},${node.h} L${node.w / 2 - c},${c} Z`,\r\n          fill: crit ? '#EF4444' : pal.stroke,\r\n          stroke: 'none',\r\n        }),\r\n      );\r\n    } else {\r\n      g.appendChild(\r\n        svgEl('rect', {\r\n          x: 0,\r\n          y: 0,\r\n          width: node.w,\r\n          height: node.h,\r\n          rx: 4,\r\n          fill: done ? pal.fill : pal.stroke,\r\n          'fill-opacity': done ? 1 : 0.85,\r\n          stroke: crit ? '#EF4444' : pal.stroke,\r\n          'stroke-width': crit ? 2 : 1,\r\n        }),\r\n      );\r\n    }\r\n    if (!node.label) return;\r\n    // 名稱優先寫在長條**裡面**(甘特圖本來就這樣讀);放不下才靠到右側,\r\n    // 否則長條一多,右邊那排字就會壓到隔壁的條。里程碑是個小菱形,一律外掛。\r\n    const milestone = d?.flags.includes('milestone') ?? false;\r\n    const inside = !milestone && textWidth(node.label, 12) + 18 <= node.w;\r\n    // 寫在長條**裡面**的字是壓在節點配色上,而節點配色是固定的淺色盤 —— 不能跟著主題翻面,\r\n    // 否則深色模式下 done 的淺底長條會變成淺字寫在淺底上(整條字直接消失)。\r\n    // done = 淺色填滿 → 深墨;其餘 = 飽和色填滿 → 反白。寫在外面的才用主題墨色(那是畫布底)。\r\n    const insideInk = done ? INK : '#ffffff';\r\n    // 里程碑是菱形,右頂點在 w/2 + h/2 —— 從 w 開始寫字會貼到菱形上。\r\n    const outsideX = milestone ? node.w / 2 + node.h / 2 + 8 : node.w + 6;\r\n    const fo = svgEl('foreignObject', {\r\n      x: inside ? 9 : outsideX,\r\n      y: 0,\r\n      width: inside ? Math.max(0, node.w - 18) : 220,\r\n      height: node.h,\r\n    });\r\n    fo.style.pointerEvents = 'none';\r\n    fo.style.overflow = 'visible';\r\n    const div = document.createElementNS(XHTML_NS, 'div') as unknown as HTMLDivElement;\r\n    div.textContent = node.label;\r\n    div.setAttribute(\r\n      'style',\r\n      `display:flex;align-items:center;height:100%;font:${inside ? '600 ' : ''}12px/1.3 var(--rsm-editor-font);` +\r\n        `color:${inside ? insideInk : this.dark ? INK_DARK : INK};white-space:nowrap;`,\r\n    );\r\n    fo.appendChild(div as unknown as Node);\r\n    g.appendChild(fo);\r\n  }\r\n\r\n  /** 象限圖資料點:小圓 + 下方標籤(標籤不吃指標事件,才不會擋住拖曳)。 */\r\n  private fillQuadrantPoint(g: SVGGElement, node: SceneNode): void {\r\n    const d = node.data?.kind === 'quadrant' ? node.data : undefined;\r\n    const idx = this.scene ? this.scene.nodes.findIndex((n) => n.id === node.id) : 0;\r\n    const pal = paletteByIndex(idx >= 0 ? idx : 0);\r\n    const r = Math.max(4, Math.min(14, d?.radius ?? 7));\r\n    g.appendChild(\r\n      svgEl('circle', {\r\n        cx: node.w / 2,\r\n        cy: node.h / 2,\r\n        r,\r\n        fill: d?.color ?? pal.stroke,\r\n        stroke: d?.strokeColor ?? (this.dark ? '#0b1220' : '#ffffff'),\r\n        'stroke-width': 2,\r\n      }),\r\n    );\r\n    if (!node.label) return;\r\n    const fo = svgEl('foreignObject', { x: -60 + node.w / 2, y: node.h / 2 + r, width: 120, height: 22 });\r\n    fo.style.pointerEvents = 'none';\r\n    fo.style.overflow = 'visible';\r\n    const div = document.createElementNS(XHTML_NS, 'div') as unknown as HTMLDivElement;\r\n    div.textContent = node.label;\r\n    div.setAttribute(\r\n      'style',\r\n      `text-align:center;font:600 12px/1.5 var(--rsm-editor-font);color:${this.dark ? INK_DARK : INK};` +\r\n        'white-space:nowrap;overflow:visible;',\r\n    );\r\n    fo.appendChild(div as unknown as Node);\r\n    g.appendChild(fo);\r\n  }\r\n\r\n  /**\r\n   * 卡片式節點:白底卡 + 標題 + 一列附註。看板與旅程圖共用同一張卡\r\n   * (看板附註是負責人 / 票號 / 優先序;旅程圖是心情臉譜 + 參與角色)。\r\n   */\r\n  private fillKanbanCard(g: SVGGElement, node: SceneNode): void {\r\n    const d = node.data?.kind === 'kanban' ? node.data : undefined;\r\n    const j = node.data?.kind === 'journey' ? node.data : undefined;\r\n    const ink = this.dark ? INK_DARK : INK;\r\n    const idx = this.scene ? this.scene.nodes.findIndex((n) => n.id === node.id) : 0;\r\n    const pal = paletteByIndex(idx >= 0 ? idx : 0);\r\n    const card = svgEl('rect', {\r\n      x: 0,\r\n      y: 0,\r\n      width: node.w,\r\n      height: node.h,\r\n      rx: 6,\r\n      fill: this.dark ? '#1e222b' : '#ffffff',\r\n      stroke: pal.stroke,\r\n      'stroke-width': 1.3,\r\n    });\r\n    if (this.look === 'clean') card.style.filter = `url(#${NODE_SHADOW_ID})`;\r\n    card.style.pointerEvents = 'none';\r\n    g.appendChild(card);\r\n    // 左緣色條:一眼看出卡片彼此不同,也讓「拖到另一欄」有視覺連續性。\r\n    const bar = svgEl('rect', { x: 0, y: 0, width: 4, height: node.h, rx: 2, fill: pal.stroke });\r\n    bar.style.pointerEvents = 'none';\r\n    g.appendChild(bar);\r\n\r\n    const meta: string[] = [];\r\n    if (d?.assigned) meta.push(`@${d.assigned}`);\r\n    if (d?.ticket) meta.push(d.ticket);\r\n    if (d?.priority) meta.push(d.priority);\r\n    // 旅程圖:1..5 的心情分數用臉譜呈現(和 mermaid 的旅程圖一樣看得出情緒)。\r\n    if (j) {\r\n      meta.push(`${['😞', '🙁', '😐', '🙂', '😀'][Math.max(1, Math.min(5, j.score)) - 1]} ${j.score}`);\r\n      if (j.actors.length) meta.push(j.actors.join(', '));\r\n    }\r\n    const fo = svgEl('foreignObject', { x: 8, y: 0, width: Math.max(0, node.w - 14), height: node.h });\r\n    fo.style.pointerEvents = 'none';\r\n    const root = document.createElementNS(XHTML_NS, 'div') as unknown as HTMLDivElement;\r\n    root.setAttribute(\r\n      'style',\r\n      'display:flex;flex-direction:column;justify-content:center;gap:3px;height:100%;padding:6px 2px;' +\r\n        `box-sizing:border-box;overflow:hidden;color:${ink};`,\r\n    );\r\n    const title = document.createElementNS(XHTML_NS, 'div') as unknown as HTMLDivElement;\r\n    title.textContent = node.label;\r\n    title.setAttribute('style', 'font:600 12.5px/1.4 var(--rsm-editor-font);word-break:break-word;');\r\n    root.appendChild(title as unknown as Node);\r\n    if (meta.length) {\r\n      const m = document.createElementNS(XHTML_NS, 'div') as unknown as HTMLDivElement;\r\n      m.textContent = meta.join(' · ');\r\n      m.setAttribute('style', 'font:10.5px/1.3 var(--rsm-editor-font);opacity:0.65;white-space:nowrap;');\r\n      root.appendChild(m as unknown as Node);\r\n    }\r\n    fo.appendChild(root as unknown as Node);\r\n    g.appendChild(fo);\r\n  }\r\n\r\n  /** C4 元素框:«型別» + 名稱 +(技術)+ 說明;person 型別在框上方多一顆頭像圓。 */\r\n  private fillC4Box(g: SVGGElement, node: SceneNode): void {\r\n    const d = node.data?.kind === 'c4' ? node.data : undefined;\r\n    if (!d) return;\r\n    // 文字畫在淺色節點底上 → 墨色固定用深色。跟著主題走的話,深色模式會變成淺字寫在淺底上。\r\n    const ink = INK;\r\n    const parts = c4Lines(node.label, d);\r\n    if (d.c4Type.includes('person')) {\r\n      const idx = this.scene ? this.scene.nodes.findIndex((n) => n.id === node.id) : 0;\r\n      const pal = paletteByIndex(idx >= 0 ? idx : 0);\r\n      // 頭 + 肩:先前只畫一個和底色同色的空心圓,看起來像框裡飄了個圈,而不是「這是個人」。\r\n      const cx = node.w / 2;\r\n      g.appendChild(svgEl('circle', { cx, cy: 11, r: 6, fill: pal.stroke, stroke: 'none' }));\r\n      g.appendChild(\r\n        svgEl('path', {\r\n          d: `M${cx - 11},${23} a11,9 0 0 1 22,0 Z`,\r\n          fill: pal.stroke,\r\n          stroke: 'none',\r\n        }),\r\n      );\r\n    }\r\n    const top = d.c4Type.includes('person') ? 20 : 0;\r\n    const fo = svgEl('foreignObject', { x: 0, y: top, width: node.w, height: Math.max(0, node.h - top) });\r\n    fo.style.pointerEvents = 'none';\r\n    const root = document.createElementNS(XHTML_NS, 'div') as unknown as HTMLDivElement;\r\n    root.setAttribute(\r\n      'style',\r\n      'display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;' +\r\n        `width:100%;height:100%;box-sizing:border-box;padding:4px 10px;overflow:hidden;text-align:center;color:${ink};`,\r\n    );\r\n    const line = (text: string | undefined, style: string): void => {\r\n      if (!text) return;\r\n      const el = document.createElementNS(XHTML_NS, 'div') as unknown as HTMLDivElement;\r\n      el.textContent = text;\r\n      el.setAttribute('style', style);\r\n      root.appendChild(el as unknown as Node);\r\n    };\r\n    line(parts.kind, `font:10.5px/1.35 var(--rsm-editor-font);opacity:0.65;white-space:nowrap;`);\r\n    line(parts.title, `font:700 13px/1.35 var(--rsm-editor-font);word-break:break-word;`);\r\n    line(parts.techn, `font:10.5px/1.35 var(--rsm-editor-font);opacity:0.7;white-space:nowrap;`);\r\n    line(parts.descr, `font:10.5px/1.4 var(--rsm-editor-font);opacity:0.85;word-break:break-word;`);\r\n    fo.appendChild(root as unknown as Node);\r\n    g.appendChild(fo);\r\n  }\r\n\r\n  /** 需求框 / 元素框:«型別» + 名稱 + 欄位列(對齊 mermaid requirementDiagram 的外觀)。 */\r\n  private fillRequirementBox(g: SVGGElement, node: SceneNode): void {\r\n    const req = node.data?.kind === 'requirement' ? node.data.req : undefined;\r\n    if (!req) return;\r\n    // 文字畫在淺色節點底上 → 墨色固定用深色。跟著主題走的話,深色模式會變成淺字寫在淺底上。\r\n    const ink = INK;\r\n    const fo = svgEl('foreignObject', { x: 0, y: 0, width: node.w, height: node.h });\r\n    fo.style.pointerEvents = 'none';\r\n    const root = document.createElementNS(XHTML_NS, 'div') as unknown as HTMLDivElement;\r\n    root.setAttribute(\r\n      'style',\r\n      'display:flex;flex-direction:column;width:100%;height:100%;box-sizing:border-box;' +\r\n        `overflow:hidden;font:11px/1.45 var(--rsm-editor-font);color:${ink};`,\r\n    );\r\n    const head = document.createElementNS(XHTML_NS, 'div') as unknown as HTMLDivElement;\r\n    head.textContent = requirementKind(req);\r\n    head.setAttribute('style', 'text-align:center;opacity:0.7;font-size:10px;padding-top:3px;white-space:nowrap;');\r\n    root.appendChild(head as unknown as Node);\r\n    const title = document.createElementNS(XHTML_NS, 'div') as unknown as HTMLDivElement;\r\n    title.textContent = node.label;\r\n    const rows = requirementRows(req);\r\n    title.setAttribute(\r\n      'style',\r\n      `font:700 12px/1.4 var(--rsm-editor-font);text-align:center;padding:1px 8px 5px;` +\r\n        `${rows.length ? `border-bottom:1px solid ${ink};` : ''}white-space:nowrap;overflow:hidden;text-overflow:ellipsis;`,\r\n    );\r\n    root.appendChild(title as unknown as Node);\r\n    if (rows.length) {\r\n      const body = document.createElementNS(XHTML_NS, 'div') as unknown as HTMLDivElement;\r\n      body.setAttribute('style', 'flex:1;padding:3px 8px;overflow:hidden;');\r\n      for (const r of rows) {\r\n        const row = document.createElementNS(XHTML_NS, 'div') as unknown as HTMLDivElement;\r\n        row.textContent = r;\r\n        row.setAttribute('style', 'white-space:nowrap;overflow:hidden;text-overflow:ellipsis;');\r\n        body.appendChild(row as unknown as Node);\r\n      }\r\n      root.appendChild(body as unknown as Node);\r\n    }\r\n    fo.appendChild(root as unknown as Node);\r\n    g.appendChild(fo);\r\n  }\r\n\r\n  /** rough Drawable → <path>:填色與描邊分開兩種 path,描邊不隨縮放變粗。 */\r\n  private appendRoughPaths(g: SVGElement, drawables: unknown[], o: { dash?: string; marker?: string } = {}): void {\r\n    const paths: SVGElement[] = [];\r\n    for (const drawable of drawables) {\r\n      for (const pi of this.gen.toPaths(drawable) as RoughPathInfo[]) {\r\n        const isFill = pi.fill && pi.fill !== 'none';\r\n        const path = svgEl('path', { d: pi.d });\r\n        if (isFill) {\r\n          path.setAttribute('fill', pi.fill as string);\r\n          path.setAttribute('stroke', 'none');\r\n        } else {\r\n          path.setAttribute('fill', 'none');\r\n          path.setAttribute('stroke', pi.stroke);\r\n          path.setAttribute('stroke-width', String(pi.strokeWidth));\r\n          path.setAttribute('vector-effect', 'non-scaling-stroke');\r\n          if (o.dash) path.setAttribute('stroke-dasharray', o.dash);\r\n          paths.push(path);\r\n        }\r\n        path.style.pointerEvents = 'none';\r\n        g.appendChild(path);\r\n      }\r\n    }\r\n    // 箭頭只掛最後一道描邊:掛在每一道上會冒出多個箭頭。\r\n    const last = paths[paths.length - 1];\r\n    if (o.marker && last) last.setAttribute('marker-end', `url(#${o.marker})`);\r\n  }\r\n\r\n  /**\r\n   * sequence 圖小工具:依目前 look 畫方框。\r\n   *\r\n   * sketch 走 rough.js(與其它圖種的節點同一套手繪筆觸),clean 維持銳利 rect。\r\n   * 回傳的 <g> 已含 translate,呼叫端在它身上設 cursor / filter 即可(會傳給子路徑)。\r\n   *\r\n   * hit:補一層透明命中矩形。手繪筆觸是一堆 pointer-events:none 的 path,沒有這層,\r\n   * 參與者方框在手繪模式下就變成點不到 —— 拖曳換序 / 雙擊改名全部穿透到背景變成平移畫布。\r\n   */\r\n  private seqBox(\r\n    x: number,\r\n    y: number,\r\n    w: number,\r\n    h: number,\r\n    o: {\r\n      rx?: number;\r\n      fill: string;\r\n      stroke: string;\r\n      strokeWidth?: number;\r\n      dash?: string;\r\n      seedKey: string;\r\n      hit?: boolean;\r\n    },\r\n  ): SVGGElement {\r\n    const g = svgEl('g', { transform: `translate(${x},${y})` }) as SVGGElement;\r\n    const sw = o.strokeWidth ?? 1.5;\r\n    if (this.look === 'clean') {\r\n      const r = svgEl('rect', { x: 0, y: 0, width: w, height: h, rx: o.rx ?? 0, fill: o.fill, stroke: o.stroke, 'stroke-width': sw });\r\n      if (o.dash) r.setAttribute('stroke-dasharray', o.dash);\r\n      g.appendChild(r);\r\n    } else {\r\n      const opts = {\r\n        ...ROUGH_LOOKS.sketch,\r\n        seed: seedFor(o.seedKey, this.baseSeed),\r\n        stroke: o.stroke,\r\n        strokeWidth: sw,\r\n        ...(o.fill === 'none' ? {} : { fill: o.fill }),\r\n      };\r\n      const rx = o.rx ?? 0;\r\n      const drawable = rx > 0 ? this.gen.path(roundedRectPath(w, h, rx), opts) : this.gen.rectangle(0, 0, w, h, opts);\r\n      // 虛線走 stroke-dasharray,不用 rough 的 strokeLineDash —— generator.toPaths() 不會把它\r\n      // 帶進 path 資訊裡(只有 canvas 渲染路徑吃),設了等於白設,片段框會變成實線。\r\n      this.appendRoughPaths(g, [drawable], { dash: o.dash });\r\n    }\r\n    if (o.hit) g.appendChild(svgEl('rect', { x: 0, y: 0, width: w, height: h, fill: 'transparent' }));\r\n    return g;\r\n  }\r\n\r\n  /** sequence 圖小工具:依目前 look 畫直線 / 路徑(sketch 單筆抖動,箭頭端點才對得準)。 */\r\n  private seqStroke(\r\n    d: string,\r\n    o: { stroke: string; strokeWidth: number; dash?: boolean; marker?: string; opacity?: number; seedKey: string },\r\n  ): SVGElement {\r\n    if (this.look === 'sketch') {\r\n      const g = svgEl('g') as SVGGElement;\r\n      const opts = {\r\n        ...ROUGH_LOOKS.sketch,\r\n        seed: seedFor(o.seedKey, this.baseSeed),\r\n        stroke: o.stroke,\r\n        strokeWidth: o.strokeWidth,\r\n        disableMultiStroke: true,\r\n      };\r\n      // 虛線同樣走 stroke-dasharray(見 seqBox 的說明)。\r\n      this.appendRoughPaths(g, [this.gen.path(d, opts)], { marker: o.marker, dash: o.dash ? '5 4' : undefined });\r\n      if (o.opacity != null) g.style.opacity = String(o.opacity);\r\n      g.style.pointerEvents = 'none';\r\n      return g;\r\n    }\r\n    const p = svgEl('path', { d, fill: 'none', stroke: o.stroke, 'stroke-width': o.strokeWidth });\r\n    p.setAttribute('vector-effect', 'non-scaling-stroke');\r\n    if (o.dash) p.setAttribute('stroke-dasharray', '5 4');\r\n    if (o.opacity != null) p.style.opacity = String(o.opacity);\r\n    if (o.marker) p.setAttribute('marker-end', `url(#${o.marker})`);\r\n    p.style.pointerEvents = 'none';\r\n    return p;\r\n  }\r\n\r\n  /** sequence 圖小工具:foreignObject 文字(CJK 友善)。 */\r\n  private seqText(\r\n    x: number,\r\n    y: number,\r\n    text: string,\r\n    color: string,\r\n    size: number,\r\n    weight: number,\r\n    anchor: 'start' | 'middle' | 'end' = 'start',\r\n  ): SVGGElement {\r\n    const W = 220;\r\n    const fx = anchor === 'middle' ? x - W / 2 : anchor === 'end' ? x - W : x;\r\n    const fo = svgEl('foreignObject', { x: fx, y: y - 9, width: W, height: 18 });\r\n    fo.style.pointerEvents = 'none';\r\n    fo.style.overflow = 'visible';\r\n    const div = document.createElementNS(XHTML_NS, 'div') as unknown as HTMLDivElement;\r\n    div.textContent = text;\r\n    div.setAttribute(\r\n      'style',\r\n      `font:${weight} ${size}px/1.2 var(--rsm-editor-font);color:${color};` +\r\n        `text-align:${anchor === 'middle' ? 'center' : anchor === 'end' ? 'right' : 'left'};white-space:nowrap;`,\r\n    );\r\n    fo.appendChild(div as unknown as Node);\r\n    return fo as unknown as SVGGElement;\r\n  }\r\n\r\n  /** sequence 圖專屬渲染:參與者欄 + 生命線 + 依序堆疊的訊息 + note + 片段框。 */\r\n  private renderSequence(scene: EditorScene): void {\r\n    const seq = scene.sequence;\r\n    if (!seq) return;\r\n    this.renderedSequence = true;\r\n    this.nodeCache.clear();\r\n    this.edgeEls.clear();\r\n    this.seqMsgRects.clear();\r\n    // 不清 overlayLayer:那一層的子群組是 Overlay 建構時建好、之後一直持有參考的,\r\n    // 從這裡砍掉等於把它們從文件上摘下來,Overlay 之後所有 showSelection / showGuides\r\n    // 都寫進脫離 DOM 的節點 —— 拖曳照樣生效,但選取框、吸附線、橡皮筋一個都看不到,\r\n    // 使用者只會覺得「拖了沒反應」。殘留的舊視覺由 Overlay 自己的 clearXxx 與\r\n    // controller 每次渲染後的 refreshOverlay 收拾。\r\n    for (const layer of [this.containersLayer, this.edgesLayer, this.nodesLayer]) {\r\n      while (layer.firstChild) layer.removeChild(layer.firstChild);\r\n    }\r\n    const g = this.nodesLayer;\r\n    const ink = this.dark ? '#c9d1d9' : '#334155';\r\n    const fillBox = this.dark ? '#26262b' : '#ffffff';\r\n    const ROW_H = 44;\r\n    // 欄位 = 參與者節點(座標與命中測試一致)。\r\n    const cols = scene.nodes\r\n      .filter((n) => n.data?.kind === 'sequence')\r\n      .map((n) => ({\r\n        id: n.id,\r\n        label: n.label,\r\n        actor: n.data?.kind === 'sequence' ? n.data.actor : false,\r\n        x: n.x,\r\n        w: n.w,\r\n        cx: n.x + n.w / 2,\r\n        y: n.y,\r\n        h: n.h,\r\n      }));\r\n    const HEAD_Y = cols[0]?.y ?? 12;\r\n    const HEAD_H = cols[0]?.h ?? 40;\r\n    const colById = new Map(cols.map((c) => [c.id, c] as const));\r\n    const cxOf = (id: string): number => colById.get(id)?.cx ?? 40;\r\n    const rightEdge = cols.length ? cols[cols.length - 1].x + cols[cols.length - 1].w : 200;\r\n\r\n    const ROW0 = HEAD_Y + HEAD_H + 36;\r\n    let row = 0;\r\n    const OPENERS = new Set(['loop', 'alt', 'opt', 'par', 'critical', 'break', 'rect', 'box']);\r\n    interface Drawn {\r\n      kind: 'msg' | 'note';\r\n      y: number;\r\n      s: import('../scene/types').SeqStatement;\r\n      idx: number;\r\n    }\r\n    interface Frag {\r\n      kw: string;\r\n      label: string;\r\n      y0: number;\r\n      y1?: number;\r\n      dividers: Array<{ y: number; kw: string; label: string }>;\r\n    }\r\n    const drawn: Drawn[] = [];\r\n    const fragStack: Frag[] = [];\r\n    const frags: Frag[] = [];\r\n    let sidx = -1;\r\n    for (const s of seq.statements) {\r\n      sidx += 1;\r\n      if (s.kind === 'message') {\r\n        drawn.push({ kind: 'msg', y: ROW0 + row * ROW_H, s, idx: sidx });\r\n        row += 1;\r\n      } else if (s.kind === 'note') {\r\n        drawn.push({ kind: 'note', y: ROW0 + row * ROW_H, s, idx: sidx });\r\n        row += 1;\r\n      } else if (s.kind === 'fragment') {\r\n        if (OPENERS.has(s.keyword)) {\r\n          const f: Frag = { kw: s.keyword, label: s.label, y0: ROW0 + row * ROW_H, dividers: [] };\r\n          row += 1;\r\n          fragStack.push(f);\r\n          frags.push(f);\r\n        } else {\r\n          const top = fragStack[fragStack.length - 1];\r\n          if (top) top.dividers.push({ y: ROW0 + row * ROW_H, kw: s.keyword, label: s.label });\r\n          row += 1;\r\n        }\r\n      } else if (s.kind === 'end') {\r\n        const f = fragStack.pop();\r\n        if (f) {\r\n          f.y1 = ROW0 + row * ROW_H;\r\n          row += 1;\r\n        }\r\n      }\r\n    }\r\n    const bottomY = ROW0 + row * ROW_H + 6;\r\n\r\n    const line = (\r\n      x1: number,\r\n      y1: number,\r\n      x2: number,\r\n      y2: number,\r\n      o: { dash?: boolean; w?: number; marker?: boolean; stroke?: string; opacity?: number } = {},\r\n    ): SVGElement => {\r\n      const mk = markerIdFor('arrow', this.dark);\r\n      return this.seqStroke(`M${x1},${y1} L${x2},${y2}`, {\r\n        stroke: o.stroke ?? ink,\r\n        strokeWidth: o.w ?? 1.6,\r\n        dash: o.dash,\r\n        opacity: o.opacity,\r\n        marker: o.marker && mk ? mk : undefined,\r\n        seedKey: `line:${Math.round(x1)},${Math.round(y1)}-${Math.round(x2)},${Math.round(y2)}`,\r\n      });\r\n    };\r\n\r\n    // 片段框(墊底)\r\n    for (const f of frags) {\r\n      if (f.y1 == null) f.y1 = bottomY;\r\n      const fx = 20;\r\n      const fw = rightEdge + 20;\r\n      const box = this.seqBox(fx, f.y0 - 14, fw - fx, f.y1 - f.y0 + 24, {\r\n        rx: 4,\r\n        fill: 'none',\r\n        stroke: ink,\r\n        strokeWidth: 1,\r\n        dash: '3 3',\r\n        seedKey: `frag:${f.kw}:${f.y0}`,\r\n      });\r\n      box.style.opacity = '0.6';\r\n      box.style.pointerEvents = 'none';\r\n      g.appendChild(box);\r\n      const tagW = Math.max(40, f.kw.length * 8 + 24);\r\n      const tag = this.seqBox(fx, f.y0 - 14, tagW, 18, {\r\n        fill: this.dark ? '#3a3a40' : '#e2e8f0',\r\n        stroke: ink,\r\n        strokeWidth: 1,\r\n        seedKey: `fragtag:${f.kw}:${f.y0}`,\r\n      });\r\n      tag.style.pointerEvents = 'none';\r\n      g.appendChild(tag);\r\n      g.appendChild(this.seqText(fx + 5, f.y0 - 1, `${f.kw}${f.label ? ' ' + f.label : ''}`, ink, 11, 700, 'start'));\r\n      for (const d of f.dividers) {\r\n        g.appendChild(line(fx, d.y - 14, fw, d.y - 14, { dash: true, w: 1 }));\r\n        g.appendChild(this.seqText(fx + 5, d.y - 1, `[${d.label || d.kw}]`, ink, 11, 600, 'start'));\r\n      }\r\n    }\r\n\r\n    // 生命線:淡色比照該欄參與者的色票(而非整張圖同一種灰),弱化「一排黑虛線」的呆板感。\r\n    cols.forEach((c, i) => {\r\n      g.appendChild(line(c.cx, HEAD_Y + HEAD_H, c.cx, bottomY, { dash: true, w: 1, stroke: paletteByIndex(i).stroke, opacity: 0.55 }));\r\n    });\r\n\r\n    // 啟用區(activation bars):依訊息 +/- 簡寫配對,在生命線上畫窄矩形。\r\n    const actStack = new Map<string, number[]>();\r\n    const actBars: Array<{ actor: string; y0: number; y1: number }> = [];\r\n    for (const d of drawn) {\r\n      if (d.kind === 'msg' && d.s.kind === 'message') {\r\n        const s = d.s;\r\n        if (s.activate === '+') {\r\n          const st = actStack.get(s.to) ?? [];\r\n          st.push(d.y);\r\n          actStack.set(s.to, st);\r\n        } else if (s.activate === '-') {\r\n          const st = actStack.get(s.from);\r\n          if (st && st.length) actBars.push({ actor: s.from, y0: st.pop() as number, y1: d.y });\r\n        }\r\n      }\r\n    }\r\n    for (const [actor, st] of actStack) for (const y0 of st) actBars.push({ actor, y0, y1: bottomY });\r\n    for (const ab of actBars) {\r\n      const cx = cxOf(ab.actor);\r\n      g.appendChild(\r\n        this.seqBox(cx - 5, ab.y0, 10, Math.max(8, ab.y1 - ab.y0), {\r\n          fill: fillBox,\r\n          stroke: ink,\r\n          strokeWidth: 1,\r\n          seedKey: `act:${ab.actor}:${ab.y0}`,\r\n        }),\r\n      );\r\n    }\r\n\r\n    // 訊息 + note\r\n    let autoNum = 0;\r\n    for (const d of drawn) {\r\n      if (d.kind === 'msg' && d.s.kind === 'message') {\r\n        const s = d.s;\r\n        const x1 = cxOf(s.from);\r\n        const x2 = cxOf(s.to);\r\n        const dashed = s.arrow.includes('--');\r\n        // autonumber:在來源端畫一個編號圓圈(對齊 mermaid 行為)。\r\n        if (seq.autonumber) {\r\n          autoNum += 1;\r\n          const nx = s.from === s.to ? x1 : x1 + (x2 > x1 ? 9 : -9);\r\n          // 圓圈也吃 look:sketch 用 seqBox 的 rx=半徑(圓角矩形收成圓),與其它框同一套筆觸。\r\n          g.appendChild(\r\n            this.seqBox(nx - 9, d.y - 9, 18, 18, {\r\n              rx: 9,\r\n              fill: this.dark ? '#26262b' : '#ffffff',\r\n              stroke: ink,\r\n              strokeWidth: 1,\r\n              seedKey: `num:${autoNum}`,\r\n            }),\r\n          );\r\n          g.appendChild(this.seqText(nx, d.y + 1, String(autoNum), ink, 10, 700, 'middle'));\r\n        }\r\n        let rect: { x: number; y: number; w: number; h: number };\r\n        if (s.from === s.to) {\r\n          const r = 20;\r\n          g.appendChild(\r\n            this.seqStroke(`M${x1},${d.y} h${r} v18 h${-r}`, {\r\n              stroke: ink,\r\n              strokeWidth: 1.6,\r\n              seedKey: `self:${s.from}:${d.idx}`,\r\n            }),\r\n          );\r\n          const back = line(x1 + r, d.y + 18, x1, d.y + 18, { marker: true });\r\n          g.appendChild(back);\r\n          if (s.text) g.appendChild(this.seqText(x1 + r + 6, d.y + 4, s.text, ink, 12, 400, 'start'));\r\n          rect = { x: x1, y: d.y - 10, w: 140, h: 34 };\r\n        } else {\r\n          g.appendChild(line(x1, d.y, x2, d.y, { dash: dashed, marker: true }));\r\n          if (s.text) g.appendChild(this.seqText((x1 + x2) / 2, d.y - 6, s.text, ink, 12, 400, 'middle'));\r\n          rect = { x: Math.min(x1, x2), y: d.y - 18, w: Math.abs(x2 - x1), h: 26 };\r\n        }\r\n        // 雙擊可編輯訊息文字:透明命中區 + 記錄世界座標供 host 定位編輯器。\r\n        this.seqMsgRects.set(d.idx, rect);\r\n        const hit = svgEl('rect', {\r\n          x: rect.x,\r\n          y: rect.y,\r\n          width: rect.w,\r\n          height: rect.h,\r\n          fill: 'transparent',\r\n          'data-seq-msg': String(d.idx),\r\n        });\r\n        // 游標講的是「按下去主要會發生什麼」= 上下拖改順序。改文字是雙擊,不是主要手勢,\r\n        // 掛 text 游標會讓人以為這裡只能編輯,反而藏住了拖曳。\r\n        hit.style.cursor = 'ns-resize';\r\n        g.appendChild(hit);\r\n      } else if (d.kind === 'note' && d.s.kind === 'note') {\r\n        const s = d.s;\r\n        const ids = s.actors.split(',').map((a) => a.trim()).filter(Boolean);\r\n        const xs = ids.map(cxOf);\r\n        const minx = Math.min(...xs);\r\n        const maxx = Math.max(...xs);\r\n        const nw = s.placement === 'over' ? maxx - minx + 80 : 120;\r\n        const nx = s.placement === 'over' ? minx - 40 : s.placement === 'left of' ? minx - 130 : maxx + 10;\r\n        const w = Math.max(80, nw);\r\n        const nbox = this.seqBox(nx, d.y - 12, w, 26, {\r\n          rx: 2,\r\n          fill: this.dark ? '#3d3a22' : '#fff7d6',\r\n          stroke: ink,\r\n          strokeWidth: 1,\r\n          seedKey: `note:${d.idx}`,\r\n        });\r\n        nbox.style.pointerEvents = 'none';\r\n        g.appendChild(nbox);\r\n        g.appendChild(this.seqText(nx + w / 2, d.y + 1, s.text, ink, 11, 400, 'middle'));\r\n        // 雙擊可編輯 note 文字:與訊息共用 data-seq-msg 命中機制。\r\n        const nrect = { x: nx, y: d.y - 12, w, h: 26 };\r\n        this.seqMsgRects.set(d.idx, nrect);\r\n        const nhit = svgEl('rect', { x: nrect.x, y: nrect.y, width: nrect.w, height: nrect.h, fill: 'transparent', 'data-seq-msg': String(d.idx) });\r\n        nhit.style.cursor = 'ns-resize'; // 筆記與訊息同一套手勢(見上方訊息命中區的說明)\r\n        g.appendChild(nhit);\r\n      }\r\n    }\r\n\r\n    // 參與者方框:頂端 + 底端「都」帶 data-node-id(同一個 id)供選取 / 拖曳換序 / 雙擊改名 ——\r\n    // 兩者缺一都會讓使用者在其中一顆框上拖曳時穿透命中背景,onPointerDown 落入「空白處」\r\n    // 分支變成平移整張畫布,體感就是「拖了但沒反應,而且畫面還亂飄」。\r\n    // 左右拖曳換序、cursor 用 ew-resize 明講「只能左右」,不是通用的 move。\r\n    // 配色比照 flowchart 節點依序取 paletteByIndex(彩色卡片),不再全部同一片 fillBox ——\r\n    // 之前參與者一律灰白,是這個編輯器裡唯一沒有色彩變化的圖種,跟其它圖種的觀感不一致。\r\n    // 文字固定用 INK(深色),因為色票 fill 一律是淺色,不必再分深色模式。\r\n    const shadow = this.look === 'clean' ? `url(#${NODE_SHADOW_ID})` : '';\r\n    cols.forEach((c, i) => {\r\n      const pal = paletteByIndex(i);\r\n      const top = svgEl('g', { 'data-node-id': c.id, class: 'rsm-node' });\r\n      const tb = this.seqBox(c.x, c.y, c.w, c.h, {\r\n        rx: c.actor ? 16 : 6,\r\n        fill: pal.fill,\r\n        stroke: pal.stroke,\r\n        seedKey: `actor:${c.id}:top`,\r\n        hit: true,\r\n      });\r\n      if (shadow) tb.style.filter = shadow;\r\n      tb.style.cursor = 'ew-resize';\r\n      top.appendChild(tb);\r\n      top.appendChild(this.seqText(c.cx, c.y + c.h / 2 + 1, c.label, INK, 13, 700, 'middle'));\r\n      g.appendChild(top);\r\n      const bottom = svgEl('g', { 'data-node-id': c.id, class: 'rsm-node' });\r\n      const bb = this.seqBox(c.x, bottomY + 4, c.w, HEAD_H, {\r\n        rx: c.actor ? 16 : 6,\r\n        fill: pal.fill,\r\n        stroke: pal.stroke,\r\n        seedKey: `actor:${c.id}:bottom`,\r\n        hit: true,\r\n      });\r\n      if (shadow) bb.style.filter = shadow;\r\n      bb.style.cursor = 'ew-resize';\r\n      bottom.appendChild(bb);\r\n      bottom.appendChild(this.seqText(c.cx, bottomY + 4 + HEAD_H / 2 + 1, c.label, INK, 13, 700, 'middle'));\r\n      g.appendChild(bottom);\r\n    });\r\n\r\n    // 整張 sequence 的世界範圍(含底部參與者框 + 片段框左緣),供 fit 用。\r\n    const minX = Math.min(10, cols[0]?.x ?? 40);\r\n    const maxX = rightEdge + 20;\r\n    this.seqBounds = { x: minX, y: 0, w: maxX - minX, h: bottomY + 8 + HEAD_H };\r\n  }\r\n\r\n  private static geomKey(n: SceneNode): string {\r\n    return `${n.shape}|${Math.round(n.w)}|${Math.round(n.h)}|${n.style?.fill ?? ''}|${n.style?.stroke ?? ''}`;\r\n  }\r\n\r\n  /** 全量 diff 渲染(新增 / 移除 / 幾何變更重 rough,純位移只改 transform)。 */\r\n  render(scene: EditorScene): void {\r\n    this.scene = scene;\r\n    if (scene.diagramType === 'sequence' && scene.sequence) {\r\n      this.renderSequence(scene);\r\n      return;\r\n    }\r\n    this.seqBounds = null;\r\n    // 象限圖:先畫圖表外框(四象限 + 兩軸 + 標題),點才有可讀的參照。\r\n    // 它是「背景」而非場景元素,所以有自己的圖層、每次重畫、也不進節點快取。\r\n    while (this.frameLayer.firstChild) this.frameLayer.removeChild(this.frameLayer.firstChild);\r\n    if (scene.diagramType === 'quadrant') {\r\n      this.renderQuadrantFrame(scene);\r\n      this.seqBounds = SceneRenderer.quadrantBounds();\r\n    }\r\n    if (scene.diagramType === 'gantt') this.renderGanttFrame(scene);\r\n    if (scene.diagramType === 'pie') this.renderPieFrame(scene);\r\n    if (scene.diagramType === 'xychart') this.renderXyFrame(scene);\r\n    if (scene.diagramType === 'packet') this.renderPacketFrame(scene);\r\n    if (scene.diagramType === 'gitgraph') this.renderGitgraphFrame(scene);\r\n    if (scene.diagramType === 'block') this.renderBlockFrame(scene);\r\n    // 上一次是 sequence 渲染(內容直接寫入 layers、未進 nodeCache)→ diff 渲染清不掉,\r\n    // 先把全部 layers + 快取硬清空,避免上一張 sequence 圖殘留疊在新圖底下。\r\n    if (this.renderedSequence) {\r\n      this.renderedSequence = false;\r\n      this.nodeCache.clear();\r\n      this.edgeEls.clear();\r\n      this.seqMsgRects.clear();\r\n      // 同上:overlayLayer 的子群組屬於 Overlay,清了就再也回不來(見 renderSequence 的說明)。\r\n      for (const layer of [this.containersLayer, this.edgesLayer, this.nodesLayer]) {\r\n        while (layer.firstChild) layer.removeChild(layer.firstChild);\r\n      }\r\n    }\r\n    const liveNodeIds = new Set(scene.nodes.map((n) => n.id));\r\n\r\n    // 移除消失的節點群組。\r\n    for (const [id, cache] of this.nodeCache) {\r\n      if (!liveNodeIds.has(id)) {\r\n        cache.g.remove();\r\n        this.nodeCache.delete(id);\r\n      }\r\n    }\r\n\r\n    for (const node of scene.nodes) {\r\n      const geomKey = SceneRenderer.geomKey(node);\r\n      const labelKey = node.label;\r\n      const existing = this.nodeCache.get(node.id);\r\n      if (!existing) {\r\n        const g = this.buildNodeGroup(node);\r\n        this.nodesLayer.appendChild(g);\r\n        this.nodeCache.set(node.id, { g, geomKey, labelKey });\r\n        continue;\r\n      }\r\n      if (existing.geomKey !== geomKey || existing.labelKey !== labelKey) {\r\n        this.fillNodeContent(existing.g, node);\r\n        existing.geomKey = geomKey;\r\n        existing.labelKey = labelKey;\r\n      }\r\n      existing.g.setAttribute('transform', `translate(${node.x},${node.y})`);\r\n    }\r\n\r\n    // 邊:全量重建(成本低且永遠正確)。\r\n    while (this.edgesLayer.firstChild) this.edgesLayer.removeChild(this.edgesLayer.firstChild);\r\n    this.edgeEls.clear();\r\n    for (const edge of scene.edges) {\r\n      const g = renderEdge(scene, edge, this.dark);\r\n      this.edgesLayer.appendChild(g);\r\n      this.edgeEls.set(edge.id, g);\r\n    }\r\n\r\n    this.renderContainers(scene);\r\n  }\r\n\r\n  /** subgraph / 容器框:於渲染時依子節點 bbox 即時計算外框(子節點移動後框會跟著更新)。 */\r\n  private renderContainers(scene: EditorScene): void {\r\n    while (this.containersLayer.firstChild) this.containersLayer.removeChild(this.containersLayer.firstChild);\r\n    if (scene.containers.length === 0) return;\r\n    const LABEL_H = 22;\r\n    // 外框幾何一律問 scene-ops(連線錨點、符合畫面、匯出 SVG 都用同一個)。這裡曾經自己抄一份\r\n    // 同樣的算式,於是任何一邊改內距,畫出來的框就會和點擊 / 裁切範圍差一截。\r\n    const effRect = (c: SceneContainer) => containerRect(scene, c.id);\r\n    let ci = 0;\r\n    for (const c of scene.containers) {\r\n      // 對齊 Edit Diagram:每個 subgraph 取叢集底色 + 同色標題(色相循序)。\r\n      const cp = clusterByIndex(ci++);\r\n      const box0 = effRect(c);\r\n      if (!box0) continue;\r\n      const { x, y, w, h } = box0;\r\n      const box = svgEl('rect', {\r\n        x,\r\n        y,\r\n        width: w,\r\n        height: h,\r\n        rx: 8,\r\n        fill: cp.fill,\r\n        stroke: cp.stroke,\r\n        'stroke-width': 1.5,\r\n        'data-container-id': c.id,\r\n      });\r\n      // git 的分支泳道是整條橫貫畫面的長條;同樣的粉彩鋪滿那麼大一片會蓋過提交本身,壓淡一些。\r\n      if (scene.diagramType === 'gitgraph') box.setAttribute('fill-opacity', '0.4');\r\n      // 泳道圖的欄要可以被右鍵點到(改名 / 刪欄);其他圖種的容器框維持穿透,\r\n      // 免得擋住框內節點的點擊。\r\n      box.style.pointerEvents = LANE_DIAGRAMS.has(scene.diagramType) ? 'auto' : 'none';\r\n      this.containersLayer.appendChild(box);\r\n      if (c.label) {\r\n        const fo = svgEl('foreignObject', { x, y: y + 2, width: w, height: LABEL_H });\r\n        fo.style.pointerEvents = 'none';\r\n        const div = document.createElementNS(XHTML_NS, 'div') as unknown as HTMLDivElement;\r\n        div.textContent = c.label;\r\n        div.setAttribute(\r\n          'style',\r\n          `font:700 12px/${LABEL_H}px var(--rsm-editor-font);color:${cp.stroke};` +\r\n            'padding:0 10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;',\r\n        );\r\n        fo.appendChild(div as unknown as Node);\r\n        this.containersLayer.appendChild(fo);\r\n      }\r\n    }\r\n  }\r\n\r\n  /** 拖曳預覽:只改選取節點 transform + 重繞入射邊,不寫模型。 */\r\n  previewMove(ids: Set<string>, dx: number, dy: number): void {\r\n    if (!this.scene) return;\r\n    const preview = moveNodes(this.scene, ids, dx, dy);\r\n    for (const id of ids) {\r\n      const cache = this.nodeCache.get(id);\r\n      const node = preview.nodes.find((n) => n.id === id);\r\n      if (cache && node) cache.g.setAttribute('transform', `translate(${node.x},${node.y})`);\r\n    }\r\n    for (const edge of preview.edges) {\r\n      if (!ids.has(edge.source) && !ids.has(edge.target)) continue;\r\n      const g = this.edgeEls.get(edge.id);\r\n      if (g) updateEdgeGeometry(g, preview, edge);\r\n    }\r\n    this.showDropTarget(preview, ids);\r\n  }\r\n\r\n  /**\r\n   * 「放開會落在哪裡」的即時提示。\r\n   *\r\n   * 位置即資料的那幾種圖(看板欄 / 旅程階段 / git 分支 / 積木格),放手的瞬間就會改寫原始碼,\r\n   * 可是拖的過程中畫面上完全沒有東西告訴使用者會落到哪一格 —— 只能拖完看結果、錯了再拖回來。\r\n   * 這裡把即將落入的那一格描一圈,拖曳時同步跟著走。\r\n   */\r\n  private showDropTarget(preview: EditorScene, ids: Set<string>): void {\r\n    this.clearDropTarget();\r\n    const node = preview.nodes.find((n) => ids.has(n.id));\r\n    if (!node) return;\r\n    const type = preview.diagramType;\r\n    let rect: { x: number; y: number; w: number; h: number } | null = null;\r\n    if (type === 'kanban' || type === 'journey' || type === 'gitgraph') {\r\n      // 泳道類:節點中心落在哪一條泳道,就框那一條。\r\n      const cx = node.x + node.w / 2;\r\n      const cy = node.y + node.h / 2;\r\n      const hit = preview.containers\r\n        .map((c) => containerRect(preview, c.id))\r\n        .filter((r): r is NonNullable<typeof r> => Boolean(r))\r\n        .find((r) => cx >= r.x && cx <= r.x + r.w && cy >= r.y && cy <= r.y + r.h);\r\n      rect = hit ?? null;\r\n    } else if (type === 'block') {\r\n      const stepX = BLOCK_CELL.w + BLOCK_CELL.gapX;\r\n      const stepY = BLOCK_CELL.h + BLOCK_CELL.gapY;\r\n      const col = Math.max(0, Math.round((node.x - BLOCK_CELL.x0) / stepX));\r\n      const row = Math.max(0, Math.round((node.y - BLOCK_CELL.y0) / stepY));\r\n      rect = {\r\n        x: BLOCK_CELL.x0 + col * stepX,\r\n        y: BLOCK_CELL.y0 + row * stepY,\r\n        w: node.w,\r\n        h: BLOCK_CELL.h,\r\n      };\r\n    }\r\n    if (!rect) return;\r\n    const ink = this.dark ? INK_DARK : INK;\r\n    const box = svgEl('rect', {\r\n      class: 'rsm-drop-target',\r\n      x: rect.x,\r\n      y: rect.y,\r\n      width: rect.w,\r\n      height: rect.h,\r\n      rx: 8,\r\n      fill: ink,\r\n      'fill-opacity': 0.06,\r\n      stroke: ink,\r\n      'stroke-opacity': 0.45,\r\n      'stroke-width': 2,\r\n      'stroke-dasharray': '6 4',\r\n    });\r\n    box.style.pointerEvents = 'none';\r\n    this.frameLayer.appendChild(box);\r\n  }\r\n\r\n  /** 移除落點提示(放手 / 取消拖曳時)。 */\r\n  clearDropTarget(): void {\r\n    this.frameLayer.querySelectorAll('.rsm-drop-target').forEach((el) => el.remove());\r\n  }\r\n\r\n  /** 縮放預覽:就地重 rough 該節點 + 重繞入射邊,不寫模型。 */\r\n  previewResize(id: string, rect: { x: number; y: number; w: number; h: number }): void {\r\n    if (!this.scene) return;\r\n    const cache = this.nodeCache.get(id);\r\n    const node = this.scene.nodes.find((n) => n.id === id);\r\n    if (!cache || !node) return;\r\n    const preview: SceneNode = { ...node, ...rect };\r\n    this.fillNodeContent(cache.g, preview);\r\n    cache.g.setAttribute('transform', `translate(${rect.x},${rect.y})`);\r\n    cache.geomKey = ''; // 強制下次 render 重建。\r\n    const previewScene = { ...this.scene, nodes: this.scene.nodes.map((n) => (n.id === id ? preview : n)) };\r\n    for (const edge of previewScene.edges) {\r\n      if (edge.source !== id && edge.target !== id) continue;\r\n      const g = this.edgeEls.get(edge.id);\r\n      if (g) updateEdgeGeometry(g, previewScene, edge);\r\n    }\r\n  }\r\n\r\n  getNodeGroup(id: string): SVGGElement | undefined {\r\n    return this.nodeCache.get(id)?.g;\r\n  }\r\n}\r\n","// 編輯器自有 CSS(注入一次)。畫布、字體變數、cursor。\r\n\r\nexport const RSM_EDITOR_STYLE_ID = 'rsm-editor-styles';\r\n\r\nconst CSS = `\r\n.rsm-editor-root{position:relative;width:100%;height:100%;overflow:hidden;\r\n  --rsm-editor-font:'Virgil','KaiTi','Comic Sans MS',cursive;\r\n  --rsm-edge-label-bg:rgba(255,255,255,0.85);\r\n  background:var(--rsm-editor-bg,#fafafa);\r\n  background-image:radial-gradient(var(--rsm-editor-dot,#d7d7de) 1px,transparent 1px);\r\n  background-size:20px 20px;touch-action:none;}\r\n.rsm-editor-root.rsm-dark{--rsm-editor-bg:#1e1e1e;--rsm-editor-dot:#3a3a40;\r\n  --rsm-edge-label-bg:rgba(30,30,30,0.85);}\r\n/* clean 風用一般無襯線字(非手寫 Virgil),標籤更清晰易讀 */\r\n.rsm-editor-root.rsm-clean{--rsm-editor-font:system-ui,-apple-system,\"Segoe UI\",\"Microsoft JhengHei\",\"PingFang TC\",sans-serif;}\r\n.rsm-editor-svg{display:block;width:100%;height:100%;user-select:none;}\r\n.rsm-editor-svg text,.rsm-editor-svg foreignObject *{user-select:none;}\r\n\r\n/* 工具列:常用外形一鍵攤開,不藏在下拉選單裡 */\r\n.rsm-editor-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:4px;}\r\n.rsm-editor-toolbar .rsm-tb-sep{width:1px;align-self:stretch;margin:2px 4px;\r\n  background:var(--rsm-border,#e5e7eb);}\r\n.rsm-editor-toolbar .rsm-tb-spacer{flex:1 1 auto;}\r\n.rsm-shape-btn{display:inline-flex;align-items:center;gap:4px;}\r\n.rsm-shape-btn .rsm-shape-glyph{font-size:15px;line-height:1;}\r\n.rsm-shape-icon{display:block;flex:0 0 auto;}\r\n/* 連線樣式:線型按鈕(迷你預覽)+ 分組 */\r\n.rsm-line-group{display:inline-flex;align-items:center;gap:2px;}\r\n.rsm-line-btn{display:inline-flex;align-items:center;justify-content:center;padding:4px 6px;}\r\n.rsm-line-btn svg{display:block;}\r\n/* 下拉選單:選項一律深字淺底(原生 option 在暗色下常白底白字,看不清)。 */\r\n.rsm-editor-toolbar select{color:inherit;}\r\n.rsm-editor-toolbar select option{background:#ffffff;color:#1f2937;}\r\n.rsm-tb-hint{font-size:12px;opacity:0.7;padding:0 8px;align-self:center;white-space:nowrap;}\r\n\r\n/* 空白畫布引導提示:置中、不擋互動、淡入(grace 期間靠 JS 不加 show class 而隱藏)。 */\r\n.rsm-empty-hint{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;\r\n  gap:10px;pointer-events:none;text-align:center;padding:0 24px;opacity:0;transition:opacity .35s ease;\r\n  font:500 15px/1.7 var(--rsm-editor-font);color:var(--rsm-editor-dot,#9aa0aa);}\r\n.rsm-editor-root.rsm-dark .rsm-empty-hint{color:#6b7280;}\r\n.rsm-empty-hint.rsm-empty-show{opacity:0.95;}\r\n.rsm-empty-sub{font-size:13px;opacity:0.8;margin-top:4px;}\r\n.rsm-empty-starters{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;pointer-events:auto;}\r\n.rsm-empty-starter{font:500 13px var(--rsm-editor-font);padding:6px 14px;border-radius:8px;cursor:pointer;\r\n  border:1px solid var(--rsm-border,#d7d7de);background:var(--rsm-editor-bg,#fff);color:var(--rsm-editor-fg,#374151);\r\n  transition:background .15s ease,border-color .15s ease;}\r\n.rsm-empty-starter:hover{border-color:#3b82f6;color:#3b82f6;}\r\n.rsm-editor-root.rsm-dark .rsm-empty-starter{background:#23232e;border-color:#3a3a40;color:#c9d1d9;}\r\n.rsm-editor-root.rsm-dark .rsm-empty-starter:hover{border-color:#60a5fa;color:#60a5fa;}\r\n\r\n/* 鍵盤快捷鍵說明浮層(? 開啟,點背景 / Esc 關閉)。 */\r\n.rsm-help-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\r\n  background:rgba(15,18,25,0.32);z-index:30;}\r\n.rsm-help-panel{background:var(--rsm-editor-bg,#fff);color:inherit;border-radius:12px;padding:18px 22px;\r\n  box-shadow:0 12px 40px rgba(0,0,0,0.25);max-width:min(92%,460px);max-height:84%;overflow:auto;\r\n  border:1px solid var(--rsm-border,#e5e7eb);}\r\n.rsm-editor-root.rsm-dark .rsm-help-panel{background:#23232e;border-color:#3a3a40;}\r\n.rsm-help-title{font-weight:700;font-size:15px;margin-bottom:12px;}\r\n.rsm-help-grid{display:grid;grid-template-columns:auto 1fr;gap:7px 14px;align-items:center;font-size:13px;}\r\n.rsm-help-grid kbd{justify-self:start;font-family:ui-monospace,monospace;font-size:12px;\r\n  background:var(--rsm-editor-dot,#eef0f3);color:inherit;border-radius:5px;padding:2px 7px;white-space:nowrap;\r\n  border:1px solid rgba(0,0,0,0.12);}\r\n.rsm-editor-root.rsm-dark .rsm-help-grid kbd{background:#15151b;border-color:#3a3a40;}\r\n\r\n/* 右鍵選單 */\r\n.rsm-ctx{position:absolute;z-index:40;min-width:128px;padding:4px;border-radius:8px;\r\n  background:var(--rsm-ctx-bg,#1f1f23);color:var(--rsm-ctx-fg,#e8e8ea);\r\n  border:1px solid rgba(127,127,127,0.28);box-shadow:0 8px 28px rgba(0,0,0,0.35);\r\n  font:13px/1.4 system-ui,-apple-system,\"Microsoft JhengHei\",sans-serif;user-select:none;}\r\n.rsm-ctx-item{padding:6px 10px;border-radius:5px;cursor:pointer;white-space:nowrap;}\r\n.rsm-ctx-item:hover{background:var(--rsm-accent,#2563eb);color:#fff;}\r\n.rsm-ctx-sep{height:1px;margin:4px 2px;background:rgba(127,127,127,0.28);}\r\n.rsm-ctx-shapes{display:flex;gap:2px;padding:2px;}\r\n.rsm-ctx-shapes button{flex:1;font-size:15px;padding:4px 0;border:none;border-radius:5px;\r\n  background:transparent;color:inherit;cursor:pointer;}\r\n.rsm-ctx-shapes button:hover{background:var(--rsm-accent,#2563eb);color:#fff;}\r\n`;\r\n\r\nexport function ensureEditorStyles(): void {\r\n  if (typeof document === 'undefined') return;\r\n  if (document.getElementById(RSM_EDITOR_STYLE_ID)) return;\r\n  const style = document.createElement('style');\r\n  style.id = RSM_EDITOR_STYLE_ID;\r\n  style.textContent = CSS;\r\n  document.head.appendChild(style);\r\n}\r\n","// 編輯器場景模型(框架無關、純 JSON、零 DOM / React)。\r\n//\r\n// 設計原則:\r\n// - 扁平陣列 + parentId(非巢狀樹)→ 選取、hit-test、undo diff、序列化都簡單。\r\n// - 幾何永遠存在(x/y = 場景座標左上角,w/h px)。由引擎排版的圖種(sequence)仍存幾何,\r\n//   但以 `layoutOwner:'engine'` 標記其座標為衍生值。\r\n// - 型別差異收進判別式 data / meta;新增圖種只加 variant,不動共用形狀。\r\n\r\nexport type DiagramType =\r\n  | 'flowchart'\r\n  | 'sequence'\r\n  | 'class'\r\n  | 'er'\r\n  | 'state'\r\n  | 'mindmap'\r\n  | 'requirement'\r\n  | 'quadrant'\r\n  | 'c4'\r\n  | 'kanban'\r\n  | 'sankey'\r\n  | 'journey'\r\n  | 'gantt'\r\n  | 'pie'\r\n  | 'xychart'\r\n  | 'architecture'\r\n  | 'block'\r\n  | 'packet'\r\n  | 'gitgraph'\r\n  | 'timeline'\r\n  | 'orid';\r\n\r\n/** 節點外形 — 先填 flowchart / state 值,後續圖種(class/er/sequence)再擴充。 */\r\nexport type NodeShape =\r\n  // flowchart\r\n  | 'rectangle'\r\n  | 'rounded'\r\n  | 'stadium'\r\n  | 'subroutine'\r\n  | 'cylinder'\r\n  | 'circle'\r\n  | 'doubleCircle'\r\n  | 'diamond'\r\n  | 'hexagon'\r\n  | 'odd'\r\n  | 'trapezoid'\r\n  | 'trapezoidAlt'\r\n  | 'parallelogram'\r\n  | 'parallelogramAlt'\r\n  | 'ellipse'\r\n  // state\r\n  | 'state'\r\n  | 'stateStart'\r\n  | 'stateEnd'\r\n  | 'fork'\r\n  | 'choice'\r\n  // class / er / sequence(後續階段)\r\n  | 'classBox'\r\n  | 'entity'\r\n  | 'actor'\r\n  | 'participant'\r\n  | 'note'\r\n  // requirement\r\n  | 'requirementBox'\r\n  | 'elementBox'\r\n  // quadrant chart:一個資料點(位置就是它的值)\r\n  | 'point'\r\n  // C4:人物 / 一般方塊 / 資料庫 / 佇列(細分的型別放在 data.c4Type)\r\n  | 'c4Person'\r\n  | 'c4Box'\r\n  | 'c4Db'\r\n  | 'c4Queue'\r\n  // kanban:一張卡片(它在哪一欄由位置決定)\r\n  | 'kanbanCard'\r\n  // sankey:一個節點(流量的來源 / 去處)\r\n  | 'sankeyNode'\r\n  // journey:一個任務(它屬於哪個 section 由位置決定)\r\n  | 'journeyTask'\r\n  // gantt:一根時間長條(x=開始日、寬=工期、y=section)\r\n  | 'ganttBar'\r\n  // pie:一個扇形(節點是它的質心把手)\r\n  | 'pieSlice'\r\n  // xychart:一個資料點(垂直位置就是它的值)\r\n  | 'xyPoint'\r\n  // architecture:一個服務 / junction\r\n  | 'archNode'\r\n  // packet:一個位元欄位(寬度就是它佔幾個 bit)\r\n  | 'packetField'\r\n  // gitGraph:一次提交(橫向位置=先後順序、縱向泳道=分支)\r\n  | 'gitCommit'\r\n  // 無法對映的新語法 → 原樣保留\r\n  | 'passthrough';\r\n\r\n/** 線條樣式(對映 flowchart 的 normal / thick / dotted / invisible)。 */\r\nexport type LineKind = 'solid' | 'dotted' | 'thick' | 'invisible';\r\n\r\n/** 箭頭端 — flowchart 用 none/arrow/open/dot/cross;class/er 後續加 variant。 */\r\nexport type ArrowHead =\r\n  | 'none'\r\n  | 'arrow'\r\n  | 'open'\r\n  | 'dot'\r\n  | 'cross'\r\n  // class / er(後續)\r\n  | 'triangle'\r\n  | 'diamond'\r\n  | 'diamondFilled'\r\n  | 'crowFootOne'\r\n  | 'crowFootMany';\r\n\r\nexport interface Point {\r\n  x: number;\r\n  y: number;\r\n}\r\n\r\n/**\r\n * 連線端的「固定錨點」(draw.io 式)。以相對節點 bbox 的分數座標表示(fx/fy ∈ 0..1),\r\n * 對標 draw.io 的 exitX/exitY / entryX/entryY。未設(undefined)= 浮動錨:動態朝對端中心,\r\n * 維持原本行為。此為編輯器專屬視覺資訊,mermaid 文字無對應語法(serialize 時略去,如同 waypoints)。\r\n */\r\nexport interface EdgeAnchor {\r\n  fx: number;\r\n  fy: number;\r\n}\r\n\r\n/** 內聯樣式 — 對映 mermaid 的 style / classDef。 */\r\nexport interface ElementStyle {\r\n  fill?: string;\r\n  stroke?: string;\r\n  strokeWidth?: number;\r\n  strokeDasharray?: string;\r\n  color?: string;\r\n  /** round-trip mermaid 的 `:::className`。 */\r\n  classRef?: string;\r\n}\r\n\r\nexport type LabelKind = 'markdown' | 'string' | 'text';\r\n\r\n/** 型別專屬節點資料(判別式聯集)。 */\r\nexport type NodeData =\r\n  | { kind: 'flowchart' }\r\n  | { kind: 'state'; isStart?: boolean; isEnd?: boolean; composite?: boolean }\r\n  | { kind: 'sequence'; actor: boolean }\r\n  | { kind: 'class'; members: string[]; methods: string[]; stereotype?: string; generic?: string }\r\n  | { kind: 'er'; attributes: ErAttribute[] }\r\n  | { kind: 'mindmap'; shapeType: number }\r\n  | { kind: 'requirement'; req: RequirementData }\r\n  // 象限圖的點:值就是它在圖上的位置,所以這裡只放樣式類的附加設定。\r\n  | { kind: 'quadrant'; radius?: number; color?: string; strokeColor?: string; strokeWidth?: string }\r\n  | { kind: 'c4'; c4Type: string; techn?: string; descr?: string }\r\n  | { kind: 'kanban'; assigned?: string; ticket?: string; priority?: string }\r\n  | { kind: 'sankey' }\r\n  /** 旅程圖任務:心情分數 1..5 與參與角色。 */\r\n  | { kind: 'journey'; score: number; actors: string[] }\r\n  /** 甘特任務:旗標(done/active/crit/milestone)+ 原始的起訖寫法(保留 after / 工期單位)。 */\r\n  | { kind: 'gantt'; flags: string[]; startRaw: string; endRaw: string; afterId?: string }\r\n  | { kind: 'pie'; value: number }\r\n  /** xychart 資料點:屬於第幾組系列、第幾個類別(值由節點的 y 決定)。 */\r\n  | { kind: 'xy'; series: number; index: number }\r\n  /** architecture 服務:圖示名(cloud/database/disk/server/internet)與是否為 junction。 */\r\n  | { kind: 'architecture'; icon?: string; junction?: boolean }\r\n  /** block 積木:占幾個欄位(位置決定它在網格的哪一格)。 */\r\n  | { kind: 'block'; span: number }\r\n  | { kind: 'packet' }\r\n  /** git 提交:type 沿用 mermaid 代碼(0 一般 / 1 REVERSE / 2 HIGHLIGHT / 3 MERGE);\r\n   *  合併節點另記來源分支(父子關係由指令順序推導,不必存)。 */\r\n  | { kind: 'gitgraph'; commitType: number; tags: string[]; mergeFrom?: string }\r\n  | { kind: 'note'; text: string };\r\n\r\n/** requirementDiagram 的節點:需求(有 id/text/風險/驗證方式)或元素(有型別/文件連結)。 */\r\nexport type RequirementData =\r\n  | {\r\n      element: false;\r\n      /** mermaid 關鍵字:requirement / functionalRequirement / …(見 REQ_TYPE_KEYWORD)。 */\r\n      reqType: ReqType;\r\n      reqId?: string;\r\n      text?: string;\r\n      risk?: ReqRisk;\r\n      verifyMethod?: ReqVerify;\r\n    }\r\n  | { element: true; elementType?: string; docRef?: string };\r\n\r\nexport type ReqType =\r\n  | 'requirement'\r\n  | 'functionalRequirement'\r\n  | 'interfaceRequirement'\r\n  | 'performanceRequirement'\r\n  | 'physicalRequirement'\r\n  | 'designConstraint';\r\nexport type ReqRisk = 'low' | 'medium' | 'high';\r\nexport type ReqVerify = 'analysis' | 'inspection' | 'test' | 'demonstration';\r\n/** quadrantChart 的圖表外框資訊(標題 / 兩軸端點文字 / 四個象限名)。點本身是場景節點。 */\r\nexport interface QuadrantMeta {\r\n  title?: string;\r\n  /** x 軸左右端文字(`x-axis 低 --> 高`);只給左端時 mermaid 也接受。 */\r\n  xAxis?: { left: string; right?: string };\r\n  yAxis?: { bottom: string; top?: string };\r\n  /** quadrant-1..4 的名稱(1=右上、2=左上、3=左下、4=右下,與 mermaid 一致)。 */\r\n  quadrants: [string?, string?, string?, string?];\r\n  /** 未模型化的設定行(%%{init}%% 之外的 `classDef` 等)逐字保留。 */\r\n  extraLines?: string[];\r\n}\r\n\r\n/** 甘特圖的圖表層設定。epoch = 第 0 天(UTC 毫秒),座標換算的原點。 */\r\nexport interface GanttMeta {\r\n  title?: string;\r\n  dateFormat?: string;\r\n  epoch?: number;\r\n  /** excludes / todayMarker / tickInterval 等 DB 未建模的設定行,逐字保留。 */\r\n  settings: string[];\r\n}\r\n\r\n/** xychart 的圖表層資訊。資料值本身由節點的 y 決定,這裡只留類別與系列的骨架。 */\r\nexport interface XyChartMeta {\r\n  title?: string;\r\n  xTitle?: string;\r\n  yTitle?: string;\r\n  yMin: number;\r\n  yMax: number;\r\n  categories: string[];\r\n  series: Array<{ kind: 'bar' | 'line'; name?: string; values: number[] }>;\r\n}\r\n\r\nexport type ReqRelation =\r\n  | 'contains'\r\n  | 'copies'\r\n  | 'derives'\r\n  | 'satisfies'\r\n  | 'verifies'\r\n  | 'refines'\r\n  | 'traces';\r\n\r\nexport interface ErAttribute {\r\n  name: string;\r\n  type?: string;\r\n  keys?: string[];\r\n  comment?: string;\r\n}\r\n\r\nexport interface SceneNode {\r\n  id: string;\r\n  shape: NodeShape;\r\n  /** 作者文字(可能含 <br/> / markdown)。 */\r\n  label: string;\r\n  labelKind?: LabelKind;\r\n  /** 場景座標(左上角)+ 尺寸,px。 */\r\n  x: number;\r\n  y: number;\r\n  w: number;\r\n  h: number;\r\n  /** subgraph / namespace / composite-state 的父容器 id。 */\r\n  parentId?: string | null;\r\n  data?: NodeData;\r\n  style?: ElementStyle;\r\n  /** 使用者手動定位 → 重排版不覆蓋。 */\r\n  pinned?: boolean;\r\n  /** parse 原序,供 serialize 穩定排序。 */\r\n  sourceIndex?: number;\r\n  /** 無法模型化的原始 token(exotic shape `@{...}` 等),serialize 逐字回吐。 */\r\n  raw?: string;\r\n}\r\n\r\nexport type EdgeData =\r\n  | { kind: 'flowchart' }\r\n  | { kind: 'state' }\r\n  | {\r\n      kind: 'sequence';\r\n      message: 'sync' | 'async' | 'return' | 'create' | 'destroy';\r\n      activate?: boolean;\r\n      order: number;\r\n    }\r\n  | {\r\n      kind: 'class';\r\n      relation: 'inheritance' | 'composition' | 'aggregation' | 'association' | 'dependency' | 'realization';\r\n      cardinalitySource?: string;\r\n      cardinalityTarget?: string;\r\n    }\r\n  | { kind: 'er'; identifying: boolean; cardStart?: ErCardinality; cardEnd?: ErCardinality }\r\n  | { kind: 'requirement'; relation: ReqRelation }\r\n  | { kind: 'c4'; relType: string; techn?: string; descr?: string }\r\n  /** sankey 的連線帶「流量」;線寬也依它決定。 */\r\n  | { kind: 'sankey'; value: number }\r\n  /** architecture 連線:兩端接在節點的哪一邊(T/B/L/R)。 */\r\n  | { kind: 'architecture'; fromSide: string; toSide: string };\r\n\r\n/** ER 連線端的基數(crow's foot)。 */\r\nexport type ErCardinality = 'zeroOrOne' | 'onlyOne' | 'zeroOrMore' | 'oneOrMore';\r\n\r\nexport interface SceneEdge {\r\n  id: string;\r\n  source: string;\r\n  target: string;\r\n  label?: string;\r\n  labelKind?: LabelKind;\r\n  lineKind: LineKind;\r\n  arrowStart: ArrowHead;\r\n  arrowEnd: ArrowHead;\r\n  /** 連線秩距(`---->` 的額外破折號數)。預設 1。 */\r\n  minLen?: number;\r\n  /** 使用者拗折的路徑點(Excalidraw 式)。 */\r\n  waypoints?: Point[];\r\n  /** 來源端固定錨點(draw.io 式)。未設 = 浮動(動態朝目標)。 */\r\n  sourceAnchor?: EdgeAnchor;\r\n  /** 目標端固定錨點(draw.io 式)。未設 = 浮動(動態朝來源)。 */\r\n  targetAnchor?: EdgeAnchor;\r\n  data?: EdgeData;\r\n  style?: ElementStyle;\r\n  sourceIndex?: number;\r\n}\r\n\r\n/** subgraph / cluster / namespace / composite-state 容器。 */\r\nexport interface SceneContainer {\r\n  id: string;\r\n  label: string;\r\n  x: number;\r\n  y: number;\r\n  w: number;\r\n  h: number;\r\n  parentId?: string | null;\r\n  childNodeIds: string[];\r\n  /** 子容器(巢狀 subgraph)。 */\r\n  childContainerIds?: string[];\r\n  /** 容器內方向(per-subgraph direction)。 */\r\n  direction?: FlowDirection;\r\n  /** C4 邊界的種類(ENTERPRISE / SYSTEM / CONTAINER / …),決定序列化用哪個關鍵字。 */\r\n  c4Type?: string;\r\n  sourceIndex?: number;\r\n}\r\n\r\nexport type FlowDirection = 'TB' | 'TD' | 'BT' | 'LR' | 'RL';\r\n\r\n/** 型別專屬場景中繼資料。 */\r\nexport type SceneMeta =\r\n  | { type: 'flowchart'; direction: FlowDirection }\r\n  | { type: 'state'; direction?: FlowDirection }\r\n  | { type: 'sequence'; autonumber: boolean }\r\n  | { type: 'class'; direction?: FlowDirection }\r\n  | { type: 'er'; direction?: FlowDirection }\r\n  | { type: 'mindmap' }\r\n  | { type: 'requirement'; direction?: FlowDirection }\r\n  | { type: 'quadrant'; quadrant: QuadrantMeta }\r\n  /** c4Type = C4Context / C4Container / C4Component / C4Dynamic / C4Deployment(決定標頭關鍵字)。 */\r\n  | { type: 'c4'; c4Type: string; title?: string }\r\n  | { type: 'kanban' }\r\n  | { type: 'sankey' }\r\n  | { type: 'journey'; title?: string }\r\n  | { type: 'gantt'; gantt: GanttMeta }\r\n  | { type: 'pie'; title?: string; showData: boolean }\r\n  | { type: 'xychart'; xy: XyChartMeta }\r\n  | { type: 'architecture' }\r\n  | { type: 'block'; columns: number }\r\n  /** relative = 原始碼用的是 +N 相對寬度而非絕對位元範圍;沿用作者的寫法。 */\r\n  | { type: 'packet'; title?: string; relative: boolean }\r\n  | { type: 'gitgraph' }\r\n  // timeline / orid 等「資料圖表」不吃 node/edge 場景,內容由 form 編輯器自管;此處只保留判別式。\r\n  | { type: 'timeline' }\r\n  | { type: 'orid' };\r\n\r\n/** round-trip 時 DB 看不到 / 尚未模型化的內容,逐字保留。 */\r\nexport interface SceneRaw {\r\n  /** %% 註解(含 %%{init}%%),帶行錨。 */\r\n  comments?: string[];\r\n  /** classDef / class / style / linkStyle 等樣式行,逐字。 */\r\n  styleLines?: string[];\r\n  /** click / href 等互動指令行,逐字。 */\r\n  clickLines?: string[];\r\n  /** parse 失敗時的完整原文(降級用)。 */\r\n  fullSource?: string;\r\n}\r\n\r\n/** sequence 圖以「依序的陳述串」建模(時間序,不吃通用 node/edge)。參與者另鏡像成 nodes 供選取。 */\r\nexport interface SeqParticipant {\r\n  id: string;\r\n  label: string;\r\n  actor: boolean;\r\n}\r\nexport type SeqStatement =\r\n  | { kind: 'message'; from: string; to: string; arrow: string; text: string; activate?: '+' | '-' }\r\n  | { kind: 'note'; placement: 'left of' | 'right of' | 'over'; actors: string; text: string }\r\n  | { kind: 'fragment'; keyword: string; label: string } // loop/alt/else/opt/par/and/critical/option/break/rect/box/...\r\n  | { kind: 'end' }\r\n  | { kind: 'activate'; actor: string }\r\n  | { kind: 'deactivate'; actor: string }\r\n  | { kind: 'raw'; text: string }; // 未模型化的行,逐字保留\r\nexport interface SequenceData {\r\n  autonumber: boolean;\r\n  participants: SeqParticipant[];\r\n  statements: SeqStatement[];\r\n}\r\n\r\nexport interface EditorScene {\r\n  version: 1;\r\n  diagramType: DiagramType;\r\n  meta: SceneMeta;\r\n  nodes: SceneNode[];\r\n  edges: SceneEdge[];\r\n  containers: SceneContainer[];\r\n  /** sequence 專屬資料(diagramType==='sequence' 時)。 */\r\n  sequence?: SequenceData;\r\n  /** 逐字保留的 YAML frontmatter(--- ... ---)。 */\r\n  frontmatter?: string;\r\n  raw?: SceneRaw;\r\n  layoutOwner: 'user' | 'engine';\r\n}\r\n\r\n/** 各圖種的空 meta(新增圖種時只要在這張表補一列)。 */\r\nconst EMPTY_META: Record<DiagramType, SceneMeta> = {\r\n  flowchart: { type: 'flowchart', direction: 'TB' },\r\n  state: { type: 'state' },\r\n  sequence: { type: 'sequence', autonumber: false },\r\n  class: { type: 'class' },\r\n  mindmap: { type: 'mindmap' },\r\n  requirement: { type: 'requirement' },\r\n  quadrant: { type: 'quadrant', quadrant: { quadrants: [] } },\r\n  c4: { type: 'c4', c4Type: 'C4Context' },\r\n  kanban: { type: 'kanban' },\r\n  sankey: { type: 'sankey' },\r\n  journey: { type: 'journey' },\r\n  gantt: { type: 'gantt', gantt: { settings: [] } },\r\n  pie: { type: 'pie', showData: false },\r\n  xychart: { type: 'xychart', xy: { categories: [], series: [], yMin: 0, yMax: 100 } },\r\n  architecture: { type: 'architecture' },\r\n  block: { type: 'block', columns: 1 },\r\n  packet: { type: 'packet', relative: false },\r\n  gitgraph: { type: 'gitgraph' },\r\n  timeline: { type: 'timeline' },\r\n  orid: { type: 'orid' },\r\n  er: { type: 'er' },\r\n};\r\n\r\n/** 建立一個空的 flowchart 場景。 */\r\nexport function emptyScene(diagramType: DiagramType = 'flowchart'): EditorScene {\r\n  const meta: SceneMeta = EMPTY_META[diagramType] ?? EMPTY_META.flowchart;\r\n  return {\r\n    version: 1,\r\n    diagramType,\r\n    meta,\r\n    nodes: [],\r\n    edges: [],\r\n    containers: [],\r\n    layoutOwner: 'user',\r\n  };\r\n}\r\n","// Headless 編輯器控制器:組裝 renderer + viewport + overlay + pointer + history,\r\n// 提供命令式 handle 與事件。框架無關;React 與 VS Code webview 各自包裝 UI。\r\n\r\nimport { assertBrowser } from '../../env';\r\nimport { loadMermaid } from '../load-mermaid';\r\nimport {\r\n  prepareSvgElement,\r\n  rasterizeToBlob,\r\n  svgBlob,\r\n  downloadBlob,\r\n  flattenForeignObjects,\r\n} from '../export';\r\nimport type { ExportRasterOptions, MermaidSource, MermaidTheme } from '../../types';\r\nimport { getAdapter, detectDiagramType, firstKeyword } from './adapters/registry';\r\nimport type { DiagramCapabilities } from './adapters/types';\r\nimport { createOridForm } from './form/orid-editor';\r\nimport { createTimelineForm } from './form/timeline-editor';\r\nimport type { FormEditorHandle } from './form/types';\r\nimport { mermaidSvgLayout } from './layout/mermaid-svg-layout';\r\nimport {\r\n  History,\r\n  cmdAddConnectedNode,\r\n  cmdAddContainer,\r\n  cmdAddElements,\r\n  cmdAddNode,\r\n  cmdAddSeqMessage,\r\n  cmdAddSeqNote,\r\n  cmdAddSeqParticipant,\r\n  cmdDeleteContainer,\r\n  cmdDeleteSeqParticipant,\r\n  cmdDeleteSeqStatement,\r\n  cmdSetContainerLabel,\r\n  cmdToggleSeqArrow,\r\n  cmdAlignNodes,\r\n  cmdDeleteSelection,\r\n  cmdDistributeNodes,\r\n  cmdGroup,\r\n  cmdMoveNodes,\r\n  cmdUngroup,\r\n  cmdSetDirection,\r\n  cmdSetEdgeData,\r\n  cmdSetEdgeStyle,\r\n  cmdSetEdgesStyle,\r\n  cmdRenameSeqParticipant,\r\n  cmdSetSeqMessageText,\r\n  cmdSetLabel,\r\n  cmdSetNodeData,\r\n  cmdSetNodeStyle,\r\n  cmdSetParent,\r\n  cmdSetShape,\r\n  type AlignAxis,\r\n  type Command,\r\n} from './interaction/commands';\r\nimport { NODE_PALETTE } from './render/palette';\r\nimport { classBoxSize, erEntitySize, requirementBoxSize, requirementRows } from './render/node-metrics';\r\nimport { nextEdgeId, nextNodeId, sceneRects } from './scene/scene-ops';\r\nimport { defaultShapeFor, makeEdgeFor, makeNodeFor } from './scene/node-factory';\r\nimport { laneRect } from './layout/lanes';\r\nimport { GIT_COMMIT_TYPES, gitLaneRect } from './round-trip/gitgraph';\r\nimport { shapeMeta } from './scene/shape-meta';\r\nimport { PointerController, type PointerHost, type Tool } from './interaction/pointer';\r\nimport { openTextEditor } from './interaction/text-edit';\r\nimport { Viewport } from './interaction/viewport';\r\nimport { Overlay } from './interaction/overlay';\r\nimport { SceneRenderer, type EditorLook } from './render/scene-renderer';\r\nimport { ensureEditorStyles } from './render/editor-styles';\r\nimport { ensureStyles } from '../ensure-styles';\r\nimport { svgEl } from './render/dom';\r\nimport { boundingBox, nodeRect } from './scene/geometry';\r\nimport { edgePoints } from './render/edges';\r\nimport { emptyScene } from './scene/types';\r\nimport type {\r\n  ArrowHead,\r\n  DiagramType,\r\n  EditorScene,\r\n  FlowDirection,\r\n  LineKind,\r\n  NodeShape,\r\n  Point,\r\n  ReqRelation,\r\n  RequirementData,\r\n  SceneNode,\r\n} from './scene/types';\r\nimport { renderDiagram } from '../render-pipeline';\r\n\r\nexport type EditorEvent =\r\n  | 'change'\r\n  | 'mermaidchange'\r\n  | 'selectionchange'\r\n  | 'toolchange'\r\n  | 'historychange'\r\n  | 'zoomchange'\r\n  | 'error';\r\n\r\nexport interface DiagramEditorOptions {\r\n  /** 初始 mermaid 文字(優先於 scene)。 */\r\n  source?: string;\r\n  /** 初始場景(無 source 時使用)。 */\r\n  scene?: EditorScene;\r\n  /** 如何取得 mermaid(parse / layout / 預覽用)。 */\r\n  mermaid?: MermaidSource;\r\n  dark?: boolean;\r\n  seed?: number;\r\n  fontUrl?: string;\r\n  /** 視覺風格:'sketch' 手繪(預設) / 'clean' 俐落圓角+柔和陰影(貼近 colorful)。 */\r\n  look?: EditorLook;\r\n  /** mermaidchange 防抖毫秒,預設 250。 */\r\n  debounceMs?: number;\r\n}\r\n\r\nexport interface DiagramEditorHandle {\r\n  getScene(): EditorScene;\r\n  toMermaid(): string;\r\n  loadSource(text: string): Promise<void>;\r\n  loadScene(scene: EditorScene): void;\r\n\r\n  setTool(tool: Tool): void;\r\n  getTool(): Tool;\r\n  setCreateShape(shape: NodeShape): void;\r\n  /** 直接在畫布中央放一個節點(可選外形),選取並進入改名。回傳新節點 id。 */\r\n  addNode(shape?: NodeShape): string;\r\n  /** 變更既有節點的外形。 */\r\n  setNodeShape(id: string, shape: NodeShape): void;\r\n  /** 變更 flowchart 方向(TB/LR/…)。 */\r\n  setDirection(dir: FlowDirection): void;\r\n  /** 變更連線樣式(線型 / 箭頭)。 */\r\n  setEdgeStyle(edgeId: string, patch: Partial<{ lineKind: LineKind; arrowStart: ArrowHead; arrowEnd: ArrowHead }>): void;\r\n  /** 目前圖種的能力(支援的外形 / 線型 / 箭頭),供工具列建構控制項。null = 找不到 adapter。 */\r\n  getCapabilities(): DiagramCapabilities | null;\r\n  /** 「新連線」目前的預設樣式(線型 / 箭頭)。 */\r\n  getEdgeStyleDefault(): { lineKind: LineKind; arrowStart: ArrowHead; arrowEnd: ArrowHead };\r\n  /**\r\n   * 套用連線樣式:更新「新連線」預設,並一併套到目前選取的連線(若有,單一 undo)。\r\n   * 會過濾掉目前圖種不支援的線型 / 箭頭,確保永遠序列化成合法 mermaid。\r\n   */\r\n  applyEdgeStyle(patch: Partial<{ lineKind: LineKind; arrowStart: ArrowHead; arrowEnd: ArrowHead }>): void;\r\n\r\n  undo(): void;\r\n  redo(): void;\r\n  canUndo(): boolean;\r\n  canRedo(): boolean;\r\n\r\n  selectAll(): void;\r\n  clearSelection(): void;\r\n  deleteSelection(): void;\r\n  getSelection(): string[];\r\n\r\n  zoomIn(): void;\r\n  zoomOut(): void;\r\n  fit(): void;\r\n  resetView(): void;\r\n  getZoomPercent(): number;\r\n  /** 用排版引擎重新整理目前圖的座標(一鍵整版)。 */\r\n  tidy(): Promise<void>;\r\n  /** 複製選取的節點(+其間的邊)並貼上偏移副本。 */\r\n  duplicateSelection(): void;\r\n  /** 把選取的節點群組成一個 subgraph 容器。 */\r\n  groupSelection(): void;\r\n  /** 設定節點底色 + 框線色。 */\r\n  setNodeColor(id: string, fill: string, stroke: string): void;\r\n  /** 對齊多個選取節點。 */\r\n  alignSelection(axis: AlignAxis): void;\r\n  /** 均分:3+ 個選取節點在水平/垂直方向等距分佈。 */\r\n  distributeSelection(axis: 'h' | 'v'): void;\r\n  /** 解除節點所屬的 subgraph 群組(若有)。 */\r\n  ungroupNode(nodeId: string): void;\r\n\r\n  // ── sequence 專屬 ── 這些動作以前只存在於右鍵選單,等於「不右鍵就發現不了」。\r\n  // 開成 public API,host 的工具列(React 版與 VS Code webview 版)才能各自擺按鈕。\r\n  /** 新增一位參與者,並直接進入改名。 */\r\n  addSeqParticipant(): void;\r\n  /** 在最後附加一則訊息,並直接進入編輯文字。 */\r\n  addSeqMessage(): void;\r\n  /** 在最後附加一則筆記,並直接進入編輯文字。 */\r\n  addSeqNote(): void;\r\n  /** 切換某則訊息的實線 / 虛線箭頭;省略 index 時作用於目前選取的那則。 */\r\n  toggleSeqArrow(index?: number): void;\r\n  /** 編輯目前選取對象的文字(參與者改名 / 訊息與筆記改內容)。 */\r\n  editSelection(): void;\r\n\r\n  setDark(dark: boolean): void;\r\n\r\n  getSvg(): SVGSVGElement;\r\n  exportSvg(): string;\r\n  exportPng(opts?: ExportRasterOptions): Promise<Blob>;\r\n  downloadSvg(filename?: string): void;\r\n  downloadPng(filename?: string, opts?: ExportRasterOptions): Promise<void>;\r\n  /** 把目前圖以 PNG 寫入剪貼簿(對標 draw.io / Excalidraw 的「複製為圖片」)。需安全環境 + 使用者手勢。 */\r\n  copyPngToClipboard(opts?: ExportRasterOptions): Promise<void>;\r\n  /** 顯示 / 隱藏鍵盤快捷鍵說明浮層(? 鍵亦可)。 */\r\n  toggleHelp(show?: boolean): void;\r\n  /** 切換手繪(sketch)/ 簡潔(clean)外觀(致敬 Excalidraw 的手繪風)。 */\r\n  setLook(look: EditorLook): void;\r\n  getLook(): EditorLook;\r\n\r\n  /** 用既有 render-pipeline 在 container 渲染目前場景的「美化預覽」。 */\r\n  renderPreview(container: HTMLElement, theme?: MermaidTheme): Promise<void>;\r\n\r\n  on(event: EditorEvent, cb: (payload?: unknown) => void): () => void;\r\n  destroy(): void;\r\n}\r\n\r\n// 走 form 子編輯器(而非畫布)的圖種。這些是「資料圖表」——\r\n// timeline 是 section/period/event、orid 是四階段條列 —— 都沒有座標可拖,\r\n// 硬塞進畫布只會做出一個不能存回原始碼的假編輯。關鍵字 → 建構子的對照表。\r\nconst FORM_FACTORIES: Record<\r\n  string,\r\n  { type: DiagramType; create: (host: HTMLElement, o: FormFactoryOptions) => FormEditorHandle }\r\n> = {\r\n  timeline: { type: 'timeline', create: createTimelineForm },\r\n  orid: { type: 'orid', create: createOridForm },\r\n};\r\n\r\ninterface FormFactoryOptions {\r\n  mermaid?: MermaidSource;\r\n  dark?: boolean;\r\n  fontUrl?: string;\r\n  emit?: (event: string, payload?: unknown) => void;\r\n}\r\n\r\n// 右鍵可快速切換的外形 = 目前圖種 adapter 宣告支援的外形。\r\n// (先前寫死 flowchart 那 11 種,於是在狀態圖 / 類別圖 / ER 圖上按右鍵會看到一排「圓柱、梯形」,\r\n//  按下去就把節點改成該圖種序列化不出來的外形。)\r\nconst ctxShapesFor = (caps: DiagramCapabilities | null): NodeShape[] => caps?.shapes ?? [];\r\n\r\n// requirementDiagram 的七種追溯關係(右鍵切換用;它取代了一般圖種的線型 / 箭頭選單)。\r\nconst REQ_RELATIONS: ReqRelation[] = [\r\n  'contains',\r\n  'copies',\r\n  'derives',\r\n  'satisfies',\r\n  'verifies',\r\n  'refines',\r\n  'traces',\r\n];\r\nconst REQ_RELATION_LABEL: Record<ReqRelation, string> = {\r\n  contains: 'contains(包含)',\r\n  copies: 'copies(複製)',\r\n  derives: 'derives(衍生)',\r\n  satisfies: 'satisfies(滿足)',\r\n  verifies: 'verifies(驗證)',\r\n  refines: 'refines(細化)',\r\n  traces: 'traces(追溯)',\r\n};\r\n\r\n/** ER 實體 / class 節點 → 可編輯多行文字(第一行=名稱,其餘=屬性 / 成員)。 */\r\nfunction nodeToEditText(node: SceneNode): string {\r\n  if (node.data?.kind === 'er') {\r\n    const rows = node.data.attributes.map((a) =>\r\n      `${a.type ?? ''} ${a.name}${a.keys && a.keys.length ? ' ' + a.keys.join(',') : ''}${a.comment ? ' \"' + a.comment + '\"' : ''}`.trim(),\r\n    );\r\n    return [node.label, ...rows].join('\\n');\r\n  }\r\n  if (node.data?.kind === 'class') {\r\n    const rows = [\r\n      ...(node.data.stereotype ? [`<<${node.data.stereotype}>>`] : []),\r\n      ...node.data.members,\r\n      ...node.data.methods,\r\n    ];\r\n    return [node.label, ...rows].join('\\n');\r\n  }\r\n  if (node.data?.kind === 'requirement') {\r\n    return [node.label, ...requirementRows(node.data.req)].join('\\n');\r\n  }\r\n  return node.label;\r\n}\r\n\r\n/** 「欄位: 值」多行文字 → 需求 / 元素資料。欄位名不分大小寫,未知欄位忽略。 */\r\nfunction parseRequirementText(prev: RequirementData, rest: string[]): RequirementData {\r\n  const field = new Map<string, string>();\r\n  for (const line of rest) {\r\n    const m = /^([A-Za-z]+)\\s*[:：]\\s*(.*)$/.exec(line);\r\n    if (m) field.set(m[1].toLowerCase(), m[2].trim());\r\n  }\r\n  if (prev.element) {\r\n    return {\r\n      element: true,\r\n      elementType: field.get('type') ?? prev.elementType,\r\n      docRef: field.get('docref') ?? prev.docRef,\r\n    };\r\n  }\r\n  const risk = field.get('risk');\r\n  const verify = field.get('verify') ?? field.get('verifymethod');\r\n  const oneOf = <T extends string>(list: readonly T[], v: string | undefined, fallback: T | undefined): T | undefined =>\r\n    (list as readonly string[]).includes(v ?? '') ? (v as T) : fallback;\r\n  return {\r\n    element: false,\r\n    reqType: prev.reqType,\r\n    reqId: field.get('id') ?? prev.reqId,\r\n    text: field.get('text') ?? prev.text,\r\n    risk: oneOf(['low', 'medium', 'high'] as const, risk?.toLowerCase(), prev.risk),\r\n    verifyMethod: oneOf(\r\n      ['analysis', 'inspection', 'test', 'demonstration'] as const,\r\n      verify?.toLowerCase(),\r\n      prev.verifyMethod,\r\n    ),\r\n  };\r\n}\r\n\r\n/** 多行編輯文字 → 節點 patch(label + data + 重算尺寸)。 */\r\nfunction parseEditText(\r\n  node: SceneNode,\r\n  value: string,\r\n): { label: string; data: SceneNode['data']; w: number; h: number } | null {\r\n  const lines = value.split('\\n');\r\n  const label = (lines[0] ?? '').trim() || node.id;\r\n  const rest = lines.slice(1).map((l) => l.trim()).filter(Boolean);\r\n  if (node.data?.kind === 'er') {\r\n    const attributes = rest.map((line) => {\r\n      let comment: string | undefined;\r\n      let body = line.replace(/\"([^\"]*)\"\\s*$/, (_m, c) => {\r\n        comment = c;\r\n        return '';\r\n      });\r\n      const tok = body.trim().split(/\\s+/);\r\n      const type = tok[0] ?? 'string';\r\n      const name = tok[1] ?? tok[0] ?? '';\r\n      const keys = tok\r\n        .slice(2)\r\n        .flatMap((k) => k.split(','))\r\n        .filter((k) => /^(PK|FK|UK)$/i.test(k))\r\n        .map((k) => k.toUpperCase());\r\n      return { name, type, keys: keys.length ? keys : undefined, comment };\r\n    });\r\n    return { label, data: { kind: 'er', attributes }, ...erEntitySize(label, attributes) };\r\n  }\r\n  if (node.data?.kind === 'class') {\r\n    let stereotype: string | undefined;\r\n    const members: string[] = [];\r\n    const methods: string[] = [];\r\n    for (const l of rest) {\r\n      const st = l.match(/^«?<<?\\s*(.+?)\\s*>>?»?$/);\r\n      if (st && /<</.test(l)) {\r\n        stereotype = st[1];\r\n        continue;\r\n      }\r\n      if (l.includes('(')) methods.push(l);\r\n      else members.push(l);\r\n    }\r\n    const generic = node.data?.kind === 'class' ? node.data.generic : undefined;\r\n    return {\r\n      label,\r\n      data: { kind: 'class', members, methods, stereotype, generic },\r\n      ...classBoxSize(label, { members, methods, stereotype, generic }),\r\n    };\r\n  }\r\n  if (node.data?.kind === 'requirement') {\r\n    const req = parseRequirementText(node.data.req, rest);\r\n    return { label, data: { kind: 'requirement', req }, ...requirementBoxSize(label, req) };\r\n  }\r\n  return null;\r\n}\r\n\r\nexport function createDiagramEditor(host: HTMLElement, opts: DiagramEditorOptions = {}): DiagramEditorHandle {\r\n  assertBrowser('createDiagramEditor');\r\n  ensureStyles(); // 基礎 .rsm-toolbar / .rsm-btn 樣式(讓內建工具列不依賴頁面是否另有 MermaidViewer)\r\n  ensureEditorStyles();\r\n\r\n  // 容器結構。\r\n  if (getComputedStyle(host).position === 'static') host.style.position = 'relative';\r\n  host.classList.add('rsm-editor-root');\r\n  if (opts.look === 'clean') host.classList.add('rsm-clean');\r\n  let dark = opts.dark ?? false;\r\n  if (dark) host.classList.add('rsm-dark');\r\n\r\n  const svg = svgEl('svg', { class: 'rsm-editor-svg' }) as SVGSVGElement;\r\n  svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\r\n  host.appendChild(svg);\r\n\r\n  const listeners = new Map<EditorEvent, Set<(p?: unknown) => void>>();\r\n  const emit = (e: EditorEvent, p?: unknown): void => {\r\n    listeners.get(e)?.forEach((cb) => cb(p));\r\n  };\r\n\r\n  const renderer = new SceneRenderer({ dark, seed: opts.seed, fontUrl: opts.fontUrl, look: opts.look });\r\n  const viewport = new Viewport(svg, {\r\n    onChange: () => emit('zoomchange', viewport.getZoomPercent()),\r\n  });\r\n  svg.appendChild(viewport.group);\r\n  renderer.mount(viewport.group);\r\n  const overlay = new Overlay(renderer.overlayLayer);\r\n  const history = new History();\r\n\r\n  // 空白畫布引導提示(對標 Excalidraw / draw.io)。grace 期間隱藏,避免載入既有圖時閃現。\r\n  const emptyHint = document.createElement('div');\r\n  emptyHint.className = 'rsm-empty-hint';\r\n  host.appendChild(emptyHint);\r\n  let emptyHintGrace = true;\r\n  const graceTimer = setTimeout(() => {\r\n    emptyHintGrace = false;\r\n    updateEmptyHint();\r\n  }, 600);\r\n  // 空白畫布的起手範本(對標付費工具的範本庫)。每個可拖拉繪製的圖種都要有一個入口 ——\r\n  // 否則使用者在空白畫布上根本無從得知這個編輯器還會畫看板 / 象限圖 / C4。\r\n  // 空白畫布上的一行引導:操作方式與別的圖種明顯不同的才需要自己的說法。\r\n  const EMPTY_HINT: Partial<Record<DiagramType, string>> = {\r\n    sequence: '空白序列圖 — 在空白處按右鍵：新增參與者 / 訊息',\r\n    mindmap: '空白心智圖 — 點上方外形按鈕放下主題，再從節點拉線長出分支',\r\n    quadrant: '空白象限圖 — 雙擊格線上任一處放一個資料點，拖曳它就是在改它的值',\r\n    gitgraph: '空白 Git 線圖 — 在空白處按右鍵：新增分支 / 提交；左右拖改順序、上下拖換分支',\r\n  };\r\n  const STARTERS: Array<[string, string]> = [\r\n    ['流程圖', 'flowchart TD\\n  A[開始] --> B{判斷}\\n  B -->|是| C[處理]\\n  B -->|否| D[結束]'],\r\n    ['序列圖', 'sequenceDiagram\\n  使用者->>系統: 請求\\n  系統-->>使用者: 回應'],\r\n    ['類別圖', 'classDiagram\\n  class Animal {\\n    +name string\\n    +move()\\n  }\\n  Animal <|-- Dog'],\r\n    ['狀態圖', 'stateDiagram-v2\\n  [*] --> 閒置\\n  閒置 --> 執行中: 啟動\\n  執行中 --> [*]: 完成'],\r\n    ['ER 圖', 'erDiagram\\n  CUSTOMER ||--o{ ORDER : places\\n  ORDER {\\n    int id PK\\n    int customerId FK\\n  }'],\r\n    ['心智圖', 'mindmap\\n  root((主題))\\n    分支A\\n    分支B\\n      子項'],\r\n    [\r\n      'C4 情境圖',\r\n      'C4Context\\n  title 系統情境圖\\n  Person(user, \"使用者\", \"使用系統的人\")\\n' +\r\n        '  System(app, \"本系統\", \"提供服務\")\\n  Rel(user, app, \"使用\", \"HTTPS\")',\r\n    ],\r\n    [\r\n      '需求圖',\r\n      'requirementDiagram\\n  requirement req1 {\\n    id: 1\\n    text: \"待填寫需求描述\"\\n    risk: medium\\n    verifymethod: test\\n  }\\n' +\r\n        '  element impl {\\n    type: simulation\\n  }\\n  impl - satisfies -> req1',\r\n    ],\r\n    ['看板', 'kanban\\n  todo[待辦]\\n    [第一張卡片]\\n  doing[進行中]\\n  done[完成]'],\r\n    ['旅程圖', 'journey\\n  title 我的一天\\n  section 早上\\n    起床: 3: 我\\n  section 下午\\n    寫程式: 5: 我'],\r\n    [\r\n      '象限圖',\r\n      'quadrantChart\\n  title 專案評估\\n  x-axis 低成本 --> 高成本\\n  y-axis 低效益 --> 高效益\\n' +\r\n        '  quadrant-1 該做\\n  quadrant-2 快贏\\n  quadrant-3 別做\\n  quadrant-4 再想想\\n  範例: [0.4, 0.6]',\r\n    ],\r\n    ['流量圖', 'sankey-beta\\n\\nGrid,Homes,30\\nGrid,Industry,45'],\r\n    [\r\n      '甘特圖',\r\n      'gantt\\n  title 專案時程\\n  dateFormat YYYY-MM-DD\\n  section 階段一\\n' +\r\n        '    第一項任務 :a1, 2026-01-01, 7d\\n    第二項任務 :after a1, 5d',\r\n    ],\r\n    ['圓餅圖', 'pie showData title 佔比\\n    \"第一項\" : 50\\n    \"第二項\" : 30\\n    \"第三項\" : 20'],\r\n    [\r\n      'XY 圖',\r\n      'xychart-beta\\n    title \"趨勢\"\\n    x-axis [Q1, Q2, Q3, Q4]\\n    y-axis \"數值\" 0 --> 100\\n' +\r\n        '    bar [30, 55, 80, 62]',\r\n    ],\r\n    [\r\n      '架構圖',\r\n      'architecture-beta\\n    group api(cloud)[系統]\\n    service db(database)[資料庫] in api\\n' +\r\n        '    service server(server)[伺服器] in api\\n    db:L -- R:server',\r\n    ],\r\n    ['積木圖', 'block-beta\\n  columns 3\\n  a[\"前端\"] b[\"後端\"] c[(\"資料庫\")]\\n  a --> b'],\r\n    ['封包圖', 'packet-beta\\ntitle 封包\\n0-15: \"來源埠\"\\n16-31: \"目的埠\"'],\r\n    [\r\n      'Git 線圖',\r\n      'gitGraph\\n   commit id: \"初始\"\\n   branch feature\\n   commit id: \"開發\"\\n' +\r\n        '   checkout main\\n   commit id: \"修正\"\\n   merge feature tag: \"v1.0\"',\r\n    ],\r\n    ['時間軸', 'timeline\\n  title 時間軸標題\\n  section 區段一\\n    時間點 : 事件'],\r\n    [\r\n      'ORID',\r\n      'orid\\n    title ORID 焦點討論\\n    objective\\n        看到的事實一\\n        看到的事實二\\n' +\r\n        '    reflective\\n        當下的感受\\n    interpretive\\n        這代表什麼\\n' +\r\n        '    decisional\\n        下一步要做什麼',\r\n    ],\r\n  ];\r\n  function updateEmptyHint(): void {\r\n    if (formActive) {\r\n      emptyHint.classList.remove('rsm-empty-show');\r\n      return; // form 模式有自己的 UI,畫布引導提示永遠不顯示\r\n    }\r\n    const seqHasParts = scene.diagramType === 'sequence' && (scene.sequence?.participants.length ?? 0) > 0;\r\n    const empty = scene.nodes.length === 0 && scene.containers.length === 0 && !seqHasParts;\r\n    if (emptyHintGrace || !empty) {\r\n      emptyHint.classList.remove('rsm-empty-show');\r\n      return;\r\n    }\r\n    while (emptyHint.firstChild) emptyHint.removeChild(emptyHint.firstChild);\r\n    const hintText = document.createElement('div');\r\n    hintText.className = 'rsm-empty-text';\r\n    hintText.textContent =\r\n      EMPTY_HINT[scene.diagramType] ?? '空白畫布 — 點上方外形按鈕新增節點，從節點邊緣白點拉出連線';\r\n    emptyHint.appendChild(hintText);\r\n    const sub = document.createElement('div');\r\n    sub.className = 'rsm-empty-sub';\r\n    sub.textContent = '或從範本開始：';\r\n    emptyHint.appendChild(sub);\r\n    const row = document.createElement('div');\r\n    row.className = 'rsm-empty-starters';\r\n    for (const [label, src] of STARTERS) {\r\n      const btn = document.createElement('button');\r\n      btn.type = 'button';\r\n      btn.className = 'rsm-empty-starter';\r\n      btn.textContent = label;\r\n      btn.addEventListener('click', () => void handle.loadSource(src).catch(() => {}));\r\n      row.appendChild(btn);\r\n    }\r\n    emptyHint.appendChild(row);\r\n    emptyHint.classList.add('rsm-empty-show');\r\n  }\r\n\r\n  let scene: EditorScene = opts.scene ?? emptyScene('flowchart');\r\n  let diagramType: DiagramType = scene.diagramType;\r\n  let createShape: NodeShape = 'rectangle';\r\n  // 「新連線」的預設樣式(線型 / 箭頭);工具列可改,拉新線時套用。隨圖種重設(見 resetEdgeDefault)。\r\n  let createEdge: { lineKind: LineKind; arrowStart: ArrowHead; arrowEnd: ArrowHead } = {\r\n    lineKind: 'solid',\r\n    arrowStart: 'none',\r\n    arrowEnd: 'arrow',\r\n  };\r\n  let cancelTextEdit: (() => void) | null = null;\r\n  let debounceTimer: ReturnType<typeof setTimeout> | null = null;\r\n  // timeline / orid 等「資料圖表」不吃畫布拖拉,改走結構化 form 子編輯器(惰性建立、接管 handle 子集)。\r\n  let form: FormEditorHandle | null = null;\r\n  /** 目前這個 form 實例是哪一種(切換圖種時要整個換掉,不能沿用)。 */\r\n  let formKeyword: string | null = null;\r\n  let formActive = false;\r\n\r\n  const adapterFor = (type: DiagramType) => getAdapter(type) ?? getAdapter('flowchart');\r\n\r\n  // 載入新圖時把「新節點外形 / 新連線樣式」重設成該圖種的合宜值\r\n  // (避免上一張流程圖選的菱形、箭頭被帶到類別圖那種根本畫不出來的圖種)。\r\n  const resetEdgeDefault = (): void => {\r\n    const caps = adapterFor(diagramType)?.capabilities;\r\n    createEdge = { lineKind: 'solid', arrowStart: 'none', arrowEnd: caps?.defaults.arrowEnd ?? 'arrow' };\r\n    createShape = caps?.defaults.nodeShape ?? defaultShapeFor(diagramType);\r\n  };\r\n\r\n  const emitMermaidDebounced = (): void => {\r\n    if (debounceTimer) clearTimeout(debounceTimer);\r\n    debounceTimer = setTimeout(() => {\r\n      try {\r\n        emit('mermaidchange', handle.toMermaid());\r\n      } catch (err) {\r\n        emit('error', err);\r\n      }\r\n    }, opts.debounceMs ?? 250);\r\n  };\r\n\r\n  /** 目前選到的是哪一則 sequence 陳述(訊息 / 筆記)。它們不是 node,以 `seq:{index}` 進選取集合。 */\r\n  const selectedSeqStatement = (): number | null => {\r\n    for (const id of pointer.getSelection()) {\r\n      const m = /^seq:(\\d+)$/.exec(id);\r\n      if (m) return Number(m[1]);\r\n    }\r\n    return null;\r\n  };\r\n\r\n  const refreshOverlay = (): void => {\r\n    const ids = pointer.getSelection();\r\n    const idSet = new Set(ids);\r\n    const zoom = viewport.getZoom();\r\n    const nodeRects = ids\r\n      .map((id) => scene.nodes.find((n) => n.id === id))\r\n      .filter((n): n is NonNullable<typeof n> => Boolean(n))\r\n      .map((n) => ({ id: n.id, rect: nodeRect(n) }));\r\n    // sequence 的訊息 / 筆記不是 node 也不是 edge,以 `seq:{index}` 假 id 進選取集合;矩形跟\r\n    // 渲染器要(它畫的時候順手記下來了)。沒有這一段,點到訊息就完全沒有「我選到東西了」的回饋。\r\n    for (const id of ids) {\r\n      const seq = /^seq:(\\d+)$/.exec(id);\r\n      const rect = seq ? renderer.getSeqMsgRect(Number(seq[1])) : undefined;\r\n      if (rect) nodeRects.push({ id, rect });\r\n    }\r\n    // sequence 參與者不可自由縮放(寬度由標籤決定、放手不寫回 code)→ 不顯示縮放控制點。\r\n    overlay.showSelection(nodeRects, zoom, { handles: nodeRects.length === 1 && scene.diagramType !== 'sequence' });\r\n    // 選取的連線高亮(點到線即可選取並看到回饋)。\r\n    const edgePathsList = scene.edges\r\n      .filter((e) => idSet.has(e.id))\r\n      .map((e) => edgePoints(scene, e))\r\n      .filter((p): p is Point[] => Boolean(p));\r\n    overlay.showEdges(edgePathsList, zoom);\r\n  };\r\n\r\n  const setScene = (next: EditorScene, opts2: { render?: boolean } = {}): void => {\r\n    scene = next;\r\n    diagramType = next.diagramType;\r\n    if (opts2.render !== false) renderer.render(scene);\r\n    refreshOverlay();\r\n    updateEmptyHint();\r\n    emit('change', scene);\r\n    emit('historychange', { canUndo: history.canUndo(), canRedo: history.canRedo() });\r\n    emitMermaidDebounced();\r\n  };\r\n\r\n  const pointerHost: PointerHost = {\r\n    getScene: () => scene,\r\n    viewport,\r\n    renderer,\r\n    overlay,\r\n    runCommand: (cmd: Command, label: string) => {\r\n      const { scene: next } = history.run(scene, cmd, label);\r\n      setScene(next);\r\n    },\r\n    refreshOverlay,\r\n    requestTextEdit: (nodeId: string) => openEditor(nodeId),\r\n    requestEdgeLabelEdit: (edgeId: string) => openEdgeEditor(edgeId),\r\n    requestSeqMessageEdit: (index: number) => openSeqMessageEditor(index),\r\n    onSelectionChange: (ids) => emit('selectionchange', ids),\r\n    onToolChange: (tool) => emit('toolchange', tool),\r\n    createShape: () => createShape,\r\n    createEdgeStyle: () => createEdge,\r\n    supportsEdges: () => adapterFor(diagramType)?.capabilities.supportsEdges !== false,\r\n  };\r\n\r\n  const pointer = new PointerController(svg, pointerHost);\r\n\r\n  function openEditor(nodeId: string): void {\r\n    const node = scene.nodes.find((n) => n.id === nodeId);\r\n    if (!node) return;\r\n    cancelTextEdit?.();\r\n    const tl = viewport.worldToScreen({ x: node.x, y: node.y });\r\n    const z = viewport.getZoom();\r\n    // ER 實體 / class 用「多行結構編輯」(第一行=名稱,其餘=屬性 / 成員)。\r\n    const structured =\r\n      node.data?.kind === 'er' || node.data?.kind === 'class' || node.data?.kind === 'requirement';\r\n    const initial = structured ? nodeToEditText(node) : node.label;\r\n    const editW = Math.max(node.w, structured ? 200 : 0);\r\n    const editH = Math.max(node.h, structured ? 120 : 0);\r\n    // 延後到目前 click/pointer 事件完全結束才建立並聚焦 textarea。否則原生點擊收尾會把焦點\r\n    // 搶回畫布,textarea 一聚焦就立刻 blur 關閉 → 看起來「雙擊無法編輯」。\r\n    const timer = setTimeout(() => {\r\n      cancelTextEdit = openTextEditor(\r\n        host,\r\n        { left: tl.x, top: tl.y, width: editW * z, height: editH * z },\r\n        initial,\r\n        (value) => {\r\n          cancelTextEdit = null;\r\n          const cur = scene.nodes.find((n) => n.id === nodeId);\r\n          if (!cur) return;\r\n          if (structured) {\r\n            const patch = parseEditText(cur, value);\r\n            if (patch) pointerHost.runCommand(cmdSetNodeData(nodeId, patch), 'edit-node');\r\n          } else if (cur.data?.kind === 'sequence') {\r\n            // sequence 參與者:改名同步到 scene.sequence(序列化來源)。\r\n            if (value !== cur.label) pointerHost.runCommand(cmdRenameSeqParticipant(nodeId, value), 'rename');\r\n          } else if (value !== cur.label) {\r\n            // 只有 label 真的改變才入命令 —— 避免新增節點後 blur 自動 commit 空字串產生贅餘 undo。\r\n            pointerHost.runCommand(cmdSetLabel(nodeId, value), 'label');\r\n          }\r\n        },\r\n        () => {\r\n          cancelTextEdit = null;\r\n        },\r\n        { multiline: structured },\r\n      );\r\n    }, 0);\r\n    cancelTextEdit = () => clearTimeout(timer);\r\n  }\r\n\r\n  function openSeqMessageEditor(index: number): void {\r\n    if (!scene.sequence) return;\r\n    const stmt = scene.sequence.statements[index];\r\n    if (!stmt || stmt.kind !== 'message') return;\r\n    const rect = renderer.getSeqMsgRect(index);\r\n    if (!rect) return;\r\n    const z = viewport.getZoom();\r\n    const s = viewport.worldToScreen({ x: rect.x, y: rect.y });\r\n    const initial = stmt.text ?? '';\r\n    cancelTextEdit?.();\r\n    const timer = setTimeout(() => {\r\n      cancelTextEdit = openTextEditor(\r\n        host,\r\n        { left: s.x, top: s.y, width: Math.max(120, rect.w * z), height: 26 },\r\n        initial,\r\n        (value) => {\r\n          cancelTextEdit = null;\r\n          const cur = scene.sequence?.statements[index];\r\n          if (cur && cur.kind === 'message' && value !== (cur.text ?? '')) {\r\n            pointerHost.runCommand(cmdSetSeqMessageText(index, value), 'seq-msg');\r\n          }\r\n        },\r\n        () => {\r\n          cancelTextEdit = null;\r\n        },\r\n      );\r\n    }, 0);\r\n    cancelTextEdit = () => clearTimeout(timer);\r\n  }\r\n\r\n  /** 泳道欄名的就地編輯(欄標題就畫在欄框左上角)。 */\r\n  function openLaneEditor(containerId: string): void {\r\n    const lane = scene.containers.find((c) => c.id === containerId);\r\n    if (!lane) return;\r\n    const z = viewport.getZoom();\r\n    const s = viewport.worldToScreen({ x: lane.x + 8, y: lane.y + 4 });\r\n    cancelTextEdit?.();\r\n    const timer = setTimeout(() => {\r\n      cancelTextEdit = openTextEditor(\r\n        host,\r\n        { left: s.x, top: s.y, width: Math.max(120, (lane.w - 16) * z), height: 28 },\r\n        lane.label,\r\n        (value) => {\r\n          cancelTextEdit = null;\r\n          const cur = scene.containers.find((c) => c.id === containerId);\r\n          if (cur && value !== cur.label) pointerHost.runCommand(cmdSetContainerLabel(containerId, value), 'lane-name');\r\n        },\r\n        () => {\r\n          cancelTextEdit = null;\r\n        },\r\n      );\r\n    }, 0);\r\n    cancelTextEdit = () => clearTimeout(timer);\r\n  }\r\n\r\n  /** git 提交的標籤(tag)就地編輯 —— 標籤畫在圓點正上方,編輯框就開在那裡。 */\r\n  function openGitTagEditor(nodeId: string): void {\r\n    const node = scene.nodes.find((n) => n.id === nodeId);\r\n    if (!node) return;\r\n    const d = node.data?.kind === 'gitgraph' ? node.data : undefined;\r\n    const s = viewport.worldToScreen({ x: node.x + node.w / 2, y: node.y - 12 });\r\n    cancelTextEdit?.();\r\n    const timer = setTimeout(() => {\r\n      cancelTextEdit = openTextEditor(\r\n        host,\r\n        { left: s.x - 60, top: s.y - 14, width: 120, height: 28 },\r\n        d?.tags?.[0] ?? '',\r\n        (value) => {\r\n          cancelTextEdit = null;\r\n          const cur = scene.nodes.find((n) => n.id === nodeId);\r\n          const cd = cur?.data?.kind === 'gitgraph' ? cur.data : undefined;\r\n          if (!cd) return;\r\n          const tag = value.trim();\r\n          if (tag === (cd.tags[0] ?? '')) return;\r\n          pointerHost.runCommand(\r\n            cmdSetNodeData(nodeId, { data: { ...cd, tags: tag ? [tag] : [] } }),\r\n            'git-tag',\r\n          );\r\n        },\r\n        () => {\r\n          cancelTextEdit = null;\r\n        },\r\n      );\r\n    }, 0);\r\n    cancelTextEdit = () => clearTimeout(timer);\r\n  }\r\n\r\n  function openEdgeEditor(edgeId: string): void {\r\n    const edge = scene.edges.find((e) => e.id === edgeId);\r\n    if (!edge) return;\r\n    // sankey 的連線沒有自由文字,它的「標籤」就是流量數值 → 編輯的是數字。\r\n    const isFlow = edge.data?.kind === 'sankey';\r\n    const pts = edgePoints(scene, edge);\r\n    if (!pts || pts.length === 0) return;\r\n    const i = Math.floor((pts.length - 1) / 2);\r\n    const mid = { x: (pts[i].x + pts[Math.min(i + 1, pts.length - 1)].x) / 2, y: (pts[i].y + pts[Math.min(i + 1, pts.length - 1)].y) / 2 };\r\n    const s = viewport.worldToScreen(mid);\r\n    const initial = isFlow && edge.data?.kind === 'sankey' ? String(edge.data.value) : (edge.label ?? '');\r\n    cancelTextEdit?.();\r\n    const timer = setTimeout(() => {\r\n      cancelTextEdit = openTextEditor(\r\n        host,\r\n        { left: s.x - 60, top: s.y - 14, width: 120, height: 28 },\r\n        initial,\r\n        (value) => {\r\n          cancelTextEdit = null;\r\n          const cur = scene.edges.find((e) => e.id === edgeId);\r\n          if (!cur) return;\r\n          if (isFlow) {\r\n            const num = Number(value.trim());\r\n            // 打了不是數字的東西就當作沒改(而不是把流量變成 NaN 讓整張圖壞掉)。\r\n            if (Number.isFinite(num) && cur.data?.kind === 'sankey' && num !== cur.data.value) {\r\n              pointerHost.runCommand(cmdSetEdgeData(edgeId, { kind: 'sankey', value: num }), 'flow');\r\n            }\r\n            return;\r\n          }\r\n          if (value !== (cur.label ?? '')) {\r\n            pointerHost.runCommand(cmdSetLabel(edgeId, value), 'edge-label');\r\n          }\r\n        },\r\n        () => {\r\n          cancelTextEdit = null;\r\n        },\r\n      );\r\n    }, 0);\r\n    cancelTextEdit = () => clearTimeout(timer);\r\n  }\r\n\r\n  // 剪貼簿(複製/貼上選取的子圖)。\r\n  let clipboard: { nodes: typeof scene.nodes; edges: typeof scene.edges } | null = null;\r\n\r\n  /** 由選取的節點(+其間的邊)複製出帶新 id 的副本,偏移 (dx,dy);回傳新元素與新節點 id。 */\r\n  const cloneSelection = (\r\n    srcNodes: typeof scene.nodes,\r\n    srcEdges: typeof scene.edges,\r\n    dx: number,\r\n    dy: number,\r\n  ): { nodes: typeof scene.nodes; edges: typeof scene.edges; nodeIds: string[] } => {\r\n    let work = scene;\r\n    const idMap = new Map<string, string>();\r\n    const nodes: typeof scene.nodes = [];\r\n    for (const n of srcNodes) {\r\n      const nid = nextNodeId(work);\r\n      const copy = { ...n, id: nid, x: n.x + dx, y: n.y + dy, parentId: null, pinned: true };\r\n      idMap.set(n.id, nid);\r\n      nodes.push(copy);\r\n      work = { ...work, nodes: [...work.nodes, copy] };\r\n    }\r\n    const edges: typeof scene.edges = [];\r\n    for (const ed of srcEdges) {\r\n      if (idMap.has(ed.source) && idMap.has(ed.target)) {\r\n        const eid = nextEdgeId(work);\r\n        const copy = { ...ed, id: eid, source: idMap.get(ed.source)!, target: idMap.get(ed.target)! };\r\n        edges.push(copy);\r\n        work = { ...work, edges: [...work.edges, copy] };\r\n      }\r\n    }\r\n    return { nodes, edges, nodeIds: [...idMap.values()] };\r\n  };\r\n\r\n  const pasteClone = (\r\n    srcNodes: typeof scene.nodes,\r\n    srcEdges: typeof scene.edges,\r\n    dx: number,\r\n    dy: number,\r\n  ): void => {\r\n    if (srcNodes.length === 0) return;\r\n    const cloned = cloneSelection(srcNodes, srcEdges, dx, dy);\r\n    pointerHost.runCommand(cmdAddElements(cloned.nodes, cloned.edges), 'paste');\r\n    pointer.setSelection(cloned.nodeIds);\r\n  };\r\n\r\n  // 鍵盤(掛在 host;編輯文字時 textarea 已 stopPropagation)。\r\n  // 鍵盤快捷鍵說明浮層(對標 Excalidraw 的「?」)。\r\n  const HELP_ROWS: Array<[string, string]> = [\r\n    ['V', '選取 / 移動'],\r\n    ['E', '連線(從節點拉線)'],\r\n    ['N', '新增節點工具'],\r\n    ['雙擊節點', '編輯文字'],\r\n    ['雙擊空白', '在該處新增節點'],\r\n    ['Tab', '在選取節點旁新增相連節點'],\r\n    ['Del / ⌫', '刪除選取'],\r\n    ['Ctrl/⌘ Z / Y', '復原 / 重做'],\r\n    ['Ctrl/⌘ C / V', '複製 / 貼上'],\r\n    ['Ctrl/⌘ D', '原地複製'],\r\n    ['Ctrl/⌘ G', '群組 subgraph'],\r\n    ['Ctrl/⌘ A', '全選'],\r\n    ['方向鍵', '微調位置'],\r\n    ['右鍵', '情境選單(外形 / 顏色 / 對齊)'],\r\n    ['Esc', '取消選取 / 關閉'],\r\n    ['?', '顯示 / 隱藏此說明'],\r\n  ];\r\n  let helpOverlay: HTMLElement | null = null;\r\n  const toggleHelp = (show?: boolean): void => {\r\n    const want = show ?? !helpOverlay;\r\n    if (!want) {\r\n      helpOverlay?.remove();\r\n      helpOverlay = null;\r\n      return;\r\n    }\r\n    if (helpOverlay) return;\r\n    helpOverlay = document.createElement('div');\r\n    helpOverlay.className = 'rsm-help-overlay';\r\n    const panel = document.createElement('div');\r\n    panel.className = 'rsm-help-panel';\r\n    const h = document.createElement('div');\r\n    h.className = 'rsm-help-title';\r\n    h.textContent = '鍵盤快捷鍵';\r\n    panel.appendChild(h);\r\n    const grid = document.createElement('div');\r\n    grid.className = 'rsm-help-grid';\r\n    for (const [key, desc] of HELP_ROWS) {\r\n      const kb = document.createElement('kbd');\r\n      kb.textContent = key;\r\n      const d = document.createElement('span');\r\n      d.textContent = desc;\r\n      grid.appendChild(kb);\r\n      grid.appendChild(d);\r\n    }\r\n    panel.appendChild(grid);\r\n    helpOverlay.appendChild(panel);\r\n    helpOverlay.addEventListener('pointerdown', (ev) => {\r\n      if (ev.target === helpOverlay) toggleHelp(false); // 點背景關閉\r\n    });\r\n    host.appendChild(helpOverlay);\r\n  };\r\n\r\n  const onKeyDown = (e: KeyboardEvent): void => {\r\n    const active = document.activeElement;\r\n    if (active && (active.tagName === 'TEXTAREA' || active.tagName === 'INPUT')) return;\r\n    if (e.key === '?' || (e.key === '/' && e.shiftKey)) {\r\n      e.preventDefault();\r\n      toggleHelp();\r\n      return;\r\n    }\r\n    if (helpOverlay && e.key === 'Escape') {\r\n      toggleHelp(false);\r\n      return;\r\n    }\r\n    const mod = e.ctrlKey || e.metaKey;\r\n    const k = e.key.toLowerCase();\r\n    if (mod && k === 'z' && !e.shiftKey) {\r\n      e.preventDefault();\r\n      handle.undo();\r\n    } else if (mod && (k === 'y' || (k === 'z' && e.shiftKey))) {\r\n      e.preventDefault();\r\n      handle.redo();\r\n    } else if (mod && k === 'a') {\r\n      e.preventDefault();\r\n      pointer.selectAll();\r\n    } else if (mod && k === 'd') {\r\n      e.preventDefault();\r\n      handle.duplicateSelection();\r\n    } else if (mod && k === 'g') {\r\n      e.preventDefault();\r\n      handle.groupSelection();\r\n    } else if (mod && k === 'c') {\r\n      const ids = new Set(pointer.getSelection());\r\n      const sn = scene.nodes.filter((n) => ids.has(n.id));\r\n      if (sn.length) clipboard = { nodes: sn, edges: scene.edges.filter((ed) => ids.has(ed.source) && ids.has(ed.target)) };\r\n    } else if (mod && k === 'v') {\r\n      e.preventDefault();\r\n      if (clipboard) pasteClone(clipboard.nodes, clipboard.edges, 24, 24);\r\n    } else if (e.key === 'Delete' || e.key === 'Backspace') {\r\n      e.preventDefault();\r\n      handle.deleteSelection();\r\n    } else if (e.key.startsWith('Arrow')) {\r\n      // 方向鍵微調選取節點(Shift=10px)。\r\n      const ids = pointer.getSelection().filter((id) => scene.nodes.some((n) => n.id === id));\r\n      if (ids.length) {\r\n        e.preventDefault();\r\n        const step = e.shiftKey ? 10 : 1;\r\n        const dx = e.key === 'ArrowLeft' ? -step : e.key === 'ArrowRight' ? step : 0;\r\n        const dy = e.key === 'ArrowUp' ? -step : e.key === 'ArrowDown' ? step : 0;\r\n        pointerHost.runCommand(cmdMoveNodes(ids, dx, dy), 'nudge');\r\n      }\r\n    } else if (e.key === 'Tab') {\r\n      // Tab:選取單一節點 → 在其右側新增一個已連線的節點(draw.io 式快速建圖)。\r\n      const sel = pointer.getSelection();\r\n      const src = sel.length === 1 ? scene.nodes.find((n) => n.id === sel[0]) : undefined;\r\n      if (src) {\r\n        e.preventDefault();\r\n        const id = nextNodeId(scene);\r\n        const pos = { x: src.x + src.w + 80, y: src.y };\r\n        const node = {\r\n          ...makeNodeFor(scene, id, pos, { shape: src.shape, parentId: src.parentId }),\r\n          x: pos.x,\r\n          y: pos.y,\r\n          w: src.w,\r\n          h: src.h,\r\n        };\r\n        // mindmap 沒有邊,Tab 的「接續一個節點」= 在來源底下長一個子節點。\r\n        if (scene.diagramType === 'mindmap') {\r\n          pointerHost.runCommand(cmdAddNode({ ...node, parentId: src.id }), 'add-node');\r\n        } else {\r\n          const edge = makeEdgeFor(scene, nextEdgeId(scene), src.id, id, createEdge);\r\n          pointerHost.runCommand(cmdAddConnectedNode(node, edge), 'add-connected');\r\n        }\r\n        pointer.setSelection([id]);\r\n        openEditor(id);\r\n      }\r\n    } else if (e.key === 'Escape') {\r\n      pointer.clearSelection();\r\n      pointer.setTool('select');\r\n    } else if (k === 'v') {\r\n      pointer.setTool('select');\r\n    } else if (k === 'n') {\r\n      pointer.setTool('node-create');\r\n    } else if (k === 'e') {\r\n      pointer.setTool('edge-create');\r\n    }\r\n  };\r\n  host.setAttribute('tabindex', host.getAttribute('tabindex') ?? '0');\r\n  host.addEventListener('keydown', onKeyDown);\r\n\r\n  // ── 右鍵選單(改外形 / 改名 / 複製 / 刪除;邊:改文字 / 刪除;空白:新增 / 貼上 / 整理 / 全選)──\r\n  let ctxMenu: HTMLElement | null = null;\r\n  let ctxEsc: ((e: KeyboardEvent) => void) | null = null;\r\n  const closeContextMenu = (): void => {\r\n    ctxMenu?.remove();\r\n    ctxMenu = null;\r\n    if (ctxEsc) {\r\n      document.removeEventListener('keydown', ctxEsc);\r\n      ctxEsc = null;\r\n    }\r\n  };\r\n  const onContextMenu = (e: MouseEvent): void => {\r\n    e.preventDefault();\r\n    closeContextMenu();\r\n    const t = e.target as Element;\r\n    const nodeEl = t.closest('[data-node-id]');\r\n    const edgeEl = t.closest('[data-edge-hit]');\r\n    const seqMsgEl = t.closest('[data-seq-msg]');\r\n    const laneEl = t.closest('[data-container-id]');\r\n    const menu = document.createElement('div');\r\n    menu.className = 'rsm-ctx';\r\n    const addItem = (label: string, fn: () => void): void => {\r\n      const it = document.createElement('div');\r\n      it.className = 'rsm-ctx-item';\r\n      it.textContent = label;\r\n      it.addEventListener('click', () => {\r\n        closeContextMenu();\r\n        fn();\r\n      });\r\n      menu.appendChild(it);\r\n    };\r\n    const addSep = (): void => {\r\n      const s = document.createElement('div');\r\n      s.className = 'rsm-ctx-sep';\r\n      menu.appendChild(s);\r\n    };\r\n    if (seqMsgEl) {\r\n      // sequence 訊息 / note 右鍵:編輯文字 /(訊息才有)切換箭頭 / 刪除。\r\n      const idx = Number(seqMsgEl.getAttribute('data-seq-msg'));\r\n      const isNote = scene.sequence?.statements[idx]?.kind === 'note';\r\n      addItem('編輯文字', () => openSeqMessageEditor(idx));\r\n      if (!isNote) addItem('切換實/虛箭頭', () => pointerHost.runCommand(cmdToggleSeqArrow(idx), 'seq-arrow'));\r\n      addSep();\r\n      addItem(isNote ? '刪除筆記' : '刪除訊息', () => pointerHost.runCommand(cmdDeleteSeqStatement(idx), 'del-seq-msg'));\r\n    } else if (\r\n      nodeEl &&\r\n      scene.nodes.find((n) => n.id === nodeEl.getAttribute('data-node-id'))?.data?.kind === 'sequence'\r\n    ) {\r\n      // sequence 參與者右鍵:改名 / 刪除(同步移除 scene.sequence 條目,避免脫鉤)。\r\n      const id = nodeEl.getAttribute('data-node-id') as string;\r\n      addItem('改名', () => openEditor(id));\r\n      addSep();\r\n      addItem('刪除參與者', () => pointerHost.runCommand(cmdDeleteSeqParticipant(id), 'del-participant'));\r\n    } else if (\r\n      nodeEl &&\r\n      scene.nodes.find((n) => n.id === nodeEl.getAttribute('data-node-id'))?.data?.kind === 'gitgraph'\r\n    ) {\r\n      // git 提交右鍵:改 id / 換記號 / 掛標籤。分支與順序靠拖曳,不放進選單。\r\n      const id = nodeEl.getAttribute('data-node-id') as string;\r\n      pointer.setSelection([id]);\r\n      const cur = scene.nodes.find((n) => n.id === id);\r\n      const d = cur?.data?.kind === 'gitgraph' ? cur.data : undefined;\r\n      addItem('改提交 id', () => openEditor(id));\r\n      addSep();\r\n      for (const [t, label] of GIT_COMMIT_TYPES) {\r\n        // 合併節點的記號由「它是不是 merge」決定,不讓使用者切成一般提交(會失去來源分支)。\r\n        if (d?.commitType === 3 || t === 3) continue;\r\n        addItem(`${d?.commitType === t ? '● ' : '　'}${label}`, () =>\r\n          pointerHost.runCommand(\r\n            cmdSetNodeData(id, { data: { ...(d ?? { kind: 'gitgraph', tags: [] }), commitType: t } }),\r\n            'git-type',\r\n          ),\r\n        );\r\n      }\r\n      addSep();\r\n      addItem(d?.tags?.length ? '改標籤' : '加標籤', () => openGitTagEditor(id));\r\n      if (d?.tags?.length) {\r\n        addItem('移除標籤', () =>\r\n          pointerHost.runCommand(cmdSetNodeData(id, { data: { ...d, tags: [] } }), 'git-untag'),\r\n        );\r\n      }\r\n      addSep();\r\n      addItem('刪除這個提交', () => handle.deleteSelection());\r\n    } else if (nodeEl) {\r\n      const id = nodeEl.getAttribute('data-node-id') as string;\r\n      // 右鍵已選取的節點 → 保留多選(才能用對齊/群組);否則改選此節點。\r\n      if (!pointer.getSelection().includes(id)) pointer.setSelection([id]);\r\n      const ctxShapes = ctxShapesFor(handle.getCapabilities());\r\n      if (ctxShapes.length > 1) {\r\n        const strip = document.createElement('div');\r\n        strip.className = 'rsm-ctx-shapes';\r\n        for (const shape of ctxShapes) {\r\n          const m = shapeMeta(shape);\r\n          const sb = document.createElement('button');\r\n          sb.type = 'button';\r\n          sb.textContent = m.glyph;\r\n          sb.title = m.label;\r\n          sb.addEventListener('click', () => {\r\n            closeContextMenu();\r\n            handle.setNodeShape(id, shape);\r\n          });\r\n          strip.appendChild(sb);\r\n        }\r\n        menu.appendChild(strip);\r\n      }\r\n      // 顏色色票列。\r\n      const colors = document.createElement('div');\r\n      colors.className = 'rsm-ctx-shapes';\r\n      for (const pal of NODE_PALETTE) {\r\n        const cb = document.createElement('button');\r\n        cb.type = 'button';\r\n        cb.title = '上色';\r\n        cb.style.background = pal.fill;\r\n        cb.style.minHeight = '16px';\r\n        cb.addEventListener('click', () => {\r\n          closeContextMenu();\r\n          handle.setNodeColor(id, pal.fill, pal.stroke);\r\n        });\r\n        colors.appendChild(cb);\r\n      }\r\n      menu.appendChild(colors);\r\n      addSep();\r\n      addItem('改名', () => openEditor(id));\r\n      if (scene.diagramType === 'mindmap') {\r\n        // 心智圖的「連線」就是父子關係,所以建子節點是這裡最常用的動作。\r\n        addItem('新增子節點', () => {\r\n          const src = scene.nodes.find((n) => n.id === id);\r\n          if (!src) return;\r\n          const nid = nextNodeId(scene);\r\n          const at = { x: src.x + src.w + 90, y: src.y + src.h / 2 };\r\n          pointerHost.runCommand(cmdAddNode(makeNodeFor(scene, nid, at, { parentId: id })), 'add-node');\r\n          pointer.setSelection([nid]);\r\n          openEditor(nid);\r\n        });\r\n        if (scene.nodes.find((n) => n.id === id)?.parentId) {\r\n          addItem('升為上一層', () => {\r\n            const cur = scene.nodes.find((n) => n.id === id);\r\n            const grand = scene.nodes.find((n) => n.id === cur?.parentId)?.parentId ?? undefined;\r\n            // 沒有祖父 = 目前父節點就是根 → 保持掛在根下(mindmap 只能有一個根)。\r\n            if (grand) pointerHost.runCommand(cmdSetParent(id, grand), 'reparent');\r\n          });\r\n        }\r\n      }\r\n      addItem('複製', () => handle.duplicateSelection());\r\n      if (scene.nodes.find((n) => n.id === id)?.parentId) {\r\n        addItem('解除群組', () => handle.ungroupNode(id));\r\n      }\r\n      if (pointer.getSelection().length > 1) {\r\n        addItem('群組成 subgraph', () => handle.groupSelection());\r\n        addSep();\r\n        addItem('靠左對齊', () => handle.alignSelection('left'));\r\n        addItem('水平置中', () => handle.alignSelection('centerX'));\r\n        addItem('靠右對齊', () => handle.alignSelection('right'));\r\n        addItem('靠上對齊', () => handle.alignSelection('top'));\r\n        addItem('垂直置中', () => handle.alignSelection('middleY'));\r\n        addItem('靠下對齊', () => handle.alignSelection('bottom'));\r\n        if (pointer.getSelection().length > 2) {\r\n          addSep();\r\n          addItem('水平均分', () => handle.distributeSelection('h'));\r\n          addItem('垂直均分', () => handle.distributeSelection('v'));\r\n        }\r\n        addSep();\r\n      }\r\n      addItem('刪除', () => handle.deleteSelection());\r\n    } else if (edgeEl && scene.diagramType === 'requirement') {\r\n      // 需求圖的連線沒有「線型 / 箭頭」可調 —— 它的意義完全由關係種類決定。\r\n      const id = edgeEl.getAttribute('data-edge-hit') as string;\r\n      pointer.setSelection([id]);\r\n      const cur = scene.edges.find((e) => e.id === id);\r\n      const now = cur?.data?.kind === 'requirement' ? cur.data.relation : undefined;\r\n      for (const rel of REQ_RELATIONS) {\r\n        addItem(`${rel === now ? '● ' : '　'}${REQ_RELATION_LABEL[rel]}`, () =>\r\n          pointerHost.runCommand(cmdSetEdgeData(id, { kind: 'requirement', relation: rel }), 'req-relation'),\r\n        );\r\n      }\r\n      addSep();\r\n      addItem('刪除', () => handle.deleteSelection());\r\n    } else if (edgeEl) {\r\n      const id = edgeEl.getAttribute('data-edge-hit') as string;\r\n      pointer.setSelection([id]);\r\n      addItem('編輯文字', () => openEdgeEditor(id));\r\n      addItem('實線', () => handle.setEdgeStyle(id, { lineKind: 'solid' }));\r\n      addItem('虛線', () => handle.setEdgeStyle(id, { lineKind: 'dotted' }));\r\n      addItem('粗線', () => handle.setEdgeStyle(id, { lineKind: 'thick' }));\r\n      addItem('切換箭頭', () => {\r\n        const ed = scene.edges.find((x) => x.id === id);\r\n        handle.setEdgeStyle(id, { arrowEnd: ed && ed.arrowEnd === 'none' ? 'arrow' : 'none' });\r\n      });\r\n      addSep();\r\n      addItem('刪除', () => handle.deleteSelection());\r\n    } else if (scene.diagramType === 'sequence') {\r\n      // sequence:空白右鍵 → 新增參與者 / 新增訊息(可從零建構),新增後直接進入編輯。\r\n      addItem('新增參與者', () => {\r\n        const ids = new Set(scene.sequence?.participants.map((p) => p.id) ?? []);\r\n        let n = 1;\r\n        while (ids.has(`P${n}`)) n += 1;\r\n        const newId = `P${n}`;\r\n        pointerHost.runCommand(cmdAddSeqParticipant(), 'add-participant');\r\n        setTimeout(() => openEditor(newId), 0);\r\n      });\r\n      addItem('新增訊息', () => {\r\n        const idx = scene.sequence?.statements.length ?? 0;\r\n        pointerHost.runCommand(cmdAddSeqMessage(), 'add-message');\r\n        setTimeout(() => openSeqMessageEditor(idx), 0);\r\n      });\r\n      addItem('新增筆記', () => {\r\n        const idx = scene.sequence?.statements.length ?? 0;\r\n        pointerHost.runCommand(cmdAddSeqNote(), 'add-note');\r\n        setTimeout(() => openSeqMessageEditor(idx), 0);\r\n      });\r\n      addSep();\r\n      addItem('整理排版', () => void handle.tidy());\r\n    } else if (scene.diagramType === 'gitgraph') {\r\n      // git 線圖:泳道 = 分支。改名 / 刪分支 / 新增分支 / 在最右端接一個提交。\r\n      const cid = laneEl?.getAttribute('data-container-id') ?? undefined;\r\n      if (cid) {\r\n        const lane = scene.containers.find((c) => c.id === cid);\r\n        addItem('改分支名稱', () => openLaneEditor(cid));\r\n        // 第一條泳道是所有提交的起點,刪掉整份圖就沒有根了。\r\n        if ((lane?.sourceIndex ?? 0) > 0) {\r\n          addSep();\r\n          addItem('刪除這條分支', () => {\r\n            pointerHost.runCommand(cmdDeleteContainer(cid, lane?.childNodeIds ?? []), 'del-branch');\r\n            void handle.tidy();\r\n          });\r\n        }\r\n        addSep();\r\n      }\r\n      addItem('新增分支', () => {\r\n        const taken = new Set(scene.containers.map((c) => c.id));\r\n        let k = scene.containers.length;\r\n        while (taken.has(`branch${k}`)) k += 1;\r\n        const id = `branch${k}`;\r\n        pointerHost.runCommand(\r\n          cmdAddContainer({\r\n            id,\r\n            label: id,\r\n            ...gitLaneRect(scene.containers.length, scene.nodes.length),\r\n            parentId: null,\r\n            childNodeIds: [],\r\n            sourceIndex: scene.containers.length,\r\n          }),\r\n          'add-branch',\r\n        );\r\n      });\r\n      if (scene.containers.length > 0) {\r\n        addItem('新增提交', () => {\r\n          const nid = nextNodeId(scene);\r\n          const world2 = viewport.screenToWorld(e.clientX, e.clientY);\r\n          pointerHost.runCommand(\r\n            cmdAddNode(makeNodeFor(scene, nid, world2, { label: nid })),\r\n            'add-commit',\r\n          );\r\n          pointer.setSelection([nid]);\r\n          void handle.tidy();\r\n        });\r\n      }\r\n      addSep();\r\n      addItem('整理排版', () => void handle.tidy());\r\n    } else if (laneEl && (scene.diagramType === 'kanban' || scene.diagramType === 'journey')) {\r\n      // 欄位本身的右鍵:改名 / 刪整欄(卡片一起走)。\r\n      const cid = laneEl.getAttribute('data-container-id') as string;\r\n      const lane = scene.containers.find((c) => c.id === cid);\r\n      const isJourney = scene.diagramType === 'journey';\r\n      addItem(isJourney ? '改 section 名稱' : '改欄位名稱', () => openLaneEditor(cid));\r\n      addSep();\r\n      addItem(isJourney ? '刪除這個 section' : '刪除這一欄', () => {\r\n        pointerHost.runCommand(cmdDeleteContainer(cid, lane?.childNodeIds ?? []), 'del-lane');\r\n        void handle.tidy();\r\n      });\r\n    } else if (scene.diagramType === 'kanban' || scene.diagramType === 'journey') {\r\n      // 泳道圖:空白處右鍵 → 新增欄位 / 卡片。沒有這個入口就沒有辦法從零開一塊看板\r\n      // (卡片一定要落在某一欄裡,而欄只能從這裡長出來)。\r\n      const isJourney = scene.diagramType === 'journey';\r\n      addItem(isJourney ? '新增 section' : '新增欄位', () => {\r\n        const taken = new Set(scene.containers.map((c) => c.id));\r\n        let k = scene.containers.length + 1;\r\n        while (taken.has(`col${k}`)) k += 1;\r\n        const id = `col${k}`;\r\n        pointerHost.runCommand(\r\n          cmdAddContainer({\r\n            id,\r\n            label: isJourney ? `階段 ${k}` : `欄位 ${k}`,\r\n            ...laneRect(scene.containers.length, 260),\r\n            parentId: null,\r\n            childNodeIds: [],\r\n            sourceIndex: scene.containers.length,\r\n          }),\r\n          'add-lane',\r\n        );\r\n        void handle.tidy();\r\n      });\r\n      if (scene.containers.length > 0) {\r\n        addItem(isJourney ? '新增任務' : '新增卡片', () => {\r\n          const nid = nextNodeId(scene);\r\n          const world2 = viewport.screenToWorld(e.clientX, e.clientY);\r\n          pointerHost.runCommand(cmdAddNode(makeNodeFor(scene, nid, world2, {})), 'add-node');\r\n          pointer.setSelection([nid]);\r\n          openEditor(nid);\r\n        });\r\n      }\r\n      addSep();\r\n      addItem('整理排版', () => void handle.tidy());\r\n      addItem('全選', () => pointer.selectAll());\r\n    } else {\r\n      const world = viewport.screenToWorld(e.clientX, e.clientY);\r\n      addItem('在此新增節點', () => {\r\n        const nid = nextNodeId(scene);\r\n        const n = makeNodeFor(scene, nid, world, {\r\n          shape: createShape,\r\n          preferParentId: pointer.getSelection()[0],\r\n        });\r\n        pointerHost.runCommand(cmdAddNode(n), 'add-node');\r\n        pointer.setSelection([nid]);\r\n        openEditor(nid);\r\n      });\r\n      addItem('貼上', () => {\r\n        if (clipboard) pasteClone(clipboard.nodes, clipboard.edges, 24, 24);\r\n      });\r\n      addItem('整理排版', () => void handle.tidy());\r\n      addItem('全選', () => pointer.selectAll());\r\n    }\r\n    const rect = host.getBoundingClientRect();\r\n    host.appendChild(menu);\r\n    ctxMenu = menu;\r\n    // 夾在 host 範圍內,避免靠近右/下緣時選單溢出看不到。\r\n    const mw = menu.offsetWidth || 160;\r\n    const mh = menu.offsetHeight || 200;\r\n    let lx = e.clientX - rect.left;\r\n    let ly = e.clientY - rect.top;\r\n    if (lx + mw > rect.width) lx = Math.max(4, rect.width - mw - 4);\r\n    if (ly + mh > rect.height) ly = Math.max(4, rect.height - mh - 4);\r\n    menu.style.left = `${lx}px`;\r\n    menu.style.top = `${ly}px`;\r\n    setTimeout(() => {\r\n      document.addEventListener('pointerdown', closeContextMenu, { once: true });\r\n      ctxEsc = (ev: KeyboardEvent) => {\r\n        if (ev.key === 'Escape') closeContextMenu();\r\n      };\r\n      document.addEventListener('keydown', ctxEsc);\r\n    }, 0);\r\n  };\r\n  host.addEventListener('contextmenu', onContextMenu);\r\n\r\n  function exportClone(): SVGSVGElement {\r\n    const clone = svg.cloneNode(true) as SVGSVGElement;\r\n    clone.querySelector('.rsm-overlay')?.remove();\r\n    const vp = clone.querySelector<SVGGElement>('.rsm-viewport');\r\n    if (vp) {\r\n      vp.removeAttribute('transform');\r\n      vp.style.transform = '';\r\n    }\r\n    // 用與 fit() 相同的內容範圍:sequence 用 renderer.getContentBounds()(節點只含頂端參與者列,\r\n    // 用 node bbox 會把訊息 / 生命線裁掉);其餘退回節點 + 容器 bbox。\r\n    const bb = renderer.getContentBounds() ?? boundingBox(sceneRects(scene));\r\n    const pad = 24;\r\n    if (bb) {\r\n      clone.setAttribute('viewBox', `${bb.x - pad} ${bb.y - pad} ${bb.w + pad * 2} ${bb.h + pad * 2}`);\r\n    }\r\n    return clone;\r\n  }\r\n\r\n  const handle: DiagramEditorHandle = {\r\n    getScene: () => scene,\r\n    toMermaid: () => {\r\n      if (formActive && form) return form.toMermaid();\r\n      const adapter = adapterFor(diagramType);\r\n      if (!adapter) return '';\r\n      return adapter.serialize(scene).text;\r\n    },\r\n    loadScene: (next) => {\r\n      setScene(next);\r\n      resetEdgeDefault();\r\n      handle.fit();\r\n    },\r\n    loadSource: async (text: string) => {\r\n      try {\r\n        // timeline / orid 等資料圖表 → form 子編輯器(惰性建立、隱藏畫布)。\r\n        const kw = firstKeyword(text);\r\n        const factory = FORM_FACTORIES[kw];\r\n        if (factory) {\r\n          // 換了另一種 form(timeline ↔ orid)就整個換掉實例,不沿用舊表單的 DOM 與歷史。\r\n          if (form && formKeyword !== kw) {\r\n            form.destroy();\r\n            form = null;\r\n          }\r\n          if (!form) {\r\n            form = factory.create(host, {\r\n              mermaid: opts.mermaid,\r\n              dark,\r\n              fontUrl: opts.fontUrl,\r\n              // change 事件補帶場景(host 期望 payload 為 scene);其餘原樣轉發。\r\n              emit: (e, p) => emit(e as EditorEvent, e === 'change' ? scene : p),\r\n            });\r\n            formKeyword = kw;\r\n          }\r\n          formActive = true;\r\n          scene = emptyScene(factory.type);\r\n          diagramType = factory.type;\r\n          svg.style.display = 'none';\r\n          emptyHint.style.display = 'none';\r\n          form.show();\r\n          form.loadSource(text);\r\n          return;\r\n        }\r\n        // 畫布圖種:若先前在 form 模式,收起 form、還原畫布。\r\n        if (formActive) {\r\n          formActive = false;\r\n          form?.hide();\r\n          svg.style.display = '';\r\n          emptyHint.style.display = '';\r\n        }\r\n        const type = detectDiagramType(text) ?? 'flowchart';\r\n        const adapter = adapterFor(type);\r\n        if (!adapter) throw new Error(`找不到圖種 adapter:${type}`);\r\n        const mermaid = await loadMermaid({ source: opts.mermaid });\r\n        const { scene: parsed } = await adapter.parse(text, mermaid);\r\n        const laid =\r\n          parsed.layoutOwner === 'engine'\r\n            ? await adapter.layout(parsed, mermaidSvgLayout, opts.mermaid)\r\n            : parsed;\r\n        history.clear();\r\n        setScene(laid);\r\n        resetEdgeDefault();\r\n        handle.fit();\r\n      } catch (err) {\r\n        emit('error', err);\r\n        throw err;\r\n      }\r\n    },\r\n\r\n    setTool: (tool) => pointer.setTool(tool),\r\n    getTool: () => pointer.getTool(),\r\n    setCreateShape: (shape) => {\r\n      createShape = shape;\r\n    },\r\n    setNodeShape: (id, shape) => {\r\n      pointerHost.runCommand(cmdSetShape(id, shape), 'shape');\r\n    },\r\n    setDirection: (dir) => {\r\n      pointerHost.runCommand(cmdSetDirection(dir), 'direction');\r\n    },\r\n    setEdgeStyle: (edgeId, patch) => {\r\n      pointerHost.runCommand(cmdSetEdgeStyle(edgeId, patch), 'edge-style');\r\n    },\r\n    getCapabilities: () => adapterFor(diagramType)?.capabilities ?? null,\r\n    getEdgeStyleDefault: () => ({ ...createEdge }),\r\n    applyEdgeStyle: (patch) => {\r\n      const caps = adapterFor(diagramType)?.capabilities;\r\n      // 只接受目前圖種支援的值('none' 永遠合法,代表「無箭頭」)。\r\n      const clean: Partial<{ lineKind: LineKind; arrowStart: ArrowHead; arrowEnd: ArrowHead }> = {};\r\n      if (patch.lineKind && (!caps || caps.lineKinds.includes(patch.lineKind))) clean.lineKind = patch.lineKind;\r\n      const headOk = (h: ArrowHead): boolean => h === 'none' || !caps || caps.arrowHeads.includes(h);\r\n      if (patch.arrowStart !== undefined && headOk(patch.arrowStart)) clean.arrowStart = patch.arrowStart;\r\n      if (patch.arrowEnd !== undefined && headOk(patch.arrowEnd)) clean.arrowEnd = patch.arrowEnd;\r\n      if (Object.keys(clean).length === 0) return;\r\n      createEdge = { ...createEdge, ...clean };\r\n      // 套到目前選取的連線(若有);沒有選取時僅更新「新連線」預設。\r\n      const ids = pointer.getSelection().filter((id) => scene.edges.some((e) => e.id === id));\r\n      if (ids.length) pointerHost.runCommand(cmdSetEdgesStyle(ids, clean), 'edge-style');\r\n    },\r\n    addNode: (shape) => {\r\n      const rect = svg.getBoundingClientRect();\r\n      // 視窗中央(世界座標);多次新增稍微錯開,避免完全疊在一起。\r\n      const center = viewport.screenToWorld(rect.left + rect.width / 2, rect.top + rect.height / 2);\r\n      const off = (scene.nodes.length % 8) * 18;\r\n      const id = nextNodeId(scene);\r\n      const node = makeNodeFor(\r\n        scene,\r\n        id,\r\n        { x: center.x + off, y: center.y + off },\r\n        { shape: shape ?? createShape, preferParentId: pointer.getSelection()[0] },\r\n      );\r\n      pointerHost.runCommand(cmdAddNode(node), 'add-node');\r\n      pointer.setTool('select'); // 新增後回到選取,讓使用者可立即拖曳/選取(預設就是選取)。\r\n      pointer.setSelection([id]);\r\n      openEditor(id);\r\n      return id;\r\n    },\r\n\r\n    undo: () => {\r\n      if (formActive && form) return form.undo();\r\n      const res = history.undo();\r\n      if (res) setScene(res.scene);\r\n    },\r\n    redo: () => {\r\n      if (formActive && form) return form.redo();\r\n      const res = history.redo();\r\n      if (res) setScene(res.scene);\r\n    },\r\n    canUndo: () => (formActive && form ? form.canUndo() : history.canUndo()),\r\n    canRedo: () => (formActive && form ? form.canRedo() : history.canRedo()),\r\n\r\n    selectAll: () => pointer.selectAll(),\r\n    clearSelection: () => pointer.clearSelection(),\r\n    deleteSelection: () => {\r\n      const ids = new Set(pointer.getSelection());\r\n      if (ids.size === 0) return;\r\n      // sequence:刪除參與者要同步清 scene.sequence(否則 node 沒了但 mermaid 還留著 → 脫鉤)。\r\n      if (scene.diagramType === 'sequence') {\r\n        // 訊息 / 筆記(假 id `seq:{index}`)由大到小刪:每刪一條後面的索引都會往前挪,\r\n        // 由小到大刪會刪錯人。\r\n        const stmtIdx = [...ids]\r\n          .map((id) => /^seq:(\\d+)$/.exec(id))\r\n          .filter((m): m is RegExpExecArray => Boolean(m))\r\n          .map((m) => Number(m[1]))\r\n          .sort((a, b) => b - a);\r\n        for (const i of stmtIdx) pointerHost.runCommand(cmdDeleteSeqStatement(i), 'del-seq-msg');\r\n        const partIds = scene.nodes.filter((n) => ids.has(n.id) && n.data?.kind === 'sequence').map((n) => n.id);\r\n        for (const pid of partIds) pointerHost.runCommand(cmdDeleteSeqParticipant(pid), 'del-participant');\r\n        pointer.clearSelection();\r\n        return;\r\n      }\r\n      const nodeIds = scene.nodes.filter((n) => ids.has(n.id)).map((n) => n.id);\r\n      const edgeIds = scene.edges.filter((e) => ids.has(e.id)).map((e) => e.id);\r\n      pointerHost.runCommand(cmdDeleteSelection(nodeIds, edgeIds), 'delete');\r\n      pointer.clearSelection();\r\n    },\r\n    getSelection: () => pointer.getSelection(),\r\n\r\n    zoomIn: () => {\r\n      viewport.zoomBy(1.2);\r\n      refreshOverlay();\r\n    },\r\n    zoomOut: () => {\r\n      viewport.zoomBy(1 / 1.2);\r\n      refreshOverlay();\r\n    },\r\n    fit: () => {\r\n      if (formActive) return; // form 模式無畫布視窗\r\n      // sequence:內容延伸到節點下方,用渲染器回報的整張範圍;其他圖種用節點 bbox。\r\n      // 容器也要算進來:群組 / 泳道 / subgraph 的框比裡面的節點大一圈,標題還畫在框的上緣。\r\n      // 只框節點的話,「符合畫面」會把 architecture 的 group 名稱、看板的欄名切在畫面外。\r\n      viewport.fit(renderer.getContentBounds() ?? boundingBox(sceneRects(scene)));\r\n      refreshOverlay();\r\n    },\r\n    resetView: () => {\r\n      viewport.setZoom(1);\r\n      handle.fit();\r\n    },\r\n    getZoomPercent: () => viewport.getZoomPercent(),\r\n    tidy: async () => {\r\n      const adapter = adapterFor(diagramType);\r\n      if (!adapter) return;\r\n      try {\r\n        const laid = await adapter.layout(scene, mermaidSvgLayout, opts.mermaid);\r\n        setScene(laid);\r\n        handle.fit();\r\n      } catch (err) {\r\n        emit('error', err);\r\n      }\r\n    },\r\n    duplicateSelection: () => {\r\n      const ids = new Set(pointer.getSelection());\r\n      const sn = scene.nodes.filter((n) => ids.has(n.id));\r\n      if (sn.length === 0) return;\r\n      const se = scene.edges.filter((ed) => ids.has(ed.source) && ids.has(ed.target));\r\n      pasteClone(sn, se, 24, 24);\r\n    },\r\n    groupSelection: () => {\r\n      const ids = pointer.getSelection().filter((id) => scene.nodes.some((n) => n.id === id));\r\n      if (ids.length === 0) return;\r\n      const taken = new Set(scene.containers.map((c) => c.id));\r\n      let k = 1;\r\n      while (taken.has(`sub${k}`)) k += 1;\r\n      pointerHost.runCommand(\r\n        cmdGroup({ id: `sub${k}`, label: '群組', x: 0, y: 0, w: 0, h: 0, childNodeIds: ids }),\r\n        'group',\r\n      );\r\n    },\r\n    setNodeColor: (id, fill, stroke) => {\r\n      pointerHost.runCommand(cmdSetNodeStyle(id, { fill, stroke }), 'color');\r\n    },\r\n    alignSelection: (axis) => {\r\n      const ids = pointer.getSelection().filter((id) => scene.nodes.some((n) => n.id === id));\r\n      if (ids.length >= 2) pointerHost.runCommand(cmdAlignNodes(ids, axis), 'align');\r\n    },\r\n    distributeSelection: (axis) => {\r\n      const ids = pointer.getSelection().filter((id) => scene.nodes.some((n) => n.id === id));\r\n      if (ids.length >= 3) pointerHost.runCommand(cmdDistributeNodes(ids, axis), 'distribute');\r\n    },\r\n    ungroupNode: (nodeId) => {\r\n      const node = scene.nodes.find((n) => n.id === nodeId);\r\n      if (node?.parentId) pointerHost.runCommand(cmdUngroup(node.parentId), 'ungroup');\r\n    },\r\n\r\n    // ── sequence 專屬 ── 新增後都直接開編輯器:剛長出來的東西叫 P3 / message,\r\n    // 使用者百分之百要改字,少一次「還要自己找到它再雙擊」。\r\n    addSeqParticipant: () => {\r\n      // 新 id 用與 cmdAddSeqParticipant 相同的規則推出來(P1、P2…第一個沒被占用的),\r\n      // 指令本身不回傳 id,而開編輯器需要它。\r\n      const ids = new Set(scene.sequence?.participants.map((p) => p.id) ?? []);\r\n      let n = 1;\r\n      while (ids.has(`P${n}`)) n += 1;\r\n      const newId = `P${n}`;\r\n      pointerHost.runCommand(cmdAddSeqParticipant(), 'add-participant');\r\n      setTimeout(() => openEditor(newId), 0);\r\n    },\r\n    addSeqMessage: () => {\r\n      const idx = scene.sequence?.statements.length ?? 0;\r\n      pointerHost.runCommand(cmdAddSeqMessage(), 'add-message');\r\n      setTimeout(() => openSeqMessageEditor(idx), 0);\r\n    },\r\n    addSeqNote: () => {\r\n      const idx = scene.sequence?.statements.length ?? 0;\r\n      pointerHost.runCommand(cmdAddSeqNote(), 'add-note');\r\n      setTimeout(() => openSeqMessageEditor(idx), 0);\r\n    },\r\n    toggleSeqArrow: (index) => {\r\n      const idx = index ?? selectedSeqStatement();\r\n      if (idx == null) return;\r\n      if (scene.sequence?.statements[idx]?.kind !== 'message') return; // 筆記沒有箭頭\r\n      pointerHost.runCommand(cmdToggleSeqArrow(idx), 'seq-arrow');\r\n    },\r\n    editSelection: () => {\r\n      const idx = selectedSeqStatement();\r\n      if (idx != null) {\r\n        openSeqMessageEditor(idx);\r\n        return;\r\n      }\r\n      const nodeId = pointer.getSelection().find((id) => scene.nodes.some((n) => n.id === id));\r\n      if (nodeId) openEditor(nodeId);\r\n    },\r\n\r\n    setDark: (d) => {\r\n      dark = d;\r\n      host.classList.toggle('rsm-dark', d);\r\n      renderer.setDark(d);\r\n      form?.setDark(d);\r\n      refreshOverlay();\r\n    },\r\n\r\n    getSvg: () => svg,\r\n    exportSvg: () => (formActive && form ? form.exportSvg() : prepareSvgElement(exportClone()).serialized),\r\n    exportPng: async (rasterOpts) => {\r\n      if (formActive && form) return form.exportPng(rasterOpts);\r\n      // foreignObject(HTML 標籤)會污染 canvas → 點陣化前先攤平成 SVG <text>。\r\n      const clone = exportClone();\r\n      flattenForeignObjects(clone);\r\n      const prepared = prepareSvgElement(clone);\r\n      return rasterizeToBlob(prepared, { ...rasterOpts, dark });\r\n    },\r\n    downloadSvg: (filename = 'diagram.svg') => {\r\n      downloadBlob(svgBlob(handle.exportSvg()), filename);\r\n    },\r\n    downloadPng: async (filename = 'diagram.png', rasterOpts) => {\r\n      const blob = await handle.exportPng(rasterOpts);\r\n      downloadBlob(blob, filename);\r\n    },\r\n    toggleHelp: (show) => toggleHelp(show),\r\n    setLook: (look) => {\r\n      // 手寫字體(Virgil)是靠 host 上的 rsm-clean class 開關的 —— 只叫 renderer 重畫,\r\n      // 文字外觀一個字都不會變。這個 class 以前只在建構時設一次,切風格時沒人動它,\r\n      // 於是「手繪」按下去只換得到形狀,體感就是沒反應。\r\n      host.classList.toggle('rsm-clean', look === 'clean');\r\n      renderer.setLook(look);\r\n      refreshOverlay();\r\n    },\r\n    getLook: () => renderer.getLook(),\r\n    copyPngToClipboard: async (rasterOpts) => {\r\n      const nav = (globalThis as { navigator?: Navigator }).navigator;\r\n      const CI = (globalThis as { ClipboardItem?: typeof ClipboardItem }).ClipboardItem;\r\n      if (!nav?.clipboard?.write || !CI) {\r\n        throw new Error('此環境不支援將圖片寫入剪貼簿。');\r\n      }\r\n      const blob = await handle.exportPng(rasterOpts);\r\n      await nav.clipboard.write([new CI({ [blob.type]: blob })]);\r\n    },\r\n\r\n    renderPreview: async (container, theme = 'colorful') => {\r\n      await renderDiagram({ code: handle.toMermaid(), container, theme, dark, mermaid: opts.mermaid });\r\n    },\r\n\r\n    on: (event, cb) => {\r\n      let set = listeners.get(event);\r\n      if (!set) {\r\n        set = new Set();\r\n        listeners.set(event, set);\r\n      }\r\n      set.add(cb);\r\n      return () => set!.delete(cb);\r\n    },\r\n    destroy: () => {\r\n      if (debounceTimer) clearTimeout(debounceTimer);\r\n      clearTimeout(graceTimer);\r\n      cancelTextEdit?.();\r\n      form?.destroy();\r\n      pointer.destroy();\r\n      host.removeEventListener('keydown', onKeyDown);\r\n      host.removeEventListener('contextmenu', onContextMenu);\r\n      closeContextMenu();\r\n      emptyHint.remove();\r\n      helpOverlay?.remove();\r\n      svg.remove();\r\n      host.classList.remove('rsm-editor-root', 'rsm-dark', 'rsm-clean');\r\n      listeners.clear();\r\n    },\r\n  };\r\n\r\n  // 初始載入。\r\n  if (opts.source) {\r\n    void handle.loadSource(opts.source);\r\n  } else {\r\n    renderer.render(scene);\r\n    handle.fit();\r\n  }\r\n\r\n  return handle;\r\n}\r\n","// flowchart 文字 → 場景。透過 mermaid 自身的解析後 DB(getDiagramFromText().db)取得\r\n// parser-grade 拓樸(非 regex)。需要 DOM(mermaid 解析會建圖)→ async、browser-scoped。\r\n// 失敗時降級成最小骨架,不拋例外。\r\n\r\nimport type { ParseResult, ParseWarning } from '../../adapters/types';\r\nimport type {\r\n  EditorScene,\r\n  ElementStyle,\r\n  FlowDirection,\r\n  SceneContainer,\r\n  SceneEdge,\r\n  SceneNode,\r\n} from '../../scene/types';\r\nimport type { MermaidLike } from '../../../../types';\r\nimport { arrowFromFlowEdge, shapeFromFlowType } from './syntax-maps';\r\n\r\n/** mermaid 預設匯出實際具備、但 MermaidLike 未列的 parse 入口。 */\r\ninterface MermaidApiLike {\r\n  mermaidAPI?: {\r\n    getDiagramFromText?: (text: string) => Promise<{ db?: unknown }> | { db?: unknown };\r\n  };\r\n  getDiagramFromText?: (text: string) => Promise<{ db?: unknown }> | { db?: unknown };\r\n}\r\n\r\ninterface FlowDbLike {\r\n  getDirection?: () => string;\r\n  getVertices?: () => Map<string, FlowVertexLike> | Record<string, FlowVertexLike>;\r\n  getEdges?: () => FlowEdgeLike[];\r\n  getSubGraphs?: () => FlowSubGraphLike[];\r\n  getTooltip?: (id: string) => string | undefined;\r\n}\r\n\r\ninterface FlowVertexLike {\r\n  id: string;\r\n  text?: string;\r\n  type?: string;\r\n  labelType?: string;\r\n  styles?: string[];\r\n  classes?: string[];\r\n  dir?: string;\r\n}\r\n\r\ninterface FlowEdgeLike {\r\n  start: string;\r\n  end: string;\r\n  id?: string;\r\n  isUserDefinedId?: boolean;\r\n  type?: string;\r\n  stroke?: string;\r\n  length?: number;\r\n  text?: string;\r\n  labelType?: string;\r\n  style?: string[];\r\n}\r\n\r\n/** style/linkStyle/classDef 的屬性陣列(如 [\"fill:#bbf\",\"stroke:#e11\",\"stroke-width:3px\"])→ ElementStyle。 */\r\nfunction parseStyleProps(styles: string[] | undefined): ElementStyle | undefined {\r\n  if (!styles || !styles.length) return undefined;\r\n  const out: ElementStyle = {};\r\n  for (const s of styles) {\r\n    const idx = s.indexOf(':');\r\n    if (idx < 0) continue;\r\n    const k = s.slice(0, idx).trim();\r\n    const v = s.slice(idx + 1).trim();\r\n    if (k === 'fill' && v && v !== 'none') out.fill = v;\r\n    else if (k === 'stroke' && v && v !== 'none') out.stroke = v;\r\n    else if (k === 'stroke-width') {\r\n      const n = parseFloat(v);\r\n      if (!Number.isNaN(n)) out.strokeWidth = n;\r\n    } else if (k === 'stroke-dasharray' && v && v !== 'none') out.strokeDasharray = v;\r\n    else if (k === 'color' && v) out.color = v;\r\n  }\r\n  return Object.keys(out).length ? out : undefined;\r\n}\r\n\r\ninterface FlowSubGraphLike {\r\n  id: string;\r\n  title?: string;\r\n  nodes: string[];\r\n  dir?: string;\r\n}\r\n\r\nconst DEFAULT_NODE_W = 120;\r\nconst DEFAULT_NODE_H = 56;\r\n\r\nfunction toEntries<T>(coll: Map<string, T> | Record<string, T>): Array<[string, T]> {\r\n  if (coll instanceof Map) return [...coll.entries()];\r\n  return Object.entries(coll);\r\n}\r\n\r\nfunction normalizeDirection(dir: string | undefined): FlowDirection {\r\n  const d = (dir ?? 'TB').toUpperCase();\r\n  if (d === 'TD') return 'TD';\r\n  if (d === 'BT' || d === 'RL' || d === 'LR' || d === 'TB') return d;\r\n  return 'TB';\r\n}\r\n\r\n/** 預估節點尺寸(layout 之前的暫定值,讓無排版時也能畫)。 */\r\nfunction estimateSize(label: string): { w: number; h: number } {\r\n  const longest = label.split(/<br\\s*\\/?>|\\n/).reduce((m, s) => Math.max(m, s.length), 0);\r\n  const w = Math.max(DEFAULT_NODE_W, longest * 9 + 32);\r\n  const lines = label.split(/<br\\s*\\/?>|\\n/).length;\r\n  const h = Math.max(DEFAULT_NODE_H, lines * 22 + 24);\r\n  return { w, h };\r\n}\r\n\r\n/** 預掃原始文字,撈出 DB 看不到的內容(註解 / 樣式 / click)以利逐字回吐。 */\r\nfunction prescan(src: string): {\r\n  frontmatter?: string;\r\n  comments: string[];\r\n  styleLines: string[];\r\n  clickLines: string[];\r\n  classDefs: Map<string, string[]>;\r\n} {\r\n  let body = src;\r\n  let frontmatter: string | undefined;\r\n  if (body.startsWith('---')) {\r\n    const end = body.indexOf('\\n---', 3);\r\n    if (end !== -1) {\r\n      const after = body.indexOf('\\n', end + 1);\r\n      frontmatter = body.slice(0, after === -1 ? body.length : after);\r\n      body = after === -1 ? '' : body.slice(after + 1);\r\n    }\r\n  }\r\n  const comments: string[] = [];\r\n  const styleLines: string[] = [];\r\n  const clickLines: string[] = [];\r\n  // getClasses() 常為空 → 自原文解析 classDef NAME[,NAME2] fill:...,stroke:... 供節點上色。\r\n  const classDefs = new Map<string, string[]>();\r\n  for (const raw of body.split('\\n')) {\r\n    const line = raw.trim();\r\n    if (line.startsWith('%%')) comments.push(line);\r\n    else if (/^(classDef|class|style|linkStyle)\\b/.test(line)) {\r\n      styleLines.push(line);\r\n      const cd = line.match(/^classDef\\s+(\\S+)\\s+(.+)$/);\r\n      if (cd) {\r\n        const props = cd[2].split(',').map((s) => s.trim());\r\n        for (const name of cd[1].split(',')) classDefs.set(name.trim(), props);\r\n      }\r\n    } else if (/^(click|href)\\b/.test(line)) clickLines.push(line);\r\n  }\r\n  return { frontmatter, comments, styleLines, clickLines, classDefs };\r\n}\r\n\r\nasync function getFlowDb(text: string, mermaid: MermaidLike): Promise<FlowDbLike | undefined> {\r\n  const api = mermaid as unknown as MermaidApiLike;\r\n  const fn = api.mermaidAPI?.getDiagramFromText ?? api.getDiagramFromText;\r\n  if (typeof fn !== 'function') return undefined;\r\n  // getDiagramFromText 的型別偵測需要 mermaid 已 initialize(否則拋 \"No diagram type detected\")。\r\n  // 編輯器在任何 render 之前就 parse,故這裡冪等地初始化一次;不覆寫 host 的主題設定。\r\n  try {\r\n    mermaid.initialize?.({ startOnLoad: false });\r\n  } catch {\r\n    /* 已初始化或不支援,忽略 */\r\n  }\r\n  const diagram = await fn.call(api.mermaidAPI ?? api, text);\r\n  const db = diagram?.db as FlowDbLike | undefined;\r\n  if (!db || typeof db.getVertices !== 'function') return undefined;\r\n  return db;\r\n}\r\n\r\n/** 解析失敗時的最小骨架:救出 `A --> B` 這類明顯邊與其節點。 */\r\nfunction fallbackParse(text: string, prescanRes: ReturnType<typeof prescan>): EditorScene {\r\n  const nodes = new Map<string, SceneNode>();\r\n  const edges: SceneEdge[] = [];\r\n  let i = 0;\r\n  const ensure = (id: string): void => {\r\n    if (!nodes.has(id)) {\r\n      const size = estimateSize(id);\r\n      nodes.set(id, {\r\n        id,\r\n        shape: 'rectangle',\r\n        label: id,\r\n        x: 0,\r\n        y: 0,\r\n        w: size.w,\r\n        h: size.h,\r\n        data: { kind: 'flowchart' },\r\n        sourceIndex: nodes.size,\r\n      });\r\n    }\r\n  };\r\n  const re = /([A-Za-z0-9_]+)\\s*-{2,3}>?\\s*([A-Za-z0-9_]+)/g;\r\n  let m: RegExpExecArray | null;\r\n  for (const line of text.split('\\n')) {\r\n    re.lastIndex = 0;\r\n    while ((m = re.exec(line)) !== null) {\r\n      ensure(m[1]);\r\n      ensure(m[2]);\r\n      edges.push({\r\n        id: `e${i++}`,\r\n        source: m[1],\r\n        target: m[2],\r\n        lineKind: 'solid',\r\n        arrowStart: 'none',\r\n        arrowEnd: 'arrow',\r\n        data: { kind: 'flowchart' },\r\n        sourceIndex: i,\r\n      });\r\n    }\r\n  }\r\n  return {\r\n    version: 1,\r\n    diagramType: 'flowchart',\r\n    meta: { type: 'flowchart', direction: 'TB' },\r\n    nodes: [...nodes.values()],\r\n    edges,\r\n    containers: [],\r\n    frontmatter: prescanRes.frontmatter,\r\n    raw: { ...prescanRes, fullSource: text },\r\n    layoutOwner: 'engine',\r\n  };\r\n}\r\n\r\nexport async function flowDbToScene(text: string, mermaid: MermaidLike): Promise<ParseResult> {\r\n  const warnings: ParseWarning[] = [];\r\n  const pre = prescan(text);\r\n\r\n  let db: FlowDbLike | undefined;\r\n  try {\r\n    db = await getFlowDb(text, mermaid);\r\n  } catch (err) {\r\n    warnings.push({ message: `mermaid 解析失敗,改用最小骨架:${(err as Error).message}` });\r\n  }\r\n\r\n  if (!db) {\r\n    if (warnings.length === 0) {\r\n      warnings.push({ message: 'mermaid 解析 API 不可用,改用最小骨架。' });\r\n    }\r\n    return { scene: fallbackParse(text, pre), warnings };\r\n  }\r\n\r\n  const direction = normalizeDirection(db.getDirection?.());\r\n  const nodes: SceneNode[] = [];\r\n  let idx = 0;\r\n  for (const [id, v] of toEntries(db.getVertices?.() ?? new Map())) {\r\n    const label = v.text ?? id;\r\n    const size = estimateSize(label);\r\n    const node: SceneNode = {\r\n      id,\r\n      shape: shapeFromFlowType(v.type),\r\n      label,\r\n      labelKind: (v.labelType as SceneNode['labelKind']) ?? 'text',\r\n      x: 0,\r\n      y: 0,\r\n      w: size.w,\r\n      h: size.h,\r\n      data: { kind: 'flowchart' },\r\n      sourceIndex: idx++,\r\n    };\r\n    // 節點上色:classDef(由 classRef 解析)+ 行內 style(v.styles,優先)合併。\r\n    const classRef = v.classes && v.classes.length > 0 ? v.classes[0] : undefined;\r\n    const classProps = classRef ? parseStyleProps(pre.classDefs.get(classRef)) : undefined;\r\n    const inlineProps = parseStyleProps(v.styles);\r\n    if (classRef || classProps || inlineProps) {\r\n      node.style = { ...classProps, ...inlineProps, ...(classRef ? { classRef } : {}) };\r\n    }\r\n    nodes.push(node);\r\n  }\r\n\r\n  const edges: SceneEdge[] = [];\r\n  let eIdx = 0;\r\n  for (const fe of db.getEdges?.() ?? []) {\r\n    const arrow = arrowFromFlowEdge(fe);\r\n    edges.push({\r\n      id: fe.isUserDefinedId && fe.id ? fe.id : `e${eIdx}`,\r\n      source: fe.start,\r\n      target: fe.end,\r\n      label: fe.text && fe.text.length > 0 ? fe.text : undefined,\r\n      labelKind: (fe.labelType as SceneEdge['labelKind']) ?? 'text',\r\n      lineKind: arrow.lineKind,\r\n      arrowStart: arrow.arrowStart,\r\n      arrowEnd: arrow.arrowEnd,\r\n      minLen: arrow.minLen,\r\n      style: parseStyleProps(fe.style),\r\n      data: { kind: 'flowchart' },\r\n      sourceIndex: eIdx++,\r\n    });\r\n  }\r\n\r\n  // subgraph:用 nodes[] 含子 subgraph id 還原巢狀。\r\n  const subgraphs = db.getSubGraphs?.() ?? [];\r\n  const sgIds = new Set(subgraphs.map((s) => s.id));\r\n  const containers: SceneContainer[] = [];\r\n  let cIdx = 0;\r\n  for (const sg of subgraphs) {\r\n    const childNodeIds = sg.nodes.filter((n) => !sgIds.has(n));\r\n    const childContainerIds = sg.nodes.filter((n) => sgIds.has(n));\r\n    containers.push({\r\n      id: sg.id,\r\n      label: sg.title ?? sg.id,\r\n      x: 0,\r\n      y: 0,\r\n      w: 0,\r\n      h: 0,\r\n      childNodeIds,\r\n      childContainerIds,\r\n      direction: sg.dir ? normalizeDirection(sg.dir) : undefined,\r\n      sourceIndex: cIdx++,\r\n    });\r\n  }\r\n  // 設定子容器的 parentId 與節點 parentId。\r\n  for (const c of containers) {\r\n    for (const childCid of c.childContainerIds ?? []) {\r\n      const child = containers.find((x) => x.id === childCid);\r\n      if (child) child.parentId = c.id;\r\n    }\r\n    for (const nid of c.childNodeIds) {\r\n      const node = nodes.find((n) => n.id === nid);\r\n      if (node) node.parentId = c.id;\r\n    }\r\n  }\r\n\r\n  const scene: EditorScene = {\r\n    version: 1,\r\n    diagramType: 'flowchart',\r\n    meta: { type: 'flowchart', direction },\r\n    nodes,\r\n    edges,\r\n    containers,\r\n    frontmatter: pre.frontmatter,\r\n    raw: {\r\n      comments: pre.comments,\r\n      styleLines: pre.styleLines,\r\n      clickLines: pre.clickLines,\r\n    },\r\n    // 來自文字 → 尚無座標,標記由引擎排版(layout 之後改 user)。\r\n    layoutOwner: 'engine',\r\n  };\r\n  return { scene, warnings };\r\n}\r\n","// 場景 → flowchart 文字。確定性、可逐行 diff、永遠輸出合法 mermaid。\r\n\r\nimport type { DataLossWarning, SerializeResult } from '../../adapters/types';\r\nimport type { EditorScene, SceneContainer, SceneEdge, SceneNode } from '../../scene/types';\r\nimport { SHAPE_TO_BRACKETS, buildLinkOperator } from './syntax-maps';\r\n\r\nconst INDENT = '    ';\r\n\r\n/** 是否可不加引號直接當 label(僅英數、空白、底線、CJK 等安全字元)。 */\r\nfunction isBareSafe(label: string): boolean {\r\n  if (label.length === 0) return false;\r\n  if (label !== label.trim()) return false;\r\n  // 含括號/引號/管線/井號/角括號/大括號 → 需引號。\r\n  return !/[[\\](){}|<>\"#&;\\\\/]/.test(label) && !/^\\d/.test(label);\r\n}\r\n\r\n/** 把 label 轉成可放進括號的安全形式。 */\r\nfunction escapeLabel(label: string, kind?: SceneNode['labelKind']): string {\r\n  if (kind === 'markdown') {\r\n    // markdown label 用反引號包裹。\r\n    const inner = label.replace(/`/g, '\\\\`');\r\n    return `\"\\`${inner}\\`\"`;\r\n  }\r\n  if (isBareSafe(label)) return label;\r\n  // 引號內 mermaid 保留 & # ( ) 等字面值;只需轉義會破壞解析的 \" 與換行。\r\n  // (先前還轉 &→&amp;、#→&#35;,但 mermaid 不會還原 → 每次 round-trip 重複轉義成 &amp;amp; 而資料漸壞。)\r\n  const escaped = label.replace(/\"/g, '&quot;').replace(/\\r?\\n/g, '<br/>');\r\n  return `\"${escaped}\"`;\r\n}\r\n\r\n/** 節點宣告:`id[label]`。rectangle + 空 label → 裸 id。 */\r\nfunction declareNode(n: SceneNode): string {\r\n  const brackets = SHAPE_TO_BRACKETS[n.shape];\r\n  if (!brackets || (n.shape === 'rectangle' && n.label.length === 0)) {\r\n    // 無對映外形(passthrough / 其他圖種)或空矩形 → 裸 id(+ 原始 raw)。\r\n    return n.raw ? `${n.id}${n.raw}` : n.id;\r\n  }\r\n  const lbl = n.label.length === 0 ? '' : escapeLabel(n.label, n.labelKind);\r\n  const inner = lbl.length === 0 ? ' ' : lbl;\r\n  let decl = `${n.id}${brackets.left}${inner}${brackets.right}`;\r\n  if (n.style?.classRef) decl += `:::${n.style.classRef}`;\r\n  return decl;\r\n}\r\n\r\nfunction serializeEdge(e: SceneEdge): string {\r\n  const op = buildLinkOperator(e);\r\n  if (e.label && e.label.length > 0) {\r\n    return `${e.source} ${op}|${escapeLabel(e.label, e.labelKind)}| ${e.target}`;\r\n  }\r\n  return `${e.source} ${op} ${e.target}`;\r\n}\r\n\r\n/** 比較器:先 sourceIndex(parse 原序),否則維持插入序。 */\r\nfunction bySourceIndex<T extends { sourceIndex?: number }>(a: T, b: T): number {\r\n  const ai = a.sourceIndex ?? Number.MAX_SAFE_INTEGER;\r\n  const bi = b.sourceIndex ?? Number.MAX_SAFE_INTEGER;\r\n  return ai - bi;\r\n}\r\n\r\nexport function sceneToFlowchart(scene: EditorScene): SerializeResult {\r\n  // 解析失敗的降級場景(空節點但保有原文)→ 原樣回吐,絕不覆寫成空。\r\n  if (scene.nodes.length === 0 && scene.raw?.fullSource) {\r\n    return { text: scene.raw.fullSource, warnings: [] };\r\n  }\r\n  const warnings: DataLossWarning[] = [];\r\n  const lines: string[] = [];\r\n\r\n  // 1. frontmatter(逐字)。\r\n  if (scene.frontmatter) {\r\n    lines.push(scene.frontmatter.replace(/\\n+$/, ''));\r\n  }\r\n  // 2. init / 設定指令(逐字,來自 raw.comments 中的 %%{...}%%)。必須在標頭前。\r\n  for (const c of scene.raw?.comments ?? []) {\r\n    if (c.trim().startsWith('%%{')) lines.push(c.trim());\r\n  }\r\n\r\n  // 3. 標頭。\r\n  const direction = scene.meta.type === 'flowchart' ? scene.meta.direction : 'TB';\r\n  lines.push(`flowchart ${direction}`);\r\n\r\n  // 3b. 一般 %% 註解(非 init)→ 標頭後逐字保留(原位置未存,內容不丟即可)。\r\n  for (const c of scene.raw?.comments ?? []) {\r\n    const t = c.trim();\r\n    if (t.startsWith('%%') && !t.startsWith('%%{')) lines.push(INDENT + t);\r\n  }\r\n\r\n  // 4. 節點:先頂層,容器內的留到 subgraph 裡宣告。\r\n  const containerOf = new Map<string, string>();\r\n  for (const c of scene.containers) {\r\n    for (const cid of c.childNodeIds) containerOf.set(cid, c.id);\r\n  }\r\n  const topNodes = scene.nodes.filter((n) => !containerOf.has(n.id)).sort(bySourceIndex);\r\n  for (const n of topNodes) lines.push(INDENT + declareNode(n));\r\n\r\n  // 5. subgraph(DFS,支援巢狀)。\r\n  const byId = new Map(scene.nodes.map((n) => [n.id, n] as const));\r\n  const containersById = new Map(scene.containers.map((c) => [c.id, c] as const));\r\n  const childContainers = new Map<string, SceneContainer[]>();\r\n  const rootContainers: SceneContainer[] = [];\r\n  for (const c of scene.containers) {\r\n    if (c.parentId && containersById.has(c.parentId)) {\r\n      const arr = childContainers.get(c.parentId) ?? [];\r\n      arr.push(c);\r\n      childContainers.set(c.parentId, arr);\r\n    } else {\r\n      rootContainers.push(c);\r\n    }\r\n  }\r\n\r\n  const emitContainer = (c: SceneContainer, depth: number): void => {\r\n    const pad = INDENT.repeat(depth);\r\n    const title = c.label && c.label.length > 0 ? ` [${escapeLabel(c.label)}]` : '';\r\n    lines.push(`${pad}subgraph ${c.id}${title}`);\r\n    if (c.direction) lines.push(`${pad}${INDENT}direction ${c.direction}`);\r\n    for (const cid of c.childNodeIds) {\r\n      const node = byId.get(cid);\r\n      if (node) lines.push(pad + INDENT + declareNode(node));\r\n    }\r\n    for (const child of (childContainers.get(c.id) ?? []).sort(bySourceIndex)) {\r\n      emitContainer(child, depth + 1);\r\n    }\r\n    lines.push(`${pad}end`);\r\n  };\r\n  for (const c of rootContainers.sort(bySourceIndex)) emitContainer(c, 1);\r\n\r\n  // 6. 連線(穩定排序)。\r\n  const edges = [...scene.edges].sort(bySourceIndex);\r\n  for (const e of edges) {\r\n    if (!byId.has(e.source) || !byId.has(e.target)) {\r\n      warnings.push({ message: `略過懸空連線 ${e.id}(${e.source}→${e.target})`, elementId: e.id });\r\n      continue;\r\n    }\r\n    lines.push(INDENT + serializeEdge(e));\r\n  }\r\n\r\n  // 7. 節點內聯樣式(編輯器設的底色 / 框線)→ mermaid `style <id> fill:..,stroke:..`。\r\n  //    來自原文的 style 行已在 §8 逐字回吐(且可能含本層不解析的屬性),這裡只補「編輯器新設」的。\r\n  const styledInRaw = new Set<string>();\r\n  for (const s of scene.raw?.styleLines ?? []) {\r\n    const m = s.trim().match(/^style\\s+([^\\s]+)\\s/);\r\n    if (m) for (const id of m[1].split(',')) styledInRaw.add(id.trim());\r\n  }\r\n  for (const n of scene.nodes) {\r\n    const st = n.style;\r\n    if (!st || st.classRef) continue; // classRef 已在宣告時用 :::name 輸出\r\n    if (styledInRaw.has(n.id)) continue; // 原文已有 style 行 → 由 §8 回吐,避免重複\r\n    const parts: string[] = [];\r\n    if (st.fill) parts.push(`fill:${st.fill}`);\r\n    if (st.stroke) parts.push(`stroke:${st.stroke}`);\r\n    if (st.strokeWidth) parts.push(`stroke-width:${st.strokeWidth}px`);\r\n    if (st.color) parts.push(`color:${st.color}`);\r\n    if (parts.length) lines.push(`${INDENT}style ${n.id} ${parts.join(',')}`);\r\n  }\r\n\r\n  // 8. 樣式 / class / click(逐字回吐)。\r\n  for (const s of scene.raw?.styleLines ?? []) lines.push(INDENT + s.trim());\r\n  for (const ck of scene.raw?.clickLines ?? []) lines.push(INDENT + ck.trim());\r\n\r\n  return { text: lines.join('\\n') + '\\n', warnings };\r\n}\r\n","// flowchart 圖種 adapter。出貨唯一註冊的 adapter。\r\n\r\nimport { mermaidSvgLayout } from '../../layout/mermaid-svg-layout';\r\nimport type { LayoutEngine } from '../../layout/types';\r\nimport { flowDbToScene } from '../../round-trip/flowchart/parse';\r\nimport { sceneToFlowchart } from '../../round-trip/flowchart/serialize';\r\nimport type { EditorScene } from '../../scene/types';\r\nimport { registerAdapter } from '../registry';\r\nimport type { DiagramAdapter } from '../types';\r\nimport type { MermaidLike, MermaidSource } from '../../../../types';\r\n\r\nexport const flowchartAdapter: DiagramAdapter = {\r\n  capabilities: {\r\n    type: 'flowchart',\r\n    shapes: [\r\n      'rectangle',\r\n      'rounded',\r\n      'stadium',\r\n      'subroutine',\r\n      'cylinder',\r\n      'circle',\r\n      'doubleCircle',\r\n      'diamond',\r\n      'hexagon',\r\n      'odd',\r\n      'trapezoid',\r\n      'trapezoidAlt',\r\n      'parallelogram',\r\n      'parallelogramAlt',\r\n      'ellipse',\r\n    ],\r\n    quickShapes: ['rectangle', 'rounded', 'stadium', 'diamond', 'circle', 'hexagon', 'cylinder'],\r\n    arrowHeads: ['none', 'arrow', 'open', 'dot', 'cross'],\r\n    lineKinds: ['solid', 'dotted', 'thick', 'invisible'],\r\n    freeform: true,\r\n    defaults: { nodeShape: 'rectangle', arrowEnd: 'arrow' },\r\n  },\r\n  keywords: ['flowchart', 'graph'],\r\n\r\n  parse(text: string, mermaid: MermaidLike) {\r\n    return flowDbToScene(text, mermaid);\r\n  },\r\n\r\n  serialize(scene: EditorScene) {\r\n    return sceneToFlowchart(scene);\r\n  },\r\n\r\n  async layout(scene: EditorScene, engine: LayoutEngine, mermaid?: MermaidSource): Promise<EditorScene> {\r\n    const code = sceneToFlowchart(scene).text;\r\n    return engine.layout(scene, { code, mermaid });\r\n  },\r\n};\r\n\r\n/** 顯式註冊(非 module side-effect,讓只用 flowchart 的 host 不被迫 bundle 其他 adapter)。 */\r\nexport function registerFlowchartAdapter(): void {\r\n  registerAdapter(flowchartAdapter);\r\n}\r\n\r\nexport { mermaidSvgLayout };\r\n","// stateDiagram(-v2) 文字 → 場景。透過 mermaid 解析後 DB 的 getData()(layout-ready 統一格式)\r\n// 取得節點(含 shape / isGroup / parentId)與連線。需要 DOM → async、browser-scoped。\r\n// 失敗時降級成最小骨架,不拋例外。\r\n\r\nimport type { ParseResult, ParseWarning } from '../../adapters/types';\r\nimport type {\r\n  EditorScene,\r\n  FlowDirection,\r\n  NodeShape,\r\n  SceneContainer,\r\n  SceneEdge,\r\n  SceneNode,\r\n} from '../../scene/types';\r\nimport type { MermaidLike } from '../../../../types';\r\n\r\ninterface MermaidApiLike {\r\n  mermaidAPI?: { getDiagramFromText?: (t: string) => Promise<{ db?: unknown }> | { db?: unknown } };\r\n  getDiagramFromText?: (t: string) => Promise<{ db?: unknown }> | { db?: unknown };\r\n}\r\n\r\ninterface StateNodeLike {\r\n  id: string;\r\n  label?: string;\r\n  shape?: string;\r\n  isGroup?: boolean;\r\n  parentId?: string;\r\n}\r\ninterface StateEdgeLike {\r\n  id?: string;\r\n  start: string;\r\n  end: string;\r\n  label?: string;\r\n}\r\ninterface StateDbLike {\r\n  getData?: () => { nodes: StateNodeLike[]; edges: StateEdgeLike[] };\r\n  getDirection?: () => string;\r\n}\r\n\r\nfunction normalizeDirection(dir: string | undefined): FlowDirection {\r\n  const d = (dir ?? 'TB').toUpperCase();\r\n  if (d === 'TD') return 'TD';\r\n  if (d === 'BT' || d === 'RL' || d === 'LR' || d === 'TB') return d as FlowDirection;\r\n  return 'TB';\r\n}\r\n\r\n/** getData() 的 shape 字串 → 場景 NodeShape。 */\r\nfunction shapeFromState(shape: string | undefined): { shape: NodeShape; isStart?: boolean; isEnd?: boolean } {\r\n  switch (shape) {\r\n    case 'stateStart':\r\n      return { shape: 'stateStart', isStart: true };\r\n    case 'stateEnd':\r\n      return { shape: 'stateEnd', isEnd: true };\r\n    case 'choice':\r\n      return { shape: 'choice' };\r\n    case 'forkJoin':\r\n    case 'fork':\r\n      return { shape: 'fork' };\r\n    default:\r\n      return { shape: 'state' };\r\n  }\r\n}\r\n\r\nfunction estimateSize(label: string, isPseudo: boolean): { w: number; h: number } {\r\n  if (isPseudo) return { w: 22, h: 22 };\r\n  const longest = label.split(/<br\\s*\\/?>|\\n/).reduce((m, s) => Math.max(m, s.length), 0);\r\n  const w = Math.max(90, longest * 9 + 32);\r\n  const h = Math.max(46, label.split(/<br\\s*\\/?>|\\n/).length * 22 + 20);\r\n  return { w, h };\r\n}\r\n\r\n/** 預掃:抓 DB 看不到 / 尚未模型化的根層內容(註解 / note / <<fork>> / style)以逐字回吐。\r\n *  以大括號深度追蹤,只擷取「根層(深度 0)且非 transition / 非 state-block / 非 direction」的行。 */\r\nfunction prescan(src: string): { frontmatter?: string; comments: string[]; styleLines: string[] } {\r\n  let body = src;\r\n  let frontmatter: string | undefined;\r\n  if (body.startsWith('---')) {\r\n    const end = body.indexOf('\\n---', 3);\r\n    if (end !== -1) {\r\n      const after = body.indexOf('\\n', end + 1);\r\n      frontmatter = body.slice(0, after === -1 ? body.length : after);\r\n      body = after === -1 ? '' : body.slice(after + 1);\r\n    }\r\n  }\r\n  const comments: string[] = [];\r\n  const styleLines: string[] = [];\r\n  let depth = 0;\r\n  let first = true;\r\n  for (const raw of body.split('\\n')) {\r\n    const line = raw.trim();\r\n    const opens = (line.match(/\\{/g) ?? []).length;\r\n    const closes = (line.match(/\\}/g) ?? []).length;\r\n    if (!line) {\r\n      depth += opens - closes;\r\n      continue;\r\n    }\r\n    if (first) {\r\n      // 跳過圖種標頭(stateDiagram / stateDiagram-v2)。\r\n      first = false;\r\n      if (/^stateDiagram/i.test(line)) {\r\n        depth += opens - closes;\r\n        continue;\r\n      }\r\n    }\r\n    if (depth === 0) {\r\n      if (line.startsWith('%%')) comments.push(line);\r\n      else if (/^state\\b/i.test(line) && line.includes('<<')) {\r\n        // `state X <<fork>>` / `<<choice>>` / `<<join>>` 宣告 → 逐字保留(節點本身由 DB 建模)。\r\n        styleLines.push(line);\r\n      } else if (\r\n        !line.includes('-->') &&\r\n        !/^state\\b/i.test(line) &&\r\n        !/^direction\\b/i.test(line) &&\r\n        line !== '}' &&\r\n        !/^\\[\\*\\]/.test(line) &&\r\n        // `id : 描述` 已由節點 label 建模(序列化成 `state \"描述\" as id`)→ 不重複擷取,避免雙行。\r\n        !/^[A-Za-z_]\\w*\\s*:/.test(line)\r\n      ) {\r\n        // note / classDef / class / style / 其他未模型化 → 逐字保留。\r\n        styleLines.push(line);\r\n      }\r\n    }\r\n    depth += opens - closes;\r\n  }\r\n  return { frontmatter, comments, styleLines };\r\n}\r\n\r\nasync function getStateDb(text: string, mermaid: MermaidLike): Promise<StateDbLike | undefined> {\r\n  const api = mermaid as unknown as MermaidApiLike;\r\n  const fn = api.mermaidAPI?.getDiagramFromText ?? api.getDiagramFromText;\r\n  if (typeof fn !== 'function') return undefined;\r\n  try {\r\n    mermaid.initialize?.({ startOnLoad: false });\r\n  } catch {\r\n    /* 已初始化或不支援 */\r\n  }\r\n  const diagram = await fn.call(api.mermaidAPI ?? api, text);\r\n  const db = diagram?.db as StateDbLike | undefined;\r\n  if (!db || typeof db.getData !== 'function') return undefined;\r\n  return db;\r\n}\r\n\r\nexport async function stateDbToScene(text: string, mermaid: MermaidLike): Promise<ParseResult> {\r\n  const warnings: ParseWarning[] = [];\r\n  const pre = prescan(text);\r\n\r\n  let db: StateDbLike | undefined;\r\n  try {\r\n    db = await getStateDb(text, mermaid);\r\n  } catch (err) {\r\n    warnings.push({ message: `mermaid 解析失敗:${(err as Error).message}` });\r\n  }\r\n  if (!db) {\r\n    return {\r\n      scene: {\r\n        version: 1,\r\n        diagramType: 'state',\r\n        meta: { type: 'state' },\r\n        nodes: [],\r\n        edges: [],\r\n        containers: [],\r\n        frontmatter: pre.frontmatter,\r\n        raw: { ...pre, fullSource: text },\r\n        layoutOwner: 'engine',\r\n      },\r\n      warnings: warnings.length ? warnings : [{ message: 'mermaid 解析 API 不可用。' }],\r\n    };\r\n  }\r\n\r\n  const data = db.getData?.() ?? { nodes: [], edges: [] };\r\n  const direction = normalizeDirection(db.getDirection?.());\r\n\r\n  // note 會在 getData 產生污染:note 節點(shape 'note')+ noteGroup 包裝容器(包住真實狀態)\r\n  // + 一條連到 note 的邊。全部排除,改由 prescan 把 `note ...` 原文逐字回吐;真實狀態從\r\n  // noteGroup 內「拉回」其真正的父層。\r\n  const noteNodeIds = new Set(data.nodes.filter((n) => n.shape === 'note').map((n) => n.id));\r\n  const noteGroupIds = new Set(data.nodes.filter((n) => n.shape === 'noteGroup').map((n) => n.id));\r\n  const groupParent = new Map<string, string | null>();\r\n  for (const n of data.nodes) {\r\n    if (n.shape === 'noteGroup') groupParent.set(n.id, n.parentId ?? null);\r\n  }\r\n  const resolveParent = (pid: string | undefined): string | null => {\r\n    let p: string | null = pid ?? null;\r\n    while (p && noteGroupIds.has(p)) p = groupParent.get(p) ?? null;\r\n    return p;\r\n  };\r\n\r\n  const nodes: SceneNode[] = [];\r\n  const containers: SceneContainer[] = [];\r\n  let nIdx = 0;\r\n  let cIdx = 0;\r\n  for (const dn of data.nodes) {\r\n    if (dn.shape === 'note' || dn.shape === 'noteGroup') continue; // note 污染 → 排除\r\n    if (dn.isGroup) {\r\n      containers.push({\r\n        id: dn.id,\r\n        label: dn.label ?? dn.id,\r\n        x: 0,\r\n        y: 0,\r\n        w: 0,\r\n        h: 0,\r\n        parentId: resolveParent(dn.parentId),\r\n        childNodeIds: [],\r\n        childContainerIds: [],\r\n        sourceIndex: cIdx++,\r\n      });\r\n      continue;\r\n    }\r\n    const sh = shapeFromState(dn.shape);\r\n    const isPseudo = Boolean(sh.isStart || sh.isEnd);\r\n    const label = isPseudo ? '' : dn.label ?? dn.id;\r\n    const size = estimateSize(label, isPseudo);\r\n    nodes.push({\r\n      id: dn.id,\r\n      shape: sh.shape,\r\n      label,\r\n      x: 0,\r\n      y: 0,\r\n      w: size.w,\r\n      h: size.h,\r\n      parentId: resolveParent(dn.parentId),\r\n      data: { kind: 'state', isStart: sh.isStart, isEnd: sh.isEnd },\r\n      sourceIndex: nIdx++,\r\n    });\r\n  }\r\n\r\n  // 容器子成員指派。\r\n  const cById = new Map(containers.map((c) => [c.id, c] as const));\r\n  for (const n of nodes) {\r\n    if (n.parentId && cById.has(n.parentId)) cById.get(n.parentId)!.childNodeIds.push(n.id);\r\n  }\r\n  for (const c of containers) {\r\n    if (c.parentId && cById.has(c.parentId)) cById.get(c.parentId)!.childContainerIds!.push(c.id);\r\n  }\r\n\r\n  const edges: SceneEdge[] = [];\r\n  let eIdx = 0;\r\n  for (const de of data.edges) {\r\n    if (noteNodeIds.has(de.start) || noteNodeIds.has(de.end)) continue; // 連到 note 的邊 → 排除\r\n    edges.push({\r\n      id: de.id ?? `e${eIdx}`,\r\n      source: de.start,\r\n      target: de.end,\r\n      label: de.label && de.label.length > 0 ? de.label : undefined,\r\n      lineKind: 'solid',\r\n      arrowStart: 'none',\r\n      arrowEnd: 'arrow',\r\n      data: { kind: 'state' },\r\n      sourceIndex: eIdx++,\r\n    });\r\n  }\r\n\r\n  return {\r\n    scene: {\r\n      version: 1,\r\n      diagramType: 'state',\r\n      meta: { type: 'state', direction },\r\n      nodes,\r\n      edges,\r\n      containers,\r\n      frontmatter: pre.frontmatter,\r\n      raw: { comments: pre.comments, styleLines: pre.styleLines },\r\n      layoutOwner: 'engine',\r\n    },\r\n    warnings,\r\n  };\r\n}\r\n","// 場景 → stateDiagram-v2 文字。確定性、永遠輸出合法 mermaid。\r\n// 處理:狀態 / 轉移 / [*] 偽狀態 / 複合狀態(巢狀 state X { })/ 方向 / 自訂標籤。\r\n\r\nimport type { DataLossWarning, SerializeResult } from '../../adapters/types';\r\nimport type { EditorScene, SceneEdge, SceneNode } from '../../scene/types';\r\n\r\nconst INDENT = '    ';\r\n\r\nfunction isPseudo(n: SceneNode | undefined): boolean {\r\n  if (!n) return false;\r\n  if (n.data?.kind === 'state' && (n.data.isStart || n.data.isEnd)) return true;\r\n  return n.shape === 'stateStart' || n.shape === 'stateEnd';\r\n}\r\n\r\n/** label 需引號?(含空白以外特殊字元)。 */\r\nfunction quoteLabel(label: string): string {\r\n  return `\"${label.replace(/\"/g, '&quot;').replace(/\\r?\\n/g, '<br/>')}\"`;\r\n}\r\n\r\nfunction bySourceIndex<T extends { sourceIndex?: number }>(a: T, b: T): number {\r\n  return (a.sourceIndex ?? Number.MAX_SAFE_INTEGER) - (b.sourceIndex ?? Number.MAX_SAFE_INTEGER);\r\n}\r\n\r\nexport function sceneToState(scene: EditorScene): SerializeResult {\r\n  // 解析失敗的降級場景(空節點但保有原文)→ 原樣回吐,絕不覆寫成空。\r\n  if (scene.nodes.length === 0 && scene.raw?.fullSource) {\r\n    return { text: scene.raw.fullSource, warnings: [] };\r\n  }\r\n  const warnings: DataLossWarning[] = [];\r\n  const lines: string[] = [];\r\n\r\n  if (scene.frontmatter) lines.push(scene.frontmatter.replace(/\\n+$/, ''));\r\n  for (const c of scene.raw?.comments ?? []) {\r\n    if (c.trim().startsWith('%%{')) lines.push(c.trim());\r\n  }\r\n\r\n  lines.push('stateDiagram-v2');\r\n  const dir = scene.meta.type === 'state' ? scene.meta.direction : undefined;\r\n  if (dir && dir !== 'TB' && dir !== 'TD') lines.push(`${INDENT}direction ${dir}`);\r\n  // 一般 %% 註解(非 init)→ 標頭後逐字保留。\r\n  for (const c of scene.raw?.comments ?? []) {\r\n    const t = c.trim();\r\n    if (t.startsWith('%%') && !t.startsWith('%%{')) lines.push(INDENT + t);\r\n  }\r\n\r\n  const nodeById = new Map(scene.nodes.map((n) => [n.id, n] as const));\r\n  const containerById = new Map(scene.containers.map((c) => [c.id, c] as const));\r\n  const parentOf = (id: string): string | null =>\r\n    nodeById.get(id)?.parentId ?? containerById.get(id)?.parentId ?? null;\r\n\r\n  // 轉移 token:偽狀態 → [*],其餘 → id。\r\n  const tok = (id: string): string => (isPseudo(nodeById.get(id)) ? '[*]' : id);\r\n\r\n  // 每條邊的「作用域」= 來源端點的 parentId(複合狀態內 / 根層)。\r\n  const scopeOfEdge = (e: SceneEdge): string | null => parentOf(e.source) ?? parentOf(e.target);\r\n\r\n  // 出現在任一條邊的節點 id(用來判斷孤立狀態需不需要單獨宣告)。\r\n  const inEdge = new Set<string>();\r\n  for (const e of scene.edges) {\r\n    inEdge.add(e.source);\r\n    inEdge.add(e.target);\r\n  }\r\n\r\n  // 解析既有圖時,`state X <<fork>>` 這類宣告被逐字收進 raw.styleLines(見 parse.prescan)。\r\n  // 這裡記下已經有宣告的 id,避免對這些節點又補一行造成重複宣告。\r\n  const declaredStereotype = new Set<string>();\r\n  for (const s of scene.raw?.styleLines ?? []) {\r\n    const m = /^state\\s+([A-Za-z_]\\w*)\\s*<</.exec(s.trim());\r\n    if (m) declaredStereotype.add(m[1]);\r\n  }\r\n\r\n  const emitScope = (scopeId: string | null, depth: number): void => {\r\n    const pad = INDENT.repeat(depth + 1);\r\n\r\n    // 1. 狀態宣告(自訂標籤,或孤立的純狀態)。\r\n    const scopeNodes = scene.nodes\r\n      .filter((n) => (n.parentId ?? null) === scopeId && !isPseudo(n))\r\n      .sort(bySourceIndex);\r\n    for (const n of scopeNodes) {\r\n      // 在編輯器新拖出來的 fork / choice 節點沒有對應的原始宣告行 —— 少了 `<<fork>>` / `<<choice>>`,\r\n      // 重新載入時它就退化成普通狀態方框。這裡補上,外形才真的能 round-trip。\r\n      if ((n.shape === 'fork' || n.shape === 'choice') && !declaredStereotype.has(n.id)) {\r\n        lines.push(`${pad}state ${n.id} <<${n.shape}>>`);\r\n        declaredStereotype.add(n.id);\r\n        continue;\r\n      }\r\n      const label = n.label ?? '';\r\n      if (label.length > 0 && label !== n.id) {\r\n        lines.push(`${pad}state ${quoteLabel(label)} as ${n.id}`);\r\n      } else if (!inEdge.has(n.id)) {\r\n        lines.push(`${pad}${n.id}`);\r\n      }\r\n    }\r\n\r\n    // 2. 此作用域的轉移。\r\n    const scopeEdges = scene.edges.filter((e) => scopeOfEdge(e) === scopeId).sort(bySourceIndex);\r\n    for (const e of scopeEdges) {\r\n      if (!nodeById.has(e.source) && !containerById.has(e.source)) {\r\n        warnings.push({ message: `略過懸空轉移 ${e.id}`, elementId: e.id });\r\n        continue;\r\n      }\r\n      if (!nodeById.has(e.target) && !containerById.has(e.target)) {\r\n        warnings.push({ message: `略過懸空轉移 ${e.id}`, elementId: e.id });\r\n        continue;\r\n      }\r\n      const lbl = e.label && e.label.length > 0 ? `: ${e.label}` : '';\r\n      lines.push(`${pad}${tok(e.source)} --> ${tok(e.target)}${lbl}`);\r\n    }\r\n\r\n    // 3. 複合狀態(巢狀)。\r\n    const scopeContainers = scene.containers\r\n      .filter((c) => (c.parentId ?? null) === scopeId)\r\n      .sort(bySourceIndex);\r\n    for (const c of scopeContainers) {\r\n      const decl =\r\n        c.label && c.label !== c.id ? `state ${quoteLabel(c.label)} as ${c.id}` : `state ${c.id}`;\r\n      lines.push(`${pad}${decl} {`);\r\n      if (c.direction && c.direction !== 'TB' && c.direction !== 'TD') {\r\n        lines.push(`${pad}${INDENT}direction ${c.direction}`);\r\n      }\r\n      emitScope(c.id, depth + 1);\r\n      lines.push(`${pad}}`);\r\n    }\r\n  };\r\n\r\n  emitScope(null, 0);\r\n\r\n  // 4. 未模型化的根層內容(note / classDef / class / style …)逐字回吐。\r\n  for (const s of scene.raw?.styleLines ?? []) lines.push(INDENT + s.trim());\r\n\r\n  return { text: lines.join('\\n') + '\\n', warnings };\r\n}\r\n","// stateDiagram(-v2) 圖種 adapter。\r\n\r\nimport { mermaidSvgLayout } from '../../layout/mermaid-svg-layout';\r\nimport type { LayoutEngine } from '../../layout/types';\r\nimport { stateDbToScene } from '../../round-trip/state/parse';\r\nimport { sceneToState } from '../../round-trip/state/serialize';\r\nimport type { EditorScene } from '../../scene/types';\r\nimport { registerAdapter } from '../registry';\r\nimport type { DiagramAdapter } from '../types';\r\nimport type { MermaidLike, MermaidSource } from '../../../../types';\r\n\r\nexport const stateAdapter: DiagramAdapter = {\r\n  capabilities: {\r\n    type: 'state',\r\n    shapes: ['state', 'stateStart', 'stateEnd', 'choice', 'fork'],\r\n    arrowHeads: ['arrow', 'none'],\r\n    lineKinds: ['solid', 'dotted'],\r\n    freeform: true,\r\n    defaults: { nodeShape: 'state', arrowEnd: 'arrow' },\r\n  },\r\n  keywords: ['statediagram', 'statediagram-v2'],\r\n\r\n  parse(text: string, mermaid: MermaidLike) {\r\n    return stateDbToScene(text, mermaid);\r\n  },\r\n\r\n  serialize(scene: EditorScene) {\r\n    return sceneToState(scene);\r\n  },\r\n\r\n  async layout(scene: EditorScene, engine: LayoutEngine, mermaid?: MermaidSource): Promise<EditorScene> {\r\n    const code = sceneToState(scene).text;\r\n    return engine.layout(scene, { code, mermaid });\r\n  },\r\n};\r\n\r\n/** 顯式註冊(非 module side-effect)。 */\r\nexport function registerStateAdapter(): void {\r\n  registerAdapter(stateAdapter);\r\n}\r\n","// erDiagram 文字 → 場景。透過 mermaid 解析後 DB 的 getData() 取得實體(含屬性)與關係(含基數)。\r\n// 節點 id 用「實體名稱」(getData 內部 id 形如 entity-NAME-n,排版回抓也是用名稱)。\r\n\r\nimport type { ParseResult, ParseWarning } from '../../adapters/types';\r\nimport type { EditorScene, ErAttribute, ErCardinality, SceneEdge, SceneNode } from '../../scene/types';\r\nimport type { MermaidLike } from '../../../../types';\r\nimport { erEntitySize } from '../../render/node-metrics';\r\n\r\ninterface MermaidApiLike {\r\n  mermaidAPI?: { getDiagramFromText?: (t: string) => Promise<{ db?: unknown }> | { db?: unknown } };\r\n  getDiagramFromText?: (t: string) => Promise<{ db?: unknown }> | { db?: unknown };\r\n}\r\ninterface ErNodeLike {\r\n  id: string;\r\n  label?: string;\r\n  shape?: string;\r\n  attributes?: Array<{ type?: string; name?: string; keys?: string[]; comment?: string }>;\r\n}\r\ninterface ErEdgeLike {\r\n  id?: string;\r\n  start: string;\r\n  end: string;\r\n  label?: string;\r\n  arrowTypeStart?: string;\r\n  arrowTypeEnd?: string;\r\n  pattern?: string;\r\n}\r\ninterface ErDbLike {\r\n  getData?: () => { nodes: ErNodeLike[]; edges: ErEdgeLike[] };\r\n  getDirection?: () => string;\r\n}\r\n\r\nfunction normalizeDir(dir: string | undefined): 'TB' | 'TD' | 'BT' | 'LR' | 'RL' {\r\n  const d = (dir ?? 'TB').toUpperCase();\r\n  if (d === 'TD' || d === 'BT' || d === 'RL' || d === 'LR' || d === 'TB') return d as 'TB';\r\n  return 'TB';\r\n}\r\n\r\nfunction cardFromArrow(t: string | undefined): ErCardinality {\r\n  switch (t) {\r\n    case 'zero_or_one':\r\n      return 'zeroOrOne';\r\n    case 'zero_or_more':\r\n      return 'zeroOrMore';\r\n    case 'one_or_more':\r\n      return 'oneOrMore';\r\n    case 'only_one':\r\n    default:\r\n      return 'onlyOne';\r\n  }\r\n}\r\n\r\nfunction prescan(src: string): { comments: string[] } {\r\n  const comments: string[] = [];\r\n  for (const raw of src.split('\\n')) {\r\n    const line = raw.trim();\r\n    if (line.startsWith('%%')) comments.push(line);\r\n  }\r\n  return { comments };\r\n}\r\n\r\nasync function getErDb(text: string, mermaid: MermaidLike): Promise<ErDbLike | undefined> {\r\n  const api = mermaid as unknown as MermaidApiLike;\r\n  const fn = api.mermaidAPI?.getDiagramFromText ?? api.getDiagramFromText;\r\n  if (typeof fn !== 'function') return undefined;\r\n  try {\r\n    mermaid.initialize?.({ startOnLoad: false });\r\n  } catch {\r\n    /* ignore */\r\n  }\r\n  const diagram = await fn.call(api.mermaidAPI ?? api, text);\r\n  const db = diagram?.db as ErDbLike | undefined;\r\n  if (!db || typeof db.getData !== 'function') return undefined;\r\n  return db;\r\n}\r\n\r\nexport async function erDbToScene(text: string, mermaid: MermaidLike): Promise<ParseResult> {\r\n  const warnings: ParseWarning[] = [];\r\n  const pre = prescan(text);\r\n  let db: ErDbLike | undefined;\r\n  try {\r\n    db = await getErDb(text, mermaid);\r\n  } catch (err) {\r\n    warnings.push({ message: `mermaid 解析失敗:${(err as Error).message}` });\r\n  }\r\n  if (!db) {\r\n    return {\r\n      scene: {\r\n        version: 1,\r\n        diagramType: 'er',\r\n        meta: { type: 'er' },\r\n        nodes: [],\r\n        edges: [],\r\n        containers: [],\r\n        raw: { comments: pre.comments, fullSource: text },\r\n        layoutOwner: 'engine',\r\n      },\r\n      warnings: warnings.length ? warnings : [{ message: 'mermaid 解析 API 不可用。' }],\r\n    };\r\n  }\r\n\r\n  const data = db.getData?.() ?? { nodes: [], edges: [] };\r\n  const direction = normalizeDir(db.getDirection?.());\r\n  const idToName = new Map<string, string>();\r\n  for (const dn of data.nodes) idToName.set(dn.id, dn.label ?? dn.id);\r\n\r\n  const nodes: SceneNode[] = [];\r\n  let nIdx = 0;\r\n  for (const dn of data.nodes) {\r\n    const name = dn.label ?? dn.id;\r\n    const attributes: ErAttribute[] = (dn.attributes ?? []).map((a) => ({\r\n      name: a.name ?? '',\r\n      type: a.type,\r\n      keys: a.keys && a.keys.length ? a.keys : undefined,\r\n      comment: a.comment && a.comment.length ? a.comment : undefined,\r\n    }));\r\n    const size = erEntitySize(name, attributes);\r\n    nodes.push({\r\n      id: name,\r\n      shape: 'entity',\r\n      label: name,\r\n      x: 0,\r\n      y: 0,\r\n      w: size.w,\r\n      h: size.h,\r\n      data: { kind: 'er', attributes },\r\n      sourceIndex: nIdx++,\r\n    });\r\n  }\r\n\r\n  const edges: SceneEdge[] = [];\r\n  let eIdx = 0;\r\n  for (const de of data.edges) {\r\n    const src = idToName.get(de.start) ?? de.start;\r\n    const tgt = idToName.get(de.end) ?? de.end;\r\n    const identifying = de.pattern !== 'dashed';\r\n    edges.push({\r\n      id: de.id ?? `e${eIdx}`,\r\n      source: src,\r\n      target: tgt,\r\n      label: de.label && de.label.length > 0 ? de.label : undefined,\r\n      lineKind: identifying ? 'solid' : 'dotted',\r\n      arrowStart: 'none',\r\n      arrowEnd: 'none',\r\n      data: {\r\n        kind: 'er',\r\n        identifying,\r\n        cardStart: cardFromArrow(de.arrowTypeStart),\r\n        cardEnd: cardFromArrow(de.arrowTypeEnd),\r\n      },\r\n      sourceIndex: eIdx++,\r\n    });\r\n  }\r\n\r\n  return {\r\n    scene: {\r\n      version: 1,\r\n      diagramType: 'er',\r\n      meta: { type: 'er', direction },\r\n      nodes,\r\n      edges,\r\n      containers: [],\r\n      raw: { comments: pre.comments },\r\n      layoutOwner: 'engine',\r\n    },\r\n    warnings,\r\n  };\r\n}\r\n","// 場景 → erDiagram 文字。確定性、永遠輸出合法 mermaid。\r\n\r\nimport type { DataLossWarning, SerializeResult } from '../../adapters/types';\r\nimport type { EditorScene, ErCardinality, SceneEdge, SceneNode } from '../../scene/types';\r\n\r\nconst INDENT = '    ';\r\n\r\nconst START_SYM: Record<ErCardinality, string> = {\r\n  zeroOrOne: '|o',\r\n  onlyOne: '||',\r\n  zeroOrMore: '}o',\r\n  oneOrMore: '}|',\r\n};\r\nconst END_SYM: Record<ErCardinality, string> = {\r\n  zeroOrOne: 'o|',\r\n  onlyOne: '||',\r\n  zeroOrMore: 'o{',\r\n  oneOrMore: '|{',\r\n};\r\n\r\nfunction bySourceIndex<T extends { sourceIndex?: number }>(a: T, b: T): number {\r\n  return (a.sourceIndex ?? Number.MAX_SAFE_INTEGER) - (b.sourceIndex ?? Number.MAX_SAFE_INTEGER);\r\n}\r\n\r\n/**\r\n * mermaid ER 沒有 alias 語法(`X[\"顯示名\"]` 在 11.x 是語法錯誤)——實體「名稱」本身就是顯示文字。\r\n * 所以序列化必須輸出 label 而不是內部 id,否則在編輯器改名完全寫不回檔案(改了等於沒改)。\r\n * 含空白 / 引號等字元時加引號(mermaid 支援 `\"客戶 帳號\" ||--o{ …`)。\r\n */\r\nfunction entityToken(name: string): string {\r\n  return /^[^\\s\"'{}[\\]|:,()]+$/.test(name) ? name : `\"${name.replace(/\"/g, '')}\"`;\r\n}\r\n\r\n/** 實體 id → 輸出名稱。以 label 為準,空白時退回 id;重名時補序號以免兩個實體被 mermaid 併成一個。 */\r\nfunction entityNames(nodes: SceneNode[]): Map<string, string> {\r\n  const taken = new Set<string>();\r\n  const map = new Map<string, string>();\r\n  for (const n of nodes) {\r\n    const base = n.label && n.label.trim().length > 0 ? n.label.trim() : n.id;\r\n    let name = base;\r\n    let k = 2;\r\n    while (taken.has(name)) name = `${base}_${k++}`;\r\n    taken.add(name);\r\n    map.set(n.id, entityToken(name));\r\n  }\r\n  return map;\r\n}\r\n\r\nfunction serializeRelationship(e: SceneEdge, nameOf: Map<string, string>): string {\r\n  const card = e.data?.kind === 'er' ? e.data : undefined;\r\n  const start = START_SYM[card?.cardStart ?? 'onlyOne'];\r\n  const end = END_SYM[card?.cardEnd ?? 'zeroOrMore'];\r\n  const rel = card?.identifying === false ? '..' : '--';\r\n  const role = e.label && e.label.length > 0 ? e.label : '\"\"';\r\n  const s = nameOf.get(e.source) ?? e.source;\r\n  const t = nameOf.get(e.target) ?? e.target;\r\n  return `${s} ${start}${rel}${end} ${t} : ${role}`;\r\n}\r\n\r\nexport function sceneToEr(scene: EditorScene): SerializeResult {\r\n  // 解析失敗的降級場景(空節點但保有原文)→ 原樣回吐,絕不覆寫成空。\r\n  if (scene.nodes.length === 0 && scene.raw?.fullSource) {\r\n    return { text: scene.raw.fullSource, warnings: [] };\r\n  }\r\n  const warnings: DataLossWarning[] = [];\r\n  const lines: string[] = [];\r\n\r\n  for (const c of scene.raw?.comments ?? []) {\r\n    if (c.trim().startsWith('%%{')) lines.push(c.trim());\r\n  }\r\n  lines.push('erDiagram');\r\n  const dir = scene.meta.type === 'er' ? scene.meta.direction : undefined;\r\n  if (dir && dir !== 'TB' && dir !== 'TD') lines.push(`${INDENT}direction ${dir}`);\r\n  // 一般 %% 註解(非 init)→ 標頭後逐字保留。\r\n  for (const c of scene.raw?.comments ?? []) {\r\n    const t = c.trim();\r\n    if (t.startsWith('%%') && !t.startsWith('%%{')) lines.push(INDENT + t);\r\n  }\r\n\r\n  // 1. 關係(穩定排序)。\r\n  const nameOf = entityNames([...scene.nodes].sort(bySourceIndex));\r\n  const ids = new Set(scene.nodes.map((n) => n.id));\r\n  for (const e of [...scene.edges].sort(bySourceIndex)) {\r\n    if (!ids.has(e.source) || !ids.has(e.target)) {\r\n      warnings.push({ message: `略過懸空關係 ${e.id}`, elementId: e.id });\r\n      continue;\r\n    }\r\n    lines.push(INDENT + serializeRelationship(e, nameOf));\r\n  }\r\n\r\n  // 2. 實體屬性區塊(只在有屬性時輸出 { } 區塊;無屬性的實體已由關係宣告)。\r\n  //    孤立且無屬性的實體 → 單獨輸出實體名以保留。\r\n  const inEdge = new Set<string>();\r\n  for (const e of scene.edges) {\r\n    inEdge.add(e.source);\r\n    inEdge.add(e.target);\r\n  }\r\n  for (const n of [...scene.nodes].sort(bySourceIndex)) {\r\n    const attrs = n.data?.kind === 'er' ? n.data.attributes : [];\r\n    const name = nameOf.get(n.id) ?? n.id;\r\n    if (attrs.length > 0) {\r\n      lines.push(`${INDENT}${name} {`);\r\n      for (const a of attrs) {\r\n        const type = a.type && a.type.length ? a.type : 'string';\r\n        const keys = a.keys && a.keys.length ? ` ${a.keys.join(',')}` : '';\r\n        const comment = a.comment && a.comment.length ? ` \"${a.comment.replace(/\"/g, '')}\"` : '';\r\n        lines.push(`${INDENT}${INDENT}${type} ${a.name}${keys}${comment}`);\r\n      }\r\n      lines.push(`${INDENT}}`);\r\n    } else if (!inEdge.has(n.id)) {\r\n      lines.push(`${INDENT}${name}`);\r\n    }\r\n  }\r\n\r\n  return { text: lines.join('\\n') + '\\n', warnings };\r\n}\r\n","// erDiagram 圖種 adapter。\r\n\r\nimport { mermaidSvgLayout } from '../../layout/mermaid-svg-layout';\r\nimport type { LayoutEngine } from '../../layout/types';\r\nimport { erDbToScene } from '../../round-trip/er/parse';\r\nimport { sceneToEr } from '../../round-trip/er/serialize';\r\nimport type { EditorScene } from '../../scene/types';\r\nimport { registerAdapter } from '../registry';\r\nimport type { DiagramAdapter } from '../types';\r\nimport type { MermaidLike, MermaidSource } from '../../../../types';\r\n\r\nexport const erAdapter: DiagramAdapter = {\r\n  capabilities: {\r\n    type: 'er',\r\n    shapes: ['entity'],\r\n    arrowHeads: ['none', 'crowFootOne', 'crowFootMany'],\r\n    lineKinds: ['solid', 'dotted'],\r\n    freeform: true,\r\n    defaults: { nodeShape: 'entity', arrowEnd: 'none' },\r\n  },\r\n  keywords: ['erdiagram'],\r\n\r\n  parse(text: string, mermaid: MermaidLike) {\r\n    return erDbToScene(text, mermaid);\r\n  },\r\n\r\n  serialize(scene: EditorScene) {\r\n    return sceneToEr(scene);\r\n  },\r\n\r\n  async layout(scene: EditorScene, engine: LayoutEngine, mermaid?: MermaidSource): Promise<EditorScene> {\r\n    const code = sceneToEr(scene).text;\r\n    return engine.layout(scene, { code, mermaid });\r\n  },\r\n};\r\n\r\n/** 顯式註冊(非 module side-effect)。 */\r\nexport function registerErAdapter(): void {\r\n  registerAdapter(erAdapter);\r\n}\r\n","// classDiagram 文字 → 場景。透過 mermaid 解析後 DB 的 getData() 取得類別(成員/方法)與關係。\r\n\r\nimport type { ParseResult, ParseWarning } from '../../adapters/types';\r\nimport type { ArrowHead, EditorScene, FlowDirection, SceneContainer, SceneEdge, SceneNode } from '../../scene/types';\r\nimport type { MermaidLike } from '../../../../types';\r\nimport { classBoxSize } from '../../render/node-metrics';\r\n\r\ninterface MermaidApiLike {\r\n  mermaidAPI?: { getDiagramFromText?: (t: string) => Promise<{ db?: unknown }> | { db?: unknown } };\r\n  getDiagramFromText?: (t: string) => Promise<{ db?: unknown }> | { db?: unknown };\r\n}\r\ninterface ClassMemberLike {\r\n  memberType?: string;\r\n  visibility?: string;\r\n  id?: string;\r\n  text?: string;\r\n  parameters?: string;\r\n  returnType?: string;\r\n  classifier?: string;\r\n}\r\ninterface ClassNodeLike {\r\n  id: string;\r\n  label?: string;\r\n  shape?: string;\r\n  isGroup?: boolean;\r\n  parentId?: string;\r\n  members?: ClassMemberLike[];\r\n  methods?: ClassMemberLike[];\r\n  annotations?: string[];\r\n}\r\ninterface ClassEdgeLike {\r\n  id?: string;\r\n  start: string;\r\n  end: string;\r\n  label?: string;\r\n  arrowTypeStart?: string;\r\n  arrowTypeEnd?: string;\r\n  pattern?: string;\r\n}\r\ninterface ClassRelationLike {\r\n  id1: string;\r\n  id2: string;\r\n  title?: string;\r\n  relationTitle1?: string;\r\n  relationTitle2?: string;\r\n}\r\ninterface ClassDbLike {\r\n  getData?: () => { nodes: ClassNodeLike[]; edges: ClassEdgeLike[] };\r\n  getRelations?: () => ClassRelationLike[];\r\n  getDirection?: () => string;\r\n}\r\n\r\nfunction normalizeDirection(dir: string | undefined): FlowDirection {\r\n  const d = (dir ?? 'TB').toUpperCase();\r\n  if (d === 'TD') return 'TD';\r\n  if (d === 'BT' || d === 'RL' || d === 'LR' || d === 'TB') return d as FlowDirection;\r\n  return 'TB';\r\n}\r\n\r\n/** class 關係箭頭名 → 場景 ArrowHead(供渲染;序列化另有反查)。 */\r\nfunction arrowFromClass(t: string | undefined): ArrowHead {\r\n  switch (t) {\r\n    case 'extension':\r\n      return 'triangle';\r\n    case 'composition':\r\n      return 'diamondFilled';\r\n    case 'aggregation':\r\n      return 'diamond';\r\n    case 'dependency':\r\n      return 'open';\r\n    default:\r\n      return 'none';\r\n  }\r\n}\r\n\r\n/** 重建成員字串:`+String name`。 */\r\n// classifier:* = 抽象、$ = 靜態(mermaid 分開存)。保留進字串以免 round-trip 丟失。\r\nfunction memberText(m: ClassMemberLike): string {\r\n  const vis = m.visibility ?? '';\r\n  return `${vis}${m.id ?? ''}${m.classifier ?? ''}`.trim();\r\n}\r\n/** 重建方法字串:`+makeSound() void`(classifier 接在括號後,如 `+area()* double`)。 */\r\nfunction methodText(m: ClassMemberLike): string {\r\n  const vis = m.visibility ?? '';\r\n  const ret = m.returnType ? ` ${m.returnType}` : '';\r\n  return `${vis}${m.id ?? ''}(${m.parameters ?? ''})${m.classifier ?? ''}${ret}`.trim();\r\n}\r\n\r\nfunction prescan(src: string): { comments: string[]; generics: Map<string, string> } {\r\n  const comments: string[] = [];\r\n  // 類別自身的泛型參數(class Foo~T~)被 mermaid getData 丟棄 → 從原文撈回。\r\n  const generics = new Map<string, string>();\r\n  const reGeneric = /\\bclass\\s+(\\w+)~([^~]+)~/g;\r\n  let m: RegExpExecArray | null;\r\n  while ((m = reGeneric.exec(src)) !== null) generics.set(m[1], m[2]);\r\n  for (const raw of src.split('\\n')) {\r\n    const line = raw.trim();\r\n    if (line.startsWith('%%')) comments.push(line);\r\n  }\r\n  return { comments, generics };\r\n}\r\n\r\nasync function getClassDb(text: string, mermaid: MermaidLike): Promise<ClassDbLike | undefined> {\r\n  const api = mermaid as unknown as MermaidApiLike;\r\n  const fn = api.mermaidAPI?.getDiagramFromText ?? api.getDiagramFromText;\r\n  if (typeof fn !== 'function') return undefined;\r\n  try {\r\n    mermaid.initialize?.({ startOnLoad: false });\r\n  } catch {\r\n    /* ignore */\r\n  }\r\n  const diagram = await fn.call(api.mermaidAPI ?? api, text);\r\n  const db = diagram?.db as ClassDbLike | undefined;\r\n  if (!db || typeof db.getData !== 'function') return undefined;\r\n  return db;\r\n}\r\n\r\nexport async function classDbToScene(text: string, mermaid: MermaidLike): Promise<ParseResult> {\r\n  const warnings: ParseWarning[] = [];\r\n  const pre = prescan(text);\r\n  let db: ClassDbLike | undefined;\r\n  try {\r\n    db = await getClassDb(text, mermaid);\r\n  } catch (err) {\r\n    warnings.push({ message: `mermaid 解析失敗:${(err as Error).message}` });\r\n  }\r\n  if (!db) {\r\n    return {\r\n      scene: {\r\n        version: 1,\r\n        diagramType: 'class',\r\n        meta: { type: 'class' },\r\n        nodes: [],\r\n        edges: [],\r\n        containers: [],\r\n        raw: { comments: pre.comments, fullSource: text },\r\n        layoutOwner: 'engine',\r\n      },\r\n      warnings: warnings.length ? warnings : [{ message: 'mermaid 解析 API 不可用。' }],\r\n    };\r\n  }\r\n\r\n  const data = db.getData?.() ?? { nodes: [], edges: [] };\r\n  const direction = normalizeDirection(db.getDirection?.());\r\n\r\n  const nodes: SceneNode[] = [];\r\n  const containers: SceneContainer[] = [];\r\n  let nIdx = 0;\r\n  let cIdx = 0;\r\n  for (const dn of data.nodes) {\r\n    if (dn.isGroup) {\r\n      // namespace → 容器(保留分組,序列化回 `namespace X { }`)。\r\n      containers.push({\r\n        id: dn.id,\r\n        label: dn.label ?? dn.id,\r\n        x: 0,\r\n        y: 0,\r\n        w: 0,\r\n        h: 0,\r\n        parentId: dn.parentId ?? null,\r\n        childNodeIds: [],\r\n        sourceIndex: cIdx++,\r\n      });\r\n      continue;\r\n    }\r\n    const members = (dn.members ?? []).map(memberText).filter(Boolean);\r\n    const methods = (dn.methods ?? []).map(methodText).filter(Boolean);\r\n    const stereotype = dn.annotations && dn.annotations.length ? dn.annotations[0] : undefined;\r\n    const size = classBoxSize(dn.label ?? dn.id, {\r\n      members,\r\n      methods,\r\n      stereotype,\r\n      generic: pre.generics.get(dn.id),\r\n    });\r\n    nodes.push({\r\n      id: dn.id,\r\n      shape: 'classBox',\r\n      label: dn.label ?? dn.id,\r\n      x: 0,\r\n      y: 0,\r\n      w: size.w,\r\n      h: size.h,\r\n      parentId: dn.parentId ?? null,\r\n      data: { kind: 'class', members, methods, stereotype, generic: pre.generics.get(dn.id) },\r\n      sourceIndex: nIdx++,\r\n    });\r\n  }\r\n  // 指派 namespace 子成員。\r\n  const cById = new Map(containers.map((c) => [c.id, c] as const));\r\n  for (const n of nodes) if (n.parentId && cById.has(n.parentId)) cById.get(n.parentId)!.childNodeIds.push(n.id);\r\n\r\n  // 基數標籤(getData edges 不含,要從 getRelations 補:relationTitle1/2)。依 id1|id2|title 配對。\r\n  const relCard = new Map<string, { c1?: string; c2?: string }>();\r\n  for (const r of db.getRelations?.() ?? []) {\r\n    const key = `${r.id1}|${r.id2}|${r.title ?? ''}`;\r\n    if (!relCard.has(key)) relCard.set(key, { c1: r.relationTitle1, c2: r.relationTitle2 });\r\n  }\r\n  const edges: SceneEdge[] = [];\r\n  let eIdx = 0;\r\n  for (const de of data.edges) {\r\n    const card = relCard.get(`${de.start}|${de.end}|${de.label ?? ''}`);\r\n    const cardinalitySource = card?.c1 && card.c1 !== 'none' ? card.c1 : undefined;\r\n    const cardinalityTarget = card?.c2 && card.c2 !== 'none' ? card.c2 : undefined;\r\n    edges.push({\r\n      id: de.id ?? `e${eIdx}`,\r\n      source: de.start,\r\n      target: de.end,\r\n      label: de.label && de.label.length > 0 ? de.label : undefined,\r\n      lineKind: de.pattern === 'dashed' ? 'dotted' : 'solid',\r\n      arrowStart: arrowFromClass(de.arrowTypeStart),\r\n      arrowEnd: arrowFromClass(de.arrowTypeEnd),\r\n      data: { kind: 'class', relation: 'association', cardinalitySource, cardinalityTarget },\r\n      sourceIndex: eIdx++,\r\n    });\r\n  }\r\n\r\n  return {\r\n    scene: {\r\n      version: 1,\r\n      diagramType: 'class',\r\n      meta: { type: 'class', direction },\r\n      nodes,\r\n      edges,\r\n      containers,\r\n      raw: { comments: pre.comments },\r\n      layoutOwner: 'engine',\r\n    },\r\n    warnings,\r\n  };\r\n}\r\n","// 場景 → classDiagram 文字。確定性、永遠輸出合法 mermaid。\r\n\r\nimport type { DataLossWarning, SerializeResult } from '../../adapters/types';\r\nimport type { ArrowHead, EditorScene, SceneEdge, SceneNode } from '../../scene/types';\r\n\r\nconst INDENT = '    ';\r\n\r\nconst LEFT_MARKER: Partial<Record<ArrowHead, string>> = {\r\n  triangle: '<|',\r\n  diamondFilled: '*',\r\n  diamond: 'o',\r\n  open: '<',\r\n  arrow: '<',\r\n  none: '',\r\n};\r\nconst RIGHT_MARKER: Partial<Record<ArrowHead, string>> = {\r\n  triangle: '|>',\r\n  diamondFilled: '*',\r\n  diamond: 'o',\r\n  open: '>',\r\n  arrow: '>',\r\n  none: '',\r\n};\r\n\r\nfunction bySourceIndex<T extends { sourceIndex?: number }>(a: T, b: T): number {\r\n  return (a.sourceIndex ?? Number.MAX_SAFE_INTEGER) - (b.sourceIndex ?? Number.MAX_SAFE_INTEGER);\r\n}\r\n\r\nfunction relationLine(e: SceneEdge): string {\r\n  const left = LEFT_MARKER[e.arrowStart] ?? '';\r\n  const right = RIGHT_MARKER[e.arrowEnd] ?? '';\r\n  const line = e.lineKind === 'dotted' ? '..' : '--';\r\n  const label = e.label && e.label.length > 0 ? ` : ${e.label}` : '';\r\n  // 基數標籤:`Source \"1\" --> \"*\" Target`(來源側緊接 source、目標側緊接 target 前)。\r\n  const cd = e.data?.kind === 'class' ? e.data : undefined;\r\n  const c1 = cd?.cardinalitySource ? ` \"${cd.cardinalitySource}\"` : '';\r\n  const c2 = cd?.cardinalityTarget ? ` \"${cd.cardinalityTarget}\"` : '';\r\n  return `${e.source}${c1} ${left}${line}${right}${c2} ${e.target}${label}`;\r\n}\r\n\r\nexport function sceneToClass(scene: EditorScene): SerializeResult {\r\n  // 解析失敗的降級場景(空節點但保有原文)→ 原樣回吐,絕不覆寫成空。\r\n  if (scene.nodes.length === 0 && scene.raw?.fullSource) {\r\n    return { text: scene.raw.fullSource, warnings: [] };\r\n  }\r\n  const warnings: DataLossWarning[] = [];\r\n  const lines: string[] = [];\r\n\r\n  for (const c of scene.raw?.comments ?? []) {\r\n    if (c.trim().startsWith('%%{')) lines.push(c.trim());\r\n  }\r\n  lines.push('classDiagram');\r\n  const dir = scene.meta.type === 'class' ? scene.meta.direction : undefined;\r\n  if (dir && dir !== 'TB' && dir !== 'TD') lines.push(`${INDENT}direction ${dir}`);\r\n  // 一般 %% 註解(非 init)→ 標頭後逐字保留。\r\n  for (const c of scene.raw?.comments ?? []) {\r\n    const t = c.trim();\r\n    if (t.startsWith('%%') && !t.startsWith('%%{')) lines.push(INDENT + t);\r\n  }\r\n\r\n  // 1. 類別區塊(有成員 / 方法 / stereotype 才開 { };否則孤立類別輸出 `class X`)。\r\n  const inEdge = new Set<string>();\r\n  for (const e of scene.edges) {\r\n    inEdge.add(e.source);\r\n    inEdge.add(e.target);\r\n  }\r\n  const emitClass = (n: SceneNode, pad: string): void => {\r\n    const data = n.data?.kind === 'class' ? n.data : undefined;\r\n    const members = data?.members ?? [];\r\n    const methods = data?.methods ?? [];\r\n    const stereotype = data?.stereotype;\r\n    // 泛型類別 → `Id~T~`;自訂標籤 → `Id[\"label\"]`;否則裸 id。\r\n    const named = data?.generic\r\n      ? `${n.id}~${data.generic}~`\r\n      : n.label && n.label !== n.id\r\n        ? `${n.id}[\"${n.label}\"]`\r\n        : n.id;\r\n    if (members.length || methods.length || stereotype) {\r\n      lines.push(`${pad}class ${named} {`);\r\n      if (stereotype) lines.push(`${pad}${INDENT}<<${stereotype}>>`);\r\n      for (const m of members) lines.push(`${pad}${INDENT}${m}`);\r\n      for (const m of methods) lines.push(`${pad}${INDENT}${m}`);\r\n      lines.push(`${pad}}`);\r\n    } else {\r\n      lines.push(`${pad}class ${named}`);\r\n    }\r\n  };\r\n  const byId = new Map(scene.nodes.map((n) => [n.id, n] as const));\r\n  const inNamespace = new Set<string>();\r\n  // namespace 區塊:成員一律宣告於其內。\r\n  for (const c of [...scene.containers].sort(bySourceIndex)) {\r\n    lines.push(`${INDENT}namespace ${c.label || c.id} {`);\r\n    for (const cid of c.childNodeIds) {\r\n      const n = byId.get(cid);\r\n      if (n) {\r\n        inNamespace.add(cid);\r\n        emitClass(n, INDENT + INDENT);\r\n      }\r\n    }\r\n    lines.push(`${INDENT}}`);\r\n  }\r\n  // 頂層類別(不在 namespace);無內容且已被關係宣告者略過。\r\n  for (const n of [...scene.nodes].sort(bySourceIndex)) {\r\n    if (inNamespace.has(n.id)) continue;\r\n    const data = n.data?.kind === 'class' ? n.data : undefined;\r\n    const hasBody = (data?.members?.length || data?.methods?.length || data?.stereotype) as unknown as boolean;\r\n    // 有自訂顯示名(或泛型)時也必須宣告 —— 否則被關係「順帶宣告」的類別會只剩 id,\r\n    // 在編輯器改的名字寫不回檔案。\r\n    const named = (n.label && n.label !== n.id) || Boolean(data?.generic);\r\n    if (hasBody || named || !inEdge.has(n.id)) emitClass(n, INDENT);\r\n  }\r\n\r\n  // 2. 關係(穩定排序)。\r\n  const ids = new Set(scene.nodes.map((n) => n.id));\r\n  for (const e of [...scene.edges].sort(bySourceIndex)) {\r\n    if (!ids.has(e.source) || !ids.has(e.target)) {\r\n      warnings.push({ message: `略過懸空關係 ${e.id}`, elementId: e.id });\r\n      continue;\r\n    }\r\n    lines.push(INDENT + relationLine(e));\r\n  }\r\n\r\n  return { text: lines.join('\\n') + '\\n', warnings };\r\n}\r\n","// classDiagram 圖種 adapter。\r\n\r\nimport { mermaidSvgLayout } from '../../layout/mermaid-svg-layout';\r\nimport type { LayoutEngine } from '../../layout/types';\r\nimport { classDbToScene } from '../../round-trip/class/parse';\r\nimport { sceneToClass } from '../../round-trip/class/serialize';\r\nimport type { EditorScene } from '../../scene/types';\r\nimport { registerAdapter } from '../registry';\r\nimport type { DiagramAdapter } from '../types';\r\nimport type { MermaidLike, MermaidSource } from '../../../../types';\r\n\r\nexport const classAdapter: DiagramAdapter = {\r\n  capabilities: {\r\n    type: 'class',\r\n    shapes: ['classBox'],\r\n    arrowHeads: ['none', 'triangle', 'diamond', 'diamondFilled', 'open'],\r\n    lineKinds: ['solid', 'dotted'],\r\n    freeform: true,\r\n    defaults: { nodeShape: 'classBox', arrowEnd: 'none' },\r\n  },\r\n  keywords: ['classdiagram', 'classdiagram-v2'],\r\n\r\n  parse(text: string, mermaid: MermaidLike) {\r\n    return classDbToScene(text, mermaid);\r\n  },\r\n\r\n  serialize(scene: EditorScene) {\r\n    return sceneToClass(scene);\r\n  },\r\n\r\n  async layout(scene: EditorScene, engine: LayoutEngine, mermaid?: MermaidSource): Promise<EditorScene> {\r\n    const code = sceneToClass(scene).text;\r\n    return engine.layout(scene, { code, mermaid });\r\n  },\r\n};\r\n\r\n/** 顯式註冊(非 module side-effect)。 */\r\nexport function registerClassAdapter(): void {\r\n  registerAdapter(classAdapter);\r\n}\r\n","// mindmap 文字 → 場景。透過 mermaid 解析後 DB 的 getMindmap()(樹狀)取得節點階層。\r\n// 節點以 parentId 表父子;另建 parent→child 邊供畫面顯示連線(序列化時忽略,改用樹還原)。\r\n\r\nimport type { ParseResult, ParseWarning } from '../../adapters/types';\r\nimport type { EditorScene, NodeShape, SceneEdge, SceneNode } from '../../scene/types';\r\nimport type { MermaidLike } from '../../../../types';\r\n\r\ninterface MermaidApiLike {\r\n  mermaidAPI?: { getDiagramFromText?: (t: string) => Promise<{ db?: unknown }> | { db?: unknown } };\r\n  getDiagramFromText?: (t: string) => Promise<{ db?: unknown }> | { db?: unknown };\r\n}\r\ninterface MmNode {\r\n  nodeId: string;\r\n  descr?: string;\r\n  type?: number;\r\n  children?: MmNode[];\r\n}\r\ninterface MmDbLike {\r\n  getMindmap?: () => MmNode | undefined;\r\n}\r\n\r\n/** mindmap type → 場景渲染外形(近似;原始 type 另存 data.shapeType 供序列化無損)。 */\r\nfunction shapeFromType(t: number | undefined): NodeShape {\r\n  switch (t) {\r\n    case 1:\r\n      return 'rounded';\r\n    case 2:\r\n      return 'rectangle';\r\n    case 3:\r\n      return 'circle';\r\n    case 4:\r\n      return 'ellipse'; // cloud 近似\r\n    case 5:\r\n      return 'circle'; // bang 近似\r\n    case 6:\r\n      return 'hexagon';\r\n    default:\r\n      return 'rounded';\r\n  }\r\n}\r\n\r\nfunction estimateSize(label: string): { w: number; h: number } {\r\n  const longest = label.split(/<br\\s*\\/?>|\\n/).reduce((m, s) => Math.max(m, s.length), 0);\r\n  return { w: Math.max(80, longest * 9 + 28), h: Math.max(44, 44) };\r\n}\r\n\r\nasync function getMmDb(text: string, mermaid: MermaidLike): Promise<MmDbLike | undefined> {\r\n  const api = mermaid as unknown as MermaidApiLike;\r\n  const fn = api.mermaidAPI?.getDiagramFromText ?? api.getDiagramFromText;\r\n  if (typeof fn !== 'function') return undefined;\r\n  try {\r\n    mermaid.initialize?.({ startOnLoad: false });\r\n  } catch {\r\n    /* ignore */\r\n  }\r\n  const diagram = await fn.call(api.mermaidAPI ?? api, text);\r\n  const db = diagram?.db as MmDbLike | undefined;\r\n  if (!db || typeof db.getMindmap !== 'function') return undefined;\r\n  return db;\r\n}\r\n\r\nexport async function mindmapToScene(text: string, mermaid: MermaidLike): Promise<ParseResult> {\r\n  const warnings: ParseWarning[] = [];\r\n  let db: MmDbLike | undefined;\r\n  try {\r\n    db = await getMmDb(text, mermaid);\r\n  } catch (err) {\r\n    warnings.push({ message: `mermaid 解析失敗:${(err as Error).message}` });\r\n  }\r\n  const root = db?.getMindmap?.();\r\n  if (!root) {\r\n    return {\r\n      scene: {\r\n        version: 1,\r\n        diagramType: 'mindmap',\r\n        meta: { type: 'mindmap' },\r\n        nodes: [],\r\n        edges: [],\r\n        containers: [],\r\n        raw: { fullSource: text },\r\n        layoutOwner: 'engine',\r\n      },\r\n      warnings: warnings.length ? warnings : [{ message: 'mermaid 解析 API 不可用。' }],\r\n    };\r\n  }\r\n\r\n  const nodes: SceneNode[] = [];\r\n  const edges: SceneEdge[] = [];\r\n  let idx = 0;\r\n  const used = new Set<string>();\r\n  const uniqueId = (base: string): string => {\r\n    let id = base || `n${idx}`;\r\n    let k = 1;\r\n    while (used.has(id)) id = `${base}_${k++}`;\r\n    used.add(id);\r\n    return id;\r\n  };\r\n  const walk = (n: MmNode, parentId: string | null): void => {\r\n    const label = n.descr ?? n.nodeId;\r\n    const id = uniqueId(n.nodeId || label);\r\n    const size = estimateSize(label);\r\n    nodes.push({\r\n      id,\r\n      shape: shapeFromType(n.type),\r\n      label,\r\n      x: 0,\r\n      y: 0,\r\n      w: size.w,\r\n      h: size.h,\r\n      parentId,\r\n      data: { kind: 'mindmap', shapeType: n.type ?? 0 },\r\n      sourceIndex: idx++,\r\n    });\r\n    if (parentId) {\r\n      edges.push({\r\n        id: `e${edges.length}`,\r\n        source: parentId,\r\n        target: id,\r\n        lineKind: 'solid',\r\n        arrowStart: 'none',\r\n        arrowEnd: 'none',\r\n        data: { kind: 'flowchart' },\r\n        sourceIndex: edges.length,\r\n      });\r\n    }\r\n    for (const c of n.children ?? []) walk(c, id);\r\n  };\r\n  walk(root, null);\r\n\r\n  return {\r\n    scene: {\r\n      version: 1,\r\n      diagramType: 'mindmap',\r\n      meta: { type: 'mindmap' },\r\n      nodes,\r\n      edges,\r\n      containers: [],\r\n      layoutOwner: 'engine',\r\n    },\r\n    warnings,\r\n  };\r\n}\r\n","// 場景 → mindmap 文字。依 parentId 還原樹狀,以縮排表階層;外形用 data.shapeType 還原括號。\r\n\r\nimport type { DataLossWarning, SerializeResult } from '../../adapters/types';\r\nimport type { EditorScene, SceneNode } from '../../scene/types';\r\n\r\nconst INDENT = '  ';\r\n\r\n/** shapeType → 括號包裝。 */\r\nfunction wrap(shapeType: number, descr: string): string {\r\n  switch (shapeType) {\r\n    case 1:\r\n      return `(${descr})`;\r\n    case 2:\r\n      return `[${descr}]`;\r\n    case 3:\r\n      return `((${descr}))`;\r\n    case 4:\r\n      return `)${descr}(`;\r\n    case 5:\r\n      return `))${descr}((`;\r\n    case 6:\r\n      return `{{${descr}}}`;\r\n    default:\r\n      return descr;\r\n  }\r\n}\r\n\r\nfunction bySourceIndex(a: SceneNode, b: SceneNode): number {\r\n  return (a.sourceIndex ?? Number.MAX_SAFE_INTEGER) - (b.sourceIndex ?? Number.MAX_SAFE_INTEGER);\r\n}\r\n\r\nexport function sceneToMindmap(scene: EditorScene): SerializeResult {\r\n  // 解析失敗的降級場景(空節點但保有原文)→ 原樣回吐,絕不把原圖覆寫成空。\r\n  if (scene.nodes.length === 0 && scene.raw?.fullSource) {\r\n    return { text: scene.raw.fullSource, warnings: [] };\r\n  }\r\n  const warnings: DataLossWarning[] = [];\r\n  const lines: string[] = ['mindmap'];\r\n\r\n  const childrenOf = new Map<string | null, SceneNode[]>();\r\n  for (const n of scene.nodes) {\r\n    const p = n.parentId ?? null;\r\n    const arr = childrenOf.get(p) ?? [];\r\n    arr.push(n);\r\n    childrenOf.set(p, arr);\r\n  }\r\n  for (const arr of childrenOf.values()) arr.sort(bySourceIndex);\r\n\r\n  const emit = (n: SceneNode, depth: number): void => {\r\n    const shapeType = n.data?.kind === 'mindmap' ? n.data.shapeType : 0;\r\n    // 括號裡不能是空的:`()` / `[]` / `(())` 都會讓 mermaid 直接語法錯誤。剛拖出來還沒命名的\r\n    // 節點 label 就是空字串,所以退回節點 id 當暫時文字(使用者一改名就會被蓋掉)。\r\n    const descr = n.label && n.label.trim().length > 0 ? n.label : n.id;\r\n    lines.push(`${INDENT.repeat(depth + 1)}${wrap(shapeType, descr)}`);\r\n    for (const c of childrenOf.get(n.id) ?? []) emit(c, depth + 1);\r\n  };\r\n\r\n  const roots = childrenOf.get(null) ?? [];\r\n  if (roots.length === 0 && scene.nodes.length > 0) {\r\n    warnings.push({ message: 'mindmap 找不到根節點,輸出可能不完整。' });\r\n  }\r\n  for (const r of roots) emit(r, 0);\r\n\r\n  return { text: lines.join('\\n') + '\\n', warnings };\r\n}\r\n","// mindmap 圖種 adapter。\r\n\r\nimport type { LayoutEngine } from '../../layout/types';\r\nimport { mindmapToScene } from '../../round-trip/mindmap/parse';\r\nimport { sceneToMindmap } from '../../round-trip/mindmap/serialize';\r\nimport type { EditorScene, SceneNode } from '../../scene/types';\r\nimport { registerAdapter } from '../registry';\r\nimport type { DiagramAdapter } from '../types';\r\nimport type { MermaidLike, MermaidSource } from '../../../../types';\r\n\r\n/** mindmap 專屬樹狀排版(mermaid 的 mindmap g.node 抓不到座標,改自算):\r\n *  左→右依深度排 x,葉節點依序佔 y,父節點 y = 子節點 y 中點。 */\r\nfunction treeLayout(scene: EditorScene): EditorScene {\r\n  const kids = new Map<string, string[]>();\r\n  for (const n of [...scene.nodes].sort(\r\n    (a, b) => (a.sourceIndex ?? 0) - (b.sourceIndex ?? 0),\r\n  )) {\r\n    if (n.parentId) {\r\n      const arr = kids.get(n.parentId) ?? [];\r\n      arr.push(n.id);\r\n      kids.set(n.parentId, arr);\r\n    }\r\n  }\r\n  const byId = new Map(scene.nodes.map((n) => [n.id, n] as const));\r\n  const pos = new Map<string, { x: number; y: number }>();\r\n  const X_GAP = 210;\r\n  const Y_GAP = 62;\r\n  let leaf = 0;\r\n  const assign = (id: string, depth: number): number => {\r\n    const ch = kids.get(id) ?? [];\r\n    const x = depth * X_GAP + 40;\r\n    if (ch.length === 0) {\r\n      const y = leaf * Y_GAP + 40;\r\n      leaf += 1;\r\n      pos.set(id, { x, y });\r\n      return y;\r\n    }\r\n    const ys = ch.map((c) => assign(c, depth + 1));\r\n    const y = (ys[0] + ys[ys.length - 1]) / 2;\r\n    pos.set(id, { x, y });\r\n    return y;\r\n  };\r\n  for (const n of scene.nodes) if (!n.parentId) assign(n.id, 0);\r\n  const nodes: SceneNode[] = scene.nodes.map((n) => {\r\n    const p = pos.get(n.id);\r\n    return p && byId.has(n.id) ? { ...n, x: p.x, y: p.y } : n;\r\n  });\r\n  return { ...scene, nodes, layoutOwner: 'user' };\r\n}\r\n\r\nexport const mindmapAdapter: DiagramAdapter = {\r\n  capabilities: {\r\n    type: 'mindmap',\r\n    // 對映 mermaid mindmap 的括號語法:(圓角) [方框] ((圓)) ))雲((  {{六角}}\r\n    shapes: ['rounded', 'rectangle', 'circle', 'ellipse', 'hexagon'],\r\n    arrowHeads: ['none'],\r\n    lineKinds: ['solid'],\r\n    freeform: true,\r\n    defaults: { nodeShape: 'rounded', arrowEnd: 'none' },\r\n  },\r\n  keywords: ['mindmap'],\r\n\r\n  parse(text: string, mermaid: MermaidLike) {\r\n    return mindmapToScene(text, mermaid);\r\n  },\r\n\r\n  serialize(scene: EditorScene) {\r\n    return sceneToMindmap(scene);\r\n  },\r\n\r\n  // mindmap 自算樹狀排版(不依賴 mermaid SVG scrape)。\r\n  async layout(scene: EditorScene, _engine: LayoutEngine, _mermaid?: MermaidSource): Promise<EditorScene> {\r\n    return treeLayout(scene);\r\n  },\r\n};\r\n\r\n/** 顯式註冊(非 module side-effect)。 */\r\nexport function registerMindmapAdapter(): void {\r\n  registerAdapter(mindmapAdapter);\r\n}\r\n","// sequenceDiagram 文字 → 場景。**行為基礎(line-based)解析**:sequence 語法逐行,自己解析最可控\r\n// 且無損(未模型化的行以 raw 逐字保留)。不需 mermaid DOM。參與者鏡像成 nodes 供選取。\r\n\r\nimport type { ParseResult, ParseWarning } from '../../adapters/types';\r\nimport type { EditorScene, SeqParticipant, SeqStatement, SceneNode } from '../../scene/types';\r\nimport type { MermaidLike } from '../../../../types';\r\n\r\nconst ARROW = /^(<<-->>|<<->>|-->>|--x|--\\)|-->|->>|-x|-\\)|->)$/;\r\n// 訊息行:from arrow [+/-]to : text\r\nconst MSG_RE = /^(\\S+?)\\s*(<<-->>|<<->>|-->>|--x|--\\)|-->|->>|-x|-\\)|->)\\s*([+-]?)(\\S+?)\\s*:\\s*([\\s\\S]*)$/;\r\nconst PARTICIPANT_RE = /^(participant|actor)\\s+(.+?)(?:\\s+as\\s+(.+))?$/i;\r\nconst NOTE_RE = /^note\\s+(left of|right of|over)\\s+(.+?)\\s*:\\s*([\\s\\S]*)$/i;\r\nconst FRAG_RE = /^(loop|alt|else|opt|par|and|critical|option|break|rect|box)\\b\\s*(.*)$/i;\r\nconst ACT_RE = /^(activate|deactivate)\\s+(\\S+)$/i;\r\n\r\nfunction frontmatterSplit(src: string): { frontmatter?: string; body: string } {\r\n  if (src.startsWith('---')) {\r\n    const end = src.indexOf('\\n---', 3);\r\n    if (end !== -1) {\r\n      const after = src.indexOf('\\n', end + 1);\r\n      return { frontmatter: src.slice(0, after === -1 ? src.length : after), body: after === -1 ? '' : src.slice(after + 1) };\r\n    }\r\n  }\r\n  return { body: src };\r\n}\r\n\r\nexport async function sequenceToScene(text: string, _mermaid: MermaidLike): Promise<ParseResult> {\r\n  const warnings: ParseWarning[] = [];\r\n  const { frontmatter, body } = frontmatterSplit(text);\r\n  const lines = body.split('\\n');\r\n\r\n  let autonumber = false;\r\n  const partsById = new Map<string, SeqParticipant>();\r\n  const order: string[] = [];\r\n  const comments: string[] = [];\r\n  const statements: SeqStatement[] = [];\r\n  const ensureParticipant = (id: string, actor = false): void => {\r\n    const key = id.trim();\r\n    if (!key || partsById.has(key)) return;\r\n    partsById.set(key, { id: key, label: key, actor });\r\n    order.push(key);\r\n  };\r\n\r\n  let started = false;\r\n  for (const raw of lines) {\r\n    const line = raw.trim();\r\n    if (!line) continue;\r\n    if (!started) {\r\n      if (/^sequenceDiagram\\b/i.test(line)) {\r\n        started = true;\r\n        continue;\r\n      }\r\n      // header 之前的非空行(罕見)→ 忽略,仍視為已開始。\r\n      started = true;\r\n    }\r\n    if (line.startsWith('%%')) {\r\n      comments.push(line);\r\n      continue;\r\n    }\r\n    if (/^autonumber\\b/i.test(line)) {\r\n      autonumber = true;\r\n      continue;\r\n    }\r\n    const pm = line.match(PARTICIPANT_RE);\r\n    if (pm) {\r\n      const id = pm[2].trim();\r\n      ensureParticipant(id, pm[1].toLowerCase() === 'actor');\r\n      const p = partsById.get(id);\r\n      if (p) {\r\n        if (pm[3]) p.label = pm[3].trim();\r\n        if (pm[1].toLowerCase() === 'actor') p.actor = true;\r\n      }\r\n      continue;\r\n    }\r\n    const nm = line.match(NOTE_RE);\r\n    if (nm) {\r\n      const placement = nm[1].toLowerCase() as 'left of' | 'right of' | 'over';\r\n      for (const a of nm[2].split(',')) ensureParticipant(a.trim());\r\n      statements.push({ kind: 'note', placement, actors: nm[2].trim(), text: nm[3] });\r\n      continue;\r\n    }\r\n    const mm = line.match(MSG_RE);\r\n    if (mm && ARROW.test(mm[2])) {\r\n      ensureParticipant(mm[1].trim());\r\n      ensureParticipant(mm[4].trim());\r\n      statements.push({\r\n        kind: 'message',\r\n        from: mm[1].trim(),\r\n        to: mm[4].trim(),\r\n        arrow: mm[2],\r\n        text: mm[5],\r\n        activate: mm[3] === '+' ? '+' : mm[3] === '-' ? '-' : undefined,\r\n      });\r\n      continue;\r\n    }\r\n    if (/^end$/i.test(line)) {\r\n      statements.push({ kind: 'end' });\r\n      continue;\r\n    }\r\n    const fm = line.match(FRAG_RE);\r\n    if (fm) {\r\n      statements.push({ kind: 'fragment', keyword: fm[1].toLowerCase(), label: fm[2] ?? '' });\r\n      continue;\r\n    }\r\n    const am = line.match(ACT_RE);\r\n    if (am) {\r\n      ensureParticipant(am[2].trim());\r\n      statements.push({ kind: am[1].toLowerCase() === 'activate' ? 'activate' : 'deactivate', actor: am[2].trim() });\r\n      continue;\r\n    }\r\n    // 未模型化 → 逐字保留(不丟資料)。\r\n    statements.push({ kind: 'raw', text: line });\r\n  }\r\n\r\n  const participants = order.map((id) => partsById.get(id) as SeqParticipant);\r\n  // 參與者鏡像成 nodes(供選取 / rename)。座標 = 渲染器的「頂端參與者框」欄位佈局,\r\n  // 兩者一致 → 命中測試 / 選取框與畫面對齊(GAP/HEAD_Y/HEAD_H 須與 scene-renderer 同步)。\r\n  const GAP = 56;\r\n  let px = 40;\r\n  const nodes: SceneNode[] = participants.map((p, i) => {\r\n    const w = Math.max(96, p.label.length * 9 + 28);\r\n    const node: SceneNode = {\r\n      id: p.id,\r\n      shape: p.actor ? 'actor' : 'participant',\r\n      label: p.label,\r\n      x: px,\r\n      y: 12,\r\n      w,\r\n      h: 40,\r\n      data: { kind: 'sequence', actor: p.actor },\r\n      sourceIndex: i,\r\n    };\r\n    px += w + GAP;\r\n    return node;\r\n  });\r\n\r\n  return {\r\n    scene: {\r\n      version: 1,\r\n      diagramType: 'sequence',\r\n      meta: { type: 'sequence', autonumber },\r\n      nodes,\r\n      edges: [],\r\n      containers: [],\r\n      sequence: { autonumber, participants, statements },\r\n      frontmatter,\r\n      raw: { comments },\r\n      layoutOwner: 'engine',\r\n    },\r\n    warnings,\r\n  };\r\n}\r\n","// 場景 → sequenceDiagram 文字。依 scene.sequence 的陳述串確定性重建(含片段縮排)。無損。\r\n\r\nimport type { DataLossWarning, SerializeResult } from '../../adapters/types';\r\nimport type { EditorScene } from '../../scene/types';\r\n\r\nconst INDENT = '    ';\r\n// 增加縮排的片段起始關鍵字。\r\nconst OPENERS = new Set(['loop', 'alt', 'opt', 'par', 'critical', 'break', 'rect', 'box']);\r\n// 與起始同層、但內容縮排的中段關鍵字。\r\nconst MIDDLE = new Set(['else', 'and', 'option']);\r\n\r\nexport function sceneToSequence(scene: EditorScene): SerializeResult {\r\n  const warnings: DataLossWarning[] = [];\r\n  const seq = scene.sequence;\r\n  const lines: string[] = [];\r\n\r\n  if (scene.frontmatter) lines.push(scene.frontmatter.replace(/\\n+$/, ''));\r\n  for (const c of scene.raw?.comments ?? []) {\r\n    if (c.trim().startsWith('%%{')) lines.push(c.trim());\r\n  }\r\n  lines.push('sequenceDiagram');\r\n  if (!seq) return { text: lines.join('\\n') + '\\n', warnings };\r\n\r\n  if (seq.autonumber) lines.push(`${INDENT}autonumber`);\r\n\r\n  // 參與者:有別名 / 是 actor 一律顯式宣告(別名 + actor 外形都要)。其餘(id===label 的純參與者)\r\n  // 預設由訊息推斷以保持輸出精簡;但若「拖曳換序」後的順序無法靠訊息首次出現推斷出來,\r\n  // 就把純參與者也顯式宣告以鎖序(否則 mermaid 會依首次出現重排,換序不持久)。\r\n  const declaredIds = new Set(seq.participants.filter((p) => p.label !== p.id || p.actor).map((p) => p.id));\r\n  // mermaid 有效順序 = 已宣告者(依此陣列序) ++ 未宣告者(依訊息首次出現) ++ 從未被引用者(陣列序)。\r\n  const appearance: string[] = [];\r\n  const seen = new Set<string>();\r\n  const mark = (pid?: string): void => {\r\n    const k = pid?.trim();\r\n    if (k && !seen.has(k)) {\r\n      seen.add(k);\r\n      appearance.push(k);\r\n    }\r\n  };\r\n  for (const s of seq.statements) {\r\n    if (s.kind === 'message') {\r\n      mark(s.from);\r\n      mark(s.to);\r\n    } else if (s.kind === 'note') {\r\n      for (const a of s.actors.split(',')) mark(a.trim());\r\n    } else if (s.kind === 'activate' || s.kind === 'deactivate') {\r\n      mark(s.actor);\r\n    }\r\n  }\r\n  const effective: string[] = [];\r\n  const placed = new Set<string>();\r\n  for (const p of seq.participants) if (declaredIds.has(p.id)) (placed.add(p.id), effective.push(p.id));\r\n  for (const id of appearance) if (!placed.has(id)) (placed.add(id), effective.push(id));\r\n  for (const p of seq.participants) if (!placed.has(p.id)) (placed.add(p.id), effective.push(p.id));\r\n  const wantOrder = seq.participants.map((p) => p.id);\r\n  const lockOrder = effective.length !== wantOrder.length || effective.some((id, i) => id !== wantOrder[i]);\r\n  for (const p of seq.participants) {\r\n    const kw = p.actor ? 'actor' : 'participant';\r\n    if (p.label !== p.id) lines.push(`${INDENT}${kw} ${p.id} as ${p.label}`);\r\n    else if (p.actor) lines.push(`${INDENT}actor ${p.id}`);\r\n    else if (lockOrder) lines.push(`${INDENT}participant ${p.id}`);\r\n  }\r\n\r\n  let depth = 1;\r\n  const pad = (): string => INDENT.repeat(Math.max(1, depth));\r\n  for (const s of seq.statements) {\r\n    switch (s.kind) {\r\n      case 'message': {\r\n        const act = s.activate === '+' ? '+' : s.activate === '-' ? '-' : '';\r\n        lines.push(`${pad()}${s.from}${s.arrow}${act}${s.to}: ${s.text}`);\r\n        break;\r\n      }\r\n      case 'note':\r\n        lines.push(`${pad()}Note ${s.placement} ${s.actors}: ${s.text}`);\r\n        break;\r\n      case 'fragment': {\r\n        const kw = s.keyword;\r\n        if (MIDDLE.has(kw)) {\r\n          // else/and/option 與其起始同層(暫退一層輸出再回來)。\r\n          const here = Math.max(1, depth - 1);\r\n          lines.push(`${INDENT.repeat(here)}${kw}${s.label ? ' ' + s.label : ''}`);\r\n        } else {\r\n          lines.push(`${pad()}${kw}${s.label ? ' ' + s.label : ''}`);\r\n          if (OPENERS.has(kw)) depth += 1;\r\n        }\r\n        break;\r\n      }\r\n      case 'end':\r\n        depth = Math.max(1, depth - 1);\r\n        lines.push(`${pad()}end`);\r\n        break;\r\n      case 'activate':\r\n        lines.push(`${pad()}activate ${s.actor}`);\r\n        break;\r\n      case 'deactivate':\r\n        lines.push(`${pad()}deactivate ${s.actor}`);\r\n        break;\r\n      case 'raw':\r\n        lines.push(`${pad()}${s.text}`);\r\n        break;\r\n    }\r\n  }\r\n\r\n  return { text: lines.join('\\n') + '\\n', warnings };\r\n}\r\n","// sequenceDiagram 圖種 adapter。注意:互動是「時間序」(非自由拖曳),渲染為專屬路徑。\r\n// 目前資料層(parse/serialize)完成且無損;layout 暫 passthrough(渲染器階段再補)。\r\n\r\nimport type { LayoutEngine } from '../../layout/types';\r\nimport { sequenceToScene } from '../../round-trip/sequence/parse';\r\nimport { sceneToSequence } from '../../round-trip/sequence/serialize';\r\nimport type { EditorScene } from '../../scene/types';\r\nimport { registerAdapter } from '../registry';\r\nimport type { DiagramAdapter } from '../types';\r\nimport type { MermaidLike, MermaidSource } from '../../../../types';\r\n\r\nexport const sequenceAdapter: DiagramAdapter = {\r\n  capabilities: {\r\n    type: 'sequence',\r\n    shapes: ['participant', 'actor'],\r\n    arrowHeads: ['arrow', 'open'],\r\n    lineKinds: ['solid', 'dotted'],\r\n    freeform: false,\r\n    defaults: { nodeShape: 'participant', arrowEnd: 'arrow' },\r\n  },\r\n  keywords: ['sequencediagram'],\r\n\r\n  parse(text: string, mermaid: MermaidLike) {\r\n    return sequenceToScene(text, mermaid);\r\n  },\r\n\r\n  serialize(scene: EditorScene) {\r\n    return sceneToSequence(scene);\r\n  },\r\n\r\n  async layout(scene: EditorScene, _engine: LayoutEngine, _mermaid?: MermaidSource): Promise<EditorScene> {\r\n    return scene; // 時間序專屬排版於渲染器階段處理。\r\n  },\r\n};\r\n\r\n/** 顯式註冊(非 module side-effect)。 */\r\nexport function registerSequenceAdapter(): void {\r\n  registerAdapter(sequenceAdapter);\r\n}\r\n","// requirementDiagram 文字 → 場景。\r\n//\r\n// mermaid 的 requirement DB 有三個各自獨立的集合:getRequirements() / getElements() 是以「名稱」\r\n// 為鍵的 Map,getRelationships() 是 {type, src, dst} 陣列(端點也是名稱)。所以場景節點 id 直接\r\n// 用名稱(與 ER 同套路),序列化時再正規化回去。\r\n\r\nimport type { ParseResult, ParseWarning } from '../../adapters/types';\r\nimport type {\r\n  EditorScene,\r\n  FlowDirection,\r\n  ReqRelation,\r\n  ReqRisk,\r\n  ReqType,\r\n  ReqVerify,\r\n  SceneEdge,\r\n  SceneNode,\r\n} from '../../scene/types';\r\nimport type { MermaidLike } from '../../../../types';\r\nimport { requirementBoxSize } from '../../render/node-metrics';\r\n\r\ninterface MermaidApiLike {\r\n  mermaidAPI?: { getDiagramFromText?: (t: string) => Promise<{ db?: unknown }> | { db?: unknown } };\r\n  getDiagramFromText?: (t: string) => Promise<{ db?: unknown }> | { db?: unknown };\r\n}\r\n\r\ninterface ReqRecordLike {\r\n  name?: string;\r\n  type?: string;\r\n  requirementId?: string;\r\n  text?: string;\r\n  risk?: string;\r\n  verifyMethod?: string;\r\n}\r\ninterface ElRecordLike {\r\n  name?: string;\r\n  type?: string;\r\n  docRef?: string;\r\n}\r\ninterface RelRecordLike {\r\n  type?: string;\r\n  src?: string;\r\n  dst?: string;\r\n}\r\ninterface ReqDbLike {\r\n  getRequirements?: () => Map<string, ReqRecordLike> | Record<string, ReqRecordLike>;\r\n  getElements?: () => Map<string, ElRecordLike> | Record<string, ElRecordLike>;\r\n  getRelationships?: () => RelRecordLike[];\r\n  getDirection?: () => string | undefined;\r\n}\r\n\r\n/** DB 回傳的顯示型別(\"Functional Requirement\")→ mermaid 關鍵字。 */\r\nconst TYPE_FROM_DB: Record<string, ReqType> = {\r\n  requirement: 'requirement',\r\n  'functional requirement': 'functionalRequirement',\r\n  'interface requirement': 'interfaceRequirement',\r\n  'performance requirement': 'performanceRequirement',\r\n  'physical requirement': 'physicalRequirement',\r\n  'design constraint': 'designConstraint',\r\n};\r\nconst RISKS: ReqRisk[] = ['low', 'medium', 'high'];\r\nconst VERIFIES: ReqVerify[] = ['analysis', 'inspection', 'test', 'demonstration'];\r\nconst RELATIONS: ReqRelation[] = ['contains', 'copies', 'derives', 'satisfies', 'verifies', 'refines', 'traces'];\r\n\r\nconst asEntries = <T>(v: Map<string, T> | Record<string, T> | undefined): Array<[string, T]> =>\r\n  v instanceof Map ? [...v.entries()] : Object.entries(v ?? {});\r\n\r\nconst lower = (s: string | undefined): string => (s ?? '').trim().toLowerCase();\r\n\r\nfunction normalizeDir(dir: string | undefined): FlowDirection | undefined {\r\n  const d = (dir ?? '').toUpperCase();\r\n  return d === 'BT' || d === 'RL' || d === 'LR' || d === 'TB' || d === 'TD' ? (d as FlowDirection) : undefined;\r\n}\r\n\r\n/** %% 註解 / style 等未模型化的根層內容逐字保留。 */\r\nfunction prescan(src: string): { comments: string[]; styleLines: string[] } {\r\n  const comments: string[] = [];\r\n  const styleLines: string[] = [];\r\n  let depth = 0;\r\n  for (const raw of src.split('\\n')) {\r\n    const line = raw.trim();\r\n    depth += (line.match(/\\{/g) ?? []).length - (line.match(/\\}/g) ?? []).length;\r\n    if (!line) continue;\r\n    if (line.startsWith('%%')) comments.push(line);\r\n    else if (depth <= 0 && /^(classDef|class|style)\\b/.test(line)) styleLines.push(line);\r\n  }\r\n  return { comments, styleLines };\r\n}\r\n\r\nasync function getReqDb(text: string, mermaid: MermaidLike): Promise<ReqDbLike | undefined> {\r\n  const api = mermaid as unknown as MermaidApiLike;\r\n  const fn = api.mermaidAPI?.getDiagramFromText ?? api.getDiagramFromText;\r\n  if (typeof fn !== 'function') return undefined;\r\n  try {\r\n    mermaid.initialize?.({ startOnLoad: false });\r\n  } catch {\r\n    /* ignore */\r\n  }\r\n  const diagram = await fn.call(api.mermaidAPI ?? api, text);\r\n  const db = diagram?.db as ReqDbLike | undefined;\r\n  if (!db || typeof db.getRequirements !== 'function') return undefined;\r\n  return db;\r\n}\r\n\r\nexport async function requirementDbToScene(text: string, mermaid: MermaidLike): Promise<ParseResult> {\r\n  const warnings: ParseWarning[] = [];\r\n  const pre = prescan(text);\r\n  let db: ReqDbLike | undefined;\r\n  try {\r\n    db = await getReqDb(text, mermaid);\r\n  } catch (err) {\r\n    warnings.push({ message: `mermaid 解析失敗:${(err as Error).message}` });\r\n  }\r\n  if (!db) {\r\n    return {\r\n      scene: {\r\n        version: 1,\r\n        diagramType: 'requirement',\r\n        meta: { type: 'requirement' },\r\n        nodes: [],\r\n        edges: [],\r\n        containers: [],\r\n        raw: { comments: pre.comments, styleLines: pre.styleLines, fullSource: text },\r\n        layoutOwner: 'engine',\r\n      },\r\n      warnings: warnings.length ? warnings : [{ message: 'mermaid 解析 API 不可用。' }],\r\n    };\r\n  }\r\n\r\n  const nodes: SceneNode[] = [];\r\n  let idx = 0;\r\n  for (const [name, r] of asEntries(db.getRequirements?.())) {\r\n    const req = {\r\n      element: false as const,\r\n      reqType: TYPE_FROM_DB[lower(r.type)] ?? 'requirement',\r\n      reqId: r.requirementId || undefined,\r\n      text: r.text || undefined,\r\n      risk: RISKS.find((x) => x === lower(r.risk)),\r\n      verifyMethod: VERIFIES.find((x) => x === lower(r.verifyMethod)),\r\n    };\r\n    const label = r.name || name;\r\n    nodes.push({\r\n      id: label,\r\n      shape: 'requirementBox',\r\n      label,\r\n      x: 0,\r\n      y: 0,\r\n      ...requirementBoxSize(label, req),\r\n      data: { kind: 'requirement', req },\r\n      sourceIndex: idx++,\r\n    });\r\n  }\r\n  for (const [name, el] of asEntries(db.getElements?.())) {\r\n    const req = { element: true as const, elementType: el.type || undefined, docRef: el.docRef || undefined };\r\n    const label = el.name || name;\r\n    nodes.push({\r\n      id: label,\r\n      shape: 'elementBox',\r\n      label,\r\n      x: 0,\r\n      y: 0,\r\n      ...requirementBoxSize(label, req),\r\n      data: { kind: 'requirement', req },\r\n      sourceIndex: idx++,\r\n    });\r\n  }\r\n\r\n  const ids = new Set(nodes.map((n) => n.id));\r\n  const edges: SceneEdge[] = [];\r\n  let eIdx = 0;\r\n  for (const rel of db.getRelationships?.() ?? []) {\r\n    const src = rel.src ?? '';\r\n    const dst = rel.dst ?? '';\r\n    if (!ids.has(src) || !ids.has(dst)) {\r\n      warnings.push({ message: `關係端點找不到節點:${src} - ${rel.type} -> ${dst}` });\r\n      continue;\r\n    }\r\n    edges.push({\r\n      id: `e${eIdx}`,\r\n      source: src,\r\n      target: dst,\r\n      label: undefined,\r\n      lineKind: 'solid',\r\n      arrowStart: 'none',\r\n      arrowEnd: 'arrow',\r\n      data: { kind: 'requirement', relation: RELATIONS.find((x) => x === lower(rel.type)) ?? 'traces' },\r\n      sourceIndex: eIdx++,\r\n    });\r\n  }\r\n\r\n  const scene: EditorScene = {\r\n    version: 1,\r\n    diagramType: 'requirement',\r\n    meta: { type: 'requirement', direction: normalizeDir(db.getDirection?.()) },\r\n    nodes,\r\n    edges,\r\n    containers: [],\r\n    raw: { comments: pre.comments, styleLines: pre.styleLines },\r\n    layoutOwner: 'engine',\r\n  };\r\n  return { scene, warnings };\r\n}\r\n","// 場景 → requirementDiagram 文字。確定性、永遠輸出合法 mermaid。\r\n\r\nimport type { DataLossWarning, SerializeResult } from '../../adapters/types';\r\nimport type { EditorScene, ReqType, SceneNode } from '../../scene/types';\r\n\r\nconst INDENT = '    ';\r\n\r\n/**\r\n * requirementDiagram 的名稱是**識別字**,mermaid 的 lexer 只吃 ASCII 字母 / 數字 / 底線 ——\r\n * 中文名稱會直接讓整份圖語法錯誤(不像 ER 的實體名可以是中文,也不像 class 有 [\"顯示名\"] 別名)。\r\n * 所以這裡把名稱壓成安全識別字;真正要給人看的中文請寫在 text 欄位(它可以加引號帶中文)。\r\n */\r\nexport function reqName(raw: string, fallback: string): string {\r\n  const cleaned = raw\r\n    .trim()\r\n    .replace(/[^A-Za-z0-9_]+/g, '_')\r\n    .replace(/^_+|_+$/g, '');\r\n  if (!cleaned) return fallback.replace(/[^A-Za-z0-9_]+/g, '_') || 'req';\r\n  return /^[0-9]/.test(cleaned) ? `r_${cleaned}` : cleaned;\r\n}\r\n\r\n/**\r\n * 值型欄位(id / text / type / docref)吃到行尾。含非 ASCII 或引號時必須加引號,\r\n * 否則 lexer 不認(`text: 待填寫` 會噴 Lexical error;`text: \"待填寫\"` 可以)。\r\n */\r\nfunction inlineValue(raw: string): string {\r\n  const v = raw.replace(/\\r?\\n+/g, ' ').replace(/[{}\"]/g, '').trim();\r\n  return /^[\\x20-\\x7E]*$/.test(v) ? v : `\"${v}\"`;\r\n}\r\n\r\nfunction emitRequirement(n: SceneNode, lines: string[]): void {\r\n  const d = n.data?.kind === 'requirement' ? n.data.req : undefined;\r\n  if (!d || d.element) return;\r\n  const type: ReqType = d.reqType ?? 'requirement';\r\n  lines.push(`${INDENT}${type} ${reqName(n.label, n.id)} {`);\r\n  // id 與 text 是 mermaid 的必填欄位:少了任一個,整份圖直接語法錯誤。\r\n  lines.push(`${INDENT}${INDENT}id: ${inlineValue(d.reqId ?? '') || n.id}`);\r\n  lines.push(`${INDENT}${INDENT}text: ${inlineValue(d.text ?? '') || n.label || n.id}`);\r\n  if (d.risk) lines.push(`${INDENT}${INDENT}risk: ${d.risk}`);\r\n  if (d.verifyMethod) lines.push(`${INDENT}${INDENT}verifymethod: ${d.verifyMethod}`);\r\n  lines.push(`${INDENT}}`);\r\n}\r\n\r\nfunction emitElement(n: SceneNode, lines: string[]): void {\r\n  const d = n.data?.kind === 'requirement' ? n.data.req : undefined;\r\n  if (!d || !d.element) return;\r\n  lines.push(`${INDENT}element ${reqName(n.label, n.id)} {`);\r\n  lines.push(`${INDENT}${INDENT}type: ${inlineValue(d.elementType ?? '') || 'simulation'}`);\r\n  if (d.docRef) lines.push(`${INDENT}${INDENT}docref: ${inlineValue(d.docRef)}`);\r\n  lines.push(`${INDENT}}`);\r\n}\r\n\r\nfunction bySourceIndex<T extends { sourceIndex?: number }>(a: T, b: T): number {\r\n  return (a.sourceIndex ?? Number.MAX_SAFE_INTEGER) - (b.sourceIndex ?? Number.MAX_SAFE_INTEGER);\r\n}\r\n\r\nexport function sceneToRequirement(scene: EditorScene): SerializeResult {\r\n  // 解析失敗的降級場景(空節點但保有原文)→ 原樣回吐,絕不覆寫成空。\r\n  if (scene.nodes.length === 0 && scene.raw?.fullSource) {\r\n    return { text: scene.raw.fullSource, warnings: [] };\r\n  }\r\n  const warnings: DataLossWarning[] = [];\r\n  const lines: string[] = [];\r\n\r\n  if (scene.frontmatter) lines.push(scene.frontmatter.replace(/\\n+$/, ''));\r\n  for (const c of scene.raw?.comments ?? []) {\r\n    if (c.trim().startsWith('%%{')) lines.push(c.trim());\r\n  }\r\n  lines.push('requirementDiagram');\r\n  const dir = scene.meta.type === 'requirement' ? scene.meta.direction : undefined;\r\n  if (dir && dir !== 'TB' && dir !== 'TD') lines.push(`${INDENT}direction ${dir}`);\r\n  for (const c of scene.raw?.comments ?? []) {\r\n    const t = c.trim();\r\n    if (t.startsWith('%%') && !t.startsWith('%%{')) lines.push(INDENT + t);\r\n  }\r\n\r\n  const sorted = [...scene.nodes].sort(bySourceIndex);\r\n  for (const n of sorted) emitRequirement(n, lines);\r\n  for (const n of sorted) emitElement(n, lines);\r\n  // 名稱被迫改寫時要講出來 —— 使用者打了中文名字卻在檔案裡看到 `_`,不說明會以為是壞掉。\r\n  for (const n of sorted) {\r\n    const safe = reqName(n.label, n.id);\r\n    if (n.label && safe !== n.label) {\r\n      warnings.push({\r\n        message: `需求圖的名稱只能用英數與底線,「${n.label}」已改寫成「${safe}」(中文請寫在 text 欄位)`,\r\n        elementId: n.id,\r\n      });\r\n    }\r\n  }\r\n\r\n  // 關係用「名稱」(mermaid 的節點識別就是名稱),所以要用與宣告一致的正規化名稱。\r\n  const nameOf = new Map(scene.nodes.map((n) => [n.id, reqName(n.label, n.id)] as const));\r\n  for (const e of [...scene.edges].sort(bySourceIndex)) {\r\n    const s = nameOf.get(e.source);\r\n    const t = nameOf.get(e.target);\r\n    if (!s || !t) {\r\n      warnings.push({ message: `略過懸空關係 ${e.id}`, elementId: e.id });\r\n      continue;\r\n    }\r\n    const rel = e.data?.kind === 'requirement' ? e.data.relation : 'traces';\r\n    lines.push(`${INDENT}${s} - ${rel} -> ${t}`);\r\n  }\r\n\r\n  for (const s of scene.raw?.styleLines ?? []) lines.push(INDENT + s.trim());\r\n\r\n  return { text: lines.join('\\n') + '\\n', warnings };\r\n}\r\n","// requirementDiagram adapter(需求 / 元素 + 七種追溯關係)。\r\n\r\nimport { registerAdapter } from '../registry';\r\nimport type { DiagramAdapter } from '../types';\r\nimport type { EditorScene } from '../../scene/types';\r\nimport type { LayoutEngine } from '../../layout/types';\r\nimport type { MermaidLike, MermaidSource } from '../../../../types';\r\nimport { requirementDbToScene } from '../../round-trip/requirement/parse';\r\nimport { sceneToRequirement } from '../../round-trip/requirement/serialize';\r\n\r\nexport const requirementAdapter: DiagramAdapter = {\r\n  capabilities: {\r\n    type: 'requirement',\r\n    // 需求框與元素框是兩種不同的東西(不是外形變體),所以兩個都攤在工具列上。\r\n    shapes: ['requirementBox', 'elementBox'],\r\n    // 關係種類(contains / satisfies / …)不是箭頭樣式,由右鍵選單切換,故這裡只有一種箭頭。\r\n    arrowHeads: ['arrow'],\r\n    lineKinds: ['solid'],\r\n    freeform: true,\r\n    defaults: { nodeShape: 'requirementBox', arrowEnd: 'arrow' },\r\n  },\r\n  keywords: ['requirementdiagram'],\r\n\r\n  parse(text: string, mermaid: MermaidLike) {\r\n    return requirementDbToScene(text, mermaid);\r\n  },\r\n\r\n  serialize(scene: EditorScene) {\r\n    return sceneToRequirement(scene);\r\n  },\r\n\r\n  async layout(scene: EditorScene, engine: LayoutEngine, mermaid?: MermaidSource): Promise<EditorScene> {\r\n    const code = sceneToRequirement(scene).text;\r\n    return engine.layout(scene, { code, mermaid });\r\n  },\r\n};\r\n\r\n/** 顯式註冊(非 module side-effect)。 */\r\nexport function registerRequirementAdapter(): void {\r\n  registerAdapter(requirementAdapter);\r\n}\r\n","// quadrantChart 文字 → 場景。\r\n//\r\n// 這裡刻意**不走 mermaid DB**:quadrant 的 db.getQuadrantData() 只吐已經算成像素的繪圖指令\r\n// (點的 x/y 是畫布座標、顏色是 hsl 字串),原始的 0..1 值與標籤根本拿不回來。語法本身是逐行的,\r\n// 自己解析反而精確可逆。\r\n\r\nimport type { ParseResult, ParseWarning } from '../../adapters/types';\r\nimport type { EditorScene, QuadrantMeta, SceneNode } from '../../scene/types';\r\nimport { POINT_BOX, valueToScene } from './model';\r\n\r\nconst FRONTMATTER_RE = /^---\\r?\\n[\\s\\S]*?\\r?\\n---(?:\\r?\\n|$)/;\r\n\r\n/** `名稱: [0.3, 0.6]` 或帶樣式的 `名稱: [0.3, 0.6] radius: 10, color: #f00` */\r\nconst POINT_RE = /^(.+?)\\s*:\\s*\\[\\s*([0-9.]+)\\s*,\\s*([0-9.]+)\\s*\\](.*)$/;\r\n\r\nfunction parseStyle(tail: string): { radius?: number; color?: string; strokeColor?: string; strokeWidth?: string } {\r\n  const out: { radius?: number; color?: string; strokeColor?: string; strokeWidth?: string } = {};\r\n  for (const part of tail.split(',')) {\r\n    const m = /^\\s*([A-Za-z-]+)\\s*:\\s*(.+?)\\s*$/.exec(part);\r\n    if (!m) continue;\r\n    const key = m[1].toLowerCase();\r\n    const value = m[2];\r\n    if (key === 'radius') out.radius = Number(value) || undefined;\r\n    else if (key === 'color') out.color = value;\r\n    else if (key === 'stroke-color') out.strokeColor = value;\r\n    else if (key === 'stroke-width') out.strokeWidth = value;\r\n  }\r\n  return out;\r\n}\r\n\r\n/** 軸定義:`x-axis 低成本 --> 高成本`(右端可省略)。 */\r\nfunction parseAxis(rest: string): { a: string; b?: string } {\r\n  const i = rest.indexOf('-->');\r\n  if (i === -1) return { a: rest.trim() };\r\n  return { a: rest.slice(0, i).trim(), b: rest.slice(i + 3).trim() || undefined };\r\n}\r\n\r\nexport function quadrantToScene(text: string): ParseResult {\r\n  const warnings: ParseWarning[] = [];\r\n  let body = text;\r\n  let frontmatter: string | undefined;\r\n  const fm = FRONTMATTER_RE.exec(body);\r\n  if (fm) {\r\n    frontmatter = fm[0].replace(/\\r?\\n$/, '');\r\n    body = body.slice(fm[0].length);\r\n  }\r\n\r\n  const meta: QuadrantMeta = { quadrants: [] };\r\n  const comments: string[] = [];\r\n  const extraLines: string[] = [];\r\n  const nodes: SceneNode[] = [];\r\n  let seenHeader = false;\r\n  let idx = 0;\r\n\r\n  for (const raw of body.split('\\n')) {\r\n    const line = raw.trim();\r\n    if (!line) continue;\r\n    if (line.startsWith('%%')) {\r\n      comments.push(line);\r\n      continue;\r\n    }\r\n    if (!seenHeader && /^quadrantChart\\b/i.test(line)) {\r\n      seenHeader = true;\r\n      continue;\r\n    }\r\n    const kw = /^([A-Za-z][A-Za-z0-9-]*)\\s+(.*)$/.exec(line);\r\n    const head = kw ? kw[1].toLowerCase() : '';\r\n    if (head === 'title') {\r\n      meta.title = kw![2].trim();\r\n      continue;\r\n    }\r\n    if (head === 'x-axis') {\r\n      const { a, b } = parseAxis(kw![2]);\r\n      meta.xAxis = { left: a, right: b };\r\n      continue;\r\n    }\r\n    if (head === 'y-axis') {\r\n      const { a, b } = parseAxis(kw![2]);\r\n      meta.yAxis = { bottom: a, top: b };\r\n      continue;\r\n    }\r\n    const q = /^quadrant-([1-4])\\s+(.*)$/i.exec(line);\r\n    if (q) {\r\n      meta.quadrants[Number(q[1]) - 1] = q[2].trim();\r\n      continue;\r\n    }\r\n    const p = POINT_RE.exec(line);\r\n    if (p) {\r\n      const label = p[1].trim().replace(/^[\"']|[\"']$/g, '');\r\n      const at = valueToScene(Number(p[2]), Number(p[3]));\r\n      const style = parseStyle(p[4] ?? '');\r\n      nodes.push({\r\n        id: label || `p${idx + 1}`,\r\n        shape: 'point',\r\n        label,\r\n        x: at.x - POINT_BOX / 2,\r\n        y: at.y - POINT_BOX / 2,\r\n        w: POINT_BOX,\r\n        h: POINT_BOX,\r\n        data: { kind: 'quadrant', ...style },\r\n        sourceIndex: idx++,\r\n        pinned: true,\r\n      });\r\n      continue;\r\n    }\r\n    // 未模型化的行(classDef / 點的 class 指派等)逐字保留。\r\n    extraLines.push(line);\r\n  }\r\n\r\n  if (!seenHeader) warnings.push({ message: '找不到 quadrantChart 標頭,已以空圖處理。' });\r\n  if (extraLines.length) meta.extraLines = extraLines;\r\n\r\n  const scene: EditorScene = {\r\n    version: 1,\r\n    diagramType: 'quadrant',\r\n    meta: { type: 'quadrant', quadrant: meta },\r\n    nodes,\r\n    edges: [],\r\n    containers: [],\r\n    frontmatter,\r\n    raw: { comments, fullSource: seenHeader ? undefined : text },\r\n    // 點的位置就是資料,永遠由使用者掌管,不需要(也不可以)交給排版引擎重排。\r\n    layoutOwner: 'user',\r\n  };\r\n  return { scene, warnings };\r\n}\r\n","// 場景 → quadrantChart 文字。點的座標由節點位置換算回 0..1。\r\n\r\nimport type { DataLossWarning, SerializeResult } from '../../adapters/types';\r\nimport type { EditorScene, SceneNode } from '../../scene/types';\r\nimport { sceneToValue } from './model';\r\n\r\nconst INDENT = '    ';\r\n\r\n/** 0..1 值輸出成兩位小數(mermaid 範例的慣例,也避免拖曳產生一長串浮點雜訊)。 */\r\nconst fmt = (v: number): string => (Math.round(v * 100) / 100).toString();\r\n\r\nfunction pointLine(n: SceneNode): string {\r\n  const { qx, qy } = sceneToValue(n.x + n.w / 2, n.y + n.h / 2);\r\n  const d = n.data?.kind === 'quadrant' ? n.data : undefined;\r\n  const style: string[] = [];\r\n  if (d?.radius) style.push(`radius: ${d.radius}`);\r\n  if (d?.color) style.push(`color: ${d.color}`);\r\n  if (d?.strokeColor) style.push(`stroke-color: ${d.strokeColor}`);\r\n  if (d?.strokeWidth) style.push(`stroke-width: ${d.strokeWidth}`);\r\n  // 名稱含冒號會和 `名稱: [x, y]` 的分隔衝突 → 加引號(mermaid 接受引號名稱)。\r\n  const label = n.label || n.id;\r\n  const name = /[:[\\]]/.test(label) ? `\"${label.replace(/\"/g, '')}\"` : label;\r\n  return `${name}: [${fmt(qx)}, ${fmt(qy)}]${style.length ? ` ${style.join(', ')}` : ''}`;\r\n}\r\n\r\nfunction bySourceIndex(a: SceneNode, b: SceneNode): number {\r\n  return (a.sourceIndex ?? Number.MAX_SAFE_INTEGER) - (b.sourceIndex ?? Number.MAX_SAFE_INTEGER);\r\n}\r\n\r\nexport function sceneToQuadrant(scene: EditorScene): SerializeResult {\r\n  if (scene.nodes.length === 0 && scene.raw?.fullSource) {\r\n    return { text: scene.raw.fullSource, warnings: [] };\r\n  }\r\n  const warnings: DataLossWarning[] = [];\r\n  const meta = scene.meta.type === 'quadrant' ? scene.meta.quadrant : { quadrants: [] as [] };\r\n  const lines: string[] = [];\r\n\r\n  if (scene.frontmatter) lines.push(scene.frontmatter.replace(/\\n+$/, ''));\r\n  for (const c of scene.raw?.comments ?? []) {\r\n    if (c.trim().startsWith('%%{')) lines.push(c.trim());\r\n  }\r\n  lines.push('quadrantChart');\r\n  if (meta.title) lines.push(`${INDENT}title ${meta.title}`);\r\n  if (meta.xAxis) {\r\n    lines.push(`${INDENT}x-axis ${meta.xAxis.left}${meta.xAxis.right ? ` --> ${meta.xAxis.right}` : ''}`);\r\n  }\r\n  if (meta.yAxis) {\r\n    lines.push(`${INDENT}y-axis ${meta.yAxis.bottom}${meta.yAxis.top ? ` --> ${meta.yAxis.top}` : ''}`);\r\n  }\r\n  meta.quadrants.forEach((q, i) => {\r\n    if (q) lines.push(`${INDENT}quadrant-${i + 1} ${q}`);\r\n  });\r\n  for (const c of scene.raw?.comments ?? []) {\r\n    const t = c.trim();\r\n    if (t.startsWith('%%') && !t.startsWith('%%{')) lines.push(INDENT + t);\r\n  }\r\n  for (const n of [...scene.nodes].sort(bySourceIndex)) lines.push(INDENT + pointLine(n));\r\n  for (const l of meta.extraLines ?? []) lines.push(INDENT + l);\r\n\r\n  return { text: lines.join('\\n') + '\\n', warnings };\r\n}\r\n","// quadrantChart adapter(把點拖到象限裡 = 改它的值)。\r\n\r\nimport { registerAdapter } from '../registry';\r\nimport type { DiagramAdapter } from '../types';\r\nimport type { EditorScene } from '../../scene/types';\r\nimport type { LayoutEngine } from '../../layout/types';\r\nimport type { MermaidLike, MermaidSource } from '../../../../types';\r\nimport { quadrantToScene } from '../../round-trip/quadrant/parse';\r\nimport { sceneToQuadrant } from '../../round-trip/quadrant/serialize';\r\n\r\nexport const quadrantAdapter: DiagramAdapter = {\r\n  capabilities: {\r\n    type: 'quadrant',\r\n    shapes: ['point'],\r\n    // 象限圖沒有連線。\r\n    arrowHeads: ['none'],\r\n    lineKinds: ['solid'],\r\n    supportsEdges: false,\r\n    freeform: true,\r\n    defaults: { nodeShape: 'point', arrowEnd: 'none' },\r\n  },\r\n  keywords: ['quadrantchart'],\r\n\r\n  parse(text: string, _mermaid: MermaidLike) {\r\n    return Promise.resolve(quadrantToScene(text));\r\n  },\r\n\r\n  serialize(scene: EditorScene) {\r\n    return sceneToQuadrant(scene);\r\n  },\r\n\r\n  async layout(scene: EditorScene, _engine: LayoutEngine, _mermaid?: MermaidSource): Promise<EditorScene> {\r\n    // 位置就是資料 —— 自動排版會直接竄改使用者的數值,所以這張圖永遠不重排。\r\n    return scene;\r\n  },\r\n};\r\n\r\n/** 顯式註冊(非 module side-effect)。 */\r\nexport function registerQuadrantAdapter(): void {\r\n  registerAdapter(quadrantAdapter);\r\n}\r\n","// C4 圖(C4Context / C4Container / C4Component / …)文字 → 場景。\r\n//\r\n// mermaid 的 C4 DB 給的是三個扁平集合:getC4ShapeArray()(元素,含 parentBoundary)、\r\n// getBoundaries()(邊界,含 parentBoundary)、getRels()(關係)。巢狀關係全靠 parentBoundary,\r\n// 所以場景直接對映成 nodes + containers(parentId)+ edges。\r\n\r\nimport type { ParseResult, ParseWarning } from '../../adapters/types';\r\nimport type { EditorScene, SceneContainer, SceneEdge, SceneNode } from '../../scene/types';\r\nimport type { MermaidLike } from '../../../../types';\r\nimport { c4BoxSize } from '../../render/node-metrics';\r\nimport { c4Shape } from './shapes';\r\n\r\ninterface MermaidApiLike {\r\n  mermaidAPI?: { getDiagramFromText?: (t: string) => Promise<{ db?: unknown }> | { db?: unknown } };\r\n  getDiagramFromText?: (t: string) => Promise<{ db?: unknown }> | { db?: unknown };\r\n}\r\n\r\ninterface TextLike {\r\n  text?: string;\r\n}\r\ninterface C4ShapeLike {\r\n  alias?: string;\r\n  label?: TextLike;\r\n  descr?: TextLike;\r\n  techn?: TextLike;\r\n  typeC4Shape?: TextLike;\r\n  parentBoundary?: string;\r\n}\r\ninterface C4BoundaryLike {\r\n  alias?: string;\r\n  label?: TextLike;\r\n  type?: TextLike;\r\n  parentBoundary?: string;\r\n}\r\ninterface C4RelLike {\r\n  type?: string;\r\n  from?: string;\r\n  to?: string;\r\n  label?: TextLike;\r\n  techn?: TextLike;\r\n  descr?: TextLike;\r\n}\r\ninterface C4DbLike {\r\n  getC4ShapeArray?: () => C4ShapeLike[];\r\n  getBoundaries?: () => C4BoundaryLike[];\r\n  getBoundarys?: () => C4BoundaryLike[];\r\n  getRels?: () => C4RelLike[];\r\n  getTitle?: () => string | undefined;\r\n  getC4Type?: () => string | undefined;\r\n}\r\n\r\nconst txt = (t: TextLike | undefined): string | undefined => {\r\n  const s = t?.text?.trim();\r\n  return s && s.length ? s : undefined;\r\n};\r\n\r\n/**\r\n * 逐字保留 DB 看不到的行:%% 註解,以及 UpdateRelStyle / UpdateElementStyle / UpdateLayoutConfig。\r\n * 那些樣式指令 mermaid 是「套進去」而不是留著,重建會失真,所以原封不動搬回去。\r\n */\r\nfunction prescan(src: string): { comments: string[]; styleLines: string[] } {\r\n  const comments: string[] = [];\r\n  const styleLines: string[] = [];\r\n  for (const raw of src.split('\\n')) {\r\n    const line = raw.trim();\r\n    if (!line) continue;\r\n    if (line.startsWith('%%')) comments.push(line);\r\n    else if (/^Update(RelStyle|ElementStyle|LayoutConfig)\\s*\\(/.test(line)) styleLines.push(line);\r\n  }\r\n  return { comments, styleLines };\r\n}\r\n\r\nasync function getC4Db(text: string, mermaid: MermaidLike): Promise<C4DbLike | undefined> {\r\n  const api = mermaid as unknown as MermaidApiLike;\r\n  const fn = api.mermaidAPI?.getDiagramFromText ?? api.getDiagramFromText;\r\n  if (typeof fn !== 'function') return undefined;\r\n  try {\r\n    mermaid.initialize?.({ startOnLoad: false });\r\n  } catch {\r\n    /* ignore */\r\n  }\r\n  const diagram = await fn.call(api.mermaidAPI ?? api, text);\r\n  const db = diagram?.db as C4DbLike | undefined;\r\n  if (!db || typeof db.getC4ShapeArray !== 'function') return undefined;\r\n  return db;\r\n}\r\n\r\nexport async function c4DbToScene(text: string, mermaid: MermaidLike): Promise<ParseResult> {\r\n  const warnings: ParseWarning[] = [];\r\n  const pre = prescan(text);\r\n  let db: C4DbLike | undefined;\r\n  try {\r\n    db = await getC4Db(text, mermaid);\r\n  } catch (err) {\r\n    warnings.push({ message: `mermaid 解析失敗:${(err as Error).message}` });\r\n  }\r\n  if (!db) {\r\n    return {\r\n      scene: {\r\n        version: 1,\r\n        diagramType: 'c4',\r\n        meta: { type: 'c4', c4Type: 'C4Context' },\r\n        nodes: [],\r\n        edges: [],\r\n        containers: [],\r\n        raw: { comments: pre.comments, styleLines: pre.styleLines, fullSource: text },\r\n        layoutOwner: 'engine',\r\n      },\r\n      warnings: warnings.length ? warnings : [{ message: 'mermaid 解析 API 不可用。' }],\r\n    };\r\n  }\r\n\r\n  // 'global' 是 mermaid 內建的根邊界,不是使用者寫的 → 不建成容器。\r\n  const rawBoundaries = (db.getBoundaries?.() ?? db.getBoundarys?.() ?? []).filter(\r\n    (b) => (b.alias ?? '') !== 'global',\r\n  );\r\n  const boundaryIds = new Set(rawBoundaries.map((b) => b.alias ?? ''));\r\n  const parentOf = (p: string | undefined): string | null =>\r\n    p && p !== 'global' && boundaryIds.has(p) ? p : null;\r\n\r\n  const containers: SceneContainer[] = rawBoundaries.map((b, i) => ({\r\n    id: b.alias ?? `b${i}`,\r\n    label: txt(b.label) ?? b.alias ?? '',\r\n    x: 0,\r\n    y: 0,\r\n    w: 0,\r\n    h: 0,\r\n    parentId: parentOf(b.parentBoundary),\r\n    childNodeIds: [],\r\n    c4Type: txt(b.type) ?? 'BOUNDARY',\r\n    sourceIndex: i,\r\n  }));\r\n  const containerById = new Map(containers.map((c) => [c.id, c] as const));\r\n\r\n  const nodes: SceneNode[] = [];\r\n  let idx = 0;\r\n  for (const s of db.getC4ShapeArray?.() ?? []) {\r\n    const id = s.alias ?? `c${idx}`;\r\n    const c4Type = txt(s.typeC4Shape) ?? 'system';\r\n    const label = txt(s.label) ?? id;\r\n    const data = { kind: 'c4' as const, c4Type, techn: txt(s.techn), descr: txt(s.descr) };\r\n    const parentId = parentOf(s.parentBoundary);\r\n    if (parentId) containerById.get(parentId)?.childNodeIds.push(id);\r\n    nodes.push({\r\n      id,\r\n      shape: c4Shape(c4Type),\r\n      label,\r\n      x: 0,\r\n      y: 0,\r\n      ...c4BoxSize(label, data),\r\n      parentId,\r\n      data,\r\n      sourceIndex: idx++,\r\n    });\r\n  }\r\n\r\n  const ids = new Set(nodes.map((n) => n.id));\r\n  const edges: SceneEdge[] = [];\r\n  let eIdx = 0;\r\n  for (const r of db.getRels?.() ?? []) {\r\n    const from = r.from ?? '';\r\n    const to = r.to ?? '';\r\n    if (!ids.has(from) || !ids.has(to)) {\r\n      warnings.push({ message: `關係端點找不到元素:${from} → ${to}` });\r\n      continue;\r\n    }\r\n    const relType = (r.type ?? 'rel').toLowerCase();\r\n    edges.push({\r\n      id: `e${eIdx}`,\r\n      source: from,\r\n      target: to,\r\n      label: txt(r.label),\r\n      lineKind: 'solid',\r\n      arrowStart: relType === 'birel' ? 'arrow' : 'none',\r\n      arrowEnd: 'arrow',\r\n      data: { kind: 'c4', relType, techn: txt(r.techn), descr: txt(r.descr) },\r\n      sourceIndex: eIdx++,\r\n    });\r\n  }\r\n\r\n  const scene: EditorScene = {\r\n    version: 1,\r\n    diagramType: 'c4',\r\n    meta: { type: 'c4', c4Type: db.getC4Type?.() ?? 'C4Context', title: db.getTitle?.() || undefined },\r\n    nodes,\r\n    edges,\r\n    containers,\r\n    raw: { comments: pre.comments, styleLines: pre.styleLines },\r\n    layoutOwner: 'engine',\r\n  };\r\n  return { scene, warnings };\r\n}\r\n","// 場景 → C4 圖文字。確定性、永遠輸出合法 mermaid。\r\n\r\nimport type { DataLossWarning, SerializeResult } from '../../adapters/types';\r\nimport type { EditorScene, SceneContainer, SceneEdge, SceneNode } from '../../scene/types';\r\nimport { boundaryKeyword, c4HasTechn, c4Keyword } from './shapes';\r\n\r\nconst INDENT = '    ';\r\n\r\n/** C4 的引數都是帶引號的字串;引號與換行會壞掉語法,先清掉。 */\r\nconst q = (s: string | undefined): string => `\"${(s ?? '').replace(/[\"\\r\\n]+/g, ' ').trim()}\"`;\r\n\r\nfunction bySourceIndex<T extends { sourceIndex?: number }>(a: T, b: T): number {\r\n  return (a.sourceIndex ?? Number.MAX_SAFE_INTEGER) - (b.sourceIndex ?? Number.MAX_SAFE_INTEGER);\r\n}\r\n\r\nfunction shapeLine(n: SceneNode): string {\r\n  const d = n.data?.kind === 'c4' ? n.data : undefined;\r\n  const type = d?.c4Type ?? 'system';\r\n  const args = [n.id, q(n.label)];\r\n  // container / component / node 家族的第三個引數是「技術」,其餘型別沒有這一欄。\r\n  if (c4HasTechn(type)) args.push(q(d?.techn));\r\n  args.push(q(d?.descr));\r\n  return `${c4Keyword(type)}(${args.join(', ')})`;\r\n}\r\n\r\nfunction relLine(e: SceneEdge): string {\r\n  const d = e.data?.kind === 'c4' ? e.data : undefined;\r\n  const relType = d?.relType ?? 'rel';\r\n  // rel → Rel、birel → BiRel、rel_u → Rel_U(方向變體只是後綴大寫)。\r\n  const keyword = relType.startsWith('birel')\r\n    ? 'BiRel' + relType.slice(5).toUpperCase()\r\n    : 'Rel' + relType.slice(3).toUpperCase();\r\n  const args = [e.source, e.target, q(e.label)];\r\n  if (d?.techn) args.push(q(d.techn));\r\n  if (d?.descr) args.push(q(d.descr));\r\n  return `${keyword}(${args.join(', ')})`;\r\n}\r\n\r\nexport function sceneToC4(scene: EditorScene): SerializeResult {\r\n  if (scene.nodes.length === 0 && scene.containers.length === 0 && scene.raw?.fullSource) {\r\n    return { text: scene.raw.fullSource, warnings: [] };\r\n  }\r\n  const warnings: DataLossWarning[] = [];\r\n  const meta = scene.meta.type === 'c4' ? scene.meta : { c4Type: 'C4Context', title: undefined };\r\n  const lines: string[] = [];\r\n\r\n  for (const c of scene.raw?.comments ?? []) {\r\n    if (c.trim().startsWith('%%{')) lines.push(c.trim());\r\n  }\r\n  lines.push(meta.c4Type || 'C4Context');\r\n  if (meta.title) lines.push(`${INDENT}title ${meta.title}`);\r\n  for (const c of scene.raw?.comments ?? []) {\r\n    const t = c.trim();\r\n    if (t.startsWith('%%') && !t.startsWith('%%{')) lines.push(INDENT + t);\r\n  }\r\n\r\n  const nodesByParent = new Map<string | null, SceneNode[]>();\r\n  for (const n of [...scene.nodes].sort(bySourceIndex)) {\r\n    const p = n.parentId ?? null;\r\n    nodesByParent.set(p, [...(nodesByParent.get(p) ?? []), n]);\r\n  }\r\n  const childBoundaries = (id: string | null): SceneContainer[] =>\r\n    [...scene.containers].sort(bySourceIndex).filter((c) => (c.parentId ?? null) === id);\r\n\r\n  const emitScope = (parentId: string | null, depth: number): void => {\r\n    const pad = INDENT.repeat(depth + 1);\r\n    for (const n of nodesByParent.get(parentId) ?? []) lines.push(pad + shapeLine(n));\r\n    for (const b of childBoundaries(parentId)) {\r\n      lines.push(`${pad}${boundaryKeyword(b.c4Type)}(${b.id}, ${q(b.label)}) {`);\r\n      emitScope(b.id, depth + 1);\r\n      lines.push(`${pad}}`);\r\n    }\r\n  };\r\n  emitScope(null, 0);\r\n\r\n  const ids = new Set(scene.nodes.map((n) => n.id));\r\n  for (const e of [...scene.edges].sort(bySourceIndex)) {\r\n    if (!ids.has(e.source) || !ids.has(e.target)) {\r\n      warnings.push({ message: `略過懸空關係 ${e.id}`, elementId: e.id });\r\n      continue;\r\n    }\r\n    lines.push(INDENT + relLine(e));\r\n  }\r\n\r\n  // UpdateRelStyle / UpdateElementStyle / UpdateLayoutConfig 逐字回吐(見 parse.prescan)。\r\n  for (const s of scene.raw?.styleLines ?? []) lines.push(INDENT + s.trim());\r\n\r\n  return { text: lines.join('\\n') + '\\n', warnings };\r\n}\r\n","// C4 圖 adapter(Context / Container / Component;人物、系統、容器、元件與邊界)。\r\n\r\nimport { registerAdapter } from '../registry';\r\nimport type { DiagramAdapter } from '../types';\r\nimport type { EditorScene } from '../../scene/types';\r\nimport type { LayoutEngine } from '../../layout/types';\r\nimport type { MermaidLike, MermaidSource } from '../../../../types';\r\nimport { c4DbToScene } from '../../round-trip/c4/parse';\r\nimport { sceneToC4 } from '../../round-trip/c4/serialize';\r\n\r\nexport const c4Adapter: DiagramAdapter = {\r\n  capabilities: {\r\n    type: 'c4',\r\n    shapes: ['c4Person', 'c4Box', 'c4Db', 'c4Queue'],\r\n    // C4 的關係只有 Rel / BiRel 與方向變體,箭頭樣式不是使用者要選的東西。\r\n    arrowHeads: ['arrow'],\r\n    lineKinds: ['solid'],\r\n    freeform: true,\r\n    defaults: { nodeShape: 'c4Box', arrowEnd: 'arrow' },\r\n  },\r\n  keywords: ['c4context', 'c4container', 'c4component', 'c4dynamic', 'c4deployment'],\r\n\r\n  parse(text: string, mermaid: MermaidLike) {\r\n    return c4DbToScene(text, mermaid);\r\n  },\r\n\r\n  serialize(scene: EditorScene) {\r\n    return sceneToC4(scene);\r\n  },\r\n\r\n  async layout(scene: EditorScene, engine: LayoutEngine, mermaid?: MermaidSource): Promise<EditorScene> {\r\n    const code = sceneToC4(scene).text;\r\n    return engine.layout(scene, { code, mermaid });\r\n  },\r\n};\r\n\r\n/** 顯式註冊(非 module side-effect)。 */\r\nexport function registerC4Adapter(): void {\r\n  registerAdapter(c4Adapter);\r\n}\r\n","// kanban 文字 → 場景。欄(section)成為容器,卡片成為節點。\r\n\r\nimport type { ParseResult, ParseWarning } from '../../adapters/types';\r\nimport type { EditorScene, SceneContainer, SceneNode } from '../../scene/types';\r\nimport type { MermaidLike } from '../../../../types';\r\nimport { CARD, laneCardX, layoutKanban } from './model';\r\n\r\ninterface MermaidApiLike {\r\n  mermaidAPI?: { getDiagramFromText?: (t: string) => Promise<{ db?: unknown }> | { db?: unknown } };\r\n  getDiagramFromText?: (t: string) => Promise<{ db?: unknown }> | { db?: unknown };\r\n}\r\n\r\ninterface KanbanNodeLike {\r\n  id?: string;\r\n  parentId?: string;\r\n  label?: string;\r\n  isGroup?: boolean;\r\n  assigned?: string;\r\n  ticket?: string;\r\n  priority?: string;\r\n}\r\ninterface KanbanDbLike {\r\n  getData?: () => { nodes?: KanbanNodeLike[] };\r\n}\r\n\r\nconst FRONTMATTER_RE = /^---\\r?\\n[\\s\\S]*?\\r?\\n---(?:\\r?\\n|$)/;\r\n\r\n/** 卡片高度:標籤長就多幾行,再加上有 metadata 時的那一列。 */\r\nfunction cardHeight(label: string, hasMeta: boolean): number {\r\n  const rows = Math.max(1, Math.ceil(label.length / 18));\r\n  return Math.max(CARD.minH, 18 + rows * 18 + (hasMeta ? 18 : 0));\r\n}\r\n\r\nasync function getKanbanDb(text: string, mermaid: MermaidLike): Promise<KanbanDbLike | undefined> {\r\n  const api = mermaid as unknown as MermaidApiLike;\r\n  const fn = api.mermaidAPI?.getDiagramFromText ?? api.getDiagramFromText;\r\n  if (typeof fn !== 'function') return undefined;\r\n  try {\r\n    mermaid.initialize?.({ startOnLoad: false });\r\n  } catch {\r\n    /* ignore */\r\n  }\r\n  const diagram = await fn.call(api.mermaidAPI ?? api, text);\r\n  const db = diagram?.db as KanbanDbLike | undefined;\r\n  if (!db || typeof db.getData !== 'function') return undefined;\r\n  return db;\r\n}\r\n\r\nexport async function kanbanDbToScene(text: string, mermaid: MermaidLike): Promise<ParseResult> {\r\n  const warnings: ParseWarning[] = [];\r\n  const fm = FRONTMATTER_RE.exec(text);\r\n  const frontmatter = fm ? fm[0].replace(/\\r?\\n$/, '') : undefined;\r\n  const comments = text\r\n    .split('\\n')\r\n    .map((l) => l.trim())\r\n    .filter((l) => l.startsWith('%%'));\r\n\r\n  let db: KanbanDbLike | undefined;\r\n  try {\r\n    db = await getKanbanDb(text, mermaid);\r\n  } catch (err) {\r\n    warnings.push({ message: `mermaid 解析失敗:${(err as Error).message}` });\r\n  }\r\n  if (!db) {\r\n    return {\r\n      scene: {\r\n        version: 1,\r\n        diagramType: 'kanban',\r\n        meta: { type: 'kanban' },\r\n        nodes: [],\r\n        edges: [],\r\n        containers: [],\r\n        frontmatter,\r\n        raw: { comments, fullSource: text },\r\n        layoutOwner: 'user',\r\n      },\r\n      warnings: warnings.length ? warnings : [{ message: 'mermaid 解析 API 不可用。' }],\r\n    };\r\n  }\r\n\r\n  const data = db.getData?.() ?? {};\r\n  const containers: SceneContainer[] = [];\r\n  const nodes: SceneNode[] = [];\r\n  let sIdx = 0;\r\n  let nIdx = 0;\r\n  // getData().nodes 是「欄、欄內的卡、下一欄…」的扁平串;isGroup 區分兩者,parentId 給歸屬。\r\n  for (const n of data.nodes ?? []) {\r\n    const id = n.id ?? `k${sIdx + nIdx}`;\r\n    if (n.isGroup) {\r\n      containers.push({\r\n        id,\r\n        label: n.label ?? id,\r\n        x: 0,\r\n        y: 0,\r\n        w: 0,\r\n        h: 0,\r\n        parentId: null,\r\n        childNodeIds: [],\r\n        sourceIndex: sIdx++,\r\n      });\r\n      continue;\r\n    }\r\n    const meta = { assigned: n.assigned, ticket: n.ticket, priority: n.priority };\r\n    const hasMeta = Boolean(meta.assigned || meta.ticket || meta.priority);\r\n    const label = n.label ?? id;\r\n    nodes.push({\r\n      id,\r\n      shape: 'kanbanCard',\r\n      label,\r\n      x: 0,\r\n      y: 0,\r\n      w: CARD.w,\r\n      h: cardHeight(label, hasMeta),\r\n      parentId: n.parentId ?? null,\r\n      data: { kind: 'kanban', ...meta },\r\n      sourceIndex: nIdx++,\r\n    });\r\n  }\r\n\r\n  // 初始位置:先照 parentId 把卡片放進它原本的欄(x 用該欄的卡片位置,版面才判得回同一欄),\r\n  // y 只需保持原順序,實際座標交給 layoutKanban 算。\r\n  const laneOrder = new Map(containers.map((c, i) => [c.id, i] as const));\r\n  const seeded = nodes.map((n, i) => ({\r\n    ...n,\r\n    x: laneCardX(laneOrder.get(n.parentId ?? '') ?? 0),\r\n    y: i,\r\n  }));\r\n\r\n  const scene: EditorScene = layoutKanban({\r\n    version: 1,\r\n    diagramType: 'kanban',\r\n    meta: { type: 'kanban' },\r\n    nodes: seeded,\r\n    edges: [],\r\n    containers,\r\n    frontmatter,\r\n    raw: { comments },\r\n    layoutOwner: 'user',\r\n  });\r\n  return { scene, warnings };\r\n}\r\n","// 場景 → kanban 文字。卡片歸屬哪一欄、在欄內排第幾,都由它的位置決定。\r\n\r\nimport type { DataLossWarning, SerializeResult } from '../../adapters/types';\r\nimport type { EditorScene, SceneNode } from '../../scene/types';\r\nimport { bucketByLane, sortedLanes } from './model';\r\n\r\nconst INDENT = '  ';\r\n\r\n/** 欄與卡片都可寫成 `id[顯示文字]`;id 與文字相同時省略成純文字。 */\r\nfunction nameFor(id: string, label: string): string {\r\n  const text = label || id;\r\n  // mermaid 的 kanban 用 [] 界定顯示文字,所以文字裡不能有中括號。\r\n  const safe = text.replace(/[[\\]]/g, '');\r\n  return id === safe ? safe : `${id}[${safe}]`;\r\n}\r\n\r\nfunction cardLine(n: SceneNode): string {\r\n  const d = n.data?.kind === 'kanban' ? n.data : undefined;\r\n  const meta: string[] = [];\r\n  if (d?.assigned) meta.push(`assigned: '${d.assigned}'`);\r\n  if (d?.ticket) meta.push(`ticket: ${d.ticket}`);\r\n  if (d?.priority) meta.push(`priority: '${d.priority}'`);\r\n  return `${nameFor(n.id, n.label)}${meta.length ? `@{ ${meta.join(', ')} }` : ''}`;\r\n}\r\n\r\nexport function sceneToKanban(scene: EditorScene): SerializeResult {\r\n  if (scene.containers.length === 0 && scene.raw?.fullSource) {\r\n    return { text: scene.raw.fullSource, warnings: [] };\r\n  }\r\n  const warnings: DataLossWarning[] = [];\r\n  const lines: string[] = [];\r\n  if (scene.frontmatter) lines.push(scene.frontmatter.replace(/\\n+$/, ''));\r\n  for (const c of scene.raw?.comments ?? []) {\r\n    if (c.trim().startsWith('%%{')) lines.push(c.trim());\r\n  }\r\n  lines.push('kanban');\r\n  for (const c of scene.raw?.comments ?? []) {\r\n    const t = c.trim();\r\n    if (t.startsWith('%%') && !t.startsWith('%%{')) lines.push(INDENT + t);\r\n  }\r\n\r\n  // 幾何是唯一真相:欄由卡片中心落點決定,欄內順序由 y 決定(拖曳因此不需要任何額外同步)。\r\n  const lanes = sortedLanes(scene);\r\n  const buckets = bucketByLane(scene, lanes);\r\n\r\n  lanes.forEach((lane, i) => {\r\n    lines.push(INDENT + nameFor(lane.id, lane.label));\r\n    for (const card of buckets[i]) lines.push(INDENT + INDENT + cardLine(card));\r\n  });\r\n\r\n  if (lanes.length === 0 && scene.nodes.length > 0) {\r\n    warnings.push({ message: '看板沒有任何欄位,卡片無處可放。' });\r\n  }\r\n  return { text: lines.join('\\n') + '\\n', warnings };\r\n}\r\n","// kanban adapter(把卡片拖到另一欄 = 改它的狀態)。\r\n\r\nimport { registerAdapter } from '../registry';\r\nimport type { DiagramAdapter } from '../types';\r\nimport type { EditorScene } from '../../scene/types';\r\nimport type { LayoutEngine } from '../../layout/types';\r\nimport type { MermaidLike, MermaidSource } from '../../../../types';\r\nimport { kanbanDbToScene } from '../../round-trip/kanban/parse';\r\nimport { sceneToKanban } from '../../round-trip/kanban/serialize';\r\nimport { layoutKanban } from '../../round-trip/kanban/model';\r\n\r\nexport const kanbanAdapter: DiagramAdapter = {\r\n  capabilities: {\r\n    type: 'kanban',\r\n    shapes: ['kanbanCard'],\r\n    // 看板沒有連線。\r\n    arrowHeads: ['none'],\r\n    lineKinds: ['solid'],\r\n    supportsEdges: false,\r\n    freeform: true,\r\n    defaults: { nodeShape: 'kanbanCard', arrowEnd: 'none' },\r\n  },\r\n  keywords: ['kanban'],\r\n\r\n  parse(text: string, mermaid: MermaidLike) {\r\n    return kanbanDbToScene(text, mermaid);\r\n  },\r\n\r\n  serialize(scene: EditorScene) {\r\n    return sceneToKanban(scene);\r\n  },\r\n\r\n  async layout(scene: EditorScene, _engine: LayoutEngine, _mermaid?: MermaidSource): Promise<EditorScene> {\r\n    // 看板的版面是規則的直向泳道,不需要(也不該)交給 dagre —— 自己排,「整理」就是把卡片\r\n    // 依目前的欄與上下順序重新對齊貼齊。\r\n    return layoutKanban(scene);\r\n  },\r\n};\r\n\r\n/** 顯式註冊(非 module side-effect)。 */\r\nexport function registerKanbanAdapter(): void {\r\n  registerAdapter(kanbanAdapter);\r\n}\r\n","// sankey-beta 的雙向 round-trip(純文字,零 mermaid 依賴)。\r\n//\r\n// 語法就是一份 CSV:每行 `來源,去處,流量`,欄位可加雙引號(內部的引號用 \"\" 跳脫)。\r\n// 因為只有這三欄,自己解析比繞 mermaid DB 精確得多 —— DB 存的是已經算好的圖形座標。\r\n//\r\n// 場景對映:每個出現過的名稱是一個節點,每一行是一條帶 value 的連線。\r\n// 節點位置由使用者拖曳決定(初次載入用依「層」的自動佈點),序列化不受位置影響。\r\n\r\nimport type { ParseResult, ParseWarning } from '../../adapters/types';\r\nimport type { DataLossWarning, SerializeResult } from '../../adapters/types';\r\nimport type { EditorScene, SceneEdge, SceneNode } from '../../scene/types';\r\n\r\nconst NODE_W = 150;\r\nconst NODE_H = 42;\r\nconst COL_GAP = 110;\r\nconst ROW_GAP = 26;\r\nconst ORIGIN = { x: 60, y: 60 };\r\n\r\n/** 解析一行 CSV(支援 \"…\" 引號與 \"\" 跳脫)。 */\r\nfunction parseCsvLine(line: string): string[] {\r\n  const out: string[] = [];\r\n  let cur = '';\r\n  let quoted = false;\r\n  for (let i = 0; i < line.length; i += 1) {\r\n    const ch = line[i];\r\n    if (quoted) {\r\n      if (ch === '\"') {\r\n        if (line[i + 1] === '\"') {\r\n          cur += '\"';\r\n          i += 1;\r\n        } else quoted = false;\r\n      } else cur += ch;\r\n      continue;\r\n    }\r\n    if (ch === '\"') quoted = true;\r\n    else if (ch === ',') {\r\n      out.push(cur.trim());\r\n      cur = '';\r\n    } else cur += ch;\r\n  }\r\n  out.push(cur.trim());\r\n  return out;\r\n}\r\n\r\n/** 需要引號?(含逗號 / 引號 / 前後空白)。 */\r\nfunction csvField(value: string): string {\r\n  return /[\",]/.test(value) || value !== value.trim() ? `\"${value.replace(/\"/g, '\"\"')}\"` : value;\r\n}\r\n\r\n/**\r\n * 依連線方向把節點分層(來源在左、去處在右),同層內上下排開。\r\n * 只在載入時用一次;之後位置由使用者掌管。\r\n */\r\nfunction autoPlace(nodes: SceneNode[], edges: SceneEdge[]): SceneNode[] {\r\n  const depth = new Map<string, number>(nodes.map((n) => [n.id, 0]));\r\n  // 反覆鬆弛(圖不大,層數必收斂;有環時由次數上限保護)。\r\n  for (let pass = 0; pass < nodes.length; pass += 1) {\r\n    let changed = false;\r\n    for (const e of edges) {\r\n      const want = (depth.get(e.source) ?? 0) + 1;\r\n      if (want > (depth.get(e.target) ?? 0)) {\r\n        depth.set(e.target, want);\r\n        changed = true;\r\n      }\r\n    }\r\n    if (!changed) break;\r\n  }\r\n  const byDepth = new Map<number, SceneNode[]>();\r\n  for (const n of nodes) {\r\n    const d = depth.get(n.id) ?? 0;\r\n    byDepth.set(d, [...(byDepth.get(d) ?? []), n]);\r\n  }\r\n  const placed: SceneNode[] = [];\r\n  for (const [d, list] of [...byDepth.entries()].sort((a, b) => a[0] - b[0])) {\r\n    list.forEach((n, i) => {\r\n      placed.push({\r\n        ...n,\r\n        x: ORIGIN.x + d * (NODE_W + COL_GAP),\r\n        y: ORIGIN.y + i * (NODE_H + ROW_GAP),\r\n      });\r\n    });\r\n  }\r\n  return placed;\r\n}\r\n\r\nexport function sankeyToScene(text: string): ParseResult {\r\n  const warnings: ParseWarning[] = [];\r\n  const comments: string[] = [];\r\n  const nodes: SceneNode[] = [];\r\n  const edges: SceneEdge[] = [];\r\n  const byName = new Map<string, SceneNode>();\r\n  let seenHeader = false;\r\n  let eIdx = 0;\r\n\r\n  const nodeFor = (name: string): SceneNode => {\r\n    const found = byName.get(name);\r\n    if (found) return found;\r\n    const n: SceneNode = {\r\n      id: name,\r\n      shape: 'sankeyNode',\r\n      label: name,\r\n      x: 0,\r\n      y: 0,\r\n      w: NODE_W,\r\n      h: NODE_H,\r\n      data: { kind: 'sankey' },\r\n      sourceIndex: byName.size,\r\n    };\r\n    byName.set(name, n);\r\n    nodes.push(n);\r\n    return n;\r\n  };\r\n\r\n  for (const raw of text.split('\\n')) {\r\n    const line = raw.trim();\r\n    if (!line) continue;\r\n    if (line.startsWith('%%')) {\r\n      comments.push(line);\r\n      continue;\r\n    }\r\n    if (!seenHeader && /^sankey(-beta)?$/i.test(line)) {\r\n      seenHeader = true;\r\n      continue;\r\n    }\r\n    const cells = parseCsvLine(line);\r\n    if (cells.length < 3) {\r\n      warnings.push({ message: `略過看不懂的一行:${line}` });\r\n      continue;\r\n    }\r\n    const [src, dst, valueText] = cells;\r\n    const value = Number(valueText);\r\n    if (!src || !dst || !Number.isFinite(value)) {\r\n      warnings.push({ message: `略過看不懂的一行:${line}` });\r\n      continue;\r\n    }\r\n    nodeFor(src);\r\n    nodeFor(dst);\r\n    edges.push({\r\n      id: `e${eIdx}`,\r\n      source: src,\r\n      target: dst,\r\n      lineKind: 'solid',\r\n      arrowStart: 'none',\r\n      // 流量圖不畫箭頭:線寬本身就表達了流量,而箭頭 marker 會隨線寬放大成一塊黑三角。\r\n      arrowEnd: 'none',\r\n      data: { kind: 'sankey', value },\r\n      sourceIndex: eIdx++,\r\n    });\r\n  }\r\n\r\n  if (!seenHeader) warnings.push({ message: '找不到 sankey-beta 標頭,已以空圖處理。' });\r\n\r\n  const scene: EditorScene = {\r\n    version: 1,\r\n    diagramType: 'sankey',\r\n    meta: { type: 'sankey' },\r\n    nodes: autoPlace(nodes, edges),\r\n    edges,\r\n    containers: [],\r\n    raw: { comments, fullSource: seenHeader ? undefined : text },\r\n    layoutOwner: 'user',\r\n  };\r\n  return { scene, warnings };\r\n}\r\n\r\nexport function sceneToSankey(scene: EditorScene): SerializeResult {\r\n  if (scene.nodes.length === 0 && scene.raw?.fullSource) {\r\n    return { text: scene.raw.fullSource, warnings: [] };\r\n  }\r\n  const warnings: DataLossWarning[] = [];\r\n  const lines: string[] = [];\r\n  for (const c of scene.raw?.comments ?? []) {\r\n    if (c.trim().startsWith('%%{')) lines.push(c.trim());\r\n  }\r\n  lines.push('sankey-beta');\r\n  lines.push('');\r\n  const label = new Map(scene.nodes.map((n) => [n.id, n.label || n.id] as const));\r\n  const sorted = [...scene.edges].sort(\r\n    (a, b) => (a.sourceIndex ?? Number.MAX_SAFE_INTEGER) - (b.sourceIndex ?? Number.MAX_SAFE_INTEGER),\r\n  );\r\n  for (const e of sorted) {\r\n    const s = label.get(e.source);\r\n    const t = label.get(e.target);\r\n    if (!s || !t) {\r\n      warnings.push({ message: `略過懸空連線 ${e.id}`, elementId: e.id });\r\n      continue;\r\n    }\r\n    const value = e.data?.kind === 'sankey' ? e.data.value : 1;\r\n    lines.push(`${csvField(s)},${csvField(t)},${value}`);\r\n  }\r\n  // 孤立節點在 sankey 沒有語法可表達(每一行都是一條連線)—— 講出來,不要默默吃掉。\r\n  const inEdge = new Set(scene.edges.flatMap((e) => [e.source, e.target]));\r\n  for (const n of scene.nodes) {\r\n    if (!inEdge.has(n.id)) {\r\n      warnings.push({ message: `「${n.label || n.id}」沒有任何連線,sankey 無法表達孤立節點`, elementId: n.id });\r\n    }\r\n  }\r\n  // mermaid 11 的 sankey lexer 只吃 ASCII 名稱 —— 中文加不加引號都是 parse error\r\n  // (`Expecting 'DQUOTE', got 'ESCAPED_TEXT'`),而且沒有別名語法可以擺放顯示文字。\r\n  // 我們照使用者打的原樣輸出(改寫成 n1/n2 只會讓圖變得沒有意義),但要明講它渲染不出來。\r\n  for (const n of scene.nodes) {\r\n    const name = n.label || n.id;\r\n    if (!/^[\\x20-\\x7E]*$/.test(name)) {\r\n      warnings.push({\r\n        message: `mermaid 的 sankey 目前只接受 ASCII 名稱,「${name}」會讓這張圖渲染失敗`,\r\n        elementId: n.id,\r\n      });\r\n    }\r\n  }\r\n  return { text: lines.join('\\n') + '\\n', warnings };\r\n}\r\n","// sankey-beta adapter(流量圖:節點 + 帶流量的連線)。\r\n\r\nimport { registerAdapter } from '../registry';\r\nimport type { DiagramAdapter } from '../types';\r\nimport type { EditorScene } from '../../scene/types';\r\nimport type { LayoutEngine } from '../../layout/types';\r\nimport type { MermaidLike, MermaidSource } from '../../../../types';\r\nimport { sankeyToScene, sceneToSankey } from '../../round-trip/sankey';\r\n\r\nexport const sankeyAdapter: DiagramAdapter = {\r\n  capabilities: {\r\n    type: 'sankey',\r\n    shapes: ['sankeyNode'],\r\n    arrowHeads: ['none'],\r\n    lineKinds: ['solid'],\r\n    freeform: true,\r\n    defaults: { nodeShape: 'sankeyNode', arrowEnd: 'none' },\r\n  },\r\n  keywords: ['sankey-beta', 'sankey'],\r\n\r\n  parse(text: string, _mermaid: MermaidLike) {\r\n    return Promise.resolve(sankeyToScene(text));\r\n  },\r\n\r\n  serialize(scene: EditorScene) {\r\n    return sceneToSankey(scene);\r\n  },\r\n\r\n  async layout(scene: EditorScene, _engine: LayoutEngine, _mermaid?: MermaidSource): Promise<EditorScene> {\r\n    // sankey 的排版在 parse 時就依連線分層算好了;mermaid 自己的渲染器不吐可讀的節點座標,\r\n    // 交給它只會把整張圖疊回原點。這裡不動位置(使用者拖到哪就是哪)。\r\n    return scene;\r\n  },\r\n};\r\n\r\n/** 顯式註冊(非 module side-effect)。 */\r\nexport function registerSankeyAdapter(): void {\r\n  registerAdapter(sankeyAdapter);\r\n}\r\n","// user journey 的雙向 round-trip(純文字)。\r\n//\r\n// 語法:\r\n//   journey\r\n//       title 我的一天\r\n//       section 上班\r\n//         泡茶: 5: 我\r\n//         上樓: 3: 我, 貓\r\n//\r\n// 版面沿用看板那套直向泳道:section 是欄,任務是卡片 —— 把任務拖到別的 section 就是改它的階段,\r\n// 上下拖曳就是改順序。心情分數(1..5)顯示在卡片上,由右鍵切換。\r\n\r\nimport type { ParseResult, ParseWarning } from '../../adapters/types';\r\nimport type { DataLossWarning, SerializeResult } from '../../adapters/types';\r\nimport type { EditorScene, SceneContainer, SceneNode } from '../../scene/types';\r\nimport { CARD, bucketByLane, laneCardX, layoutLanes, sortedLanes } from '../../layout/lanes';\r\n\r\nconst INDENT = '    ';\r\n\r\n/** 任務行:`名稱: 分數: 角色1, 角色2`(分數與角色都可省略)。 */\r\nconst TASK_RE = /^(.+?)\\s*:\\s*(\\d+)?\\s*(?::\\s*(.*))?$/;\r\n\r\nexport function journeyToScene(text: string): ParseResult {\r\n  const warnings: ParseWarning[] = [];\r\n  const comments: string[] = [];\r\n  const containers: SceneContainer[] = [];\r\n  const nodes: SceneNode[] = [];\r\n  let title: string | undefined;\r\n  let seenHeader = false;\r\n  let laneIdx = 0;\r\n  let taskIdx = 0;\r\n\r\n  const laneFor = (name: string): SceneContainer => {\r\n    const c: SceneContainer = {\r\n      id: `s${laneIdx}`,\r\n      label: name,\r\n      x: 0,\r\n      y: 0,\r\n      w: 0,\r\n      h: 0,\r\n      parentId: null,\r\n      childNodeIds: [],\r\n      sourceIndex: laneIdx++,\r\n    };\r\n    containers.push(c);\r\n    return c;\r\n  };\r\n\r\n  for (const raw of text.split('\\n')) {\r\n    const line = raw.trim();\r\n    if (!line) continue;\r\n    if (line.startsWith('%%')) {\r\n      comments.push(line);\r\n      continue;\r\n    }\r\n    if (!seenHeader && /^journey$/i.test(line)) {\r\n      seenHeader = true;\r\n      continue;\r\n    }\r\n    const t = /^title\\s+(.*)$/i.exec(line);\r\n    if (t) {\r\n      title = t[1].trim();\r\n      continue;\r\n    }\r\n    const s = /^section\\s+(.*)$/i.exec(line);\r\n    if (s) {\r\n      laneFor(s[1].trim());\r\n      continue;\r\n    }\r\n    const m = TASK_RE.exec(line);\r\n    if (!m) {\r\n      warnings.push({ message: `略過看不懂的一行:${line}` });\r\n      continue;\r\n    }\r\n    // 任務出現在任何 section 之前 → 補一個無名 section(mermaid 也接受)。\r\n    if (containers.length === 0) laneFor('');\r\n    const score = m[2] ? Math.max(1, Math.min(5, Number(m[2]))) : 3;\r\n    const actors = (m[3] ?? '')\r\n      .split(',')\r\n      .map((a) => a.trim())\r\n      .filter(Boolean);\r\n    nodes.push({\r\n      id: `t${taskIdx}`,\r\n      shape: 'journeyTask',\r\n      label: m[1].trim(),\r\n      x: laneCardX(containers.length - 1),\r\n      y: taskIdx,\r\n      w: CARD.w,\r\n      h: CARD.minH + (actors.length ? 16 : 0),\r\n      parentId: containers[containers.length - 1].id,\r\n      data: { kind: 'journey', score, actors },\r\n      sourceIndex: taskIdx++,\r\n    });\r\n  }\r\n\r\n  if (!seenHeader) warnings.push({ message: '找不到 journey 標頭,已以空圖處理。' });\r\n\r\n  const scene = layoutLanes({\r\n    version: 1,\r\n    diagramType: 'journey',\r\n    meta: { type: 'journey', title },\r\n    nodes,\r\n    edges: [],\r\n    containers,\r\n    raw: { comments, fullSource: seenHeader ? undefined : text },\r\n    layoutOwner: 'user',\r\n  });\r\n  return { scene, warnings };\r\n}\r\n\r\nexport function sceneToJourney(scene: EditorScene): SerializeResult {\r\n  if (scene.containers.length === 0 && scene.raw?.fullSource) {\r\n    return { text: scene.raw.fullSource, warnings: [] };\r\n  }\r\n  const warnings: DataLossWarning[] = [];\r\n  const meta = scene.meta.type === 'journey' ? scene.meta : { title: undefined };\r\n  const lines: string[] = [];\r\n  for (const c of scene.raw?.comments ?? []) {\r\n    if (c.trim().startsWith('%%{')) lines.push(c.trim());\r\n  }\r\n  lines.push('journey');\r\n  if (meta.title) lines.push(`${INDENT}title ${meta.title}`);\r\n  for (const c of scene.raw?.comments ?? []) {\r\n    const t = c.trim();\r\n    if (t.startsWith('%%') && !t.startsWith('%%{')) lines.push(INDENT + t);\r\n  }\r\n\r\n  const lanes = sortedLanes(scene);\r\n  const buckets = bucketByLane(scene, lanes);\r\n  lanes.forEach((lane, i) => {\r\n    lines.push(`${INDENT}section ${lane.label}`);\r\n    for (const task of buckets[i]) {\r\n      const d = task.data?.kind === 'journey' ? task.data : undefined;\r\n      // 名稱裡的冒號會和 `名稱: 分數: 角色` 的分隔衝突。\r\n      const name = (task.label || task.id).replace(/:/g, ' ');\r\n      const actors = d?.actors?.length ? `: ${d.actors.join(', ')}` : '';\r\n      lines.push(`${INDENT}${INDENT}${name}: ${d?.score ?? 3}${actors}`);\r\n    }\r\n  });\r\n  if (lanes.length === 0 && scene.nodes.length > 0) {\r\n    warnings.push({ message: '旅程圖沒有任何 section,任務無處可放。' });\r\n  }\r\n  return { text: lines.join('\\n') + '\\n', warnings };\r\n}\r\n","// user journey adapter(把任務拖到別的 section = 改它的階段)。\r\n\r\nimport { registerAdapter } from '../registry';\r\nimport type { DiagramAdapter } from '../types';\r\nimport type { EditorScene } from '../../scene/types';\r\nimport type { LayoutEngine } from '../../layout/types';\r\nimport type { MermaidLike, MermaidSource } from '../../../../types';\r\nimport { journeyToScene, sceneToJourney } from '../../round-trip/journey';\r\nimport { layoutLanes } from '../../layout/lanes';\r\n\r\nexport const journeyAdapter: DiagramAdapter = {\r\n  capabilities: {\r\n    type: 'journey',\r\n    shapes: ['journeyTask'],\r\n    arrowHeads: ['none'],\r\n    lineKinds: ['solid'],\r\n    supportsEdges: false,\r\n    freeform: true,\r\n    defaults: { nodeShape: 'journeyTask', arrowEnd: 'none' },\r\n  },\r\n  keywords: ['journey'],\r\n\r\n  parse(text: string, _mermaid: MermaidLike) {\r\n    return Promise.resolve(journeyToScene(text));\r\n  },\r\n\r\n  serialize(scene: EditorScene) {\r\n    return sceneToJourney(scene);\r\n  },\r\n\r\n  async layout(scene: EditorScene, _engine: LayoutEngine, _mermaid?: MermaidSource): Promise<EditorScene> {\r\n    return layoutLanes(scene);\r\n  },\r\n};\r\n\r\n/** 顯式註冊(非 module side-effect)。 */\r\nexport function registerJourneyAdapter(): void {\r\n  registerAdapter(journeyAdapter);\r\n}\r\n","// gantt 文字 → 場景。\r\n//\r\n// 走 mermaid 的 DB:它已經把每個任務的 section / id / 旗標 / 前置任務解好了,連 `raw` 都留著\r\n// (原本寫的是 `after a1` 還是 `2026-01-01`、是 `7d` 還是結束日期)。自己重解那串逗號分隔的\r\n// 參數很容易解錯 —— mermaid 的規則會依 token 數量改變意義。\r\n//\r\n// 只要遇到不支援的東西(非 YYYY-MM-DD 的 dateFormat、解不出的日期),就整份原文回吐:\r\n// 半懂不懂地改寫使用者的甘特圖,比不能編輯糟糕得多。\r\n\r\nimport type { ParseResult, ParseWarning } from '../../adapters/types';\r\nimport type { EditorScene, SceneContainer, SceneNode } from '../../scene/types';\r\nimport type { MermaidLike } from '../../../../types';\r\nimport {\r\n  BAR_H,\r\n  DAY_W,\r\n  ORIGIN,\r\n  ROW_H,\r\n  SUPPORTED_DATE_FORMAT,\r\n  dayToX,\r\n  daysToWidth,\r\n  parseDay,\r\n  rowY,\r\n} from './model';\r\n\r\ninterface MermaidApiLike {\r\n  mermaidAPI?: { getDiagramFromText?: (t: string) => Promise<{ db?: unknown }> | { db?: unknown } };\r\n  getDiagramFromText?: (t: string) => Promise<{ db?: unknown }> | { db?: unknown };\r\n}\r\n\r\ninterface GanttTaskLike {\r\n  section?: string;\r\n  task?: string;\r\n  id?: string;\r\n  order?: number;\r\n  prevTaskId?: string;\r\n  done?: boolean;\r\n  active?: boolean;\r\n  crit?: boolean;\r\n  milestone?: boolean;\r\n  startTime?: Date | string;\r\n  endTime?: Date | string;\r\n  raw?: { startTime?: { startData?: string }; endTime?: { data?: string } };\r\n}\r\ninterface GanttDbLike {\r\n  getTasks?: () => GanttTaskLike[];\r\n  getSections?: () => string[];\r\n  getDateFormat?: () => string;\r\n  getAxisFormat?: () => string;\r\n  getDiagramTitle?: () => string;\r\n}\r\n\r\n/** DB 沒建模的設定行(excludes / todayMarker / tickInterval / weekday …)逐字保留。 */\r\nconst PASSTHROUGH_RE = /^(excludes|includes|todayMarker|tickInterval|weekday|axisFormat|displayMode|topAxis)\\b/i;\r\n\r\nfunction prescan(src: string): { comments: string[]; settings: string[] } {\r\n  const comments: string[] = [];\r\n  const settings: string[] = [];\r\n  for (const raw of src.split('\\n')) {\r\n    const line = raw.trim();\r\n    if (!line) continue;\r\n    if (line.startsWith('%%')) comments.push(line);\r\n    else if (PASSTHROUGH_RE.test(line)) settings.push(line);\r\n  }\r\n  return { comments, settings };\r\n}\r\n\r\nasync function getGanttDb(text: string, mermaid: MermaidLike): Promise<GanttDbLike | undefined> {\r\n  const api = mermaid as unknown as MermaidApiLike;\r\n  const fn = api.mermaidAPI?.getDiagramFromText ?? api.getDiagramFromText;\r\n  if (typeof fn !== 'function') return undefined;\r\n  try {\r\n    mermaid.initialize?.({ startOnLoad: false });\r\n  } catch {\r\n    /* ignore */\r\n  }\r\n  const diagram = await fn.call(api.mermaidAPI ?? api, text);\r\n  const db = diagram?.db as GanttDbLike | undefined;\r\n  if (!db || typeof db.getTasks !== 'function') return undefined;\r\n  return db;\r\n}\r\n\r\nconst asMs = (v: Date | string | undefined): number | null => {\r\n  if (!v) return null;\r\n  const t = v instanceof Date ? v.getTime() : Date.parse(v);\r\n  return Number.isFinite(t) ? t : null;\r\n};\r\n\r\n/** 原樣回吐用的降級場景(不接管、也絕不覆寫)。 */\r\nfunction passthrough(text: string, comments: string[], warnings: ParseWarning[]): ParseResult {\r\n  return {\r\n    scene: {\r\n      version: 1,\r\n      diagramType: 'gantt',\r\n      meta: { type: 'gantt', gantt: { settings: [] } },\r\n      nodes: [],\r\n      edges: [],\r\n      containers: [],\r\n      raw: { comments, fullSource: text },\r\n      layoutOwner: 'user',\r\n    },\r\n    warnings,\r\n  };\r\n}\r\n\r\nexport async function ganttDbToScene(text: string, mermaid: MermaidLike): Promise<ParseResult> {\r\n  const warnings: ParseWarning[] = [];\r\n  const pre = prescan(text);\r\n  let db: GanttDbLike | undefined;\r\n  try {\r\n    db = await getGanttDb(text, mermaid);\r\n  } catch (err) {\r\n    warnings.push({ message: `mermaid 解析失敗:${(err as Error).message}` });\r\n  }\r\n  if (!db) {\r\n    warnings.push({ message: 'mermaid 解析 API 不可用。' });\r\n    return passthrough(text, pre.comments, warnings);\r\n  }\r\n\r\n  const dateFormat = (db.getDateFormat?.() ?? '').trim() || SUPPORTED_DATE_FORMAT;\r\n  if (dateFormat !== SUPPORTED_DATE_FORMAT) {\r\n    warnings.push({\r\n      message: `目前只支援 dateFormat ${SUPPORTED_DATE_FORMAT}(這張圖是 ${dateFormat}),已改為唯讀。`,\r\n    });\r\n    return passthrough(text, pre.comments, warnings);\r\n  }\r\n\r\n  const tasks = [...(db.getTasks?.() ?? [])].sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\r\n  if (tasks.length === 0) return passthrough(text, pre.comments, warnings);\r\n\r\n  // 每個任務的實際起訖(mermaid 已把 `after` 解好),用來定位長條。\r\n  const spans = tasks.map((t) => ({ start: asMs(t.startTime), end: asMs(t.endTime) }));\r\n  if (spans.some((s) => s.start === null || s.end === null)) {\r\n    warnings.push({ message: '有任務的日期解不出來,已改為唯讀以免改壞原檔。' });\r\n    return passthrough(text, pre.comments, warnings);\r\n  }\r\n  const epoch = Math.min(...spans.map((s) => s.start as number));\r\n\r\n  const sections: string[] = [];\r\n  for (const t of tasks) {\r\n    const s = t.section ?? '';\r\n    if (!sections.includes(s)) sections.push(s);\r\n  }\r\n\r\n  const nodes: SceneNode[] = [];\r\n  const containers: SceneContainer[] = [];\r\n  // 每個任務一列;section 依序占用連續的列(垂直位置因此同時決定了「屬於哪個 section」)。\r\n  let row = 0;\r\n  sections.forEach((sec, si) => {\r\n    const first = row;\r\n    tasks.forEach((t, i) => {\r\n      if ((t.section ?? '') !== sec) return;\r\n      const start = spans[i].start as number;\r\n      const end = spans[i].end as number;\r\n      const days = Math.max(0, (end - start) / 86400000);\r\n      const x = dayToX({ epoch }, start);\r\n      nodes.push({\r\n        id: t.id ?? `t${i}`,\r\n        shape: 'ganttBar',\r\n        label: (t.task ?? '').trim(),\r\n        x,\r\n        y: rowY(row) + (ROW_H - BAR_H) / 2,\r\n        w: daysToWidth(days || (t.milestone ? 0 : 1)),\r\n        h: BAR_H,\r\n        parentId: `sec${si}`,\r\n        data: {\r\n          kind: 'gantt',\r\n          flags: [t.done && 'done', t.active && 'active', t.crit && 'crit', t.milestone && 'milestone'].filter(\r\n            Boolean,\r\n          ) as string[],\r\n          startRaw: t.raw?.startTime?.startData ?? '',\r\n          endRaw: t.raw?.endTime?.data ?? '',\r\n          afterId: t.prevTaskId,\r\n        },\r\n        sourceIndex: t.order ?? i,\r\n        pinned: true,\r\n      });\r\n      row += 1;\r\n    });\r\n    containers.push({\r\n      id: `sec${si}`,\r\n      label: sec,\r\n      x: ORIGIN.x - 60,\r\n      y: rowY(first) - 4,\r\n      w: 60 + Math.max(1, row - first) * 0 + DAY_W * 30,\r\n      h: Math.max(1, row - first) * ROW_H,\r\n      parentId: null,\r\n      childNodeIds: [],\r\n      sourceIndex: si,\r\n    });\r\n  });\r\n\r\n  const scene: EditorScene = {\r\n    version: 1,\r\n    diagramType: 'gantt',\r\n    meta: {\r\n      type: 'gantt',\r\n      gantt: {\r\n        title: db.getDiagramTitle?.() || undefined,\r\n        dateFormat,\r\n        epoch,\r\n        settings: pre.settings,\r\n      },\r\n    },\r\n    nodes,\r\n    edges: [],\r\n    containers,\r\n    raw: { comments: pre.comments },\r\n    layoutOwner: 'user',\r\n  };\r\n  return { scene, warnings };\r\n}\r\n","// 場景 → gantt 文字。長條的 x 換算回開始日期、寬度換算回工期,y 決定它屬於哪個 section。\r\n\r\nimport type { DataLossWarning, SerializeResult } from '../../adapters/types';\r\nimport type { EditorScene, SceneNode } from '../../scene/types';\r\nimport { addDays, formatDay, formatDuration, parseDay, widthToDays, xToDay, yToRow } from './model';\r\n\r\nconst INDENT = '    ';\r\n\r\nfunction bySourceIndex(a: SceneNode, b: SceneNode): number {\r\n  return (a.sourceIndex ?? Number.MAX_SAFE_INTEGER) - (b.sourceIndex ?? Number.MAX_SAFE_INTEGER);\r\n}\r\n\r\nexport function sceneToGantt(scene: EditorScene): SerializeResult {\r\n  // 不接管的圖(不支援的 dateFormat / 解不出的日期)原樣回吐。\r\n  if (scene.nodes.length === 0 && scene.raw?.fullSource) {\r\n    return { text: scene.raw.fullSource, warnings: [] };\r\n  }\r\n  const warnings: DataLossWarning[] = [];\r\n  const meta = scene.meta.type === 'gantt' ? scene.meta.gantt : { settings: [] as string[] };\r\n  const epoch = meta.epoch ?? 0;\r\n  const lines: string[] = [];\r\n\r\n  for (const c of scene.raw?.comments ?? []) {\r\n    if (c.trim().startsWith('%%{')) lines.push(c.trim());\r\n  }\r\n  lines.push('gantt');\r\n  if (meta.title) lines.push(`${INDENT}title ${meta.title}`);\r\n  if (meta.dateFormat) lines.push(`${INDENT}dateFormat ${meta.dateFormat}`);\r\n  for (const s of meta.settings ?? []) lines.push(INDENT + s);\r\n  for (const c of scene.raw?.comments ?? []) {\r\n    const t = c.trim();\r\n    if (t.startsWith('%%') && !t.startsWith('%%{')) lines.push(INDENT + t);\r\n  }\r\n\r\n  // 垂直位置決定 section:與看板同一套「幾何即真相」,把長條拖到別的 section 帶就是換 section。\r\n  const bands = [...scene.containers].sort((a, b) => (a.sourceIndex ?? 0) - (b.sourceIndex ?? 0));\r\n  const rowOfBand = new Map<string, { first: number; last: number }>();\r\n  bands.forEach((b) => {\r\n    rowOfBand.set(b.id, { first: yToRow(b.y + 4), last: yToRow(b.y + b.h) - 1 });\r\n  });\r\n  const sectionFor = (n: SceneNode): string => {\r\n    const r = yToRow(n.y);\r\n    for (const b of bands) {\r\n      const range = rowOfBand.get(b.id);\r\n      if (range && r >= range.first && r <= range.last) return b.id;\r\n    }\r\n    // 拖到所有帶之外 → 歸最近的一帶(不要憑空生出無名 section)。\r\n    return bands.length ? (bands[Math.min(bands.length - 1, Math.max(0, r < 0 ? 0 : bands.length - 1))].id) : '';\r\n  };\r\n\r\n  const start = new Map<string, number>();\r\n  for (const n of scene.nodes) start.set(n.id, xToDay({ epoch }, n.x));\r\n\r\n  const emitTask = (n: SceneNode): string => {\r\n    const d = n.data?.kind === 'gantt' ? n.data : undefined;\r\n    const s = start.get(n.id) as number;\r\n    const days = widthToDays(n.w);\r\n    const parts: string[] = [...(d?.flags ?? [])];\r\n    if (n.id) parts.push(n.id);\r\n\r\n    // 開始:原本寫 `after X` 而且拖完仍然接在 X 後面 → 保留相依關係;否則寫明確日期。\r\n    const afterId = d?.afterId;\r\n    const keepAfter =\r\n      afterId &&\r\n      d?.startRaw?.startsWith('after') &&\r\n      scene.nodes.some((p) => p.id === afterId && Math.abs(p.x + p.w - n.x) < 1);\r\n    parts.push(keepAfter ? (d?.startRaw as string) : formatDay(s));\r\n\r\n    // 結束:原本寫工期就還工期(單位照舊)、原本寫日期就還日期。\r\n    const endRaw = d?.endRaw ?? '';\r\n    const endIsDate = parseDay(endRaw) !== null;\r\n    parts.push(endIsDate ? formatDay(addDays(s, days)) : formatDuration(days, endRaw || 'd'));\r\n    // 任務名稱裡有冒號會和 `名稱 :參數` 的分隔衝突。\r\n    return `${(n.label || n.id).replace(/:/g, ' ')} :${parts.join(', ')}`;\r\n  };\r\n\r\n  const byBand = new Map<string, SceneNode[]>();\r\n  for (const n of [...scene.nodes].sort(bySourceIndex)) {\r\n    const b = sectionFor(n);\r\n    byBand.set(b, [...(byBand.get(b) ?? []), n]);\r\n  }\r\n  for (const band of bands) {\r\n    const list = (byBand.get(band.id) ?? []).sort((a, b) => a.y - b.y || bySourceIndex(a, b));\r\n    if (band.label) lines.push(`${INDENT}section ${band.label}`);\r\n    for (const n of list) lines.push(`${INDENT}${INDENT}${emitTask(n)}`);\r\n  }\r\n  if (bands.length === 0 && scene.nodes.length > 0) {\r\n    warnings.push({ message: '甘特圖沒有任何 section,任務無處可放。' });\r\n  }\r\n\r\n  return { text: lines.join('\\n') + '\\n', warnings };\r\n}\r\n","// gantt adapter(拖長條 = 改日期;拉右緣 = 改工期;上下拖 = 換 section)。\r\n\r\nimport { registerAdapter } from '../registry';\r\nimport type { DiagramAdapter } from '../types';\r\nimport type { EditorScene } from '../../scene/types';\r\nimport type { LayoutEngine } from '../../layout/types';\r\nimport type { MermaidLike, MermaidSource } from '../../../../types';\r\nimport { ganttDbToScene } from '../../round-trip/gantt/parse';\r\nimport { sceneToGantt } from '../../round-trip/gantt/serialize';\r\n\r\nexport const ganttAdapter: DiagramAdapter = {\r\n  capabilities: {\r\n    type: 'gantt',\r\n    shapes: ['ganttBar'],\r\n    arrowHeads: ['none'],\r\n    lineKinds: ['solid'],\r\n    supportsEdges: false,\r\n    freeform: true,\r\n    defaults: { nodeShape: 'ganttBar', arrowEnd: 'none' },\r\n  },\r\n  keywords: ['gantt'],\r\n\r\n  parse(text: string, mermaid: MermaidLike) {\r\n    return ganttDbToScene(text, mermaid);\r\n  },\r\n\r\n  serialize(scene: EditorScene) {\r\n    return sceneToGantt(scene);\r\n  },\r\n\r\n  async layout(scene: EditorScene, _engine: LayoutEngine, _mermaid?: MermaidSource): Promise<EditorScene> {\r\n    // 長條的位置就是日期,自動排版等於竄改行程 —— 這張圖永遠不重排。\r\n    return scene;\r\n  },\r\n};\r\n\r\n/** 顯式註冊(非 module side-effect)。 */\r\nexport function registerGanttAdapter(): void {\r\n  registerAdapter(ganttAdapter);\r\n}\r\n","// pie adapter(繞著圓拖 = 排順序;雙擊 = 改「標籤: 數值」)。\r\n\r\nimport { registerAdapter } from '../registry';\r\nimport type { DiagramAdapter } from '../types';\r\nimport type { EditorScene } from '../../scene/types';\r\nimport type { LayoutEngine } from '../../layout/types';\r\nimport type { MermaidLike, MermaidSource } from '../../../../types';\r\nimport { layoutPie, pieToScene, sceneToPie } from '../../round-trip/pie';\r\n\r\nexport const pieAdapter: DiagramAdapter = {\r\n  capabilities: {\r\n    type: 'pie',\r\n    shapes: ['pieSlice'],\r\n    arrowHeads: ['none'],\r\n    lineKinds: ['solid'],\r\n    supportsEdges: false,\r\n    freeform: true,\r\n    defaults: { nodeShape: 'pieSlice', arrowEnd: 'none' },\r\n  },\r\n  keywords: ['pie'],\r\n\r\n  parse(text: string, _mermaid: MermaidLike) {\r\n    return Promise.resolve(pieToScene(text));\r\n  },\r\n\r\n  serialize(scene: EditorScene) {\r\n    return sceneToPie(scene);\r\n  },\r\n\r\n  async layout(scene: EditorScene, _engine: LayoutEngine, _mermaid?: MermaidSource): Promise<EditorScene> {\r\n    // 「整理」= 依目前角度定序後,把把手擺回各扇形質心。\r\n    return layoutPie(scene);\r\n  },\r\n};\r\n\r\n/** 顯式註冊(非 module side-effect)。 */\r\nexport function registerPieAdapter(): void {\r\n  registerAdapter(pieAdapter);\r\n}\r\n","// xychart-beta adapter(把資料點往上拖 = 把數字調大)。\r\n\r\nimport { registerAdapter } from '../registry';\r\nimport type { DiagramAdapter } from '../types';\r\nimport type { EditorScene } from '../../scene/types';\r\nimport type { LayoutEngine } from '../../layout/types';\r\nimport type { MermaidLike, MermaidSource } from '../../../../types';\r\nimport { layoutXychart, sceneToXychart, xychartToScene } from '../../round-trip/xychart';\r\n\r\nexport const xychartAdapter: DiagramAdapter = {\r\n  capabilities: {\r\n    type: 'xychart',\r\n    shapes: ['xyPoint'],\r\n    arrowHeads: ['none'],\r\n    lineKinds: ['solid'],\r\n    supportsEdges: false,\r\n    freeform: true,\r\n    defaults: { nodeShape: 'xyPoint', arrowEnd: 'none' },\r\n  },\r\n  keywords: ['xychart-beta', 'xychart'],\r\n\r\n  parse(text: string, _mermaid: MermaidLike) {\r\n    return Promise.resolve(xychartToScene(text));\r\n  },\r\n\r\n  serialize(scene: EditorScene) {\r\n    return sceneToXychart(scene);\r\n  },\r\n\r\n  async layout(scene: EditorScene, _engine: LayoutEngine, _mermaid?: MermaidSource): Promise<EditorScene> {\r\n    return layoutXychart(scene);\r\n  },\r\n};\r\n\r\n/** 顯式註冊(非 module side-effect)。 */\r\nexport function registerXychartAdapter(): void {\r\n  registerAdapter(xychartAdapter);\r\n}\r\n","// architecture-beta 的雙向 round-trip(純文字)。\r\n//\r\n// 為什麼自己解析:architecture 走的是 langium parser,它的 DB 上一個 getXxx() 都沒有\r\n// (inspectDb 對它印出「這個 DB 沒有任何 getXxx() 可讀」),所以資料根本要不回來。\r\n// 好在語法只有四種行,逐行解析既精確又可逆。\r\n//\r\n//   group  <id>(<icon>)[<標題>] [in <parent>]\r\n//   service <id>(<icon>)[<標題>] [in <group>]\r\n//   junction <id> [in <group>]\r\n//   <id>:<邊> <箭頭> <邊>:<id>      邊 ∈ T/B/L/R,箭頭 ∈ -- / --> / <-- / <-->\r\n\r\nimport type { ParseResult, ParseWarning } from '../../adapters/types';\r\nimport type { DataLossWarning, SerializeResult } from '../../adapters/types';\r\nimport type { EditorScene, SceneContainer, SceneEdge, SceneNode } from '../../scene/types';\r\n\r\nconst NODE_W = 76;\r\nconst NODE_H = 76;\r\n\r\nconst DECL_RE = /^(group|service|junction)\\s+([A-Za-z0-9_-]+)\\s*(?:\\(([^)]*)\\))?\\s*(?:\\[([^\\]]*)\\])?\\s*(?:in\\s+([A-Za-z0-9_-]+))?\\s*$/i;\r\nconst EDGE_RE = /^([A-Za-z0-9_-]+):([TBLR])\\s*(<-->|-->|<--|--)\\s*([TBLR]):([A-Za-z0-9_-]+)\\s*$/;\r\n\r\nexport function architectureToScene(text: string): ParseResult {\r\n  const warnings: ParseWarning[] = [];\r\n  const comments: string[] = [];\r\n  const nodes: SceneNode[] = [];\r\n  const containers: SceneContainer[] = [];\r\n  const edges: SceneEdge[] = [];\r\n  let seenHeader = false;\r\n  let nIdx = 0;\r\n  let cIdx = 0;\r\n  let eIdx = 0;\r\n\r\n  for (const raw of text.split('\\n')) {\r\n    const line = raw.trim();\r\n    if (!line) continue;\r\n    if (line.startsWith('%%')) {\r\n      comments.push(line);\r\n      continue;\r\n    }\r\n    if (!seenHeader && /^architecture(-beta)?$/i.test(line)) {\r\n      seenHeader = true;\r\n      continue;\r\n    }\r\n    const d = DECL_RE.exec(line);\r\n    if (d) {\r\n      const [, kindRaw, id, icon, title, parent] = d;\r\n      const kind = kindRaw.toLowerCase();\r\n      if (kind === 'group') {\r\n        containers.push({\r\n          id,\r\n          label: title ?? id,\r\n          x: 0,\r\n          y: 0,\r\n          w: 0,\r\n          h: 0,\r\n          parentId: parent ?? null,\r\n          childNodeIds: [],\r\n          c4Type: icon, // 圖示存在既有欄位(容器沒有 data 欄位可放)\r\n          sourceIndex: cIdx++,\r\n        });\r\n      } else {\r\n        nodes.push({\r\n          id,\r\n          shape: 'archNode',\r\n          label: title ?? id,\r\n          x: 0,\r\n          y: 0,\r\n          w: NODE_W,\r\n          h: NODE_H,\r\n          parentId: parent ?? null,\r\n          data: { kind: 'architecture', icon: icon || undefined, junction: kind === 'junction' },\r\n          sourceIndex: nIdx++,\r\n        });\r\n      }\r\n      continue;\r\n    }\r\n    const e = EDGE_RE.exec(line);\r\n    if (e) {\r\n      const [, from, fromSide, arrow, toSide, to] = e;\r\n      edges.push({\r\n        id: `e${eIdx}`,\r\n        source: from,\r\n        target: to,\r\n        lineKind: 'solid',\r\n        arrowStart: arrow.startsWith('<') ? 'arrow' : 'none',\r\n        arrowEnd: arrow.endsWith('>') ? 'arrow' : 'none',\r\n        data: { kind: 'architecture', fromSide, toSide },\r\n        sourceIndex: eIdx++,\r\n      });\r\n      continue;\r\n    }\r\n    warnings.push({ message: `略過看不懂的一行:${line}` });\r\n  }\r\n\r\n  if (!seenHeader) warnings.push({ message: '找不到 architecture-beta 標頭,已以空圖處理。' });\r\n\r\n  // 把節點掛進所屬 group(容器框由渲染器依子節點 bbox 算)。\r\n  const byId = new Map(containers.map((c) => [c.id, c] as const));\r\n  for (const n of nodes) {\r\n    if (n.parentId) byId.get(n.parentId)?.childNodeIds.push(n.id);\r\n  }\r\n\r\n  const scene: EditorScene = {\r\n    version: 1,\r\n    diagramType: 'architecture',\r\n    meta: { type: 'architecture' },\r\n    nodes,\r\n    edges,\r\n    containers,\r\n    raw: { comments, fullSource: seenHeader ? undefined : text },\r\n    // 座標交給排版:mermaid 的 architecture 渲染器不吐可讀節點,會落到內建的分組格狀排版。\r\n    layoutOwner: 'engine',\r\n  };\r\n  return { scene, warnings };\r\n}\r\n\r\nfunction bySourceIndex<T extends { sourceIndex?: number }>(a: T, b: T): number {\r\n  return (a.sourceIndex ?? Number.MAX_SAFE_INTEGER) - (b.sourceIndex ?? Number.MAX_SAFE_INTEGER);\r\n}\r\n\r\nexport function sceneToArchitecture(scene: EditorScene): SerializeResult {\r\n  if (scene.nodes.length === 0 && scene.containers.length === 0 && scene.raw?.fullSource) {\r\n    return { text: scene.raw.fullSource, warnings: [] };\r\n  }\r\n  const warnings: DataLossWarning[] = [];\r\n  const lines: string[] = [];\r\n  for (const c of scene.raw?.comments ?? []) {\r\n    if (c.trim().startsWith('%%{')) lines.push(c.trim());\r\n  }\r\n  lines.push('architecture-beta');\r\n  for (const c of scene.raw?.comments ?? []) {\r\n    const t = c.trim();\r\n    if (t.startsWith('%%') && !t.startsWith('%%{')) lines.push(`    ${t}`);\r\n  }\r\n\r\n  /**\r\n   * 標籤的三條規矩(都是直接問 mermaid 問出來的,見 scripts/checkSyntax.mjs):\r\n   *   [中文]     → Lexer error;必須寫成 [\"中文\"]\r\n   *   []         → Lexer error;沒有標籤就整段省略\r\n   *   [Order DB] → 可以,空白不需要引號\r\n   */\r\n  const labelPart = (label: string): string => {\r\n    const clean = label.replace(/[[\\]\"]/g, '').trim();\r\n    if (!clean) return '';\r\n    return /^[\\x20-\\x7E]+$/.test(clean) ? `[${clean}]` : `[\"${clean}\"]`;\r\n  };\r\n  const decl = (id: string, icon: string | undefined, label: string, parent?: string | null): string =>\r\n    `${id}${icon ? `(${icon})` : ''}${labelPart(label)}${parent ? ` in ${parent}` : ''}`;\r\n\r\n  for (const c of [...scene.containers].sort(bySourceIndex)) {\r\n    lines.push(`    group ${decl(c.id, c.c4Type, c.label || c.id, c.parentId)}`);\r\n  }\r\n  for (const n of [...scene.nodes].sort(bySourceIndex)) {\r\n    const d = n.data?.kind === 'architecture' ? n.data : undefined;\r\n    if (d?.junction) {\r\n      lines.push(`    junction ${n.id}${n.parentId ? ` in ${n.parentId}` : ''}`);\r\n      continue;\r\n    }\r\n    lines.push(`    service ${decl(n.id, d?.icon, n.label || n.id, n.parentId)}`);\r\n  }\r\n  const ids = new Set(scene.nodes.map((n) => n.id));\r\n  for (const e of [...scene.edges].sort(bySourceIndex)) {\r\n    if (!ids.has(e.source) || !ids.has(e.target)) {\r\n      warnings.push({ message: `略過懸空連線 ${e.id}`, elementId: e.id });\r\n      continue;\r\n    }\r\n    const d = e.data?.kind === 'architecture' ? e.data : undefined;\r\n    // 箭頭方向沿用場景的 arrowStart / arrowEnd(右鍵切換箭頭就會反映到這裡)。\r\n    const arrow =\r\n      e.arrowStart !== 'none' && e.arrowEnd !== 'none'\r\n        ? '<-->'\r\n        : e.arrowEnd !== 'none'\r\n          ? '-->'\r\n          : e.arrowStart !== 'none'\r\n            ? '<--'\r\n            : '--';\r\n    lines.push(`    ${e.source}:${d?.fromSide ?? 'R'} ${arrow} ${d?.toSide ?? 'L'}:${e.target}`);\r\n  }\r\n  return { text: lines.join('\\n') + '\\n', warnings };\r\n}\r\n","// architecture-beta adapter(服務 / 群組 / 連線)。\r\n\r\nimport { registerAdapter } from '../registry';\r\nimport type { DiagramAdapter } from '../types';\r\nimport type { EditorScene } from '../../scene/types';\r\nimport type { LayoutEngine } from '../../layout/types';\r\nimport type { MermaidLike, MermaidSource } from '../../../../types';\r\nimport { architectureToScene, sceneToArchitecture } from '../../round-trip/architecture';\r\n\r\nexport const architectureAdapter: DiagramAdapter = {\r\n  capabilities: {\r\n    type: 'architecture',\r\n    shapes: ['archNode'],\r\n    arrowHeads: ['none', 'arrow'],\r\n    lineKinds: ['solid'],\r\n    freeform: true,\r\n    defaults: { nodeShape: 'archNode', arrowEnd: 'none' },\r\n  },\r\n  keywords: ['architecture-beta', 'architecture'],\r\n\r\n  parse(text: string, _mermaid: MermaidLike) {\r\n    return Promise.resolve(architectureToScene(text));\r\n  },\r\n\r\n  serialize(scene: EditorScene) {\r\n    return sceneToArchitecture(scene);\r\n  },\r\n\r\n  async layout(scene: EditorScene, engine: LayoutEngine, mermaid?: MermaidSource): Promise<EditorScene> {\r\n    // mermaid 的 architecture 渲染器不吐可讀的節點座標,排版會落到引擎內建的分組格狀後援。\r\n    const code = sceneToArchitecture(scene).text;\r\n    return engine.layout(scene, { code, mermaid });\r\n  },\r\n};\r\n\r\n/** 顯式註冊(非 module side-effect)。 */\r\nexport function registerArchitectureAdapter(): void {\r\n  registerAdapter(architectureAdapter);\r\n}\r\n","// block-beta adapter(把積木拖到別的格子 = 重排)。\r\n\r\nimport { registerAdapter } from '../registry';\r\nimport type { DiagramAdapter } from '../types';\r\nimport type { EditorScene } from '../../scene/types';\r\nimport type { LayoutEngine } from '../../layout/types';\r\nimport type { MermaidLike, MermaidSource } from '../../../../types';\r\nimport { blockToScene, layoutBlock, sceneToBlock } from '../../round-trip/block';\r\n\r\nexport const blockAdapter: DiagramAdapter = {\r\n  capabilities: {\r\n    type: 'block',\r\n    // 積木圖的外形與流程圖同一套語法([\"方\"]/(\"圓\")/{\"菱\"}…),所以外形選單也一樣。\r\n    shapes: ['rectangle', 'rounded', 'stadium', 'circle', 'diamond', 'hexagon', 'cylinder', 'subroutine', 'odd'],\r\n    quickShapes: ['rectangle', 'rounded', 'circle', 'diamond', 'hexagon'],\r\n    arrowHeads: ['none', 'arrow'],\r\n    lineKinds: ['solid'],\r\n    freeform: true,\r\n    defaults: { nodeShape: 'rectangle', arrowEnd: 'arrow' },\r\n  },\r\n  keywords: ['block-beta', 'block'],\r\n\r\n  parse(text: string, _mermaid: MermaidLike) {\r\n    return Promise.resolve(blockToScene(text));\r\n  },\r\n\r\n  serialize(scene: EditorScene) {\r\n    return sceneToBlock(scene);\r\n  },\r\n\r\n  async layout(scene: EditorScene, _engine: LayoutEngine, _mermaid?: MermaidSource): Promise<EditorScene> {\r\n    return layoutBlock(scene);\r\n  },\r\n};\r\n\r\n/** 顯式註冊(非 module side-effect)。 */\r\nexport function registerBlockAdapter(): void {\r\n  registerAdapter(blockAdapter);\r\n}\r\n","// packet-beta adapter(拉右緣改欄位佔幾個 bit;左右拖改順序)。\r\n\r\nimport { registerAdapter } from '../registry';\r\nimport type { DiagramAdapter } from '../types';\r\nimport type { EditorScene } from '../../scene/types';\r\nimport type { LayoutEngine } from '../../layout/types';\r\nimport type { MermaidLike, MermaidSource } from '../../../../types';\r\nimport { layoutPacket, packetToScene, sceneToPacket } from '../../round-trip/packet';\r\n\r\nexport const packetAdapter: DiagramAdapter = {\r\n  capabilities: {\r\n    type: 'packet',\r\n    shapes: ['packetField'],\r\n    arrowHeads: ['none'],\r\n    lineKinds: ['solid'],\r\n    supportsEdges: false,\r\n    freeform: true,\r\n    defaults: { nodeShape: 'packetField', arrowEnd: 'none' },\r\n  },\r\n  keywords: ['packet-beta', 'packet'],\r\n\r\n  parse(text: string, _mermaid: MermaidLike) {\r\n    return Promise.resolve(packetToScene(text));\r\n  },\r\n\r\n  serialize(scene: EditorScene) {\r\n    return sceneToPacket(scene);\r\n  },\r\n\r\n  async layout(scene: EditorScene, _engine: LayoutEngine, _mermaid?: MermaidSource): Promise<EditorScene> {\r\n    return layoutPacket(scene);\r\n  },\r\n};\r\n\r\n/** 顯式註冊(非 module side-effect)。 */\r\nexport function registerPacketAdapter(): void {\r\n  registerAdapter(packetAdapter);\r\n}\r\n","// gitGraph adapter(橫拖 = 改提交順序;縱拖到別條泳道 = 換分支)。\r\n\r\nimport { registerAdapter } from '../registry';\r\nimport type { DiagramAdapter } from '../types';\r\nimport type { EditorScene } from '../../scene/types';\r\nimport type { LayoutEngine } from '../../layout/types';\r\nimport type { MermaidLike, MermaidSource } from '../../../../types';\r\nimport { gitgraphDbToScene, layoutGitgraph, sceneToGitgraph } from '../../round-trip/gitgraph';\r\n\r\nexport const gitgraphAdapter: DiagramAdapter = {\r\n  capabilities: {\r\n    type: 'gitgraph',\r\n    shapes: ['gitCommit'],\r\n    arrowHeads: ['none'],\r\n    lineKinds: ['solid'],\r\n    // 連線 = 父子關係,而父子關係是從順序推導的,不能單獨畫。\r\n    supportsEdges: false,\r\n    freeform: true,\r\n    defaults: { nodeShape: 'gitCommit', arrowEnd: 'none' },\r\n  },\r\n  keywords: ['gitGraph', 'gitgraph'],\r\n\r\n  parse(text: string, mermaid: MermaidLike) {\r\n    return gitgraphDbToScene(text, mermaid);\r\n  },\r\n\r\n  serialize(scene: EditorScene) {\r\n    return sceneToGitgraph(scene);\r\n  },\r\n\r\n  async layout(scene: EditorScene, _engine: LayoutEngine, _mermaid?: MermaidSource): Promise<EditorScene> {\r\n    return layoutGitgraph(scene);\r\n  },\r\n};\r\n\r\n/** 顯式註冊(非 module side-effect)。 */\r\nexport function registerGitgraphAdapter(): void {\r\n  registerAdapter(gitgraphAdapter);\r\n}\r\n","// 外形按鈕的迷你圖示(inline SVG 標記)。\r\n//\r\n// 為什麼不用字形:工具列原本靠 ⬭ ⬡ ⛁ 🏷 這類字元當縮圖,但這些字元在多數系統 UI 字型裡沒有字身,\r\n// 實際畫面上「圓角 / 橢圓 / 六角」三顆按鈕全都退化成同一個圓圈,類別 🏷 更是縮成一個小點。\r\n// 改成自己畫的 SVG:每個外形長什麼樣一眼可辨,而且跨平台一致。\r\n//\r\n// 回傳的是字串而不是元素,好讓 React 工具列(dangerouslySetInnerHTML)與 VS Code webview\r\n// 工具列(innerHTML)共用同一份 —— 內容全是常數,沒有任何使用者輸入。\r\n\r\nimport type { NodeShape } from '../scene/types';\r\n\r\nconst W = 24;\r\nconst H = 16;\r\n\r\n/** 共用描邊屬性:顏色跟著按鈕文字走,縮放時線寬不變。 */\r\nconst S = 'fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linejoin=\"round\"';\r\nconst FILL = 'fill=\"currentColor\" stroke=\"none\"';\r\n\r\nfunction body(shape: NodeShape): string {\r\n  switch (shape) {\r\n    case 'rounded':\r\n      return `<rect x=\"2\" y=\"3\" width=\"20\" height=\"10\" rx=\"4\" ${S}/>`;\r\n    case 'stadium':\r\n      return `<rect x=\"2\" y=\"3\" width=\"20\" height=\"10\" rx=\"5\" ${S}/>`;\r\n    case 'subroutine':\r\n      return `<rect x=\"2\" y=\"3\" width=\"20\" height=\"10\" ${S}/><path d=\"M6 3v10M18 3v10\" ${S}/>`;\r\n    case 'cylinder':\r\n      return `<path d=\"M3 5v6a9 2.5 0 0 0 18 0V5\" ${S}/><ellipse cx=\"12\" cy=\"5\" rx=\"9\" ry=\"2.5\" ${S}/>`;\r\n    case 'circle':\r\n      return `<circle cx=\"12\" cy=\"8\" r=\"6\" ${S}/>`;\r\n    case 'doubleCircle':\r\n      return `<circle cx=\"12\" cy=\"8\" r=\"6.4\" ${S}/><circle cx=\"12\" cy=\"8\" r=\"3.8\" ${S}/>`;\r\n    case 'diamond':\r\n      return `<path d=\"M12 2l9 6-9 6-9-6z\" ${S}/>`;\r\n    case 'hexagon':\r\n      return `<path d=\"M7 3h10l4 5-4 5H7L3 8z\" ${S}/>`;\r\n    case 'odd':\r\n      return `<path d=\"M3 3h18v10H3l3-5z\" ${S}/>`;\r\n    case 'trapezoid':\r\n      return `<path d=\"M6 3h12l4 10H2z\" ${S}/>`;\r\n    case 'trapezoidAlt':\r\n      return `<path d=\"M2 3h20l-4 10H6z\" ${S}/>`;\r\n    case 'parallelogram':\r\n      return `<path d=\"M6 3h16l-4 10H2z\" ${S}/>`;\r\n    case 'parallelogramAlt':\r\n      return `<path d=\"M2 3h16l4 10H6z\" ${S}/>`;\r\n    case 'ellipse':\r\n      return `<ellipse cx=\"12\" cy=\"8\" rx=\"10\" ry=\"5.5\" ${S}/>`;\r\n    // ── state ──\r\n    case 'state':\r\n      return `<rect x=\"2\" y=\"3\" width=\"20\" height=\"10\" rx=\"3\" ${S}/>`;\r\n    case 'stateStart':\r\n      return `<circle cx=\"12\" cy=\"8\" r=\"5\" ${FILL}/>`;\r\n    case 'stateEnd':\r\n      return `<circle cx=\"12\" cy=\"8\" r=\"6\" ${S}/><circle cx=\"12\" cy=\"8\" r=\"3.2\" ${FILL}/>`;\r\n    case 'fork':\r\n      return `<rect x=\"2\" y=\"6.5\" width=\"20\" height=\"3.5\" rx=\"1\" ${FILL}/>`;\r\n    case 'choice':\r\n      return `<path d=\"M12 2l7 6-7 6-7-6z\" ${S}/>`;\r\n    // ── class / er / sequence ──\r\n    case 'classBox':\r\n      return `<rect x=\"3\" y=\"2\" width=\"18\" height=\"12\" rx=\"1\" ${S}/><path d=\"M3 6h18\" ${S}/><path d=\"M6 9.5h9M6 11.8h6\" stroke=\"currentColor\" stroke-width=\"1.1\" stroke-linecap=\"round\" opacity=\"0.65\"/>`;\r\n    case 'entity':\r\n      return `<rect x=\"3\" y=\"2\" width=\"18\" height=\"12\" rx=\"1\" ${S}/><path d=\"M3 6h18M3 10h18\" ${S}/>`;\r\n    case 'actor':\r\n      return `<circle cx=\"12\" cy=\"4\" r=\"2.2\" ${S}/><path d=\"M12 6.5v4.5M8.5 8h7M12 11l-2.5 3M12 11l2.5 3\" ${S} stroke-linecap=\"round\"/>`;\r\n    case 'participant':\r\n      return `<rect x=\"3\" y=\"4\" width=\"18\" height=\"8\" rx=\"1\" ${S}/>`;\r\n    case 'note':\r\n      return `<path d=\"M4 2h11l5 5v9H4z\" ${S}/><path d=\"M15 2v5h5\" ${S}/>`;\r\n    // ── requirement ──\r\n    case 'requirementBox':\r\n      return `<rect x=\"3\" y=\"2\" width=\"18\" height=\"12\" rx=\"1\" ${S}/><path d=\"M3 7h18\" ${S}/><path d=\"M6 10h12\" stroke=\"currentColor\" stroke-width=\"1.1\" stroke-linecap=\"round\" opacity=\"0.65\"/>`;\r\n    case 'elementBox':\r\n      return `<rect x=\"3\" y=\"2\" width=\"18\" height=\"12\" rx=\"1\" stroke-dasharray=\"3 2\" ${S}/><path d=\"M3 7h18\" ${S}/>`;\r\n    case 'point':\r\n      return `<path d=\"M12 2v12M6 8h12\" stroke=\"currentColor\" stroke-width=\"1\" opacity=\"0.45\"/><circle cx=\"15\" cy=\"5.5\" r=\"3\" ${FILL}/>`;\r\n    // ── C4 ──\r\n    case 'c4Person':\r\n      return `<circle cx=\"12\" cy=\"4\" r=\"2.6\" ${S}/><rect x=\"4\" y=\"7.5\" width=\"16\" height=\"7\" rx=\"1.5\" ${S}/>`;\r\n    case 'c4Box':\r\n      return `<rect x=\"3\" y=\"3\" width=\"18\" height=\"10\" rx=\"1.5\" ${S}/><path d=\"M6 6.5h8\" stroke=\"currentColor\" stroke-width=\"1.1\" stroke-linecap=\"round\" opacity=\"0.6\"/>`;\r\n    case 'c4Db':\r\n      return `<path d=\"M4 5v6a8 2.2 0 0 0 16 0V5\" ${S}/><ellipse cx=\"12\" cy=\"5\" rx=\"8\" ry=\"2.2\" ${S}/>`;\r\n    case 'c4Queue':\r\n      return `<rect x=\"3\" y=\"4\" width=\"18\" height=\"8\" rx=\"4\" ${S}/><path d=\"M9 4v8M15 4v8\" stroke=\"currentColor\" stroke-width=\"1.1\" opacity=\"0.6\"/>`;\r\n    case 'sankeyNode':\r\n      return `<rect x=\"3\" y=\"2\" width=\"4\" height=\"12\" rx=\"1\" ${FILL}/><path d=\"M8 6h9\" stroke=\"currentColor\" stroke-width=\"3.4\" opacity=\"0.5\" stroke-linecap=\"round\"/><path d=\"M8 11h6\" stroke=\"currentColor\" stroke-width=\"1.8\" opacity=\"0.5\" stroke-linecap=\"round\"/><rect x=\"18\" y=\"2\" width=\"3\" height=\"12\" rx=\"1\" ${FILL}/>`;\r\n    case 'packetField':\r\n      return `<rect x=\"2\" y=\"4\" width=\"9\" height=\"8\" rx=\"1\" ${S}/><rect x=\"11\" y=\"4\" width=\"5\" height=\"8\" rx=\"1\" ${S}/><rect x=\"16\" y=\"4\" width=\"6\" height=\"8\" rx=\"1\" ${S}/>`;\r\n    case 'gitCommit':\r\n      return `<path d=\"M2 8h20\" stroke=\"currentColor\" stroke-width=\"1.6\" opacity=\"0.45\"/><circle cx=\"6\" cy=\"8\" r=\"2.6\" ${FILL}/><circle cx=\"13\" cy=\"8\" r=\"2.6\" ${FILL}/><circle cx=\"20\" cy=\"8\" r=\"2.6\" ${FILL}/>`;\r\n    case 'archNode':\r\n      return `<rect x=\"4\" y=\"2\" width=\"16\" height=\"12\" rx=\"2\" ${S}/><rect x=\"7.5\" y=\"5\" width=\"9\" height=\"6\" rx=\"1\" ${FILL}/>`;\r\n    case 'xyPoint':\r\n      return `<path d=\"M3 14V2M3 14h18\" stroke=\"currentColor\" stroke-width=\"1.2\" opacity=\"0.5\" fill=\"none\"/><path d=\"M6 11l4-4 4 3 5-6\" ${S}/>`;\r\n    case 'pieSlice':\r\n      return `<circle cx=\"12\" cy=\"8\" r=\"6\" ${S}/><path d=\"M12 8 L12 2 A6 6 0 0 1 17.2 11 Z\" ${FILL}/>`;\r\n    case 'ganttBar':\r\n      return `<rect x=\"2\" y=\"4\" width=\"11\" height=\"3.5\" rx=\"1.5\" ${FILL}/><rect x=\"7\" y=\"9\" width=\"14\" height=\"3.5\" rx=\"1.5\" ${FILL}/>`;\r\n    case 'journeyTask':\r\n    case 'kanbanCard':\r\n      return `<rect x=\"3\" y=\"3\" width=\"18\" height=\"10\" rx=\"2\" ${S}/><rect x=\"3\" y=\"3\" width=\"2.6\" height=\"10\" rx=\"1\" ${FILL}/><path d=\"M9 6.5h9M9 9.5h6\" stroke=\"currentColor\" stroke-width=\"1.1\" stroke-linecap=\"round\" opacity=\"0.6\"/>`;\r\n    case 'rectangle':\r\n    default:\r\n      return `<rect x=\"2\" y=\"3\" width=\"20\" height=\"10\" ${S}/>`;\r\n  }\r\n}\r\n\r\n/** 某個外形的迷你 SVG 圖示標記(24×16,顏色沿用 currentColor)。 */\r\nexport function shapeIconMarkup(shape: NodeShape): string {\r\n  return `<svg class=\"rsm-shape-icon\" width=\"${W}\" height=\"${H}\" viewBox=\"0 0 ${W} ${H}\" aria-hidden=\"true\" focusable=\"false\">${body(shape)}</svg>`;\r\n}\r\n"]}