@weasel-js/diagram-formats 1.11.1 → 1.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +8 -8
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/document.ts","../src/shiftData.ts","../src/pageLayout.ts","../src/graphRead.ts","../src/lineError.ts","../src/dot/lex.ts","../src/dot/parse.ts","../src/dot/values.ts","../src/dot/read.ts","../src/graphWrite.ts","../src/dot/write.ts","../src/dot/format.ts","../src/jsonFormat.ts","../src/drawXml/style.ts","../src/drawXml/cells.ts","../src/drawXml/pageCells.ts","../src/drawXml/cellText.ts","../src/drawXml/mapping.ts","../src/drawXml/readStyle.ts","../src/drawXml/readPage.ts","../src/drawXml/read.ts","../src/drawXml/writeStyle.ts","../src/drawXml/writeXml.ts","../src/drawXml/writeEdge.ts","../src/drawXml/writePage.ts","../src/drawXml/write.ts","../src/drawXml/format.ts","../src/mermaid/lex.ts","../src/mermaid/parse.ts","../src/mermaid/read.ts","../src/mermaid/write.ts","../src/mermaid/format.ts","../src/formats.ts","../src/sceneReaders.ts","../src/fromScene.ts","../src/toScene.ts","../src/pageNodes.ts","../src/pageSvg.ts","../src/pagePng.ts","../src/pdfRaster.ts","../src/pagesPdf.ts"],"names":["num","marker","fail","attrList","attrs","claim","POINTS_PER_INCH","shapeOf","kindOf","boxOf","NAMED","decodeEntities","markerOf","outlineOf","dashOf","readNode","readEdge","childElements","color","nodeLines","VERTICAL","dataNodeStyle","dataRegionStyle","dataEdgeStyle","DEFAULT_PORTS","edgeIdOf","diagramScene","diagramThemeFrom","SHAPES","KEYWORDS","keyword","DIRECTIONS","nodeColors","HEADER","px","colorOf","moved","textOf","NODE_STROKE_WIDTH","EDGE_STROKE_WIDTH","membersOf","optional","readRegion","readGroup","pageOf","DIAGRAM_THEME_KEY","warmRender"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * The interchange document every format reads and writes: a diagram's pages,\n * each holding a `DiagramData`, and the theme it is drawn in. Only\n * `documentFromScene` and `documentSpecs` know scenes, so a codec is written\n * once for a chart and for a data-backed host alike.\n */\nimport type { DataEdge, DiagramData, DiagramTheme, LayoutDirection } from '@weasel-js/diagram';\n\n/**\n * One page: its sheet size, and what is on it in coordinates from the page's\n * top-left corner. Ids share one namespace across the whole document.\n */\nexport interface DocumentPage {\n id: string;\n name?: string;\n width: number;\n height: number;\n data: DiagramData;\n /** The way layout runs when the page is laid out on import, which it is when a node has no `at`. */\n direction?: LayoutDirection;\n}\n\n/** A diagram as every format reads and writes it. */\nexport interface DiagramDocument {\n pages: readonly DocumentPage[];\n /**\n * Edges the scene splits off-page, and edges whose ends export to different pages: their ends, ports, router,\n * label, and colors. One the scene splits off-page carries no waypoints,\n * since it draws as two stubs ending at off-page tags; one it keeps whole\n * (an end in the gap between pages) keeps them, in world coordinates.\n */\n crossPageEdges?: readonly DataEdge[];\n /** A shipped theme's id, or a whole theme. Unset, the host's own. */\n theme?: string | DiagramTheme;\n}\n\n/** What a format read, and what it could not carry into a diagram, one sentence each. */\nexport interface ImportResult {\n document: DiagramDocument;\n warnings: readonly string[];\n}\n\n/** What a format wrote, and what it could not carry out of the diagram, one sentence each. */\nexport interface ExportResult {\n text: string;\n warnings: readonly string[];\n}\n\n/** Options for {@link DiagramFormat.write}. */\nexport interface WriteOptions {\n /** The page a format with no pages writes. Default the first. */\n page?: string;\n}\n\n/** A file format a diagram can be read from or written to. */\nexport interface DiagramFormat {\n id: string;\n /** What a menu calls it. */\n name: string;\n /** With their dots, most usual first: `['.dot', '.gv']`. */\n extensions: readonly string[];\n /** Whether `text` looks like this format, from its content alone. */\n detect(text: string): boolean;\n /** Throws on text this format cannot read. */\n read?(text: string): ImportResult | Promise<ImportResult>;\n write?(doc: DiagramDocument, opts?: WriteOptions): ExportResult;\n /** Whether {@link write} writes one page rather than the whole document. */\n onePage?: boolean;\n}\n\n/** The page a one-page format writes: the one `opts.page` names, else the first. `null` for a document with none. */\nexport function writtenPage(doc: DiagramDocument, opts: WriteOptions = {}): DocumentPage | null {\n return doc.pages.find((p) => p.id === opts.page) ?? doc.pages[0] ?? null;\n}\n","/** A page's `DiagramData` moved as a whole: what puts page coordinates into the world. */\nimport type { Vec2 } from '@weasel-js/core/math';\nimport type { DataContainer, DataEdge, DiagramData, DiagramLabel } from '@weasel-js/diagram';\n\nconst shift = (p: Vec2, by: Vec2): Vec2 => ({ x: p.x + by.x, y: p.y + by.y });\n\nfunction shiftPlacement(label: DiagramLabel, by: Vec2): DiagramLabel {\n return typeof label.at === 'object' ? { ...label, at: { near: shift(label.at.near, by) } } : label;\n}\n\nfunction shiftEdge(e: DataEdge, by: Vec2): DataEdge {\n return {\n ...e,\n ...(e.waypoints !== undefined ? { waypoints: e.waypoints.map((p) => shift(p, by)) } : {}),\n ...(e.routed !== undefined ? { routed: e.routed.map((p) => shift(p, by)) } : {}),\n ...(e.labelPlacement !== undefined ? { labelPlacement: shiftPlacement(e.labelPlacement, by) } : {}),\n };\n}\n\nconst shiftContainer = (c: DataContainer, by: Vec2): DataContainer =>\n (c.box === undefined ? c : { ...c, box: { ...c.box, ...shift(c.box, by) } });\n\n/** `data` with every node place, region box, waypoint, laid-out route, and label point moved by `by`. */\nexport function shiftData(data: DiagramData, by: Vec2): DiagramData {\n if (by.x === 0 && by.y === 0) return data;\n return {\n ...data,\n nodes: data.nodes.map((n) => (n.at === undefined ? n : { ...n, at: shift(n.at, by) })),\n edges: data.edges.map((e) => shiftEdge(e, by)),\n ...(data.containers !== undefined ? { containers: data.containers.map((c) => shiftContainer(c, by)) } : {}),\n };\n}\n","/**\n * Laying out a page whose nodes are not all placed, as a file with no\n * geometry gives them: once, on import, so the scene holds places rather than\n * a layout to run again.\n */\nimport type { Vec2 } from '@weasel-js/core/math';\nimport {\n diagramScene, edgeIdOf, type DataContainer, type DataEdge, type DiagramEdge, type DiagramLabel, type DiagramSpec,\n type DiagramTheme, type MeasureRowText,\n} from '@weasel-js/diagram';\nimport type { DocumentPage } from './document';\nimport { shiftData } from './shiftData';\n\n/** Room kept between a laid-out page's edges and what is on it. */\nexport const PAGE_MARGIN = 40;\n\ntype Rect = { x: number; y: number; width: number; height: number };\n\n/** A pool or an empty container with no box: only layout places it. A container that holds something fits it instead. */\nconst unplacedRegion = (c: DataContainer): boolean => c.box === undefined && (c.role === 'pool' || (c.members ?? []).length === 0);\n\n/** Whether `page` has a node with no `at`, or a region only layout places. */\nexport function needsLayout(page: DocumentPage): boolean {\n return page.data.nodes.some((n) => n.at === undefined) || (page.data.containers ?? []).some(unplacedRegion);\n}\n\n/** An edge's route and ports as layout chose them, as `routed` and `routedPorts`, and its label where layout left it room. */\nfunction laidEdge(e: DataEdge, specs: ReadonlyMap<string, DiagramSpec>): DataEdge {\n const id = edgeIdOf(e);\n const trait = specs.get(id)?.data.diagram as DiagramEdge | undefined;\n if (trait === undefined) return e;\n const from = e.fromPort === undefined ? trait.from.laidOut : undefined;\n const to = e.toPort === undefined ? trait.to.laidOut : undefined;\n const label = (specs.get(`${id}/label`)?.data.diagram as { label?: DiagramLabel } | undefined)?.label;\n const follows = e.labelPlacement === undefined || e.labelPlacement.at === 'mid';\n return {\n ...e,\n ...(e.waypoints === undefined && e.routed === undefined && trait.laidOut !== undefined ? { routed: trait.laidOut } : {}),\n ...(from !== undefined || to !== undefined ? { routedPorts: { ...(from ? { from } : {}), ...(to ? { to } : {}) } } : {}),\n ...(follows && label !== undefined && typeof label.at === 'object' ? { labelPlacement: { ...e.labelPlacement, ...label } } : {}),\n };\n}\n\nconst boxOf = (spec: DiagramSpec | undefined): Rect | undefined =>\n spec === undefined ? undefined : { x: spec.pose.x, y: spec.pose.y, width: spec.pose.width, height: spec.pose.height };\n\n/**\n * `page` laid out with `layered`, the way its `direction` says, every node and\n * box it already places pinned there: each node gets an `at`, each pool and\n * empty container a box, and each edge the route layout chose as `routed`.\n * When the page placed nothing, what layout placed is moved to sit\n * {@link PAGE_MARGIN} inside its corner. The page grows to hold it all.\n */\nexport function laidOutPage(page: DocumentPage, opts: { theme: DiagramTheme; measure?: MeasureRowText }): DocumentPage {\n const { data } = page;\n const placedAny = data.nodes.some((n) => n.at !== undefined) || (data.containers ?? []).some((c) => c.box !== undefined);\n const pinned = {\n ...data,\n nodes: data.nodes.map((n) => (n.at !== undefined ? { ...n, pinned: true } : n)),\n ...(data.containers ? { containers: data.containers.map((c) => (c.box !== undefined ? { ...c, pinned: true } : c)) } : {}),\n };\n const specs = diagramScene(pinned, {\n layout: 'layered', theme: opts.theme, ...(opts.measure ? { measure: opts.measure } : {}),\n ...(page.direction ? { layoutOptions: { direction: page.direction } } : {}),\n });\n const byId = new Map(specs.map((s) => [s.id as string, s]));\n const boxed = (c: DataContainer): DataContainer => {\n const box = unplacedRegion(c) ? boxOf(byId.get(c.id)) : undefined;\n return box === undefined ? c : { ...c, box };\n };\n const laid = {\n ...data,\n nodes: data.nodes.map((n) => {\n const box = boxOf(byId.get(n.id));\n return n.at !== undefined || box === undefined ? n : { ...n, at: { x: box.x, y: box.y } };\n }),\n edges: data.edges.map((e) => laidEdge(e, byId)),\n ...(data.containers ? { containers: data.containers.map(boxed) } : {}),\n };\n const ids = [...data.nodes.map((n) => n.id), ...(data.containers ?? []).map((c) => c.id)];\n const boxes = ids.map((id) => boxOf(byId.get(id))).filter((b): b is Rect => b !== undefined);\n if (boxes.length === 0) return { ...page, data: laid };\n const min: Vec2 = { x: Math.min(...boxes.map((b) => b.x)), y: Math.min(...boxes.map((b) => b.y)) };\n const by: Vec2 = placedAny ? { x: 0, y: 0 } : { x: PAGE_MARGIN - min.x, y: PAGE_MARGIN - min.y };\n const right = Math.max(...boxes.map((b) => b.x + b.width)) + by.x + PAGE_MARGIN;\n const bottom = Math.max(...boxes.map((b) => b.y + b.height)) + by.y + PAGE_MARGIN;\n return {\n ...page,\n width: Math.max(page.width, Math.ceil(right)),\n height: Math.max(page.height, Math.ceil(bottom)),\n data: shiftData(laid, by),\n };\n}\n","/**\n * What the Mermaid and Graphviz DOT readers share: a graph's text, its\n * clusters' membership, its edges' ids, and the one page it reads into.\n */\nimport type { DataContainer, DataEdge, DataNode, LayoutDirection } from '@weasel-js/diagram';\nimport type { DocumentPage } from './document';\nimport { PAGE_MARGIN } from './pageLayout';\n\n/** Collects warnings, each once, in the order first met. */\nexport class Warnings {\n private readonly seen = new Set<string>();\n private readonly listed = new Map<string, Set<string>>();\n\n add(message: string): void {\n this.seen.add(message);\n }\n\n /** Adds `item` to a list warning: one sentence, `lead` then every item named. */\n list(lead: string, item: string): void {\n if (!this.listed.has(lead)) {\n this.listed.set(lead, new Set());\n this.seen.add(lead);\n }\n this.listed.get(lead)!.add(item);\n }\n\n all(): string[] {\n return [...this.seen].map((m) => (this.listed.has(m) ? `${m}: ${[...this.listed.get(m)!].join(', ')}.` : m));\n }\n}\n\n/** A channel from 0 to 1 as two hex digits. */\nexport const hex2 = (n: number): string => Math.round(Math.max(0, Math.min(1, n)) * 255).toString(16).padStart(2, '0');\n\nconst NAMED:Readonly<Record<string, string>> = { amp: '&', lt: '<', gt: '>', quot: '\"', apos: \"'\", nbsp: ' ' };\n\n/** `text` with its `&name;` and `&#n;` references read; Mermaid's `#name;` and `#n;` too when `hash` is set. */\nexport function decodeEntities(text: string, hash = false): string {\n const re = hash ? /[&#](#x[\\da-f]+|#\\d+|x[\\da-f]+(?=;)|\\d+|[a-z]+);/gi : /&(#x[\\da-f]+|#\\d+|[a-z]+);/gi;\n return text.replace(re, (whole, ref: string) => {\n const code = /^#?x([\\da-f]+)$/i.exec(ref)?.[1];\n if (code !== undefined) return String.fromCodePoint(parseInt(code, 16));\n const num = /^#?(\\d+)$/.exec(ref)?.[1];\n if (num !== undefined) return String.fromCodePoint(parseInt(num, 10));\n return NAMED[ref.toLowerCase()] ?? whole;\n });\n}\n\n/** Markup's text, one entry per line: `<br>` breaks a line, other tags are dropped. */\nexport function markupLines(markup: string, hash = false): string[] {\n const text = markup.replace(/<br\\s*\\/?>/gi, '\\n').replace(/<[^>]*>/g, '');\n return decodeEntities(text, hash).split('\\n').map((l) => l.trim());\n}\n\n/**\n * Which cluster each node and cluster sits in directly. A node is placed by\n * the first cluster that names it, moved only into a cluster nested in that\n * one; a second cluster elsewhere is reported and ignored.\n */\nexport class Membership {\n private readonly parent = new Map<string, string | null>();\n readonly clusterParent = new Map<string, string | null>();\n\n constructor(private readonly warnings: Warnings, private readonly format: string) {}\n\n /** Opens `cluster` inside `parent`; a cluster opened again keeps its first place. */\n openCluster(cluster: string, parent: string | null): void {\n if (!this.clusterParent.has(cluster)) this.clusterParent.set(cluster, parent);\n }\n\n private within(inner: string | null, outer: string): boolean {\n for (let at = inner; at !== null && at !== undefined; at = this.clusterParent.get(at) ?? null) if (at === outer) return true;\n return false;\n }\n\n /** Records that `cluster` (`null` for the top level) names `node`. */\n place(node: string, cluster: string | null): void {\n const was = this.parent.get(node);\n if (was === undefined || was === null) {\n if (was === undefined || cluster !== null) this.parent.set(node, cluster);\n return;\n }\n if (cluster === null || this.within(was, cluster)) return;\n if (this.within(cluster, was)) this.parent.set(node, cluster);\n else this.warnings.list(`${this.format} nodes in two clusters, kept in the first`, node);\n }\n\n /** Each cluster's direct members, nodes in the order first placed and nested clusters after. */\n members(cluster: string): string[] {\n const nodes = [...this.parent].filter(([, p]) => p === cluster).map(([id]) => id);\n const clusters = [...this.clusterParent].filter(([, p]) => p === cluster).map(([id]) => id);\n return [...nodes, ...clusters];\n }\n}\n\n/** `edges` each given an id unique among themselves and `taken`: `from-to`, then `from-to-2` and on. */\nexport function withEdgeIds(edges: readonly DataEdge[], taken: Iterable<string>): DataEdge[] {\n const used = new Set(taken);\n return edges.map((e) => {\n const base = `${e.from}-${e.to}`;\n let id = base;\n for (let n = 2; used.has(id); n++) id = `${base}-${n}`;\n used.add(id);\n return { ...e, id };\n });\n}\n\n/** What a graph format read, as the one page it becomes. */\nexport interface GraphPage {\n name?: string;\n direction?: LayoutDirection;\n nodes: DataNode[];\n edges: DataEdge[];\n containers: DataContainer[];\n /** A size the file gave. Unset, the page starts small and grows to hold what layout places. */\n size?: { width: number; height: number };\n}\n\n/** The page a graph format reads into. */\nexport function graphPage(g: GraphPage): DocumentPage {\n const ids = [...g.nodes.map((n) => n.id), ...g.containers.map((c) => c.id)];\n return {\n id: 'page-1',\n ...(g.name !== undefined && g.name !== '' ? { name: g.name } : {}),\n width: g.size?.width ?? 2 * PAGE_MARGIN,\n height: g.size?.height ?? 2 * PAGE_MARGIN,\n ...(g.direction !== undefined ? { direction: g.direction } : {}),\n data: {\n nodes: g.nodes,\n edges: withEdgeIds(g.edges, ids),\n ...(g.containers.length > 0 ? { containers: g.containers } : {}),\n },\n };\n}\n","/** The error a text format's reader throws: the format, the line, and what is wrong there. */\nexport function lineError(format: string, line: number, message: string): Error {\n return new Error(`${format}, line ${line}: ${message}`);\n}\n","/** Graphviz DOT's tokens: identifiers in their four spellings, punctuation, and edge operators. */\nimport { lineError } from '../lineError';\n\n/** One token. An `id` is a name, a numeral, a quoted string, or an HTML string. */\nexport interface DotToken {\n kind: 'id' | 'punct' | 'edgeop';\n value: string;\n line: number;\n quoted?: boolean;\n html?: boolean;\n}\n\nconst NAME = /[A-Za-z_\\u0080-][\\w\\u0080-]*/y;\nconst NUMERAL = /-?(?:\\.\\d+|\\d+(?:\\.\\d*)?)/y;\nconst PUNCT = '{}[];,=:';\n\nconst fail = (line: number, message: string) => lineError('DOT', line, message);\n\n/** Splits DOT source into tokens, skipping comments. Throws, naming the line, on text it cannot read. */\nexport function lexDot(text: string): DotToken[] {\n const tokens: DotToken[] = [];\n let i = 0;\n let line = 1;\n let lineStart = true;\n const advance = (to: number) => {\n for (let k = i; k < to; k++) if (text[k] === '\\n') line++;\n i = to;\n };\n const end = (marker: string, from: number) => {\n const at = text.indexOf(marker, from);\n return at < 0 ? text.length : at;\n };\n while (i < text.length) {\n const c = text[i]!;\n if (c === '\\n') { line++; i++; lineStart = true; continue; }\n if (/\\s/.test(c)) { i++; continue; }\n if (c === '#' && lineStart) { advance(end('\\n', i)); continue; }\n lineStart = false;\n if (text.startsWith('//', i)) { advance(end('\\n', i)); continue; }\n if (text.startsWith('/*', i)) { advance(Math.min(text.length, end('*/', i + 2) + 2)); continue; }\n if (text.startsWith('->', i) || text.startsWith('--', i)) {\n tokens.push({ kind: 'edgeop', value: text.slice(i, i + 2), line });\n i += 2;\n continue;\n }\n if (PUNCT.includes(c)) { tokens.push({ kind: 'punct', value: c, line }); i++; continue; }\n if (c === '\"') { tokens.push(quoted()); continue; }\n if (c === '<') { tokens.push(html()); continue; }\n const word = match(NUMERAL) ?? match(NAME);\n if (word === null) throw fail(line, `cannot read \"${c}\"`);\n tokens.push({ kind: 'id', value: word, line });\n }\n return tokens;\n\n function match(re: RegExp): string | null {\n re.lastIndex = i;\n const m = re.exec(text);\n if (m === null) return null;\n i += m[0].length;\n return m[0];\n }\n\n function quotedPart(): string {\n const start = line;\n let out = '';\n i++;\n while (i < text.length && text[i] !== '\"') {\n if (text[i] === '\\\\' && text[i + 1] === '\"') { out += '\"'; i += 2; continue; }\n if (text[i] === '\\\\' && text[i + 1] === '\\n') { line++; i += 2; continue; }\n if (text[i] === '\\\\' && i + 1 < text.length) { out += text.slice(i, i + 2); i += 2; continue; }\n if (text[i] === '\\n') line++;\n out += text[i];\n i++;\n }\n if (i >= text.length) throw fail(start, 'a quoted string is never closed');\n i++;\n return out;\n }\n\n function quoted(): DotToken {\n const start = line;\n let value = quotedPart();\n for (;;) {\n const rest = /\\s*\\+\\s*\"/y;\n rest.lastIndex = i;\n const m = rest.exec(text);\n if (m === null) break;\n advance(i + m[0].length - 1);\n value += quotedPart();\n }\n return { kind: 'id', value, line: start, quoted: true };\n }\n\n function html(): DotToken {\n const start = line;\n let depth = 0;\n let k = i;\n for (; k < text.length; k++) {\n if (text[k] === '<') depth++;\n else if (text[k] === '>' && --depth === 0) break;\n }\n if (k >= text.length) throw fail(start, 'an HTML string is never closed');\n const value = text.slice(i + 1, k);\n advance(k + 1);\n return { kind: 'id', value, line: start, html: true };\n }\n}\n","/** Graphviz DOT's grammar, read to a syntax tree with each statement's line. */\nimport { lineError } from '../lineError';\nimport { lexDot, type DotToken } from './lex';\n\n/** An attribute's value as written: quoted, or an HTML string, or neither. */\nexport interface DotValue {\n value: string;\n quoted?: boolean;\n html?: boolean;\n}\n\nexport interface DotAttr {\n key: string;\n value: DotValue;\n}\n\n/** A node named in a statement, with the port and compass point it was named with. */\nexport interface DotNodeRef {\n id: string;\n port?: string;\n compass?: string;\n line: number;\n}\n\nexport interface DotSubgraph {\n kind: 'subgraph';\n id?: string;\n stmts: DotStmt[];\n line: number;\n}\n\nexport type DotStmt =\n | { kind: 'node'; node: DotNodeRef; attrs: DotAttr[]; line: number }\n | { kind: 'edge'; ends: (DotNodeRef | DotSubgraph)[]; attrs: DotAttr[]; line: number }\n | { kind: 'attr'; target: 'graph' | 'node' | 'edge'; attrs: DotAttr[]; line: number }\n | { kind: 'set'; key: string; value: DotValue; line: number }\n | DotSubgraph;\n\n/** A whole DOT file. */\nexport interface DotGraph {\n strict: boolean;\n directed: boolean;\n id?: string;\n stmts: DotStmt[];\n}\n\n/** The compass points a node end may name. */\nexport const COMPASS_POINTS: ReadonlySet<string> = new Set(['n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw', 'c', '_']);\n\nconst keyword = (t: DotToken | undefined, word: string) =>\n t !== undefined && t.kind === 'id' && !t.quoted && !t.html && t.value.toLowerCase() === word;\n\nconst valueOf = (t: DotToken): DotValue => ({ value: t.value, ...(t.quoted ? { quoted: true } : {}), ...(t.html ? { html: true } : {}) });\n\n/** Parses DOT source. Throws, naming the line, on text that is not a DOT graph. */\nexport function parseDot(text: string): DotGraph {\n const tokens = lexDot(text);\n let i = 0;\n const lastLine = text.split('\\n').length;\n const peek = (k = 0) => tokens[i + k];\n const where = () => peek()?.line ?? lastLine;\n const describe = (t: DotToken | undefined) => (t === undefined ? 'the end of the file' : `\"${t.value}\"`);\n const fail = (wanted: string) => lineError('DOT', where(), `expected ${wanted}, found ${describe(peek())}`);\n const is = (value: string) => peek()?.kind !== 'id' && peek()?.value === value;\n const take = (value: string) => {\n if (!is(value)) throw fail(`\"${value}\"`);\n return tokens[i++]!;\n };\n const id = (wanted = 'a name'): DotToken => {\n if (peek()?.kind !== 'id') throw fail(wanted);\n return tokens[i++]!;\n };\n\n const strict = keyword(peek(), 'strict');\n if (strict) i++;\n const kind = peek();\n if (!keyword(kind, 'graph') && !keyword(kind, 'digraph')) throw fail('\"graph\" or \"digraph\"');\n i++;\n const directed = kind!.value.toLowerCase() === 'digraph';\n const graphId = peek()?.kind === 'id' ? tokens[i++]!.value : undefined;\n take('{');\n const stmts = stmtList();\n take('}');\n if (peek() !== undefined) throw fail('the end of the file');\n return { strict, directed, ...(graphId !== undefined ? { id: graphId } : {}), stmts };\n\n function stmtList(): DotStmt[] {\n const out: DotStmt[] = [];\n while (peek() !== undefined && !is('}')) {\n out.push(stmt());\n if (is(';')) i++;\n }\n return out;\n }\n\n function attrList(): DotAttr[] {\n const attrs: DotAttr[] = [];\n while (is('[')) {\n i++;\n while (!is(']')) {\n const key = id('an attribute name').value;\n take('=');\n attrs.push({ key, value: valueOf(id('an attribute value')) });\n if (is(',') || is(';')) i++;\n }\n i++;\n }\n return attrs;\n }\n\n function subgraph(): DotSubgraph {\n const line = where();\n let name: string | undefined;\n if (keyword(peek(), 'subgraph')) {\n i++;\n if (peek()?.kind === 'id') name = tokens[i++]!.value;\n }\n take('{');\n const body = stmtList();\n take('}');\n return { kind: 'subgraph', ...(name !== undefined ? { id: name } : {}), stmts: body, line };\n }\n\n function nodeRef(): DotNodeRef {\n const t = id();\n const ref: DotNodeRef = { id: t.value, line: t.line };\n if (!is(':')) return ref;\n i++;\n const first = id('a port').value;\n if (is(':')) {\n i++;\n return { ...ref, port: first, compass: id('a compass point').value };\n }\n return COMPASS_POINTS.has(first) ? { ...ref, compass: first } : { ...ref, port: first };\n }\n\n function stmt(): DotStmt {\n const line = where();\n const t = peek()!;\n if (keyword(t, 'graph') || keyword(t, 'node') || keyword(t, 'edge')) {\n i++;\n return { kind: 'attr', target: t.value.toLowerCase() as 'graph' | 'node' | 'edge', attrs: attrList(), line };\n }\n if (t.kind === 'id' && peek(1)?.kind === 'punct' && peek(1)!.value === '=' && !keyword(t, 'subgraph')) {\n i += 2;\n return { kind: 'set', key: t.value, value: valueOf(id('a value')), line };\n }\n const first = keyword(t, 'subgraph') || is('{') ? subgraph() : nodeRef();\n if (peek()?.kind !== 'edgeop') {\n if ('stmts' in first) return first;\n return { kind: 'node', node: first, attrs: attrList(), line };\n }\n const ends: (DotNodeRef | DotSubgraph)[] = [first];\n while (peek()?.kind === 'edgeop') {\n const op = tokens[i]!;\n if (op.value !== (directed ? '->' : '--')) {\n throw lineError('DOT', op.line, `a ${directed ? 'digraph' : 'graph'} joins nodes with \"${directed ? '->' : '--'}\", not \"${op.value}\"`);\n }\n i++;\n ends.push(keyword(peek(), 'subgraph') || is('{') ? subgraph() : nodeRef());\n }\n return { kind: 'edge', ends, attrs: attrList(), line };\n }\n}\n","/** Graphviz DOT's attribute values as a diagram reads and writes them: labels, colors, shapes, and arrowheads. */\nimport type { MarkerRef } from '@weasel-js/core';\nimport type { Outline } from '@weasel-js/diagram';\nimport { hex2, markupLines } from '../graphRead';\nimport type { DotValue } from './parse';\n\n/** A label's lines: an HTML label's text, else the string with its escapes read. `\\N` names `self`, `\\G` the graph. */\nexport function labelLines(label: DotValue, self: string, graph: string): string[] {\n if (label.html) return markupLines(label.value).filter((l, i, all) => l !== '' || (i > 0 && i < all.length - 1));\n const lines = [''];\n const text = label.value;\n for (let i = 0; i < text.length; i++) {\n const c = text[i]!;\n if (c !== '\\\\' || i === text.length - 1) { lines[lines.length - 1] += c; continue; }\n const next = text[++i]!;\n if (next === 'n' || next === 'l' || next === 'r') lines.push('');\n else if (next === 'N') lines[lines.length - 1] += self;\n else if (next === 'G') lines[lines.length - 1] += graph;\n else lines[lines.length - 1] += next;\n }\n if (lines.length > 1 && lines[lines.length - 1] === '') lines.pop();\n return lines.length === 1 && lines[0] === '' ? [] : lines;\n}\n\n/** `text` as a quoted DOT string: backslashes and quotes escaped, line breaks as `\\n`. */\nexport function quoteLabel(lines: readonly string[]): string {\n return `\"${lines.map((l) => l.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')).join('\\\\n')}\"`;\n}\n\nfunction hsvHex(h: number, s: number, v: number): string {\n const f = (n: number) => {\n const k = (n + h * 6) % 6;\n return v - v * s * Math.max(0, Math.min(k, 4 - k, 1));\n };\n return `#${hex2(f(5))}${hex2(f(3))}${hex2(f(1))}`;\n}\n\n/** A color as CSS reads it: the first of a list, its scheme dropped, an HSV triple as hex. */\nexport function dotColor(value: string): string {\n const first = value.split(':')[0]!.split(';')[0]!.trim();\n const hsv = /^([\\d.]+)[,\\s]+([\\d.]+)[,\\s]+([\\d.]+)$/.exec(first);\n if (hsv !== null) return hsvHex(Number(hsv[1]), Number(hsv[2]), Number(hsv[3]));\n return first.replace(/^\\/[^/]*\\//, '');\n}\n\nconst OUTLINES: Readonly<Record<string, Outline>> = {\n box: 'rect', rect: 'rect', rectangle: 'rect', square: 'rect',\n ellipse: 'ellipse', oval: 'ellipse', circle: 'ellipse', doublecircle: 'ellipse', point: 'ellipse',\n diamond: 'diamond', hexagon: 'hexagon', parallelogram: 'parallelogram', trapezium: 'trapezoid',\n};\n\n/** The outline a shape and style draw as, or `null` for a shape the diagram has none for. */\nexport function outlineOf(shape: string, styles: readonly string[]): Outline | null {\n const outline = OUTLINES[shape.toLowerCase()];\n if (outline === undefined) return null;\n return outline === 'rect' && styles.includes('rounded') ? 'stadium' : outline;\n}\n\n/** The shape and the style word an outline writes as; a drawn path as a box. */\nexport function shapeOf(outline: Outline | undefined): { shape: string; rounded?: boolean } {\n if (outline === undefined || typeof outline !== 'string' || outline === 'rect') return { shape: 'box' };\n if (outline === 'stadium') return { shape: 'box', rounded: true };\n if (outline === 'trapezoid') return { shape: 'trapezium' };\n return { shape: outline };\n}\n\nconst ARROWS: Readonly<Record<string, MarkerRef | null>> = {\n normal: 'arrow', inv: 'arrow', none: null, dot: 'circle', odot: 'circle', diamond: 'diamond', odiamond: 'diamond-hollow',\n box: 'square', obox: 'square', tee: 'bar', empty: 'arrow-open', onormal: 'arrow-open', vee: 'arrow-concave',\n};\n\nconst ARROW_NAMES: Readonly<Record<string, string>> = {\n arrow: 'normal', 'arrow-open': 'empty', 'arrow-concave': 'vee', diamond: 'diamond', 'diamond-hollow': 'odiamond',\n circle: 'dot', square: 'box', bar: 'tee',\n};\n\n/** The marker an arrowhead name draws: `undefined` for a name the diagram has none for. */\nexport const markerOf = (name: string): MarkerRef | null | undefined => ARROWS[name.toLowerCase()];\n\n/** The arrowhead name a marker writes as: `undefined` for a marker DOT has none for. */\nexport function arrowName(marker: MarkerRef): string | undefined {\n return ARROW_NAMES[typeof marker === 'string' ? marker : marker.key];\n}\n\n/** A DOT style list's words. */\nexport const stylesOf = (style: string | undefined): string[] =>\n style === undefined ? [] : style.split(',').map((s) => s.trim().replace(/\\(.*$/, '').toLowerCase()).filter((s) => s !== '');\n\n/** The dash a `dashed` or `dotted` style draws. */\nexport function dashOf(styles: readonly string[]): number[] | undefined {\n if (styles.includes('dashed')) return [6, 4];\n if (styles.includes('dotted')) return [2, 3];\n return undefined;\n}\n","/**\n * A Graphviz DOT graph as a one-page document: clusters as containers, the\n * rest of the grammar's scoping read the way Graphviz reads it. Positions are\n * kept only when every node has a `pos`; otherwise the page is laid out on\n * import.\n */\nimport type { MarkerRef } from '@weasel-js/core';\nimport type { DataContainer, DataEdge, DataNode, EdgeStyle, LayoutDirection, NodeStyle } from '@weasel-js/diagram';\nimport type { ImportResult } from '../document';\nimport { Membership, Warnings, graphPage } from '../graphRead';\nimport { parseDot, type DotGraph, type DotNodeRef, type DotStmt, type DotSubgraph, type DotValue } from './parse';\nimport { dashOf, dotColor, labelLines, markerOf, outlineOf, stylesOf } from './values';\n\ntype Attrs = Map<string, DotValue>;\ninterface Scope { kind: 'root' | 'cluster' | 'plain'; graph: Attrs; node: Attrs; edge: Attrs; cluster: string | null }\ninterface RawEdge { tail: DotNodeRef; head: DotNodeRef; attrs: Attrs }\n\nconst READ: Readonly<Record<'root' | 'cluster' | 'plain' | 'node' | 'edge', ReadonlySet<string>>> = {\n root: new Set(['rankdir', 'label', 'bb']),\n cluster: new Set(['label', 'style', 'color', 'fillcolor', 'bgcolor', 'pencolor', 'fontcolor']),\n plain: new Set(),\n node: new Set(['label', 'shape', 'style', 'color', 'fillcolor', 'fontcolor', 'penwidth', 'width', 'height', 'pos']),\n edge: new Set(['label', 'color', 'fontcolor', 'penwidth', 'style', 'dir', 'arrowhead', 'arrowtail', 'tailport', 'headport']),\n};\n\nconst DIRECTIONS: Readonly<Record<string, LayoutDirection>> = { TB: 'down', BT: 'up', LR: 'right', RL: 'left' };\nconst COMPASS_PORTS = new Set(['n', 'e', 's', 'w']);\nconst POINTS_PER_INCH = 72;\n\nconst round = (n: number) => Math.round(n * 100) / 100;\nconst str = (attrs: Attrs, key: string) => attrs.get(key)?.value;\n\nclass DotReader {\n readonly warnings = new Warnings();\n readonly membership = new Membership(this.warnings, 'DOT');\n readonly nodes = new Map<string, Attrs>();\n readonly edges: RawEdge[] = [];\n readonly clusters = new Map<string, Attrs>();\n\n constructor(readonly graph: DotGraph) {}\n\n dropUnread(kind: keyof typeof READ, keys: Iterable<string>): void {\n for (const key of keys) if (!READ[kind].has(key)) this.warnings.list('DOT attributes a diagram does not hold were dropped', key);\n }\n\n touch(ref: DotNodeRef, scope: Scope, named: Set<string>): void {\n if (!this.nodes.has(ref.id)) this.nodes.set(ref.id, new Map(scope.node));\n this.membership.place(ref.id, scope.cluster);\n named.add(ref.id);\n }\n\n walk(stmts: readonly DotStmt[], scope: Scope): Set<string> {\n const named = new Set<string>();\n for (const s of stmts) {\n if (s.kind === 'set' || (s.kind === 'attr' && s.target === 'graph')) {\n const pairs = s.kind === 'set' ? [{ key: s.key, value: s.value }] : s.attrs;\n this.dropUnread(scope.kind, pairs.map((a) => a.key));\n for (const a of pairs) scope.graph.set(a.key, a.value);\n } else if (s.kind === 'attr') {\n this.dropUnread(s.target as 'node' | 'edge', s.attrs.map((a) => a.key));\n for (const a of s.attrs) scope[s.target].set(a.key, a.value);\n } else if (s.kind === 'node') {\n this.touch(s.node, scope, named);\n this.dropUnread('node', s.attrs.map((a) => a.key));\n for (const a of s.attrs) this.nodes.get(s.node.id)!.set(a.key, a.value);\n } else if (s.kind === 'subgraph') {\n for (const id of this.subgraph(s, scope)) named.add(id);\n } else {\n this.dropUnread('edge', s.attrs.map((a) => a.key));\n const ends = s.ends.map((end) => this.end(end, scope));\n for (const id of ends.flat()) named.add(id.id);\n const attrs = new Map(scope.edge);\n for (const a of s.attrs) attrs.set(a.key, a.value);\n for (let k = 1; k < ends.length; k++) {\n for (const tail of ends[k - 1]!) for (const head of ends[k]!) this.edges.push({ tail, head, attrs });\n }\n }\n }\n return named;\n }\n\n end(end: DotNodeRef | DotSubgraph, scope: Scope): DotNodeRef[] {\n if (!('stmts' in end)) {\n this.touch(end, scope, new Set());\n return [end];\n }\n return [...this.subgraph(end, scope)].map((id) => ({ id, line: end.line }));\n }\n\n subgraph(sub: DotSubgraph, parent: Scope): Set<string> {\n const isCluster = sub.id !== undefined && sub.id.startsWith('cluster');\n if (isCluster) this.membership.openCluster(sub.id!, parent.cluster);\n const graph = isCluster ? (this.clusters.get(sub.id!) ?? new Map(parent.graph)) : new Map(parent.graph);\n if (isCluster) this.clusters.set(sub.id!, graph);\n return this.walk(sub.stmts, {\n kind: isCluster ? 'cluster' : 'plain', graph, node: new Map(parent.node), edge: new Map(parent.edge),\n cluster: isCluster ? sub.id! : parent.cluster,\n });\n }\n}\n\nfunction nodeColors(attrs: Attrs, styles: readonly string[]): Partial<NodeStyle> | undefined {\n const fill = styles.includes('filled') ? str(attrs, 'fillcolor') ?? str(attrs, 'color') ?? 'lightgrey' : undefined;\n const stroke = str(attrs, 'color');\n const text = str(attrs, 'fontcolor');\n const width = str(attrs, 'penwidth');\n const dash = dashOf(styles);\n const colors: Partial<NodeStyle> = {\n ...(fill !== undefined ? { fill: dotColor(fill) } : {}),\n ...(stroke !== undefined ? { stroke: dotColor(stroke) } : {}),\n ...(text !== undefined ? { text: dotColor(text) } : {}),\n ...(width !== undefined ? { strokeWidth: Number(width) } : {}),\n ...(dash !== undefined ? { dash } : {}),\n };\n return Object.keys(colors).length > 0 ? colors : undefined;\n}\n\nfunction readNode(r: DotReader, id: string, attrs: Attrs): DataNode {\n const styles = stylesOf(str(attrs, 'style'));\n const shape = str(attrs, 'shape') ?? 'ellipse';\n let outline = outlineOf(shape, styles);\n if (outline === null) {\n r.warnings.list('DOT shapes read as rectangles', shape);\n outline = 'rect';\n }\n const colors = nodeColors(attrs, styles);\n const width = str(attrs, 'width');\n const height = str(attrs, 'height');\n return {\n id,\n lines: labelLines(attrs.get('label') ?? { value: '\\\\N' }, id, r.graph.id ?? ''),\n outline,\n ...(width !== undefined ? { width: round(Number(width) * POINTS_PER_INCH) } : {}),\n ...(height !== undefined ? { height: round(Number(height) * POINTS_PER_INCH) } : {}),\n ...(colors !== undefined ? { colors } : {}),\n };\n}\n\n/** Each node's place from its `pos`, and the page's size, when every node has one; else `null`. */\nfunction positions(nodes: DataNode[], attrs: ReadonlyMap<string, Attrs>, bb: string | undefined) {\n const centers = nodes.map((n) => str(attrs.get(n.id)!, 'pos')?.replace(/!$/, '').split(',').map(Number));\n if (nodes.length === 0 || centers.some((c) => c === undefined || c.length < 2 || c.some(Number.isNaN))) return null;\n const size = (n: DataNode) => ({ w: n.width ?? 0.75 * POINTS_PER_INCH, h: n.height ?? 0.5 * POINTS_PER_INCH });\n const box = bb?.split(',').map(Number);\n const [llx, lly, urx, ury] = box?.length === 4 && !box.some(Number.isNaN) ? box : [0, 0, undefined, undefined];\n const top = ury ?? Math.max(...nodes.map((n, i) => centers[i]![1]! + size(n).h / 2));\n const right = urx ?? Math.max(...nodes.map((n, i) => centers[i]![0]! + size(n).w / 2));\n const placed = nodes.map((n, i) => ({\n ...n, at: { x: round(centers[i]![0]! - llx! - size(n).w / 2), y: round(top - centers[i]![1]! - size(n).h / 2) },\n }));\n return { nodes: placed, size: { width: round(right - llx!), height: round(top - lly!) } };\n}\n\nfunction portOf(r: DotReader, ref: DotNodeRef, attr: string | undefined): string | undefined {\n const [port, compass] = ref.port !== undefined || ref.compass !== undefined ? [ref.port, ref.compass]\n : attr === undefined ? [undefined, undefined]\n : attr.includes(':') ? attr.split(':') : COMPASS_PORTS.has(attr) || attr === '_' ? [undefined, attr] : [attr, undefined];\n if (port === undefined && (compass === undefined || compass === '_')) return undefined;\n if (port === undefined && COMPASS_PORTS.has(compass!)) return compass;\n r.warnings.list('DOT ports a diagram does not have were dropped', [ref.id, port, compass].filter((p) => p !== undefined).join(':'));\n return undefined;\n}\n\nfunction marker(r: DotReader, name: string | undefined): MarkerRef | null {\n const m = markerOf(name ?? 'normal');\n if (m !== undefined) return m;\n r.warnings.list('DOT arrowheads drawn as arrows', name!);\n return 'arrow';\n}\n\nfunction readEdge(r: DotReader, e: RawEdge): DataEdge {\n const styles = stylesOf(str(e.attrs, 'style'));\n const dir = str(e.attrs, 'dir') ?? (r.graph.directed ? 'forward' : 'none');\n const end = dir === 'forward' || dir === 'both' ? marker(r, str(e.attrs, 'arrowhead')) : null;\n const start = dir === 'back' || dir === 'both' ? marker(r, str(e.attrs, 'arrowtail')) : null;\n const stroke = str(e.attrs, 'color');\n const label = str(e.attrs, 'fontcolor');\n const width = str(e.attrs, 'penwidth');\n const dash = dashOf(styles);\n const colors: Partial<EdgeStyle> = {\n ...(stroke !== undefined ? { stroke: dotColor(stroke) } : {}),\n ...(label !== undefined ? { label: dotColor(label) } : {}),\n ...(width !== undefined ? { width: Number(width) } : {}),\n ...(dash !== undefined ? { dash } : {}),\n ...(start !== null ? { markerStart: start } : {}),\n ...(end !== 'arrow' ? { markerEnd: end } : {}),\n };\n const fromPort = portOf(r, e.tail, str(e.attrs, 'tailport'));\n const toPort = portOf(r, e.head, str(e.attrs, 'headport'));\n const text = e.attrs.get('label');\n const lines = text === undefined ? [] : labelLines(text, '', r.graph.id ?? '');\n return {\n from: e.tail.id, to: e.head.id,\n ...(fromPort !== undefined ? { fromPort } : {}),\n ...(toPort !== undefined ? { toPort } : {}),\n ...(lines.length > 0 ? { label: lines.join(' ') } : {}),\n ...(Object.keys(colors).length > 0 ? { colors } : {}),\n };\n}\n\nfunction readCluster(r: DotReader, id: string, attrs: Attrs, ids: ReadonlyMap<string, string>): DataContainer {\n const styles = stylesOf(str(attrs, 'style'));\n const fill = str(attrs, 'fillcolor') ?? str(attrs, 'color') ?? str(attrs, 'bgcolor');\n const bg = str(attrs, 'bgcolor');\n const stroke = str(attrs, 'pencolor') ?? str(attrs, 'color');\n const text = str(attrs, 'fontcolor');\n const colors: Partial<NodeStyle> = {\n ...(styles.includes('filled') && fill !== undefined ? { fill: dotColor(fill) } : bg !== undefined ? { fill: dotColor(bg) } : {}),\n ...(stroke !== undefined ? { stroke: dotColor(stroke) } : {}),\n ...(text !== undefined ? { text: dotColor(text) } : {}),\n };\n const label = attrs.get('label');\n const lines = label === undefined ? [] : labelLines(label, id, r.graph.id ?? '');\n const members = r.membership.members(id).map((m) => ids.get(m) ?? m);\n return {\n id: ids.get(id)!, role: 'container',\n ...(lines.length > 0 ? { label: lines.join(' ') } : {}),\n ...(members.length > 0 ? { members } : {}),\n ...(Object.keys(colors).length > 0 ? { colors } : {}),\n };\n}\n\n/** Container ids for clusters: the name less its `cluster` prefix, where that is free. */\nfunction clusterIds(clusters: Iterable<string>, nodes: ReadonlyMap<string, unknown>): Map<string, string> {\n const taken = new Set([...nodes.keys()]);\n const out = new Map<string, string>();\n for (const id of clusters) {\n const short = id.replace(/^cluster_?/, '');\n const pick = short !== '' && !taken.has(short) && !out.has(short) ? short : id;\n taken.add(pick);\n out.set(id, pick);\n }\n return out;\n}\n\n/** Reads DOT source into a one-page document. Throws, naming the line, on text that is not a DOT graph. */\nexport function readDot(text: string): ImportResult {\n const graph = parseDot(text);\n const r = new DotReader(graph);\n const root: Scope = { kind: 'root', graph: new Map(), node: new Map(), edge: new Map(), cluster: null };\n r.walk(graph.stmts, root);\n let nodes = [...r.nodes].map(([id, attrs]) => readNode(r, id, attrs));\n const placed = positions(nodes, r.nodes, str(root.graph, 'bb'));\n if (placed !== null) nodes = placed.nodes;\n else if ([...r.nodes.values()].some((a) => a.has('pos'))) r.warnings.list('DOT attributes a diagram does not hold were dropped', 'pos');\n const seen = new Set<string>();\n const edges = r.edges.filter((e) => {\n if (!graph.strict) return true;\n const key = graph.directed ? `${e.tail.id}\\u0000${e.head.id}` : [e.tail.id, e.head.id].sort().join('\\u0000');\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n }).map((e) => readEdge(r, e));\n const ids = clusterIds(r.clusters.keys(), r.nodes);\n const containers = [...r.clusters].map(([id, attrs]) => readCluster(r, id, attrs, ids));\n const rankdir = str(root.graph, 'rankdir')?.toUpperCase();\n const name = root.graph.get('label');\n const page = graphPage({\n name: name !== undefined ? labelLines(name, '', graph.id ?? '').join(' ') : graph.id,\n ...(rankdir !== undefined && DIRECTIONS[rankdir] ? { direction: DIRECTIONS[rankdir] } : {}),\n nodes, edges, containers,\n ...(placed !== null ? { size: placed.size } : {}),\n });\n return { document: { pages: [page] }, warnings: r.warnings.all() };\n}\n","/**\n * What the Mermaid and Graphviz DOT writers share: the page they write, its\n * regions and groups as one tree of clusters, each item's drawn style, and\n * the warnings for what neither format holds.\n */\nimport {\n dataEdgeStyle, dataNodeStyle, dataRegionStyle, diagramThemeFrom, type DataEdge, type DataNode, type DiagramTheme,\n type EdgeStyle, type NodeStyle,\n} from '@weasel-js/diagram';\nimport { writtenPage, type DiagramDocument, type DocumentPage, type WriteOptions } from './document';\nimport { Warnings, hex2 } from './graphRead';\n\n/** A container, pool, lane, or group, as the one kind of box a graph format has. */\nexport interface Cluster {\n id: string;\n label?: string;\n /** Its drawn colors; `fill` unset for one that draws none. Unset for a group. */\n style?: Partial<NodeStyle>;\n nodes: string[];\n clusters: Cluster[];\n}\n\n/** One page as a graph format writes it. */\nexport interface GraphOut {\n page: DocumentPage;\n theme: DiagramTheme;\n /** Nodes and clusters at the top level, in order. */\n nodes: DataNode[];\n clusters: Cluster[];\n /** Every node by id, and every cluster's id. */\n byId: ReadonlyMap<string, DataNode>;\n clusterIds: ReadonlySet<string>;\n edges: DataEdge[];\n warnings: Warnings;\n}\n\n/** A node's text, a line per text row. */\nexport function nodeLines(node: DataNode, warnings: Warnings, format: string): string[] {\n if (node.rows === undefined) return [...(node.lines ?? [])];\n const lines: string[] = [];\n for (const row of node.rows) {\n if (row.kind === 'label') lines.push(row.text);\n else if (row.kind === 'field') lines.push(`${row.label}: ${row.value}`);\n else warnings.add(`${format} holds only text in a shape; its port rows and slots were dropped.`);\n }\n return lines;\n}\n\nfunction clusterTree(page: DocumentPage, theme: DiagramTheme, warnings: Warnings, format: string) {\n const parent = new Map<string, string>();\n const claim = (member: string, owner: string) => { if (!parent.has(member) && member !== owner) parent.set(member, owner); };\n const all: Cluster[] = [];\n for (const c of page.data.containers ?? []) {\n all.push({ id: c.id, ...(c.label !== undefined ? { label: c.label } : {}), style: dataRegionStyle(c, theme), nodes: [], clusters: [] });\n for (const m of c.members ?? []) claim(m, c.id);\n if (c.role === 'pool') warnings.add(`${format} has no pools or lanes; they were written as nested ${format === 'DOT' ? 'clusters' : 'subgraphs'}.`);\n (c.lanes ?? []).forEach((lane, i) => {\n const { fill: _fill, ...style } = dataRegionStyle({ role: 'lane', ...(lane.colors ? { colors: lane.colors } : {}) }, theme, i);\n all.push({ id: lane.id, ...(lane.label !== undefined ? { label: lane.label } : {}), style, nodes: [], clusters: [] });\n claim(lane.id, c.id);\n for (const m of lane.members ?? []) claim(m, lane.id);\n });\n }\n for (const g of page.data.groups ?? []) {\n warnings.add(`${format} has no groups; they were written as ${format === 'DOT' ? 'clusters' : 'subgraphs'}, which read back as containers.`);\n all.push({ id: g.id, ...(g.label !== undefined ? { label: g.label } : {}), nodes: [], clusters: [] });\n for (const m of g.members) claim(m, g.id);\n }\n const byId = new Map(all.map((c) => [c.id, c]));\n const roots: Cluster[] = [];\n for (const c of all) {\n const owner = byId.get(parent.get(c.id) ?? '');\n (owner !== undefined ? owner.clusters : roots).push(c);\n }\n const nodes: DataNode[] = [];\n for (const n of page.data.nodes) {\n const owner = byId.get(parent.get(n.id) ?? '');\n if (owner !== undefined) owner.nodes.push(n.id);\n else nodes.push(n);\n }\n return { nodes, clusters: roots, clusterIds: new Set(byId.keys()) };\n}\n\n/** The page `opts` names, ready to write, with the warnings every graph format shares. `null` for a document with no pages. */\nexport function graphOut(doc: DiagramDocument, opts: WriteOptions | undefined, format: string): GraphOut | null {\n const page = writtenPage(doc, opts);\n if (page === null) return null;\n const warnings = new Warnings();\n const theme = diagramThemeFrom(doc.theme);\n const byId = new Map(page.data.nodes.map((n) => [n.id, n]));\n const tree = clusterTree(page, theme, warnings, format);\n if ((doc.crossPageEdges ?? []).some((e) => byId.has(e.from) || byId.has(e.to))) {\n warnings.add(`${format} holds one page; connectors to other pages were dropped.`);\n }\n for (const n of page.data.nodes) {\n if (n.outline !== undefined && typeof n.outline !== 'string') warnings.add(`${format} has no drawn outlines; those shapes were written as rectangles.`);\n if (n.marks !== undefined && n.marks.length > 0) warnings.add(`${format} has no marks; the marks drawn over shapes were dropped.`);\n }\n if (page.data.edges.some((e) => e.waypoints !== undefined && e.waypoints.length > 0)) {\n warnings.add(`${format} holds no routes; connectors' bends were dropped.`);\n }\n return { page, theme, ...tree, byId, edges: [...page.data.edges], warnings };\n}\n\n/** A CSS color in a spelling every graph format reads: `rgb()` and `rgba()` as hex, short hex long. Names pass through. */\nexport function hexColor(css: string): string {\n const short = /^#([\\da-f])([\\da-f])([\\da-f])([\\da-f])?$/i.exec(css);\n if (short !== null) return `#${short.slice(1).filter(Boolean).map((d) => d! + d!).join('')}`;\n const rgb = /^rgba?\\(\\s*([\\d.]+)[\\s,]+([\\d.]+)[\\s,]+([\\d.]+)(?:\\s*[,/]\\s*([\\d.]+)(%?))?\\s*\\)$/i.exec(css);\n if (rgb === null) return css;\n const alpha = rgb[4] === undefined ? '' : hex2(Number(rgb[4]) / (rgb[5] === '%' ? 100 : 1));\n return `#${hex2(Number(rgb[1]) / 255)}${hex2(Number(rgb[2]) / 255)}${hex2(Number(rgb[3]) / 255)}${alpha}`;\n}\n\n/** `style`'s fields that differ from `base`. */\nexport function changed<T extends object>(style: T, base: T): Partial<T> {\n const out: Partial<T> = {};\n for (const key of Object.keys(style) as (keyof T)[]) {\n if (JSON.stringify(style[key]) !== JSON.stringify(base[key])) out[key] = style[key];\n }\n return out;\n}\n\n/** A node's drawn style, and the one every node gets when nothing says otherwise. */\nexport const nodeStyleIn = (out: GraphOut, node?: DataNode): NodeStyle => dataNodeStyle(node ?? {}, out.theme);\n\n/** An edge's drawn style, its arrowhead filled in, and its label color. */\nexport function edgeStyleIn(out: GraphOut, edge?: DataEdge): Required<Pick<EdgeStyle, 'stroke' | 'label'>> & EdgeStyle {\n const style = dataEdgeStyle(edge ?? {}, out.theme);\n return { ...style, label: style.label ?? style.stroke, markerEnd: style.markerEnd === undefined ? 'arrow' : style.markerEnd };\n}\n","/** One page of a document as a Graphviz DOT digraph: regions as clusters, and places as `pos` when every node has one. */\nimport type { DataEdge, DataNode, LayoutDirection } from '@weasel-js/diagram';\nimport type { DiagramDocument, ExportResult, WriteOptions } from '../document';\nimport { changed, edgeStyleIn, graphOut, hexColor, nodeLines, nodeStyleIn, type Cluster, type GraphOut } from '../graphWrite';\nimport { arrowName, quoteLabel, shapeOf } from './values';\n\nconst RANKDIR: Readonly<Record<LayoutDirection, string | null>> = { down: null, up: 'BT', right: 'LR', left: 'RL' };\nconst KEYWORDS = new Set(['node', 'edge', 'graph', 'digraph', 'subgraph', 'strict']);\nconst COMPASS = new Set(['n', 'e', 's', 'w']);\nconst POINTS_PER_INCH = 72;\n\n/** `id` as DOT writes it: bare when it can be, else quoted. */\nexport function dotId(id: string): string {\n const bare = (/^[A-Za-z_\\u0080-][\\w\\u0080-]*$/.test(id) && !KEYWORDS.has(id.toLowerCase()))\n || /^-?(?:\\.\\d+|\\d+(?:\\.\\d*)?)$/.test(id);\n return bare ? id : `\"${id.replace(/\"/g, '\\\\\"')}\"`;\n}\n\nconst attrList = (attrs: readonly (string | null)[]) => {\n const set = attrs.filter((a): a is string => a !== null);\n return set.length > 0 ? ` [${set.join(', ')}]` : '';\n};\nconst color = (key: string, value: string | undefined) => (value === undefined ? null : `${key}=\"${hexColor(value)}\"`);\nconst num = (n: number) => String(Math.round(n * 10000) / 10000);\n\nfunction nodeAttrs(out: GraphOut, node: DataNode, placed: boolean): string {\n const { shape, rounded } = shapeOf(node.outline);\n const own = changed(nodeStyleIn(out, node), nodeStyleIn(out));\n const styles = [rounded ? 'rounded' : null, 'filled', own.dash !== undefined ? 'dashed' : null].filter((s) => s !== null);\n const page = out.page.height;\n return attrList([\n `label=${quoteLabel(nodeLines(node, out.warnings, 'DOT'))}`,\n shape !== 'box' ? `shape=${shape}` : null,\n styles.length > 1 ? `style=\"${styles.join(',')}\"` : null,\n color('fillcolor', own.fill), color('color', own.stroke), color('fontcolor', own.text),\n own.strokeWidth !== undefined ? `penwidth=${own.strokeWidth}` : null,\n placed ? `pos=\"${num(node.at!.x + node.width! / 2)},${num(page - node.at!.y - node.height! / 2)}\"` : null,\n placed ? `width=${num(node.width! / POINTS_PER_INCH)}, height=${num(node.height! / POINTS_PER_INCH)}` : null,\n ]);\n}\n\nfunction writeCluster(out: GraphOut, c: Cluster, placed: boolean, indent: string, lines: string[]): void {\n lines.push(`${indent}subgraph ${dotId(`cluster_${c.id}`)} {`);\n const inner = `${indent} `;\n if (c.label !== undefined) lines.push(`${inner}label=${quoteLabel([c.label])};`);\n if (c.style !== undefined) {\n if (c.style.fill !== undefined) lines.push(`${inner}style=filled;`, `${inner}${color('fillcolor', c.style.fill)};`);\n for (const [key, value] of [['color', c.style.stroke], ['fontcolor', c.style.text]] as const) {\n if (value !== undefined) lines.push(`${inner}${color(key, value)};`);\n }\n }\n for (const id of c.nodes) lines.push(`${inner}${dotId(id)}${nodeAttrs(out, out.byId.get(id)!, placed)};`);\n for (const child of c.clusters) writeCluster(out, child, placed, inner, lines);\n lines.push(`${indent}}`);\n}\n\nfunction endOf(out: GraphOut, id: string, port: string | undefined): string {\n if (port === undefined) return dotId(id);\n if (COMPASS.has(port)) return `${dotId(id)}:${port}`;\n out.warnings.add('DOT has only compass ports; connectors\\' other ports were dropped.');\n return dotId(id);\n}\n\nfunction markerAttrs(out: GraphOut, edge: DataEdge): (string | null)[] {\n const { markerStart, markerEnd } = edgeStyleIn(out, edge);\n const name = (m: typeof markerEnd) => {\n if (m === null || m === undefined) return null;\n const n = arrowName(m);\n if (n === undefined) out.warnings.add('DOT has no arrowhead for some markers; they were written as arrows.');\n return n ?? 'normal';\n };\n const head = name(markerEnd);\n const tail = name(markerStart ?? null);\n const dir = head !== null && tail !== null ? 'both' : head !== null ? null : tail !== null ? 'back' : 'none';\n return [\n dir !== null ? `dir=${dir}` : null,\n head !== null && head !== 'normal' ? `arrowhead=${head}` : null,\n tail !== null && tail !== 'normal' ? `arrowtail=${tail}` : null,\n ];\n}\n\nfunction edgeLine(out: GraphOut, edge: DataEdge): string | null {\n if (!out.byId.has(edge.from) || !out.byId.has(edge.to)) {\n if (out.clusterIds.has(edge.from) || out.clusterIds.has(edge.to)) {\n out.warnings.add('DOT joins nodes only; connectors to containers and groups were dropped.');\n }\n return null;\n }\n const own = changed(edgeStyleIn(out, edge), edgeStyleIn(out));\n return `${endOf(out, edge.from, edge.fromPort)} -> ${endOf(out, edge.to, edge.toPort)}${attrList([\n edge.label !== undefined ? `label=${quoteLabel([edge.label])}` : null,\n color('color', own.stroke), color('fontcolor', own.label),\n own.width !== undefined ? `penwidth=${own.width}` : null,\n own.dash !== undefined ? 'style=dashed' : null,\n ...markerAttrs(out, edge),\n ])};`;\n}\n\n/** Writes the page `opts.page` names, else the first, as a DOT digraph. */\nexport function writeDot(doc: DiagramDocument, opts?: WriteOptions): ExportResult {\n const out = graphOut(doc, opts, 'DOT');\n if (out === null) return { text: 'digraph {\\n}\\n', warnings: [] };\n const { page } = out;\n const placed = page.data.nodes.length > 0\n && page.data.nodes.every((n) => n.at !== undefined && n.width !== undefined && n.height !== undefined);\n const node = nodeStyleIn(out);\n const edge = edgeStyleIn(out);\n const rankdir = page.direction === undefined ? null : RANKDIR[page.direction];\n const lines = [\n `digraph ${page.name !== undefined ? dotId(page.name) : ''}${page.name !== undefined ? ' ' : ''}{`,\n ...(rankdir !== null ? [` rankdir=${rankdir};`] : []),\n ...(placed ? [` bb=\"0,0,${num(page.width)},${num(page.height)}\";`] : []),\n ` node${attrList(['shape=box', 'style=filled', color('fillcolor', node.fill), color('color', node.stroke), color('fontcolor', node.text)])};`,\n ` edge${attrList([color('color', edge.stroke), color('fontcolor', edge.label)])};`,\n ];\n for (const n of out.nodes) lines.push(` ${dotId(n.id)}${nodeAttrs(out, n, placed)};`);\n for (const c of out.clusters) writeCluster(out, c, placed, ' ', lines);\n for (const e of out.edges) {\n const line = edgeLine(out, e);\n if (line !== null) lines.push(` ${line}`);\n }\n lines.push('}');\n return { text: `${lines.join('\\n')}\\n`, warnings: out.warnings.all() };\n}\n","/** Graphviz DOT as a {@link DiagramFormat}. */\nimport type { DiagramFormat } from '../document';\nimport { readDot } from './read';\nimport { writeDot } from './write';\n\nconst COMMENTS = /\\/\\*[\\s\\S]*?\\*\\/|\\/\\/[^\\n]*|^#[^\\n]*/gm;\nconst HEADER = /^\\s*(?:strict\\s+)?(?:di)?graph\\s*(?:[A-Za-z_\\u0080-][\\w\\u0080-]*|-?(?:\\.\\d+|\\d+(?:\\.\\d*)?)|\"(?:[^\"\\\\]|\\\\.)*\")?\\s*\\{/i;\n\n/** A Graphviz DOT graph, one page per file, laid out on import unless every node has a `pos`. */\nexport const DIAGRAM_DOT: DiagramFormat = {\n id: 'graphviz-dot',\n name: 'Graphviz DOT',\n extensions: ['.dot', '.gv'],\n detect: (text) => HEADER.test(text.replace(COMMENTS, '')),\n read: readDot,\n write: writeDot,\n onePage: true,\n};\n","/** The native format: a {@link DiagramDocument} written out as JSON, which carries everything the model holds. */\nimport type { DiagramDocument, DiagramFormat, ExportResult, ImportResult } from './document';\n\nconst FORMAT = 'weasel-diagram';\nconst VERSION = 1;\n\ninterface DiagramJson extends DiagramDocument {\n format: typeof FORMAT;\n version: number;\n}\n\nfunction parsed(text: string): unknown {\n try {\n return JSON.parse(text);\n } catch {\n return null;\n }\n}\n\nconst isDiagramJson = (value: unknown): value is Partial<DiagramJson> =>\n value !== null && typeof value === 'object' && (value as { format?: unknown }).format === FORMAT;\n\nfunction read(text: string): ImportResult {\n const json = parsed(text);\n if (!isDiagramJson(json)) throw new Error('Not a weasel diagram document');\n if (typeof json.version !== 'number' || json.version > VERSION) {\n throw new Error(`A weasel diagram document of version ${String(json.version)}, newer than this reader's ${VERSION}`);\n }\n if (!Array.isArray(json.pages)) throw new Error('A weasel diagram document with no pages list');\n const { format: _f, version: _v, ...document } = json as DiagramJson;\n return { document, warnings: [] };\n}\n\nfunction write(doc: DiagramDocument): ExportResult {\n const json: DiagramJson = { format: FORMAT, version: VERSION, ...doc };\n return { text: `${JSON.stringify(json, null, 2)}\\n`, warnings: [] };\n}\n\n/** A diagram document as JSON, every page in one file, recognized by its `format` field. */\nexport const DIAGRAM_JSON: DiagramFormat = {\n id: FORMAT,\n name: 'Diagram JSON',\n extensions: ['.diagram.json'],\n detect: (text) => isDiagramJson(parsed(text)),\n read,\n write,\n};\n","/**\n * A draw-style XML cell's style string: `key=value` pairs and bare style\n * names, each ending in a semicolon, as in `ellipse;fillColor=#fff;`.\n */\n\n/** A parsed style string: its bare names in order, and its pairs, a later one winning. */\nexport interface CellStyle {\n names: readonly string[];\n values: ReadonlyMap<string, string>;\n}\n\n/** Reads a style string. A missing one is empty. */\nexport function parseStyle(text: string | null | undefined): CellStyle {\n const names: string[] = [];\n const values = new Map<string, string>();\n for (const token of (text ?? '').split(';')) {\n const part = token.trim();\n if (part === '') continue;\n const eq = part.indexOf('=');\n if (eq < 0) names.push(part);\n else values.set(part.slice(0, eq), part.slice(eq + 1));\n }\n return { names, values };\n}\n\n/** A pair's value as a number, or `undefined` when it is missing or not one. */\nexport function styleNumber(style: CellStyle, key: string): number | undefined {\n const raw = style.values.get(key);\n if (raw === undefined || raw.trim() === '') return undefined;\n const n = Number(raw);\n return Number.isFinite(n) ? n : undefined;\n}\n\n/** Whether a pair is set to `1`. */\nexport const styleFlag = (style: CellStyle, key: string): boolean => style.values.get(key) === '1';\n\n/** Whether the style has `name` as a bare name, or as its `shape`. */\nexport const hasStyleName = (style: CellStyle, name: string): boolean =>\n style.names.includes(name) || style.values.get('shape') === name;\n\n/** The shape a style draws: its `shape` pair, else its first bare name. */\nexport function shapeOf(style: CellStyle): string | undefined {\n return style.values.get('shape') ?? style.names[0];\n}\n\n/** One part of a style to write: a bare name, or a pair, left out when its value is `undefined`. */\nexport type StylePart = string | readonly [string, string | number | undefined];\n\n/** Writes a style string, every part ending in a semicolon. A value loses any semicolon, which would end it early. */\nexport function writeStyle(parts: readonly StylePart[]): string {\n let out = '';\n for (const part of parts) {\n if (typeof part === 'string') out += `${part.replace(/[;=]/g, '')};`;\n else if (part[1] !== undefined) out += `${part[0]}=${String(part[1]).replace(/;/g, '')};`;\n }\n return out;\n}\n","/** The cells of a draw-style graph model, read off its XML as they are, before they mean anything to a diagram. */\nimport type { Vec2 } from '@weasel-js/core/math';\nimport { parseStyle, type CellStyle } from './style';\n\n/** One cell element, with a wrapper's id and label read in. */\nexport interface RawCell {\n id: string;\n parent: string | null;\n value: string;\n style: CellStyle;\n vertex: boolean;\n edge: boolean;\n source: string | null;\n target: string | null;\n geometry: Element | null;\n}\n\n/** A cell's geometry: its box, relative to its parent's origin, and whether it is a fraction along an edge instead. */\nexport interface CellGeometry {\n x: number;\n y: number;\n width: number;\n height: number;\n relative: boolean;\n}\n\n/** The elements that wrap a cell to give it properties of its own, holding its id and its label. */\nconst WRAPPERS = new Set(['UserObject', 'object']);\n\nconst numberAttr = (el: Element | null, name: string): number => {\n const n = Number(el?.getAttribute(name) ?? '0');\n return Number.isFinite(n) ? n : 0;\n};\n\nconst childElements = (el: Element): Element[] => Array.from(el.childNodes).filter((n): n is Element => n.nodeType === 1);\n\nfunction rawCell(outer: Element, cell: Element, index: number): RawCell {\n const wrapped = outer !== cell;\n const id = outer.getAttribute('id') ?? cell.getAttribute('id') ?? `cell-${index + 1}`;\n const value = wrapped ? outer.getAttribute('label') ?? '' : cell.getAttribute('value') ?? '';\n return {\n id,\n parent: cell.getAttribute('parent'),\n value,\n style: parseStyle(cell.getAttribute('style')),\n vertex: cell.getAttribute('vertex') === '1',\n edge: cell.getAttribute('edge') === '1',\n source: cell.getAttribute('source'),\n target: cell.getAttribute('target'),\n geometry: childElements(cell).find((c) => c.tagName === 'mxGeometry') ?? null,\n };\n}\n\n/** The cells under a graph model's `root`, in document order. */\nexport function cellsOf(model: Element): RawCell[] {\n const root = childElements(model).find((c) => c.tagName === 'root');\n if (root === undefined) return [];\n const out: RawCell[] = [];\n for (const el of childElements(root)) {\n if (el.tagName === 'mxCell') out.push(rawCell(el, el, out.length));\n else if (WRAPPERS.has(el.tagName)) {\n const inner = childElements(el).find((c) => c.tagName === 'mxCell');\n if (inner !== undefined) out.push(rawCell(el, inner, out.length));\n }\n }\n return out;\n}\n\n/** A cell's geometry. A missing one is an empty box at the origin. */\nexport function geometryOf(cell: RawCell): CellGeometry {\n const g = cell.geometry;\n return {\n x: numberAttr(g, 'x'), y: numberAttr(g, 'y'), width: numberAttr(g, 'width'), height: numberAttr(g, 'height'),\n relative: g?.getAttribute('relative') === '1',\n };\n}\n\n/** An edge geometry's bend points, relative to its parent's origin. */\nexport function pointsOf(cell: RawCell): Vec2[] {\n const array = cell.geometry === null ? undefined\n : childElements(cell.geometry).find((c) => c.tagName === 'Array' && c.getAttribute('as') === 'points');\n if (array === undefined) return [];\n return childElements(array).filter((p) => p.tagName === 'mxPoint').map((p) => ({ x: numberAttr(p, 'x'), y: numberAttr(p, 'y') }));\n}\n","/**\n * A graph model's cells sorted into what a diagram holds — shapes, containers,\n * pools, lanes, groups, edges, and edge labels — with their boxes on the page.\n */\nimport type { Vec2 } from '@weasel-js/core/math';\nimport { cellsOf, geometryOf, type RawCell } from './cells';\nimport { hasStyleName, styleFlag, styleNumber } from './style';\n\n/** What a cell is to a diagram. `layer` covers the root and the layers, which hold the rest. */\nexport type CellKind = 'layer' | 'shape' | 'container' | 'pool' | 'lane' | 'group' | 'edge' | 'label';\n\n/** A box on the page. */\nexport interface Box { x: number; y: number; width: number; height: number }\n\n/** A page's cells, sorted, and how to place them. */\nexport interface PageCells {\n cells: readonly RawCell[];\n kindOf(cell: RawCell): CellKind;\n /** Vertex children of a cell, in document order. */\n childrenOf(id: string): readonly RawCell[];\n /** The page point a cell's children measure from: the corner of every vertex above it. */\n originOf(id: string | null): Vec2;\n /** A vertex's box on the page. */\n boxOf(cell: RawCell): Box;\n /** The container, pool, or lane a cell sits in, through any groups and shapes between, or `null`. */\n regionOf(cell: RawCell): RawCell | null;\n /** How many layers the page has. */\n layers: number;\n}\n\n/** Lanes span a pool's body across its stack; a swimlane holding swimlanes that do not is a container of containers. */\nconst SPAN = 0.9;\n\nconst isSwimlane = (cell: RawCell): boolean => hasStyleName(cell.style, 'swimlane');\n\n/** Whether a swimlane's swimlane children are its lanes. */\nfunction holdsLanes(cell: RawCell, children: readonly RawCell[]): boolean {\n const lanes = children.filter(isSwimlane);\n if (lanes.length === 0) return false;\n const box = geometryOf(cell);\n const head = styleNumber(cell.style, 'startSize') ?? 0;\n const rows = cell.style.values.get('horizontal') === '0';\n const across = rows ? box.width - head : box.height - head;\n return lanes.every((lane) => (rows ? geometryOf(lane).width : geometryOf(lane).height) >= across * SPAN);\n}\n\n/** Sorts a graph model's cells. */\nexport function pageCells(model: Element): PageCells {\n const cells = cellsOf(model);\n const byId = new Map(cells.map((c) => [c.id, c]));\n const children = new Map<string, RawCell[]>();\n for (const cell of cells) {\n if (!cell.vertex || cell.parent === null) continue;\n children.set(cell.parent, [...(children.get(cell.parent) ?? []), cell]);\n }\n const childrenOf = (id: string): readonly RawCell[] => children.get(id) ?? [];\n const kinds = new Map<RawCell, CellKind>();\n const kindOf = (cell: RawCell): CellKind => {\n let kind = kinds.get(cell);\n if (kind === undefined) {\n kind = classify(cell);\n kinds.set(cell, kind);\n }\n return kind;\n };\n const classify = (cell: RawCell): CellKind => {\n if (cell.edge) return 'edge';\n if (!cell.vertex) return 'layer';\n const parent = cell.parent === null ? undefined : byId.get(cell.parent);\n if (parent?.edge === true) return 'label';\n if (hasStyleName(cell.style, 'group')) return 'group';\n if (isSwimlane(cell)) {\n if (parent !== undefined && kindOf(parent) === 'pool') return 'lane';\n return holdsLanes(cell, childrenOf(cell.id)) ? 'pool' : 'container';\n }\n return styleFlag(cell.style, 'container') ? 'container' : 'shape';\n };\n\n const origins = new Map<string, Vec2>();\n const originOf = (id: string | null): Vec2 => {\n const cell = id === null ? undefined : byId.get(id);\n if (cell === undefined || !cell.vertex || kindOf(cell) === 'label') return { x: 0, y: 0 };\n let origin = origins.get(cell.id);\n if (origin === undefined) {\n const up = originOf(cell.parent);\n const g = geometryOf(cell);\n origin = { x: up.x + g.x, y: up.y + g.y };\n origins.set(cell.id, origin);\n }\n return origin;\n };\n const boxOf = (cell: RawCell): Box => {\n const { x, y } = originOf(cell.id);\n const g = geometryOf(cell);\n return { x, y, width: g.width, height: g.height };\n };\n const regionOf = (cell: RawCell): RawCell | null => {\n for (let up = byId.get(cell.parent ?? ''); up !== undefined; up = byId.get(up.parent ?? '')) {\n const kind = kindOf(up);\n if (kind === 'container' || kind === 'pool' || kind === 'lane') return up;\n if (kind !== 'group' && kind !== 'shape') return null;\n }\n return null;\n };\n const layers = cells.filter((c) => !c.vertex && !c.edge && c.parent !== null && byId.get(c.parent)?.parent === null).length;\n return { cells, kindOf, childrenOf, originOf, boxOf, regionOf, layers };\n}\n","/** A cell's `value` as lines of text: plain, or HTML with its tags stripped and its breaks kept. */\n\nconst NAMED: Readonly<Record<string, string>> = { amp: '&', lt: '<', gt: '>', quot: '\"', apos: \"'\", nbsp: ' ' };\n\nfunction decodeEntities(s: string): string {\n return s.replace(/&(#x[0-9a-f]+|#[0-9]+|[a-z]+);/gi, (whole, name: string) => {\n if (name[0] === '#') {\n const code = name[1] === 'x' || name[1] === 'X' ? parseInt(name.slice(2), 16) : parseInt(name.slice(1), 10);\n return Number.isFinite(code) && code <= 0x10ffff ? String.fromCodePoint(code) : whole;\n }\n return NAMED[name.toLowerCase()] ?? whole;\n });\n}\n\nconst OPEN = '\\u0001';\nconst CLOSE = '\\u0002';\n\n/** HTML as text, where a break is a line break and a block starts and ends a line, as a browser lays it out. */\nfunction htmlText(html: string): string {\n const marked = html\n .replace(/<br\\s*\\/?>/gi, '\\n')\n .replace(/<(div|p|li|h[1-6])\\b[^>]*>/gi, OPEN)\n .replace(/<\\/(div|p|li|h[1-6])\\s*>/gi, CLOSE)\n .replace(/<[^>]*>/g, '');\n let out = '';\n for (const ch of marked) {\n const atLineStart = out === '' || out.endsWith('\\n');\n if (ch === OPEN || ch === CLOSE) {\n if (!atLineStart) out += '\\n';\n } else {\n out += ch;\n }\n }\n return decodeEntities(out);\n}\n\n/** `value` as lines. With `html`, tags are stripped, `<br>` and block elements break lines, and entities are decoded. Empty lines at either end are dropped. */\nexport function cellLines(value: string, html: boolean): string[] {\n const lines = (html ? htmlText(value) : value).replace(/\\r\\n?/g, '\\n').replace(/ /g, ' ').split('\\n');\n while (lines.length > 0 && lines[0]!.trim() === '') lines.shift();\n while (lines.length > 0 && lines[lines.length - 1]!.trim() === '') lines.pop();\n return lines;\n}\n","/** What a draw-style XML style name means in a diagram, read and written from the one table each. */\nimport type { MarkerRef } from '@weasel-js/core';\nimport type { Outline } from '@weasel-js/diagram';\n\n/** The arc size, in percent, at and past which a rounded rect has round ends and reads as a stadium. */\nexport const STADIUM_ARC = 50;\n\n/** Shapes by their style name, each with the style that writes it back. */\nexport const SHAPES: ReadonlyArray<{ name: string; outline: Exclude<Outline, object>; write: readonly (string | [string, string | number])[] }> = [\n { name: 'rhombus', outline: 'diamond', write: ['rhombus'] },\n { name: 'ellipse', outline: 'ellipse', write: ['ellipse'] },\n { name: 'hexagon', outline: 'hexagon', write: [['shape', 'hexagon'], ['perimeter', 'hexagonPerimeter2'], ['size', 0.2]] },\n { name: 'parallelogram', outline: 'parallelogram', write: [['shape', 'parallelogram'], ['perimeter', 'parallelogramPerimeter'], ['size', 0.2]] },\n {\n name: 'trapezoid', outline: 'trapezoid',\n write: [['shape', 'trapezoid'], ['perimeter', 'trapezoidPerimeter'], ['direction', 'north'], ['size', 0.25]],\n },\n];\n\n/** Style names that draw a plain box. */\nexport const BOX_NAMES: ReadonlySet<string> = new Set(['rect', 'rectangle', 'text', 'label']);\n\n/** Edge styles that route at right angles. */\nexport const ORTHOGONAL_EDGE_STYLES: ReadonlySet<string> = new Set(['orthogonalEdgeStyle', 'elbowEdgeStyle', 'entityRelationEdgeStyle']);\n\n/** Arrowheads by their style name, and whether a `Fill` of `0` makes one hollow. */\nconst MARKERS_READ: Readonly<Record<string, { filled: MarkerRef; hollow?: MarkerRef }>> = {\n classic: { filled: 'arrow' }, classicThin: { filled: 'arrow' }, block: { filled: 'arrow', hollow: 'arrow-open' },\n blockThin: { filled: 'arrow', hollow: 'arrow-open' }, open: { filled: 'arrow-open' }, openThin: { filled: 'arrow-open' },\n diamond: { filled: 'diamond', hollow: 'diamond-hollow' }, diamondThin: { filled: 'diamond', hollow: 'diamond-hollow' },\n oval: { filled: 'circle' }, box: { filled: 'square' }, dash: { filled: 'bar' },\n};\n\n/** The marker an arrowhead style name draws as, `null` for none, or `undefined` for a name it does not know. */\nexport function markerOf(name: string, fill: string | undefined): MarkerRef | null | undefined {\n if (name === 'none' || name === '') return null;\n const known = MARKERS_READ[name];\n if (known === undefined) return undefined;\n return fill === '0' && known.hollow !== undefined ? known.hollow : known.filled;\n}\n\nconst MARKERS_WRITE: Readonly<Record<string, readonly [string, 0 | 1]>> = {\n 'arrow': ['block', 1], 'arrow-concave': ['classic', 1], 'arrow-open': ['open', 0], 'diamond': ['diamond', 1],\n 'diamond-hollow': ['diamond', 0], 'circle': ['oval', 1], 'square': ['box', 1], 'bar': ['dash', 1],\n};\n\n/** The arrowhead style name and fill a marker writes as; `undefined` for a marker the format has none like. */\nexport function markerStyle(marker: MarkerRef | null | undefined): readonly [string, 0 | 1] | undefined {\n if (marker === null || marker === undefined) return ['none', 1];\n return MARKERS_WRITE[typeof marker === 'string' ? marker : marker.key];\n}\n","/** What one cell's style and value say in diagram terms: an outline, colors, text, a router, markers, ports. */\nimport type { MarkerRef } from '@weasel-js/core';\nimport {\n DEFAULT_PORTS, type DataNode, type DiagramLabel, type DiagramRouter, type EdgeStyle, type NodeStyle, type Outline, type Row,\n type RowTextStyle,\n} from '@weasel-js/diagram';\nimport type { CellGeometry, RawCell } from './cells';\nimport { cellLines } from './cellText';\nimport { BOX_NAMES, ORTHOGONAL_EDGE_STYLES, SHAPES, STADIUM_ARC, markerOf } from './mapping';\nimport { hasStyleName, shapeOf, styleFlag, styleNumber, type CellStyle } from './style';\n\n/** Records one sentence about what a file had that a diagram cannot hold. */\nexport type Warn = (message: string) => void;\n\n/** The outline a vertex draws as. A shape it does not know is a rect, with a warning. */\nexport function outlineOf(style: CellStyle, warn: Warn): Outline {\n const shape = shapeOf(style);\n const known = SHAPES.find((s) => s.name === shape);\n if (known !== undefined) return known.outline;\n if (styleFlag(style, 'rounded') && (styleNumber(style, 'arcSize') ?? 0) >= STADIUM_ARC) return 'stadium';\n if (shape !== undefined && !BOX_NAMES.has(shape)) warn(`Shapes of kind \"${shape}\" were drawn as rects.`);\n return 'rect';\n}\n\n/** A color value: `none` is transparent, and `default` or nothing is unset. */\nfunction colorOf(style: CellStyle, key: string, otherwise?: string): string | undefined {\n const raw = style.values.get(key);\n if (raw === undefined || raw === '' || raw === 'default') return otherwise;\n return raw === 'none' ? 'transparent' : raw;\n}\n\nfunction dashOf(style: CellStyle): number[] | undefined {\n if (!styleFlag(style, 'dashed')) return undefined;\n const pattern = (style.values.get('dashPattern') ?? '').split(/\\s+/).map(Number).filter((n) => Number.isFinite(n) && n > 0);\n return pattern.length > 0 ? pattern : [3, 3];\n}\n\nconst defined = <T extends object>(o: { [K in keyof T]?: T[K] | undefined }): Partial<T> | undefined => {\n const out = Object.fromEntries(Object.entries(o).filter(([, v]) => v !== undefined)) as Partial<T>;\n return Object.keys(out).length > 0 ? out : undefined;\n};\n\n/** The colors a vertex's style names. A text cell draws no fill or stroke unless it says otherwise. */\nexport function nodeColorsOf(style: CellStyle): Partial<NodeStyle> | undefined {\n const bare = hasStyleName(style, 'text') ? 'transparent' : undefined;\n return defined<NodeStyle>({\n fill: colorOf(style, 'fillColor', bare), stroke: colorOf(style, 'strokeColor', bare), text: colorOf(style, 'fontColor'),\n strokeWidth: styleNumber(style, 'strokeWidth'), dash: dashOf(style),\n });\n}\n\n/** A cell's value as text. */\nexport const valueLines = (cell: RawCell): string[] => cellLines(cell.value, styleFlag(cell.style, 'html'));\n\n/** A vertex's text: plain lines, or label rows when its style sets a font. */\nexport function textOf(cell: RawCell): Pick<DataNode, 'lines' | 'rows'> {\n const lines = valueLines(cell);\n const fontStyle = styleNumber(cell.style, 'fontStyle');\n const style = defined<RowTextStyle>({\n fontSize: styleNumber(cell.style, 'fontSize'),\n fontFamily: cell.style.values.get('fontFamily') || undefined,\n bold: fontStyle !== undefined && (fontStyle & 1) === 1 ? true : undefined,\n });\n if (style === undefined) return { lines };\n return { rows: lines.map((text): Row => ({ kind: 'label', text, style })) };\n}\n\nconst VERTICAL: Readonly<Record<string, DataNode['verticalAlign']>> = { top: 'top', middle: 'center', bottom: 'bottom' };\n\n/** Where a vertex's text sits, when its style says. */\nexport const verticalAlignOf = (style: CellStyle): DataNode['verticalAlign'] => VERTICAL[style.values.get('verticalAlign') ?? ''];\n\n/** The router an edge style draws with. */\nexport function routerOf(style: CellStyle): DiagramRouter {\n if (styleFlag(style, 'curved')) return 'bezier';\n return ORTHOGONAL_EDGE_STYLES.has(style.values.get('edgeStyle') ?? '') ? 'orthogonal' : 'straight';\n}\n\nfunction markerAt(style: CellStyle, end: 'start' | 'end', warn: Warn): MarkerRef | null {\n const name = style.values.get(`${end}Arrow`) ?? (end === 'end' ? 'classic' : 'none');\n const marker = markerOf(name, style.values.get(`${end}Fill`));\n if (marker !== undefined) return marker;\n warn(`Arrowheads of kind \"${name}\" were drawn as arrows.`);\n return 'arrow';\n}\n\n/** The stroke, label color, and markers an edge style names. Markers are kept only where they differ from a connector's own. */\nexport function edgeColorsOf(style: CellStyle, warn: Warn): Partial<EdgeStyle> | undefined {\n const start = markerAt(style, 'start', warn);\n const end = markerAt(style, 'end', warn);\n return defined<EdgeStyle>({\n stroke: colorOf(style, 'strokeColor'), label: colorOf(style, 'fontColor'),\n width: styleNumber(style, 'strokeWidth'), dash: dashOf(style),\n markerStart: start === null ? undefined : start,\n markerEnd: end === 'arrow' ? undefined : end,\n });\n}\n\n/** The compass port nearest an exit or entry point given as fractions of the box, or `undefined` for none. */\nexport function portAt(style: CellStyle, end: 'exit' | 'entry'): string | undefined {\n const u = styleNumber(style, `${end}X`);\n const v = styleNumber(style, `${end}Y`);\n if (u === undefined || v === undefined) return undefined;\n let best = DEFAULT_PORTS[0]!;\n for (const port of DEFAULT_PORTS) {\n if (Math.hypot(port.at.u - u, port.at.v - v) < Math.hypot(best.at.u - u, best.at.v - v)) best = port;\n }\n return best.id;\n}\n\n/** Where a label sits along its edge, from an edge or edge-label geometry: `x` runs from -1 to 1, and `y` is how far off the line. */\nexport function labelPlacementOf(cell: RawCell, geo: CellGeometry): DiagramLabel | undefined {\n const g = cell.geometry;\n if (g === null || (!g.hasAttribute('x') && !g.hasAttribute('y'))) return undefined;\n const fraction = Math.min(1, Math.max(0, geo.x / 2 + 0.5));\n const at = fraction === 0.5 ? 'mid' : fraction === 0 ? 'start' : fraction === 1 ? 'end' : fraction;\n return { at, ...(geo.y !== 0 ? { offset: geo.y } : {}) };\n}\n","/** One draw-style graph model as a {@link DocumentPage}. */\nimport type { Vec2 } from '@weasel-js/core/math';\nimport type { DataContainer, DataEdge, DataGroup, DataLane, DataNode, DiagramData } from '@weasel-js/diagram';\nimport type { DocumentPage } from '../document';\nimport { PAGE_MARGIN } from '../pageLayout';\nimport { shiftData } from '../shiftData';\nimport { geometryOf, pointsOf, type RawCell } from './cells';\nimport { pageCells, type Box, type PageCells } from './pageCells';\nimport {\n edgeColorsOf, labelPlacementOf, nodeColorsOf, outlineOf, portAt, routerOf, textOf, valueLines, verticalAlignOf, type Warn,\n} from './readStyle';\n\n/** The ids a document has handed out, so a cell id an earlier page used is renamed rather than shared. */\nexport type IdSpace = Set<string>;\n\n/** Where a page's name and size come from. */\nexport interface PageSource { id: string; name?: string; width?: number; height?: number }\n\nconst optional = <K extends string, V>(key: K, value: V | undefined): { [P in K]?: V } =>\n (value === undefined ? {} : { [key]: value }) as { [P in K]?: V };\n\n/** A unique id for `cellId`: itself, else prefixed with its page's, else numbered. */\nfunction claim(ids: IdSpace, cellId: string, pageId: string): string {\n let id = ids.has(cellId) ? `${pageId}:${cellId}` : cellId;\n for (let n = 2; ids.has(id); n++) id = `${pageId}:${cellId}-${n}`;\n ids.add(id);\n return id;\n}\n\ninterface Reader { page: PageCells; idOf: ReadonlyMap<RawCell, string>; warn: Warn }\n\nconst labelOf = (cell: RawCell): string | undefined => {\n const text = valueLines(cell).join(' ');\n return text === '' ? undefined : text;\n};\n\nfunction readNode({ page, idOf, warn }: Reader, cell: RawCell): DataNode {\n const box = page.boxOf(cell);\n return {\n id: idOf.get(cell)!,\n outline: outlineOf(cell.style, warn),\n ...textOf(cell),\n at: { x: box.x, y: box.y },\n width: box.width,\n height: box.height,\n ...optional('verticalAlign', verticalAlignOf(cell.style)),\n ...optional('colors', nodeColorsOf(cell.style)),\n };\n}\n\n/** The shapes and containers sitting directly in `region`, past any groups between. */\nfunction membersOf({ page, idOf }: Reader, region: RawCell): string[] {\n return page.cells\n .filter((c) => (page.kindOf(c) === 'shape' || page.kindOf(c) === 'container') && page.regionOf(c) === region)\n .map((c) => idOf.get(c)!);\n}\n\nfunction readRegion(r: Reader, cell: RawCell): DataContainer {\n const { page, idOf } = r;\n const id = idOf.get(cell)!;\n const box = page.boxOf(cell);\n const common = { id, ...optional('label', labelOf(cell)), box, ...optional('colors', nodeColorsOf(cell.style)) };\n if (page.kindOf(cell) === 'container') {\n const members = membersOf(r, cell);\n return { ...common, role: 'container', ...(members.length > 0 ? { members } : {}) };\n }\n const axis = cell.style.values.get('horizontal') === '0' ? 'y' : 'x';\n const start = (b: Box) => (axis === 'y' ? b.y : b.x);\n const lanes = page.childrenOf(cell.id).filter((c) => page.kindOf(c) === 'lane')\n .sort((p, q) => start(page.boxOf(p)) - start(page.boxOf(q)))\n .map((lane): DataLane => {\n const b = page.boxOf(lane);\n const members = membersOf(r, lane);\n return {\n id: idOf.get(lane)!, ...optional('label', labelOf(lane)), size: axis === 'y' ? b.height : b.width,\n ...(members.length > 0 ? { members } : {}), ...optional('colors', nodeColorsOf(lane.style)),\n };\n });\n return { ...common, role: 'pool', axis, lanes };\n}\n\nfunction readGroup({ page, idOf }: Reader, cell: RawCell): DataGroup | null {\n const members = page.childrenOf(cell.id).filter((c) => page.kindOf(c) === 'shape' || page.kindOf(c) === 'group').map((c) => idOf.get(c)!);\n return members.length === 0 ? null : { id: idOf.get(cell)!, members };\n}\n\nconst moved = (p: Vec2, by: Vec2): Vec2 => ({ x: p.x + by.x, y: p.y + by.y });\n\nfunction readEdge({ page, idOf, warn }: Reader, cell: RawCell, byCellId: ReadonlyMap<string, RawCell>): DataEdge | null {\n const end = (id: string | null) => {\n const target = id === null ? undefined : byCellId.get(id);\n return target === undefined || page.kindOf(target) === 'edge' || page.kindOf(target) === 'label' ? undefined : idOf.get(target);\n };\n const from = end(cell.source);\n const to = end(cell.target);\n if (from === undefined || to === undefined) {\n warn('Connectors with a loose end, or with an end on another connector, were left out.');\n return null;\n }\n const origin = page.originOf(cell.parent);\n const points = pointsOf(cell).map((p) => moved(p, origin));\n const labels = page.childrenOf(cell.id).filter((c) => labelOf(c) !== undefined);\n const holder = labelOf(cell) !== undefined ? cell : labels[0];\n if (labels.length + (holder === cell ? 1 : 0) > 1) warn('Connectors with more than one label kept only the first.');\n return {\n id: idOf.get(cell)!, from, to, router: routerOf(cell.style),\n ...optional('fromPort', portAt(cell.style, 'exit')),\n ...optional('toPort', portAt(cell.style, 'entry')),\n ...(points.length > 0 ? { waypoints: points } : {}),\n ...(holder !== undefined ? { label: labelOf(holder)!, ...optional('labelPlacement', labelPlacementOf(holder, geometryOf(holder))) } : {}),\n ...optional('colors', edgeColorsOf(cell.style, warn)),\n };\n}\n\n/** What sits left of or above the page moves onto it, and the page grows to hold what is on it. */\nfunction fitted(data: DiagramData, src: PageSource): { data: DiagramData; width: number; height: number } {\n const boxes: Box[] = [\n ...data.nodes.map((n) => ({ ...n.at!, width: n.width ?? 0, height: n.height ?? 0 })),\n ...(data.containers ?? []).map((c) => c.box!),\n ];\n if (boxes.length === 0) return { data, width: src.width ?? 2 * PAGE_MARGIN, height: src.height ?? 2 * PAGE_MARGIN };\n const minX = Math.min(...boxes.map((b) => b.x));\n const minY = Math.min(...boxes.map((b) => b.y));\n const by = { x: minX < 0 ? PAGE_MARGIN - minX : 0, y: minY < 0 ? PAGE_MARGIN - minY : 0 };\n const right = Math.max(...boxes.map((b) => b.x + b.width)) + by.x + PAGE_MARGIN;\n const bottom = Math.max(...boxes.map((b) => b.y + b.height)) + by.y + PAGE_MARGIN;\n return {\n data: shiftData(data, by),\n width: Math.max(src.width ?? 0, Math.ceil(right)),\n height: Math.max(src.height ?? 0, Math.ceil(bottom)),\n };\n}\n\n/** Reads one graph model as a page. Cell ids an earlier page claimed in `ids` are renamed. */\nexport function readPage(model: Element, src: PageSource, ids: IdSpace, warn: Warn): DocumentPage {\n const page = pageCells(model);\n const label = src.name !== undefined ? `\"${src.name}\"` : 'the page';\n if (page.layers > 1) warn(`The ${page.layers} layers on ${label} were merged into one.`);\n const idOf = new Map<RawCell, string>();\n for (const cell of page.cells) {\n if (page.kindOf(cell) !== 'layer' && page.kindOf(cell) !== 'label') idOf.set(cell, claim(ids, cell.id, src.id));\n }\n const reader: Reader = { page, idOf, warn };\n const byCellId = new Map(page.cells.map((c) => [c.id, c]));\n const of = (kind: string) => page.cells.filter((c) => page.kindOf(c) === kind);\n const groups = of('group').map((c) => readGroup(reader, c)).filter((g): g is DataGroup => g !== null);\n const containers = page.cells.filter((c) => page.kindOf(c) === 'container' || page.kindOf(c) === 'pool').map((c) => readRegion(reader, c));\n const data: DiagramData = {\n nodes: of('shape').map((c) => readNode(reader, c)),\n edges: of('edge').map((c) => readEdge(reader, c, byCellId)).filter((e): e is DataEdge => e !== null),\n ...(groups.length > 0 ? { groups } : {}),\n ...(containers.length > 0 ? { containers } : {}),\n };\n const fit = fitted(data, src);\n return { id: src.id, ...optional('name', src.name), width: fit.width, height: fit.height, data: fit.data };\n}\n","/**\n * Reading draw-style XML: a file of `<diagram>` pages, each a graph model\n * written out or compressed, or one bare graph model.\n */\nimport type { DocumentPage, ImportResult } from '../document';\nimport { readPage, type IdSpace } from './readPage';\n\nconst childElements = (el: Element): Element[] => Array.from(el.childNodes).filter((n): n is Element => n.nodeType === 1);\n\nfunction parseXml(text: string, what: string): Element {\n const doc = new DOMParser().parseFromString(text, 'application/xml');\n const error = doc.getElementsByTagName('parsererror')[0];\n if (error !== undefined) throw new Error(`${what} is not well-formed XML: ${(error.textContent ?? '').trim().split('\\n')[0]}`);\n return doc.documentElement;\n}\n\nasync function inflateRaw(bytes: Uint8Array): Promise<Uint8Array> {\n const stream = new DecompressionStream('deflate-raw');\n const writer = stream.writable.getWriter();\n writer.write(bytes as unknown as BufferSource).then(() => writer.close()).catch(() => undefined);\n const reader = stream.readable.getReader();\n const chunks: Uint8Array[] = [];\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n chunks.push(value as Uint8Array);\n }\n const out = new Uint8Array(chunks.reduce((n, c) => n + c.length, 0));\n let at = 0;\n for (const chunk of chunks) {\n out.set(chunk, at);\n at += chunk.length;\n }\n return out;\n}\n\n/** A compressed page: base64 of raw deflate of the URI-encoded graph model. */\nasync function unpacked(content: string): Promise<string> {\n const binary = atob(content.replace(/\\s+/g, ''));\n const bytes = Uint8Array.from(binary, (ch) => ch.charCodeAt(0));\n const text = new TextDecoder().decode(await inflateRaw(bytes));\n try {\n return decodeURIComponent(text);\n } catch {\n return text;\n }\n}\n\n/** A `<diagram>` element's graph model, written out or compressed inside it. */\nasync function modelOf(diagram: Element, label: string): Promise<Element> {\n const model = childElements(diagram).find((c) => c.tagName === 'mxGraphModel');\n if (model !== undefined) return model;\n const content = (diagram.textContent ?? '').trim();\n if (content === '') throw new Error(`Page ${label} holds no graph model`);\n let xml: string;\n try {\n xml = await unpacked(content);\n } catch {\n throw new Error(`Page ${label} holds compressed content that does not inflate`);\n }\n const root = parseXml(xml, `The compressed content of page ${label}`);\n if (root.tagName !== 'mxGraphModel') throw new Error(`Page ${label} holds compressed content that is not a graph model`);\n return root;\n}\n\nconst sizeOf = (model: Element, name: 'pageWidth' | 'pageHeight'): number | undefined => {\n const n = Number(model.getAttribute(name) ?? NaN);\n return Number.isFinite(n) && n > 0 ? n : undefined;\n};\n\nfunction pageOf(model: Element, id: string, name: string | undefined, ids: IdSpace, warn: (m: string) => void): DocumentPage {\n const width = sizeOf(model, 'pageWidth');\n const height = sizeOf(model, 'pageHeight');\n return readPage(model, {\n id, ...(name !== undefined ? { name } : {}), ...(width !== undefined ? { width } : {}), ...(height !== undefined ? { height } : {}),\n }, ids, warn);\n}\n\n/**\n * Reads draw-style XML into a document: a page per `<diagram>`, or one for a\n * bare graph model. A page named `Page N` in the place N is read as unnamed,\n * since that is the name it is written with. Throws on text that is not\n * well-formed XML, on another root element, and on a page that holds no graph\n * model.\n */\nexport async function readDrawXml(text: string): Promise<ImportResult> {\n const root = parseXml(text, 'The file');\n const warnings = new Set<string>();\n const warn = (message: string): void => { warnings.add(message); };\n const ids: IdSpace = new Set();\n const pageIds: IdSpace = new Set();\n const pageId = (want: string | null, index: number): string => {\n let id = want ?? `page-${index + 1}`;\n for (let n = 2; pageIds.has(id); n++) id = `${want ?? 'page'}-${n}`;\n pageIds.add(id);\n return id;\n };\n const pages: DocumentPage[] = [];\n if (root.tagName === 'mxGraphModel') {\n pages.push(pageOf(root, pageId(null, 0), undefined, ids, warn));\n } else if (root.tagName === 'mxfile') {\n const diagrams = childElements(root).filter((c) => c.tagName === 'diagram');\n if (diagrams.length === 0) throw new Error('The file has no pages');\n for (const [i, diagram] of diagrams.entries()) {\n const given = diagram.getAttribute('name');\n const name = given === null || given === `Page ${i + 1}` ? undefined : given;\n const model = await modelOf(diagram, `\"${given ?? i + 1}\"`);\n pages.push(pageOf(model, pageId(diagram.getAttribute('id'), i), name, ids, warn));\n }\n } else {\n throw new Error(`A draw-style XML file has an mxfile or mxGraphModel root element, not <${root.tagName}>`);\n }\n return { document: { pages }, warnings: [...warnings] };\n}\n","/** The style string each kind of cell is written with: a shape, a region, a group, or an edge. */\nimport {\n EDGE_STROKE_WIDTH, LANE_STROKE_WIDTH, NODE_STROKE_WIDTH, dataEdgeStyle, dataNodeStyle, dataRegionStyle, type ContainerHeader, type DataContainer,\n type DataEdge, type DataLane, type DataNode, type DiagramTheme, type NodeStyle, type Row,\n} from '@weasel-js/diagram';\nimport { SHAPES, STADIUM_ARC, markerStyle } from './mapping';\nimport type { Warn } from './readStyle';\nimport { writeStyle, type StylePart } from './style';\n\nconst colorValue = (color: string | undefined): string | undefined =>\n (color === undefined ? undefined : color === 'transparent' ? 'none' : color);\n\nconst dashParts = (dash: readonly number[] | undefined): StylePart[] =>\n (dash !== undefined && dash.length > 0 ? [['dashed', 1], ['dashPattern', dash.join(' ')]] : []);\n\nfunction colorParts(style: NodeStyle, fill: boolean): StylePart[] {\n return [\n ['fillColor', fill ? colorValue(style.fill) : 'none'], ['strokeColor', colorValue(style.stroke)],\n ['fontColor', colorValue(style.text)], ['strokeWidth', style.strokeWidth ?? NODE_STROKE_WIDTH], ...dashParts(style.dash),\n ];\n}\n\nfunction outlineParts(node: DataNode, warn: Warn): StylePart[] {\n const outline = node.outline ?? 'rect';\n if (outline === 'stadium') return [['rounded', 1], ['arcSize', STADIUM_ARC]];\n const shape = SHAPES.find((s) => s.outline === outline);\n if (shape !== undefined) return shape.write as StylePart[];\n if (typeof outline !== 'string') warn('Shapes drawn with an outline path of their own were written as rects.');\n return [['rounded', 0]];\n}\n\n/** A node's text, one line per row; rows that hold no text are left out, with a warning. */\nexport function nodeLines(node: DataNode, warn: Warn): string[] {\n if (node.rows === undefined) return [...(node.lines ?? [])];\n const lines: string[] = [];\n for (const row of node.rows) {\n if (row.kind === 'label') lines.push(row.text);\n else if (row.kind === 'field') lines.push(`${row.label}: ${row.value}`);\n else warn('Port rows and slots inside shapes were left out.');\n }\n return lines;\n}\n\nfunction fontParts(rows: readonly Row[] | undefined): StylePart[] {\n const style = rows?.find((r) => r.kind === 'label' || r.kind === 'field')?.style;\n if (style === undefined) return [];\n return [['fontSize', style.fontSize], ['fontFamily', style.fontFamily], ['fontStyle', style.bold === true ? 1 : undefined]];\n}\n\nconst VERTICAL: Readonly<Record<string, string>> = { top: 'top', center: 'middle', bottom: 'bottom' };\n\n/** A shape's style: its outline, its colors under `theme`, its font, and where its text sits. */\nexport function nodeStyle(node: DataNode, theme: DiagramTheme, warn: Warn): string {\n if ((node.marks ?? []).length > 0) warn('Marks drawn over shapes were left out.');\n if (node.portLabels !== undefined) warn('Port labels were left out.');\n return writeStyle([\n ...outlineParts(node, warn), ['whiteSpace', 'wrap'],\n ...colorParts(dataNodeStyle(node, theme), true), ...fontParts(node.rows),\n ['verticalAlign', node.verticalAlign === undefined ? undefined : VERTICAL[node.verticalAlign]],\n ]);\n}\n\n/** A container's, pool's, or lane's style: a swimlane whose header is on the side `header` says, `startSize` deep. */\nexport function regionStyle(region: DataContainer | (DataLane & { role: 'lane' }), header: ContainerHeader | undefined,\n theme: DiagramTheme, laneIndex = 0): string {\n const style = dataRegionStyle({ role: region.role, style: 'style' in region ? region.style : undefined, colors: region.colors }, theme, laneIndex);\n return writeStyle([\n 'swimlane', ['horizontal', header?.side === 'left' ? 0 : 1], ['startSize', header?.size ?? 0],\n ['container', 1], ['collapsible', 0], ['whiteSpace', 'wrap'],\n ...(region.role === 'lane' ? colorParts({ ...style, strokeWidth: LANE_STROKE_WIDTH }, false) : colorParts(style, true)),\n ]);\n}\n\n/** A group's style: a box drawn as nothing, around what it holds. */\nexport const GROUP_STYLE = writeStyle(['group']);\n\nfunction markerParts(end: 'start' | 'end', marker: Parameters<typeof markerStyle>[0], warn: Warn): StylePart[] {\n let style = markerStyle(marker);\n if (style === undefined) {\n warn('Markers the format has no arrowhead like were written as arrows.');\n style = markerStyle('arrow')!;\n }\n return [[`${end}Arrow`, style[0]], [`${end}Fill`, style[0] === 'none' ? undefined : style[1]]];\n}\n\n/** An edge's style, less its ports: its router, its stroke and label color under `theme`, and its markers. */\nexport function edgeStyle(edge: DataEdge, theme: DiagramTheme, warn: Warn): StylePart[] {\n const style = dataEdgeStyle(edge, theme);\n const router = edge.router ?? 'straight';\n return [\n ['edgeStyle', router === 'orthogonal' || router === 'avoid' ? 'orthogonalEdgeStyle' : 'none'],\n ['curved', router === 'bezier' ? 1 : undefined], ['rounded', 0], ['html', 0],\n ['strokeColor', colorValue(style.stroke)], ['strokeWidth', style.width ?? EDGE_STROKE_WIDTH], ...dashParts(style.dash),\n ['fontColor', colorValue(style.label ?? style.stroke)],\n ...markerParts('start', style.markerStart ?? null, warn),\n ...markerParts('end', style.markerEnd === undefined ? 'arrow' : style.markerEnd, warn),\n ];\n}\n","/** The XML elements draw-style cells are written as. */\nimport type { Vec2 } from '@weasel-js/core/math';\nimport { escapeAttr } from '@weasel-js/svg';\nimport type { Box } from './pageCells';\n\n/** A coordinate to four places, which is as fine as anything here is drawn. */\nexport const num = (n: number): string => String(Math.round(n * 10000) / 10000);\n\n/** Attributes, in order, leaving out those with no value. */\nexport function attrs(pairs: readonly (readonly [string, string | number | undefined])[]): string {\n return pairs\n .filter((p): p is readonly [string, string | number] => p[1] !== undefined)\n .map(([k, v]) => ` ${k}=\"${escapeAttr(typeof v === 'number' ? num(v) : v)}\"`)\n .join('');\n}\n\n/** A vertex cell: its box, relative to `origin`, the corner of the cell holding it. */\nexport function vertexXml(cell: { id: string; value: string; style: string; parent: string; group?: boolean }, box: Box, origin: Vec2): string {\n const head = attrs([\n ['id', cell.id], ['value', cell.value], ['style', cell.style], ['vertex', '1'],\n ['connectable', cell.group === true ? '0' : undefined], ['parent', cell.parent],\n ]);\n const geometry = attrs([['x', box.x - origin.x], ['y', box.y - origin.y], ['width', box.width], ['height', box.height], ['as', 'geometry']]);\n return ` <mxCell${head}>\\n <mxGeometry${geometry} />\\n </mxCell>\\n`;\n}\n\n/** An edge cell: its ends, its label's place along it as `x` from -1 to 1 and `y` off the line, and its bend points. */\nexport function edgeXml(\n cell: { id: string; value: string; style: string; parent: string; source: string; target: string },\n label: { x: number; y: number } | undefined, points: readonly Vec2[],\n): string {\n const head = attrs([\n ['id', cell.id], ['value', cell.value], ['style', cell.style], ['edge', '1'], ['parent', cell.parent],\n ['source', cell.source], ['target', cell.target],\n ]);\n const geometry = attrs([['x', label?.x], ['y', label?.y], ['relative', '1'], ['as', 'geometry']]);\n if (points.length === 0) return ` <mxCell${head}>\\n <mxGeometry${geometry} />\\n </mxCell>\\n`;\n const list = points.map((p) => ` <mxPoint${attrs([['x', p.x], ['y', p.y]])} />\\n`).join('');\n return ` <mxCell${head}>\\n <mxGeometry${geometry}>\\n <Array as=\"points\">\\n${list} </Array>\\n`\n + ' </mxGeometry>\\n </mxCell>\\n';\n}\n","/** One edge of a page as a draw-style edge cell. */\nimport type { Vec2 } from '@weasel-js/core/math';\nimport {\n DEFAULT_PORTS, edgeIdOf, type DataEdge, type DataNode, type DiagramLabel, type DiagramTheme,\n} from '@weasel-js/diagram';\nimport type { Box } from './pageCells';\nimport type { Warn } from './readStyle';\nimport { writeStyle, type StylePart } from './style';\nimport { edgeStyle } from './writeStyle';\nimport { edgeXml } from './writeXml';\n\n/** What an edge needs of the page it is on. */\nexport interface EdgePage {\n theme: DiagramTheme;\n layer: string;\n nodes: ReadonlyMap<string, DataNode>;\n /** The box of every shape, region, lane, and group, by id. */\n boxes: ReadonlyMap<string, Box>;\n warn: Warn;\n}\n\nconst center = (b: Box): Vec2 => ({ x: b.x + b.width / 2, y: b.y + b.height / 2 });\n\n/** How far along `line` the point nearest `p` is, as a fraction of its length. */\nfunction fractionNear(line: readonly Vec2[], p: Vec2): number {\n let total = 0;\n let best = { distance: Infinity, along: 0 };\n for (let i = 1; i < line.length; i++) {\n const a = line[i - 1]!;\n const b = line[i]!;\n const length = Math.hypot(b.x - a.x, b.y - a.y);\n const t = length === 0 ? 0 : Math.max(0, Math.min(1, ((p.x - a.x) * (b.x - a.x) + (p.y - a.y) * (b.y - a.y)) / (length * length)));\n const distance = Math.hypot(a.x + t * (b.x - a.x) - p.x, a.y + t * (b.y - a.y) - p.y);\n if (distance < best.distance) best = { distance, along: total + t * length };\n total += length;\n }\n return total === 0 ? 0.5 : best.along / total;\n}\n\n/** A label placement as the format's `x` from -1 to 1 along the edge and `y` off it. */\nfunction labelGeometry(placement: DiagramLabel | undefined, line: readonly Vec2[]): { x: number; y: number } | undefined {\n if (placement === undefined) return undefined;\n const { at } = placement;\n const fraction = at === 'start' ? 0 : at === 'mid' ? 0.5 : at === 'end' ? 1 : typeof at === 'number' ? at : fractionNear(line, at.near);\n return { x: fraction * 2 - 1, y: placement.offset ?? 0 };\n}\n\nfunction portParts(page: EdgePage, end: string, port: string | undefined, side: 'exit' | 'entry'): StylePart[] {\n if (port === undefined) return [];\n const anchor = (page.nodes.get(end)?.ports ?? DEFAULT_PORTS).find((p) => p.id === port)?.at;\n if (anchor === undefined) {\n page.warn('Connectors ending on a port in a row were written meeting the shape wherever it is nearest.');\n return [];\n }\n return [[`${side}X`, anchor.u], [`${side}Y`, anchor.v], [`${side}Dx`, 0], [`${side}Dy`, 0]];\n}\n\n/** An edge cell on the page's layer, or `null`, with a warning, when an end is not on the page. */\nexport function writeEdge(edge: DataEdge, page: EdgePage): string | null {\n const from = page.boxes.get(edge.from);\n const to = page.boxes.get(edge.to);\n if (from === undefined || to === undefined) {\n page.warn('Connectors whose ends are not on their page were left out.');\n return null;\n }\n const points = edge.waypoints ?? edge.routed ?? [];\n const style = writeStyle([\n ...edgeStyle(edge, page.theme, page.warn),\n ...portParts(page, edge.from, edge.fromPort ?? edge.routedPorts?.from, 'exit'),\n ...portParts(page, edge.to, edge.toPort ?? edge.routedPorts?.to, 'entry'),\n ]);\n const label = labelGeometry(edge.labelPlacement, [center(from), ...points, center(to)]);\n return edgeXml(\n { id: edge.id ?? edgeIdOf(edge), value: edge.label ?? '', style, parent: page.layer, source: edge.from, target: edge.to },\n label, points,\n );\n}\n","/** One page of a document as a draw-style `<diagram>`: its shapes, regions, and groups as nested cells, then its edges. */\nimport { pageName } from '@weasel-js/core';\nimport type { Vec2 } from '@weasel-js/core/math';\nimport {\n diagramScene, type ContainerHeader, type DataContainer, type DiagramData, type DiagramTheme,\n} from '@weasel-js/diagram';\nimport type { DocumentPage } from '../document';\nimport { laidOutPage, needsLayout } from '../pageLayout';\nimport type { Box } from './pageCells';\nimport type { Warn } from './readStyle';\nimport { writeEdge } from './writeEdge';\nimport { GROUP_STYLE, nodeLines, nodeStyle, regionStyle } from './writeStyle';\nimport { attrs, vertexXml } from './writeXml';\n\n/** A vertex to write: its cell, less the parent and box the tree gives it. */\ninterface Vertex { id: string; value: string; style: string; group?: boolean }\n\n/**\n * Which cell holds each item: a container its members, a pool its lanes, a\n * lane its members, and a group what no region holds. An earlier claim wins,\n * and a claim that would put a cell inside itself is ignored.\n */\nfunction parentsOf(data: DiagramData, known: ReadonlySet<string>, warn: Warn): Map<string, string> {\n const parent = new Map<string, string>();\n const within = (id: string, of: string): boolean => {\n for (let up: string | undefined = of; up !== undefined; up = parent.get(up)) if (up === id) return true;\n return false;\n };\n const claim = (member: string, holder: string): boolean => {\n if (!known.has(member) || parent.has(member) || within(member, holder)) return false;\n parent.set(member, holder);\n return true;\n };\n for (const c of data.containers ?? []) {\n for (const m of c.members ?? []) claim(m, c.id);\n for (const lane of c.lanes ?? []) {\n claim(lane.id, c.id);\n for (const m of lane.members ?? []) claim(m, lane.id);\n }\n }\n for (const g of data.groups ?? []) {\n const held = new Set(g.members.map((m) => parent.get(m)));\n const region = held.size === 1 ? [...held][0] : undefined;\n if (region !== undefined && !parent.has(g.id) && !within(g.id, region)) {\n parent.set(g.id, region);\n for (const m of g.members) parent.delete(m);\n } else if (g.members.some((m) => parent.has(m))) {\n warn('Groups reaching into a container or lane kept only the members outside it.');\n }\n for (const m of g.members) claim(m, g.id);\n }\n return parent;\n}\n\nconst union = (boxes: readonly Box[]): Box | undefined => {\n if (boxes.length === 0) return undefined;\n const x = Math.min(...boxes.map((b) => b.x));\n const y = Math.min(...boxes.map((b) => b.y));\n return {\n x, y, width: Math.max(...boxes.map((b) => b.x + b.width)) - x, height: Math.max(...boxes.map((b) => b.y + b.height)) - y,\n };\n};\n\n/** An id no item on the page has, for the root and layer cells every graph model has. */\nfunction freeId(want: string, taken: ReadonlySet<string>): string {\n let id = want;\n for (let n = 2; taken.has(id); n++) id = `${want}-${n}`;\n return id;\n}\n\nconst regionLabel = (c: { label?: string }): string => c.label ?? '';\n\nfunction vertices(data: DiagramData, theme: DiagramTheme, headerOf: (id: string) => ContainerHeader | undefined, warn: Warn): Vertex[] {\n const out: Vertex[] = [];\n const pools: DataContainer[] = [];\n for (const c of data.containers ?? []) {\n out.push({ id: c.id, value: regionLabel(c), style: regionStyle(c, headerOf(c.id), theme) });\n if (c.role === 'pool') pools.push(c);\n }\n for (const pool of pools) {\n (pool.lanes ?? []).forEach((lane, i) => {\n out.push({ id: lane.id, value: regionLabel(lane), style: regionStyle({ ...lane, role: 'lane' }, headerOf(lane.id), theme, i) });\n });\n }\n for (const g of data.groups ?? []) out.push({ id: g.id, value: '', style: GROUP_STYLE, group: true });\n for (const n of data.nodes) out.push({ id: n.id, value: nodeLines(n, warn).join('\\n'), style: nodeStyle(n, theme, warn) });\n return out;\n}\n\n/**\n * Writes `page`, the `index`th, as a `<diagram>` element. A page with\n * unplaced nodes is laid out first, as an import would. A node is written the\n * size it states, which is its drawn size in a document read from a scene;\n * anything else the size `diagramScene` gives it with estimated text.\n */\nexport function writePage(page: DocumentPage, index: number, theme: DiagramTheme, warn: Warn): string {\n const laid = needsLayout(page) ? laidOutPage(page, { theme }) : page;\n const { data } = laid;\n const specs = new Map(diagramScene(data, { layout: 'none', theme }).map((s) => [s.id as string, s]));\n const headerOf = (id: string) => (specs.get(id)?.data.diagram as { container?: { header?: ContainerHeader } } | undefined)?.container?.header;\n const items = vertices(data, theme, headerOf, warn);\n const ids = new Set(items.map((v) => v.id));\n const parent = parentsOf(data, ids, warn);\n const children = new Map<string | undefined, Vertex[]>();\n for (const v of items) children.set(parent.get(v.id), [...(children.get(parent.get(v.id)) ?? []), v]);\n\n const nodes = new Map(data.nodes.map((n) => [n.id, n]));\n const boxes = new Map<string, Box>();\n const boxOf = (v: Vertex): Box | undefined => {\n if (!boxes.has(v.id)) {\n const pose = specs.get(v.id)?.pose;\n const node = nodes.get(v.id);\n const box = v.group === true ? union((children.get(v.id) ?? []).map(boxOf).filter((b): b is Box => b !== undefined))\n : pose === undefined ? undefined\n : { x: pose.x, y: pose.y, width: node?.width ?? pose.width, height: node?.height ?? pose.height };\n if (box !== undefined) boxes.set(v.id, box);\n }\n return boxes.get(v.id);\n };\n const root = freeId('0', ids);\n const layer = freeId('1', new Set([...ids, root]));\n let cells = '';\n const emit = (holder: string | undefined, holderCell: string, origin: Vec2): void => {\n for (const v of children.get(holder) ?? []) {\n const box = boxOf(v);\n if (box === undefined) {\n emit(v.id, holderCell, origin);\n continue;\n }\n cells += vertexXml({ ...v, parent: holderCell }, box, origin);\n emit(v.id, v.id, box);\n }\n };\n emit(undefined, layer, { x: 0, y: 0 });\n const edgePage = { theme, layer, nodes, boxes, warn };\n for (const edge of data.edges) cells += writeEdge(edge, edgePage) ?? '';\n\n const model = attrs([\n ['grid', '1'], ['gridSize', '10'], ['page', '1'], ['pageScale', '1'], ['pageWidth', laid.width], ['pageHeight', laid.height],\n ]);\n return ` <diagram${attrs([['id', page.id], ['name', pageName(page, index)]])}>\\n <mxGraphModel${model}>\\n <root>\\n`\n + ` <mxCell${attrs([['id', root]])} />\\n <mxCell${attrs([['id', layer], ['parent', root]])} />\\n`\n + `${cells} </root>\\n </mxGraphModel>\\n </diagram>\\n`;\n}\n","/** Writing a document as draw-style XML: every page, uncompressed, its colors spelled out under the document's theme. */\nimport { diagramThemeFrom } from '@weasel-js/diagram';\nimport type { DiagramDocument, ExportResult } from '../document';\nimport { writePage } from './writePage';\n\n/**\n * Writes every page of `doc` as a `<diagram>` in one `<mxfile>`. Each item's\n * colors are the ones it is drawn in under the document's theme, so the file\n * looks the same anywhere. A route is written as `waypoints`, else `routed`.\n * Edges between pages are left out, with a warning: a page's cells cannot\n * reach another's.\n */\nexport function writeDrawXml(doc: DiagramDocument): ExportResult {\n const theme = diagramThemeFrom(doc.theme);\n const warnings = new Set<string>();\n const warn = (message: string): void => { warnings.add(message); };\n const pages = doc.pages.map((page, i) => writePage(page, i, theme, warn)).join('');\n if ((doc.crossPageEdges ?? []).length > 0) warn('Connectors between pages were left out: a page\\'s cells cannot reach another\\'s.');\n return { text: `<mxfile>\\n${pages}</mxfile>\\n`, warnings: [...warnings] };\n}\n","/** Draw-style XML as a {@link DiagramFormat}. */\nimport type { DiagramFormat } from '../document';\nimport { readDrawXml } from './read';\nimport { writeDrawXml } from './write';\n\n/** The root element, past any XML declaration, doctype, comments, and processing instructions. */\nconst ROOT = /^\\s*(?:<\\?[^]*?\\?>\\s*|<!--[^]*?-->\\s*|<!DOCTYPE[^>]*>\\s*)*<(mxfile|mxGraphModel)[\\s/>]/;\n\n/**\n * Draw-style XML: a page per `<diagram>`, each a graph model of cells with\n * geometry, written out or compressed. Recognized by its root element, since\n * `.xml` names many formats.\n */\nexport const DRAW_XML: DiagramFormat = {\n id: 'draw-xml',\n name: 'Draw-style XML',\n extensions: ['.xml'],\n detect: (text) => ROOT.test(text),\n read: readDrawXml,\n write: writeDrawXml,\n};\n","/** A Mermaid flowchart's tokens: ids, node shapes, links, and the raw rest of keyword lines. */\nimport { lineError } from '../lineError';\n\n/** A node shape's syntax, by the brackets around its text. */\nexport type MermaidShape =\n | 'rect' | 'rounded' | 'stadium' | 'subroutine' | 'cylinder' | 'circle' | 'double-circle' | 'asymmetric'\n | 'diamond' | 'hexagon' | 'lean-right' | 'lean-left' | 'trapezoid' | 'inv-trapezoid';\n\n/** A link end: an arrow, a circle, or a cross. */\nexport type LinkHead = '<' | '>' | 'o' | 'x';\n\nexport type MermaidToken = { line: number } & (\n | { kind: 'word' | 'rest' | 'pipe' | 'class' | 'meta' | 'amp'; value: string }\n | { kind: 'shape'; shape: MermaidShape; text: string }\n | { kind: 'link'; stroke: 'normal' | 'thick' | 'dotted' | 'invisible'; start?: LinkHead; end?: LinkHead; text?: string }\n | { kind: 'sep' }\n);\n\n/** A flowchart's tokens, and what came before them. */\nexport interface MermaidLex {\n tokens: MermaidToken[];\n /** The front matter's `title`. */\n title?: string;\n /** How many `%%{…}%%` directives there were. */\n directives: number;\n}\n\n/** Keywords whose line runs to its end as one `rest` token. */\nconst REST_KEYWORDS = new Set([\n 'flowchart', 'graph', 'flowchart-elk', 'subgraph', 'style', 'classDef', 'class', 'linkStyle', 'click', 'direction',\n 'accTitle', 'accDescr',\n]);\n\n/** Openers, longest first, and the closers each may end with. */\nconst SHAPES: readonly (readonly [string, readonly (readonly [string, MermaidShape])[]])[] = [\n ['(((', [[')))', 'double-circle']]], ['([', [['])', 'stadium']]], ['((', [['))', 'circle']]], ['(', [[')', 'rounded']]],\n ['[[', [[']]', 'subroutine']]], ['[(', [[')]', 'cylinder']]],\n ['[/', [['/]', 'lean-right'], ['\\\\]', 'trapezoid']]], ['[\\\\', [['\\\\]', 'lean-left'], ['/]', 'inv-trapezoid']]],\n ['[', [[']', 'rect']]], ['{{', [['}}', 'hexagon']]], ['{', [['}', 'diamond']]], ['>', [[']', 'asymmetric']]],\n];\n\nconst WORD = /[\\p{L}\\p{N}_](?:[\\p{L}\\p{N}_]|[-.](?=[\\p{L}\\p{N}_]))*/uy;\nconst LINK = /([<ox])?(-{2,}|={2,}|-\\.+-?|~{3,})(>|[ox](?![\\p{L}\\p{N}_]))?/uy;\nconst CLOSERS: Readonly<Record<string, RegExp>> = { '-': /\\s*(--+[>ox]|---+)/y, '=': /\\s*(==+[>ox]|===+)/y, '.': /\\s*(\\.-+[>ox]?)/y };\n\nconst fail = (line: number, message: string) => lineError('Mermaid', line, message);\n\nfunction jsonString(quoted: string): string {\n try {\n return JSON.parse(quoted) as string;\n } catch {\n return quoted.slice(1, -1);\n }\n}\nconst strokeOf = (body: string) => (body.startsWith('~') ? 'invisible' : body.startsWith('=') ? 'thick' : body.includes('.') ? 'dotted' : 'normal');\n\n\nclass MermaidLexer {\n readonly tokens: MermaidToken[] = [];\n readonly text: string;\n i = 0;\n line = 1;\n title: string | undefined;\n directives = 0;\n\n constructor(source: string) {\n this.text = source.replace(/\\r\\n?/g, '\\n');\n }\n\n push(t: MermaidToken): void {\n const last = this.tokens[this.tokens.length - 1];\n if (t.kind === 'sep' && (last === undefined || last.kind === 'sep')) return;\n this.tokens.push(t);\n }\n\n atStart(): boolean {\n const last = this.tokens[this.tokens.length - 1];\n return last === undefined || last.kind === 'sep';\n }\n\n sticky(re: RegExp): RegExpExecArray | null {\n re.lastIndex = this.i;\n return re.exec(this.text);\n }\n\n lineEnd(): number {\n const end = this.text.indexOf('\\n', this.i);\n return end < 0 ? this.text.length : end;\n }\n\n frontMatter(): void {\n const front = /^---[ \\t]*\\n([\\s\\S]*?)\\n---[ \\t]*(?:\\n|$)/.exec(this.text);\n if (front === null) return;\n const t = /^title:[ \\t]*(.*)$/m.exec(front[1]!)?.[1]?.trim();\n if (t !== undefined) this.title = /^\".*\"$/.test(t) ? jsonString(t) : /^'.*'$/.test(t) ? t.slice(1, -1).replace(/''/g, \"'\") : t;\n this.i = front[0].length;\n this.line += front[0].split('\\n').length - (front[0].endsWith('\\n') ? 1 : 0);\n }\n\n run(): MermaidLex {\n this.frontMatter();\n const { text } = this;\n while (this.i < text.length) {\n const c = text[this.i]!;\n if (c === '\\n' || c === ';') {\n this.push({ kind: 'sep', line: this.line });\n if (c === '\\n') this.line++;\n this.i++;\n } else if (c === ' ' || c === '\\t') {\n this.i++;\n } else if (text.startsWith('%%{', this.i)) {\n this.directive();\n } else if (text.startsWith('%%', this.i)) {\n this.i = this.lineEnd();\n } else if (!this.mark(c) && !this.link()) {\n this.word(c);\n }\n }\n return { tokens: this.tokens, ...(this.title !== undefined ? { title: this.title } : {}), directives: this.directives };\n }\n\n directive(): void {\n const end = this.text.indexOf('}%%', this.i);\n const stop = end < 0 ? this.text.length : end + 3;\n for (let k = this.i; k < stop; k++) if (this.text[k] === '\\n') this.line++;\n this.i = stop;\n this.directives++;\n }\n\n /** `&`, `:::class`, `@{ … }`, or `|text|`: whether one was read. */\n mark(c: string): boolean {\n const { text, line } = this;\n if (c === '&') {\n this.push({ kind: 'amp', value: '&', line });\n this.i++;\n } else if (text.startsWith(':::', this.i)) {\n this.i += 3;\n const m = this.sticky(WORD);\n if (m === null) throw fail(line, 'a class name must follow \":::\"');\n this.i += m[0].length;\n this.push({ kind: 'class', value: m[0], line });\n } else if (text.startsWith('@{', this.i)) {\n const end = text.indexOf('}', this.i);\n if (end < 0) throw fail(line, 'node metadata is never closed');\n this.push({ kind: 'meta', value: text.slice(this.i + 2, end), line });\n this.i = end + 1;\n } else if (c === '|') {\n this.push({ kind: 'pipe', value: this.delimited('|', '|'), line });\n } else {\n return false;\n }\n return true;\n }\n\n word(c: string): void {\n const word = this.sticky(WORD);\n if (word === null) throw fail(this.line, `cannot read \"${c}\"`);\n const start = this.atStart();\n this.i += word[0].length;\n this.push({ kind: 'word', value: word[0], line: this.line });\n if (start && REST_KEYWORDS.has(word[0]) && /^(?:[ \\t:]|$|\\n)/.test(this.text.slice(this.i, this.i + 1))) {\n const semi = this.text.indexOf(';', this.i);\n const stop = Math.min(this.lineEnd(), semi < 0 ? this.text.length : semi);\n const rest = this.text.slice(this.i, stop).replace(/^[ \\t]*:?/, '').trim();\n if (rest !== '') this.push({ kind: 'rest', value: rest, line: this.line });\n this.i = stop;\n return;\n }\n this.shape();\n }\n\n /** Text up to `close`, or a quoted string then `close`. */\n delimited(open: string, close: string): string {\n const { text, line } = this;\n this.i += open.length;\n while (text[this.i] === ' ') this.i++;\n let out: string;\n if (text[this.i] === '\"') {\n const end = text.indexOf('\"', this.i + 1);\n if (end < 0 || text.slice(this.i, end).includes('\\n')) throw fail(line, 'a quoted string is never closed');\n out = text.slice(this.i + 1, end);\n this.i = end + 1;\n while (text[this.i] === ' ') this.i++;\n if (!text.startsWith(close, this.i)) throw fail(line, `expected \"${close}\" after a quoted string`);\n } else {\n const end = text.indexOf(close, this.i);\n if (end < 0 || text.slice(this.i, end).includes('\\n')) throw fail(line, `text opened with \"${open}\" is never closed`);\n out = text.slice(this.i, end).trim();\n this.i = end;\n }\n this.i += close.length;\n return out;\n }\n\n shape(): void {\n for (const [open, closers] of SHAPES) {\n if (!this.text.startsWith(open, this.i)) continue;\n const from = this.i + open.length;\n const found = closers\n .map(([close, kind]) => ({ close, kind, at: this.closeAt(from, close) }))\n .filter((f) => f.at >= 0)\n .sort((a, b) => a.at - b.at)[0];\n if (found === undefined) throw fail(this.line, `a shape opened with \"${open}\" is never closed`);\n this.push({ kind: 'shape', shape: found.kind, text: this.delimited(open, found.close), line: this.line });\n return;\n }\n }\n\n /** Where `close` ends text starting at `from`, past a quoted string; -1 when not on this line. */\n closeAt(from: number, close: string): number {\n const { text } = this;\n let k = from;\n while (text[k] === ' ') k++;\n if (text[k] === '\"') {\n const end = text.indexOf('\"', k + 1);\n if (end >= 0) k = end + 1;\n }\n const at = text.indexOf(close, k);\n const eol = text.indexOf('\\n', from);\n return at < 0 || (eol >= 0 && at > eol) ? -1 : at;\n }\n\n link(): boolean {\n const m = this.sticky(LINK);\n if (m === null) return false;\n const [whole, lead, body, tail] = m as unknown as [string, LinkHead | undefined, string, LinkHead | undefined];\n if ((lead === 'o' || lead === 'x') && tail !== lead) return false;\n const stroke = strokeOf(body);\n const opens = tail === undefined && (body === '--' || body === '==' || /^-\\.+$/.test(body))\n && /\\s/.test(this.text[this.i + whole.length] ?? '');\n this.i += whole.length;\n if (!opens) {\n this.push({ kind: 'link', stroke, ...(lead ? { start: lead } : {}), ...(tail ? { end: tail } : {}), line: this.line });\n return true;\n }\n const { label, end } = this.linkText(body);\n this.push({ kind: 'link', stroke, ...(lead ? { start: lead } : {}), ...(end ? { end } : {}), text: label, line: this.line });\n return true;\n }\n\n /** The text of a link opened with `body` and a space, and the head its closing arrow ends in. */\n linkText(body: string): { label: string; end: LinkHead | undefined } {\n const { text } = this;\n const closer = CLOSERS[body.includes('.') ? '.' : body[0]!]!;\n let k = this.i;\n for (; k < text.length && text[k] !== '\\n'; k++) {\n closer.lastIndex = k;\n if (closer.test(text) && /\\s/.test(text[k] ?? '')) break;\n }\n if (k >= text.length || text[k] === '\\n') throw fail(this.line, `a link's text after \"${body}\" is never closed`);\n const label = text.slice(this.i, k).trim();\n closer.lastIndex = k;\n const close = closer.exec(text)!;\n this.i = k + close[0].length;\n const head = close[1]!.slice(-1);\n return { label: /^\".*\"$/.test(label) ? label.slice(1, -1) : label, end: '>ox'.includes(head) ? head as LinkHead : undefined };\n }\n}\n\n/** Splits a Mermaid flowchart into tokens. Throws, naming the line, on text it cannot read. */\nexport function lexMermaid(source: string): MermaidLex {\n return new MermaidLexer(source).run();\n}\n","/** A Mermaid flowchart's grammar, read to a syntax tree with each statement's line. */\nimport { lineError } from '../lineError';\nimport { lexMermaid, type LinkHead, type MermaidShape, type MermaidToken } from './lex';\n\n/** A node named in a chain, with whatever the mention says about it. */\nexport interface MermaidNodeRef {\n id: string;\n shape?: MermaidShape;\n text?: string;\n classes: string[];\n /** The `@{ … }` metadata's fields. */\n meta?: Record<string, string>;\n line: number;\n}\n\nexport interface MermaidLink {\n stroke: 'normal' | 'thick' | 'dotted' | 'invisible';\n start?: LinkHead;\n end?: LinkHead;\n text?: string;\n}\n\n/** A style's `key:value` pairs, in order. */\nexport type StyleProps = [string, string][];\n\nexport type MermaidStmt =\n | { kind: 'chain'; groups: MermaidNodeRef[][]; links: MermaidLink[]; line: number }\n | { kind: 'subgraph'; id: string; title?: string; stmts: MermaidStmt[]; line: number }\n | { kind: 'direction'; value: string; line: number }\n | { kind: 'classDef'; names: string[]; props: StyleProps; line: number }\n | { kind: 'class'; ids: string[]; className: string; line: number }\n | { kind: 'style'; id: string; props: StyleProps; line: number }\n | { kind: 'linkStyle'; indexes: number[] | 'default'; props: StyleProps; line: number }\n | { kind: 'other'; keyword: string; line: number };\n\n/** A whole flowchart. */\nexport interface MermaidFlowchart {\n title?: string;\n /** As written: `TB`, `TD`, `BT`, `LR`, or `RL`. */\n direction: string;\n directives: number;\n stmts: MermaidStmt[];\n}\n\n/** Mermaid diagram kinds other than flowcharts. */\nexport const OTHER_KINDS = /^(sequenceDiagram|classDiagram(-v2)?|stateDiagram(-v2)?|erDiagram|journey|gantt|pie|quadrantChart|requirementDiagram|gitGraph|C4\\w*|mindmap|timeline|zenuml|sankey(-beta)?|xychart(-beta)?|block(-beta)?|packet(-beta)?|kanban|architecture(-beta)?|radar(-beta)?|treemap(-beta)?)$/;\n\n/** Splits on commas outside parentheses. */\nfunction splitTop(text: string): string[] {\n const out = [''];\n let depth = 0;\n for (const c of text) {\n if (c === '(') depth++;\n if (c === ')') depth--;\n if (c === ',' && depth === 0) out.push('');\n else out[out.length - 1] += c;\n }\n return out.map((s) => s.trim()).filter((s) => s !== '');\n}\n\nconst propsOf = (text: string): StyleProps => splitTop(text).map((p) => {\n const at = p.indexOf(':');\n return at < 0 ? [p, ''] : [p.slice(0, at).trim(), p.slice(at + 1).trim()];\n});\n\nfunction metaOf(text: string): Record<string, string> {\n const out: Record<string, string> = {};\n for (const [k, v] of propsOf(text)) out[k] = /^\".*\"$/.test(v) ? v.slice(1, -1) : v;\n return out;\n}\n\nconst KEYWORDS = new Set(['subgraph', 'direction', 'classDef', 'class', 'style', 'linkStyle', 'click', 'accTitle', 'accDescr']);\n\n/** The first statement's line, its first word, and its line number, read before lexing so another diagram kind's syntax is never lexed. */\nexport function headerWord(text: string): { word: string; text: string; line: number } | null {\n const lines = text.split(/\\r\\n?|\\n/);\n let k = 0;\n if (/^---\\s*$/.test(lines[0] ?? '')) {\n k = 1;\n while (k < lines.length && !/^---\\s*$/.test(lines[k]!)) k++;\n k++;\n }\n for (; k < lines.length; k++) {\n const l = lines[k]!.trim();\n if (l === '' || l.startsWith('%%')) continue;\n return { word: /^[^\\s;]+/.exec(l)![0], text: l, line: k + 1 };\n }\n return null;\n}\n\nconst SUBGRAPH =/^(?:\"([^\"]*)\"|([^\\s[]+)\\s*(?:\\[\\s*(?:\"([^\"]*)\"|([^\\]]*))\\s*\\])?|(.+))$/;\n\n/** A keyword statement other than `subgraph`, from the rest of its line. */\nfunction statementOf(keyword: string, rest: string, line: number): MermaidStmt {\n if (keyword === 'direction') return { kind: 'direction', value: rest.toUpperCase(), line };\n const [first = '', ...more] = rest.split(/\\s+/);\n const remainder = rest.slice(first.length).trim();\n if (keyword === 'classDef') return { kind: 'classDef', names: first.split(','), props: propsOf(remainder), line };\n if (keyword === 'class') return { kind: 'class', ids: first.split(','), className: more.join(' '), line };\n if (keyword === 'style') return { kind: 'style', id: first, props: propsOf(remainder), line };\n if (keyword === 'linkStyle') {\n const indexes = first === 'default' ? 'default' : first.split(',').map(Number);\n if (indexes !== 'default' && indexes.some(Number.isNaN)) throw lineError('Mermaid', line, `\"${first}\" is not a list of link numbers`);\n return { kind: 'linkStyle', indexes, props: propsOf(remainder), line };\n }\n return { kind: 'other', keyword, line };\n}\n\n/** Parses a Mermaid flowchart. Throws, naming the line, on text that is not one. */\nexport function parseMermaid(text: string): MermaidFlowchart {\n const header = headerWord(text);\n if (header !== null && OTHER_KINDS.test(header.word)) {\n throw lineError('Mermaid', header.line, `${header.word} diagrams are not read; only flowcharts are`);\n }\n const { tokens, title, directives } = lexMermaid(text);\n let i = 0;\n const peek = () => tokens[i];\n const lastLine = text.split('\\n').length;\n const where = () => peek()?.line ?? lastLine;\n const word = (t: MermaidToken | undefined, value?: string) => t?.kind === 'word' && (value === undefined || t.value === value);\n const describe = (t: MermaidToken | undefined) =>\n t === undefined ? 'the end of the file' : t.kind === 'sep' ? 'the end of the line' : `\"${'value' in t ? t.value : t.kind}\"`;\n const fail = (wanted: string) => lineError('Mermaid', where(), `expected ${wanted}, found ${describe(peek())}`);\n const restOf = () => (peek()?.kind === 'rest' ? (tokens[i++] as { value: string }).value : '');\n\n while (peek()?.kind === 'sep') i++;\n const head = peek();\n if (!word(head, 'flowchart') && !word(head, 'graph') && !word(head, 'flowchart-elk')) throw fail('a flowchart header');\n i++;\n const direction = restOf().toUpperCase() || 'TB';\n const stmts = block(null);\n return { ...(title !== undefined ? { title } : {}), direction, directives, stmts };\n\n function block(opened: number | null): MermaidStmt[] {\n const out: MermaidStmt[] = [];\n for (;;) {\n while (peek()?.kind === 'sep') i++;\n const t = peek();\n if (t === undefined) {\n if (opened !== null) throw lineError('Mermaid', opened, 'a subgraph opened here has no \"end\"');\n return out;\n }\n if (word(t, 'end')) {\n if (opened === null) throw lineError('Mermaid', t.line, '\"end\" closes no subgraph');\n i++;\n return out;\n }\n out.push(stmt());\n if (peek() !== undefined && peek()!.kind !== 'sep') throw fail('the end of the statement');\n }\n }\n\n function stmt(): MermaidStmt {\n const t = peek()!;\n const line = t.line;\n const next = tokens[i + 1];\n if (t.kind === 'word' && KEYWORDS.has(t.value) && (next === undefined || next.kind === 'rest' || next.kind === 'sep')) {\n i++;\n return keywordStmt(t.value, restOf(), line);\n }\n return chain();\n }\n\n function keywordStmt(keyword: string, rest: string, line: number): MermaidStmt {\n if (keyword === 'subgraph') {\n const m = SUBGRAPH.exec(rest);\n if (m === null) throw lineError('Mermaid', line, 'a subgraph needs a name');\n const id = m[1] ?? m[2] ?? m[5]!;\n const titleText = m[1] ?? m[3] ?? m[4]?.trim() ?? m[5];\n return { kind: 'subgraph', id, ...(titleText !== undefined ? { title: titleText } : {}), stmts: block(line), line };\n }\n return statementOf(keyword, rest, line);\n }\n\n function nodeRef(): MermaidNodeRef {\n const t = peek();\n if (t?.kind !== 'word') throw fail('a node');\n i++;\n const ref: MermaidNodeRef = { id: t.value, classes: [], line: t.line };\n const s = peek();\n if (s?.kind === 'shape') {\n i++;\n ref.shape = s.shape;\n ref.text = s.text;\n }\n for (let m = peek(); m?.kind === 'meta' || m?.kind === 'class'; m = peek()) {\n i++;\n if (m.kind === 'meta') ref.meta = metaOf(m.value);\n else ref.classes.push(m.value);\n }\n return ref;\n }\n\n function group(): MermaidNodeRef[] {\n const refs = [nodeRef()];\n while (peek()?.kind === 'amp') {\n i++;\n refs.push(nodeRef());\n }\n return refs;\n }\n\n function chain(): MermaidStmt {\n const line = where();\n const groups = [group()];\n const links: MermaidLink[] = [];\n for (let t = peek(); t?.kind === 'link'; t = peek()) {\n i++;\n const { kind: _k, line: _l, ...link } = t;\n const pipe = peek();\n if (pipe?.kind === 'pipe') {\n i++;\n link.text = pipe.value;\n }\n links.push(link);\n groups.push(group());\n }\n return { kind: 'chain', groups, links, line };\n }\n}\n","/**\n * A Mermaid flowchart as a one-page document: subgraphs as containers, and\n * `classDef`, `class`, `style`, and `linkStyle` as the items' own colors.\n * Mermaid holds no geometry, so the page is laid out on import.\n */\nimport type { MarkerRef } from '@weasel-js/core';\nimport type { DataContainer, DataEdge, DataNode, EdgeStyle, LayoutDirection, NodeStyle, Outline } from '@weasel-js/diagram';\nimport type { ImportResult } from '../document';\nimport { Membership, Warnings, graphPage, markupLines } from '../graphRead';\nimport type { LinkHead, MermaidShape } from './lex';\nimport { parseMermaid, type MermaidLink, type MermaidNodeRef, type MermaidStmt, type StyleProps } from './parse';\n\nconst DIRECTIONS: Readonly<Record<string, LayoutDirection>> = {\n TB: 'down', TD: 'down', BT: 'up', LR: 'right', RL: 'left', 'v': 'down', '^': 'up', '>': 'right', '<': 'left',\n};\n\nconst SHAPE_OUTLINES: Readonly<Partial<Record<MermaidShape, Outline>>> = {\n rect: 'rect', rounded: 'stadium', stadium: 'stadium', circle: 'ellipse', 'double-circle': 'ellipse', diamond: 'diamond',\n hexagon: 'hexagon', 'lean-right': 'parallelogram', 'lean-left': 'parallelogram', trapezoid: 'trapezoid', 'inv-trapezoid': 'trapezoid',\n};\n\nconst META_OUTLINES: Readonly<Record<string, Outline>> = {\n rect: 'rect', rectangle: 'rect', proc: 'rect', process: 'rect', rounded: 'stadium', event: 'stadium', stadium: 'stadium',\n pill: 'stadium', terminal: 'stadium', circle: 'ellipse', circ: 'ellipse', 'dbl-circ': 'ellipse', 'double-circle': 'ellipse',\n diam: 'diamond', diamond: 'diamond', decision: 'diamond', question: 'diamond', hex: 'hexagon', hexagon: 'hexagon',\n prepare: 'hexagon', 'lean-r': 'parallelogram', 'lean-right': 'parallelogram', 'in-out': 'parallelogram',\n 'lean-l': 'parallelogram', 'lean-left': 'parallelogram', 'out-in': 'parallelogram', 'trap-b': 'trapezoid',\n trapezoid: 'trapezoid', priority: 'trapezoid', 'trap-t': 'trapezoid', 'inv-trapezoid': 'trapezoid', manual: 'trapezoid',\n};\n\ninterface NodeDraft { lines: string[]; outline: Outline; classes: string[] }\ninterface EdgeDraft { edge: DataEdge; index: number }\n\nconst px = (v: string) => Number(v.replace(/px$/, ''));\nconst dashOf = (v: string) => v.split(/[\\s,]+/).filter((s) => s !== '').map(px);\n\n/** Mermaid's text: markdown string quotes and bold dropped, entities and `<br>` read. */\nfunction textLines(text: string): string[] {\n const md = /^`([\\s\\S]*)`$/.exec(text);\n const plain = md !== null ? md[1]!.replace(/\\*\\*|__/g, '') : text;\n const lines = markupLines(plain, true);\n return lines.every((l) => l === '') ? [] : lines;\n}\n\nclass MermaidReader {\n readonly warnings = new Warnings();\n readonly membership = new Membership(this.warnings, 'Mermaid');\n readonly nodes = new Map<string, NodeDraft>();\n readonly edges: EdgeDraft[] = [];\n readonly subgraphs = new Map<string, string | undefined>();\n readonly classDefs = new Map<string, StyleProps>();\n readonly styles = new Map<string, StyleProps>();\n readonly classes = new Map<string, string[]>();\n readonly linkStyles = new Map<number | 'default', StyleProps>();\n links = 0;\n\n constructor(readonly subgraphIds: ReadonlySet<string>) {}\n\n mention(ref: MermaidNodeRef, cluster: string | null): void {\n if (this.subgraphIds.has(ref.id) && ref.shape === undefined && ref.meta === undefined) {\n for (const c of ref.classes) this.addClass(ref.id, c);\n return;\n }\n let draft = this.nodes.get(ref.id);\n if (draft === undefined) {\n draft = { lines: [ref.id], outline: 'rect', classes: [] };\n this.nodes.set(ref.id, draft);\n }\n this.membership.place(ref.id, cluster);\n if (ref.shape !== undefined) {\n draft.lines = textLines(ref.text ?? '');\n draft.outline = this.outline(SHAPE_OUTLINES[ref.shape], ref.shape);\n }\n if (ref.meta?.shape !== undefined) draft.outline = this.outline(META_OUTLINES[ref.meta.shape], ref.meta.shape);\n if (ref.meta?.label !== undefined) draft.lines = textLines(ref.meta.label);\n for (const c of ref.classes) this.addClass(ref.id, c);\n }\n\n outline(outline: Outline | undefined, name: string): Outline {\n if (outline !== undefined) return outline;\n this.warnings.list('Mermaid shapes read as rectangles', name);\n return 'rect';\n }\n\n addClass(id: string, name: string): void {\n this.classes.set(id, [...(this.classes.get(id) ?? []), name]);\n }\n\n marker(head: LinkHead | undefined): MarkerRef | null {\n if (head === undefined) return null;\n if (head === 'o') return 'circle';\n if (head === 'x') this.warnings.add('Mermaid cross ends read as arrows.');\n return 'arrow';\n }\n\n link(link: MermaidLink, from: string, to: string): void {\n const index = this.links++;\n if (link.stroke === 'invisible') {\n this.warnings.add('Mermaid invisible links were dropped.');\n return;\n }\n const start = this.marker(link.start);\n const end = this.marker(link.end);\n const colors: Partial<EdgeStyle> = {\n ...(link.stroke === 'dotted' ? { dash: [4, 4] } : {}),\n ...(link.stroke === 'thick' ? { width: 3 } : {}),\n ...(start !== null ? { markerStart: start } : {}),\n ...(end !== 'arrow' ? { markerEnd: end } : {}),\n };\n const label = link.text === undefined ? [] : textLines(link.text).filter((l) => l !== '');\n this.edges.push({\n edge: { from, to, ...(label.length > 0 ? { label: label.join(' ') } : {}), ...(Object.keys(colors).length > 0 ? { colors } : {}) },\n index,\n });\n }\n\n walk(stmts: readonly MermaidStmt[], cluster: string | null): void {\n for (const s of stmts) {\n if (s.kind === 'chain') {\n for (const g of s.groups) for (const ref of g) this.mention(ref, cluster);\n s.links.forEach((link, k) => {\n for (const from of s.groups[k]!) for (const to of s.groups[k + 1]!) this.link(link, from.id, to.id);\n });\n } else if (s.kind === 'subgraph') {\n this.membership.openCluster(s.id, cluster);\n if (!this.subgraphs.has(s.id)) this.subgraphs.set(s.id, s.title);\n this.walk(s.stmts, s.id);\n } else if (s.kind === 'direction') {\n this.warnings.add('Mermaid subgraph directions were dropped; the page runs one way.');\n } else if (s.kind === 'classDef') {\n this.checkProps(s.props);\n for (const name of s.names) this.classDefs.set(name, [...(this.classDefs.get(name) ?? []), ...s.props]);\n } else if (s.kind === 'class') {\n for (const id of s.ids) this.addClass(id, s.className);\n } else if (s.kind === 'style') {\n this.checkProps(s.props);\n this.styles.set(s.id, [...(this.styles.get(s.id) ?? []), ...s.props]);\n } else if (s.kind === 'linkStyle') {\n this.checkProps(s.props);\n for (const i of s.indexes === 'default' ? ['default' as const] : s.indexes) {\n this.linkStyles.set(i, [...(this.linkStyles.get(i) ?? []), ...s.props]);\n }\n } else {\n this.warnings.list('Mermaid statements a diagram does not hold were dropped', s.keyword);\n }\n }\n }\n\n checkProps(props: StyleProps): void {\n for (const [key] of props) {\n if (!['fill', 'stroke', 'color', 'stroke-width', 'stroke-dasharray'].includes(key)) {\n this.warnings.list('Mermaid style properties a diagram does not hold were dropped', key);\n }\n }\n }\n\n propsOf(id: string, isNode: boolean): Map<string, string> {\n const props = new Map<string, string>();\n const lists = [isNode ? this.classDefs.get('default') : undefined, ...(this.classes.get(id) ?? []).map((c) => this.classDefs.get(c)), this.styles.get(id)];\n for (const list of lists) for (const [k, v] of list ?? []) props.set(k, v);\n return props;\n }\n}\n\nfunction nodeColors(props: ReadonlyMap<string, string>): Partial<NodeStyle> | undefined {\n const colors: Partial<NodeStyle> = {\n ...(props.has('fill') ? { fill: props.get('fill')! } : {}),\n ...(props.has('stroke') ? { stroke: props.get('stroke')! } : {}),\n ...(props.has('color') ? { text: props.get('color')! } : {}),\n ...(props.has('stroke-width') ? { strokeWidth: px(props.get('stroke-width')!) } : {}),\n ...(props.has('stroke-dasharray') ? { dash: dashOf(props.get('stroke-dasharray')!) } : {}),\n };\n return Object.keys(colors).length > 0 ? colors : undefined;\n}\n\nfunction edgeColors(base: Partial<EdgeStyle> | undefined, props: StyleProps): Partial<EdgeStyle> | undefined {\n const colors: Partial<EdgeStyle> = { ...base };\n for (const [k, v] of props) {\n if (k === 'stroke') colors.stroke = v;\n else if (k === 'color') colors.label = v;\n else if (k === 'stroke-width') colors.width = px(v);\n else if (k === 'stroke-dasharray') colors.dash = dashOf(v);\n }\n return Object.keys(colors).length > 0 ? colors : undefined;\n}\n\nfunction subgraphIdsOf(stmts: readonly MermaidStmt[], out = new Set<string>()): Set<string> {\n for (const s of stmts) if (s.kind === 'subgraph') subgraphIdsOf(s.stmts, out.add(s.id));\n return out;\n}\n\n/** Reads a Mermaid flowchart into a one-page document. Throws, naming the line, on text that is not one. */\nexport function readMermaid(text: string): ImportResult {\n const chart = parseMermaid(text);\n const r = new MermaidReader(subgraphIdsOf(chart.stmts));\n if (chart.directives > 0) r.warnings.add('Mermaid configuration directives were dropped.');\n r.walk(chart.stmts, null);\n const nodes: DataNode[] = [...r.nodes].map(([id, d]) => {\n const colors = nodeColors(r.propsOf(id, true));\n return { id, lines: d.lines, outline: d.outline, ...(colors !== undefined ? { colors } : {}) };\n });\n const edges = r.edges.map(({ edge, index }) => {\n const props = [...(r.linkStyles.get('default') ?? []), ...(r.linkStyles.get(index) ?? [])];\n const colors = edgeColors(edge.colors, props);\n const { colors: _c, ...rest } = edge;\n return colors !== undefined ? { ...rest, colors } : rest;\n });\n const containers: DataContainer[] = [...r.subgraphs].map(([id, title]) => {\n const members = r.membership.members(id);\n const colors = nodeColors(r.propsOf(id, false));\n return {\n id, role: 'container', label: title !== undefined ? textLines(title).join(' ') : id,\n ...(members.length > 0 ? { members } : {}),\n ...(colors !== undefined ? { colors } : {}),\n };\n });\n const page = graphPage({\n ...(chart.title !== undefined ? { name: chart.title } : {}),\n ...(DIRECTIONS[chart.direction] !== undefined ? { direction: DIRECTIONS[chart.direction] } : {}),\n nodes, edges, containers,\n });\n return { document: { pages: [page] }, warnings: r.warnings.all() };\n}\n","/** One page of a document as a Mermaid flowchart: regions as subgraphs, colors as classes and styles. */\nimport type { DataEdge, DataNode, LayoutDirection, NodeStyle, Outline } from '@weasel-js/diagram';\nimport type { DiagramDocument, ExportResult, WriteOptions } from '../document';\nimport { changed, edgeStyleIn, graphOut, hexColor, nodeLines, nodeStyleIn, type Cluster, type GraphOut } from '../graphWrite';\n\nconst HEADER: Readonly<Record<LayoutDirection, string>> = { down: 'TD', up: 'BT', right: 'LR', left: 'RL' };\nconst RESERVED = new Set(['end', 'subgraph', 'graph', 'flowchart', 'style', 'classdef', 'class', 'click', 'linkstyle', 'direction', 'default', 'call', 'href']);\nconst BRACKETS: Readonly<Record<string, readonly [string, string]>> = {\n rect: ['[', ']'], stadium: ['([', '])'], diamond: ['{', '}'], ellipse: ['((', '))'], hexagon: ['{{', '}}'],\n parallelogram: ['[/', '/]'], trapezoid: ['[/', '\\\\]'],\n};\n\nconst valid = (id: string) => /^[A-Za-z_]\\w*$/.test(id) && !RESERVED.has(id.toLowerCase());\n\n/** An id Mermaid reads for each of `ids`: itself where it can be, else a cleaned spelling no other id takes. */\nexport function mermaidIds(ids: readonly string[]): Map<string, string> {\n const out = new Map<string, string>();\n const taken = new Set(ids.filter(valid));\n for (const id of ids) {\n if (valid(id)) { out.set(id, id); continue; }\n let base = id.replace(/\\W+/g, '_').replace(/^_+(?=\\w)|(?<=\\w)_+$/g, '') || 'n';\n if (/^\\d/.test(base)) base = `n${base}`;\n if (!valid(base)) base = `${base}_`;\n let pick = base;\n for (let n = 2; taken.has(pick); n++) pick = `${base}_${n}`;\n taken.add(pick);\n out.set(id, pick);\n }\n return out;\n}\n\n/** Text as Mermaid quotes it: the characters it reads as syntax spelled as entities, lines joined by `<br>`. */\nexport function mermaidText(lines: readonly string[]): string {\n const text = lines.map((l) => l.replace(/#/g, '#35;').replace(/\"/g, '#quot;').replace(/</g, '#lt;').replace(/>/g, '#gt;')).join('<br>');\n return `\"${text === '' ? ' ' : text}\"`;\n}\n\nconst px = (n: number) => `${n}px`;\n\nfunction styleProps(style: Partial<NodeStyle>): string {\n return [\n style.fill !== undefined ? `fill:${hexColor(style.fill)}` : null,\n style.stroke !== undefined ? `stroke:${hexColor(style.stroke)}` : null,\n style.text !== undefined ? `color:${hexColor(style.text)}` : null,\n style.strokeWidth !== undefined ? `stroke-width:${px(style.strokeWidth)}` : null,\n style.dash !== undefined ? `stroke-dasharray:${style.dash.join(' ')}` : null,\n ].filter((p) => p !== null).join(',');\n}\n\nclass MermaidWriter {\n readonly lines: string[] = [];\n readonly ids: Map<string, string>;\n\n constructor(readonly out: GraphOut) {\n this.ids = mermaidIds([...out.page.data.nodes.map((n) => n.id), ...out.clusterIds]);\n }\n\n id(id: string): string {\n return this.ids.get(id) ?? id;\n }\n\n node(node: DataNode, indent: string): void {\n const outline: Outline = node.outline ?? 'rect';\n const [open, close] = BRACKETS[typeof outline === 'string' ? outline : 'rect']!;\n this.lines.push(`${indent}${this.id(node.id)}${open}${mermaidText(nodeLines(node, this.out.warnings, 'Mermaid'))}${close}`);\n }\n\n cluster(c: Cluster, indent: string): void {\n this.lines.push(`${indent}subgraph ${this.id(c.id)}${c.label !== undefined ? ` [${mermaidText([c.label])}]` : ''}`);\n for (const id of c.nodes) this.node(this.out.byId.get(id)!, `${indent} `);\n for (const child of c.clusters) this.cluster(child, `${indent} `);\n this.lines.push(`${indent}end`);\n }\n\n link(edge: DataEdge): string {\n const { markerStart, markerEnd, dash, width } = edgeStyleIn(this.out, edge);\n const head = (m: typeof markerEnd) => {\n if (m === null || m === undefined) return '';\n if ((typeof m === 'string' ? m : m.key) === 'circle') return 'o';\n return '>';\n };\n const end = head(markerEnd);\n let start = head(markerStart ?? null);\n if (start !== '' && start !== end) {\n this.out.warnings.add('Mermaid draws a link\\'s two heads alike; some ends were changed.');\n start = '';\n }\n const body = dash !== undefined ? '-.-' : (width ?? 0) >= 3 ? '==' : '--';\n const tail = end === '' ? (body === '--' ? '-' : body === '==' ? '=' : '') : end;\n return `${start === '>' ? '<' : start}${body}${tail}`;\n }\n\n edges(): void {\n for (const e of this.out.edges) {\n if (e.fromPort !== undefined || e.toPort !== undefined) this.out.warnings.add('Mermaid has no ports; connectors\\' ports were dropped.');\n const label = e.label !== undefined && e.label !== '' ? `|${mermaidText([e.label])}|` : '';\n this.lines.push(` ${this.id(e.from)} ${this.link(e)}${label} ${this.id(e.to)}`);\n }\n }\n\n styles(): void {\n const { out, lines } = this;\n const base = nodeStyleIn(out);\n lines.push(` classDef default ${styleProps(base)}`);\n const byProps = new Map<string, string[]>();\n for (const n of out.page.data.nodes) {\n const props = styleProps(changed(nodeStyleIn(out, n), base));\n if (props !== '') byProps.set(props, [...(byProps.get(props) ?? []), this.id(n.id)]);\n }\n [...byProps].forEach(([props, ids], i) => lines.push(` classDef s${i + 1} ${props}`, ` class ${ids.join(',')} s${i + 1}`));\n const visit = (c: Cluster) => {\n const props = c.style !== undefined ? styleProps(c.style) : '';\n if (props !== '') lines.push(` style ${this.id(c.id)} ${props}`);\n c.clusters.forEach(visit);\n };\n out.clusters.forEach(visit);\n if (out.edges.length === 0) return;\n const edge = edgeStyleIn(out);\n lines.push(` linkStyle default stroke:${hexColor(edge.stroke)},color:${hexColor(edge.label)}`);\n out.edges.forEach((e, i) => {\n const own = changed(edgeStyleIn(out, e), edge);\n const props = [\n own.stroke !== undefined ? `stroke:${hexColor(own.stroke)}` : null,\n own.label !== undefined ? `color:${hexColor(own.label)}` : null,\n own.width !== undefined ? `stroke-width:${px(own.width)}` : null,\n ].filter((p) => p !== null);\n if (props.length > 0) lines.push(` linkStyle ${i} ${props.join(',')}`);\n });\n }\n}\n\n/** Writes the page `opts.page` names, else the first, as a Mermaid flowchart. */\nexport function writeMermaid(doc: DiagramDocument, opts?: WriteOptions): ExportResult {\n const out = graphOut(doc, opts, 'Mermaid');\n if (out === null) return { text: 'flowchart TD\\n', warnings: [] };\n if (out.page.data.nodes.some((n) => n.at !== undefined)) out.warnings.add('Mermaid holds no positions; the page is laid out again when read.');\n const w = new MermaidWriter(out);\n const { page } = out;\n if (page.name !== undefined) w.lines.push('---', `title: ${JSON.stringify(page.name)}`, '---');\n w.lines.push(`flowchart ${HEADER[page.direction ?? 'down']}`);\n for (const n of out.nodes) w.node(n, ' ');\n for (const c of out.clusters) w.cluster(c, ' ');\n w.edges();\n w.styles();\n return { text: `${w.lines.join('\\n')}\\n`, warnings: out.warnings.all() };\n}\n","/** Mermaid as a {@link DiagramFormat}. */\nimport type { DiagramFormat } from '../document';\nimport { OTHER_KINDS, headerWord } from './parse';\nimport { readMermaid } from './read';\nimport { writeMermaid } from './write';\n\nconst FLOWCHART = /^(?:flowchart|graph|flowchart-elk)(?:\\s+(?:TB|TD|BT|LR|RL|[<>^v]))?\\s*(?:;|$)/i;\n\n/**\n * A Mermaid flowchart, one page per file, laid out on import. Any Mermaid\n * diagram is recognized, so reading another kind says which kind it is.\n */\nexport const DIAGRAM_MERMAID: DiagramFormat = {\n id: 'mermaid',\n name: 'Mermaid',\n extensions: ['.mmd', '.mermaid'],\n detect: (text) => {\n const header = headerWord(text);\n return header !== null && (FLOWCHART.test(header.text) || OTHER_KINDS.test(header.word));\n },\n read: readMermaid,\n write: writeMermaid,\n onePage: true,\n};\n","/** The formats a diagram reads from and writes to, and how a file finds its format. */\nimport type { DiagramFormat, ImportResult } from './document';\nimport { DIAGRAM_DOT } from './dot/format';\nimport { DIAGRAM_JSON } from './jsonFormat';\nimport { DRAW_XML } from './drawXml/format';\nimport { DIAGRAM_MERMAID } from './mermaid/format';\n\n/** Every format this package reads or writes. */\nexport const DIAGRAM_FORMATS: readonly DiagramFormat[] = [DIAGRAM_JSON, DRAW_XML, DIAGRAM_MERMAID, DIAGRAM_DOT];\n\nconst extensionOf = (format: DiagramFormat, fileName: string): boolean =>\n format.extensions.some((ext) => fileName.toLowerCase().endsWith(ext.toLowerCase()));\n\n/**\n * The format `text` is in: among those whose content test passes, the first\n * that claims `fileName`'s extension, else the first. `null` when none\n * passes, whatever the extension says, since an extension such as `.xml` names\n * many formats.\n */\nexport function detectFormat(\n text: string, fileName?: string, formats: readonly DiagramFormat[] = DIAGRAM_FORMATS,\n): DiagramFormat | null {\n const passing = formats.filter((f) => f.detect(text));\n if (fileName !== undefined) {\n const named = passing.find((f) => extensionOf(f, fileName));\n if (named !== undefined) return named;\n }\n return passing[0] ?? null;\n}\n\n/** Reads `text` with the format {@link detectFormat} picks. Rejects when none reads it. */\nexport async function readDocument(\n text: string, fileName?: string, formats: readonly DiagramFormat[] = DIAGRAM_FORMATS,\n): Promise<ImportResult> {\n const format = detectFormat(text, fileName, formats.filter((f) => f.read !== undefined));\n if (format === null) throw new Error(`${fileName ?? 'The text'} is not a diagram file this package reads`);\n return format.read!(text);\n}\n","/**\n * What `documentFromScene` reads off one scene node: a shape as a `DataNode`,\n * a connector as a `DataEdge`, a container or pool as a `DataContainer`, and a\n * group as a `DataGroup`, each in coordinates from its page's corner.\n */\nimport type { RectPose } from '@weasel-js/core';\nimport type { Vec2 } from '@weasel-js/core/math';\nimport {\n DEFAULT_PORTS, EDGE_STROKE_WIDTH, NODE_STROKE_WIDTH, dataEdgeStyle, dataNodeStyle, dataRegionStyle, diagramContainerOf, diagramEdgeOf, layoutOwnsPort,\n layoutOwnsRoute, poolAxisOf, titleIdOf, type DataContainer, type DataEdge, type DataGroup, type DataLane, type DataNode, type DiagramLabel,\n type DiagramRouter, type DiagramTheme, type EdgeStyle, type NodeStyle,\n} from '@weasel-js/diagram';\n\n/** A scene node as the readers see it. */\nexport interface ReadNode {\n id: string;\n parent: string | null;\n pose: unknown;\n data: unknown;\n dependsOn?: readonly string[] | 'children';\n}\n\n/** A scene as the readers see it. */\nexport interface ReadScene {\n get(id: never): ReadNode | undefined;\n childrenOf(id: never): readonly string[];\n}\n\ntype Paint = { paint?: { color?: unknown }; width?: unknown; dash?: unknown; markerStart?: unknown; markerEnd?: unknown };\ntype Data = { diagram?: Record<string, unknown>; fill?: Paint; stroke?: Paint; text?: unknown; bodyRow?: unknown; style?: { fontSize?: unknown } };\n\nconst ROUTERS: readonly DiagramRouter[] = ['straight', 'bezier', 'orthogonal', 'avoid'];\n\nconst dataOf = (node: ReadNode | undefined): Data => ((node?.data ?? {}) as Data);\nexport const traitOf = (node: ReadNode): Record<string, unknown> | null => dataOf(node).diagram ?? null;\nconst colorOf = (paint: Paint | undefined): string | undefined => (typeof paint?.paint?.color === 'string' ? paint.paint.color : undefined);\nconst same = (a: unknown, b: unknown): boolean => JSON.stringify(a) === JSON.stringify(b);\nconst moved = (p: Vec2, by: Vec2): Vec2 => ({ x: p.x - by.x, y: p.y - by.y });\n\n/** What a scene node is to the document, or `null` for something drawn on another's behalf. */\nexport function kindOf(node: ReadNode): 'shape' | 'region' | 'group' | 'edge' | null {\n if (diagramEdgeOf(node) !== null) return 'edge';\n if (diagramContainerOf(node) !== null) return 'region';\n const trait = traitOf(node);\n if (trait === null) return null;\n if ('group' in trait) return 'group';\n return 'outline' in trait ? 'shape' : null;\n}\n\n/** The fields of `actual` its owner set by hand (`own`, its `ownStyle`), or that differ from `themed`. `undefined` for none. */\nfunction ownColors<T extends object>(actual: Partial<T>, themed: Partial<T>, own: unknown): Partial<T> | undefined {\n const owned = new Set(Array.isArray(own) ? own : []);\n const out: Partial<T> = {};\n for (const [key, value] of Object.entries(actual) as [keyof T & string, T[keyof T & string] | undefined][]) {\n const field = key === 'label' ? 'text' : key;\n if (value !== undefined && (owned.has(field) || !same(value, themed[key]))) out[key] = value;\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\nconst textOf = (scene: ReadScene, id: string): string | undefined => {\n const text = dataOf(scene.get(id as never)).text;\n return typeof text === 'string' ? text : undefined;\n};\n\n/** A shape: its outline, text rows, box, role, colors, and the body layout and ports it was built with. */\nexport function readShape(scene: ReadScene, node: ReadNode, page: Vec2, theme: DiagramTheme): DataNode {\n const trait = traitOf(node)!;\n const data = dataOf(node);\n const pose = node.pose as RectPose;\n const rows = scene.childrenOf(node.id as never).map((id) => scene.get(id as never)!)\n .filter((c) => typeof dataOf(c).text === 'string' && typeof dataOf(c).bodyRow === 'number')\n .sort((p, q) => (dataOf(p).bodyRow as number) - (dataOf(q).bodyRow as number));\n const ownSize = Array.isArray(trait.ownFont) && trait.ownFont.includes('size');\n const themed = dataNodeStyle({ style: trait.style as string | undefined }, theme);\n const colors = ownColors<NodeStyle>({\n fill: colorOf(data.fill), stroke: colorOf(data.stroke), text: colorOf(dataOf(rows[0]).fill),\n strokeWidth: data.stroke?.width as number | undefined, dash: data.stroke?.dash as number[] | undefined,\n }, { ...themed, strokeWidth: themed.strokeWidth ?? NODE_STROKE_WIDTH }, trait.ownStyle);\n const body = trait.body as { padding: number; gap: number; verticalAlign: DataNode['verticalAlign'] } | undefined;\n return {\n id: node.id,\n outline: trait.outline as DataNode['outline'],\n ...(ownSize\n ? { rows: rows.map((r) => ({ kind: 'label' as const, text: dataOf(r).text as string, style: { fontSize: dataOf(r).style?.fontSize as number } })) }\n : { lines: rows.map((r) => dataOf(r).text as string) }),\n at: moved(pose, page),\n width: pose.width,\n height: pose.height,\n ...(typeof trait.style === 'string' ? { style: trait.style } : {}),\n ...(colors !== undefined ? { colors } : {}),\n ...(trait.pinned === true ? { pinned: true } : {}),\n ...(body !== undefined ? { padding: body.padding, gap: body.gap, verticalAlign: body.verticalAlign } : {}),\n ...(trait.ports !== undefined && !same(trait.ports, DEFAULT_PORTS) ? { ports: trait.ports as DataNode['ports'] } : {}),\n };\n}\n\n/** A label's placement, its near point moved onto the page. */\nfunction placementOf(trait: Record<string, unknown> | null, page: Vec2): DiagramLabel | undefined {\n const label = trait?.label as DiagramLabel | undefined;\n if (label === undefined) return undefined;\n const at = typeof label.at === 'object' ? { near: moved(label.at.near, page) } : label.at;\n return { at, ...(label.offset !== undefined ? { offset: label.offset } : {}), ...(label.dodge === false ? { dodge: false } : {}) };\n}\n\n/**\n * A connector: its ends, the ports and route its author set, those layout or\n * the avoiding router set as `routedPorts` and `routed`, its label, and its\n * colors. `page` is `null` for one whose ends sit on different pages, which\n * keeps no route.\n */\nexport function readEdge(node: ReadNode, label: ReadNode | undefined, page: Vec2 | null, theme: DiagramTheme): DataEdge {\n const trait = diagramEdgeOf(node)!;\n const [from, to] = node.dependsOn as readonly string[];\n const router = ROUTERS.find((r) => r === trait.router) ?? 'straight';\n const authored = (end: typeof trait.from) => (end.port !== undefined && !layoutOwnsPort(end) ? end.port : undefined);\n const laid = (end: typeof trait.from) => (end.port !== undefined && layoutOwnsPort(end) ? end.port : undefined);\n const points = trait.waypoints !== undefined && trait.waypoints.length > 0 ? trait.waypoints : undefined;\n const routed = points !== undefined ? (layoutOwnsRoute(trait) ? points : undefined) : trait.route;\n const stroke = dataOf(node).stroke;\n const themed = dataEdgeStyle({ style: trait.style }, theme);\n const colors = ownColors<EdgeStyle>({\n stroke: colorOf(stroke), label: label === undefined ? undefined : colorOf(dataOf(label).fill),\n width: stroke?.width as number | undefined, dash: stroke?.dash as number[] | undefined,\n markerStart: (stroke?.markerStart ?? null) as EdgeStyle['markerStart'], markerEnd: (stroke?.markerEnd ?? null) as EdgeStyle['markerEnd'],\n }, {\n ...themed, width: themed.width ?? EDGE_STROKE_WIDTH, markerStart: themed.markerStart ?? null,\n markerEnd: themed.markerEnd === undefined ? 'arrow' : themed.markerEnd,\n }, trait.ownStyle);\n const text = label === undefined ? undefined : dataOf(label).text;\n const placement = label === undefined || page === null ? undefined : placementOf(traitOf(label), page);\n const fromPort = authored(trait.from);\n const toPort = authored(trait.to);\n const routedPorts = { ...(laid(trait.from) ? { from: laid(trait.from) } : {}), ...(laid(trait.to) ? { to: laid(trait.to) } : {}) };\n return {\n id: node.id, from: from!, to: to!, router,\n ...(fromPort !== undefined ? { fromPort } : {}),\n ...(toPort !== undefined ? { toPort } : {}),\n ...(page !== null && Object.keys(routedPorts).length > 0 ? { routedPorts } : {}),\n ...(page !== null && points !== undefined && routed === undefined ? { waypoints: points.map((p) => moved(p, page)) } : {}),\n ...(page !== null && routed !== undefined && routed.length > 0 ? { routed: routed.map((p) => moved(p, page)) } : {}),\n ...(typeof text === 'string' && text !== '' ? { label: text } : {}),\n ...(placement !== undefined ? { labelPlacement: placement } : {}),\n ...(trait.style !== undefined ? { style: trait.style } : {}),\n ...(colors !== undefined ? { colors } : {}),\n };\n}\n\n/** The colors a region shows that `themed` does not give it: its box's, and its title's as `text`. */\nfunction regionColors(scene: ReadScene, node: ReadNode, themed: NodeStyle): Partial<NodeStyle> | undefined {\n const data = dataOf(node);\n const title = scene.get(titleIdOf(node.id) as never);\n return ownColors<NodeStyle>(\n { fill: colorOf(data.fill), stroke: colorOf(data.stroke), text: title === undefined ? undefined : colorOf(dataOf(title).fill) },\n themed, traitOf(node)?.ownStyle,\n );\n}\n\n/** The shapes and containers directly inside a region, in the scene's order. */\nfunction membersOf(scene: ReadScene, id: string): string[] {\n return scene.childrenOf(id as never).filter((c) => {\n const node = scene.get(c as never)!;\n const kind = kindOf(node);\n return kind === 'shape' || (kind === 'region' && diagramContainerOf(node)!.role === 'container');\n });\n}\n\nconst optional = <K extends string, V>(key: K, value: V | undefined): { [P in K]?: V } =>\n (value === undefined ? {} : { [key]: value }) as { [P in K]?: V };\n\n/** A container or a pool: its title, members or lanes, box (none for a fitted container), role, and colors. */\nexport function readRegion(scene: ReadScene, node: ReadNode, page: Vec2, theme: DiagramTheme): DataContainer {\n const trait = traitOf(node)!;\n const container = diagramContainerOf(node)!;\n const role = container.role === 'pool' ? 'pool' : 'container';\n const style = trait.style as string | undefined;\n const themed = dataRegionStyle({ role, style }, theme);\n const pose = node.pose as RectPose;\n const members = role === 'container' ? membersOf(scene, node.id) : [];\n const axis = poolAxisOf(container);\n return {\n id: node.id,\n role,\n ...optional('label', textOf(scene, titleIdOf(node.id))),\n ...(members.length > 0 ? { members } : {}),\n ...(role === 'pool' ? { axis, lanes: lanesOf(scene, node.id, axis, theme) } : {}),\n ...(container.fitted === true ? {} : { box: { ...moved(pose, page), width: pose.width, height: pose.height } }),\n ...(trait.pinned === true ? { pinned: true } : {}),\n ...optional('style', style),\n ...optional('colors', regionColors(scene, node, themed)),\n };\n}\n\nfunction lanesOf(scene: ReadScene, poolId: string, axis: 'x' | 'y', theme: DiagramTheme): DataLane[] {\n const start = (p: RectPose) => (axis === 'y' ? p.y : p.x);\n const lanes = scene.childrenOf(poolId as never).map((id) => scene.get(id as never)!)\n .filter((n) => diagramContainerOf(n)?.role === 'lane')\n .sort((p, q) => start(p.pose as RectPose) - start(q.pose as RectPose));\n return lanes.map((lane, i) => {\n const pose = lane.pose as RectPose;\n const members = membersOf(scene, lane.id);\n return {\n id: lane.id,\n ...optional('label', textOf(scene, titleIdOf(lane.id))),\n size: axis === 'y' ? pose.height : pose.width,\n ...(members.length > 0 ? { members } : {}),\n ...optional('colors', regionColors(scene, lane, dataRegionStyle({ role: 'lane' }, theme, i))),\n };\n });\n}\n\n/** A group: the shapes and groups it is drawn around, and its label. */\nexport function readGroup(scene: ReadScene, node: ReadNode): DataGroup {\n const group = traitOf(node)!.group as { reorder?: 'x' | 'y' };\n const members = (Array.isArray(node.dependsOn) ? node.dependsOn : []).filter((id) => {\n const member = scene.get(id as never);\n return member !== undefined && kindOf(member) !== null && kindOf(member) !== 'edge';\n });\n return {\n id: node.id, members,\n ...optional('label', textOf(scene, `${node.id}/label`)),\n ...optional('reorder', group.reorder),\n };\n}\n","/** A diagram scene as a {@link DiagramDocument}: what every format writes from. */\nimport {\n pageHolding, placedPagesOf, type PlacedPage, type RectPose, type Scene,\n} from '@weasel-js/core';\nimport {\n DIAGRAM_THEME_KEY, diagramLabelOf, documentBoundsOf, diagramThemeFrom, offPageSplits, type DataContainer, type DataEdge, type DataGroup,\n type DataNode, type DiagramTheme,\n} from '@weasel-js/diagram';\nimport type { DiagramDocument, DocumentPage } from './document';\nimport { kindOf, readEdge, readGroup, readRegion, readShape, type ReadNode, type ReadScene } from './sceneReaders';\n\n/** Options for {@link documentFromScene}. */\nexport interface DocumentFromSceneOptions {\n /** The theme colors are read against when the scene's `diagram:theme` names none. Default the night theme. */\n theme?: DiagramTheme;\n}\n\ntype AnyScene = ReadScene & {\n roots: readonly string[];\n renderOrderNodes(): readonly ReadNode[];\n doc: { get(key: string): unknown };\n};\n\ninterface PageBucket { nodes: DataNode[]; edges: DataEdge[]; groups: DataGroup[]; containers: DataContainer[] }\n\n/** One page around everything, for a scene with no page list. */\nfunction contentPage(scene: AnyScene): PlacedPage {\n const boxes = scene.roots.map((id) => scene.get(id as never)!.pose as RectPose);\n const x = boxes.length === 0 ? 0 : Math.min(...boxes.map((b) => b.x));\n const y = boxes.length === 0 ? 0 : Math.min(...boxes.map((b) => b.y));\n const width = boxes.length === 0 ? 0 : Math.max(...boxes.map((b) => b.x + b.width)) - x;\n const height = boxes.length === 0 ? 0 : Math.max(...boxes.map((b) => b.y + b.height)) - y;\n return { id: 'page-1', x, y, width, height, index: 0 };\n}\n\n/**\n * Reads a diagram scene into a document: one page per page in its `core:pages`\n * (one page around everything when it has none), each holding the shapes,\n * connectors, containers and pools, and groups on it, in coordinates from the\n * page's corner. A shape belongs to the page its outermost container does, and\n * that is the one its box overlaps most, or the nearest one when it overlaps\n * none. A connector the scene splits off-page, or whose ends export to\n * different pages, goes in `crossPageEdges`: without waypoints when split,\n * with them in world coordinates when not. Colors are kept\n * where the scene's theme would not give them: the author's own, and any a\n * theme never set.\n */\nexport function documentFromScene<TData, TLayer extends string, TPose>(\n scene: Scene<TData, TLayer, TPose>, opts: DocumentFromSceneOptions = {},\n): DiagramDocument {\n const s = scene as unknown as AnyScene;\n const themeValue = s.doc.get(DIAGRAM_THEME_KEY) as DiagramDocument['theme'];\n const theme = diagramThemeFrom(themeValue, opts.theme);\n const placed = placedPagesOf(scene);\n const pages = placed.length > 0 ? placed : [contentPage(s)];\n const buckets = new Map(pages.map((p) => [p.id, { nodes: [], edges: [], groups: [], containers: [] } as PageBucket]));\n const boxOf = (node: ReadNode) => documentBoundsOf(scene, node);\n const pageCache = new Map<string, PlacedPage>();\n const pageOf = (node: ReadNode): PlacedPage => {\n let root = node;\n while (root.parent !== null) root = s.get(root.parent as never)!;\n if (!pageCache.has(root.id)) pageCache.set(root.id, pageHolding(pages, boxOf(root))!);\n return pageCache.get(root.id)!;\n };\n\n const labels = new Map<string, ReadNode>();\n const edges: ReadNode[] = [];\n const itemPage = new Map<string, PlacedPage>();\n for (const node of s.renderOrderNodes()) {\n const kind = kindOf(node);\n if (kind === null) {\n const deps = node.dependsOn;\n if (diagramLabelOf(node) !== null && Array.isArray(deps) && deps.length === 1) labels.set(deps[0]!, node);\n continue;\n }\n if (kind === 'edge') {\n edges.push(node);\n continue;\n }\n const page = pageOf(node);\n itemPage.set(node.id, page);\n const bucket = buckets.get(page.id)!;\n if (kind === 'shape') bucket.nodes.push(readShape(s, node, page, theme));\n else if (kind === 'group') bucket.groups.push(readGroup(s, node));\n else if (isContainerOrPool(node)) bucket.containers.push(readRegion(s, node, page, theme));\n }\n\n const splitInputs = edges.flatMap((node) => {\n const [from, to] = Array.isArray(node.dependsOn) ? node.dependsOn : [];\n if (from === undefined || to === undefined || !itemPage.has(from) || !itemPage.has(to)) return [];\n return [{ id: node.id, from: boxOf(s.get(from as never)!), to: boxOf(s.get(to as never)!) }];\n });\n const splits = offPageSplits({ pages, edges: splitInputs });\n const crossPageEdges: DataEdge[] = [];\n for (const node of edges) {\n const [from, to] = Array.isArray(node.dependsOn) ? node.dependsOn : [];\n const fromPage = itemPage.get(from ?? '');\n const toPage = itemPage.get(to ?? '');\n if (fromPage === undefined || toPage === undefined) continue;\n const split = (splits.get(node.id) ?? null) !== null;\n if (fromPage === toPage && !split) buckets.get(fromPage.id)!.edges.push(readEdge(node, labels.get(node.id), fromPage, theme));\n else crossPageEdges.push(readEdge(node, labels.get(node.id), split ? null : { x: 0, y: 0 }, theme));\n }\n\n return {\n pages: pages.map((p): DocumentPage => {\n const { nodes, edges: pageEdges, groups, containers } = buckets.get(p.id)!;\n return {\n id: p.id,\n ...(p.name !== undefined ? { name: p.name } : {}),\n width: p.width,\n height: p.height,\n data: { nodes, edges: pageEdges, ...(groups.length > 0 ? { groups } : {}), ...(containers.length > 0 ? { containers } : {}) },\n };\n }),\n ...(crossPageEdges.length > 0 ? { crossPageEdges } : {}),\n ...(themeValue !== undefined ? { theme: themeValue } : {}),\n };\n}\n\nconst isContainerOrPool = (node: ReadNode): boolean => {\n const trait = (node.data as { diagram?: { container?: { role?: string } } }).diagram;\n return trait?.container?.role === 'container' || trait?.container?.role === 'pool';\n};\n","/** A {@link DiagramDocument} as scene specs and document values: what every import draws from. */\nimport { PAGES_DOC_KEY, layoutPages, type Page, type SerializedDoc } from '@weasel-js/core';\nimport {\n DIAGRAM_THEME_KEY, diagramScene, diagramThemeFrom, themeDocValue, type DiagramData, type DiagramSpec, type DiagramTheme,\n type MeasureRowText,\n} from '@weasel-js/diagram';\nimport type { DiagramDocument } from './document';\nimport { laidOutPage, needsLayout } from './pageLayout';\nimport { shiftData } from './shiftData';\n\n/** Options for {@link documentSpecs}. */\nexport interface DocumentSpecsOptions<TLayer extends string = 'main'> {\n /** The layer every spec goes on. Default `'main'`. */\n layer?: TLayer;\n /** The theme to draw in. Default the one the document names, else the night theme. */\n theme?: DiagramTheme;\n /** Measures text. Default an estimate from character count. */\n measure?: MeasureRowText;\n}\n\n/** What {@link documentSpecs} returns: the nodes, and the `core:pages` and `diagram:theme` document values. */\nexport interface DocumentScene<TLayer extends string = 'main'> {\n specs: DiagramSpec<TLayer>[];\n doc: SerializedDoc;\n}\n\n/**\n * The scene a document draws as. Its pages are placed with core's\n * `layoutPages`, as a scene's `core:pages` places them. A page whose nodes\n * all have a place is drawn where they say; any other page is laid out first,\n * with `layered`, its placed nodes pinned (and grows to hold the result). Then\n * every page, moved to its place, and the edges between pages are drawn by one\n * `diagramScene` call with no layout, so the scene holds places and routes and\n * no layout runs again.\n */\nexport function documentSpecs<TLayer extends string = 'main'>(\n document: DiagramDocument, opts: DocumentSpecsOptions<TLayer> = {},\n): DocumentScene<TLayer> {\n const theme = opts.theme ?? diagramThemeFrom(document.theme);\n const measure = opts.measure ? { measure: opts.measure } : {};\n const pages = document.pages.map((p) => (needsLayout(p) ? laidOutPage(p, { theme, ...measure }) : p));\n const pageList: Page[] = pages.map(({ id, name, width, height }) => ({ id, ...(name !== undefined ? { name } : {}), width, height }));\n const placed = layoutPages(pageList);\n const data: DiagramData = { nodes: [], edges: [], groups: [], containers: [] };\n pages.forEach((page, i) => {\n const shifted = shiftData(page.data, placed[i]!);\n data.nodes = [...data.nodes, ...shifted.nodes];\n data.edges = [...data.edges, ...shifted.edges];\n data.groups = [...data.groups!, ...(shifted.groups ?? [])];\n data.containers = [...data.containers!, ...(shifted.containers ?? [])];\n });\n data.edges = [...data.edges, ...(document.crossPageEdges ?? [])];\n const specs = diagramScene(data, { layout: 'none', theme, layer: (opts.layer ?? 'main') as TLayer, ...measure });\n return { specs, doc: { [PAGES_DOC_KEY]: { pages: pageList }, [DIAGRAM_THEME_KEY]: themeDocValue(theme) } };\n}\n","/**\n * One page of a diagram scene as `SvgNode`s: the nodes whose box meets the\n * page, each written the way the canvas paints it.\n */\nimport {\n boundsOfPath,\n derivedDepOf,\n derivedPartsOf,\n effectivePose,\n isAnnotationLayer,\n type DrawCommand,\n type NodeShapeEntry,\n type Paint,\n type Path,\n type RectPose,\n type Scene,\n} from '@weasel-js/core';\nimport { diagramShape, markShape } from '@weasel-js/diagram';\nimport {\n svgLeafFromKit,\n svgNodesFromKit,\n svgPaintFromKit,\n svgStrokeFromKit,\n type SvgGroupNode,\n type SvgKitLeafData,\n type SvgKitPose,\n type SvgKitTree,\n type SvgKitTreeNode,\n type SvgNode,\n type SvgPathNode,\n} from '@weasel-js/svg';\n\n/** A page's rect in world space. A `PlacedPage` is one. */\nexport interface PageRect {\n readonly x: number;\n readonly y: number;\n readonly width: number;\n readonly height: number;\n}\n\n/** A diagram scene as the exports read it: world-space `RectPose`s. */\nexport type PageExportScene = Scene<unknown, string, RectPose>;\n\ntype Box = { x: number; y: number; width: number; height: number };\ntype SceneNode = NonNullable<ReturnType<PageExportScene['get']>>;\n\nconst meets = (a: Box, b: Box): boolean =>\n Math.min(a.x + a.width, b.x + b.width) >= Math.max(a.x, b.x)\n && Math.min(a.y + a.height, b.y + b.height) >= Math.max(a.y, b.y);\n\nconst poseOf = (pose: RectPose): SvgKitPose => ({\n x: pose.x, y: pose.y, width: pose.width, height: pose.height,\n ...(pose.rotation ? { rotation: pose.rotation } : {}),\n});\n\n/** A painter's path command as an SVG path, its paints resolved in `box`. */\nfunction commandNode(cmd: DrawCommand, pose: SvgKitPose): SvgPathNode | null {\n if (cmd.kind !== 'path') return null;\n const node: SvgPathNode = { kind: 'path', path: cmd.path, fill: svgPaintFromKit((cmd.fill?.paint ?? null) as Paint | null, pose) };\n const stroke = svgStrokeFromKit(cmd.stroke as Parameters<typeof svgStrokeFromKit>[0], pose);\n if (stroke) node.stroke = stroke;\n if (pose.rotation) node.rotation = pose.rotation;\n return node;\n}\n\n/** What a diagram painter draws for `node`, or `null` when none claims it. */\nfunction diagramPainted(painters: readonly NodeShapeEntry<unknown, RectPose>[], node: SceneNode, pose: RectPose): SvgPathNode[] | null {\n const painter = painters.find((p) => p.matches(node as never));\n if (!painter) return null;\n const at = poseOf(pose);\n return painter.paint(node as never, pose).flatMap((cmd) => commandNode(cmd, at) ?? []);\n}\n\n/** A derived path's parts, each painted as the derived-node painter paints it. */\nfunction derivedNodes(path: Path, data: SvgKitLeafData): SvgNode[] {\n const parts = derivedPartsOf(path) ?? [{ path }];\n return parts.flatMap((part) => svgLeafFromKit({\n path: part.path,\n ...(part.fill !== undefined ? { fill: part.fill } : data.fill !== undefined ? { fill: data.fill } : {}),\n stroke: part.stroke !== undefined ? part.stroke : data.stroke,\n }, boundsOfPath(part.path)) ?? []);\n}\n\nconst one = (nodes: SvgNode[]): SvgNode | null =>\n nodes.length === 0 ? null : nodes.length === 1 ? nodes[0]! : { kind: 'group', children: nodes };\n\n/**\n * The `SvgNode`s of everything on `page`, in paint order: every node on a\n * visible content layer whose box meets the page, with what is under it.\n * Diagram outlines and drawn marks go through the diagram painters, a node\n * that derives its path (a connector) is drawn along that path, and anything\n * else is written by `svgLeafFromKit`.\n */\nexport function pageSvgNodes(scene: PageExportScene, page: PageRect): SvgNode[] {\n const painters = [diagramShape<RectPose>(), markShape<RectPose>()];\n const shown = new Set(scene.layers.filter((l) => l.visible && !isAnnotationLayer(l)).map((l) => l.id));\n const poseCache = new Map<string, RectPose>();\n const pose = (node: SceneNode): RectPose => {\n let p = poseCache.get(node.id);\n if (p === undefined) poseCache.set(node.id, (p = effectivePose(scene, node)));\n return p;\n };\n const pathOf = (node: SceneNode) => (node.kind === 'leaf' ? derivedDepOf(scene, node.id)?.path ?? null : null);\n\n const tree: SvgKitTree = {\n roots: scene.layers.flatMap((l) => scene.roots.filter((id) => scene.get(id)?.layer === l.id)),\n childrenOf: (id) => scene.childrenOf(id as never),\n get(id) {\n const node = scene.get(id as never);\n if (!node) return undefined;\n return {\n kind: node.kind, data: node.data, pose: poseOf(pose(node)),\n ...(node.hidden ? { hidden: true } : {}),\n ...(node.kind === 'container' && node.copiesFromPose\n ? { copiesFromPose: node.copiesFromPose as SvgKitTreeNode['copiesFromPose'] }\n : {}),\n };\n },\n };\n\n return svgNodesFromKit(tree, {\n include(id) {\n const node = scene.get(id as never);\n if (!node || !shown.has(node.layer)) return false;\n const path = pathOf(node);\n return meets(path ? boundsOfPath(path) : pose(node), page);\n },\n leaf(id, kit) {\n const node = scene.get(id as never)!;\n const path = pathOf(node);\n if (path) return one(derivedNodes(path, kit.data as SvgKitLeafData));\n const painted = diagramPainted(painters, node, pose(node));\n return painted ? one(painted) : svgLeafFromKit(kit.data as SvgKitLeafData, kit.pose);\n },\n group(id, g): SvgGroupNode {\n const node = scene.get(id as never)!;\n const outline = diagramPainted(painters, node, pose(node));\n return outline ? { ...g, children: [...outline, ...g.children] } : g;\n },\n });\n}\n","/**\n * One page of a diagram as an SVG document.\n */\nimport { layoutTextPose } from '@weasel-js/core';\nimport { diagramThemeOf } from '@weasel-js/diagram';\nimport { serializeSvg, warmSvg, type SerializeOptions, type SvgNode } from '@weasel-js/svg';\nimport { pageSvgNodes, type PageExportScene, type PageRect } from './pageNodes';\n\n/** Options for {@link exportPageSvg}. */\nexport interface ExportPageSvgOptions extends Pick<SerializeOptions, 'title' | 'onWarn' | 'pretty'> {\n /** The color painted under the page. Default: the page color of the\n * scene's diagram theme (`diagram:theme`). `null` paints none. */\n background?: string | null;\n}\n\n/** The page color a page export paints when told none: the scene theme's. */\nexport function pageBackground(scene: PageExportScene, background: string | null | undefined): string | null {\n return background === undefined ? diagramThemeOf(scene).page : background;\n}\n\n/**\n * Write `page` of `scene` as an SVG document: its `viewBox` is the page rect,\n * its size the page's, the page color comes first, and the scene is drawn as\n * the canvas draws it, cut to the page's edges. What lies wholly off the page\n * is left out.\n *\n * It waits for the paint kinds and faces the document needs, so its text is\n * written in the lines the canvas lays it out into. A load that fails goes to\n * `onWarn`, and the export goes ahead without it.\n */\nexport async function exportPageSvg(\n scene: PageExportScene,\n page: PageRect,\n opts: ExportPageSvgOptions = {},\n): Promise<string> {\n const { background, ...given } = opts;\n const nodes: SvgNode[] = [];\n const color = pageBackground(scene, background);\n if (color !== null) {\n nodes.push({ kind: 'path', path: { kind: 'rect', x: page.x, y: page.y, width: page.width, height: page.height }, fill: { kind: 'solid', color } });\n }\n nodes.push(...pageSvgNodes(scene, page));\n const serialize: SerializeOptions = {\n ...given,\n viewBox: { x: page.x, y: page.y, width: page.width, height: page.height },\n width: page.width,\n height: page.height,\n textLayout: layoutTextPose,\n };\n try {\n await warmSvg(nodes, serialize);\n } catch (err) {\n serialize.onWarn?.(`a paint kind or font this export uses failed to load: ${String(err)}`);\n }\n return serializeSvg(nodes, serialize);\n}\n","/**\n * One page of a diagram as a PNG image.\n */\nimport { renderSceneToPixels, warmRender, type RasterImage } from '@weasel-js/core';\nimport type { PageExportScene, PageRect } from './pageNodes';\nimport { pageBackground } from './pageSvg';\n\n/** Options for {@link exportPagePng}. */\nexport interface ExportPagePngOptions {\n /** Output pixels per world unit: 2 makes an image twice the page's size. */\n scale: number;\n /** The color painted under the page. Default: the page color of the\n * scene's diagram theme. `null` leaves it transparent. */\n background?: string | null;\n}\n\n/** `image` encoded as a PNG. */\nfunction encodePng(image: RasterImage): Promise<Blob> {\n const canvas = new OffscreenCanvas(image.width, image.height);\n const ctx = canvas.getContext('2d');\n if (!ctx) throw new Error('exportPagePng: no 2D context to encode the image with');\n ctx.putImageData(new ImageData(new Uint8ClampedArray(image.data), image.width, image.height), 0, 0);\n return canvas.convertToBlob({ type: 'image/png' });\n}\n\n/**\n * Draw `page` of `scene` into a PNG, `page × scale` pixels, through the\n * renderer the canvas draws with, so it shows what the canvas shows, cut to\n * the page's edges. Annotation layers are left out.\n *\n * The caller has registered whatever the scene needs painting with, as it\n * must to draw it at all: the diagram painters (`registerDiagramShape`,\n * `registerMarkShape`) and its fonts. Paint kinds and faces that load on\n * demand are waited for. Needs WebGL2 and `OffscreenCanvas`.\n */\nexport async function exportPagePng(\n scene: PageExportScene,\n page: PageRect,\n opts: ExportPagePngOptions,\n): Promise<Blob> {\n const background = pageBackground(scene, opts.background);\n const args = {\n scene,\n sourceRect: { x: page.x, y: page.y, width: page.width, height: page.height },\n scale: { x: opts.scale, y: opts.scale },\n ...(background !== null ? { background } : {}),\n };\n await warmRender({ render: args });\n return encodePng(renderSceneToPixels(args));\n}\n","/**\n * The raster hook `writePdf` calls for what a PDF cannot draw: effects and shaders.\n */\nimport { createScene, mat3, warmRender, type RasterSession } from '@weasel-js/core';\nimport type { WritePdfOptions } from '@weasel-js/pdf';\n\n/**\n * A hook that draws its commands through `session`, which are in page points. The renderer reads\n * `world`-unit paint through the session's view, so that view is the page view followed by the move\n * from page points to raster pixels, written as the source rect and scale the session plans it from.\n */\nexport function pageRasterizer(session: RasterSession): NonNullable<WritePdfOptions['rasterize']> {\n const empty = createScene({ systemLayers: [{ id: 'main' }] });\n return async (commands, rect, scale, view) => {\n await warmRender({ commands });\n const toPixels = mat3.translated(mat3.scaled(mat3.identity(), scale, scale), -rect.x, -rect.y);\n const toRaster = view ? mat3.multiply(Float64Array.from(toPixels), view) : toPixels;\n const sx = toRaster[0]!;\n const sy = toRaster[4]!;\n return session.render({\n scene: empty,\n sourceRect: { x: -toRaster[6]! / sx, y: -toRaster[7]! / sy, width: (rect.width * scale) / sx, height: (rect.height * scale) / sy },\n scale: { x: sx, y: sy },\n overlay: [{ kind: 'group', transform: toPixels, children: [...commands] }],\n });\n };\n}\n","/**\n * Every page of a diagram as one PDF.\n */\nimport { createRasterSession, planPixelRender, viewToMat3, warmRender } from '@weasel-js/core';\nimport { registryFontSource, writePdf, type PdfPage, type PdfSkip } from '@weasel-js/pdf';\nimport type { PageExportScene, PageRect } from './pageNodes';\nimport { pageBackground } from './pageSvg';\nimport { pageRasterizer } from './pdfRaster';\n\n/** PDF points per page unit: 72 points to the inch over 96 units to the inch. */\nconst PT_PER_UNIT = 0.75;\n\n/** Options for {@link exportPagesPdf}. */\nexport interface ExportPagesPdfOptions {\n /** The color painted under each page. Default: the page color of the\n * scene's diagram theme. `null` leaves it unpainted. */\n background?: string | null;\n /** The document's title. */\n title?: string;\n}\n\n/**\n * Write each of `pages` of `scene` as a page of one PDF, `page × 0.75` points\n * in size, in the order given. Shapes and strokes are vector; text is real,\n * selectable text in its embedded face. What a PDF cannot draw is painted\n * through the renderer and placed as an image, and anything it could not\n * carry at all comes back in `skipped`. Annotation layers are left out.\n *\n * The caller has registered what the scene needs painting with, as for\n * `exportPagePng`, including each font's outlines. Needs WebGL2 and\n * `OffscreenCanvas`.\n */\nexport async function exportPagesPdf(\n scene: PageExportScene,\n pages: readonly PageRect[],\n opts: ExportPagesPdfOptions = {},\n): Promise<{ blob: Blob; skipped: readonly PdfSkip[] }> {\n const background = pageBackground(scene, opts.background);\n const out: PdfPage[] = [];\n for (const page of pages) {\n const args = {\n scene,\n sourceRect: { x: page.x, y: page.y, width: page.width, height: page.height },\n scale: { x: PT_PER_UNIT, y: PT_PER_UNIT },\n };\n await warmRender({ render: args });\n const plan = planPixelRender(args);\n const width = page.width * PT_PER_UNIT;\n const height = page.height * PT_PER_UNIT;\n // The planner sizes a background to whole pixels, which can stop short of the page's edge.\n const ground = background === null ? [] : [{\n kind: 'path' as const,\n path: { kind: 'rect' as const, x: 0, y: 0, width, height },\n fill: { paint: { kind: 'solid' as const, color: background } },\n }];\n out.push({ width, height, commands: [...ground, ...plan.commands], view: viewToMat3(plan.view) });\n }\n\n const session = createRasterSession();\n try {\n const { bytes, skipped } = await writePdf(out, {\n fonts: registryFontSource,\n ...(opts.title !== undefined ? { title: opts.title } : {}),\n rasterize: pageRasterizer(session),\n });\n const copy = new ArrayBuffer(bytes.byteLength);\n new Uint8Array(copy).set(bytes);\n return { blob: new Blob([copy], { type: 'application/pdf' }), skipped };\n } finally {\n session.dispose();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/document.ts","../src/shiftData.ts","../src/pageLayout.ts","../src/graphRead.ts","../src/lineError.ts","../src/dot/lex.ts","../src/dot/parse.ts","../src/dot/values.ts","../src/dot/read.ts","../src/graphWrite.ts","../src/dot/write.ts","../src/dot/format.ts","../src/jsonFormat.ts","../src/drawXml/style.ts","../src/drawXml/cells.ts","../src/drawXml/pageCells.ts","../src/drawXml/cellText.ts","../src/drawXml/mapping.ts","../src/drawXml/readStyle.ts","../src/drawXml/readPage.ts","../src/drawXml/read.ts","../src/drawXml/writeStyle.ts","../src/drawXml/writeXml.ts","../src/drawXml/writeEdge.ts","../src/drawXml/writePage.ts","../src/drawXml/write.ts","../src/drawXml/format.ts","../src/mermaid/lex.ts","../src/mermaid/parse.ts","../src/mermaid/read.ts","../src/mermaid/write.ts","../src/mermaid/format.ts","../src/formats.ts","../src/sceneReaders.ts","../src/fromScene.ts","../src/toScene.ts","../src/pageNodes.ts","../src/pageSvg.ts","../src/pagePng.ts","../src/pdfRaster.ts","../src/pagesPdf.ts"],"names":["num","marker","fail","attrList","attrs","claim","POINTS_PER_INCH","shapeOf","kindOf","boxOf","NAMED","decodeEntities","markerOf","outlineOf","dashOf","readNode","readEdge","childElements","color","nodeLines","VERTICAL","dataNodeStyle","dataRegionStyle","dataEdgeStyle","DEFAULT_PORTS","edgeIdOf","diagramScene","diagramThemeFrom","SHAPES","KEYWORDS","keyword","DIRECTIONS","nodeColors","HEADER","px","colorOf","moved","textOf","NODE_STROKE_WIDTH","EDGE_STROKE_WIDTH","membersOf","optional","readRegion","readGroup","pageOf","DIAGRAM_THEME_KEY","warmRender"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * The interchange document every format reads and writes: a diagram's pages,\n * each holding a `DiagramData`, and the theme it is drawn in. Only\n * `documentFromScene` and `documentSpecs` know scenes, so a codec is written\n * once for a chart and for a data-backed host alike.\n */\nimport type { DataEdge, DiagramData, DiagramTheme, LayoutDirection } from '@weasel-js/diagram';\n\n/**\n * One page: its sheet size, and what is on it in coordinates from the page's\n * top-left corner. Ids share one namespace across the whole document.\n */\nexport interface DocumentPage {\n id: string;\n name?: string;\n width: number;\n height: number;\n data: DiagramData;\n /** The way layout runs when the page is laid out on import, which it is when a node has no `at`. */\n direction?: LayoutDirection;\n}\n\n/** A diagram as every format reads and writes it. */\nexport interface DiagramDocument {\n pages: readonly DocumentPage[];\n /**\n * Edges the scene splits off-page, and edges whose ends export to different pages: their ends, ports, router,\n * label, and colors. One the scene splits off-page carries no waypoints,\n * since it draws as two stubs ending at off-page tags; one it keeps whole\n * (an end in the gap between pages) keeps them, in world coordinates.\n */\n crossPageEdges?: readonly DataEdge[];\n /** A shipped theme's id, or a whole theme. Unset, the host's own. */\n theme?: string | DiagramTheme;\n}\n\n/** What a format read, and what it could not carry into a diagram, one sentence each. */\nexport interface ImportResult {\n document: DiagramDocument;\n warnings: readonly string[];\n}\n\n/** What a format wrote, and what it could not carry out of the diagram, one sentence each. */\nexport interface ExportResult {\n text: string;\n warnings: readonly string[];\n}\n\n/** Options for {@link DiagramFormat.write}. */\nexport interface WriteOptions {\n /** The page a format with no pages writes. Default the first. */\n page?: string;\n}\n\n/** A file format a diagram can be read from or written to. */\nexport interface DiagramFormat {\n id: string;\n /** What a menu calls it. */\n name: string;\n /** With their dots, most usual first: `['.dot', '.gv']`. */\n extensions: readonly string[];\n /** Whether `text` looks like this format, from its content alone. */\n detect(text: string): boolean;\n /** Throws on text this format cannot read. */\n read?(text: string): ImportResult | Promise<ImportResult>;\n write?(doc: DiagramDocument, opts?: WriteOptions): ExportResult;\n /** Whether {@link write} writes one page rather than the whole document. */\n onePage?: boolean;\n}\n\n/** The page a one-page format writes: the one `opts.page` names, else the first. `null` for a document with none. */\nexport function writtenPage(doc: DiagramDocument, opts: WriteOptions = {}): DocumentPage | null {\n return doc.pages.find((p) => p.id === opts.page) ?? doc.pages[0] ?? null;\n}\n","/** A page's `DiagramData` moved as a whole: what puts page coordinates into the world. */\nimport type { Vec2 } from '@weasel-js/core/math';\nimport type { DataContainer, DataEdge, DiagramData, DiagramLabel } from '@weasel-js/diagram';\n\nconst shift = (p: Vec2, by: Vec2): Vec2 => ({ x: p.x + by.x, y: p.y + by.y });\n\nfunction shiftPlacement(label: DiagramLabel, by: Vec2): DiagramLabel {\n return typeof label.at === 'object' ? { ...label, at: { near: shift(label.at.near, by) } } : label;\n}\n\nfunction shiftEdge(e: DataEdge, by: Vec2): DataEdge {\n return {\n ...e,\n ...(e.waypoints !== undefined ? { waypoints: e.waypoints.map((p) => shift(p, by)) } : {}),\n ...(e.routed !== undefined ? { routed: e.routed.map((p) => shift(p, by)) } : {}),\n ...(e.labelPlacement !== undefined ? { labelPlacement: shiftPlacement(e.labelPlacement, by) } : {}),\n };\n}\n\nconst shiftContainer = (c: DataContainer, by: Vec2): DataContainer =>\n (c.box === undefined ? c : { ...c, box: { ...c.box, ...shift(c.box, by) } });\n\n/** `data` with every node place, region box, waypoint, laid-out route, and label point moved by `by`. */\nexport function shiftData(data: DiagramData, by: Vec2): DiagramData {\n if (by.x === 0 && by.y === 0) return data;\n return {\n ...data,\n nodes: data.nodes.map((n) => (n.at === undefined ? n : { ...n, at: shift(n.at, by) })),\n edges: data.edges.map((e) => shiftEdge(e, by)),\n ...(data.containers !== undefined ? { containers: data.containers.map((c) => shiftContainer(c, by)) } : {}),\n };\n}\n","/**\n * Laying out a page whose nodes are not all placed, as a file with no\n * geometry gives them: once, on import, so the scene holds places rather than\n * a layout to run again.\n */\nimport type { Vec2 } from '@weasel-js/core/math';\nimport {\n diagramScene, edgeIdOf, type DataContainer, type DataEdge, type DiagramEdge, type DiagramLabel, type DiagramSpec,\n type DiagramTheme, type MeasureRowText,\n} from '@weasel-js/diagram';\nimport type { DocumentPage } from './document';\nimport { shiftData } from './shiftData';\n\n/** Room kept between a laid-out page's edges and what is on it. */\nexport const PAGE_MARGIN = 40;\n\ntype Rect = { x: number; y: number; width: number; height: number };\n\n/** A pool or an empty container with no box: only layout places it. A container that holds something fits it instead. */\nconst unplacedRegion = (c: DataContainer): boolean => c.box === undefined && (c.role === 'pool' || (c.members ?? []).length === 0);\n\n/** Whether `page` has a node with no `at`, or a region only layout places. */\nexport function needsLayout(page: DocumentPage): boolean {\n return page.data.nodes.some((n) => n.at === undefined) || (page.data.containers ?? []).some(unplacedRegion);\n}\n\n/** An edge's route and ports as layout chose them, as `routed` and `routedPorts`, and its label where layout left it room. */\nfunction laidEdge(e: DataEdge, specs: ReadonlyMap<string, DiagramSpec>): DataEdge {\n const id = edgeIdOf(e);\n const trait = specs.get(id)?.data.diagram as DiagramEdge | undefined;\n if (trait === undefined) return e;\n const from = e.fromPort === undefined ? trait.from.laidOut : undefined;\n const to = e.toPort === undefined ? trait.to.laidOut : undefined;\n const label = (specs.get(`${id}/label`)?.data.diagram as { label?: DiagramLabel } | undefined)?.label;\n const follows = e.labelPlacement === undefined || e.labelPlacement.at === 'mid';\n return {\n ...e,\n ...(e.waypoints === undefined && e.routed === undefined && trait.laidOut !== undefined ? { routed: trait.laidOut } : {}),\n ...(from !== undefined || to !== undefined ? { routedPorts: { ...(from ? { from } : {}), ...(to ? { to } : {}) } } : {}),\n ...(follows && label !== undefined && typeof label.at === 'object' ? { labelPlacement: { ...e.labelPlacement, ...label } } : {}),\n };\n}\n\nconst boxOf = (spec: DiagramSpec | undefined): Rect | undefined =>\n spec === undefined ? undefined : { x: spec.pose.x, y: spec.pose.y, width: spec.pose.width, height: spec.pose.height };\n\n/**\n * `page` laid out with `layered`, the way its `direction` says, every node and\n * box it already places pinned there: each node gets an `at`, each pool and\n * empty container a box, and each edge the route layout chose as `routed`.\n * When the page placed nothing, what layout placed is moved to sit\n * {@link PAGE_MARGIN} inside its corner. The page grows to hold it all.\n */\nexport function laidOutPage(page: DocumentPage, opts: { theme: DiagramTheme; measure?: MeasureRowText }): DocumentPage {\n const { data } = page;\n const placedAny = data.nodes.some((n) => n.at !== undefined) || (data.containers ?? []).some((c) => c.box !== undefined);\n const pinned = {\n ...data,\n nodes: data.nodes.map((n) => (n.at !== undefined ? { ...n, pinned: true } : n)),\n ...(data.containers ? { containers: data.containers.map((c) => (c.box !== undefined ? { ...c, pinned: true } : c)) } : {}),\n };\n const specs = diagramScene(pinned, {\n layout: 'layered', theme: opts.theme, ...(opts.measure ? { measure: opts.measure } : {}),\n ...(page.direction ? { layoutOptions: { direction: page.direction } } : {}),\n });\n const byId = new Map(specs.map((s) => [s.id as string, s]));\n const boxed = (c: DataContainer): DataContainer => {\n const box = unplacedRegion(c) ? boxOf(byId.get(c.id)) : undefined;\n return box === undefined ? c : { ...c, box };\n };\n const laid = {\n ...data,\n nodes: data.nodes.map((n) => {\n const box = boxOf(byId.get(n.id));\n return n.at !== undefined || box === undefined ? n : { ...n, at: { x: box.x, y: box.y } };\n }),\n edges: data.edges.map((e) => laidEdge(e, byId)),\n ...(data.containers ? { containers: data.containers.map(boxed) } : {}),\n };\n const ids = [...data.nodes.map((n) => n.id), ...(data.containers ?? []).map((c) => c.id)];\n const boxes = ids.map((id) => boxOf(byId.get(id))).filter((b): b is Rect => b !== undefined);\n if (boxes.length === 0) return { ...page, data: laid };\n const min: Vec2 = { x: Math.min(...boxes.map((b) => b.x)), y: Math.min(...boxes.map((b) => b.y)) };\n const by: Vec2 = placedAny ? { x: 0, y: 0 } : { x: PAGE_MARGIN - min.x, y: PAGE_MARGIN - min.y };\n const right = Math.max(...boxes.map((b) => b.x + b.width)) + by.x + PAGE_MARGIN;\n const bottom = Math.max(...boxes.map((b) => b.y + b.height)) + by.y + PAGE_MARGIN;\n return {\n ...page,\n width: Math.max(page.width, Math.ceil(right)),\n height: Math.max(page.height, Math.ceil(bottom)),\n data: shiftData(laid, by),\n };\n}\n","/**\n * What the Mermaid and Graphviz DOT readers share: a graph's text, its\n * clusters' membership, its edges' ids, and the one page it reads into.\n */\nimport type { DataContainer, DataEdge, DataNode, LayoutDirection } from '@weasel-js/diagram';\nimport type { DocumentPage } from './document';\nimport { PAGE_MARGIN } from './pageLayout';\n\n/** Collects warnings, each once, in the order first met. */\nexport class Warnings {\n private readonly seen = new Set<string>();\n private readonly listed = new Map<string, Set<string>>();\n\n add(message: string): void {\n this.seen.add(message);\n }\n\n /** Adds `item` to a list warning: one sentence, `lead` then every item named. */\n list(lead: string, item: string): void {\n if (!this.listed.has(lead)) {\n this.listed.set(lead, new Set());\n this.seen.add(lead);\n }\n this.listed.get(lead)!.add(item);\n }\n\n all(): string[] {\n return [...this.seen].map((m) => (this.listed.has(m) ? `${m}: ${[...this.listed.get(m)!].join(', ')}.` : m));\n }\n}\n\n/** A channel from 0 to 1 as two hex digits. */\nexport const hex2 = (n: number): string => Math.round(Math.max(0, Math.min(1, n)) * 255).toString(16).padStart(2, '0');\n\nconst NAMED:Readonly<Record<string, string>> = { amp: '&', lt: '<', gt: '>', quot: '\"', apos: \"'\", nbsp: ' ' };\n\n/** `text` with its `&name;` and `&#n;` references read; Mermaid's `#name;` and `#n;` too when `hash` is set. */\nexport function decodeEntities(text: string, hash = false): string {\n const re = hash ? /[&#](#x[\\da-f]+|#\\d+|x[\\da-f]+(?=;)|\\d+|[a-z]+);/gi : /&(#x[\\da-f]+|#\\d+|[a-z]+);/gi;\n return text.replace(re, (whole, ref: string) => {\n const code = /^#?x([\\da-f]+)$/i.exec(ref)?.[1];\n if (code !== undefined) return String.fromCodePoint(parseInt(code, 16));\n const num = /^#?(\\d+)$/.exec(ref)?.[1];\n if (num !== undefined) return String.fromCodePoint(parseInt(num, 10));\n return NAMED[ref.toLowerCase()] ?? whole;\n });\n}\n\n/** Markup's text, one entry per line: `<br>` breaks a line, other tags are dropped. */\nexport function markupLines(markup: string, hash = false): string[] {\n const text = markup.replace(/<br\\s*\\/?>/gi, '\\n').replace(/<[^>]*>/g, '');\n return decodeEntities(text, hash).split('\\n').map((l) => l.trim());\n}\n\n/**\n * Which cluster each node and cluster sits in directly. A node is placed by\n * the first cluster that names it, moved only into a cluster nested in that\n * one; a second cluster elsewhere is reported and ignored.\n */\nexport class Membership {\n private readonly parent = new Map<string, string | null>();\n readonly clusterParent = new Map<string, string | null>();\n\n constructor(private readonly warnings: Warnings, private readonly format: string) {}\n\n /** Opens `cluster` inside `parent`; a cluster opened again keeps its first place. */\n openCluster(cluster: string, parent: string | null): void {\n if (!this.clusterParent.has(cluster)) this.clusterParent.set(cluster, parent);\n }\n\n private within(inner: string | null, outer: string): boolean {\n for (let at = inner; at !== null && at !== undefined; at = this.clusterParent.get(at) ?? null) if (at === outer) return true;\n return false;\n }\n\n /** Records that `cluster` (`null` for the top level) names `node`. */\n place(node: string, cluster: string | null): void {\n const was = this.parent.get(node);\n if (was === undefined || was === null) {\n if (was === undefined || cluster !== null) this.parent.set(node, cluster);\n return;\n }\n if (cluster === null || this.within(was, cluster)) return;\n if (this.within(cluster, was)) this.parent.set(node, cluster);\n else this.warnings.list(`${this.format} nodes in two clusters, kept in the first`, node);\n }\n\n /** Each cluster's direct members, nodes in the order first placed and nested clusters after. */\n members(cluster: string): string[] {\n const nodes = [...this.parent].filter(([, p]) => p === cluster).map(([id]) => id);\n const clusters = [...this.clusterParent].filter(([, p]) => p === cluster).map(([id]) => id);\n return [...nodes, ...clusters];\n }\n}\n\n/** `edges` each given an id unique among themselves and `taken`: `from-to`, then `from-to-2` and on. */\nexport function withEdgeIds(edges: readonly DataEdge[], taken: Iterable<string>): DataEdge[] {\n const used = new Set(taken);\n return edges.map((e) => {\n const base = `${e.from}-${e.to}`;\n let id = base;\n for (let n = 2; used.has(id); n++) id = `${base}-${n}`;\n used.add(id);\n return { ...e, id };\n });\n}\n\n/** What a graph format read, as the one page it becomes. */\nexport interface GraphPage {\n name?: string;\n direction?: LayoutDirection;\n nodes: DataNode[];\n edges: DataEdge[];\n containers: DataContainer[];\n /** A size the file gave. Unset, the page starts small and grows to hold what layout places. */\n size?: { width: number; height: number };\n}\n\n/** The page a graph format reads into. */\nexport function graphPage(g: GraphPage): DocumentPage {\n const ids = [...g.nodes.map((n) => n.id), ...g.containers.map((c) => c.id)];\n return {\n id: 'page-1',\n ...(g.name !== undefined && g.name !== '' ? { name: g.name } : {}),\n width: g.size?.width ?? 2 * PAGE_MARGIN,\n height: g.size?.height ?? 2 * PAGE_MARGIN,\n ...(g.direction !== undefined ? { direction: g.direction } : {}),\n data: {\n nodes: g.nodes,\n edges: withEdgeIds(g.edges, ids),\n ...(g.containers.length > 0 ? { containers: g.containers } : {}),\n },\n };\n}\n","/** The error a text format's reader throws: the format, the line, and what is wrong there. */\nexport function lineError(format: string, line: number, message: string): Error {\n return new Error(`${format}, line ${line}: ${message}`);\n}\n","/** Graphviz DOT's tokens: identifiers in their four spellings, punctuation, and edge operators. */\nimport { lineError } from '../lineError';\n\n/** One token. An `id` is a name, a numeral, a quoted string, or an HTML string. */\nexport interface DotToken {\n kind: 'id' | 'punct' | 'edgeop';\n value: string;\n line: number;\n quoted?: boolean;\n html?: boolean;\n}\n\nconst NAME = /[A-Za-z_\\u0080-][\\w\\u0080-]*/y;\nconst NUMERAL = /-?(?:\\.\\d+|\\d+(?:\\.\\d*)?)/y;\nconst PUNCT = '{}[];,=:';\n\nconst fail = (line: number, message: string) => lineError('DOT', line, message);\n\n/** Splits DOT source into tokens, skipping comments. Throws, naming the line, on text it cannot read. */\nexport function lexDot(text: string): DotToken[] {\n const tokens: DotToken[] = [];\n let i = 0;\n let line = 1;\n let lineStart = true;\n const advance = (to: number) => {\n for (let k = i; k < to; k++) if (text[k] === '\\n') line++;\n i = to;\n };\n const end = (marker: string, from: number) => {\n const at = text.indexOf(marker, from);\n return at < 0 ? text.length : at;\n };\n while (i < text.length) {\n const c = text[i]!;\n if (c === '\\n') { line++; i++; lineStart = true; continue; }\n if (/\\s/.test(c)) { i++; continue; }\n if (c === '#' && lineStart) { advance(end('\\n', i)); continue; }\n lineStart = false;\n if (text.startsWith('//', i)) { advance(end('\\n', i)); continue; }\n if (text.startsWith('/*', i)) { advance(Math.min(text.length, end('*/', i + 2) + 2)); continue; }\n if (text.startsWith('->', i) || text.startsWith('--', i)) {\n tokens.push({ kind: 'edgeop', value: text.slice(i, i + 2), line });\n i += 2;\n continue;\n }\n if (PUNCT.includes(c)) { tokens.push({ kind: 'punct', value: c, line }); i++; continue; }\n if (c === '\"') { tokens.push(quoted()); continue; }\n if (c === '<') { tokens.push(html()); continue; }\n const word = match(NUMERAL) ?? match(NAME);\n if (word === null) throw fail(line, `cannot read \"${c}\"`);\n tokens.push({ kind: 'id', value: word, line });\n }\n return tokens;\n\n function match(re: RegExp): string | null {\n re.lastIndex = i;\n const m = re.exec(text);\n if (m === null) return null;\n i += m[0].length;\n return m[0];\n }\n\n function quotedPart(): string {\n const start = line;\n let out = '';\n i++;\n while (i < text.length && text[i] !== '\"') {\n if (text[i] === '\\\\' && text[i + 1] === '\"') { out += '\"'; i += 2; continue; }\n if (text[i] === '\\\\' && text[i + 1] === '\\n') { line++; i += 2; continue; }\n if (text[i] === '\\\\' && i + 1 < text.length) { out += text.slice(i, i + 2); i += 2; continue; }\n if (text[i] === '\\n') line++;\n out += text[i];\n i++;\n }\n if (i >= text.length) throw fail(start, 'a quoted string is never closed');\n i++;\n return out;\n }\n\n function quoted(): DotToken {\n const start = line;\n let value = quotedPart();\n for (;;) {\n const rest = /\\s*\\+\\s*\"/y;\n rest.lastIndex = i;\n const m = rest.exec(text);\n if (m === null) break;\n advance(i + m[0].length - 1);\n value += quotedPart();\n }\n return { kind: 'id', value, line: start, quoted: true };\n }\n\n function html(): DotToken {\n const start = line;\n let depth = 0;\n let k = i;\n for (; k < text.length; k++) {\n if (text[k] === '<') depth++;\n else if (text[k] === '>' && --depth === 0) break;\n }\n if (k >= text.length) throw fail(start, 'an HTML string is never closed');\n const value = text.slice(i + 1, k);\n advance(k + 1);\n return { kind: 'id', value, line: start, html: true };\n }\n}\n","/** Graphviz DOT's grammar, read to a syntax tree with each statement's line. */\nimport { lineError } from '../lineError';\nimport { lexDot, type DotToken } from './lex';\n\n/** An attribute's value as written: quoted, or an HTML string, or neither. */\nexport interface DotValue {\n value: string;\n quoted?: boolean;\n html?: boolean;\n}\n\nexport interface DotAttr {\n key: string;\n value: DotValue;\n}\n\n/** A node named in a statement, with the port and compass point it was named with. */\nexport interface DotNodeRef {\n id: string;\n port?: string;\n compass?: string;\n line: number;\n}\n\nexport interface DotSubgraph {\n kind: 'subgraph';\n id?: string;\n stmts: DotStmt[];\n line: number;\n}\n\nexport type DotStmt =\n | { kind: 'node'; node: DotNodeRef; attrs: DotAttr[]; line: number }\n | { kind: 'edge'; ends: (DotNodeRef | DotSubgraph)[]; attrs: DotAttr[]; line: number }\n | { kind: 'attr'; target: 'graph' | 'node' | 'edge'; attrs: DotAttr[]; line: number }\n | { kind: 'set'; key: string; value: DotValue; line: number }\n | DotSubgraph;\n\n/** A whole DOT file. */\nexport interface DotGraph {\n strict: boolean;\n directed: boolean;\n id?: string;\n stmts: DotStmt[];\n}\n\n/** The compass points a node end may name. */\nexport const COMPASS_POINTS: ReadonlySet<string> = new Set(['n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw', 'c', '_']);\n\nconst keyword = (t: DotToken | undefined, word: string) =>\n t !== undefined && t.kind === 'id' && !t.quoted && !t.html && t.value.toLowerCase() === word;\n\nconst valueOf = (t: DotToken): DotValue => ({ value: t.value, ...(t.quoted ? { quoted: true } : {}), ...(t.html ? { html: true } : {}) });\n\n/** Parses DOT source. Throws, naming the line, on text that is not a DOT graph. */\nexport function parseDot(text: string): DotGraph {\n const tokens = lexDot(text);\n let i = 0;\n const lastLine = text.split('\\n').length;\n const peek = (k = 0) => tokens[i + k];\n const where = () => peek()?.line ?? lastLine;\n const describe = (t: DotToken | undefined) => (t === undefined ? 'the end of the file' : `\"${t.value}\"`);\n const fail = (wanted: string) => lineError('DOT', where(), `expected ${wanted}, found ${describe(peek())}`);\n const is = (value: string) => peek()?.kind !== 'id' && peek()?.value === value;\n const take = (value: string) => {\n if (!is(value)) throw fail(`\"${value}\"`);\n return tokens[i++]!;\n };\n const id = (wanted = 'a name'): DotToken => {\n if (peek()?.kind !== 'id') throw fail(wanted);\n return tokens[i++]!;\n };\n\n const strict = keyword(peek(), 'strict');\n if (strict) i++;\n const kind = peek();\n if (!keyword(kind, 'graph') && !keyword(kind, 'digraph')) throw fail('\"graph\" or \"digraph\"');\n i++;\n const directed = kind!.value.toLowerCase() === 'digraph';\n const graphId = peek()?.kind === 'id' ? tokens[i++]!.value : undefined;\n take('{');\n const stmts = stmtList();\n take('}');\n if (peek() !== undefined) throw fail('the end of the file');\n return { strict, directed, ...(graphId !== undefined ? { id: graphId } : {}), stmts };\n\n function stmtList(): DotStmt[] {\n const out: DotStmt[] = [];\n while (peek() !== undefined && !is('}')) {\n out.push(stmt());\n if (is(';')) i++;\n }\n return out;\n }\n\n function attrList(): DotAttr[] {\n const attrs: DotAttr[] = [];\n while (is('[')) {\n i++;\n while (!is(']')) {\n const key = id('an attribute name').value;\n take('=');\n attrs.push({ key, value: valueOf(id('an attribute value')) });\n if (is(',') || is(';')) i++;\n }\n i++;\n }\n return attrs;\n }\n\n function subgraph(): DotSubgraph {\n const line = where();\n let name: string | undefined;\n if (keyword(peek(), 'subgraph')) {\n i++;\n if (peek()?.kind === 'id') name = tokens[i++]!.value;\n }\n take('{');\n const body = stmtList();\n take('}');\n return { kind: 'subgraph', ...(name !== undefined ? { id: name } : {}), stmts: body, line };\n }\n\n function nodeRef(): DotNodeRef {\n const t = id();\n const ref: DotNodeRef = { id: t.value, line: t.line };\n if (!is(':')) return ref;\n i++;\n const first = id('a port').value;\n if (is(':')) {\n i++;\n return { ...ref, port: first, compass: id('a compass point').value };\n }\n return COMPASS_POINTS.has(first) ? { ...ref, compass: first } : { ...ref, port: first };\n }\n\n function stmt(): DotStmt {\n const line = where();\n const t = peek()!;\n if (keyword(t, 'graph') || keyword(t, 'node') || keyword(t, 'edge')) {\n i++;\n return { kind: 'attr', target: t.value.toLowerCase() as 'graph' | 'node' | 'edge', attrs: attrList(), line };\n }\n if (t.kind === 'id' && peek(1)?.kind === 'punct' && peek(1)!.value === '=' && !keyword(t, 'subgraph')) {\n i += 2;\n return { kind: 'set', key: t.value, value: valueOf(id('a value')), line };\n }\n const first = keyword(t, 'subgraph') || is('{') ? subgraph() : nodeRef();\n if (peek()?.kind !== 'edgeop') {\n if ('stmts' in first) return first;\n return { kind: 'node', node: first, attrs: attrList(), line };\n }\n const ends: (DotNodeRef | DotSubgraph)[] = [first];\n while (peek()?.kind === 'edgeop') {\n const op = tokens[i]!;\n if (op.value !== (directed ? '->' : '--')) {\n throw lineError('DOT', op.line, `a ${directed ? 'digraph' : 'graph'} joins nodes with \"${directed ? '->' : '--'}\", not \"${op.value}\"`);\n }\n i++;\n ends.push(keyword(peek(), 'subgraph') || is('{') ? subgraph() : nodeRef());\n }\n return { kind: 'edge', ends, attrs: attrList(), line };\n }\n}\n","/** Graphviz DOT's attribute values as a diagram reads and writes them: labels, colors, shapes, and arrowheads. */\nimport type { MarkerRef } from '@weasel-js/core';\nimport type { Outline } from '@weasel-js/diagram';\nimport { hex2, markupLines } from '../graphRead';\nimport type { DotValue } from './parse';\n\n/** A label's lines: an HTML label's text, else the string with its escapes read. `\\N` names `self`, `\\G` the graph. */\nexport function labelLines(label: DotValue, self: string, graph: string): string[] {\n if (label.html) return markupLines(label.value).filter((l, i, all) => l !== '' || (i > 0 && i < all.length - 1));\n const lines = [''];\n const text = label.value;\n for (let i = 0; i < text.length; i++) {\n const c = text[i]!;\n if (c !== '\\\\' || i === text.length - 1) { lines[lines.length - 1] += c; continue; }\n const next = text[++i]!;\n if (next === 'n' || next === 'l' || next === 'r') lines.push('');\n else if (next === 'N') lines[lines.length - 1] += self;\n else if (next === 'G') lines[lines.length - 1] += graph;\n else lines[lines.length - 1] += next;\n }\n if (lines.length > 1 && lines[lines.length - 1] === '') lines.pop();\n return lines.length === 1 && lines[0] === '' ? [] : lines;\n}\n\n/** `text` as a quoted DOT string: backslashes and quotes escaped, line breaks as `\\n`. */\nexport function quoteLabel(lines: readonly string[]): string {\n return `\"${lines.map((l) => l.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')).join('\\\\n')}\"`;\n}\n\nfunction hsvHex(h: number, s: number, v: number): string {\n const f = (n: number) => {\n const k = (n + h * 6) % 6;\n return v - v * s * Math.max(0, Math.min(k, 4 - k, 1));\n };\n return `#${hex2(f(5))}${hex2(f(3))}${hex2(f(1))}`;\n}\n\n/** A color as CSS reads it: the first of a list, its scheme dropped, an HSV triple as hex. */\nexport function dotColor(value: string): string {\n const first = value.split(':')[0]!.split(';')[0]!.trim();\n const hsv = /^([\\d.]+)[,\\s]+([\\d.]+)[,\\s]+([\\d.]+)$/.exec(first);\n if (hsv !== null) return hsvHex(Number(hsv[1]), Number(hsv[2]), Number(hsv[3]));\n return first.replace(/^\\/[^/]*\\//, '');\n}\n\nconst OUTLINES: Readonly<Record<string, Outline>> = {\n box: 'rect', rect: 'rect', rectangle: 'rect', square: 'rect',\n ellipse: 'ellipse', oval: 'ellipse', circle: 'ellipse', doublecircle: 'ellipse', point: 'ellipse',\n diamond: 'diamond', hexagon: 'hexagon', parallelogram: 'parallelogram', trapezium: 'trapezoid',\n};\n\n/** The outline a shape and style draw as, or `null` for a shape the diagram has none for. */\nexport function outlineOf(shape: string, styles: readonly string[]): Outline | null {\n const outline = OUTLINES[shape.toLowerCase()];\n if (outline === undefined) return null;\n return outline === 'rect' && styles.includes('rounded') ? 'stadium' : outline;\n}\n\n/** The shape and the style word an outline writes as; a drawn path as a box. */\nexport function shapeOf(outline: Outline | undefined): { shape: string; rounded?: boolean } {\n if (outline === undefined || typeof outline !== 'string' || outline === 'rect') return { shape: 'box' };\n if (outline === 'stadium') return { shape: 'box', rounded: true };\n if (outline === 'trapezoid') return { shape: 'trapezium' };\n return { shape: outline };\n}\n\nconst ARROWS: Readonly<Record<string, MarkerRef | null>> = {\n normal: 'arrow', inv: 'arrow', none: null, dot: 'circle', odot: 'circle', diamond: 'diamond', odiamond: 'diamond-hollow',\n box: 'square', obox: 'square', tee: 'bar', empty: 'arrow-open', onormal: 'arrow-open', vee: 'arrow-concave',\n};\n\nconst ARROW_NAMES: Readonly<Record<string, string>> = {\n arrow: 'normal', 'arrow-open': 'empty', 'arrow-concave': 'vee', diamond: 'diamond', 'diamond-hollow': 'odiamond',\n circle: 'dot', square: 'box', bar: 'tee',\n};\n\n/** The marker an arrowhead name draws: `undefined` for a name the diagram has none for. */\nexport const markerOf = (name: string): MarkerRef | null | undefined => ARROWS[name.toLowerCase()];\n\n/** The arrowhead name a marker writes as: `undefined` for a marker DOT has none for. */\nexport function arrowName(marker: MarkerRef): string | undefined {\n return ARROW_NAMES[typeof marker === 'string' ? marker : marker.key];\n}\n\n/** A DOT style list's words. */\nexport const stylesOf = (style: string | undefined): string[] =>\n style === undefined ? [] : style.split(',').map((s) => s.trim().replace(/\\(.*$/, '').toLowerCase()).filter((s) => s !== '');\n\n/** The dash a `dashed` or `dotted` style draws. */\nexport function dashOf(styles: readonly string[]): number[] | undefined {\n if (styles.includes('dashed')) return [6, 4];\n if (styles.includes('dotted')) return [2, 3];\n return undefined;\n}\n","/**\n * A Graphviz DOT graph as a one-page document: clusters as containers, the\n * rest of the grammar's scoping read the way Graphviz reads it. Positions are\n * kept only when every node has a `pos`; otherwise the page is laid out on\n * import.\n */\nimport type { MarkerRef } from '@weasel-js/core';\nimport type { DataContainer, DataEdge, DataNode, EdgeStyle, LayoutDirection, NodeStyle } from '@weasel-js/diagram';\nimport type { ImportResult } from '../document';\nimport { Membership, Warnings, graphPage } from '../graphRead';\nimport { parseDot, type DotGraph, type DotNodeRef, type DotStmt, type DotSubgraph, type DotValue } from './parse';\nimport { dashOf, dotColor, labelLines, markerOf, outlineOf, stylesOf } from './values';\n\ntype Attrs = Map<string, DotValue>;\ninterface Scope { kind: 'root' | 'cluster' | 'plain'; graph: Attrs; node: Attrs; edge: Attrs; cluster: string | null }\ninterface RawEdge { tail: DotNodeRef; head: DotNodeRef; attrs: Attrs }\n\nconst READ: Readonly<Record<'root' | 'cluster' | 'plain' | 'node' | 'edge', ReadonlySet<string>>> = {\n root: new Set(['rankdir', 'label', 'bb']),\n cluster: new Set(['label', 'style', 'color', 'fillcolor', 'bgcolor', 'pencolor', 'fontcolor']),\n plain: new Set(),\n node: new Set(['label', 'shape', 'style', 'color', 'fillcolor', 'fontcolor', 'penwidth', 'width', 'height', 'pos']),\n edge: new Set(['label', 'color', 'fontcolor', 'penwidth', 'style', 'dir', 'arrowhead', 'arrowtail', 'tailport', 'headport']),\n};\n\nconst DIRECTIONS: Readonly<Record<string, LayoutDirection>> = { TB: 'down', BT: 'up', LR: 'right', RL: 'left' };\nconst COMPASS_PORTS = new Set(['n', 'e', 's', 'w']);\nconst POINTS_PER_INCH = 72;\n\nconst round = (n: number) => Math.round(n * 100) / 100;\nconst str = (attrs: Attrs, key: string) => attrs.get(key)?.value;\n\nclass DotReader {\n readonly warnings = new Warnings();\n readonly membership = new Membership(this.warnings, 'DOT');\n readonly nodes = new Map<string, Attrs>();\n readonly edges: RawEdge[] = [];\n readonly clusters = new Map<string, Attrs>();\n\n constructor(readonly graph: DotGraph) {}\n\n dropUnread(kind: keyof typeof READ, keys: Iterable<string>): void {\n for (const key of keys) if (!READ[kind].has(key)) this.warnings.list('DOT attributes a diagram does not hold were dropped', key);\n }\n\n touch(ref: DotNodeRef, scope: Scope, named: Set<string>): void {\n if (!this.nodes.has(ref.id)) this.nodes.set(ref.id, new Map(scope.node));\n this.membership.place(ref.id, scope.cluster);\n named.add(ref.id);\n }\n\n walk(stmts: readonly DotStmt[], scope: Scope): Set<string> {\n const named = new Set<string>();\n for (const s of stmts) {\n if (s.kind === 'set' || (s.kind === 'attr' && s.target === 'graph')) {\n const pairs = s.kind === 'set' ? [{ key: s.key, value: s.value }] : s.attrs;\n this.dropUnread(scope.kind, pairs.map((a) => a.key));\n for (const a of pairs) scope.graph.set(a.key, a.value);\n } else if (s.kind === 'attr') {\n this.dropUnread(s.target as 'node' | 'edge', s.attrs.map((a) => a.key));\n for (const a of s.attrs) scope[s.target].set(a.key, a.value);\n } else if (s.kind === 'node') {\n this.touch(s.node, scope, named);\n this.dropUnread('node', s.attrs.map((a) => a.key));\n for (const a of s.attrs) this.nodes.get(s.node.id)!.set(a.key, a.value);\n } else if (s.kind === 'subgraph') {\n for (const id of this.subgraph(s, scope)) named.add(id);\n } else {\n this.dropUnread('edge', s.attrs.map((a) => a.key));\n const ends = s.ends.map((end) => this.end(end, scope));\n for (const id of ends.flat()) named.add(id.id);\n const attrs = new Map(scope.edge);\n for (const a of s.attrs) attrs.set(a.key, a.value);\n for (let k = 1; k < ends.length; k++) {\n for (const tail of ends[k - 1]!) for (const head of ends[k]!) this.edges.push({ tail, head, attrs });\n }\n }\n }\n return named;\n }\n\n end(end: DotNodeRef | DotSubgraph, scope: Scope): DotNodeRef[] {\n if (!('stmts' in end)) {\n this.touch(end, scope, new Set());\n return [end];\n }\n return [...this.subgraph(end, scope)].map((id) => ({ id, line: end.line }));\n }\n\n subgraph(sub: DotSubgraph, parent: Scope): Set<string> {\n const isCluster = sub.id !== undefined && sub.id.startsWith('cluster');\n if (isCluster) this.membership.openCluster(sub.id!, parent.cluster);\n const graph = isCluster ? (this.clusters.get(sub.id!) ?? new Map(parent.graph)) : new Map(parent.graph);\n if (isCluster) this.clusters.set(sub.id!, graph);\n return this.walk(sub.stmts, {\n kind: isCluster ? 'cluster' : 'plain', graph, node: new Map(parent.node), edge: new Map(parent.edge),\n cluster: isCluster ? sub.id! : parent.cluster,\n });\n }\n}\n\nfunction nodeColors(attrs: Attrs, styles: readonly string[]): Partial<NodeStyle> | undefined {\n const fill = styles.includes('filled') ? str(attrs, 'fillcolor') ?? str(attrs, 'color') ?? 'lightgrey' : undefined;\n const stroke = str(attrs, 'color');\n const text = str(attrs, 'fontcolor');\n const width = str(attrs, 'penwidth');\n const dash = dashOf(styles);\n const colors: Partial<NodeStyle> = {\n ...(fill !== undefined ? { fill: dotColor(fill) } : {}),\n ...(stroke !== undefined ? { stroke: dotColor(stroke) } : {}),\n ...(text !== undefined ? { text: dotColor(text) } : {}),\n ...(width !== undefined ? { strokeWidth: Number(width) } : {}),\n ...(dash !== undefined ? { dash } : {}),\n };\n return Object.keys(colors).length > 0 ? colors : undefined;\n}\n\nfunction readNode(r: DotReader, id: string, attrs: Attrs): DataNode {\n const styles = stylesOf(str(attrs, 'style'));\n const shape = str(attrs, 'shape') ?? 'ellipse';\n let outline = outlineOf(shape, styles);\n if (outline === null) {\n r.warnings.list('DOT shapes read as rectangles', shape);\n outline = 'rect';\n }\n const colors = nodeColors(attrs, styles);\n const width = str(attrs, 'width');\n const height = str(attrs, 'height');\n return {\n id,\n lines: labelLines(attrs.get('label') ?? { value: '\\\\N' }, id, r.graph.id ?? ''),\n outline,\n ...(width !== undefined ? { width: round(Number(width) * POINTS_PER_INCH) } : {}),\n ...(height !== undefined ? { height: round(Number(height) * POINTS_PER_INCH) } : {}),\n ...(colors !== undefined ? { colors } : {}),\n };\n}\n\n/** Each node's place from its `pos`, and the page's size, when every node has one; else `null`. */\nfunction positions(nodes: DataNode[], attrs: ReadonlyMap<string, Attrs>, bb: string | undefined) {\n const centers = nodes.map((n) => str(attrs.get(n.id)!, 'pos')?.replace(/!$/, '').split(',').map(Number));\n if (nodes.length === 0 || centers.some((c) => c === undefined || c.length < 2 || c.some(Number.isNaN))) return null;\n const size = (n: DataNode) => ({ w: n.width ?? 0.75 * POINTS_PER_INCH, h: n.height ?? 0.5 * POINTS_PER_INCH });\n const box = bb?.split(',').map(Number);\n const [llx, lly, urx, ury] = box?.length === 4 && !box.some(Number.isNaN) ? box : [0, 0, undefined, undefined];\n const top = ury ?? Math.max(...nodes.map((n, i) => centers[i]![1]! + size(n).h / 2));\n const right = urx ?? Math.max(...nodes.map((n, i) => centers[i]![0]! + size(n).w / 2));\n const placed = nodes.map((n, i) => ({\n ...n, at: { x: round(centers[i]![0]! - llx! - size(n).w / 2), y: round(top - centers[i]![1]! - size(n).h / 2) },\n }));\n return { nodes: placed, size: { width: round(right - llx!), height: round(top - lly!) } };\n}\n\nfunction portOf(r: DotReader, ref: DotNodeRef, attr: string | undefined): string | undefined {\n const [port, compass] = ref.port !== undefined || ref.compass !== undefined ? [ref.port, ref.compass]\n : attr === undefined ? [undefined, undefined]\n : attr.includes(':') ? attr.split(':') : COMPASS_PORTS.has(attr) || attr === '_' ? [undefined, attr] : [attr, undefined];\n if (port === undefined && (compass === undefined || compass === '_')) return undefined;\n if (port === undefined && COMPASS_PORTS.has(compass!)) return compass;\n r.warnings.list('DOT ports a diagram does not have were dropped', [ref.id, port, compass].filter((p) => p !== undefined).join(':'));\n return undefined;\n}\n\nfunction marker(r: DotReader, name: string | undefined): MarkerRef | null {\n const m = markerOf(name ?? 'normal');\n if (m !== undefined) return m;\n r.warnings.list('DOT arrowheads drawn as arrows', name!);\n return 'arrow';\n}\n\nfunction readEdge(r: DotReader, e: RawEdge): DataEdge {\n const styles = stylesOf(str(e.attrs, 'style'));\n const dir = str(e.attrs, 'dir') ?? (r.graph.directed ? 'forward' : 'none');\n const end = dir === 'forward' || dir === 'both' ? marker(r, str(e.attrs, 'arrowhead')) : null;\n const start = dir === 'back' || dir === 'both' ? marker(r, str(e.attrs, 'arrowtail')) : null;\n const stroke = str(e.attrs, 'color');\n const label = str(e.attrs, 'fontcolor');\n const width = str(e.attrs, 'penwidth');\n const dash = dashOf(styles);\n const colors: Partial<EdgeStyle> = {\n ...(stroke !== undefined ? { stroke: dotColor(stroke) } : {}),\n ...(label !== undefined ? { label: dotColor(label) } : {}),\n ...(width !== undefined ? { width: Number(width) } : {}),\n ...(dash !== undefined ? { dash } : {}),\n ...(start !== null ? { markerStart: start } : {}),\n ...(end !== 'arrow' ? { markerEnd: end } : {}),\n };\n const fromPort = portOf(r, e.tail, str(e.attrs, 'tailport'));\n const toPort = portOf(r, e.head, str(e.attrs, 'headport'));\n const text = e.attrs.get('label');\n const lines = text === undefined ? [] : labelLines(text, '', r.graph.id ?? '');\n return {\n from: e.tail.id, to: e.head.id,\n ...(fromPort !== undefined ? { fromPort } : {}),\n ...(toPort !== undefined ? { toPort } : {}),\n ...(lines.length > 0 ? { label: lines.join(' ') } : {}),\n ...(Object.keys(colors).length > 0 ? { colors } : {}),\n };\n}\n\nfunction readCluster(r: DotReader, id: string, attrs: Attrs, ids: ReadonlyMap<string, string>): DataContainer {\n const styles = stylesOf(str(attrs, 'style'));\n const fill = str(attrs, 'fillcolor') ?? str(attrs, 'color') ?? str(attrs, 'bgcolor');\n const bg = str(attrs, 'bgcolor');\n const stroke = str(attrs, 'pencolor') ?? str(attrs, 'color');\n const text = str(attrs, 'fontcolor');\n const colors: Partial<NodeStyle> = {\n ...(styles.includes('filled') && fill !== undefined ? { fill: dotColor(fill) } : bg !== undefined ? { fill: dotColor(bg) } : {}),\n ...(stroke !== undefined ? { stroke: dotColor(stroke) } : {}),\n ...(text !== undefined ? { text: dotColor(text) } : {}),\n };\n const label = attrs.get('label');\n const lines = label === undefined ? [] : labelLines(label, id, r.graph.id ?? '');\n const members = r.membership.members(id).map((m) => ids.get(m) ?? m);\n return {\n id: ids.get(id)!, role: 'container',\n ...(lines.length > 0 ? { label: lines.join(' ') } : {}),\n ...(members.length > 0 ? { members } : {}),\n ...(Object.keys(colors).length > 0 ? { colors } : {}),\n };\n}\n\n/** Container ids for clusters: the name less its `cluster` prefix, where that is free. */\nfunction clusterIds(clusters: Iterable<string>, nodes: ReadonlyMap<string, unknown>): Map<string, string> {\n const taken = new Set([...nodes.keys()]);\n const out = new Map<string, string>();\n for (const id of clusters) {\n const short = id.replace(/^cluster_?/, '');\n const pick = short !== '' && !taken.has(short) && !out.has(short) ? short : id;\n taken.add(pick);\n out.set(id, pick);\n }\n return out;\n}\n\n/** Reads DOT source into a one-page document. Throws, naming the line, on text that is not a DOT graph. */\nexport function readDot(text: string): ImportResult {\n const graph = parseDot(text);\n const r = new DotReader(graph);\n const root: Scope = { kind: 'root', graph: new Map(), node: new Map(), edge: new Map(), cluster: null };\n r.walk(graph.stmts, root);\n let nodes = [...r.nodes].map(([id, attrs]) => readNode(r, id, attrs));\n const placed = positions(nodes, r.nodes, str(root.graph, 'bb'));\n if (placed !== null) nodes = placed.nodes;\n else if ([...r.nodes.values()].some((a) => a.has('pos'))) r.warnings.list('DOT attributes a diagram does not hold were dropped', 'pos');\n const seen = new Set<string>();\n const edges = r.edges.filter((e) => {\n if (!graph.strict) return true;\n const key = graph.directed ? `${e.tail.id}\\u0000${e.head.id}` : [e.tail.id, e.head.id].sort().join('\\u0000');\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n }).map((e) => readEdge(r, e));\n const ids = clusterIds(r.clusters.keys(), r.nodes);\n const containers = [...r.clusters].map(([id, attrs]) => readCluster(r, id, attrs, ids));\n const rankdir = str(root.graph, 'rankdir')?.toUpperCase();\n const name = root.graph.get('label');\n const page = graphPage({\n name: name !== undefined ? labelLines(name, '', graph.id ?? '').join(' ') : graph.id,\n ...(rankdir !== undefined && DIRECTIONS[rankdir] ? { direction: DIRECTIONS[rankdir] } : {}),\n nodes, edges, containers,\n ...(placed !== null ? { size: placed.size } : {}),\n });\n return { document: { pages: [page] }, warnings: r.warnings.all() };\n}\n","/**\n * What the Mermaid and Graphviz DOT writers share: the page they write, its\n * regions and groups as one tree of clusters, each item's drawn style, and\n * the warnings for what neither format holds.\n */\nimport {\n dataEdgeStyle, dataNodeStyle, dataRegionStyle, diagramThemeFrom, type DataEdge, type DataNode, type DiagramTheme,\n type EdgeStyle, type NodeStyle,\n} from '@weasel-js/diagram';\nimport { writtenPage, type DiagramDocument, type DocumentPage, type WriteOptions } from './document';\nimport { Warnings, hex2 } from './graphRead';\n\n/** A container, pool, lane, or group, as the one kind of box a graph format has. */\nexport interface Cluster {\n id: string;\n label?: string;\n /** Its drawn colors; `fill` unset for one that draws none. Unset for a group. */\n style?: Partial<NodeStyle>;\n nodes: string[];\n clusters: Cluster[];\n}\n\n/** One page as a graph format writes it. */\nexport interface GraphOut {\n page: DocumentPage;\n theme: DiagramTheme;\n /** Nodes and clusters at the top level, in order. */\n nodes: DataNode[];\n clusters: Cluster[];\n /** Every node by id, and every cluster's id. */\n byId: ReadonlyMap<string, DataNode>;\n clusterIds: ReadonlySet<string>;\n edges: DataEdge[];\n warnings: Warnings;\n}\n\n/** A node's text, a line per text row. */\nexport function nodeLines(node: DataNode, warnings: Warnings, format: string): string[] {\n if (node.rows === undefined) return [...(node.lines ?? [])];\n const lines: string[] = [];\n for (const row of node.rows) {\n if (row.kind === 'label') lines.push(row.text);\n else if (row.kind === 'field') lines.push(`${row.label}: ${row.value}`);\n else warnings.add(`${format} holds only text in a shape; its port rows and slots were dropped.`);\n }\n return lines;\n}\n\nfunction clusterTree(page: DocumentPage, theme: DiagramTheme, warnings: Warnings, format: string) {\n const parent = new Map<string, string>();\n const claim = (member: string, owner: string) => { if (!parent.has(member) && member !== owner) parent.set(member, owner); };\n const all: Cluster[] = [];\n for (const c of page.data.containers ?? []) {\n all.push({ id: c.id, ...(c.label !== undefined ? { label: c.label } : {}), style: dataRegionStyle(c, theme), nodes: [], clusters: [] });\n for (const m of c.members ?? []) claim(m, c.id);\n if (c.role === 'pool') warnings.add(`${format} has no pools or lanes; they were written as nested ${format === 'DOT' ? 'clusters' : 'subgraphs'}.`);\n (c.lanes ?? []).forEach((lane, i) => {\n const { fill: _fill, ...style } = dataRegionStyle({ role: 'lane', ...(lane.colors ? { colors: lane.colors } : {}) }, theme, i);\n all.push({ id: lane.id, ...(lane.label !== undefined ? { label: lane.label } : {}), style, nodes: [], clusters: [] });\n claim(lane.id, c.id);\n for (const m of lane.members ?? []) claim(m, lane.id);\n });\n }\n for (const g of page.data.groups ?? []) {\n warnings.add(`${format} has no groups; they were written as ${format === 'DOT' ? 'clusters' : 'subgraphs'}, which read back as containers.`);\n all.push({ id: g.id, ...(g.label !== undefined ? { label: g.label } : {}), nodes: [], clusters: [] });\n for (const m of g.members) claim(m, g.id);\n }\n const byId = new Map(all.map((c) => [c.id, c]));\n const roots: Cluster[] = [];\n for (const c of all) {\n const owner = byId.get(parent.get(c.id) ?? '');\n (owner !== undefined ? owner.clusters : roots).push(c);\n }\n const nodes: DataNode[] = [];\n for (const n of page.data.nodes) {\n const owner = byId.get(parent.get(n.id) ?? '');\n if (owner !== undefined) owner.nodes.push(n.id);\n else nodes.push(n);\n }\n return { nodes, clusters: roots, clusterIds: new Set(byId.keys()) };\n}\n\n/** The page `opts` names, ready to write, with the warnings every graph format shares. `null` for a document with no pages. */\nexport function graphOut(doc: DiagramDocument, opts: WriteOptions | undefined, format: string): GraphOut | null {\n const page = writtenPage(doc, opts);\n if (page === null) return null;\n const warnings = new Warnings();\n const theme = diagramThemeFrom(doc.theme);\n const byId = new Map(page.data.nodes.map((n) => [n.id, n]));\n const tree = clusterTree(page, theme, warnings, format);\n if ((doc.crossPageEdges ?? []).some((e) => byId.has(e.from) || byId.has(e.to))) {\n warnings.add(`${format} holds one page; connectors to other pages were dropped.`);\n }\n for (const n of page.data.nodes) {\n if (n.outline !== undefined && typeof n.outline !== 'string') warnings.add(`${format} has no drawn outlines; those shapes were written as rectangles.`);\n if (n.marks !== undefined && n.marks.length > 0) warnings.add(`${format} has no marks; the marks drawn over shapes were dropped.`);\n }\n if (page.data.edges.some((e) => e.waypoints !== undefined && e.waypoints.length > 0)) {\n warnings.add(`${format} holds no routes; connectors' bends were dropped.`);\n }\n return { page, theme, ...tree, byId, edges: [...page.data.edges], warnings };\n}\n\n/** A CSS color in a spelling every graph format reads: `rgb()` and `rgba()` as hex, short hex long. Names pass through. */\nexport function hexColor(css: string): string {\n const short = /^#([\\da-f])([\\da-f])([\\da-f])([\\da-f])?$/i.exec(css);\n if (short !== null) return `#${short.slice(1).filter(Boolean).map((d) => d! + d!).join('')}`;\n const rgb = /^rgba?\\(\\s*([\\d.]+)[\\s,]+([\\d.]+)[\\s,]+([\\d.]+)(?:\\s*[,/]\\s*([\\d.]+)(%?))?\\s*\\)$/i.exec(css);\n if (rgb === null) return css;\n const alpha = rgb[4] === undefined ? '' : hex2(Number(rgb[4]) / (rgb[5] === '%' ? 100 : 1));\n return `#${hex2(Number(rgb[1]) / 255)}${hex2(Number(rgb[2]) / 255)}${hex2(Number(rgb[3]) / 255)}${alpha}`;\n}\n\n/** `style`'s fields that differ from `base`. */\nexport function changed<T extends object>(style: T, base: T): Partial<T> {\n const out: Partial<T> = {};\n for (const key of Object.keys(style) as (keyof T)[]) {\n if (JSON.stringify(style[key]) !== JSON.stringify(base[key])) out[key] = style[key];\n }\n return out;\n}\n\n/** A node's drawn style, and the one every node gets when nothing says otherwise. */\nexport const nodeStyleIn = (out: GraphOut, node?: DataNode): NodeStyle => dataNodeStyle(node ?? {}, out.theme);\n\n/** An edge's drawn style, its arrowhead filled in, and its label color. */\nexport function edgeStyleIn(out: GraphOut, edge?: DataEdge): Required<Pick<EdgeStyle, 'stroke' | 'label'>> & EdgeStyle {\n const style = dataEdgeStyle(edge ?? {}, out.theme);\n return { ...style, label: style.label ?? style.stroke, markerEnd: style.markerEnd === undefined ? 'arrow' : style.markerEnd };\n}\n","/** One page of a document as a Graphviz DOT digraph: regions as clusters, and places as `pos` when every node has one. */\nimport type { DataEdge, DataNode, LayoutDirection } from '@weasel-js/diagram';\nimport type { DiagramDocument, ExportResult, WriteOptions } from '../document';\nimport { changed, edgeStyleIn, graphOut, hexColor, nodeLines, nodeStyleIn, type Cluster, type GraphOut } from '../graphWrite';\nimport { arrowName, quoteLabel, shapeOf } from './values';\n\nconst RANKDIR: Readonly<Record<LayoutDirection, string | null>> = { down: null, up: 'BT', right: 'LR', left: 'RL' };\nconst KEYWORDS = new Set(['node', 'edge', 'graph', 'digraph', 'subgraph', 'strict']);\nconst COMPASS = new Set(['n', 'e', 's', 'w']);\nconst POINTS_PER_INCH = 72;\n\n/** `id` as DOT writes it: bare when it can be, else quoted. */\nexport function dotId(id: string): string {\n const bare = (/^[A-Za-z_\\u0080-][\\w\\u0080-]*$/.test(id) && !KEYWORDS.has(id.toLowerCase()))\n || /^-?(?:\\.\\d+|\\d+(?:\\.\\d*)?)$/.test(id);\n return bare ? id : `\"${id.replace(/\"/g, '\\\\\"')}\"`;\n}\n\nconst attrList = (attrs: readonly (string | null)[]) => {\n const set = attrs.filter((a): a is string => a !== null);\n return set.length > 0 ? ` [${set.join(', ')}]` : '';\n};\nconst color = (key: string, value: string | undefined) => (value === undefined ? null : `${key}=\"${hexColor(value)}\"`);\nconst num = (n: number) => String(Math.round(n * 10000) / 10000);\n\nfunction nodeAttrs(out: GraphOut, node: DataNode, placed: boolean): string {\n const { shape, rounded } = shapeOf(node.outline);\n const own = changed(nodeStyleIn(out, node), nodeStyleIn(out));\n const styles = [rounded ? 'rounded' : null, 'filled', own.dash !== undefined ? 'dashed' : null].filter((s) => s !== null);\n const page = out.page.height;\n return attrList([\n `label=${quoteLabel(nodeLines(node, out.warnings, 'DOT'))}`,\n shape !== 'box' ? `shape=${shape}` : null,\n styles.length > 1 ? `style=\"${styles.join(',')}\"` : null,\n color('fillcolor', own.fill), color('color', own.stroke), color('fontcolor', own.text),\n own.strokeWidth !== undefined ? `penwidth=${own.strokeWidth}` : null,\n placed ? `pos=\"${num(node.at!.x + node.width! / 2)},${num(page - node.at!.y - node.height! / 2)}\"` : null,\n placed ? `width=${num(node.width! / POINTS_PER_INCH)}, height=${num(node.height! / POINTS_PER_INCH)}` : null,\n ]);\n}\n\nfunction writeCluster(out: GraphOut, c: Cluster, placed: boolean, indent: string, lines: string[]): void {\n lines.push(`${indent}subgraph ${dotId(`cluster_${c.id}`)} {`);\n const inner = `${indent} `;\n if (c.label !== undefined) lines.push(`${inner}label=${quoteLabel([c.label])};`);\n if (c.style !== undefined) {\n if (c.style.fill !== undefined) lines.push(`${inner}style=filled;`, `${inner}${color('fillcolor', c.style.fill)};`);\n for (const [key, value] of [['color', c.style.stroke], ['fontcolor', c.style.text]] as const) {\n if (value !== undefined) lines.push(`${inner}${color(key, value)};`);\n }\n }\n for (const id of c.nodes) lines.push(`${inner}${dotId(id)}${nodeAttrs(out, out.byId.get(id)!, placed)};`);\n for (const child of c.clusters) writeCluster(out, child, placed, inner, lines);\n lines.push(`${indent}}`);\n}\n\nfunction endOf(out: GraphOut, id: string, port: string | undefined): string {\n if (port === undefined) return dotId(id);\n if (COMPASS.has(port)) return `${dotId(id)}:${port}`;\n out.warnings.add('DOT has only compass ports; connectors\\' other ports were dropped.');\n return dotId(id);\n}\n\nfunction markerAttrs(out: GraphOut, edge: DataEdge): (string | null)[] {\n const { markerStart, markerEnd } = edgeStyleIn(out, edge);\n const name = (m: typeof markerEnd) => {\n if (m === null || m === undefined) return null;\n const n = arrowName(m);\n if (n === undefined) out.warnings.add('DOT has no arrowhead for some markers; they were written as arrows.');\n return n ?? 'normal';\n };\n const head = name(markerEnd);\n const tail = name(markerStart ?? null);\n const dir = head !== null && tail !== null ? 'both' : head !== null ? null : tail !== null ? 'back' : 'none';\n return [\n dir !== null ? `dir=${dir}` : null,\n head !== null && head !== 'normal' ? `arrowhead=${head}` : null,\n tail !== null && tail !== 'normal' ? `arrowtail=${tail}` : null,\n ];\n}\n\nfunction edgeLine(out: GraphOut, edge: DataEdge): string | null {\n if (!out.byId.has(edge.from) || !out.byId.has(edge.to)) {\n if (out.clusterIds.has(edge.from) || out.clusterIds.has(edge.to)) {\n out.warnings.add('DOT joins nodes only; connectors to containers and groups were dropped.');\n }\n return null;\n }\n const own = changed(edgeStyleIn(out, edge), edgeStyleIn(out));\n return `${endOf(out, edge.from, edge.fromPort)} -> ${endOf(out, edge.to, edge.toPort)}${attrList([\n edge.label !== undefined ? `label=${quoteLabel([edge.label])}` : null,\n color('color', own.stroke), color('fontcolor', own.label),\n own.width !== undefined ? `penwidth=${own.width}` : null,\n own.dash !== undefined ? 'style=dashed' : null,\n ...markerAttrs(out, edge),\n ])};`;\n}\n\n/** Writes the page `opts.page` names, else the first, as a DOT digraph. */\nexport function writeDot(doc: DiagramDocument, opts?: WriteOptions): ExportResult {\n const out = graphOut(doc, opts, 'DOT');\n if (out === null) return { text: 'digraph {\\n}\\n', warnings: [] };\n const { page } = out;\n const placed = page.data.nodes.length > 0\n && page.data.nodes.every((n) => n.at !== undefined && n.width !== undefined && n.height !== undefined);\n const node = nodeStyleIn(out);\n const edge = edgeStyleIn(out);\n const rankdir = page.direction === undefined ? null : RANKDIR[page.direction];\n const lines = [\n `digraph ${page.name !== undefined ? dotId(page.name) : ''}${page.name !== undefined ? ' ' : ''}{`,\n ...(rankdir !== null ? [` rankdir=${rankdir};`] : []),\n ...(placed ? [` bb=\"0,0,${num(page.width)},${num(page.height)}\";`] : []),\n ` node${attrList(['shape=box', 'style=filled', color('fillcolor', node.fill), color('color', node.stroke), color('fontcolor', node.text)])};`,\n ` edge${attrList([color('color', edge.stroke), color('fontcolor', edge.label)])};`,\n ];\n for (const n of out.nodes) lines.push(` ${dotId(n.id)}${nodeAttrs(out, n, placed)};`);\n for (const c of out.clusters) writeCluster(out, c, placed, ' ', lines);\n for (const e of out.edges) {\n const line = edgeLine(out, e);\n if (line !== null) lines.push(` ${line}`);\n }\n lines.push('}');\n return { text: `${lines.join('\\n')}\\n`, warnings: out.warnings.all() };\n}\n","/** Graphviz DOT as a {@link DiagramFormat}. */\nimport type { DiagramFormat } from '../document';\nimport { readDot } from './read';\nimport { writeDot } from './write';\n\nconst COMMENTS = /\\/\\*[\\s\\S]*?\\*\\/|\\/\\/[^\\n]*|^#[^\\n]*/gm;\nconst HEADER = /^\\s*(?:strict\\s+)?(?:di)?graph\\s*(?:[A-Za-z_\\u0080-][\\w\\u0080-]*|-?(?:\\.\\d+|\\d+(?:\\.\\d*)?)|\"(?:[^\"\\\\]|\\\\.)*\")?\\s*\\{/i;\n\n/** A Graphviz DOT graph, one page per file, laid out on import unless every node has a `pos`. */\nexport const DIAGRAM_DOT: DiagramFormat = {\n id: 'graphviz-dot',\n name: 'Graphviz DOT',\n extensions: ['.dot', '.gv'],\n detect: (text) => HEADER.test(text.replace(COMMENTS, '')),\n read: readDot,\n write: writeDot,\n onePage: true,\n};\n","/** The native format: a {@link DiagramDocument} written out as JSON, which carries everything the model holds. */\nimport type { DiagramDocument, DiagramFormat, ExportResult, ImportResult } from './document';\n\nconst FORMAT = 'weasel-diagram';\nconst VERSION = 1;\n\ninterface DiagramJson extends DiagramDocument {\n format: typeof FORMAT;\n version: number;\n}\n\nfunction parsed(text: string): unknown {\n try {\n return JSON.parse(text);\n } catch {\n return null;\n }\n}\n\nconst isDiagramJson = (value: unknown): value is Partial<DiagramJson> =>\n value !== null && typeof value === 'object' && (value as { format?: unknown }).format === FORMAT;\n\nfunction read(text: string): ImportResult {\n const json = parsed(text);\n if (!isDiagramJson(json)) throw new Error('Not a weasel diagram document');\n if (typeof json.version !== 'number' || json.version > VERSION) {\n throw new Error(`A weasel diagram document of version ${String(json.version)}, newer than this reader's ${VERSION}`);\n }\n if (!Array.isArray(json.pages)) throw new Error('A weasel diagram document with no pages list');\n const { format: _f, version: _v, ...document } = json as DiagramJson;\n return { document, warnings: [] };\n}\n\nfunction write(doc: DiagramDocument): ExportResult {\n const json: DiagramJson = { format: FORMAT, version: VERSION, ...doc };\n return { text: `${JSON.stringify(json, null, 2)}\\n`, warnings: [] };\n}\n\n/** A diagram document as JSON, every page in one file, recognized by its `format` field. */\nexport const DIAGRAM_JSON: DiagramFormat = {\n id: FORMAT,\n name: 'Diagram JSON',\n extensions: ['.diagram.json'],\n detect: (text) => isDiagramJson(parsed(text)),\n read,\n write,\n};\n","/**\n * A draw-style XML cell's style string: `key=value` pairs and bare style\n * names, each ending in a semicolon, as in `ellipse;fillColor=#fff;`.\n */\n\n/** A parsed style string: its bare names in order, and its pairs, a later one winning. */\nexport interface CellStyle {\n names: readonly string[];\n values: ReadonlyMap<string, string>;\n}\n\n/** Reads a style string. A missing one is empty. */\nexport function parseStyle(text: string | null | undefined): CellStyle {\n const names: string[] = [];\n const values = new Map<string, string>();\n for (const token of (text ?? '').split(';')) {\n const part = token.trim();\n if (part === '') continue;\n const eq = part.indexOf('=');\n if (eq < 0) names.push(part);\n else values.set(part.slice(0, eq), part.slice(eq + 1));\n }\n return { names, values };\n}\n\n/** A pair's value as a number, or `undefined` when it is missing or not one. */\nexport function styleNumber(style: CellStyle, key: string): number | undefined {\n const raw = style.values.get(key);\n if (raw === undefined || raw.trim() === '') return undefined;\n const n = Number(raw);\n return Number.isFinite(n) ? n : undefined;\n}\n\n/** Whether a pair is set to `1`. */\nexport const styleFlag = (style: CellStyle, key: string): boolean => style.values.get(key) === '1';\n\n/** Whether the style has `name` as a bare name, or as its `shape`. */\nexport const hasStyleName = (style: CellStyle, name: string): boolean =>\n style.names.includes(name) || style.values.get('shape') === name;\n\n/** The shape a style draws: its `shape` pair, else its first bare name. */\nexport function shapeOf(style: CellStyle): string | undefined {\n return style.values.get('shape') ?? style.names[0];\n}\n\n/** One part of a style to write: a bare name, or a pair, left out when its value is `undefined`. */\nexport type StylePart = string | readonly [string, string | number | undefined];\n\n/** Writes a style string, every part ending in a semicolon. A value loses any semicolon, which would end it early. */\nexport function writeStyle(parts: readonly StylePart[]): string {\n let out = '';\n for (const part of parts) {\n if (typeof part === 'string') out += `${part.replace(/[;=]/g, '')};`;\n else if (part[1] !== undefined) out += `${part[0]}=${String(part[1]).replace(/;/g, '')};`;\n }\n return out;\n}\n","/** The cells of a draw-style graph model, read off its XML as they are, before they mean anything to a diagram. */\nimport type { Vec2 } from '@weasel-js/core/math';\nimport { parseStyle, type CellStyle } from './style';\n\n/** One cell element, with a wrapper's id and label read in. */\nexport interface RawCell {\n id: string;\n parent: string | null;\n value: string;\n style: CellStyle;\n vertex: boolean;\n edge: boolean;\n source: string | null;\n target: string | null;\n geometry: Element | null;\n}\n\n/** A cell's geometry: its box, relative to its parent's origin, and whether it is a fraction along an edge instead. */\nexport interface CellGeometry {\n x: number;\n y: number;\n width: number;\n height: number;\n relative: boolean;\n}\n\n/** The elements that wrap a cell to give it properties of its own, holding its id and its label. */\nconst WRAPPERS = new Set(['UserObject', 'object']);\n\nconst numberAttr = (el: Element | null, name: string): number => {\n const n = Number(el?.getAttribute(name) ?? '0');\n return Number.isFinite(n) ? n : 0;\n};\n\nconst childElements = (el: Element): Element[] => Array.from(el.childNodes).filter((n): n is Element => n.nodeType === 1);\n\nfunction rawCell(outer: Element, cell: Element, index: number): RawCell {\n const wrapped = outer !== cell;\n const id = outer.getAttribute('id') ?? cell.getAttribute('id') ?? `cell-${index + 1}`;\n const value = wrapped ? outer.getAttribute('label') ?? '' : cell.getAttribute('value') ?? '';\n return {\n id,\n parent: cell.getAttribute('parent'),\n value,\n style: parseStyle(cell.getAttribute('style')),\n vertex: cell.getAttribute('vertex') === '1',\n edge: cell.getAttribute('edge') === '1',\n source: cell.getAttribute('source'),\n target: cell.getAttribute('target'),\n geometry: childElements(cell).find((c) => c.tagName === 'mxGeometry') ?? null,\n };\n}\n\n/** The cells under a graph model's `root`, in document order. */\nexport function cellsOf(model: Element): RawCell[] {\n const root = childElements(model).find((c) => c.tagName === 'root');\n if (root === undefined) return [];\n const out: RawCell[] = [];\n for (const el of childElements(root)) {\n if (el.tagName === 'mxCell') out.push(rawCell(el, el, out.length));\n else if (WRAPPERS.has(el.tagName)) {\n const inner = childElements(el).find((c) => c.tagName === 'mxCell');\n if (inner !== undefined) out.push(rawCell(el, inner, out.length));\n }\n }\n return out;\n}\n\n/** A cell's geometry. A missing one is an empty box at the origin. */\nexport function geometryOf(cell: RawCell): CellGeometry {\n const g = cell.geometry;\n return {\n x: numberAttr(g, 'x'), y: numberAttr(g, 'y'), width: numberAttr(g, 'width'), height: numberAttr(g, 'height'),\n relative: g?.getAttribute('relative') === '1',\n };\n}\n\n/** An edge geometry's bend points, relative to its parent's origin. */\nexport function pointsOf(cell: RawCell): Vec2[] {\n const array = cell.geometry === null ? undefined\n : childElements(cell.geometry).find((c) => c.tagName === 'Array' && c.getAttribute('as') === 'points');\n if (array === undefined) return [];\n return childElements(array).filter((p) => p.tagName === 'mxPoint').map((p) => ({ x: numberAttr(p, 'x'), y: numberAttr(p, 'y') }));\n}\n","/**\n * A graph model's cells sorted into what a diagram holds — shapes, containers,\n * pools, lanes, groups, edges, and edge labels — with their boxes on the page.\n */\nimport type { Vec2 } from '@weasel-js/core/math';\nimport { cellsOf, geometryOf, type RawCell } from './cells';\nimport { hasStyleName, styleFlag, styleNumber } from './style';\n\n/** What a cell is to a diagram. `layer` covers the root and the layers, which hold the rest. */\nexport type CellKind = 'layer' | 'shape' | 'container' | 'pool' | 'lane' | 'group' | 'edge' | 'label';\n\n/** A box on the page. */\nexport interface Box { x: number; y: number; width: number; height: number }\n\n/** A page's cells, sorted, and how to place them. */\nexport interface PageCells {\n cells: readonly RawCell[];\n kindOf(cell: RawCell): CellKind;\n /** Vertex children of a cell, in document order. */\n childrenOf(id: string): readonly RawCell[];\n /** The page point a cell's children measure from: the corner of every vertex above it. */\n originOf(id: string | null): Vec2;\n /** A vertex's box on the page. */\n boxOf(cell: RawCell): Box;\n /** The container, pool, or lane a cell sits in, through any groups and shapes between, or `null`. */\n regionOf(cell: RawCell): RawCell | null;\n /** How many layers the page has. */\n layers: number;\n}\n\n/** Lanes span a pool's body across its stack; a swimlane holding swimlanes that do not is a container of containers. */\nconst SPAN = 0.9;\n\nconst isSwimlane = (cell: RawCell): boolean => hasStyleName(cell.style, 'swimlane');\n\n/** Whether a swimlane's swimlane children are its lanes. */\nfunction holdsLanes(cell: RawCell, children: readonly RawCell[]): boolean {\n const lanes = children.filter(isSwimlane);\n if (lanes.length === 0) return false;\n const box = geometryOf(cell);\n const head = styleNumber(cell.style, 'startSize') ?? 0;\n const rows = cell.style.values.get('horizontal') === '0';\n const across = rows ? box.width - head : box.height - head;\n return lanes.every((lane) => (rows ? geometryOf(lane).width : geometryOf(lane).height) >= across * SPAN);\n}\n\n/** Sorts a graph model's cells. */\nexport function pageCells(model: Element): PageCells {\n const cells = cellsOf(model);\n const byId = new Map(cells.map((c) => [c.id, c]));\n const children = new Map<string, RawCell[]>();\n for (const cell of cells) {\n if (!cell.vertex || cell.parent === null) continue;\n children.set(cell.parent, [...(children.get(cell.parent) ?? []), cell]);\n }\n const childrenOf = (id: string): readonly RawCell[] => children.get(id) ?? [];\n const kinds = new Map<RawCell, CellKind>();\n const kindOf = (cell: RawCell): CellKind => {\n let kind = kinds.get(cell);\n if (kind === undefined) {\n kind = classify(cell);\n kinds.set(cell, kind);\n }\n return kind;\n };\n const classify = (cell: RawCell): CellKind => {\n if (cell.edge) return 'edge';\n if (!cell.vertex) return 'layer';\n const parent = cell.parent === null ? undefined : byId.get(cell.parent);\n if (parent?.edge === true) return 'label';\n if (hasStyleName(cell.style, 'group')) return 'group';\n if (isSwimlane(cell)) {\n if (parent !== undefined && kindOf(parent) === 'pool') return 'lane';\n return holdsLanes(cell, childrenOf(cell.id)) ? 'pool' : 'container';\n }\n return styleFlag(cell.style, 'container') ? 'container' : 'shape';\n };\n\n const origins = new Map<string, Vec2>();\n const originOf = (id: string | null): Vec2 => {\n const cell = id === null ? undefined : byId.get(id);\n if (cell === undefined || !cell.vertex || kindOf(cell) === 'label') return { x: 0, y: 0 };\n let origin = origins.get(cell.id);\n if (origin === undefined) {\n const up = originOf(cell.parent);\n const g = geometryOf(cell);\n origin = { x: up.x + g.x, y: up.y + g.y };\n origins.set(cell.id, origin);\n }\n return origin;\n };\n const boxOf = (cell: RawCell): Box => {\n const { x, y } = originOf(cell.id);\n const g = geometryOf(cell);\n return { x, y, width: g.width, height: g.height };\n };\n const regionOf = (cell: RawCell): RawCell | null => {\n for (let up = byId.get(cell.parent ?? ''); up !== undefined; up = byId.get(up.parent ?? '')) {\n const kind = kindOf(up);\n if (kind === 'container' || kind === 'pool' || kind === 'lane') return up;\n if (kind !== 'group' && kind !== 'shape') return null;\n }\n return null;\n };\n const layers = cells.filter((c) => !c.vertex && !c.edge && c.parent !== null && byId.get(c.parent)?.parent === null).length;\n return { cells, kindOf, childrenOf, originOf, boxOf, regionOf, layers };\n}\n","/** A cell's `value` as lines of text: plain, or HTML with its tags stripped and its breaks kept. */\n\nconst NAMED: Readonly<Record<string, string>> = { amp: '&', lt: '<', gt: '>', quot: '\"', apos: \"'\", nbsp: ' ' };\n\nfunction decodeEntities(s: string): string {\n return s.replace(/&(#x[0-9a-f]+|#[0-9]+|[a-z]+);/gi, (whole, name: string) => {\n if (name[0] === '#') {\n const code = name[1] === 'x' || name[1] === 'X' ? parseInt(name.slice(2), 16) : parseInt(name.slice(1), 10);\n return Number.isFinite(code) && code <= 0x10ffff ? String.fromCodePoint(code) : whole;\n }\n return NAMED[name.toLowerCase()] ?? whole;\n });\n}\n\nconst OPEN = '\\u0001';\nconst CLOSE = '\\u0002';\n\n/** HTML as text, where a break is a line break and a block starts and ends a line, as a browser lays it out. */\nfunction htmlText(html: string): string {\n const marked = html\n .replace(/<br\\s*\\/?>/gi, '\\n')\n .replace(/<(div|p|li|h[1-6])\\b[^>]*>/gi, OPEN)\n .replace(/<\\/(div|p|li|h[1-6])\\s*>/gi, CLOSE)\n .replace(/<[^>]*>/g, '');\n let out = '';\n for (const ch of marked) {\n const atLineStart = out === '' || out.endsWith('\\n');\n if (ch === OPEN || ch === CLOSE) {\n if (!atLineStart) out += '\\n';\n } else {\n out += ch;\n }\n }\n return decodeEntities(out);\n}\n\n/** `value` as lines. With `html`, tags are stripped, `<br>` and block elements break lines, and entities are decoded. Empty lines at either end are dropped. */\nexport function cellLines(value: string, html: boolean): string[] {\n const lines = (html ? htmlText(value) : value).replace(/\\r\\n?/g, '\\n').replace(/ /g, ' ').split('\\n');\n while (lines.length > 0 && lines[0]!.trim() === '') lines.shift();\n while (lines.length > 0 && lines[lines.length - 1]!.trim() === '') lines.pop();\n return lines;\n}\n","/** What a draw-style XML style name means in a diagram, read and written from the one table each. */\nimport type { MarkerRef } from '@weasel-js/core';\nimport type { Outline } from '@weasel-js/diagram';\n\n/** The arc size, in percent, at and past which a rounded rect has round ends and reads as a stadium. */\nexport const STADIUM_ARC = 50;\n\n/** Shapes by their style name, each with the style that writes it back. */\nexport const SHAPES: ReadonlyArray<{ name: string; outline: Exclude<Outline, object>; write: readonly (string | [string, string | number])[] }> = [\n { name: 'rhombus', outline: 'diamond', write: ['rhombus'] },\n { name: 'ellipse', outline: 'ellipse', write: ['ellipse'] },\n { name: 'hexagon', outline: 'hexagon', write: [['shape', 'hexagon'], ['perimeter', 'hexagonPerimeter2'], ['size', 0.2]] },\n { name: 'parallelogram', outline: 'parallelogram', write: [['shape', 'parallelogram'], ['perimeter', 'parallelogramPerimeter'], ['size', 0.2]] },\n {\n name: 'trapezoid', outline: 'trapezoid',\n write: [['shape', 'trapezoid'], ['perimeter', 'trapezoidPerimeter'], ['direction', 'north'], ['size', 0.25]],\n },\n];\n\n/** Style names that draw a plain box. */\nexport const BOX_NAMES: ReadonlySet<string> = new Set(['rect', 'rectangle', 'text', 'label']);\n\n/** Edge styles that route at right angles. */\nexport const ORTHOGONAL_EDGE_STYLES: ReadonlySet<string> = new Set(['orthogonalEdgeStyle', 'elbowEdgeStyle', 'entityRelationEdgeStyle']);\n\n/** Arrowheads by their style name, and whether a `Fill` of `0` makes one hollow. */\nconst MARKERS_READ: Readonly<Record<string, { filled: MarkerRef; hollow?: MarkerRef }>> = {\n classic: { filled: 'arrow' }, classicThin: { filled: 'arrow' }, block: { filled: 'arrow', hollow: 'arrow-open' },\n blockThin: { filled: 'arrow', hollow: 'arrow-open' }, open: { filled: 'arrow-open' }, openThin: { filled: 'arrow-open' },\n diamond: { filled: 'diamond', hollow: 'diamond-hollow' }, diamondThin: { filled: 'diamond', hollow: 'diamond-hollow' },\n oval: { filled: 'circle' }, box: { filled: 'square' }, dash: { filled: 'bar' },\n};\n\n/** The marker an arrowhead style name draws as, `null` for none, or `undefined` for a name it does not know. */\nexport function markerOf(name: string, fill: string | undefined): MarkerRef | null | undefined {\n if (name === 'none' || name === '') return null;\n const known = MARKERS_READ[name];\n if (known === undefined) return undefined;\n return fill === '0' && known.hollow !== undefined ? known.hollow : known.filled;\n}\n\nconst MARKERS_WRITE: Readonly<Record<string, readonly [string, 0 | 1]>> = {\n 'arrow': ['block', 1], 'arrow-concave': ['classic', 1], 'arrow-open': ['open', 0], 'diamond': ['diamond', 1],\n 'diamond-hollow': ['diamond', 0], 'circle': ['oval', 1], 'square': ['box', 1], 'bar': ['dash', 1],\n};\n\n/** The arrowhead style name and fill a marker writes as; `undefined` for a marker the format has none like. */\nexport function markerStyle(marker: MarkerRef | null | undefined): readonly [string, 0 | 1] | undefined {\n if (marker === null || marker === undefined) return ['none', 1];\n return MARKERS_WRITE[typeof marker === 'string' ? marker : marker.key];\n}\n","/** What one cell's style and value say in diagram terms: an outline, colors, text, a router, markers, ports. */\nimport type { MarkerRef } from '@weasel-js/core';\nimport {\n DEFAULT_PORTS, type DataNode, type DiagramLabel, type DiagramRouter, type EdgeStyle, type NodeStyle, type Outline, type Row,\n type RowTextStyle,\n} from '@weasel-js/diagram';\nimport type { CellGeometry, RawCell } from './cells';\nimport { cellLines } from './cellText';\nimport { BOX_NAMES, ORTHOGONAL_EDGE_STYLES, SHAPES, STADIUM_ARC, markerOf } from './mapping';\nimport { hasStyleName, shapeOf, styleFlag, styleNumber, type CellStyle } from './style';\n\n/** Records one sentence about what a file had that a diagram cannot hold. */\nexport type Warn = (message: string) => void;\n\n/** The outline a vertex draws as. A shape it does not know is a rect, with a warning. */\nexport function outlineOf(style: CellStyle, warn: Warn): Outline {\n const shape = shapeOf(style);\n const known = SHAPES.find((s) => s.name === shape);\n if (known !== undefined) return known.outline;\n if (styleFlag(style, 'rounded') && (styleNumber(style, 'arcSize') ?? 0) >= STADIUM_ARC) return 'stadium';\n if (shape !== undefined && !BOX_NAMES.has(shape)) warn(`Shapes of kind \"${shape}\" were drawn as rects.`);\n return 'rect';\n}\n\n/** A color value: `none` is transparent, and `default` or nothing is unset. */\nfunction colorOf(style: CellStyle, key: string, otherwise?: string): string | undefined {\n const raw = style.values.get(key);\n if (raw === undefined || raw === '' || raw === 'default') return otherwise;\n return raw === 'none' ? 'transparent' : raw;\n}\n\nfunction dashOf(style: CellStyle): number[] | undefined {\n if (!styleFlag(style, 'dashed')) return undefined;\n const pattern = (style.values.get('dashPattern') ?? '').split(/\\s+/).map(Number).filter((n) => Number.isFinite(n) && n > 0);\n return pattern.length > 0 ? pattern : [3, 3];\n}\n\nconst defined = <T extends object>(o: { [K in keyof T]?: T[K] | undefined }): Partial<T> | undefined => {\n const out = Object.fromEntries(Object.entries(o).filter(([, v]) => v !== undefined)) as Partial<T>;\n return Object.keys(out).length > 0 ? out : undefined;\n};\n\n/** The colors a vertex's style names. A text cell draws no fill or stroke unless it says otherwise. */\nexport function nodeColorsOf(style: CellStyle): Partial<NodeStyle> | undefined {\n const bare = hasStyleName(style, 'text') ? 'transparent' : undefined;\n return defined<NodeStyle>({\n fill: colorOf(style, 'fillColor', bare), stroke: colorOf(style, 'strokeColor', bare), text: colorOf(style, 'fontColor'),\n strokeWidth: styleNumber(style, 'strokeWidth'), dash: dashOf(style),\n });\n}\n\n/** A cell's value as text. */\nexport const valueLines = (cell: RawCell): string[] => cellLines(cell.value, styleFlag(cell.style, 'html'));\n\n/** A vertex's text: plain lines, or label rows when its style sets a font. */\nexport function textOf(cell: RawCell): Pick<DataNode, 'lines' | 'rows'> {\n const lines = valueLines(cell);\n const fontStyle = styleNumber(cell.style, 'fontStyle');\n const style = defined<RowTextStyle>({\n fontSize: styleNumber(cell.style, 'fontSize'),\n fontFamily: cell.style.values.get('fontFamily') || undefined,\n bold: fontStyle !== undefined && (fontStyle & 1) === 1 ? true : undefined,\n });\n if (style === undefined) return { lines };\n return { rows: lines.map((text): Row => ({ kind: 'label', text, style })) };\n}\n\nconst VERTICAL: Readonly<Record<string, DataNode['verticalAlign']>> = { top: 'top', middle: 'center', bottom: 'bottom' };\n\n/** Where a vertex's text sits, when its style says. */\nexport const verticalAlignOf = (style: CellStyle): DataNode['verticalAlign'] => VERTICAL[style.values.get('verticalAlign') ?? ''];\n\n/** The router an edge style draws with. */\nexport function routerOf(style: CellStyle): DiagramRouter {\n if (styleFlag(style, 'curved')) return 'bezier';\n return ORTHOGONAL_EDGE_STYLES.has(style.values.get('edgeStyle') ?? '') ? 'orthogonal' : 'straight';\n}\n\nfunction markerAt(style: CellStyle, end: 'start' | 'end', warn: Warn): MarkerRef | null {\n const name = style.values.get(`${end}Arrow`) ?? (end === 'end' ? 'classic' : 'none');\n const marker = markerOf(name, style.values.get(`${end}Fill`));\n if (marker !== undefined) return marker;\n warn(`Arrowheads of kind \"${name}\" were drawn as arrows.`);\n return 'arrow';\n}\n\n/** The stroke, label color, and markers an edge style names. Markers are kept only where they differ from a connector's own. */\nexport function edgeColorsOf(style: CellStyle, warn: Warn): Partial<EdgeStyle> | undefined {\n const start = markerAt(style, 'start', warn);\n const end = markerAt(style, 'end', warn);\n return defined<EdgeStyle>({\n stroke: colorOf(style, 'strokeColor'), label: colorOf(style, 'fontColor'),\n width: styleNumber(style, 'strokeWidth'), dash: dashOf(style),\n markerStart: start === null ? undefined : start,\n markerEnd: end === 'arrow' ? undefined : end,\n });\n}\n\n/** The compass port nearest an exit or entry point given as fractions of the box, or `undefined` for none. */\nexport function portAt(style: CellStyle, end: 'exit' | 'entry'): string | undefined {\n const u = styleNumber(style, `${end}X`);\n const v = styleNumber(style, `${end}Y`);\n if (u === undefined || v === undefined) return undefined;\n let best = DEFAULT_PORTS[0]!;\n for (const port of DEFAULT_PORTS) {\n if (Math.hypot(port.at.u - u, port.at.v - v) < Math.hypot(best.at.u - u, best.at.v - v)) best = port;\n }\n return best.id;\n}\n\n/** Where a label sits along its edge, from an edge or edge-label geometry: `x` runs from -1 to 1, and `y` is how far off the line. */\nexport function labelPlacementOf(cell: RawCell, geo: CellGeometry): DiagramLabel | undefined {\n const g = cell.geometry;\n if (g === null || (!g.hasAttribute('x') && !g.hasAttribute('y'))) return undefined;\n const fraction = Math.min(1, Math.max(0, geo.x / 2 + 0.5));\n const at = fraction === 0.5 ? 'mid' : fraction === 0 ? 'start' : fraction === 1 ? 'end' : fraction;\n return { at, ...(geo.y !== 0 ? { offset: geo.y } : {}) };\n}\n","/** One draw-style graph model as a {@link DocumentPage}. */\nimport type { Vec2 } from '@weasel-js/core/math';\nimport type { DataContainer, DataEdge, DataGroup, DataLane, DataNode, DiagramData } from '@weasel-js/diagram';\nimport type { DocumentPage } from '../document';\nimport { PAGE_MARGIN } from '../pageLayout';\nimport { shiftData } from '../shiftData';\nimport { geometryOf, pointsOf, type RawCell } from './cells';\nimport { pageCells, type Box, type PageCells } from './pageCells';\nimport {\n edgeColorsOf, labelPlacementOf, nodeColorsOf, outlineOf, portAt, routerOf, textOf, valueLines, verticalAlignOf, type Warn,\n} from './readStyle';\n\n/** The ids a document has handed out, so a cell id an earlier page used is renamed rather than shared. */\nexport type IdSpace = Set<string>;\n\n/** Where a page's name and size come from. */\nexport interface PageSource { id: string; name?: string; width?: number; height?: number }\n\nconst optional = <K extends string, V>(key: K, value: V | undefined): { [P in K]?: V } =>\n (value === undefined ? {} : { [key]: value }) as { [P in K]?: V };\n\n/** A unique id for `cellId`: itself, else prefixed with its page's, else numbered. */\nfunction claim(ids: IdSpace, cellId: string, pageId: string): string {\n let id = ids.has(cellId) ? `${pageId}:${cellId}` : cellId;\n for (let n = 2; ids.has(id); n++) id = `${pageId}:${cellId}-${n}`;\n ids.add(id);\n return id;\n}\n\ninterface Reader { page: PageCells; idOf: ReadonlyMap<RawCell, string>; warn: Warn }\n\nconst labelOf = (cell: RawCell): string | undefined => {\n const text = valueLines(cell).join(' ');\n return text === '' ? undefined : text;\n};\n\nfunction readNode({ page, idOf, warn }: Reader, cell: RawCell): DataNode {\n const box = page.boxOf(cell);\n return {\n id: idOf.get(cell)!,\n outline: outlineOf(cell.style, warn),\n ...textOf(cell),\n at: { x: box.x, y: box.y },\n width: box.width,\n height: box.height,\n ...optional('verticalAlign', verticalAlignOf(cell.style)),\n ...optional('colors', nodeColorsOf(cell.style)),\n };\n}\n\n/** The shapes and containers sitting directly in `region`, past any groups between. */\nfunction membersOf({ page, idOf }: Reader, region: RawCell): string[] {\n return page.cells\n .filter((c) => (page.kindOf(c) === 'shape' || page.kindOf(c) === 'container') && page.regionOf(c) === region)\n .map((c) => idOf.get(c)!);\n}\n\nfunction readRegion(r: Reader, cell: RawCell): DataContainer {\n const { page, idOf } = r;\n const id = idOf.get(cell)!;\n const box = page.boxOf(cell);\n const common = { id, ...optional('label', labelOf(cell)), box, ...optional('colors', nodeColorsOf(cell.style)) };\n if (page.kindOf(cell) === 'container') {\n const members = membersOf(r, cell);\n return { ...common, role: 'container', ...(members.length > 0 ? { members } : {}) };\n }\n const axis = cell.style.values.get('horizontal') === '0' ? 'y' : 'x';\n const start = (b: Box) => (axis === 'y' ? b.y : b.x);\n const lanes = page.childrenOf(cell.id).filter((c) => page.kindOf(c) === 'lane')\n .sort((p, q) => start(page.boxOf(p)) - start(page.boxOf(q)))\n .map((lane): DataLane => {\n const b = page.boxOf(lane);\n const members = membersOf(r, lane);\n return {\n id: idOf.get(lane)!, ...optional('label', labelOf(lane)), size: axis === 'y' ? b.height : b.width,\n ...(members.length > 0 ? { members } : {}), ...optional('colors', nodeColorsOf(lane.style)),\n };\n });\n return { ...common, role: 'pool', axis, lanes };\n}\n\nfunction readGroup({ page, idOf }: Reader, cell: RawCell): DataGroup | null {\n const members = page.childrenOf(cell.id).filter((c) => page.kindOf(c) === 'shape' || page.kindOf(c) === 'group').map((c) => idOf.get(c)!);\n return members.length === 0 ? null : { id: idOf.get(cell)!, members };\n}\n\nconst moved = (p: Vec2, by: Vec2): Vec2 => ({ x: p.x + by.x, y: p.y + by.y });\n\nfunction readEdge({ page, idOf, warn }: Reader, cell: RawCell, byCellId: ReadonlyMap<string, RawCell>): DataEdge | null {\n const end = (id: string | null) => {\n const target = id === null ? undefined : byCellId.get(id);\n return target === undefined || page.kindOf(target) === 'edge' || page.kindOf(target) === 'label' ? undefined : idOf.get(target);\n };\n const from = end(cell.source);\n const to = end(cell.target);\n if (from === undefined || to === undefined) {\n warn('Connectors with a loose end, or with an end on another connector, were left out.');\n return null;\n }\n const origin = page.originOf(cell.parent);\n const points = pointsOf(cell).map((p) => moved(p, origin));\n const labels = page.childrenOf(cell.id).filter((c) => labelOf(c) !== undefined);\n const holder = labelOf(cell) !== undefined ? cell : labels[0];\n if (labels.length + (holder === cell ? 1 : 0) > 1) warn('Connectors with more than one label kept only the first.');\n return {\n id: idOf.get(cell)!, from, to, router: routerOf(cell.style),\n ...optional('fromPort', portAt(cell.style, 'exit')),\n ...optional('toPort', portAt(cell.style, 'entry')),\n ...(points.length > 0 ? { waypoints: points } : {}),\n ...(holder !== undefined ? { label: labelOf(holder)!, ...optional('labelPlacement', labelPlacementOf(holder, geometryOf(holder))) } : {}),\n ...optional('colors', edgeColorsOf(cell.style, warn)),\n };\n}\n\n/** What sits left of or above the page moves onto it, and the page grows to hold what is on it. */\nfunction fitted(data: DiagramData, src: PageSource): { data: DiagramData; width: number; height: number } {\n const boxes: Box[] = [\n ...data.nodes.map((n) => ({ ...n.at!, width: n.width ?? 0, height: n.height ?? 0 })),\n ...(data.containers ?? []).map((c) => c.box!),\n ];\n if (boxes.length === 0) return { data, width: src.width ?? 2 * PAGE_MARGIN, height: src.height ?? 2 * PAGE_MARGIN };\n const minX = Math.min(...boxes.map((b) => b.x));\n const minY = Math.min(...boxes.map((b) => b.y));\n const by = { x: minX < 0 ? PAGE_MARGIN - minX : 0, y: minY < 0 ? PAGE_MARGIN - minY : 0 };\n const right = Math.max(...boxes.map((b) => b.x + b.width)) + by.x + PAGE_MARGIN;\n const bottom = Math.max(...boxes.map((b) => b.y + b.height)) + by.y + PAGE_MARGIN;\n return {\n data: shiftData(data, by),\n width: Math.max(src.width ?? 0, Math.ceil(right)),\n height: Math.max(src.height ?? 0, Math.ceil(bottom)),\n };\n}\n\n/** Reads one graph model as a page. Cell ids an earlier page claimed in `ids` are renamed. */\nexport function readPage(model: Element, src: PageSource, ids: IdSpace, warn: Warn): DocumentPage {\n const page = pageCells(model);\n const label = src.name !== undefined ? `\"${src.name}\"` : 'the page';\n if (page.layers > 1) warn(`The ${page.layers} layers on ${label} were merged into one.`);\n const idOf = new Map<RawCell, string>();\n for (const cell of page.cells) {\n if (page.kindOf(cell) !== 'layer' && page.kindOf(cell) !== 'label') idOf.set(cell, claim(ids, cell.id, src.id));\n }\n const reader: Reader = { page, idOf, warn };\n const byCellId = new Map(page.cells.map((c) => [c.id, c]));\n const of = (kind: string) => page.cells.filter((c) => page.kindOf(c) === kind);\n const groups = of('group').map((c) => readGroup(reader, c)).filter((g): g is DataGroup => g !== null);\n const containers = page.cells.filter((c) => page.kindOf(c) === 'container' || page.kindOf(c) === 'pool').map((c) => readRegion(reader, c));\n const data: DiagramData = {\n nodes: of('shape').map((c) => readNode(reader, c)),\n edges: of('edge').map((c) => readEdge(reader, c, byCellId)).filter((e): e is DataEdge => e !== null),\n ...(groups.length > 0 ? { groups } : {}),\n ...(containers.length > 0 ? { containers } : {}),\n };\n const fit = fitted(data, src);\n return { id: src.id, ...optional('name', src.name), width: fit.width, height: fit.height, data: fit.data };\n}\n","/**\n * Reading draw-style XML: a file of `<diagram>` pages, each a graph model\n * written out or compressed, or one bare graph model.\n */\nimport type { DocumentPage, ImportResult } from '../document';\nimport { readPage, type IdSpace } from './readPage';\n\nconst childElements = (el: Element): Element[] => Array.from(el.childNodes).filter((n): n is Element => n.nodeType === 1);\n\nfunction parseXml(text: string, what: string): Element {\n const doc = new DOMParser().parseFromString(text, 'application/xml');\n const error = doc.getElementsByTagName('parsererror')[0];\n if (error !== undefined) throw new Error(`${what} is not well-formed XML: ${(error.textContent ?? '').trim().split('\\n')[0]}`);\n return doc.documentElement;\n}\n\nasync function inflateRaw(bytes: Uint8Array): Promise<Uint8Array> {\n const stream = new DecompressionStream('deflate-raw');\n const writer = stream.writable.getWriter();\n writer.write(bytes as unknown as BufferSource).then(() => writer.close()).catch(() => undefined);\n const reader = stream.readable.getReader();\n const chunks: Uint8Array[] = [];\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n chunks.push(value as Uint8Array);\n }\n const out = new Uint8Array(chunks.reduce((n, c) => n + c.length, 0));\n let at = 0;\n for (const chunk of chunks) {\n out.set(chunk, at);\n at += chunk.length;\n }\n return out;\n}\n\n/** A compressed page: base64 of raw deflate of the URI-encoded graph model. */\nasync function unpacked(content: string): Promise<string> {\n const binary = atob(content.replace(/\\s+/g, ''));\n const bytes = Uint8Array.from(binary, (ch) => ch.charCodeAt(0));\n const text = new TextDecoder().decode(await inflateRaw(bytes));\n try {\n return decodeURIComponent(text);\n } catch {\n return text;\n }\n}\n\n/** A `<diagram>` element's graph model, written out or compressed inside it. */\nasync function modelOf(diagram: Element, label: string): Promise<Element> {\n const model = childElements(diagram).find((c) => c.tagName === 'mxGraphModel');\n if (model !== undefined) return model;\n const content = (diagram.textContent ?? '').trim();\n if (content === '') throw new Error(`Page ${label} holds no graph model`);\n let xml: string;\n try {\n xml = await unpacked(content);\n } catch {\n throw new Error(`Page ${label} holds compressed content that does not inflate`);\n }\n const root = parseXml(xml, `The compressed content of page ${label}`);\n if (root.tagName !== 'mxGraphModel') throw new Error(`Page ${label} holds compressed content that is not a graph model`);\n return root;\n}\n\nconst sizeOf = (model: Element, name: 'pageWidth' | 'pageHeight'): number | undefined => {\n const n = Number(model.getAttribute(name) ?? NaN);\n return Number.isFinite(n) && n > 0 ? n : undefined;\n};\n\nfunction pageOf(model: Element, id: string, name: string | undefined, ids: IdSpace, warn: (m: string) => void): DocumentPage {\n const width = sizeOf(model, 'pageWidth');\n const height = sizeOf(model, 'pageHeight');\n return readPage(model, {\n id, ...(name !== undefined ? { name } : {}), ...(width !== undefined ? { width } : {}), ...(height !== undefined ? { height } : {}),\n }, ids, warn);\n}\n\n/**\n * Reads draw-style XML into a document: a page per `<diagram>`, or one for a\n * bare graph model. A page named `Page N` in the place N is read as unnamed,\n * since that is the name it is written with. Throws on text that is not\n * well-formed XML, on another root element, and on a page that holds no graph\n * model.\n */\nexport async function readDrawXml(text: string): Promise<ImportResult> {\n const root = parseXml(text, 'The file');\n const warnings = new Set<string>();\n const warn = (message: string): void => { warnings.add(message); };\n const ids: IdSpace = new Set();\n const pageIds: IdSpace = new Set();\n const pageId = (want: string | null, index: number): string => {\n let id = want ?? `page-${index + 1}`;\n for (let n = 2; pageIds.has(id); n++) id = `${want ?? 'page'}-${n}`;\n pageIds.add(id);\n return id;\n };\n const pages: DocumentPage[] = [];\n if (root.tagName === 'mxGraphModel') {\n pages.push(pageOf(root, pageId(null, 0), undefined, ids, warn));\n } else if (root.tagName === 'mxfile') {\n const diagrams = childElements(root).filter((c) => c.tagName === 'diagram');\n if (diagrams.length === 0) throw new Error('The file has no pages');\n for (const [i, diagram] of diagrams.entries()) {\n const given = diagram.getAttribute('name');\n const name = given === null || given === `Page ${i + 1}` ? undefined : given;\n const model = await modelOf(diagram, `\"${given ?? i + 1}\"`);\n pages.push(pageOf(model, pageId(diagram.getAttribute('id'), i), name, ids, warn));\n }\n } else {\n throw new Error(`A draw-style XML file has an mxfile or mxGraphModel root element, not <${root.tagName}>`);\n }\n return { document: { pages }, warnings: [...warnings] };\n}\n","/** The style string each kind of cell is written with: a shape, a region, a group, or an edge. */\nimport {\n EDGE_STROKE_WIDTH, LANE_STROKE_WIDTH, NODE_STROKE_WIDTH, dataEdgeStyle, dataNodeStyle, dataRegionStyle, type ContainerHeader, type DataContainer,\n type DataEdge, type DataLane, type DataNode, type DiagramTheme, type NodeStyle, type Row,\n} from '@weasel-js/diagram';\nimport { SHAPES, STADIUM_ARC, markerStyle } from './mapping';\nimport type { Warn } from './readStyle';\nimport { writeStyle, type StylePart } from './style';\n\nconst colorValue = (color: string | undefined): string | undefined =>\n (color === undefined ? undefined : color === 'transparent' ? 'none' : color);\n\nconst dashParts = (dash: readonly number[] | undefined): StylePart[] =>\n (dash !== undefined && dash.length > 0 ? [['dashed', 1], ['dashPattern', dash.join(' ')]] : []);\n\nfunction colorParts(style: NodeStyle, fill: boolean): StylePart[] {\n return [\n ['fillColor', fill ? colorValue(style.fill) : 'none'], ['strokeColor', colorValue(style.stroke)],\n ['fontColor', colorValue(style.text)], ['strokeWidth', style.strokeWidth ?? NODE_STROKE_WIDTH], ...dashParts(style.dash),\n ];\n}\n\nfunction outlineParts(node: DataNode, warn: Warn): StylePart[] {\n const outline = node.outline ?? 'rect';\n if (outline === 'stadium') return [['rounded', 1], ['arcSize', STADIUM_ARC]];\n const shape = SHAPES.find((s) => s.outline === outline);\n if (shape !== undefined) return shape.write as StylePart[];\n if (typeof outline !== 'string') warn('Shapes drawn with an outline path of their own were written as rects.');\n return [['rounded', 0]];\n}\n\n/** A node's text, one line per row; rows that hold no text are left out, with a warning. */\nexport function nodeLines(node: DataNode, warn: Warn): string[] {\n if (node.rows === undefined) return [...(node.lines ?? [])];\n const lines: string[] = [];\n for (const row of node.rows) {\n if (row.kind === 'label') lines.push(row.text);\n else if (row.kind === 'field') lines.push(`${row.label}: ${row.value}`);\n else warn('Port rows and slots inside shapes were left out.');\n }\n return lines;\n}\n\nfunction fontParts(rows: readonly Row[] | undefined): StylePart[] {\n const style = rows?.find((r) => r.kind === 'label' || r.kind === 'field')?.style;\n if (style === undefined) return [];\n return [['fontSize', style.fontSize], ['fontFamily', style.fontFamily], ['fontStyle', style.bold === true ? 1 : undefined]];\n}\n\nconst VERTICAL: Readonly<Record<string, string>> = { top: 'top', center: 'middle', bottom: 'bottom' };\n\n/** A shape's style: its outline, its colors under `theme`, its font, and where its text sits. */\nexport function nodeStyle(node: DataNode, theme: DiagramTheme, warn: Warn): string {\n if ((node.marks ?? []).length > 0) warn('Marks drawn over shapes were left out.');\n if (node.portLabels !== undefined) warn('Port labels were left out.');\n return writeStyle([\n ...outlineParts(node, warn), ['whiteSpace', 'wrap'],\n ...colorParts(dataNodeStyle(node, theme), true), ...fontParts(node.rows),\n ['verticalAlign', node.verticalAlign === undefined ? undefined : VERTICAL[node.verticalAlign]],\n ]);\n}\n\n/** A container's, pool's, or lane's style: a swimlane whose header is on the side `header` says, `startSize` deep. */\nexport function regionStyle(region: DataContainer | (DataLane & { role: 'lane' }), header: ContainerHeader | undefined,\n theme: DiagramTheme, laneIndex = 0): string {\n const style = dataRegionStyle({ role: region.role, style: 'style' in region ? region.style : undefined, colors: region.colors }, theme, laneIndex);\n return writeStyle([\n 'swimlane', ['horizontal', header?.side === 'left' ? 0 : 1], ['startSize', header?.size ?? 0],\n ['container', 1], ['collapsible', 0], ['whiteSpace', 'wrap'],\n ...(region.role === 'lane' ? colorParts({ ...style, strokeWidth: LANE_STROKE_WIDTH }, false) : colorParts(style, true)),\n ]);\n}\n\n/** A group's style: a box drawn as nothing, around what it holds. */\nexport const GROUP_STYLE = writeStyle(['group']);\n\nfunction markerParts(end: 'start' | 'end', marker: Parameters<typeof markerStyle>[0], warn: Warn): StylePart[] {\n let style = markerStyle(marker);\n if (style === undefined) {\n warn('Markers the format has no arrowhead like were written as arrows.');\n style = markerStyle('arrow')!;\n }\n return [[`${end}Arrow`, style[0]], [`${end}Fill`, style[0] === 'none' ? undefined : style[1]]];\n}\n\n/** An edge's style, less its ports: its router, its stroke and label color under `theme`, and its markers. */\nexport function edgeStyle(edge: DataEdge, theme: DiagramTheme, warn: Warn): StylePart[] {\n const style = dataEdgeStyle(edge, theme);\n const router = edge.router ?? 'straight';\n return [\n ['edgeStyle', router === 'orthogonal' || router === 'avoid' ? 'orthogonalEdgeStyle' : 'none'],\n ['curved', router === 'bezier' ? 1 : undefined], ['rounded', 0], ['html', 0],\n ['strokeColor', colorValue(style.stroke)], ['strokeWidth', style.width ?? EDGE_STROKE_WIDTH], ...dashParts(style.dash),\n ['fontColor', colorValue(style.label ?? style.stroke)],\n ...markerParts('start', style.markerStart ?? null, warn),\n ...markerParts('end', style.markerEnd === undefined ? 'arrow' : style.markerEnd, warn),\n ];\n}\n","/** The XML elements draw-style cells are written as. */\nimport type { Vec2 } from '@weasel-js/core/math';\nimport { escapeAttr } from '@weasel-js/svg';\nimport type { Box } from './pageCells';\n\n/** A coordinate to four places, which is as fine as anything here is drawn. */\nexport const num = (n: number): string => String(Math.round(n * 10000) / 10000);\n\n/** Attributes, in order, leaving out those with no value. */\nexport function attrs(pairs: readonly (readonly [string, string | number | undefined])[]): string {\n return pairs\n .filter((p): p is readonly [string, string | number] => p[1] !== undefined)\n .map(([k, v]) => ` ${k}=\"${escapeAttr(typeof v === 'number' ? num(v) : v)}\"`)\n .join('');\n}\n\n/** A vertex cell: its box, relative to `origin`, the corner of the cell holding it. */\nexport function vertexXml(cell: { id: string; value: string; style: string; parent: string; group?: boolean }, box: Box, origin: Vec2): string {\n const head = attrs([\n ['id', cell.id], ['value', cell.value], ['style', cell.style], ['vertex', '1'],\n ['connectable', cell.group === true ? '0' : undefined], ['parent', cell.parent],\n ]);\n const geometry = attrs([['x', box.x - origin.x], ['y', box.y - origin.y], ['width', box.width], ['height', box.height], ['as', 'geometry']]);\n return ` <mxCell${head}>\\n <mxGeometry${geometry} />\\n </mxCell>\\n`;\n}\n\n/** An edge cell: its ends, its label's place along it as `x` from -1 to 1 and `y` off the line, and its bend points. */\nexport function edgeXml(\n cell: { id: string; value: string; style: string; parent: string; source: string; target: string },\n label: { x: number; y: number } | undefined, points: readonly Vec2[],\n): string {\n const head = attrs([\n ['id', cell.id], ['value', cell.value], ['style', cell.style], ['edge', '1'], ['parent', cell.parent],\n ['source', cell.source], ['target', cell.target],\n ]);\n const geometry = attrs([['x', label?.x], ['y', label?.y], ['relative', '1'], ['as', 'geometry']]);\n if (points.length === 0) return ` <mxCell${head}>\\n <mxGeometry${geometry} />\\n </mxCell>\\n`;\n const list = points.map((p) => ` <mxPoint${attrs([['x', p.x], ['y', p.y]])} />\\n`).join('');\n return ` <mxCell${head}>\\n <mxGeometry${geometry}>\\n <Array as=\"points\">\\n${list} </Array>\\n`\n + ' </mxGeometry>\\n </mxCell>\\n';\n}\n","/** One edge of a page as a draw-style edge cell. */\nimport type { Vec2 } from '@weasel-js/core/math';\nimport {\n DEFAULT_PORTS, edgeIdOf, type DataEdge, type DataNode, type DiagramLabel, type DiagramTheme,\n} from '@weasel-js/diagram';\nimport type { Box } from './pageCells';\nimport type { Warn } from './readStyle';\nimport { writeStyle, type StylePart } from './style';\nimport { edgeStyle } from './writeStyle';\nimport { edgeXml } from './writeXml';\n\n/** What an edge needs of the page it is on. */\nexport interface EdgePage {\n theme: DiagramTheme;\n layer: string;\n nodes: ReadonlyMap<string, DataNode>;\n /** The box of every shape, region, lane, and group, by id. */\n boxes: ReadonlyMap<string, Box>;\n warn: Warn;\n}\n\nconst center = (b: Box): Vec2 => ({ x: b.x + b.width / 2, y: b.y + b.height / 2 });\n\n/** How far along `line` the point nearest `p` is, as a fraction of its length. */\nfunction fractionNear(line: readonly Vec2[], p: Vec2): number {\n let total = 0;\n let best = { distance: Infinity, along: 0 };\n for (let i = 1; i < line.length; i++) {\n const a = line[i - 1]!;\n const b = line[i]!;\n const length = Math.hypot(b.x - a.x, b.y - a.y);\n const t = length === 0 ? 0 : Math.max(0, Math.min(1, ((p.x - a.x) * (b.x - a.x) + (p.y - a.y) * (b.y - a.y)) / (length * length)));\n const distance = Math.hypot(a.x + t * (b.x - a.x) - p.x, a.y + t * (b.y - a.y) - p.y);\n if (distance < best.distance) best = { distance, along: total + t * length };\n total += length;\n }\n return total === 0 ? 0.5 : best.along / total;\n}\n\n/** A label placement as the format's `x` from -1 to 1 along the edge and `y` off it. */\nfunction labelGeometry(placement: DiagramLabel | undefined, line: readonly Vec2[]): { x: number; y: number } | undefined {\n if (placement === undefined) return undefined;\n const { at } = placement;\n const fraction = at === 'start' ? 0 : at === 'mid' ? 0.5 : at === 'end' ? 1 : typeof at === 'number' ? at : fractionNear(line, at.near);\n return { x: fraction * 2 - 1, y: placement.offset ?? 0 };\n}\n\nfunction portParts(page: EdgePage, end: string, port: string | undefined, side: 'exit' | 'entry'): StylePart[] {\n if (port === undefined) return [];\n const anchor = (page.nodes.get(end)?.ports ?? DEFAULT_PORTS).find((p) => p.id === port)?.at;\n if (anchor === undefined) {\n page.warn('Connectors ending on a port in a row were written meeting the shape wherever it is nearest.');\n return [];\n }\n return [[`${side}X`, anchor.u], [`${side}Y`, anchor.v], [`${side}Dx`, 0], [`${side}Dy`, 0]];\n}\n\n/** An edge cell on the page's layer, or `null`, with a warning, when an end is not on the page. */\nexport function writeEdge(edge: DataEdge, page: EdgePage): string | null {\n const from = page.boxes.get(edge.from);\n const to = page.boxes.get(edge.to);\n if (from === undefined || to === undefined) {\n page.warn('Connectors whose ends are not on their page were left out.');\n return null;\n }\n const points = edge.waypoints ?? edge.routed ?? [];\n const style = writeStyle([\n ...edgeStyle(edge, page.theme, page.warn),\n ...portParts(page, edge.from, edge.fromPort ?? edge.routedPorts?.from, 'exit'),\n ...portParts(page, edge.to, edge.toPort ?? edge.routedPorts?.to, 'entry'),\n ]);\n const label = labelGeometry(edge.labelPlacement, [center(from), ...points, center(to)]);\n return edgeXml(\n { id: edge.id ?? edgeIdOf(edge), value: edge.label ?? '', style, parent: page.layer, source: edge.from, target: edge.to },\n label, points,\n );\n}\n","/** One page of a document as a draw-style `<diagram>`: its shapes, regions, and groups as nested cells, then its edges. */\nimport { pageName } from '@weasel-js/core';\nimport type { Vec2 } from '@weasel-js/core/math';\nimport {\n diagramScene, type ContainerHeader, type DataContainer, type DiagramData, type DiagramTheme,\n} from '@weasel-js/diagram';\nimport type { DocumentPage } from '../document';\nimport { laidOutPage, needsLayout } from '../pageLayout';\nimport type { Box } from './pageCells';\nimport type { Warn } from './readStyle';\nimport { writeEdge } from './writeEdge';\nimport { GROUP_STYLE, nodeLines, nodeStyle, regionStyle } from './writeStyle';\nimport { attrs, vertexXml } from './writeXml';\n\n/** A vertex to write: its cell, less the parent and box the tree gives it. */\ninterface Vertex { id: string; value: string; style: string; group?: boolean }\n\n/**\n * Which cell holds each item: a container its members, a pool its lanes, a\n * lane its members, and a group what no region holds. An earlier claim wins,\n * and a claim that would put a cell inside itself is ignored.\n */\nfunction parentsOf(data: DiagramData, known: ReadonlySet<string>, warn: Warn): Map<string, string> {\n const parent = new Map<string, string>();\n const within = (id: string, of: string): boolean => {\n for (let up: string | undefined = of; up !== undefined; up = parent.get(up)) if (up === id) return true;\n return false;\n };\n const claim = (member: string, holder: string): boolean => {\n if (!known.has(member) || parent.has(member) || within(member, holder)) return false;\n parent.set(member, holder);\n return true;\n };\n for (const c of data.containers ?? []) {\n for (const m of c.members ?? []) claim(m, c.id);\n for (const lane of c.lanes ?? []) {\n claim(lane.id, c.id);\n for (const m of lane.members ?? []) claim(m, lane.id);\n }\n }\n for (const g of data.groups ?? []) {\n const held = new Set(g.members.map((m) => parent.get(m)));\n const region = held.size === 1 ? [...held][0] : undefined;\n if (region !== undefined && !parent.has(g.id) && !within(g.id, region)) {\n parent.set(g.id, region);\n for (const m of g.members) parent.delete(m);\n } else if (g.members.some((m) => parent.has(m))) {\n warn('Groups reaching into a container or lane kept only the members outside it.');\n }\n for (const m of g.members) claim(m, g.id);\n }\n return parent;\n}\n\nconst union = (boxes: readonly Box[]): Box | undefined => {\n if (boxes.length === 0) return undefined;\n const x = Math.min(...boxes.map((b) => b.x));\n const y = Math.min(...boxes.map((b) => b.y));\n return {\n x, y, width: Math.max(...boxes.map((b) => b.x + b.width)) - x, height: Math.max(...boxes.map((b) => b.y + b.height)) - y,\n };\n};\n\n/** An id no item on the page has, for the root and layer cells every graph model has. */\nfunction freeId(want: string, taken: ReadonlySet<string>): string {\n let id = want;\n for (let n = 2; taken.has(id); n++) id = `${want}-${n}`;\n return id;\n}\n\nconst regionLabel = (c: { label?: string }): string => c.label ?? '';\n\nfunction vertices(data: DiagramData, theme: DiagramTheme, headerOf: (id: string) => ContainerHeader | undefined, warn: Warn): Vertex[] {\n const out: Vertex[] = [];\n const pools: DataContainer[] = [];\n for (const c of data.containers ?? []) {\n out.push({ id: c.id, value: regionLabel(c), style: regionStyle(c, headerOf(c.id), theme) });\n if (c.role === 'pool') pools.push(c);\n }\n for (const pool of pools) {\n (pool.lanes ?? []).forEach((lane, i) => {\n out.push({ id: lane.id, value: regionLabel(lane), style: regionStyle({ ...lane, role: 'lane' }, headerOf(lane.id), theme, i) });\n });\n }\n for (const g of data.groups ?? []) out.push({ id: g.id, value: '', style: GROUP_STYLE, group: true });\n for (const n of data.nodes) out.push({ id: n.id, value: nodeLines(n, warn).join('\\n'), style: nodeStyle(n, theme, warn) });\n return out;\n}\n\n/**\n * Writes `page`, the `index`th, as a `<diagram>` element. A page with\n * unplaced nodes is laid out first, as an import would. A node is written the\n * size it states, which is its drawn size in a document read from a scene;\n * anything else the size `diagramScene` gives it with estimated text.\n */\nexport function writePage(page: DocumentPage, index: number, theme: DiagramTheme, warn: Warn): string {\n const laid = needsLayout(page) ? laidOutPage(page, { theme }) : page;\n const { data } = laid;\n const specs = new Map(diagramScene(data, { layout: 'none', theme }).map((s) => [s.id as string, s]));\n const headerOf = (id: string) => (specs.get(id)?.data.diagram as { container?: { header?: ContainerHeader } } | undefined)?.container?.header;\n const items = vertices(data, theme, headerOf, warn);\n const ids = new Set(items.map((v) => v.id));\n const parent = parentsOf(data, ids, warn);\n const children = new Map<string | undefined, Vertex[]>();\n for (const v of items) children.set(parent.get(v.id), [...(children.get(parent.get(v.id)) ?? []), v]);\n\n const nodes = new Map(data.nodes.map((n) => [n.id, n]));\n const boxes = new Map<string, Box>();\n const boxOf = (v: Vertex): Box | undefined => {\n if (!boxes.has(v.id)) {\n const pose = specs.get(v.id)?.pose;\n const node = nodes.get(v.id);\n const box = v.group === true ? union((children.get(v.id) ?? []).map(boxOf).filter((b): b is Box => b !== undefined))\n : pose === undefined ? undefined\n : { x: pose.x, y: pose.y, width: node?.width ?? pose.width, height: node?.height ?? pose.height };\n if (box !== undefined) boxes.set(v.id, box);\n }\n return boxes.get(v.id);\n };\n const root = freeId('0', ids);\n const layer = freeId('1', new Set([...ids, root]));\n let cells = '';\n const emit = (holder: string | undefined, holderCell: string, origin: Vec2): void => {\n for (const v of children.get(holder) ?? []) {\n const box = boxOf(v);\n if (box === undefined) {\n emit(v.id, holderCell, origin);\n continue;\n }\n cells += vertexXml({ ...v, parent: holderCell }, box, origin);\n emit(v.id, v.id, box);\n }\n };\n emit(undefined, layer, { x: 0, y: 0 });\n const edgePage = { theme, layer, nodes, boxes, warn };\n for (const edge of data.edges) cells += writeEdge(edge, edgePage) ?? '';\n\n const model = attrs([\n ['grid', '1'], ['gridSize', '10'], ['page', '1'], ['pageScale', '1'], ['pageWidth', laid.width], ['pageHeight', laid.height],\n ]);\n return ` <diagram${attrs([['id', page.id], ['name', pageName(page, index)]])}>\\n <mxGraphModel${model}>\\n <root>\\n`\n + ` <mxCell${attrs([['id', root]])} />\\n <mxCell${attrs([['id', layer], ['parent', root]])} />\\n`\n + `${cells} </root>\\n </mxGraphModel>\\n </diagram>\\n`;\n}\n","/** Writing a document as draw-style XML: every page, uncompressed, its colors spelled out under the document's theme. */\nimport { diagramThemeFrom } from '@weasel-js/diagram';\nimport type { DiagramDocument, ExportResult } from '../document';\nimport { writePage } from './writePage';\n\n/**\n * Writes every page of `doc` as a `<diagram>` in one `<mxfile>`. Each item's\n * colors are the ones it is drawn in under the document's theme, so the file\n * looks the same anywhere. A route is written as `waypoints`, else `routed`.\n * Edges between pages are left out, with a warning: a page's cells cannot\n * reach another's.\n */\nexport function writeDrawXml(doc: DiagramDocument): ExportResult {\n const theme = diagramThemeFrom(doc.theme);\n const warnings = new Set<string>();\n const warn = (message: string): void => { warnings.add(message); };\n const pages = doc.pages.map((page, i) => writePage(page, i, theme, warn)).join('');\n if ((doc.crossPageEdges ?? []).length > 0) warn('Connectors between pages were left out: a page\\'s cells cannot reach another\\'s.');\n return { text: `<mxfile>\\n${pages}</mxfile>\\n`, warnings: [...warnings] };\n}\n","/** Draw-style XML as a {@link DiagramFormat}. */\nimport type { DiagramFormat } from '../document';\nimport { readDrawXml } from './read';\nimport { writeDrawXml } from './write';\n\n/** The root element, past any XML declaration, doctype, comments, and processing instructions. */\nconst ROOT = /^\\s*(?:<\\?[^]*?\\?>\\s*|<!--[^]*?-->\\s*|<!DOCTYPE[^>]*>\\s*)*<(mxfile|mxGraphModel)[\\s/>]/;\n\n/**\n * Draw-style XML: a page per `<diagram>`, each a graph model of cells with\n * geometry, written out or compressed. Recognized by its root element, since\n * `.xml` names many formats.\n */\nexport const DRAW_XML: DiagramFormat = {\n id: 'draw-xml',\n name: 'Draw-style XML',\n extensions: ['.xml'],\n detect: (text) => ROOT.test(text),\n read: readDrawXml,\n write: writeDrawXml,\n};\n","/** A Mermaid flowchart's tokens: ids, node shapes, links, and the raw rest of keyword lines. */\nimport { lineError } from '../lineError';\n\n/** A node shape's syntax, by the brackets around its text. */\nexport type MermaidShape =\n | 'rect' | 'rounded' | 'stadium' | 'subroutine' | 'cylinder' | 'circle' | 'double-circle' | 'asymmetric'\n | 'diamond' | 'hexagon' | 'lean-right' | 'lean-left' | 'trapezoid' | 'inv-trapezoid';\n\n/** A link end: an arrow, a circle, or a cross. */\nexport type LinkHead = '<' | '>' | 'o' | 'x';\n\nexport type MermaidToken = { line: number } & (\n | { kind: 'word' | 'rest' | 'pipe' | 'class' | 'meta' | 'amp'; value: string }\n | { kind: 'shape'; shape: MermaidShape; text: string }\n | { kind: 'link'; stroke: 'normal' | 'thick' | 'dotted' | 'invisible'; start?: LinkHead; end?: LinkHead; text?: string }\n | { kind: 'sep' }\n);\n\n/** A flowchart's tokens, and what came before them. */\nexport interface MermaidLex {\n tokens: MermaidToken[];\n /** The front matter's `title`. */\n title?: string;\n /** How many `%%{…}%%` directives there were. */\n directives: number;\n}\n\n/** Keywords whose line runs to its end as one `rest` token. */\nconst REST_KEYWORDS = new Set([\n 'flowchart', 'graph', 'flowchart-elk', 'subgraph', 'style', 'classDef', 'class', 'linkStyle', 'click', 'direction',\n 'accTitle', 'accDescr',\n]);\n\n/** Openers, longest first, and the closers each may end with. */\nconst SHAPES: readonly (readonly [string, readonly (readonly [string, MermaidShape])[]])[] = [\n ['(((', [[')))', 'double-circle']]], ['([', [['])', 'stadium']]], ['((', [['))', 'circle']]], ['(', [[')', 'rounded']]],\n ['[[', [[']]', 'subroutine']]], ['[(', [[')]', 'cylinder']]],\n ['[/', [['/]', 'lean-right'], ['\\\\]', 'trapezoid']]], ['[\\\\', [['\\\\]', 'lean-left'], ['/]', 'inv-trapezoid']]],\n ['[', [[']', 'rect']]], ['{{', [['}}', 'hexagon']]], ['{', [['}', 'diamond']]], ['>', [[']', 'asymmetric']]],\n];\n\nconst WORD = /[\\p{L}\\p{N}_](?:[\\p{L}\\p{N}_]|[-.](?=[\\p{L}\\p{N}_]))*/uy;\nconst LINK = /([<ox])?(-{2,}|={2,}|-\\.+-?|~{3,})(>|[ox](?![\\p{L}\\p{N}_]))?/uy;\nconst CLOSERS: Readonly<Record<string, RegExp>> = { '-': /\\s*(--+[>ox]|---+)/y, '=': /\\s*(==+[>ox]|===+)/y, '.': /\\s*(\\.-+[>ox]?)/y };\n\nconst fail = (line: number, message: string) => lineError('Mermaid', line, message);\n\nfunction jsonString(quoted: string): string {\n try {\n return JSON.parse(quoted) as string;\n } catch {\n return quoted.slice(1, -1);\n }\n}\nconst strokeOf = (body: string) => (body.startsWith('~') ? 'invisible' : body.startsWith('=') ? 'thick' : body.includes('.') ? 'dotted' : 'normal');\n\n\nclass MermaidLexer {\n readonly tokens: MermaidToken[] = [];\n readonly text: string;\n i = 0;\n line = 1;\n title: string | undefined;\n directives = 0;\n\n constructor(source: string) {\n this.text = source.replace(/\\r\\n?/g, '\\n');\n }\n\n push(t: MermaidToken): void {\n const last = this.tokens[this.tokens.length - 1];\n if (t.kind === 'sep' && (last === undefined || last.kind === 'sep')) return;\n this.tokens.push(t);\n }\n\n atStart(): boolean {\n const last = this.tokens[this.tokens.length - 1];\n return last === undefined || last.kind === 'sep';\n }\n\n sticky(re: RegExp): RegExpExecArray | null {\n re.lastIndex = this.i;\n return re.exec(this.text);\n }\n\n lineEnd(): number {\n const end = this.text.indexOf('\\n', this.i);\n return end < 0 ? this.text.length : end;\n }\n\n frontMatter(): void {\n const front = /^---[ \\t]*\\n([\\s\\S]*?)\\n---[ \\t]*(?:\\n|$)/.exec(this.text);\n if (front === null) return;\n const t = /^title:[ \\t]*(.*)$/m.exec(front[1]!)?.[1]?.trim();\n if (t !== undefined) this.title = /^\".*\"$/.test(t) ? jsonString(t) : /^'.*'$/.test(t) ? t.slice(1, -1).replace(/''/g, \"'\") : t;\n this.i = front[0].length;\n this.line += front[0].split('\\n').length - (front[0].endsWith('\\n') ? 1 : 0);\n }\n\n run(): MermaidLex {\n this.frontMatter();\n const { text } = this;\n while (this.i < text.length) {\n const c = text[this.i]!;\n if (c === '\\n' || c === ';') {\n this.push({ kind: 'sep', line: this.line });\n if (c === '\\n') this.line++;\n this.i++;\n } else if (c === ' ' || c === '\\t') {\n this.i++;\n } else if (text.startsWith('%%{', this.i)) {\n this.directive();\n } else if (text.startsWith('%%', this.i)) {\n this.i = this.lineEnd();\n } else if (!this.mark(c) && !this.link()) {\n this.word(c);\n }\n }\n return { tokens: this.tokens, ...(this.title !== undefined ? { title: this.title } : {}), directives: this.directives };\n }\n\n directive(): void {\n const end = this.text.indexOf('}%%', this.i);\n const stop = end < 0 ? this.text.length : end + 3;\n for (let k = this.i; k < stop; k++) if (this.text[k] === '\\n') this.line++;\n this.i = stop;\n this.directives++;\n }\n\n /** `&`, `:::class`, `@{ … }`, or `|text|`: whether one was read. */\n mark(c: string): boolean {\n const { text, line } = this;\n if (c === '&') {\n this.push({ kind: 'amp', value: '&', line });\n this.i++;\n } else if (text.startsWith(':::', this.i)) {\n this.i += 3;\n const m = this.sticky(WORD);\n if (m === null) throw fail(line, 'a class name must follow \":::\"');\n this.i += m[0].length;\n this.push({ kind: 'class', value: m[0], line });\n } else if (text.startsWith('@{', this.i)) {\n const end = text.indexOf('}', this.i);\n if (end < 0) throw fail(line, 'node metadata is never closed');\n this.push({ kind: 'meta', value: text.slice(this.i + 2, end), line });\n this.i = end + 1;\n } else if (c === '|') {\n this.push({ kind: 'pipe', value: this.delimited('|', '|'), line });\n } else {\n return false;\n }\n return true;\n }\n\n word(c: string): void {\n const word = this.sticky(WORD);\n if (word === null) throw fail(this.line, `cannot read \"${c}\"`);\n const start = this.atStart();\n this.i += word[0].length;\n this.push({ kind: 'word', value: word[0], line: this.line });\n if (start && REST_KEYWORDS.has(word[0]) && /^(?:[ \\t:]|$|\\n)/.test(this.text.slice(this.i, this.i + 1))) {\n const semi = this.text.indexOf(';', this.i);\n const stop = Math.min(this.lineEnd(), semi < 0 ? this.text.length : semi);\n const rest = this.text.slice(this.i, stop).replace(/^[ \\t]*:?/, '').trim();\n if (rest !== '') this.push({ kind: 'rest', value: rest, line: this.line });\n this.i = stop;\n return;\n }\n this.shape();\n }\n\n /** Text up to `close`, or a quoted string then `close`. */\n delimited(open: string, close: string): string {\n const { text, line } = this;\n this.i += open.length;\n while (text[this.i] === ' ') this.i++;\n let out: string;\n if (text[this.i] === '\"') {\n const end = text.indexOf('\"', this.i + 1);\n if (end < 0 || text.slice(this.i, end).includes('\\n')) throw fail(line, 'a quoted string is never closed');\n out = text.slice(this.i + 1, end);\n this.i = end + 1;\n while (text[this.i] === ' ') this.i++;\n if (!text.startsWith(close, this.i)) throw fail(line, `expected \"${close}\" after a quoted string`);\n } else {\n const end = text.indexOf(close, this.i);\n if (end < 0 || text.slice(this.i, end).includes('\\n')) throw fail(line, `text opened with \"${open}\" is never closed`);\n out = text.slice(this.i, end).trim();\n this.i = end;\n }\n this.i += close.length;\n return out;\n }\n\n shape(): void {\n for (const [open, closers] of SHAPES) {\n if (!this.text.startsWith(open, this.i)) continue;\n const from = this.i + open.length;\n const found = closers\n .map(([close, kind]) => ({ close, kind, at: this.closeAt(from, close) }))\n .filter((f) => f.at >= 0)\n .sort((a, b) => a.at - b.at)[0];\n if (found === undefined) throw fail(this.line, `a shape opened with \"${open}\" is never closed`);\n this.push({ kind: 'shape', shape: found.kind, text: this.delimited(open, found.close), line: this.line });\n return;\n }\n }\n\n /** Where `close` ends text starting at `from`, past a quoted string; -1 when not on this line. */\n closeAt(from: number, close: string): number {\n const { text } = this;\n let k = from;\n while (text[k] === ' ') k++;\n if (text[k] === '\"') {\n const end = text.indexOf('\"', k + 1);\n if (end >= 0) k = end + 1;\n }\n const at = text.indexOf(close, k);\n const eol = text.indexOf('\\n', from);\n return at < 0 || (eol >= 0 && at > eol) ? -1 : at;\n }\n\n link(): boolean {\n const m = this.sticky(LINK);\n if (m === null) return false;\n const [whole, lead, body, tail] = m as unknown as [string, LinkHead | undefined, string, LinkHead | undefined];\n if ((lead === 'o' || lead === 'x') && tail !== lead) return false;\n const stroke = strokeOf(body);\n const opens = tail === undefined && (body === '--' || body === '==' || /^-\\.+$/.test(body))\n && /\\s/.test(this.text[this.i + whole.length] ?? '');\n this.i += whole.length;\n if (!opens) {\n this.push({ kind: 'link', stroke, ...(lead ? { start: lead } : {}), ...(tail ? { end: tail } : {}), line: this.line });\n return true;\n }\n const { label, end } = this.linkText(body);\n this.push({ kind: 'link', stroke, ...(lead ? { start: lead } : {}), ...(end ? { end } : {}), text: label, line: this.line });\n return true;\n }\n\n /** The text of a link opened with `body` and a space, and the head its closing arrow ends in. */\n linkText(body: string): { label: string; end: LinkHead | undefined } {\n const { text } = this;\n const closer = CLOSERS[body.includes('.') ? '.' : body[0]!]!;\n let k = this.i;\n for (; k < text.length && text[k] !== '\\n'; k++) {\n closer.lastIndex = k;\n if (closer.test(text) && /\\s/.test(text[k] ?? '')) break;\n }\n if (k >= text.length || text[k] === '\\n') throw fail(this.line, `a link's text after \"${body}\" is never closed`);\n const label = text.slice(this.i, k).trim();\n closer.lastIndex = k;\n const close = closer.exec(text)!;\n this.i = k + close[0].length;\n const head = close[1]!.slice(-1);\n return { label: /^\".*\"$/.test(label) ? label.slice(1, -1) : label, end: '>ox'.includes(head) ? head as LinkHead : undefined };\n }\n}\n\n/** Splits a Mermaid flowchart into tokens. Throws, naming the line, on text it cannot read. */\nexport function lexMermaid(source: string): MermaidLex {\n return new MermaidLexer(source).run();\n}\n","/** A Mermaid flowchart's grammar, read to a syntax tree with each statement's line. */\nimport { lineError } from '../lineError';\nimport { lexMermaid, type LinkHead, type MermaidShape, type MermaidToken } from './lex';\n\n/** A node named in a chain, with whatever the mention says about it. */\nexport interface MermaidNodeRef {\n id: string;\n shape?: MermaidShape;\n text?: string;\n classes: string[];\n /** The `@{ … }` metadata's fields. */\n meta?: Record<string, string>;\n line: number;\n}\n\nexport interface MermaidLink {\n stroke: 'normal' | 'thick' | 'dotted' | 'invisible';\n start?: LinkHead;\n end?: LinkHead;\n text?: string;\n}\n\n/** A style's `key:value` pairs, in order. */\nexport type StyleProps = [string, string][];\n\nexport type MermaidStmt =\n | { kind: 'chain'; groups: MermaidNodeRef[][]; links: MermaidLink[]; line: number }\n | { kind: 'subgraph'; id: string; title?: string; stmts: MermaidStmt[]; line: number }\n | { kind: 'direction'; value: string; line: number }\n | { kind: 'classDef'; names: string[]; props: StyleProps; line: number }\n | { kind: 'class'; ids: string[]; className: string; line: number }\n | { kind: 'style'; id: string; props: StyleProps; line: number }\n | { kind: 'linkStyle'; indexes: number[] | 'default'; props: StyleProps; line: number }\n | { kind: 'other'; keyword: string; line: number };\n\n/** A whole flowchart. */\nexport interface MermaidFlowchart {\n title?: string;\n /** As written: `TB`, `TD`, `BT`, `LR`, or `RL`. */\n direction: string;\n directives: number;\n stmts: MermaidStmt[];\n}\n\n/** Mermaid diagram kinds other than flowcharts. */\nexport const OTHER_KINDS = /^(sequenceDiagram|classDiagram(-v2)?|stateDiagram(-v2)?|erDiagram|journey|gantt|pie|quadrantChart|requirementDiagram|gitGraph|C4\\w*|mindmap|timeline|zenuml|sankey(-beta)?|xychart(-beta)?|block(-beta)?|packet(-beta)?|kanban|architecture(-beta)?|radar(-beta)?|treemap(-beta)?)$/;\n\n/** Splits on commas outside parentheses. */\nfunction splitTop(text: string): string[] {\n const out = [''];\n let depth = 0;\n for (const c of text) {\n if (c === '(') depth++;\n if (c === ')') depth--;\n if (c === ',' && depth === 0) out.push('');\n else out[out.length - 1] += c;\n }\n return out.map((s) => s.trim()).filter((s) => s !== '');\n}\n\nconst propsOf = (text: string): StyleProps => splitTop(text).map((p) => {\n const at = p.indexOf(':');\n return at < 0 ? [p, ''] : [p.slice(0, at).trim(), p.slice(at + 1).trim()];\n});\n\nfunction metaOf(text: string): Record<string, string> {\n const out: Record<string, string> = {};\n for (const [k, v] of propsOf(text)) out[k] = /^\".*\"$/.test(v) ? v.slice(1, -1) : v;\n return out;\n}\n\nconst KEYWORDS = new Set(['subgraph', 'direction', 'classDef', 'class', 'style', 'linkStyle', 'click', 'accTitle', 'accDescr']);\n\n/** The first statement's line, its first word, and its line number, read before lexing so another diagram kind's syntax is never lexed. */\nexport function headerWord(text: string): { word: string; text: string; line: number } | null {\n const lines = text.split(/\\r\\n?|\\n/);\n let k = 0;\n if (/^---\\s*$/.test(lines[0] ?? '')) {\n k = 1;\n while (k < lines.length && !/^---\\s*$/.test(lines[k]!)) k++;\n k++;\n }\n for (; k < lines.length; k++) {\n const l = lines[k]!.trim();\n if (l === '' || l.startsWith('%%')) continue;\n return { word: /^[^\\s;]+/.exec(l)![0], text: l, line: k + 1 };\n }\n return null;\n}\n\nconst SUBGRAPH =/^(?:\"([^\"]*)\"|([^\\s[]+)\\s*(?:\\[\\s*(?:\"([^\"]*)\"|([^\\]]*))\\s*\\])?|(.+))$/;\n\n/** A keyword statement other than `subgraph`, from the rest of its line. */\nfunction statementOf(keyword: string, rest: string, line: number): MermaidStmt {\n if (keyword === 'direction') return { kind: 'direction', value: rest.toUpperCase(), line };\n const [first = '', ...more] = rest.split(/\\s+/);\n const remainder = rest.slice(first.length).trim();\n if (keyword === 'classDef') return { kind: 'classDef', names: first.split(','), props: propsOf(remainder), line };\n if (keyword === 'class') return { kind: 'class', ids: first.split(','), className: more.join(' '), line };\n if (keyword === 'style') return { kind: 'style', id: first, props: propsOf(remainder), line };\n if (keyword === 'linkStyle') {\n const indexes = first === 'default' ? 'default' : first.split(',').map(Number);\n if (indexes !== 'default' && indexes.some(Number.isNaN)) throw lineError('Mermaid', line, `\"${first}\" is not a list of link numbers`);\n return { kind: 'linkStyle', indexes, props: propsOf(remainder), line };\n }\n return { kind: 'other', keyword, line };\n}\n\n/** Parses a Mermaid flowchart. Throws, naming the line, on text that is not one. */\nexport function parseMermaid(text: string): MermaidFlowchart {\n const header = headerWord(text);\n if (header !== null && OTHER_KINDS.test(header.word)) {\n throw lineError('Mermaid', header.line, `${header.word} diagrams are not read; only flowcharts are`);\n }\n const { tokens, title, directives } = lexMermaid(text);\n let i = 0;\n const peek = () => tokens[i];\n const lastLine = text.split('\\n').length;\n const where = () => peek()?.line ?? lastLine;\n const word = (t: MermaidToken | undefined, value?: string) => t?.kind === 'word' && (value === undefined || t.value === value);\n const describe = (t: MermaidToken | undefined) =>\n t === undefined ? 'the end of the file' : t.kind === 'sep' ? 'the end of the line' : `\"${'value' in t ? t.value : t.kind}\"`;\n const fail = (wanted: string) => lineError('Mermaid', where(), `expected ${wanted}, found ${describe(peek())}`);\n const restOf = () => (peek()?.kind === 'rest' ? (tokens[i++] as { value: string }).value : '');\n\n while (peek()?.kind === 'sep') i++;\n const head = peek();\n if (!word(head, 'flowchart') && !word(head, 'graph') && !word(head, 'flowchart-elk')) throw fail('a flowchart header');\n i++;\n const direction = restOf().toUpperCase() || 'TB';\n const stmts = block(null);\n return { ...(title !== undefined ? { title } : {}), direction, directives, stmts };\n\n function block(opened: number | null): MermaidStmt[] {\n const out: MermaidStmt[] = [];\n for (;;) {\n while (peek()?.kind === 'sep') i++;\n const t = peek();\n if (t === undefined) {\n if (opened !== null) throw lineError('Mermaid', opened, 'a subgraph opened here has no \"end\"');\n return out;\n }\n if (word(t, 'end')) {\n if (opened === null) throw lineError('Mermaid', t.line, '\"end\" closes no subgraph');\n i++;\n return out;\n }\n out.push(stmt());\n if (peek() !== undefined && peek()!.kind !== 'sep') throw fail('the end of the statement');\n }\n }\n\n function stmt(): MermaidStmt {\n const t = peek()!;\n const line = t.line;\n const next = tokens[i + 1];\n if (t.kind === 'word' && KEYWORDS.has(t.value) && (next === undefined || next.kind === 'rest' || next.kind === 'sep')) {\n i++;\n return keywordStmt(t.value, restOf(), line);\n }\n return chain();\n }\n\n function keywordStmt(keyword: string, rest: string, line: number): MermaidStmt {\n if (keyword === 'subgraph') {\n const m = SUBGRAPH.exec(rest);\n if (m === null) throw lineError('Mermaid', line, 'a subgraph needs a name');\n const id = m[1] ?? m[2] ?? m[5]!;\n const titleText = m[1] ?? m[3] ?? m[4]?.trim() ?? m[5];\n return { kind: 'subgraph', id, ...(titleText !== undefined ? { title: titleText } : {}), stmts: block(line), line };\n }\n return statementOf(keyword, rest, line);\n }\n\n function nodeRef(): MermaidNodeRef {\n const t = peek();\n if (t?.kind !== 'word') throw fail('a node');\n i++;\n const ref: MermaidNodeRef = { id: t.value, classes: [], line: t.line };\n const s = peek();\n if (s?.kind === 'shape') {\n i++;\n ref.shape = s.shape;\n ref.text = s.text;\n }\n for (let m = peek(); m?.kind === 'meta' || m?.kind === 'class'; m = peek()) {\n i++;\n if (m.kind === 'meta') ref.meta = metaOf(m.value);\n else ref.classes.push(m.value);\n }\n return ref;\n }\n\n function group(): MermaidNodeRef[] {\n const refs = [nodeRef()];\n while (peek()?.kind === 'amp') {\n i++;\n refs.push(nodeRef());\n }\n return refs;\n }\n\n function chain(): MermaidStmt {\n const line = where();\n const groups = [group()];\n const links: MermaidLink[] = [];\n for (let t = peek(); t?.kind === 'link'; t = peek()) {\n i++;\n const { kind: _k, line: _l, ...link } = t;\n const pipe = peek();\n if (pipe?.kind === 'pipe') {\n i++;\n link.text = pipe.value;\n }\n links.push(link);\n groups.push(group());\n }\n return { kind: 'chain', groups, links, line };\n }\n}\n","/**\n * A Mermaid flowchart as a one-page document: subgraphs as containers, and\n * `classDef`, `class`, `style`, and `linkStyle` as the items' own colors.\n * Mermaid holds no geometry, so the page is laid out on import.\n */\nimport type { MarkerRef } from '@weasel-js/core';\nimport type { DataContainer, DataEdge, DataNode, EdgeStyle, LayoutDirection, NodeStyle, Outline } from '@weasel-js/diagram';\nimport type { ImportResult } from '../document';\nimport { Membership, Warnings, graphPage, markupLines } from '../graphRead';\nimport type { LinkHead, MermaidShape } from './lex';\nimport { parseMermaid, type MermaidLink, type MermaidNodeRef, type MermaidStmt, type StyleProps } from './parse';\n\nconst DIRECTIONS: Readonly<Record<string, LayoutDirection>> = {\n TB: 'down', TD: 'down', BT: 'up', LR: 'right', RL: 'left', 'v': 'down', '^': 'up', '>': 'right', '<': 'left',\n};\n\nconst SHAPE_OUTLINES: Readonly<Partial<Record<MermaidShape, Outline>>> = {\n rect: 'rect', rounded: 'stadium', stadium: 'stadium', circle: 'ellipse', 'double-circle': 'ellipse', diamond: 'diamond',\n hexagon: 'hexagon', 'lean-right': 'parallelogram', 'lean-left': 'parallelogram', trapezoid: 'trapezoid', 'inv-trapezoid': 'trapezoid',\n};\n\nconst META_OUTLINES: Readonly<Record<string, Outline>> = {\n rect: 'rect', rectangle: 'rect', proc: 'rect', process: 'rect', rounded: 'stadium', event: 'stadium', stadium: 'stadium',\n pill: 'stadium', terminal: 'stadium', circle: 'ellipse', circ: 'ellipse', 'dbl-circ': 'ellipse', 'double-circle': 'ellipse',\n diam: 'diamond', diamond: 'diamond', decision: 'diamond', question: 'diamond', hex: 'hexagon', hexagon: 'hexagon',\n prepare: 'hexagon', 'lean-r': 'parallelogram', 'lean-right': 'parallelogram', 'in-out': 'parallelogram',\n 'lean-l': 'parallelogram', 'lean-left': 'parallelogram', 'out-in': 'parallelogram', 'trap-b': 'trapezoid',\n trapezoid: 'trapezoid', priority: 'trapezoid', 'trap-t': 'trapezoid', 'inv-trapezoid': 'trapezoid', manual: 'trapezoid',\n};\n\ninterface NodeDraft { lines: string[]; outline: Outline; classes: string[] }\ninterface EdgeDraft { edge: DataEdge; index: number }\n\nconst px = (v: string) => Number(v.replace(/px$/, ''));\nconst dashOf = (v: string) => v.split(/[\\s,]+/).filter((s) => s !== '').map(px);\n\n/** Mermaid's text: markdown string quotes and bold dropped, entities and `<br>` read. */\nfunction textLines(text: string): string[] {\n const md = /^`([\\s\\S]*)`$/.exec(text);\n const plain = md !== null ? md[1]!.replace(/\\*\\*|__/g, '') : text;\n const lines = markupLines(plain, true);\n return lines.every((l) => l === '') ? [] : lines;\n}\n\nclass MermaidReader {\n readonly warnings = new Warnings();\n readonly membership = new Membership(this.warnings, 'Mermaid');\n readonly nodes = new Map<string, NodeDraft>();\n readonly edges: EdgeDraft[] = [];\n readonly subgraphs = new Map<string, string | undefined>();\n readonly classDefs = new Map<string, StyleProps>();\n readonly styles = new Map<string, StyleProps>();\n readonly classes = new Map<string, string[]>();\n readonly linkStyles = new Map<number | 'default', StyleProps>();\n links = 0;\n\n constructor(readonly subgraphIds: ReadonlySet<string>) {}\n\n mention(ref: MermaidNodeRef, cluster: string | null): void {\n if (this.subgraphIds.has(ref.id) && ref.shape === undefined && ref.meta === undefined) {\n for (const c of ref.classes) this.addClass(ref.id, c);\n return;\n }\n let draft = this.nodes.get(ref.id);\n if (draft === undefined) {\n draft = { lines: [ref.id], outline: 'rect', classes: [] };\n this.nodes.set(ref.id, draft);\n }\n this.membership.place(ref.id, cluster);\n if (ref.shape !== undefined) {\n draft.lines = textLines(ref.text ?? '');\n draft.outline = this.outline(SHAPE_OUTLINES[ref.shape], ref.shape);\n }\n if (ref.meta?.shape !== undefined) draft.outline = this.outline(META_OUTLINES[ref.meta.shape], ref.meta.shape);\n if (ref.meta?.label !== undefined) draft.lines = textLines(ref.meta.label);\n for (const c of ref.classes) this.addClass(ref.id, c);\n }\n\n outline(outline: Outline | undefined, name: string): Outline {\n if (outline !== undefined) return outline;\n this.warnings.list('Mermaid shapes read as rectangles', name);\n return 'rect';\n }\n\n addClass(id: string, name: string): void {\n this.classes.set(id, [...(this.classes.get(id) ?? []), name]);\n }\n\n marker(head: LinkHead | undefined): MarkerRef | null {\n if (head === undefined) return null;\n if (head === 'o') return 'circle';\n if (head === 'x') this.warnings.add('Mermaid cross ends read as arrows.');\n return 'arrow';\n }\n\n link(link: MermaidLink, from: string, to: string): void {\n const index = this.links++;\n if (link.stroke === 'invisible') {\n this.warnings.add('Mermaid invisible links were dropped.');\n return;\n }\n const start = this.marker(link.start);\n const end = this.marker(link.end);\n const colors: Partial<EdgeStyle> = {\n ...(link.stroke === 'dotted' ? { dash: [4, 4] } : {}),\n ...(link.stroke === 'thick' ? { width: 3 } : {}),\n ...(start !== null ? { markerStart: start } : {}),\n ...(end !== 'arrow' ? { markerEnd: end } : {}),\n };\n const label = link.text === undefined ? [] : textLines(link.text).filter((l) => l !== '');\n this.edges.push({\n edge: { from, to, ...(label.length > 0 ? { label: label.join(' ') } : {}), ...(Object.keys(colors).length > 0 ? { colors } : {}) },\n index,\n });\n }\n\n walk(stmts: readonly MermaidStmt[], cluster: string | null): void {\n for (const s of stmts) {\n if (s.kind === 'chain') {\n for (const g of s.groups) for (const ref of g) this.mention(ref, cluster);\n s.links.forEach((link, k) => {\n for (const from of s.groups[k]!) for (const to of s.groups[k + 1]!) this.link(link, from.id, to.id);\n });\n } else if (s.kind === 'subgraph') {\n this.membership.openCluster(s.id, cluster);\n if (!this.subgraphs.has(s.id)) this.subgraphs.set(s.id, s.title);\n this.walk(s.stmts, s.id);\n } else if (s.kind === 'direction') {\n this.warnings.add('Mermaid subgraph directions were dropped; the page runs one way.');\n } else if (s.kind === 'classDef') {\n this.checkProps(s.props);\n for (const name of s.names) this.classDefs.set(name, [...(this.classDefs.get(name) ?? []), ...s.props]);\n } else if (s.kind === 'class') {\n for (const id of s.ids) this.addClass(id, s.className);\n } else if (s.kind === 'style') {\n this.checkProps(s.props);\n this.styles.set(s.id, [...(this.styles.get(s.id) ?? []), ...s.props]);\n } else if (s.kind === 'linkStyle') {\n this.checkProps(s.props);\n for (const i of s.indexes === 'default' ? ['default' as const] : s.indexes) {\n this.linkStyles.set(i, [...(this.linkStyles.get(i) ?? []), ...s.props]);\n }\n } else {\n this.warnings.list('Mermaid statements a diagram does not hold were dropped', s.keyword);\n }\n }\n }\n\n checkProps(props: StyleProps): void {\n for (const [key] of props) {\n if (!['fill', 'stroke', 'color', 'stroke-width', 'stroke-dasharray'].includes(key)) {\n this.warnings.list('Mermaid style properties a diagram does not hold were dropped', key);\n }\n }\n }\n\n propsOf(id: string, isNode: boolean): Map<string, string> {\n const props = new Map<string, string>();\n const lists = [isNode ? this.classDefs.get('default') : undefined, ...(this.classes.get(id) ?? []).map((c) => this.classDefs.get(c)), this.styles.get(id)];\n for (const list of lists) for (const [k, v] of list ?? []) props.set(k, v);\n return props;\n }\n}\n\nfunction nodeColors(props: ReadonlyMap<string, string>): Partial<NodeStyle> | undefined {\n const colors: Partial<NodeStyle> = {\n ...(props.has('fill') ? { fill: props.get('fill')! } : {}),\n ...(props.has('stroke') ? { stroke: props.get('stroke')! } : {}),\n ...(props.has('color') ? { text: props.get('color')! } : {}),\n ...(props.has('stroke-width') ? { strokeWidth: px(props.get('stroke-width')!) } : {}),\n ...(props.has('stroke-dasharray') ? { dash: dashOf(props.get('stroke-dasharray')!) } : {}),\n };\n return Object.keys(colors).length > 0 ? colors : undefined;\n}\n\nfunction edgeColors(base: Partial<EdgeStyle> | undefined, props: StyleProps): Partial<EdgeStyle> | undefined {\n const colors: Partial<EdgeStyle> = { ...base };\n for (const [k, v] of props) {\n if (k === 'stroke') colors.stroke = v;\n else if (k === 'color') colors.label = v;\n else if (k === 'stroke-width') colors.width = px(v);\n else if (k === 'stroke-dasharray') colors.dash = dashOf(v);\n }\n return Object.keys(colors).length > 0 ? colors : undefined;\n}\n\nfunction subgraphIdsOf(stmts: readonly MermaidStmt[], out = new Set<string>()): Set<string> {\n for (const s of stmts) if (s.kind === 'subgraph') subgraphIdsOf(s.stmts, out.add(s.id));\n return out;\n}\n\n/** Reads a Mermaid flowchart into a one-page document. Throws, naming the line, on text that is not one. */\nexport function readMermaid(text: string): ImportResult {\n const chart = parseMermaid(text);\n const r = new MermaidReader(subgraphIdsOf(chart.stmts));\n if (chart.directives > 0) r.warnings.add('Mermaid configuration directives were dropped.');\n r.walk(chart.stmts, null);\n const nodes: DataNode[] = [...r.nodes].map(([id, d]) => {\n const colors = nodeColors(r.propsOf(id, true));\n return { id, lines: d.lines, outline: d.outline, ...(colors !== undefined ? { colors } : {}) };\n });\n const edges = r.edges.map(({ edge, index }) => {\n const props = [...(r.linkStyles.get('default') ?? []), ...(r.linkStyles.get(index) ?? [])];\n const colors = edgeColors(edge.colors, props);\n const { colors: _c, ...rest } = edge;\n return colors !== undefined ? { ...rest, colors } : rest;\n });\n const containers: DataContainer[] = [...r.subgraphs].map(([id, title]) => {\n const members = r.membership.members(id);\n const colors = nodeColors(r.propsOf(id, false));\n return {\n id, role: 'container', label: title !== undefined ? textLines(title).join(' ') : id,\n ...(members.length > 0 ? { members } : {}),\n ...(colors !== undefined ? { colors } : {}),\n };\n });\n const page = graphPage({\n ...(chart.title !== undefined ? { name: chart.title } : {}),\n ...(DIRECTIONS[chart.direction] !== undefined ? { direction: DIRECTIONS[chart.direction] } : {}),\n nodes, edges, containers,\n });\n return { document: { pages: [page] }, warnings: r.warnings.all() };\n}\n","/** One page of a document as a Mermaid flowchart: regions as subgraphs, colors as classes and styles. */\nimport type { DataEdge, DataNode, LayoutDirection, NodeStyle, Outline } from '@weasel-js/diagram';\nimport type { DiagramDocument, ExportResult, WriteOptions } from '../document';\nimport { changed, edgeStyleIn, graphOut, hexColor, nodeLines, nodeStyleIn, type Cluster, type GraphOut } from '../graphWrite';\n\nconst HEADER: Readonly<Record<LayoutDirection, string>> = { down: 'TD', up: 'BT', right: 'LR', left: 'RL' };\nconst RESERVED = new Set(['end', 'subgraph', 'graph', 'flowchart', 'style', 'classdef', 'class', 'click', 'linkstyle', 'direction', 'default', 'call', 'href']);\nconst BRACKETS: Readonly<Record<string, readonly [string, string]>> = {\n rect: ['[', ']'], stadium: ['([', '])'], diamond: ['{', '}'], ellipse: ['((', '))'], hexagon: ['{{', '}}'],\n parallelogram: ['[/', '/]'], trapezoid: ['[/', '\\\\]'],\n};\n\nconst valid = (id: string) => /^[A-Za-z_]\\w*$/.test(id) && !RESERVED.has(id.toLowerCase());\n\n/** An id Mermaid reads for each of `ids`: itself where it can be, else a cleaned spelling no other id takes. */\nexport function mermaidIds(ids: readonly string[]): Map<string, string> {\n const out = new Map<string, string>();\n const taken = new Set(ids.filter(valid));\n for (const id of ids) {\n if (valid(id)) { out.set(id, id); continue; }\n let base = id.replace(/\\W+/g, '_').replace(/^_+(?=\\w)|(?<=\\w)_+$/g, '') || 'n';\n if (/^\\d/.test(base)) base = `n${base}`;\n if (!valid(base)) base = `${base}_`;\n let pick = base;\n for (let n = 2; taken.has(pick); n++) pick = `${base}_${n}`;\n taken.add(pick);\n out.set(id, pick);\n }\n return out;\n}\n\n/** Text as Mermaid quotes it: the characters it reads as syntax spelled as entities, lines joined by `<br>`. */\nexport function mermaidText(lines: readonly string[]): string {\n const text = lines.map((l) => l.replace(/#/g, '#35;').replace(/\"/g, '#quot;').replace(/</g, '#lt;').replace(/>/g, '#gt;')).join('<br>');\n return `\"${text === '' ? ' ' : text}\"`;\n}\n\nconst px = (n: number) => `${n}px`;\n\nfunction styleProps(style: Partial<NodeStyle>): string {\n return [\n style.fill !== undefined ? `fill:${hexColor(style.fill)}` : null,\n style.stroke !== undefined ? `stroke:${hexColor(style.stroke)}` : null,\n style.text !== undefined ? `color:${hexColor(style.text)}` : null,\n style.strokeWidth !== undefined ? `stroke-width:${px(style.strokeWidth)}` : null,\n style.dash !== undefined ? `stroke-dasharray:${style.dash.join(' ')}` : null,\n ].filter((p) => p !== null).join(',');\n}\n\nclass MermaidWriter {\n readonly lines: string[] = [];\n readonly ids: Map<string, string>;\n\n constructor(readonly out: GraphOut) {\n this.ids = mermaidIds([...out.page.data.nodes.map((n) => n.id), ...out.clusterIds]);\n }\n\n id(id: string): string {\n return this.ids.get(id) ?? id;\n }\n\n node(node: DataNode, indent: string): void {\n const outline: Outline = node.outline ?? 'rect';\n const [open, close] = BRACKETS[typeof outline === 'string' ? outline : 'rect']!;\n this.lines.push(`${indent}${this.id(node.id)}${open}${mermaidText(nodeLines(node, this.out.warnings, 'Mermaid'))}${close}`);\n }\n\n cluster(c: Cluster, indent: string): void {\n this.lines.push(`${indent}subgraph ${this.id(c.id)}${c.label !== undefined ? ` [${mermaidText([c.label])}]` : ''}`);\n for (const id of c.nodes) this.node(this.out.byId.get(id)!, `${indent} `);\n for (const child of c.clusters) this.cluster(child, `${indent} `);\n this.lines.push(`${indent}end`);\n }\n\n link(edge: DataEdge): string {\n const { markerStart, markerEnd, dash, width } = edgeStyleIn(this.out, edge);\n const head = (m: typeof markerEnd) => {\n if (m === null || m === undefined) return '';\n if ((typeof m === 'string' ? m : m.key) === 'circle') return 'o';\n return '>';\n };\n const end = head(markerEnd);\n let start = head(markerStart ?? null);\n if (start !== '' && start !== end) {\n this.out.warnings.add('Mermaid draws a link\\'s two heads alike; some ends were changed.');\n start = '';\n }\n const body = dash !== undefined ? '-.-' : (width ?? 0) >= 3 ? '==' : '--';\n const tail = end === '' ? (body === '--' ? '-' : body === '==' ? '=' : '') : end;\n return `${start === '>' ? '<' : start}${body}${tail}`;\n }\n\n edges(): void {\n for (const e of this.out.edges) {\n if (e.fromPort !== undefined || e.toPort !== undefined) this.out.warnings.add('Mermaid has no ports; connectors\\' ports were dropped.');\n const label = e.label !== undefined && e.label !== '' ? `|${mermaidText([e.label])}|` : '';\n this.lines.push(` ${this.id(e.from)} ${this.link(e)}${label} ${this.id(e.to)}`);\n }\n }\n\n styles(): void {\n const { out, lines } = this;\n const base = nodeStyleIn(out);\n lines.push(` classDef default ${styleProps(base)}`);\n const byProps = new Map<string, string[]>();\n for (const n of out.page.data.nodes) {\n const props = styleProps(changed(nodeStyleIn(out, n), base));\n if (props !== '') byProps.set(props, [...(byProps.get(props) ?? []), this.id(n.id)]);\n }\n [...byProps].forEach(([props, ids], i) => lines.push(` classDef s${i + 1} ${props}`, ` class ${ids.join(',')} s${i + 1}`));\n const visit = (c: Cluster) => {\n const props = c.style !== undefined ? styleProps(c.style) : '';\n if (props !== '') lines.push(` style ${this.id(c.id)} ${props}`);\n c.clusters.forEach(visit);\n };\n out.clusters.forEach(visit);\n if (out.edges.length === 0) return;\n const edge = edgeStyleIn(out);\n lines.push(` linkStyle default stroke:${hexColor(edge.stroke)},color:${hexColor(edge.label)}`);\n out.edges.forEach((e, i) => {\n const own = changed(edgeStyleIn(out, e), edge);\n const props = [\n own.stroke !== undefined ? `stroke:${hexColor(own.stroke)}` : null,\n own.label !== undefined ? `color:${hexColor(own.label)}` : null,\n own.width !== undefined ? `stroke-width:${px(own.width)}` : null,\n ].filter((p) => p !== null);\n if (props.length > 0) lines.push(` linkStyle ${i} ${props.join(',')}`);\n });\n }\n}\n\n/** Writes the page `opts.page` names, else the first, as a Mermaid flowchart. */\nexport function writeMermaid(doc: DiagramDocument, opts?: WriteOptions): ExportResult {\n const out = graphOut(doc, opts, 'Mermaid');\n if (out === null) return { text: 'flowchart TD\\n', warnings: [] };\n if (out.page.data.nodes.some((n) => n.at !== undefined)) out.warnings.add('Mermaid holds no positions; the page is laid out again when read.');\n const w = new MermaidWriter(out);\n const { page } = out;\n if (page.name !== undefined) w.lines.push('---', `title: ${JSON.stringify(page.name)}`, '---');\n w.lines.push(`flowchart ${HEADER[page.direction ?? 'down']}`);\n for (const n of out.nodes) w.node(n, ' ');\n for (const c of out.clusters) w.cluster(c, ' ');\n w.edges();\n w.styles();\n return { text: `${w.lines.join('\\n')}\\n`, warnings: out.warnings.all() };\n}\n","/** Mermaid as a {@link DiagramFormat}. */\nimport type { DiagramFormat } from '../document';\nimport { OTHER_KINDS, headerWord } from './parse';\nimport { readMermaid } from './read';\nimport { writeMermaid } from './write';\n\nconst FLOWCHART = /^(?:flowchart|graph|flowchart-elk)(?:\\s+(?:TB|TD|BT|LR|RL|[<>^v]))?\\s*(?:;|$)/i;\n\n/**\n * A Mermaid flowchart, one page per file, laid out on import. Any Mermaid\n * diagram is recognized, so reading another kind says which kind it is.\n */\nexport const DIAGRAM_MERMAID: DiagramFormat = {\n id: 'mermaid',\n name: 'Mermaid',\n extensions: ['.mmd', '.mermaid'],\n detect: (text) => {\n const header = headerWord(text);\n return header !== null && (FLOWCHART.test(header.text) || OTHER_KINDS.test(header.word));\n },\n read: readMermaid,\n write: writeMermaid,\n onePage: true,\n};\n","/** The formats a diagram reads from and writes to, and how a file finds its format. */\nimport type { DiagramFormat, ImportResult } from './document';\nimport { DIAGRAM_DOT } from './dot/format';\nimport { DIAGRAM_JSON } from './jsonFormat';\nimport { DRAW_XML } from './drawXml/format';\nimport { DIAGRAM_MERMAID } from './mermaid/format';\n\n/** Every format this package reads or writes. */\nexport const DIAGRAM_FORMATS: readonly DiagramFormat[] = [DIAGRAM_JSON, DRAW_XML, DIAGRAM_MERMAID, DIAGRAM_DOT];\n\nconst extensionOf = (format: DiagramFormat, fileName: string): boolean =>\n format.extensions.some((ext) => fileName.toLowerCase().endsWith(ext.toLowerCase()));\n\n/**\n * The format `text` is in: among those whose content test passes, the first\n * that claims `fileName`'s extension, else the first. `null` when none\n * passes, whatever the extension says, since an extension such as `.xml` names\n * many formats.\n */\nexport function detectFormat(\n text: string, fileName?: string, formats: readonly DiagramFormat[] = DIAGRAM_FORMATS,\n): DiagramFormat | null {\n const passing = formats.filter((f) => f.detect(text));\n if (fileName !== undefined) {\n const named = passing.find((f) => extensionOf(f, fileName));\n if (named !== undefined) return named;\n }\n return passing[0] ?? null;\n}\n\n/** Reads `text` with the format {@link detectFormat} picks. Rejects when none reads it. */\nexport async function readDocument(\n text: string, fileName?: string, formats: readonly DiagramFormat[] = DIAGRAM_FORMATS,\n): Promise<ImportResult> {\n const format = detectFormat(text, fileName, formats.filter((f) => f.read !== undefined));\n if (format === null) throw new Error(`${fileName ?? 'The text'} is not a diagram file this package reads`);\n return format.read!(text);\n}\n","/**\n * What `documentFromScene` reads off one scene node: a shape as a `DataNode`,\n * a connector as a `DataEdge`, a container or pool as a `DataContainer`, and a\n * group as a `DataGroup`, each in coordinates from its page's corner.\n */\nimport type { RectPose } from '@weasel-js/core';\nimport type { Vec2 } from '@weasel-js/core/math';\nimport {\n DEFAULT_PORTS, EDGE_STROKE_WIDTH, NODE_STROKE_WIDTH, dataEdgeStyle, dataNodeStyle, dataRegionStyle, diagramContainerOf, diagramEdgeOf, layoutOwnsPort,\n layoutOwnsRoute, poolAxisOf, titleIdOf, type DataContainer, type DataEdge, type DataGroup, type DataLane, type DataNode, type DiagramLabel,\n type DiagramRouter, type DiagramTheme, type EdgeStyle, type NodeStyle,\n} from '@weasel-js/diagram';\n\n/** A scene node as the readers see it. */\nexport interface ReadNode {\n id: string;\n parent: string | null;\n pose: unknown;\n data: unknown;\n dependsOn?: readonly string[] | 'children';\n}\n\n/** A scene as the readers see it. */\nexport interface ReadScene {\n get(id: never): ReadNode | undefined;\n childrenOf(id: never): readonly string[];\n}\n\ntype Paint = { paint?: { color?: unknown }; width?: unknown; dash?: unknown; markerStart?: unknown; markerEnd?: unknown };\ntype Data = { diagram?: Record<string, unknown>; fill?: Paint; stroke?: Paint; text?: unknown; bodyRow?: unknown; style?: { fontSize?: unknown } };\n\nconst ROUTERS: readonly DiagramRouter[] = ['straight', 'bezier', 'orthogonal', 'avoid'];\n\nconst dataOf = (node: ReadNode | undefined): Data => ((node?.data ?? {}) as Data);\nexport const traitOf = (node: ReadNode): Record<string, unknown> | null => dataOf(node).diagram ?? null;\nconst colorOf = (paint: Paint | undefined): string | undefined => (typeof paint?.paint?.color === 'string' ? paint.paint.color : undefined);\nconst same = (a: unknown, b: unknown): boolean => JSON.stringify(a) === JSON.stringify(b);\nconst moved = (p: Vec2, by: Vec2): Vec2 => ({ x: p.x - by.x, y: p.y - by.y });\n\n/** What a scene node is to the document, or `null` for something drawn on another's behalf. */\nexport function kindOf(node: ReadNode): 'shape' | 'region' | 'group' | 'edge' | null {\n if (diagramEdgeOf(node) !== null) return 'edge';\n if (diagramContainerOf(node) !== null) return 'region';\n const trait = traitOf(node);\n if (trait === null) return null;\n if ('group' in trait) return 'group';\n return 'outline' in trait ? 'shape' : null;\n}\n\n/** The fields of `actual` its owner set by hand (`own`, its `ownStyle`), or that differ from `themed`. `undefined` for none. */\nfunction ownColors<T extends object>(actual: Partial<T>, themed: Partial<T>, own: unknown): Partial<T> | undefined {\n const owned = new Set(Array.isArray(own) ? own : []);\n const out: Partial<T> = {};\n for (const [key, value] of Object.entries(actual) as [keyof T & string, T[keyof T & string] | undefined][]) {\n const field = key === 'label' ? 'text' : key;\n if (value !== undefined && (owned.has(field) || !same(value, themed[key]))) out[key] = value;\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\nconst textOf = (scene: ReadScene, id: string): string | undefined => {\n const text = dataOf(scene.get(id as never)).text;\n return typeof text === 'string' ? text : undefined;\n};\n\n/** A shape: its outline, text rows, box, role, colors, and the body layout and ports it was built with. */\nexport function readShape(scene: ReadScene, node: ReadNode, page: Vec2, theme: DiagramTheme): DataNode {\n const trait = traitOf(node)!;\n const data = dataOf(node);\n const pose = node.pose as RectPose;\n const rows = scene.childrenOf(node.id as never).map((id) => scene.get(id as never)!)\n .filter((c) => typeof dataOf(c).text === 'string' && typeof dataOf(c).bodyRow === 'number')\n .sort((p, q) => (dataOf(p).bodyRow as number) - (dataOf(q).bodyRow as number));\n const ownSize = Array.isArray(trait.ownFont) && trait.ownFont.includes('size');\n const themed = dataNodeStyle({ style: trait.style as string | undefined }, theme);\n const colors = ownColors<NodeStyle>({\n fill: colorOf(data.fill), stroke: colorOf(data.stroke), text: colorOf(dataOf(rows[0]).fill),\n strokeWidth: data.stroke?.width as number | undefined, dash: data.stroke?.dash as number[] | undefined,\n }, { ...themed, strokeWidth: themed.strokeWidth ?? NODE_STROKE_WIDTH }, trait.ownStyle);\n const body = trait.body as { padding: number; gap: number; verticalAlign: DataNode['verticalAlign'] } | undefined;\n return {\n id: node.id,\n outline: trait.outline as DataNode['outline'],\n ...(ownSize\n ? { rows: rows.map((r) => ({ kind: 'label' as const, text: dataOf(r).text as string, style: { fontSize: dataOf(r).style?.fontSize as number } })) }\n : { lines: rows.map((r) => dataOf(r).text as string) }),\n at: moved(pose, page),\n width: pose.width,\n height: pose.height,\n ...(typeof trait.style === 'string' ? { style: trait.style } : {}),\n ...(colors !== undefined ? { colors } : {}),\n ...(trait.pinned === true ? { pinned: true } : {}),\n ...(body !== undefined ? { padding: body.padding, gap: body.gap, verticalAlign: body.verticalAlign } : {}),\n ...(trait.ports !== undefined && !same(trait.ports, DEFAULT_PORTS) ? { ports: trait.ports as DataNode['ports'] } : {}),\n };\n}\n\n/** A label's placement, its near point moved onto the page. */\nfunction placementOf(trait: Record<string, unknown> | null, page: Vec2): DiagramLabel | undefined {\n const label = trait?.label as DiagramLabel | undefined;\n if (label === undefined) return undefined;\n const at = typeof label.at === 'object' ? { near: moved(label.at.near, page) } : label.at;\n return { at, ...(label.offset !== undefined ? { offset: label.offset } : {}), ...(label.dodge === false ? { dodge: false } : {}) };\n}\n\n/**\n * A connector: its ends, the ports and route its author set, those layout or\n * the avoiding router set as `routedPorts` and `routed`, its label, and its\n * colors. `page` is `null` for one whose ends sit on different pages, which\n * keeps no route.\n */\nexport function readEdge(node: ReadNode, label: ReadNode | undefined, page: Vec2 | null, theme: DiagramTheme): DataEdge {\n const trait = diagramEdgeOf(node)!;\n const [from, to] = node.dependsOn as readonly string[];\n const router = ROUTERS.find((r) => r === trait.router) ?? 'straight';\n const authored = (end: typeof trait.from) => (end.port !== undefined && !layoutOwnsPort(end) ? end.port : undefined);\n const laid = (end: typeof trait.from) => (end.port !== undefined && layoutOwnsPort(end) ? end.port : undefined);\n const points = trait.waypoints !== undefined && trait.waypoints.length > 0 ? trait.waypoints : undefined;\n const routed = points !== undefined ? (layoutOwnsRoute(trait) ? points : undefined) : trait.route;\n const stroke = dataOf(node).stroke;\n const themed = dataEdgeStyle({ style: trait.style }, theme);\n const colors = ownColors<EdgeStyle>({\n stroke: colorOf(stroke), label: label === undefined ? undefined : colorOf(dataOf(label).fill),\n width: stroke?.width as number | undefined, dash: stroke?.dash as number[] | undefined,\n markerStart: (stroke?.markerStart ?? null) as EdgeStyle['markerStart'], markerEnd: (stroke?.markerEnd ?? null) as EdgeStyle['markerEnd'],\n }, {\n ...themed, width: themed.width ?? EDGE_STROKE_WIDTH, markerStart: themed.markerStart ?? null,\n markerEnd: themed.markerEnd === undefined ? 'arrow' : themed.markerEnd,\n }, trait.ownStyle);\n const text = label === undefined ? undefined : dataOf(label).text;\n const placement = label === undefined || page === null ? undefined : placementOf(traitOf(label), page);\n const fromPort = authored(trait.from);\n const toPort = authored(trait.to);\n const routedPorts = { ...(laid(trait.from) ? { from: laid(trait.from) } : {}), ...(laid(trait.to) ? { to: laid(trait.to) } : {}) };\n return {\n id: node.id, from: from!, to: to!, router,\n ...(fromPort !== undefined ? { fromPort } : {}),\n ...(toPort !== undefined ? { toPort } : {}),\n ...(page !== null && Object.keys(routedPorts).length > 0 ? { routedPorts } : {}),\n ...(page !== null && points !== undefined && routed === undefined ? { waypoints: points.map((p) => moved(p, page)) } : {}),\n ...(page !== null && routed !== undefined && routed.length > 0 ? { routed: routed.map((p) => moved(p, page)) } : {}),\n ...(typeof text === 'string' && text !== '' ? { label: text } : {}),\n ...(placement !== undefined ? { labelPlacement: placement } : {}),\n ...(trait.style !== undefined ? { style: trait.style } : {}),\n ...(colors !== undefined ? { colors } : {}),\n };\n}\n\n/** The colors a region shows that `themed` does not give it: its box's, and its title's as `text`. */\nfunction regionColors(scene: ReadScene, node: ReadNode, themed: NodeStyle): Partial<NodeStyle> | undefined {\n const data = dataOf(node);\n const title = scene.get(titleIdOf(node.id) as never);\n return ownColors<NodeStyle>(\n { fill: colorOf(data.fill), stroke: colorOf(data.stroke), text: title === undefined ? undefined : colorOf(dataOf(title).fill) },\n themed, traitOf(node)?.ownStyle,\n );\n}\n\n/** The shapes and containers directly inside a region, in the scene's order. */\nfunction membersOf(scene: ReadScene, id: string): string[] {\n return scene.childrenOf(id as never).filter((c) => {\n const node = scene.get(c as never)!;\n const kind = kindOf(node);\n return kind === 'shape' || (kind === 'region' && diagramContainerOf(node)!.role === 'container');\n });\n}\n\nconst optional = <K extends string, V>(key: K, value: V | undefined): { [P in K]?: V } =>\n (value === undefined ? {} : { [key]: value }) as { [P in K]?: V };\n\n/** A container or a pool: its title, members or lanes, box (none for a fitted container), role, and colors. */\nexport function readRegion(scene: ReadScene, node: ReadNode, page: Vec2, theme: DiagramTheme): DataContainer {\n const trait = traitOf(node)!;\n const container = diagramContainerOf(node)!;\n const role = container.role === 'pool' ? 'pool' : 'container';\n const style = trait.style as string | undefined;\n const themed = dataRegionStyle({ role, style }, theme);\n const pose = node.pose as RectPose;\n const members = role === 'container' ? membersOf(scene, node.id) : [];\n const axis = poolAxisOf(container);\n return {\n id: node.id,\n role,\n ...optional('label', textOf(scene, titleIdOf(node.id))),\n ...(members.length > 0 ? { members } : {}),\n ...(role === 'pool' ? { axis, lanes: lanesOf(scene, node.id, axis, theme) } : {}),\n ...(container.fitted === true ? {} : { box: { ...moved(pose, page), width: pose.width, height: pose.height } }),\n ...(trait.pinned === true ? { pinned: true } : {}),\n ...optional('style', style),\n ...optional('colors', regionColors(scene, node, themed)),\n };\n}\n\nfunction lanesOf(scene: ReadScene, poolId: string, axis: 'x' | 'y', theme: DiagramTheme): DataLane[] {\n const start = (p: RectPose) => (axis === 'y' ? p.y : p.x);\n const lanes = scene.childrenOf(poolId as never).map((id) => scene.get(id as never)!)\n .filter((n) => diagramContainerOf(n)?.role === 'lane')\n .sort((p, q) => start(p.pose as RectPose) - start(q.pose as RectPose));\n return lanes.map((lane, i) => {\n const pose = lane.pose as RectPose;\n const members = membersOf(scene, lane.id);\n return {\n id: lane.id,\n ...optional('label', textOf(scene, titleIdOf(lane.id))),\n size: axis === 'y' ? pose.height : pose.width,\n ...(members.length > 0 ? { members } : {}),\n ...optional('colors', regionColors(scene, lane, dataRegionStyle({ role: 'lane' }, theme, i))),\n };\n });\n}\n\n/** A group: the shapes and groups it is drawn around, and its label. */\nexport function readGroup(scene: ReadScene, node: ReadNode): DataGroup {\n const group = traitOf(node)!.group as { reorder?: 'x' | 'y' };\n const members = (Array.isArray(node.dependsOn) ? node.dependsOn : []).filter((id) => {\n const member = scene.get(id as never);\n return member !== undefined && kindOf(member) !== null && kindOf(member) !== 'edge';\n });\n return {\n id: node.id, members,\n ...optional('label', textOf(scene, `${node.id}/label`)),\n ...optional('reorder', group.reorder),\n };\n}\n","/** A diagram scene as a {@link DiagramDocument}: what every format writes from. */\nimport {\n pageHolding, placedPagesOf, type PlacedPage, type RectPose, type Scene,\n} from '@weasel-js/core';\nimport {\n DIAGRAM_THEME_KEY, diagramLabelOf, documentBoundsOf, diagramThemeFrom, offPageSplits, type DataContainer, type DataEdge, type DataGroup,\n type DataNode, type DiagramTheme,\n} from '@weasel-js/diagram';\nimport type { DiagramDocument, DocumentPage } from './document';\nimport { kindOf, readEdge, readGroup, readRegion, readShape, type ReadNode, type ReadScene } from './sceneReaders';\n\n/** Options for {@link documentFromScene}. */\nexport interface DocumentFromSceneOptions {\n /** The theme colors are read against when the scene's `diagram:theme` names none. Default the night theme. */\n theme?: DiagramTheme;\n}\n\ntype AnyScene = ReadScene & {\n roots: readonly string[];\n renderOrderNodes(): readonly ReadNode[];\n doc: { get(key: string): unknown };\n};\n\ninterface PageBucket { nodes: DataNode[]; edges: DataEdge[]; groups: DataGroup[]; containers: DataContainer[] }\n\n/** One page around everything, for a scene with no page list. */\nfunction contentPage(scene: AnyScene): PlacedPage {\n const boxes = scene.roots.map((id) => scene.get(id as never)!.pose as RectPose);\n const x = boxes.length === 0 ? 0 : Math.min(...boxes.map((b) => b.x));\n const y = boxes.length === 0 ? 0 : Math.min(...boxes.map((b) => b.y));\n const width = boxes.length === 0 ? 0 : Math.max(...boxes.map((b) => b.x + b.width)) - x;\n const height = boxes.length === 0 ? 0 : Math.max(...boxes.map((b) => b.y + b.height)) - y;\n return { id: 'page-1', x, y, width, height, index: 0 };\n}\n\n/**\n * Reads a diagram scene into a document: one page per page in its `core:pages`\n * (one page around everything when it has none), each holding the shapes,\n * connectors, containers and pools, and groups on it, in coordinates from the\n * page's corner. A shape belongs to the page its outermost container does, and\n * that is the one its box overlaps most, or the nearest one when it overlaps\n * none. A connector the scene splits off-page, or whose ends export to\n * different pages, goes in `crossPageEdges`: without waypoints when split,\n * with them in world coordinates when not. Colors are kept\n * where the scene's theme would not give them: the author's own, and any a\n * theme never set.\n */\nexport function documentFromScene<TData, TLayer extends string, TPose>(\n scene: Scene<TData, TLayer, TPose>, opts: DocumentFromSceneOptions = {},\n): DiagramDocument {\n const s = scene as unknown as AnyScene;\n const themeValue = s.doc.get(DIAGRAM_THEME_KEY) as DiagramDocument['theme'];\n const theme = diagramThemeFrom(themeValue, opts.theme);\n const placed = placedPagesOf(scene);\n const pages = placed.length > 0 ? placed : [contentPage(s)];\n const buckets = new Map(pages.map((p) => [p.id, { nodes: [], edges: [], groups: [], containers: [] } as PageBucket]));\n const boxOf = (node: ReadNode) => documentBoundsOf(scene, node);\n const pageCache = new Map<string, PlacedPage>();\n const pageOf = (node: ReadNode): PlacedPage => {\n let root = node;\n while (root.parent !== null) root = s.get(root.parent as never)!;\n if (!pageCache.has(root.id)) pageCache.set(root.id, pageHolding(pages, boxOf(root))!);\n return pageCache.get(root.id)!;\n };\n\n const labels = new Map<string, ReadNode>();\n const edges: ReadNode[] = [];\n const itemPage = new Map<string, PlacedPage>();\n for (const node of s.renderOrderNodes()) {\n const kind = kindOf(node);\n if (kind === null) {\n const deps = node.dependsOn;\n if (diagramLabelOf(node) !== null && Array.isArray(deps) && deps.length === 1) labels.set(deps[0]!, node);\n continue;\n }\n if (kind === 'edge') {\n edges.push(node);\n continue;\n }\n const page = pageOf(node);\n itemPage.set(node.id, page);\n const bucket = buckets.get(page.id)!;\n if (kind === 'shape') bucket.nodes.push(readShape(s, node, page, theme));\n else if (kind === 'group') bucket.groups.push(readGroup(s, node));\n else if (isContainerOrPool(node)) bucket.containers.push(readRegion(s, node, page, theme));\n }\n\n const splitInputs = edges.flatMap((node) => {\n const [from, to] = Array.isArray(node.dependsOn) ? node.dependsOn : [];\n if (from === undefined || to === undefined || !itemPage.has(from) || !itemPage.has(to)) return [];\n return [{ id: node.id, from: boxOf(s.get(from as never)!), to: boxOf(s.get(to as never)!) }];\n });\n const splits = offPageSplits({ pages, edges: splitInputs });\n const crossPageEdges: DataEdge[] = [];\n for (const node of edges) {\n const [from, to] = Array.isArray(node.dependsOn) ? node.dependsOn : [];\n const fromPage = itemPage.get(from ?? '');\n const toPage = itemPage.get(to ?? '');\n if (fromPage === undefined || toPage === undefined) continue;\n const split = (splits.get(node.id) ?? null) !== null;\n if (fromPage === toPage && !split) buckets.get(fromPage.id)!.edges.push(readEdge(node, labels.get(node.id), fromPage, theme));\n else crossPageEdges.push(readEdge(node, labels.get(node.id), split ? null : { x: 0, y: 0 }, theme));\n }\n\n return {\n pages: pages.map((p): DocumentPage => {\n const { nodes, edges: pageEdges, groups, containers } = buckets.get(p.id)!;\n return {\n id: p.id,\n ...(p.name !== undefined ? { name: p.name } : {}),\n width: p.width,\n height: p.height,\n data: { nodes, edges: pageEdges, ...(groups.length > 0 ? { groups } : {}), ...(containers.length > 0 ? { containers } : {}) },\n };\n }),\n ...(crossPageEdges.length > 0 ? { crossPageEdges } : {}),\n ...(themeValue !== undefined ? { theme: themeValue } : {}),\n };\n}\n\nconst isContainerOrPool = (node: ReadNode): boolean => {\n const trait = (node.data as { diagram?: { container?: { role?: string } } }).diagram;\n return trait?.container?.role === 'container' || trait?.container?.role === 'pool';\n};\n","/** A {@link DiagramDocument} as scene specs and document values: what every import draws from. */\nimport { PAGES_DOC_KEY, layoutPages, type Page, type SerializedDoc } from '@weasel-js/core';\nimport {\n DIAGRAM_THEME_KEY, diagramScene, diagramThemeFrom, themeDocValue, type DiagramData, type DiagramSpec, type DiagramTheme,\n type MeasureRowText,\n} from '@weasel-js/diagram';\nimport type { DiagramDocument } from './document';\nimport { laidOutPage, needsLayout } from './pageLayout';\nimport { shiftData } from './shiftData';\n\n/** Options for {@link documentSpecs}. */\nexport interface DocumentSpecsOptions<TLayer extends string = 'main'> {\n /** The layer every spec goes on. Default `'main'`. */\n layer?: TLayer;\n /** The theme to draw in. Default the one the document names, else the night theme. */\n theme?: DiagramTheme;\n /** Measures text. Default an estimate from character count. */\n measure?: MeasureRowText;\n}\n\n/** What {@link documentSpecs} returns: the nodes, and the `core:pages` and `diagram:theme` document values. */\nexport interface DocumentScene<TLayer extends string = 'main'> {\n specs: DiagramSpec<TLayer>[];\n doc: SerializedDoc;\n}\n\n/**\n * The scene a document draws as. Its pages are placed with core's\n * `layoutPages`, as a scene's `core:pages` places them. A page whose nodes\n * all have a place is drawn where they say; any other page is laid out first,\n * with `layered`, its placed nodes pinned (and grows to hold the result). Then\n * every page, moved to its place, and the edges between pages are drawn by one\n * `diagramScene` call with no layout, so the scene holds places and routes and\n * no layout runs again.\n */\nexport function documentSpecs<TLayer extends string = 'main'>(\n document: DiagramDocument, opts: DocumentSpecsOptions<TLayer> = {},\n): DocumentScene<TLayer> {\n const theme = opts.theme ?? diagramThemeFrom(document.theme);\n const measure = opts.measure ? { measure: opts.measure } : {};\n const pages = document.pages.map((p) => (needsLayout(p) ? laidOutPage(p, { theme, ...measure }) : p));\n const pageList: Page[] = pages.map(({ id, name, width, height }) => ({ id, ...(name !== undefined ? { name } : {}), width, height }));\n const placed = layoutPages(pageList);\n const data: DiagramData = { nodes: [], edges: [], groups: [], containers: [] };\n pages.forEach((page, i) => {\n const shifted = shiftData(page.data, placed[i]!);\n data.nodes = [...data.nodes, ...shifted.nodes];\n data.edges = [...data.edges, ...shifted.edges];\n data.groups = [...data.groups!, ...(shifted.groups ?? [])];\n data.containers = [...data.containers!, ...(shifted.containers ?? [])];\n });\n data.edges = [...data.edges, ...(document.crossPageEdges ?? [])];\n const specs = diagramScene(data, { layout: 'none', theme, layer: (opts.layer ?? 'main') as TLayer, ...measure });\n return { specs, doc: { [PAGES_DOC_KEY]: { pages: pageList }, [DIAGRAM_THEME_KEY]: themeDocValue(theme) } };\n}\n","/**\n * One page of a diagram scene as `SvgNode`s: the nodes whose box meets the\n * page, each written the way the canvas paints it.\n */\nimport {\n boundsOfPath,\n derivedDepOf,\n derivedPartsOf,\n INHERIT,\n resolvePartPaint,\n effectivePose,\n isAnnotationLayer,\n type DrawCommand,\n type NodeShapeEntry,\n type Paint,\n type Path,\n type RectPose,\n type Scene,\n} from '@weasel-js/core';\nimport { diagramShape, markShape } from '@weasel-js/diagram';\nimport {\n svgLeafFromKit,\n svgNodesFromKit,\n svgPaintFromKit,\n svgStrokeFromKit,\n type SvgGroupNode,\n type SvgKitLeafData,\n type SvgKitPose,\n type SvgKitTree,\n type SvgKitTreeNode,\n type SvgNode,\n type SvgPathNode,\n} from '@weasel-js/svg';\n\n/** A page's rect in world space. A `PlacedPage` is one. */\nexport interface PageRect {\n readonly x: number;\n readonly y: number;\n readonly width: number;\n readonly height: number;\n}\n\n/** A diagram scene as the exports read it: world-space `RectPose`s. */\nexport type PageExportScene = Scene<unknown, string, RectPose>;\n\ntype Box = { x: number; y: number; width: number; height: number };\ntype SceneNode = NonNullable<ReturnType<PageExportScene['get']>>;\n\nconst meets = (a: Box, b: Box): boolean =>\n Math.min(a.x + a.width, b.x + b.width) >= Math.max(a.x, b.x)\n && Math.min(a.y + a.height, b.y + b.height) >= Math.max(a.y, b.y);\n\nconst poseOf = (pose: RectPose): SvgKitPose => ({\n x: pose.x, y: pose.y, width: pose.width, height: pose.height,\n ...(pose.rotation ? { rotation: pose.rotation } : {}),\n});\n\n/** A painter's path command as an SVG path, its paints resolved in `box`. */\nfunction commandNode(cmd: DrawCommand, pose: SvgKitPose): SvgPathNode | null {\n if (cmd.kind !== 'path') return null;\n const node: SvgPathNode = { kind: 'path', path: cmd.path, fill: svgPaintFromKit((cmd.fill?.paint ?? null) as Paint | null, pose) };\n const stroke = svgStrokeFromKit(cmd.stroke as Parameters<typeof svgStrokeFromKit>[0], pose);\n if (stroke) node.stroke = stroke;\n if (pose.rotation) node.rotation = pose.rotation;\n return node;\n}\n\n/** What a diagram painter draws for `node`, or `null` when none claims it. */\nfunction diagramPainted(painters: readonly NodeShapeEntry<unknown, RectPose>[], node: SceneNode, pose: RectPose): SvgPathNode[] | null {\n const painter = painters.find((p) => p.matches(node as never));\n if (!painter) return null;\n const at = poseOf(pose);\n return painter.paint(node as never, pose).flatMap((cmd) => commandNode(cmd, at) ?? []);\n}\n\n/** A derived path's parts, each painted as the derived-node painter paints it. */\nfunction derivedNodes(path: Path, data: SvgKitLeafData): SvgNode[] {\n const parts = derivedPartsOf(path) ?? [{ path, fill: INHERIT, stroke: INHERIT }];\n return parts.flatMap((part) => svgLeafFromKit(\n { path: part.path, ...resolvePartPaint(part, data) },\n boundsOfPath(part.path),\n ) ?? []);\n}\n\nconst one = (nodes: SvgNode[]): SvgNode | null =>\n nodes.length === 0 ? null : nodes.length === 1 ? nodes[0]! : { kind: 'group', children: nodes };\n\n/**\n * The `SvgNode`s of everything on `page`, in paint order: every node on a\n * visible content layer whose box meets the page, with what is under it.\n * Diagram outlines and drawn marks go through the diagram painters, a node\n * that derives its path (a connector) is drawn along that path, and anything\n * else is written by `svgLeafFromKit`.\n */\nexport function pageSvgNodes(scene: PageExportScene, page: PageRect): SvgNode[] {\n const painters = [diagramShape<RectPose>(), markShape<RectPose>()];\n const shown = new Set(scene.layers.filter((l) => l.visible && !isAnnotationLayer(l)).map((l) => l.id));\n const poseCache = new Map<string, RectPose>();\n const pose = (node: SceneNode): RectPose => {\n let p = poseCache.get(node.id);\n if (p === undefined) poseCache.set(node.id, (p = effectivePose(scene, node)));\n return p;\n };\n const pathOf = (node: SceneNode) => (node.kind === 'leaf' ? derivedDepOf(scene, node.id)?.path ?? null : null);\n\n const tree: SvgKitTree = {\n roots: scene.layers.flatMap((l) => scene.roots.filter((id) => scene.get(id)?.layer === l.id)),\n childrenOf: (id) => scene.childrenOf(id as never),\n get(id) {\n const node = scene.get(id as never);\n if (!node) return undefined;\n return {\n kind: node.kind, data: node.data, pose: poseOf(pose(node)),\n ...(node.hidden ? { hidden: true } : {}),\n ...(node.kind === 'container' && node.copiesFromPose\n ? { copiesFromPose: node.copiesFromPose as SvgKitTreeNode['copiesFromPose'] }\n : {}),\n };\n },\n };\n\n return svgNodesFromKit(tree, {\n include(id) {\n const node = scene.get(id as never);\n if (!node || !shown.has(node.layer)) return false;\n const path = pathOf(node);\n return meets(path ? boundsOfPath(path) : pose(node), page);\n },\n leaf(id, kit) {\n const node = scene.get(id as never)!;\n const path = pathOf(node);\n if (path) return one(derivedNodes(path, kit.data as SvgKitLeafData));\n const painted = diagramPainted(painters, node, pose(node));\n return painted ? one(painted) : svgLeafFromKit(kit.data as SvgKitLeafData, kit.pose);\n },\n group(id, g): SvgGroupNode {\n const node = scene.get(id as never)!;\n const outline = diagramPainted(painters, node, pose(node));\n return outline ? { ...g, children: [...outline, ...g.children] } : g;\n },\n });\n}\n","/**\n * One page of a diagram as an SVG document.\n */\nimport { layoutTextPose } from '@weasel-js/core';\nimport { diagramThemeOf } from '@weasel-js/diagram';\nimport { serializeSvg, warmSvg, type SerializeOptions, type SvgNode } from '@weasel-js/svg';\nimport { pageSvgNodes, type PageExportScene, type PageRect } from './pageNodes';\n\n/** Options for {@link exportPageSvg}. */\nexport interface ExportPageSvgOptions extends Pick<SerializeOptions, 'title' | 'onWarn' | 'pretty'> {\n /** The color painted under the page. Default: the page color of the\n * scene's diagram theme (`diagram:theme`). `null` paints none. */\n background?: string | null;\n}\n\n/** The page color a page export paints when told none: the scene theme's. */\nexport function pageBackground(scene: PageExportScene, background: string | null | undefined): string | null {\n return background === undefined ? diagramThemeOf(scene).page : background;\n}\n\n/**\n * Write `page` of `scene` as an SVG document: its `viewBox` is the page rect,\n * its size the page's, the page color comes first, and the scene is drawn as\n * the canvas draws it, cut to the page's edges. What lies wholly off the page\n * is left out.\n *\n * It waits for the paint kinds and faces the document needs, so its text is\n * written in the lines the canvas lays it out into. A load that fails goes to\n * `onWarn`, and the export goes ahead without it.\n */\nexport async function exportPageSvg(\n scene: PageExportScene,\n page: PageRect,\n opts: ExportPageSvgOptions = {},\n): Promise<string> {\n const { background, ...given } = opts;\n const nodes: SvgNode[] = [];\n const color = pageBackground(scene, background);\n if (color !== null) {\n nodes.push({ kind: 'path', path: { kind: 'rect', x: page.x, y: page.y, width: page.width, height: page.height }, fill: { kind: 'solid', color } });\n }\n nodes.push(...pageSvgNodes(scene, page));\n const serialize: SerializeOptions = {\n ...given,\n viewBox: { x: page.x, y: page.y, width: page.width, height: page.height },\n width: page.width,\n height: page.height,\n textLayout: layoutTextPose,\n };\n try {\n await warmSvg(nodes, serialize);\n } catch (err) {\n serialize.onWarn?.(`a paint kind or font this export uses failed to load: ${String(err)}`);\n }\n return serializeSvg(nodes, serialize);\n}\n","/**\n * One page of a diagram as a PNG image.\n */\nimport { renderSceneToPixels, warmRender, type RasterImage } from '@weasel-js/core';\nimport type { PageExportScene, PageRect } from './pageNodes';\nimport { pageBackground } from './pageSvg';\n\n/** Options for {@link exportPagePng}. */\nexport interface ExportPagePngOptions {\n /** Output pixels per world unit: 2 makes an image twice the page's size. */\n scale: number;\n /** The color painted under the page. Default: the page color of the\n * scene's diagram theme. `null` leaves it transparent. */\n background?: string | null;\n}\n\n/** `image` encoded as a PNG. */\nfunction encodePng(image: RasterImage): Promise<Blob> {\n const canvas = new OffscreenCanvas(image.width, image.height);\n const ctx = canvas.getContext('2d');\n if (!ctx) throw new Error('exportPagePng: no 2D context to encode the image with');\n ctx.putImageData(new ImageData(new Uint8ClampedArray(image.data), image.width, image.height), 0, 0);\n return canvas.convertToBlob({ type: 'image/png' });\n}\n\n/**\n * Draw `page` of `scene` into a PNG, `page × scale` pixels, through the\n * renderer the canvas draws with, so it shows what the canvas shows, cut to\n * the page's edges. Annotation layers are left out.\n *\n * The caller has registered whatever the scene needs painting with, as it\n * must to draw it at all: the diagram painters (`registerDiagramShape`,\n * `registerMarkShape`) and its fonts. Paint kinds and faces that load on\n * demand are waited for. Needs WebGL2 and `OffscreenCanvas`.\n */\nexport async function exportPagePng(\n scene: PageExportScene,\n page: PageRect,\n opts: ExportPagePngOptions,\n): Promise<Blob> {\n const background = pageBackground(scene, opts.background);\n const args = {\n scene,\n sourceRect: { x: page.x, y: page.y, width: page.width, height: page.height },\n scale: { x: opts.scale, y: opts.scale },\n ...(background !== null ? { background } : {}),\n };\n await warmRender({ render: args });\n return encodePng(renderSceneToPixels(args));\n}\n","/**\n * The raster hook `writePdf` calls for what a PDF cannot draw.\n */\nimport { createScene, mat3, warmRender, type RasterSession } from '@weasel-js/core';\nimport type { WritePdfOptions } from '@weasel-js/pdf';\n\n/**\n * A hook that draws its commands through `session`, which are in page points. The renderer reads\n * `world`-unit paint through the session's view, so that view is the page view followed by the move\n * from page points to raster pixels, written as the source rect and scale the session plans it from.\n * `screen`-unit paint is in page points too, so the session's screen space is the page.\n */\nexport function pageRasterizer(session: RasterSession): NonNullable<WritePdfOptions['rasterize']> {\n const empty = createScene({ systemLayers: [{ id: 'main' }] });\n return async (commands, rect, scale, view) => {\n await warmRender({ commands });\n const toPixels = mat3.translated(mat3.scaled(mat3.identity(), scale, scale), -rect.x, -rect.y);\n const toRaster = view ? mat3.multiply(Float64Array.from(toPixels), view) : toPixels;\n const sx = toRaster[0]!;\n const sy = toRaster[4]!;\n return session.render({\n scene: empty,\n sourceRect: { x: -toRaster[6]! / sx, y: -toRaster[7]! / sy, width: (rect.width * scale) / sx, height: (rect.height * scale) / sy },\n scale: { x: sx, y: sy },\n overlay: [{ kind: 'group', transform: toPixels, children: [...commands] }],\n screen: toPixels,\n });\n };\n}\n","/**\n * Every page of a diagram as one PDF.\n */\nimport { createRasterSession, planPixelRender, viewToMat3, warmRender } from '@weasel-js/core';\nimport { registryFontSource, writePdf, type PdfPage, type PdfSkip } from '@weasel-js/pdf';\nimport type { PageExportScene, PageRect } from './pageNodes';\nimport { pageBackground } from './pageSvg';\nimport { pageRasterizer } from './pdfRaster';\n\n/** PDF points per page unit: 72 points to the inch over 96 units to the inch. */\nconst PT_PER_UNIT = 0.75;\n\n/** Options for {@link exportPagesPdf}. */\nexport interface ExportPagesPdfOptions {\n /** The color painted under each page. Default: the page color of the\n * scene's diagram theme. `null` leaves it unpainted. */\n background?: string | null;\n /** The document's title. */\n title?: string;\n}\n\n/**\n * Write each of `pages` of `scene` as a page of one PDF, `page × 0.75` points\n * in size, in the order given. Shapes and strokes are vector; text is real,\n * selectable text in its embedded face. What a PDF cannot draw is painted\n * through the renderer and placed as an image, and anything it could not\n * carry at all comes back in `skipped`. Annotation layers are left out.\n *\n * The caller has registered what the scene needs painting with, as for\n * `exportPagePng`, including each font's outlines. Needs WebGL2 and\n * `OffscreenCanvas`.\n */\nexport async function exportPagesPdf(\n scene: PageExportScene,\n pages: readonly PageRect[],\n opts: ExportPagesPdfOptions = {},\n): Promise<{ blob: Blob; skipped: readonly PdfSkip[] }> {\n const background = pageBackground(scene, opts.background);\n const out: PdfPage[] = [];\n for (const page of pages) {\n const args = {\n scene,\n sourceRect: { x: page.x, y: page.y, width: page.width, height: page.height },\n scale: { x: PT_PER_UNIT, y: PT_PER_UNIT },\n };\n await warmRender({ render: args });\n const plan = planPixelRender(args);\n const width = page.width * PT_PER_UNIT;\n const height = page.height * PT_PER_UNIT;\n // The planner sizes a background to whole pixels, which can stop short of the page's edge.\n const ground = background === null ? [] : [{\n kind: 'path' as const,\n path: { kind: 'rect' as const, x: 0, y: 0, width, height },\n fill: { paint: { kind: 'solid' as const, color: background } },\n }];\n out.push({ width, height, commands: [...ground, ...plan.commands], view: viewToMat3(plan.view) });\n }\n\n const session = createRasterSession();\n try {\n const { bytes, skipped } = await writePdf(out, {\n fonts: registryFontSource,\n ...(opts.title !== undefined ? { title: opts.title } : {}),\n rasterize: pageRasterizer(session),\n });\n const copy = new ArrayBuffer(bytes.byteLength);\n new Uint8Array(copy).set(bytes);\n return { blob: new Blob([copy], { type: 'application/pdf' }), skipped };\n } finally {\n session.dispose();\n }\n}\n"]}
|