import { W as EdgeAnchor, X as Point, v as SceneEdge, w as SceneNode, Y as LayoutEngine, Z as DiagramAdapter, q as MermaidLike, _ as ParseResult, f as ExportRasterOptions, d as MermaidSource, g as EditorScene, $ as SceneContainer, a0 as LineKind, a1 as ArrowHead, N as NodeShape, p as DiagramType, a2 as NodeData, a3 as ErAttribute } from './export-DPEc2GdM.cjs'; export { a4 as Command, a5 as DataLossWarning, a6 as DiagramCapabilities, i as DiagramEditorHandle, o as DiagramEditorOptions, a7 as EdgeData, a8 as EditorEvent, h as EditorLook, a9 as ElementStyle, aa as FlowDirection, ab as History, ac as LabelKind, ad as LayoutContext, M as MermaidTheme, ae as ParseWarning, s as RasterType, t as RenderDiagramOptions, u as RenderResult, af as SceneMeta, ag as ScenePatch, ah as SceneRaw, ai as SerializeResult, T as Tool, x as boostLegibility, y as colorizeDiagram, aj as commands, z as createDiagramEditor, A as detectDiagramType, B as downloadBlob, F as emptyScene, ak as firstKeyword, al as flowchartAdapter, am as getAdapter, an as listAdapters, G as loadMermaid, H as prepareSvgElement, I as prepareSvgString, J as rasterizeToBlob, ao as registerAdapter, K as registerFlowchartAdapter, O as renderDiagram, Q as sceneToFlowchart, U as serializeLiveSvg, V as svgBlob } from './export-DPEc2GdM.cjs'; import { OridModel } from './orid.cjs'; export { ORID_PALETTE, ORID_STAGES, OridStage, OridStageKey, OridStageSpec, emptyOridModel, isOridSource, orderedStages, oridItemClass, oridStageByKeyword, oridStageClass, oridStageSpec, oridToMermaid, parseOrid, serializeOrid, stageHeading, transpileOrid } from './orid.cjs'; interface Rect { x: number; y: number; w: number; h: number; } declare function nodeRect(n: SceneNode): Rect; /** * draw.io 式的 8 個固定連線錨點(相對 bbox 的分數位置:4 邊中點 + 4 角)。 * 拉線時可從來源錨點起、貼到目標錨點上,讓使用者「選擇連結位置」。 */ declare const PERIMETER_ANCHORS: ReadonlyArray; /** 固定錨點(分數)→ 場景座標。 */ declare function anchorPoint(r: Rect, a: EdgeAnchor): Point; /** 兩錨點是否為同一格(用於高亮已吸附的候選點)。 */ declare function sameAnchor(a: EdgeAnchor, b: EdgeAnchor): boolean; /** 僅 4 邊中點(不含角)。供「已選取節點」用:4 角已是縮放控制點,連線只取邊中點。 */ declare const SIDE_ANCHORS: ReadonlyArray; /** 找出 world 點在容差(世界座標)內最靠近 rect 的哪個候選錨點;皆超出則回 null(=浮動)。 */ declare function nearestAnchor(r: Rect, world: Point, tolWorld: number, candidates?: ReadonlyArray): EdgeAnchor | null; declare function rectCenter(r: Rect): Point; declare function pointInRect(p: Point, r: Rect, pad?: number): boolean; /** 兩矩形是否相交(AABB),供框選用。 */ declare function rectsIntersect(a: Rect, b: Rect): boolean; /** 矩形完全被另一矩形包住。 */ declare function rectContains(outer: Rect, inner: Rect): boolean; /** 包住一組矩形的最小外框。 */ declare function boundingBox(rects: Rect[]): Rect | null; declare function distance(a: Point, b: Point): number; /** * 從矩形中心朝 `toward` 方向射線,求與矩形邊界的交點(節點周界錨點)。 * 用於連線端點貼齊節點外框,而非穿到中心。 */ declare function perimeterAnchor(r: Rect, toward: Point): Point; /** * 形狀感知的周界錨點:diamond / circle / ellipse 用真實外形求交點(避免用 bbox 造成 * 線與圖形之間留空隙);其餘外形用矩形 bbox 近似(足夠貼合)。 */ declare function shapeAnchor(node: SceneNode, toward: Point): Point; /** 一條邊的兩端錨點(以對方中心為朝向),供繪製與 hit-test。 */ declare function edgeAnchors(edge: SceneEdge, source: SceneNode | undefined, target: SceneNode | undefined): { start: Point; end: Point; } | null; /** 點到線段距離(供邊的 hit-test;搭配粗 hit path 也可純算)。 */ declare function pointToSegment(p: Point, a: Point, b: Point): number; /** 沿折線(多段)的最短點距。 */ declare function pointToPolyline(p: Point, pts: Point[]): number; declare const geometry_PERIMETER_ANCHORS: typeof PERIMETER_ANCHORS; type geometry_Rect = Rect; declare const geometry_SIDE_ANCHORS: typeof SIDE_ANCHORS; declare const geometry_anchorPoint: typeof anchorPoint; declare const geometry_boundingBox: typeof boundingBox; declare const geometry_distance: typeof distance; declare const geometry_edgeAnchors: typeof edgeAnchors; declare const geometry_nearestAnchor: typeof nearestAnchor; declare const geometry_nodeRect: typeof nodeRect; declare const geometry_perimeterAnchor: typeof perimeterAnchor; declare const geometry_pointInRect: typeof pointInRect; declare const geometry_pointToPolyline: typeof pointToPolyline; declare const geometry_pointToSegment: typeof pointToSegment; declare const geometry_rectCenter: typeof rectCenter; declare const geometry_rectContains: typeof rectContains; declare const geometry_rectsIntersect: typeof rectsIntersect; declare const geometry_sameAnchor: typeof sameAnchor; declare const geometry_shapeAnchor: typeof shapeAnchor; declare namespace geometry { export { geometry_PERIMETER_ANCHORS as PERIMETER_ANCHORS, type geometry_Rect as Rect, geometry_SIDE_ANCHORS as SIDE_ANCHORS, geometry_anchorPoint as anchorPoint, geometry_boundingBox as boundingBox, geometry_distance as distance, geometry_edgeAnchors as edgeAnchors, geometry_nearestAnchor as nearestAnchor, geometry_nodeRect as nodeRect, geometry_perimeterAnchor as perimeterAnchor, geometry_pointInRect as pointInRect, geometry_pointToPolyline as pointToPolyline, geometry_pointToSegment as pointToSegment, geometry_rectCenter as rectCenter, geometry_rectContains as rectContains, geometry_rectsIntersect as rectsIntersect, geometry_sameAnchor as sameAnchor, geometry_shapeAnchor as shapeAnchor }; } declare const mermaidSvgLayout: LayoutEngine; declare const stateAdapter: DiagramAdapter; /** 顯式註冊(非 module side-effect)。 */ declare function registerStateAdapter(): void; declare const erAdapter: DiagramAdapter; /** 顯式註冊(非 module side-effect)。 */ declare function registerErAdapter(): void; declare const classAdapter: DiagramAdapter; /** 顯式註冊(非 module side-effect)。 */ declare function registerClassAdapter(): void; declare const mindmapAdapter: DiagramAdapter; /** 顯式註冊(非 module side-effect)。 */ declare function registerMindmapAdapter(): void; declare const sequenceAdapter: DiagramAdapter; /** 顯式註冊(非 module side-effect)。 */ declare function registerSequenceAdapter(): void; declare const requirementAdapter: DiagramAdapter; /** 顯式註冊(非 module side-effect)。 */ declare function registerRequirementAdapter(): void; declare const quadrantAdapter: DiagramAdapter; /** 顯式註冊(非 module side-effect)。 */ declare function registerQuadrantAdapter(): void; declare const c4Adapter: DiagramAdapter; /** 顯式註冊(非 module side-effect)。 */ declare function registerC4Adapter(): void; declare const kanbanAdapter: DiagramAdapter; /** 顯式註冊(非 module side-effect)。 */ declare function registerKanbanAdapter(): void; declare const sankeyAdapter: DiagramAdapter; /** 顯式註冊(非 module side-effect)。 */ declare function registerSankeyAdapter(): void; declare const journeyAdapter: DiagramAdapter; /** 顯式註冊(非 module side-effect)。 */ declare function registerJourneyAdapter(): void; declare const ganttAdapter: DiagramAdapter; /** 顯式註冊(非 module side-effect)。 */ declare function registerGanttAdapter(): void; declare const pieAdapter: DiagramAdapter; /** 顯式註冊(非 module side-effect)。 */ declare function registerPieAdapter(): void; declare const xychartAdapter: DiagramAdapter; /** 顯式註冊(非 module side-effect)。 */ declare function registerXychartAdapter(): void; declare const architectureAdapter: DiagramAdapter; /** 顯式註冊(非 module side-effect)。 */ declare function registerArchitectureAdapter(): void; declare const blockAdapter: DiagramAdapter; /** 顯式註冊(非 module side-effect)。 */ declare function registerBlockAdapter(): void; declare const packetAdapter: DiagramAdapter; /** 顯式註冊(非 module side-effect)。 */ declare function registerPacketAdapter(): void; declare const gitgraphAdapter: DiagramAdapter; /** 顯式註冊(非 module side-effect)。 */ declare function registerGitgraphAdapter(): void; /** 繪圖區(場景座標)。四邊留白給軸標籤,尺寸取 mermaid 預設 chartWidth/Height 的觀感。 */ declare const PLOT: { readonly x: 90; readonly y: 70; readonly w: 520; readonly h: 520; }; /** 0..1 值 → 場景座標(節點中心)。y 值 1 在上方,與圖表直覺一致。 */ declare function valueToScene(qx: number, qy: number): Point; /** 場景座標(節點中心)→ 0..1 值,夾在繪圖區內。 */ declare function sceneToValue(cx: number, cy: number): { qx: number; qy: number; }; declare function flowDbToScene(text: string, mermaid: MermaidLike): Promise; interface TimelinePeriod { /** 時間點文字,如 "Q1" / "2025-07"。 */ period: string; /** 此時間點發生的事件(可 0..n)。 */ events: string[]; } interface TimelineSection { /** 區段名稱;null = 區段前(無名)的時間點。 */ name: string | null; periods: TimelinePeriod[]; } interface TimelineModel { /** 逐字保留的 YAML frontmatter(含 --- 標記),無則 undefined。 */ frontmatter?: string; /** `title X` 顯示標題。 */ title?: string; sections: TimelineSection[]; /** 解析無法辨識為合法 timeline 時的完整原文(降級防覆寫用)。 */ raw?: string; } /** 空白模型(新建時的起手骨架)。 */ declare function emptyTimelineModel(): TimelineModel; /** mermaid timeline 文字 → 結構化模型。永不拋例外;無法解析時於 raw 保留原文。 */ declare function parseTimeline(text: string): TimelineModel; /** 結構化模型 → mermaid timeline 文字。純函式、永遠合法。 */ declare function serializeTimeline(model: TimelineModel): string; interface FormEditorHandle { loadSource(text: string): void; toMermaid(): string; getModel(): unknown; undo(): void; redo(): void; canUndo(): boolean; canRedo(): boolean; setDark(dark: boolean): void; exportSvg(): string; exportPng(opts?: ExportRasterOptions): Promise; show(): void; hide(): void; isVisible(): boolean; destroy(): void; } interface TimelineFormOptions { mermaid?: MermaidSource; dark?: boolean; fontUrl?: string; /** 轉發給 controller 的事件匯流(change / mermaidchange / historychange / error)。 */ emit?: (event: string, payload?: unknown) => void; } interface TimelineFormHandle extends FormEditorHandle { getModel(): TimelineModel; } declare function createTimelineForm(host: HTMLElement, opts?: TimelineFormOptions): TimelineFormHandle; interface OridFormOptions { mermaid?: MermaidSource; dark?: boolean; fontUrl?: string; /** 轉發給 controller 的事件匯流(change / mermaidchange / historychange / error)。 */ emit?: (event: string, payload?: unknown) => void; } interface OridFormHandle extends FormEditorHandle { getModel(): OridModel; } declare function createOridForm(host: HTMLElement, opts?: OridFormOptions): OridFormHandle; /** 產生確定性的新節點 id(n1, n2, …)。不由 label 衍生 → 改名不動 id。 */ declare function nextNodeId(scene: EditorScene): string; declare function nextEdgeId(scene: EditorScene): string; /** 測試用:重置流水號(讓 id 可預期)。 */ declare function _resetIdCounters(): void; declare function getNode(scene: EditorScene, id: string): SceneNode | undefined; /** * 容器(複合狀態 / subgraph / 泳道)外框矩形:遞迴涵蓋子節點 + 子容器 + 內距。 * * 這是「容器畫出來多大」的**唯一**定義 —— 渲染、符合畫面、匯出 SVG 都走這裡。 * 先前渲染器另外抄了一份同樣的算式,結果是任何一邊調內距,框線就會和點擊 / 裁切範圍對不上。 */ declare function containerRect(scene: EditorScene, id: string): Rect | null; /** * 一張圖「實際畫出來多大」:節點 + 容器框。 * * 容器框比裡面的節點大一圈,標題還畫在框的上緣 —— 只量節點的話,「符合畫面」與匯出 SVG * 都會把群組名稱、泳道欄名切在畫面外。 */ declare function sceneRects(scene: EditorScene): Rect[]; /** * 邊的兩端錨點,支援節點 *與容器*(複合狀態)端點。容器端用矩形周界錨點。 * 端點若設了固定錨點(edge.sourceAnchor / targetAnchor,draw.io 式)則用該點; * 否則維持「動態朝對端」的浮動錨。一端固定、另一端浮動時,浮動端朝固定點(而非對端中心)。 */ declare function resolveEdgeAnchors(scene: EditorScene, edge: SceneEdge): { start: Point; end: Point; } | null; declare function getEdge(scene: EditorScene, id: string): SceneEdge | undefined; declare function addNode(scene: EditorScene, node: SceneNode): EditorScene; declare function addEdge(scene: EditorScene, edge: SceneEdge): EditorScene; /** 建立一個帶預設尺寸的新節點(尚未加入場景)。 */ declare function makeNode(id: string, at: Point, opts?: { shape?: NodeShape; label?: string; w?: number; h?: number; }): SceneNode; declare function makeEdge(id: string, source: string, target: string, opts?: { label?: string; lineKind?: LineKind; arrowStart?: ArrowHead; arrowEnd?: ArrowHead; sourceAnchor?: EdgeAnchor; targetAnchor?: EdgeAnchor; }): SceneEdge; /** 平移一組節點(dx/dy);同時平移其後代容器幾何。 */ declare function moveNodes(scene: EditorScene, ids: Set, dx: number, dy: number): EditorScene; declare function resizeNode(scene: EditorScene, id: string, rect: { x: number; y: number; w: number; h: number; }): EditorScene; declare function setLabel(scene: EditorScene, id: string, label: string): EditorScene; declare function setShape(scene: EditorScene, id: string, shape: NodeShape): EditorScene; declare function reconnectEdge(scene: EditorScene, edgeId: string, endpoint: 'source' | 'target', nodeId: string, anchor?: EdgeAnchor | null): EditorScene; /** 刪除節點 + 連帶刪除入射邊 + 從容器移除。回傳新場景 + 被刪除的邊(供 undo)。 */ declare function deleteNodes(scene: EditorScene, ids: Set): { scene: EditorScene; removedEdges: SceneEdge[]; }; declare function deleteEdges(scene: EditorScene, ids: Set): EditorScene; /** 把一組節點包進新的 subgraph 容器。 */ declare function groupIntoContainer(scene: EditorScene, container: SceneContainer): EditorScene; declare const sceneOps__resetIdCounters: typeof _resetIdCounters; declare const sceneOps_addEdge: typeof addEdge; declare const sceneOps_addNode: typeof addNode; declare const sceneOps_containerRect: typeof containerRect; declare const sceneOps_deleteEdges: typeof deleteEdges; declare const sceneOps_deleteNodes: typeof deleteNodes; declare const sceneOps_getEdge: typeof getEdge; declare const sceneOps_getNode: typeof getNode; declare const sceneOps_groupIntoContainer: typeof groupIntoContainer; declare const sceneOps_makeEdge: typeof makeEdge; declare const sceneOps_makeNode: typeof makeNode; declare const sceneOps_moveNodes: typeof moveNodes; declare const sceneOps_nextEdgeId: typeof nextEdgeId; declare const sceneOps_nextNodeId: typeof nextNodeId; declare const sceneOps_reconnectEdge: typeof reconnectEdge; declare const sceneOps_resizeNode: typeof resizeNode; declare const sceneOps_resolveEdgeAnchors: typeof resolveEdgeAnchors; declare const sceneOps_sceneRects: typeof sceneRects; declare const sceneOps_setLabel: typeof setLabel; declare const sceneOps_setShape: typeof setShape; declare namespace sceneOps { export { sceneOps__resetIdCounters as _resetIdCounters, sceneOps_addEdge as addEdge, sceneOps_addNode as addNode, sceneOps_containerRect as containerRect, sceneOps_deleteEdges as deleteEdges, sceneOps_deleteNodes as deleteNodes, sceneOps_getEdge as getEdge, sceneOps_getNode as getNode, sceneOps_groupIntoContainer as groupIntoContainer, sceneOps_makeEdge as makeEdge, sceneOps_makeNode as makeNode, sceneOps_moveNodes as moveNodes, sceneOps_nextEdgeId as nextEdgeId, sceneOps_nextNodeId as nextNodeId, sceneOps_reconnectEdge as reconnectEdge, sceneOps_resizeNode as resizeNode, sceneOps_resolveEdgeAnchors as resolveEdgeAnchors, sceneOps_sceneRects as sceneRects, sceneOps_setLabel as setLabel, sceneOps_setShape as setShape }; } declare function defaultShapeFor(type: DiagramType): NodeShape; /** 外形決定初始尺寸:偽狀態是小圓點、fork 是細長條、class/er 要放得下標題列。 */ declare function defaultSizeFor(type: DiagramType, shape: NodeShape): { w: number; h: number; }; /** mindmap 外形 → mermaid 括號代碼(對齊 round-trip/mindmap/serialize.wrap)。 */ declare function mindmapShapeType(shape: NodeShape): number; /** * mindmap 的新節點該掛在誰底下。 * * mermaid mindmap 只允許**一個**根:兩個 parentId=null 的節點會直接讓渲染報錯。所以新節點 * 一律掛在「目前選取的節點」之下,沒有選取就掛在既有根節點之下;場景全空時才讓它自己當根。 */ declare function mindmapParent(scene: EditorScene, preferId?: string): string | undefined; interface MakeNodeOptions { shape?: NodeShape; label?: string; w?: number; h?: number; /** 建立時直接指定父節點(mindmap 掛樹 / subgraph 內建點)。 */ parentId?: string | null; /** 建點時「目前選取」的節點,mindmap 用來決定掛在誰底下。 */ preferParentId?: string; } /** * 依場景圖種建立一個新節點(外形 / 資料 / 尺寸 / 父節點都對)。 * at = 節點中心的世界座標(與舊 makeNode 一致)。 */ declare function makeNodeFor(scene: EditorScene, id: string, at: Point, opts?: MakeNodeOptions): SceneNode; interface MakeEdgeOptions { label?: string; lineKind?: LineKind; arrowStart?: ArrowHead; arrowEnd?: ArrowHead; sourceAnchor?: EdgeAnchor; targetAnchor?: EdgeAnchor; } /** 依場景圖種建立一條新連線(帶對的 data,序列化才畫得出三角 / 鳥足等關係符號)。 */ declare function makeEdgeFor(scene: EditorScene, id: string, source: string, target: string, opts?: MakeEdgeOptions): SceneEdge; interface ShapeMeta { /** 按鈕上的字形(單一字元,免圖檔)。 */ glyph: string; /** 中文名(按鈕文字 / title)。 */ label: string; } declare function shapeMeta(shape: NodeShape): ShapeMeta; /** 某個外形的迷你 SVG 圖示標記(24×16,顏色沿用 currentColor)。 */ declare function shapeIconMarkup(shape: NodeShape): string; declare function textWidth(text: string, fontPx: number): number; interface ClassBody { members?: string[]; methods?: string[]; stereotype?: string; generic?: string; } declare function classBoxSize(label: string, body: ClassBody | undefined): { w: number; h: number; }; declare function erEntitySize(label: string, attributes: readonly ErAttribute[]): { w: number; h: number; }; /** * 依節點內容算出它「該有」的尺寸。只有隔間框(class / er / requirement)有自己的內容模型; * 其餘外形交給排版引擎 / 使用者拖曳決定,回傳 null 表示「不要動它」。 */ declare function contentSize(node: { label: string; data?: NodeData; }): { w: number; h: number; } | null; /** 把一個節點的尺寸校正成內容尺寸,並維持原本的中心點(排版引擎給的位置不變)。 */ declare function fitToContent(node: SceneNode): SceneNode; export { ArrowHead, DiagramAdapter, DiagramType, EditorScene, ExportRasterOptions, type FormEditorHandle, LayoutEngine, LineKind, type MakeEdgeOptions, type MakeNodeOptions, MermaidLike, MermaidSource, NodeData, NodeShape, type OridFormHandle, type OridFormOptions, OridModel, ParseResult, Point, PLOT as QUADRANT_PLOT, SceneContainer, SceneEdge, SceneNode, type ShapeMeta, type TimelineFormHandle, type TimelineFormOptions, type TimelineModel, type TimelinePeriod, type TimelineSection, architectureAdapter, blockAdapter, c4Adapter, classAdapter, classBoxSize, contentSize, createOridForm, createTimelineForm, defaultShapeFor, defaultSizeFor, emptyTimelineModel, erAdapter, erEntitySize, fitToContent, flowDbToScene, ganttAdapter, geometry, gitgraphAdapter, journeyAdapter, kanbanAdapter, makeEdgeFor, makeNodeFor, mermaidSvgLayout, mindmapAdapter, mindmapParent, mindmapShapeType, packetAdapter, parseTimeline, pieAdapter, quadrantAdapter, registerArchitectureAdapter, registerBlockAdapter, registerC4Adapter, registerClassAdapter, registerErAdapter, registerGanttAdapter, registerGitgraphAdapter, registerJourneyAdapter, registerKanbanAdapter, registerMindmapAdapter, registerPacketAdapter, registerPieAdapter, registerQuadrantAdapter, registerRequirementAdapter, registerSankeyAdapter, registerSequenceAdapter, registerStateAdapter, registerXychartAdapter, requirementAdapter, sankeyAdapter, sceneOps, sceneToValue, sequenceAdapter, serializeTimeline, shapeIconMarkup, shapeMeta, stateAdapter, textWidth, valueToScene, xychartAdapter };