@weasel-js/diagram-formats 1.15.2 → 1.16.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.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/rowLines.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/common/header.ts","../src/mermaid/common/lines.ts","../src/mermaid/common/text.ts","../src/mermaid/architecture/parse.ts","../src/mermaid/architecture/read.ts","../src/mermaid/architecture/write.ts","../src/mermaid/common/styles.ts","../src/mermaid/flowchart/lex.ts","../src/mermaid/flowchart/parse.ts","../src/mermaid/flowchart/read.ts","../src/mermaid/block/parse.ts","../src/mermaid/block/read.ts","../src/mermaid/flowchart/write.ts","../src/mermaid/block/write.ts","../src/mermaid/c4/parse.ts","../src/mermaid/c4/kinds.ts","../src/mermaid/c4/read.ts","../src/mermaid/c4/write.ts","../src/mermaid/class/parse.ts","../src/mermaid/class/read.ts","../src/mermaid/class/write.ts","../src/mermaid/er/parse.ts","../src/mermaid/er/read.ts","../src/mermaid/er/write.ts","../src/mermaid/kanban/parse.ts","../src/mermaid/kanban/read.ts","../src/mermaid/kanban/write.ts","../src/mermaid/mindmap/parse.ts","../src/mermaid/mindmap/read.ts","../src/mermaid/mindmap/write.ts","../src/mermaid/sequence/syntax.ts","../src/mermaid/sequence/parse.ts","../src/mermaid/sequence/read.ts","../src/mermaid/sequence/write.ts","../src/mermaid/requirement/parse.ts","../src/mermaid/requirement/read.ts","../src/mermaid/requirement/write.ts","../src/mermaid/state/parse.ts","../src/mermaid/state/read.ts","../src/mermaid/state/write.ts","../src/mermaid/xychart/parse.ts","../src/mermaid/xychart/read.ts","../src/mermaid/xychart/write.ts","../src/mermaid/gantt/parse.ts","../src/mermaid/gantt/read.ts","../src/mermaid/gantt/write.ts","../src/mermaid/gitgraph/parse.ts","../src/mermaid/gitgraph/read.ts","../src/mermaid/gitgraph/write.ts","../src/mermaid/journey/read.ts","../src/mermaid/journey/write.ts","../src/mermaid/packet/read.ts","../src/mermaid/packet/write.ts","../src/mermaid/pie/read.ts","../src/mermaid/pie/write.ts","../src/mermaid/quadrant/parse.ts","../src/mermaid/quadrant/read.ts","../src/mermaid/quadrant/write.ts","../src/mermaid/radar/parse.ts","../src/mermaid/radar/read.ts","../src/mermaid/radar/write.ts","../src/mermaid/sankey/read.ts","../src/mermaid/sankey/write.ts","../src/mermaid/timeline/read.ts","../src/mermaid/timeline/write.ts","../src/mermaid/format.ts","../src/formats.ts","../src/plotPages.ts","../src/graphPageMeta.ts","../src/sceneReaders.ts","../src/fromScene.ts","../src/pageKinds.ts","../src/sequencePage.ts","../src/toScene.ts","../src/templates/starters.ts","../src/templates/catalog.ts","../src/templates/templateScene.ts","../src/pageNodes.ts","../src/pageSvg.ts","../src/pagePng.ts","../src/pdfRaster.ts","../src/pagesPdf.ts"],"names":["item","text","num","end","marker","quoted","fail","attrList","attrs","body","textOf","joined","claim","rgbaToHex","POINTS_PER_INCH","shapeOf","wrapped","kindOf","boxOf","NAMED","decodeEntities","markerOf","outlineOf","dashOf","readNode","readEdge","endOf","childElements","color","nodeLines","VERTICAL","dataNodeStyle","dataRegionStyle","dataEdgeStyle","DEFAULT_PORTS","edgeIdOf","diagramScene","IDENTITY_POSE_COMPOSITION","diagramThemeFrom","title","nodeColors","keyword","SHAPES","KEYWORDS","block","DIRECTIONS","WORD","LINK","SPAN","strokeOf","HEADER","px","args","ID","attributes","HEADS","RELATION","metaOf","SHAPE_OUTLINES","BRACKETS","ARROWS","NOTE","statementOf","parsed","NAME","fields","FORMAT","unquote","frontMatter","m","rest","pageName","ATTRIBUTE","typeOf","nameOf","name","NUMBER","numberAt","ITEM","field","timelineText","colorOf","deepEqual","moved","NODE_STROKE_WIDTH","optional","EDGE_STROKE_WIDTH","membersOf","readRegion","readGroup","pageOf","endLabelIdOf","sequenceRootOf","read","FLOWCHART_NOTATION","placedPagesOf","plotRootOf","pageHolding","documentBoundsOf","sequenceLayout","DIAGRAM_THEME_KEY","readPage","DIAGRAM_TYPE_DOC_KEY","diagramTypeDocValue","page","layoutPages","scenePoseAdapter","composeWorldPose","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, LayoutOptions, SequenceData } from '@weasel-js/diagram';\nimport type { PlotData } from '@weasel-js/plot';\n\n/** What every page has: its sheet size. Ids share one namespace across the whole document. */\nexport interface PageBase {\n id: string;\n name?: string;\n width: number;\n height: number;\n}\n\n/** A page of nodes and edges, in coordinates from the page's top-left corner. */\nexport interface GraphPage extends PageBase {\n kind: 'graph';\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 /** The layout that runs when the page is laid out on import. Unset, `layered`. */\n layout?: PageLayout;\n /** What the graph models, such as `'class'` or `'state'`: a format with a notation of that name writes it in\n * that notation. Unset, a plain flowchart. */\n notation?: string;\n}\n\n/** A layout by its name in `@weasel-js/diagram`'s `LAYOUTS`, and the options a file can carry for it. */\nexport interface PageLayout {\n name: 'layered' | 'tree' | 'force' | 'chain' | 'radial' | 'grid';\n options?: Pick<LayoutOptions, 'nodeGap' | 'rankGap' | 'order' | 'chainSide' | 'grid'>;\n}\n\n/** A page holding one chart, which fills it. */\nexport interface PlotPage extends PageBase {\n kind: 'plot';\n data: PlotData;\n}\n\n/** A sequence diagram, laid out from its data whenever it is drawn. Its `name` is the diagram's title. */\nexport interface SequencePage extends PageBase {\n kind: 'sequence';\n data: SequenceData;\n}\n\n/** One page of a document; `kind` says what its `data` is. */\nexport type DocumentPage = GraphPage | SequencePage | PlotPage;\n\n/** The kinds of page a document can hold. */\nexport type PageKind = DocumentPage['kind'];\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 /** The kinds of page it reads and writes. A writer leaves out a page of any other kind, with a warning. */\n kinds: readonly PageKind[];\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\n/** `page` as a graph, for a format that writes graphs only. Throws on a page of any other kind. */\nexport function graphPageOf(page: DocumentPage, format: string): GraphPage {\n if (page.kind !== 'graph') throw new Error(`${format} writes graph pages only; this page holds a ${(page as DocumentPage).kind}`);\n return page;\n}\n\n/** The graph pages of `doc`, warning once for each page of another kind left out. */\nexport function graphPagesOf(doc: DiagramDocument, format: string, warn: (message: string) => void): GraphPage[] {\n const pages: GraphPage[] = [];\n for (const page of doc.pages) {\n if (page.kind === 'graph') pages.push(page);\n else warn(`${format} holds graph pages only; the ${(page as DocumentPage).kind} page \"${(page as DocumentPage).name ?? (page as DocumentPage).id}\" was left out.`);\n }\n return pages;\n}\n\n/** Whether `format` can write every page of `doc`. */\nexport function formatHolds(format: DiagramFormat, doc: DiagramDocument): boolean {\n return formatTakes(format, new Set(doc.pages.map((p) => p.kind)));\n}\n\n/** Whether `format` reads and writes every kind in `kinds`: what a menu asks of `scenePageKinds`. */\nexport function formatTakes(format: DiagramFormat, kinds: ReadonlySet<PageKind>): boolean {\n return [...kinds].every((k) => format.kinds.includes(k));\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 { IDENTITY_POSE_COMPOSITION } from '@weasel-js/core';\nimport type { Vec2 } from '@weasel-js/core/math';\nimport {\n LAYOUTS, diagramScene, edgeIdOf, type DataContainer, type DataEdge, type DiagramEdge, type DiagramLabel, type DiagramSpec,\n type DiagramTheme, type MeasureRowText,\n} from '@weasel-js/diagram';\nimport type { GraphPage } 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: GraphPage): 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 its `layout` (default `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: GraphPage, opts: { theme: DiagramTheme; measure?: MeasureRowText }): GraphPage {\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 // Read as laid out, in world.\n const layoutOptions = { ...page.layout?.options, ...(page.direction ? { direction: page.direction } : {}) };\n const specs = diagramScene(pinned, {\n layout: LAYOUTS[page.layout?.name ?? 'layered'], theme: opts.theme, composition: IDENTITY_POSE_COMPOSITION, ...(opts.measure ? { measure: opts.measure } : {}),\n ...(Object.keys(layoutOptions).length > 0 ? { layoutOptions } : {}),\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 { GraphPage } 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\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 GraphRead {\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: GraphRead): GraphPage {\n const ids = [...g.nodes.map((n) => n.id), ...g.containers.map((c) => c.id)];\n return {\n kind: 'graph',\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 { rgbaToHex } from '@weasel-js/paint';\nimport { 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 rgbaToHex([f(5), f(3), 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: 'doubleEllipse', point: 'ellipse',\n diamond: 'diamond', hexagon: 'hexagon', parallelogram: 'parallelogram', trapezium: 'trapezoid',\n cylinder: 'cylinder', note: 'note', folder: 'folder', tab: 'folder', octagon: 'octagon', triangle: 'triangle', box3d: 'cube',\n};\n\n/** The attribute naming the outline a node really has, where its DOT shape is only an approximation.\n * Graphviz ignores attributes it doesn't know, so it draws the shape and a diagram reads the name. */\nexport const OUTLINE_ATTR = 'weasel_outline';\n\n/** Outlines DOT names differently, or draws as a rounded box. A stadium shares the rounded box with\n * `roundRect`, so it is `marked` to come back as itself. */\nconst SHAPE_NAMES: Readonly<Record<string, { shape: string; rounded?: boolean; marked?: true }>> = {\n stadium: { shape: 'box', rounded: true, marked: true }, roundRect: { shape: 'box', rounded: true }, trapezoid: { shape: 'trapezium' },\n cube: { shape: 'box3d' }, doubleEllipse: { shape: 'doublecircle' },\n};\n\n/** The outlines DOT has a shape of the same name for. */\nconst SAME_NAMES: ReadonlySet<string> = new Set([\n 'diamond', 'ellipse', 'hexagon', 'parallelogram', 'cylinder', 'note', 'folder', 'octagon', 'triangle',\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') ? 'roundRect' : outline;\n}\n\n/** The shape and the style word an outline writes as; a drawn path as a box, and a name DOT has no\n * shape for as a box marked `missing`. `marked` asks for {@link OUTLINE_ATTR}. */\nexport function shapeOf(outline: Outline | undefined): { shape: string; rounded?: boolean; missing?: true; marked?: true } {\n if (outline === undefined || typeof outline !== 'string' || outline === 'rect') return { shape: 'box' };\n return SHAPE_NAMES[outline] ?? (SAME_NAMES.has(outline) ? { shape: outline } : { shape: 'box', missing: true, marked: true });\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: 'triangle-hollow', vee: 'arrow-concave',\n crow: 'crow-many', teetee: 'crow-one', teeodot: 'crow-zero-one', crowtee: 'crow-one-many', crowodot: 'crow-zero-many',\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', 'triangle-hollow': 'onormal',\n 'crow-many': 'crow', 'crow-one': 'teetee', 'crow-zero-one': 'teeodot', 'crow-one-many': 'crowtee', 'crow-zero-many': 'crowodot',\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, OUTLINE_ATTR, 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([OUTLINE_ATTR, 'label', 'shape', 'style', 'color', 'fillcolor', 'fontcolor', 'penwidth', 'width', 'height', 'pos']),\n edge: new Set(['label', 'taillabel', 'headlabel', '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 = str(attrs, OUTLINE_ATTR) ?? 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 textOf = (key: string) => {\n const value = e.attrs.get(key);\n const joined = value === undefined ? '' : labelLines(value, '', r.graph.id ?? '').join(' ');\n return joined === '' ? undefined : joined;\n };\n const lines = [textOf('label')].filter((l) => l !== undefined);\n const endLabels = { ...(textOf('taillabel') ? { from: textOf('taillabel') } : {}), ...(textOf('headlabel') ? { to: textOf('headlabel') } : {}) };\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(endLabels).length > 0 ? { endLabels } : {}),\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","import type { DataNode } from '@weasel-js/diagram';\n\n/** A node's text, one line per text row. A divider is left out quietly, since it holds no text;\n * `dropped` is called for a port row or slot, which do. */\nexport function rowLines(node: DataNode, dropped: () => void): 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 if (row.kind !== 'divider') dropped();\n }\n return lines;\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 { normalizeHex, parseColor, rgbaToHex, tryNormalizeHex } from '@weasel-js/paint';\nimport { deepEqual } from '@weasel-js/registry';\nimport { graphPageOf, writtenPage, type DiagramDocument, type GraphPage, type WriteOptions } from './document';\nimport { Warnings } from './graphRead';\nimport { rowLines } from './rowLines';\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: GraphPage;\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 return rowLines(node, () => warnings.add(`${format} holds only text in a shape; its port rows and slots were dropped.`));\n}\n\nfunction clusterTree(page: GraphPage, theme: DiagramTheme, warnings: Warnings, format: string, holdsPools: boolean) {\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' && !holdsPools) 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.\n * `holdsPools` says the writer has a form of its own for a pool and its lanes, which are then written without a warning. */\nexport function graphOut(doc: DiagramDocument, opts: WriteOptions | undefined, format: string, holdsPools = false): GraphOut | null {\n const written = writtenPage(doc, opts);\n if (written === null) return null;\n const page = graphPageOf(written, format);\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, holdsPools);\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 if (css.startsWith('#')) return tryNormalizeHex(css) ?? css;\n if (!/^rgba?\\(/i.test(css)) return css;\n let rgba: readonly [number, number, number, number];\n try {\n rgba = parseColor(css);\n } catch {\n return css;\n }\n // An alpha written out is kept, `ff` included: a fourth comma-separated value or one after `/`.\n return normalizeHex(rgbaToHex(rgba), /\\/|(?:,[^,]*){3}/.test(css) ? 'rgba' : 'rgb');\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 (!deepEqual(style[key], base[key], { undefinedAsAbsent: true })) 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, OUTLINE_ATTR, 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, missing, marked } = shapeOf(node.outline);\n if (missing) out.warnings.add('DOT has no shape for some outlines; they were written as boxes.');\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 marked ? `${OUTLINE_ATTR}=${dotId(node.outline as string)}` : 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 edge.endLabels?.from ? `taillabel=${quoteLabel([edge.endLabels.from])}` : null,\n edge.endLabels?.to ? `headlabel=${quoteLabel([edge.endLabels.to])}` : 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 kinds: ['graph'],\n};\n","/** The native format: a {@link DiagramDocument} written out as JSON, which carries everything the model holds. */\nimport type { DiagramDocument, DiagramFormat, DocumentPage, 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 // Files written before pages had kinds hold only graphs.\n const pages = document.pages.map((p) => ({ ...p, kind: p.kind ?? 'graph' }) as DocumentPage);\n return { document: { ...document, pages }, 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 kinds: ['graph', 'sequence', 'plot'],\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\ntype StylePart = string | [string, string | number];\n\n/** A figure drawn over its label, as BPMN's events and gateways and the network devices are. */\nconst LABEL_BELOW: StylePart[] = [['verticalLabelPosition', 'bottom'], ['verticalAlign', 'top']];\nconst event = (outline: string): StylePart[] =>\n [['shape', 'mxgraph.bpmn.event'], ['outline', outline], ['symbol', 'general'], ...LABEL_BELOW];\nconst gateway = (...parts: StylePart[]): StylePart[] => [['shape', 'mxgraph.bpmn.gateway2'], ...parts, ...LABEL_BELOW];\nconst device = (name: string): StylePart[] => [['shape', `mxgraph.networks.${name}`], ...LABEL_BELOW];\n\n/**\n * Shapes by their style name, each with the style that writes it back. `when` narrows a name to the\n * cells whose style also holds that pair; an entry without `write` is read only. Read takes the first\n * entry that matches, write the first that names the outline.\n */\nexport const SHAPES: ReadonlyArray<{\n name: string;\n when?: readonly [string, string];\n outline: Exclude<Outline, object>;\n write?: readonly StylePart[];\n}> = [\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 { name: 'cylinder3', outline: 'cylinder', write: [['shape', 'cylinder3'], ['boundedLbl', 1], ['backgroundOutline', 1], ['size', 15]] },\n { name: 'document', outline: 'document', write: [['shape', 'document'], ['boundedLbl', 1]] },\n { name: 'note', outline: 'note', write: [['shape', 'note'], ['size', 20]] },\n { name: 'cloud', outline: 'cloud', write: ['ellipse', ['shape', 'cloud']] },\n { name: 'triangle', outline: 'triangle', write: ['triangle', ['direction', 'north']] },\n { name: 'cube', outline: 'cube', write: [['shape', 'cube'], ['boundedLbl', 1], ['flipH', 1]] },\n { name: 'folder', outline: 'folder', write: [['shape', 'folder'], ['tabPosition', 'left']] },\n { name: 'umlActor', outline: 'actor', write: [['shape', 'umlActor'], ['verticalLabelPosition', 'bottom'], ['verticalAlign', 'top']] },\n { name: 'doubleEllipse', outline: 'doubleEllipse', write: ['ellipse', ['shape', 'doubleEllipse']] },\n // As draw.io's UML palette (Sidebar-UML.js) writes a state machine's start, end, and fork or join.\n { name: 'startState', outline: 'start', write: ['ellipse', ['shape', 'startState']] },\n { name: 'endState', outline: 'end', write: ['ellipse', ['shape', 'endState']] },\n { name: 'line', outline: 'bar', write: [['shape', 'line']] },\n { name: 'mxgraph.bpmn.event', when: ['outline', 'standard'], outline: 'event', write: event('standard') },\n { name: 'mxgraph.bpmn.event', when: ['outline', 'catching'], outline: 'intermediateEvent', write: event('catching') },\n { name: 'mxgraph.bpmn.event', when: ['outline', 'throwing'], outline: 'intermediateEvent' },\n { name: 'mxgraph.bpmn.event', outline: 'event' },\n // As draw.io's own BPMN palette (Sidebar-BPMN.js) writes them: only exclusive, parallel and complex are a `gwType`;\n // the default, `event`, draws the event `outline` and `symbol` name inside the diamond.\n { name: 'mxgraph.bpmn.gateway2', when: ['gwType', 'exclusive'], outline: 'exclusiveGateway', write: gateway(['outline', 'none'], ['symbol', 'none'], ['gwType', 'exclusive']) },\n { name: 'mxgraph.bpmn.gateway2', when: ['gwType', 'parallel'], outline: 'parallelGateway', write: gateway(['outline', 'none'], ['symbol', 'none'], ['gwType', 'parallel']) },\n { name: 'mxgraph.bpmn.gateway2', when: ['gwType', 'complex'], outline: 'diamond' },\n { name: 'mxgraph.bpmn.gateway2', when: ['outline', 'end'], outline: 'inclusiveGateway', write: gateway(['outline', 'end'], ['symbol', 'general']) },\n { name: 'mxgraph.bpmn.gateway2', when: ['outline', 'catching'], outline: 'eventGateway', write: gateway(['outline', 'catching'], ['symbol', 'multiple']) },\n // What this package wrote before 2026-10-27, which draw.io draws as a bare diamond.\n { name: 'mxgraph.bpmn.gateway2', when: ['gwType', 'inclusive'], outline: 'inclusiveGateway' },\n { name: 'mxgraph.bpmn.gateway2', when: ['gwType', 'eventBased'], outline: 'eventGateway' },\n { name: 'mxgraph.bpmn.gateway2', outline: 'diamond' },\n {\n name: 'mxgraph.bpmn.task', when: ['isLoopSub', '1'], outline: 'subprocess',\n write: [['shape', 'mxgraph.bpmn.task'], ['taskMarker', 'abstract'], ['isLoopSub', 1], ['rounded', 1]],\n },\n { name: 'mxgraph.networks.server', outline: 'server', write: device('server') },\n { name: 'mxgraph.networks.router', outline: 'router', write: device('router') },\n { name: 'mxgraph.networks.switch', outline: 'switch', write: device('switch') },\n { name: 'mxgraph.networks.firewall', outline: 'firewall', write: device('firewall') },\n { name: 'mxgraph.networks.laptop', outline: 'laptop', write: device('laptop') },\n { name: 'mxgraph.networks.pc', outline: 'desktop', write: device('pc') },\n { name: 'mxgraph.networks.mobile', outline: 'phone', write: device('mobile') },\n { name: 'mxgraph.networks.printer', outline: 'printer', write: device('printer') },\n { name: 'mxgraph.networks.user_male', outline: 'user', write: device('user_male') },\n // mxgraph.networks has no globe; this is the Office set's.\n { name: 'mxgraph.office.concepts.globe_internet', outline: 'globe', write: [['shape', 'mxgraph.office.concepts.globe_internet'], ...LABEL_BELOW] },\n];\n\n/** The entry a cell's style reads as: its shape name, and the pair that narrows it where one does. */\nexport function shapeEntry(name: string | undefined, value: (key: string) => string | undefined): (typeof SHAPES)[number] | undefined {\n return SHAPES.find((s) => s.name === name && (s.when === undefined || value(s.when[0]) === s.when[1]));\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: 'triangle-hollow' },\n blockThin: { filled: 'arrow', hollow: 'triangle-hollow' }, 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 ERone: { filled: 'bar' }, ERmandOne: { filled: 'crow-one' }, ERmany: { filled: 'crow-many' },\n ERzeroToOne: { filled: 'crow-zero-one' }, ERoneToMany: { filled: 'crow-one-many' }, ERzeroToMany: { filled: 'crow-zero-many' },\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 'triangle-hollow': ['block', 0], 'crow-one': ['ERmandOne', 0], 'crow-many': ['ERmany', 0],\n 'crow-zero-one': ['ERzeroToOne', 0], 'crow-one-many': ['ERoneToMany', 0], 'crow-zero-many': ['ERzeroToMany', 0],\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, STADIUM_ARC, markerOf, shapeEntry } 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 = shapeEntry(shape, (key) => style.values.get(key));\n if (known !== undefined) return known.outline;\n if (styleFlag(style, 'rounded')) return (styleNumber(style, 'arcSize') ?? 0) >= STADIUM_ARC ? 'stadium' : 'roundRect';\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 italic: fontStyle !== undefined && (fontStyle & 2) === 2 ? 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, and not only because its shape is written that way. */\nexport function verticalAlignOf(style: CellStyle): DataNode['verticalAlign'] {\n const raw = style.values.get('verticalAlign') ?? '';\n const own = shapeEntry(shapeOf(style), (key) => style.values.get(key))?.write;\n if (own?.some((part) => Array.isArray(part) && part[0] === 'verticalAlign' && part[1] === raw)) return undefined;\n return VERTICAL[raw];\n}\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 children = page.childrenOf(cell.id).filter((c) => labelOf(c) !== undefined);\n const endOf = (c: RawCell) => {\n const g = geometryOf(c);\n return !g.relative ? null : g.x === -1 ? 'from' : g.x === 1 ? 'to' : null;\n };\n const ends = children.filter((c) => endOf(c) !== null);\n const labels = children.filter((c) => endOf(c) === null);\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 const endLabels = Object.fromEntries(ends.map((c) => [endOf(c)!, labelOf(c)!]));\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 ...(ends.length > 0 ? { endLabels } : {}),\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 { kind: 'graph', 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, type RowTextStyle,\n} from '@weasel-js/diagram';\nimport { rowLines } from '../rowLines';\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 if (outline === 'roundRect') return [['rounded', 1]];\n const shape = SHAPES.find((s) => s.outline === outline && s.write !== undefined);\n if (shape?.write !== 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 else if (outline !== 'rect') warn(`Shapes of kind \"${outline}\" 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 return rowLines(node, () => warn('Port rows and slots inside shapes were left out.'));\n}\n\n/** draw-style XML's `fontStyle`: bit 1 bold, bit 2 italic. */\nfunction fontBits(style: RowTextStyle): number | undefined {\n const bits = (style.bold === true ? 1 : 0) | (style.italic === true ? 2 : 0);\n return bits === 0 ? undefined : bits;\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', fontBits(style)]];\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\n/** A label on edge `parent` at one end, `x` -1 for its source and 1 for its target, as draw.io writes a multiplicity. */\nexport function endLabelXml(cell: { id: string; value: string; parent: string }, x: -1 | 1): string {\n const head = attrs([\n ['id', cell.id], ['value', cell.value], ['style', `edgeLabel;html=1;resizable=0;align=${x < 0 ? 'left' : 'right'};verticalAlign=bottom;`],\n ['vertex', '1'], ['connectable', '0'], ['parent', cell.parent],\n ]);\n return ` <mxCell${head}>\\n <mxGeometry${attrs([['x', x], ['relative', '1'], ['as', 'geometry']])}>\\n`\n + ' <mxPoint as=\"offset\" />\\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, endLabelIdOf, 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, endLabelXml } 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 const id = edge.id ?? edgeIdOf(edge);\n const ends = (['from', 'to'] as const).filter((end) => edge.endLabels?.[end])\n .map((end) => endLabelXml({ id: endLabelIdOf(id, end), value: edge.endLabels![end]!, parent: id }, end === 'from' ? -1 : 1));\n return edgeXml({ id, value: edge.label ?? '', style, parent: page.layer, source: edge.from, target: edge.to }, label, points)\n + ends.join('');\n}\n","/** One page of a document as a draw-style `<diagram>`: its shapes, regions, and groups as nested cells, then its edges. */\nimport { IDENTITY_POSE_COMPOSITION, 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 { GraphPage } 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: GraphPage, index: number, theme: DiagramTheme, warn: Warn): string {\n const laid = needsLayout(page) ? laidOutPage(page, { theme }) : page;\n const { data } = laid;\n // In world: the tree below makes each box relative to the cell holding it.\n const specs = new Map(diagramScene(data, { layout: 'none', theme, composition: IDENTITY_POSE_COMPOSITION }).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 { graphPagesOf, type DiagramDocument, type 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 = graphPagesOf(doc, 'Draw-style XML', warn).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 kinds: ['graph'],\n};\n","/** What every Mermaid diagram starts with: front matter, then a header naming its kind. */\n\n/** A JSON string's value, else the text between its quotes. */\nexport function jsonString(quoted: string): string {\n try {\n return JSON.parse(quoted) as string;\n } catch {\n return quoted.slice(1, -1);\n }\n}\n\n/** A `---` block before the diagram: its `title`, and how many characters and lines it takes. */\nexport interface FrontMatter {\n title?: string;\n length: number;\n lines: number;\n}\n\n/** The front matter at the start of `text`, `length` 0 when there is none. Newlines are `\\n`. */\nexport function frontMatter(text: string): FrontMatter {\n const front = /^---[ \\t]*\\n([\\s\\S]*?)\\n---[ \\t]*(?:\\n|$)/.exec(text);\n if (front === null) return { length: 0, lines: 0 };\n const t = /^title:[ \\t]*(.*)$/m.exec(front[1]!)?.[1]?.trim();\n const title = t === undefined ? undefined : /^\".*\"$/.test(t) ? jsonString(t) : /^'.*'$/.test(t) ? t.slice(1, -1).replace(/''/g, \"'\") : t;\n return {\n ...(title !== undefined ? { title } : {}),\n length: front[0].length,\n lines: front[0].split('\\n').length - (front[0].endsWith('\\n') ? 1 : 0),\n };\n}\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 let directive = false;\n for (; k < lines.length; k++) {\n const l = lines[k]!.trim();\n if (directive || l.startsWith('%%{')) {\n directive = !l.includes('}%%');\n continue;\n }\n if (l === '' || l.startsWith('%%')) continue;\n return { word: /^[^\\s;]+/.exec(l)![0], text: l, line: k + 1 };\n }\n return null;\n}\n\n/** Every Mermaid diagram kind's header word but a flowchart's, whose `graph` a DOT file starts with too, so a file of a\n * kind not read is still recognized and named. */\nexport const MERMAID_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 * A line-oriented Mermaid diagram as its statements: one per line, each with\n * its line number and indent, front matter, `%%` comments, `%%{…}%%`\n * directives, and `accTitle`/`accDescr` read off first. Every kind but the\n * flowchart, whose statements run several to a line, reads its text this way.\n */\nimport type { Warnings } from '../../graphRead';\nimport { lineError } from '../../lineError';\nimport { frontMatter } from './header';\n\n/** One statement, trimmed. */\nexport interface Statement {\n text: string;\n line: number;\n /** Its leading whitespace's width, a tab counting as four. */\n indent: number;\n}\n\n/** A diagram's statements, and what came before and around them. */\nexport interface MermaidSource {\n /** The header line: the diagram's kind, and anything after it. */\n header: Statement;\n body: Statement[];\n title?: string;\n accTitle?: string;\n accDescr?: string;\n /** How many `%%{…}%%` directives there were. */\n directives: number;\n}\n\nconst widthOf = (lead: string): number => [...lead].reduce((n, c) => n + (c === '\\t' ? 4 : 1), 0);\n\n/** Splits `text` into statements. Throws, naming the line, on an `accDescr { … }` never closed or a diagram with no header. */\nexport function statementsOf(text: string): MermaidSource {\n const source = text.replace(/\\r\\n?/g, '\\n');\n const front = frontMatter(source);\n const raw = source.slice(front.length).split('\\n');\n const out: Statement[] = [];\n let directives = 0;\n let accTitle: string | undefined;\n let accDescr: string | undefined;\n for (let k = 0; k < raw.length; k++) {\n const line = front.lines + k + 1;\n const full = raw[k]!;\n const trimmed = full.trim();\n if (trimmed.startsWith('%%{')) {\n directives++;\n while (!raw[k]!.includes('}%%') && k < raw.length - 1) k++;\n continue;\n }\n if (trimmed === '' || trimmed.startsWith('%%')) continue;\n const acc = /^acc(Title|Descr)\\s*(?::\\s*(.*)|\\{\\s*(.*))$/.exec(trimmed);\n if (acc !== null && acc[3] === undefined) {\n if (acc[1] === 'Title') accTitle = acc[2]!.trim();\n else accDescr = acc[2]!.trim();\n continue;\n }\n if (acc !== null) {\n const lines = [acc[3]!];\n for (k++; k < raw.length && !raw[k]!.includes('}'); k++) lines.push(raw[k]!.trim());\n if (k >= raw.length) throw lineError('Mermaid', line, 'an accDescr block is never closed');\n lines.push(raw[k]!.slice(0, raw[k]!.indexOf('}')).trim());\n accDescr = lines.filter((l) => l !== '').join('\\n');\n continue;\n }\n out.push({ text: trimmed, line, indent: widthOf(/^\\s*/.exec(full)![0]) });\n }\n const [header, ...body] = out;\n if (header === undefined) throw lineError('Mermaid', front.lines + 1, 'the diagram has no header');\n return {\n header, body, directives,\n ...(front.title !== undefined ? { title: front.title } : {}),\n ...(accTitle !== undefined ? { accTitle } : {}),\n ...(accDescr !== undefined ? { accDescr } : {}),\n };\n}\n\n/** The page name `src` gives: its title, else its accessible title. Warns of what a page does not hold. */\nexport function pageNameOf(src: MermaidSource, warnings: Warnings): string | undefined {\n if (src.directives > 0) warnings.add('Mermaid configuration directives were dropped.');\n if (src.accDescr !== undefined) warnings.add('Mermaid accessible descriptions were dropped.');\n if (src.title !== undefined && src.accTitle !== undefined) warnings.add('Mermaid accessible titles were dropped; the page is named by the title.');\n return src.title ?? src.accTitle;\n}\n\n/** The front matter naming a page, as lines to start a diagram with. */\nexport const titleLines = (name: string | undefined): string[] => (name === undefined ? [] : ['---', `title: ${JSON.stringify(name)}`, '---']);\n","/** Mermaid text and ids, read and written alike by every diagram kind. */\nimport { markupLines } from '../../graphRead';\n\n/** Mermaid's text: markdown string quotes and bold dropped, entities and `<br>` read. */\nexport function 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\n/** `text` broken at spaces into lines of at most `width` characters, a longer word on a line of its own: how a\n * kind whose renderer wraps its text reads it into rows. */\nexport function wrapped(text: string, width = 32): string[] {\n const out: string[] = [];\n for (const word of text.split(/\\s+/).filter((w) => w !== '')) {\n const last = out.at(-1);\n if (last !== undefined && last.length + 1 + word.length <= width) out[out.length - 1] = `${last} ${word}`;\n else out.push(word);\n }\n return out;\n}\n\n/** `text` without the double quotes around it, if it has them. */\nexport const unquote = (text: string): string => (/^\".*\"$/s.test(text) ? text.slice(1, -1) : text);\n\nconst RESERVED = new Set(['end', 'subgraph', 'graph', 'flowchart', 'style', 'classdef', 'class', 'click', 'linkstyle', 'direction', 'default', 'call', 'href']);\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 with the characters Mermaid reads as syntax spelled as entities, lines joined by `<br>`. */\nexport function mermaidEscaped(lines: readonly string[]): string {\n return lines.map((l) => l.replace(/#/g, '#35;').replace(/\"/g, '#quot;').replace(/</g, '#lt;').replace(/>/g, '#gt;')).join('<br>');\n}\n\n/** Text as Mermaid quotes it: {@link mermaidEscaped}, in double quotes. */\nexport function mermaidText(lines: readonly string[]): string {\n const text = mermaidEscaped(lines);\n return `\"${text === '' ? ' ' : text}\"`;\n}\n","/** A Mermaid architecture diagram's grammar, read to statements with each one's line. */\nimport { lineError } from '../../lineError';\nimport { statementsOf, type MermaidSource } from '../common/lines';\nimport { unquote } from '../common/text';\n\n/** A side of a service, as an edge names it. */\nexport type ArchSide = 'L' | 'R' | 'T' | 'B';\n\n/** One end of an edge: a service or junction, the side it leaves by, and whether it meets the group around it. */\nexport interface ArchEnd {\n id: string;\n side: ArchSide;\n group: boolean;\n}\n\nexport type ArchStmt =\n | { kind: 'group'; id: string; icon?: string; title?: string; in?: string; line: number }\n | { kind: 'service'; id: string; icon?: string; title?: string; in?: string; line: number }\n | { kind: 'junction'; id: string; in?: string; line: number }\n | { kind: 'edge'; from: ArchEnd; to: ArchEnd; start: boolean; end: boolean; line: number };\n\n/** A whole architecture diagram. */\nexport interface ArchDiagram {\n source: MermaidSource;\n stmts: ArchStmt[];\n}\n\nconst ID = String.raw`[\\p{L}\\p{N}_][\\p{L}\\p{N}_-]*`;\nconst BOX = new RegExp(`^(group|service)\\\\s+(${ID})(?:\\\\(([^)]*)\\\\))?(?:\\\\[([^\\\\]]*)\\\\])?(?:\\\\s+in\\\\s+(${ID}))?$`, 'u');\nconst JUNCTION = new RegExp(`^junction\\\\s+(${ID})(?:\\\\s+in\\\\s+(${ID}))?$`, 'u');\nconst EDGE = new RegExp(`^(${ID})(\\\\{group\\\\})?\\\\s*:\\\\s*([LRTB])\\\\s*(<)?--(>)?\\\\s*([LRTB])\\\\s*:\\\\s*(${ID})(\\\\{group\\\\})?$`, 'u');\n\n/** Parses a Mermaid architecture diagram. Throws, naming the line, on text that is not one. */\nexport function parseArchitecture(text: string): ArchDiagram {\n const source = statementsOf(text);\n if (!/^architecture(-beta)?$/.test(source.header.text)) {\n throw lineError('Mermaid', source.header.line, `expected an architecture-beta header, found \"${source.header.text}\"`);\n }\n const stmts = source.body.map(({ text: t, line }): ArchStmt => {\n const box = BOX.exec(t);\n if (box !== null) {\n const [, kind, id, icon, title, parent] = box as unknown as [string, 'group' | 'service', string, string?, string?, string?];\n return {\n kind, id: id, line,\n ...(icon !== undefined && icon.trim() !== '' ? { icon: icon.trim() } : {}),\n ...(title !== undefined ? { title: unquote(title.trim()) } : {}),\n ...(parent !== undefined ? { in: parent } : {}),\n };\n }\n const junction = JUNCTION.exec(t);\n if (junction !== null) return { kind: 'junction', id: junction[1]!, line, ...(junction[2] !== undefined ? { in: junction[2] } : {}) };\n const edge = EDGE.exec(t);\n if (edge !== null) {\n const [, from, fromGroup, fromSide, start, end, toSide, to, toGroup] = edge as unknown as (string | undefined)[];\n return {\n kind: 'edge', line, start: start !== undefined, end: end !== undefined,\n from: { id: from!, side: fromSide as ArchSide, group: fromGroup !== undefined },\n to: { id: to!, side: toSide as ArchSide, group: toGroup !== undefined },\n };\n }\n throw lineError('Mermaid', line, `cannot read \"${t}\" as an architecture statement`);\n });\n return { source, stmts };\n}\n","/**\n * A Mermaid architecture diagram as a one-page document: services as nodes\n * whose outline is their icon's, junctions as dots, groups as containers, and\n * edges joined at the compass port each side names.\n */\nimport type { MarkerRef } from '@weasel-js/core';\nimport type { DataContainer, DataEdge, DataNode, Outline } from '@weasel-js/diagram';\nimport type { ImportResult } from '../../document';\nimport { Warnings, graphPage } from '../../graphRead';\nimport { lineError } from '../../lineError';\nimport { pageNameOf } from '../common/lines';\nimport { textLines } from '../common/text';\nimport { parseArchitecture, type ArchEnd, type ArchSide, type ArchStmt } from './parse';\n\n/** Mermaid's built-in icons, as the outline each is drawn with. */\nexport const ICON_OUTLINES: Readonly<Record<string, Outline>> = {\n cloud: 'cloud', database: 'cylinder', disk: 'disk', internet: 'globe', server: 'server',\n};\n/** A service with no icon, or one not built in. */\nexport const SERVICE_OUTLINE = 'roundRect';\n/** A side, as the compass port it names. */\nexport const SIDE_PORTS: Readonly<Record<ArchSide, string>> = { L: 'w', R: 'e', T: 'n', B: 's' };\n/** A junction's box. */\nexport const JUNCTION_SIZE = 12;\n\nclass ArchReader {\n readonly warnings = new Warnings();\n readonly nodes: DataNode[] = [];\n readonly groups = new Map<string, string | undefined>();\n readonly parent = new Map<string, string>();\n readonly order: string[] = [];\n readonly edges: DataEdge[] = [];\n\n place(id: string, parent: string | undefined): void {\n this.order.push(id);\n if (parent !== undefined) this.parent.set(id, parent);\n }\n\n outline(icon: string | undefined): Outline {\n if (icon === undefined) return SERVICE_OUTLINE;\n const known = ICON_OUTLINES[icon];\n if (known === undefined) this.warnings.list('Mermaid icons not built in were drawn as rounded boxes', icon);\n return known ?? SERVICE_OUTLINE;\n }\n\n /** An edge's end: the service, or the group around it when the end says `{group}`. */\n end(end: ArchEnd): { id: string; port?: string } {\n if (!end.group) return { id: end.id, port: SIDE_PORTS[end.side] };\n const group = this.parent.get(end.id);\n if (group === undefined) {\n this.warnings.add('Mermaid {group} on a service in no group was dropped.');\n return { id: end.id, port: SIDE_PORTS[end.side] };\n }\n return { id: group };\n }\n\n read(stmts: readonly ArchStmt[]): void {\n for (const s of stmts) {\n if (s.kind === 'group') {\n this.groups.set(s.id, s.title);\n this.place(s.id, s.in);\n if (s.icon !== undefined) this.warnings.list('Mermaid group icons were dropped', s.icon);\n } else if (s.kind === 'service') {\n this.nodes.push({ id: s.id, lines: textLines(s.title ?? s.id), outline: this.outline(s.icon) });\n this.place(s.id, s.in);\n } else if (s.kind === 'junction') {\n this.nodes.push({ id: s.id, lines: [], outline: 'start', width: JUNCTION_SIZE, height: JUNCTION_SIZE, padding: 0 });\n this.place(s.id, s.in);\n }\n }\n for (const s of stmts) if (s.kind === 'edge') this.edge(s);\n }\n\n edge(s: Extract<ArchStmt, { kind: 'edge' }>): void {\n for (const { id } of [s.from, s.to]) {\n if (!this.nodes.some((n) => n.id === id)) throw lineError('Mermaid', s.line, `no service or junction is named \"${id}\"`);\n }\n const from = this.end(s.from);\n const to = this.end(s.to);\n const colors = { ...(s.start ? { markerStart: 'arrow' as MarkerRef } : {}), ...(!s.end ? { markerEnd: null } : {}) };\n this.edges.push({\n from: from.id, to: to.id,\n ...(from.port !== undefined ? { fromPort: from.port } : {}),\n ...(to.port !== undefined ? { toPort: to.port } : {}),\n ...(Object.keys(colors).length > 0 ? { colors } : {}),\n });\n }\n}\n\n/** Reads a Mermaid architecture diagram into a one-page document of `notation` `'architecture'`. Throws, naming the\n * line, on text that is not one, or on a name no group holds. */\nexport function readArchitecture(text: string): ImportResult {\n const { source, stmts } = parseArchitecture(text);\n const r = new ArchReader();\n r.read(stmts);\n for (const s of stmts) {\n if (s.kind !== 'edge' && s.in !== undefined && !r.groups.has(s.in)) throw lineError('Mermaid', s.line, `no group is named \"${s.in}\"`);\n }\n const containers: DataContainer[] = [...r.groups].map(([id, title]) => {\n const members = r.order.filter((m) => r.parent.get(m) === id);\n return { id, role: 'container', ...(title !== undefined ? { label: textLines(title).join(' ') } : {}), ...(members.length > 0 ? { members } : {}) };\n });\n const name = pageNameOf(source, r.warnings);\n const page = graphPage({ ...(name !== undefined ? { name } : {}), direction: 'right', nodes: r.nodes, edges: r.edges, containers });\n return { document: { pages: [{ ...page, notation: 'architecture' }] }, warnings: r.warnings.all() };\n}\n","/** One graph page as a Mermaid architecture diagram: containers as groups, shapes as services, dots as junctions. */\nimport type { DataEdge, DataNode } from '@weasel-js/diagram';\nimport type { DiagramDocument, ExportResult, WriteOptions } from '../../document';\nimport { edgeStyleIn, graphOut, nodeLines, type Cluster, type GraphOut } from '../../graphWrite';\nimport { titleLines } from '../common/lines';\nimport { mermaidIds } from '../common/text';\nimport type { ArchSide } from './parse';\nimport { ICON_OUTLINES, SIDE_PORTS } from './read';\n\nconst OUTLINE_ICONS = new Map(Object.entries(ICON_OUTLINES).map(([icon, outline]) => [outline, icon]));\nconst PORT_SIDES = new Map(Object.entries(SIDE_PORTS).map(([side, port]) => [port, side as ArchSide]));\n\n/** A title as Mermaid's brackets hold it: one line, no closing bracket. */\nconst title = (lines: readonly string[]): string => lines.join(' ').replace(/\\]/g, ')');\n\nclass ArchWriter {\n readonly lines: string[] = [];\n readonly ids: Map<string, string>;\n /** Each cluster's id and the cluster it is in. */\n readonly parent = new Map<string, string>();\n readonly clusters = new Map<string, Cluster>();\n\n constructor(readonly out: GraphOut) {\n this.ids = mermaidIds([...out.page.data.nodes.map((n) => n.id), ...out.clusterIds]);\n const visit = (c: Cluster, parent: string | undefined) => {\n this.clusters.set(c.id, c);\n if (parent !== undefined) this.parent.set(c.id, parent);\n for (const n of c.nodes) this.parent.set(n, c.id);\n for (const k of c.clusters) visit(k, c.id);\n };\n for (const c of out.clusters) visit(c, undefined);\n }\n\n id(id: string): string {\n return this.ids.get(id) ?? id;\n }\n\n in(id: string): string {\n const p = this.parent.get(id);\n return p === undefined ? '' : ` in ${this.id(p)}`;\n }\n\n group(c: Cluster): void {\n this.lines.push(` group ${this.id(c.id)}${c.label !== undefined ? `[${title([c.label])}]` : ''}${this.in(c.id)}`);\n for (const k of c.clusters) this.group(k);\n }\n\n node(n: DataNode): void {\n const text = nodeLines(n, this.out.warnings, 'Mermaid');\n if (n.outline === 'start' && text.every((t) => t === '')) {\n this.lines.push(` junction ${this.id(n.id)}${this.in(n.id)}`);\n return;\n }\n const icon = typeof n.outline === 'string' ? OUTLINE_ICONS.get(n.outline) : undefined;\n if (icon === undefined && n.outline !== undefined && n.outline !== 'roundRect') {\n this.out.warnings.add('Mermaid architecture services wear only its built-in icons; other outlines were dropped.');\n }\n const named = text.length === 0 || (text.length === 1 && text[0] === n.id) ? '' : `[${title(text)}]`;\n this.lines.push(` service ${this.id(n.id)}${icon !== undefined ? `(${icon})` : ''}${named}${this.in(n.id)}`);\n }\n\n /** An edge's end: a service and its side, or a service in a group and `{group}`. Null for an empty group. */\n end(id: string, port: string | undefined, fallback: ArchSide): string | null {\n const c = this.clusters.get(id);\n const side = PORT_SIDES.get(port ?? '') ?? fallback;\n if (c === undefined) return `${this.id(id)}:${side}`;\n const inside = this.firstNode(c);\n return inside === undefined ? null : `${this.id(inside)}{group}:${side}`;\n }\n\n firstNode(c: Cluster): string | undefined {\n return c.nodes[0] ?? c.clusters.map((k) => this.firstNode(k)).find((n) => n !== undefined);\n }\n\n edge(e: DataEdge): void {\n const style = edgeStyleIn(this.out, e);\n const from = this.end(e.from, e.fromPort ?? e.routedPorts?.from, 'R');\n const to = this.end(e.to, e.toPort ?? e.routedPorts?.to, 'L');\n if (from === null || to === null) {\n this.out.warnings.add('Mermaid architecture edges meet a group through a service in it; edges to empty groups were dropped.');\n return;\n }\n if (e.label !== undefined && e.label !== '') this.out.warnings.add('Mermaid architecture edges have no labels; they were dropped.');\n const [name, side] = to.split(/:(?=[LRTB]$)/) as [string, string];\n const start = style.markerStart !== null && style.markerStart !== undefined ? '<' : '';\n const end = style.markerEnd !== null && style.markerEnd !== undefined ? '>' : '';\n this.lines.push(` ${from} ${start}--${end} ${side}:${name}`);\n }\n}\n\n/** Writes the page `opts.page` names, else the first, as a Mermaid architecture diagram. */\nexport function writeArchitecture(doc: DiagramDocument, opts?: WriteOptions): ExportResult {\n const out = graphOut(doc, opts, 'Mermaid');\n if (out === null) return { text: 'architecture-beta\\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 ArchWriter(out);\n w.lines.push(...titleLines(out.page.name), 'architecture-beta');\n for (const c of out.clusters) w.group(c);\n for (const n of out.page.data.nodes) w.node(n);\n for (const e of out.edges) w.edge(e);\n if (out.page.data.nodes.some((n) => n.colors !== undefined) || out.edges.some((e) => e.colors?.stroke !== undefined)) {\n out.warnings.add('Mermaid architecture diagrams have no styles; colors were dropped.');\n }\n return { text: `${w.lines.join('\\n')}\\n`, warnings: out.warnings.all() };\n}\n","/**\n * Mermaid's `classDef`, `class`, and `style`, which several diagram kinds\n * share: CSS-like `key:value` lists read into a node's own colors, and its\n * colors written back as one.\n */\nimport type { NodeStyle } from '@weasel-js/diagram';\nimport type { Warnings } from '../../graphRead';\nimport { hexColor } from '../../graphWrite';\n\n/** A style's `key:value` pairs, in order. */\nexport type StyleProps = [string, string][];\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\n/** `fill:#f96,stroke:#333` as its pairs. */\nexport const 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\nconst KEPT = ['fill', 'stroke', 'color', 'stroke-width', 'stroke-dasharray'];\n\n/** Warns of each property a diagram does not hold. */\nexport function checkProps(props: StyleProps, warnings: Warnings): void {\n for (const [key] of props) if (!KEPT.includes(key)) warnings.list('Mermaid style properties a diagram does not hold were dropped', key);\n}\n\n/** A CSS length in px as a number. */\nexport const px = (v: string): number => Number(v.replace(/px$/, ''));\n/** A `stroke-dasharray` as numbers. */\nexport const dashOf = (v: string): number[] => v.split(/[\\s,]+/).filter((s) => s !== '').map(px);\n\n/** A node's colors from the properties that apply to it, `undefined` for none. */\nexport function 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\n/** A node's colors as a style's properties, `fill:#ff0000,color:#000000`. */\nexport function 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:${style.strokeWidth}px` : null,\n style.dash !== undefined ? `stroke-dasharray:${style.dash.join(' ')}` : null,\n ].filter((p) => p !== null).join(',');\n}\n\n/** The `classDef`s, `class` assignments, and `style`s of one diagram, and the colors they give each node. */\nexport class StyleSheet {\n private readonly defs = new Map<string, StyleProps>();\n private readonly classes = new Map<string, string[]>();\n private readonly styles = new Map<string, StyleProps>();\n\n constructor(private readonly warnings: Warnings) {}\n\n classDef(names: readonly string[], props: StyleProps): void {\n checkProps(props, this.warnings);\n for (const name of names) this.defs.set(name, [...(this.defs.get(name) ?? []), ...props]);\n }\n\n assign(id: string, name: string): void {\n this.classes.set(id, [...(this.classes.get(id) ?? []), name]);\n }\n\n style(id: string, props: StyleProps): void {\n checkProps(props, this.warnings);\n this.styles.set(id, [...(this.styles.get(id) ?? []), ...props]);\n }\n\n /** `id`'s colors: the `default` class's, then its classes' in order, then its own style's. */\n colorsOf(id: string): Partial<NodeStyle> | undefined {\n const props = new Map<string, string>();\n const lists = [this.defs.get('default'), ...(this.classes.get(id) ?? []).map((c) => this.defs.get(c)), this.styles.get(id)];\n for (const list of lists) for (const [k, v] of list ?? []) props.set(k, v);\n return nodeColors(props);\n }\n\n /** Reads `classDef`, `style id …`, and, unless `withClass` is false, `class a,b name` statements; whether `text` was one. */\n statement(text: string, withClass = true): boolean {\n const m = /^(classDef|class|style)\\s+(\\S+)\\s*(.*)$/.exec(text);\n if (m === null || (!withClass && m[1] === 'class')) return false;\n const [, keyword, first, rest] = m as unknown as [string, string, string, string];\n if (keyword === 'classDef') this.classDef(first.split(','), propsOf(rest));\n else if (keyword === 'style') this.style(first, propsOf(rest));\n else for (const id of first.split(',')) this.assign(id.trim(), rest.trim());\n return true;\n }\n}\n","/** A Mermaid flowchart's tokens: ids, node shapes, links, and the raw rest of keyword lines. */\nimport { lineError } from '../../lineError';\nimport { frontMatter } from '../common/header';\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/** Each shape's openers, longest first, and the closers each may end with. */\nexport const 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\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 = frontMatter(this.text);\n this.title = front.title;\n this.i = front.length;\n this.line += front.lines;\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 lexFlowchart(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 { propsOf, type StyleProps } from '../common/styles';\nimport { lexFlowchart, type LinkHead, type MermaidShape, type MermaidToken } from './lex';\n\nexport type { StyleProps };\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\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\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\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 parseFlowchart(text: string): MermaidFlowchart {\n const { tokens, title, directives } = lexFlowchart(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, Outline } from '@weasel-js/diagram';\nimport type { ImportResult } from '../../document';\nimport { Membership, Warnings, graphPage } from '../../graphRead';\nimport { checkProps, dashOf, nodeColors, px } from '../common/styles';\nimport { textLines } from '../common/text';\nimport type { LinkHead, MermaidShape } from './lex';\nimport { parseFlowchart, 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\nexport const SHAPE_OUTLINES: Readonly<Partial<Record<MermaidShape, Outline>>> = {\n rect: 'rect', rounded: 'roundRect', stadium: 'stadium', circle: 'ellipse', 'double-circle': 'doubleEllipse', diamond: 'diamond',\n cylinder: 'cylinder',\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: 'roundRect', event: 'roundRect', stadium: 'stadium',\n pill: 'stadium', terminal: 'stadium', circle: 'ellipse', circ: 'ellipse', 'dbl-circ': 'doubleEllipse', 'double-circle': 'doubleEllipse',\n cyl: 'cylinder', cylinder: 'cylinder', db: 'cylinder', database: 'cylinder', doc: 'document', document: 'document',\n cloud: 'cloud', tri: 'triangle', triangle: 'triangle', extract: 'triangle',\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\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 checkProps(props, this.warnings);\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\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, its `notation` unset. Throws, naming the line, on text that is not one. */\nexport function readFlowchart(text: string): ImportResult {\n const chart = parseFlowchart(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","/** A Mermaid block diagram's grammar, read to statements with each one's line. */\nimport { lineError } from '../../lineError';\nimport { SHAPES, type MermaidShape } from '../flowchart/lex';\nimport { statementsOf, type MermaidSource, type Statement } from '../common/lines';\n\n/** A block: its id, its shape and text when it gives them, and the columns it spans. */\nexport interface BlockItem {\n kind: 'block';\n id: string;\n shape?: MermaidShape | 'arrow';\n text?: string;\n span?: number;\n}\n\n/** A link between blocks: its line, its heads, and its text. */\nexport interface BlockLink {\n stroke: 'normal' | 'thick' | 'dotted';\n start: boolean;\n end: boolean;\n text?: string;\n}\n\nexport type BlockStmt =\n | { kind: 'items'; items: (BlockItem | { kind: 'space'; n: number })[]; line: number }\n | { kind: 'links'; ends: BlockItem[]; links: BlockLink[]; line: number }\n | { kind: 'group'; id?: string; span?: number; stmts: BlockStmt[]; line: number }\n | { kind: 'columns'; n?: number; line: number }\n | { kind: 'style'; text: string; line: number }\n | { kind: 'other'; keyword: string; line: number };\n\n/** A whole block diagram. */\nexport interface BlockDiagram {\n source: MermaidSource;\n stmts: BlockStmt[];\n}\n\nconst WORD = /[\\p{L}\\p{N}_](?:[\\p{L}\\p{N}_]|[-.](?=[\\p{L}\\p{N}_]))*/uy;\nconst LABELED = /(<)?(--|==|-\\.)\\s*\"([^\"]*)\"\\s*(-{2,}|={2,}|\\.-+)(>)?/y;\nconst LINK = /(<)?(-{2,}|={2,}|-\\.+-)(>)?(?:\\|([^|]*)\\|)?/y;\nconst SPAN = /:(\\d+)/y;\n\nconst strokeOf = (body: string): BlockLink['stroke'] => (body.startsWith('=') ? 'thick' : body.includes('.') ? 'dotted' : 'normal');\n\n/** One line's blocks, spaces, and links, read left to right. */\nclass LineReader {\n i = 0;\n\n constructor(readonly text: string, readonly line: number) {}\n\n sticky(re: RegExp): RegExpExecArray | null {\n re.lastIndex = this.i;\n const m = re.exec(this.text);\n if (m !== null) this.i += m[0].length;\n return m;\n }\n\n span(): number | undefined {\n const m = this.sticky(SPAN);\n return m === null ? undefined : Number(m[1]);\n }\n\n link(): BlockLink | null {\n const labeled = this.sticky(LABELED);\n if (labeled !== null) {\n return { stroke: strokeOf(labeled[2]!), start: labeled[1] !== undefined, end: labeled[5] !== undefined, text: labeled[3]! };\n }\n const m = this.sticky(LINK);\n if (m === null) return null;\n return { stroke: strokeOf(m[2]!), start: m[1] !== undefined, end: m[3] !== undefined, ...(m[4] !== undefined ? { text: m[4].trim() } : {}) };\n }\n\n /** The text between `open` and `close`, quoted or bare. */\n shapeText(open: string, close: string): string {\n const from = this.i + open.length;\n const quoted = /^\\s*\"([^\"]*)\"\\s*/.exec(this.text.slice(from));\n const at = quoted !== null ? from + quoted[0].length : this.text.indexOf(close, from);\n if (at < 0 || !this.text.startsWith(close, at)) throw lineError('Mermaid', this.line, `a shape opened with \"${open}\" is never closed`);\n this.i = at + close.length;\n return quoted !== null ? quoted[1]! : this.text.slice(from, at).trim();\n }\n\n block(): BlockItem {\n const word = this.sticky(WORD);\n if (word === null) throw lineError('Mermaid', this.line, `cannot read \"${this.text.slice(this.i)}\" as a block`);\n const item: BlockItem = { kind: 'block', id: word[0] };\n if (this.text.startsWith('<[', this.i)) {\n item.shape = 'arrow';\n item.text = this.shapeText('<[', ']>');\n this.sticky(/\\([\\w, ]*\\)/y);\n }\n for (const [open, closers] of item.shape === undefined ? SHAPES : []) {\n if (!this.text.startsWith(open, this.i)) continue;\n const found = closers.find(([close]) => this.text.indexOf(close, this.i + open.length) >= 0);\n if (found === undefined) throw lineError('Mermaid', this.line, `a shape opened with \"${open}\" is never closed`);\n item.shape = found[1];\n item.text = this.shapeText(open, found[0]);\n break;\n }\n const span = this.span();\n if (span !== undefined) item.span = span;\n return item;\n }\n\n /** The line as a run of blocks and spaces, or as blocks joined by links. */\n read(): BlockStmt {\n const items: (BlockItem | { kind: 'space'; n: number })[] = [];\n const links: BlockLink[] = [];\n for (;;) {\n this.sticky(/\\s*/y);\n if (this.i >= this.text.length) break;\n const space = this.sticky(/space(?![\\p{L}\\p{N}_-])/uy);\n if (space !== null) {\n items.push({ kind: 'space', n: this.span() ?? 1 });\n continue;\n }\n const link = items.length > 0 ? this.link() : null;\n if (link !== null) links.push(link);\n else items.push(this.block());\n }\n if (links.length === 0) return { kind: 'items', items, line: this.line };\n const ends = items.filter((i): i is BlockItem => i.kind === 'block');\n if (ends.length !== links.length + 1 || ends.length !== items.length) {\n throw lineError('Mermaid', this.line, `cannot read \"${this.text}\" as blocks joined by links`);\n }\n return { kind: 'links', ends, links, line: this.line };\n }\n}\n\nconst GROUP = /^block(?::([\\p{L}\\p{N}_][\\p{L}\\p{N}_-]*))?(?::(\\d+))?$/u;\n\n/** Statements up to the `end` closing a group opened on line `opened`, or to the end when `opened` is null. */\nfunction block(lines: readonly Statement[], at: { i: number }, opened: number | null): BlockStmt[] {\n const out: BlockStmt[] = [];\n while (at.i < lines.length) {\n const { text, line } = lines[at.i++]!;\n if (text === 'end') {\n if (opened === null) throw lineError('Mermaid', line, '\"end\" closes no block');\n return out;\n }\n const group = GROUP.exec(text);\n const columns = /^columns\\s+(\\d+|auto)$/.exec(text);\n if (group !== null) {\n out.push({\n kind: 'group', line, stmts: block(lines, at, line),\n ...(group[1] !== undefined ? { id: group[1] } : {}), ...(group[2] !== undefined ? { span: Number(group[2]) } : {}),\n });\n } else if (columns !== null) out.push({ kind: 'columns', line, ...(columns[1] !== 'auto' ? { n: Number(columns[1]) } : {}) });\n else if (/^(classDef|class|style)\\s/.test(text)) out.push({ kind: 'style', text, line });\n else if (/^(click|direction)\\b/.test(text)) out.push({ kind: 'other', keyword: /^\\w+/.exec(text)![0], line });\n else out.push(new LineReader(text, line).read());\n }\n if (opened !== null) throw lineError('Mermaid', opened, 'a block opened here is never closed');\n return out;\n}\n\n/** Parses a Mermaid block diagram. Throws, naming the line, on text that is not one. */\nexport function parseBlockDiagram(text: string): BlockDiagram {\n const source = statementsOf(text);\n if (!/^block(-beta)?$/.test(source.header.text)) {\n throw lineError('Mermaid', source.header.line, `expected a block-beta header, found \"${source.header.text}\"`);\n }\n return { source, stmts: block(source.body, { i: 0 }, null) };\n}\n","/**\n * A Mermaid block diagram as a one-page document laid out by `grid`: blocks\n * as nodes in the flowchart's shapes, nested `block … end` groups as\n * containers, and `columns`, spans, and `space`s as the page layout's grid.\n */\nimport type { MarkerRef } from '@weasel-js/core';\nimport type { DataContainer, DataEdge, DataNode, EdgeStyle, GridOptions, Outline } from '@weasel-js/diagram';\nimport type { ImportResult, PageLayout } from '../../document';\nimport { Warnings, graphPage } from '../../graphRead';\nimport { pageNameOf } from '../common/lines';\nimport { StyleSheet } from '../common/styles';\nimport { textLines } from '../common/text';\nimport { SHAPE_OUTLINES } from '../flowchart/read';\nimport { parseBlockDiagram, type BlockItem, type BlockLink, type BlockStmt } from './parse';\n\n/** Between a block diagram's columns, and its rows. */\nexport const BLOCK_GAPS = { nodeGap: 24, rankGap: 40 } as const;\n\n/** The id an anonymous `block … end` reads as: `block-` and its place among them. */\nexport const anonymousGroupId = (n: number): string => `block-${n}`;\n\ninterface Grid { columns: Record<string, number>; spans: Record<string, number>; skips: Record<string, number> }\n\nclass BlockReader {\n readonly warnings = new Warnings();\n readonly styles = new StyleSheet(this.warnings);\n readonly nodes = new Map<string, { lines: string[]; outline: Outline }>();\n readonly groups = new Map<string, string[]>();\n readonly edges: DataEdge[] = [];\n readonly grid: Grid = { columns: {}, spans: {}, skips: {} };\n top: number | undefined;\n anonymous = 0;\n\n /** Declares `item`, a new one as the next of `members`, its shape and text when it gives them. */\n block(item: BlockItem, members: string[]): void {\n let node = this.nodes.get(item.id);\n if (node === undefined) {\n node = { lines: [item.id], outline: 'rect' };\n this.nodes.set(item.id, node);\n members.push(item.id);\n }\n if (item.text !== undefined) node.lines = textLines(item.text);\n if (item.shape === 'arrow') this.warnings.add('Mermaid block arrows read as rectangles; their directions were dropped.');\n else if (item.shape !== undefined) node.outline = SHAPE_OUTLINES[item.shape] ?? this.unknownShape(item.shape);\n if (item.span !== undefined && item.span > 1) this.grid.spans[item.id] = item.span;\n }\n\n unknownShape(name: string): Outline {\n this.warnings.list('Mermaid shapes read as rectangles', name);\n return 'rect';\n }\n\n link(link: BlockLink, from: string, to: string): void {\n const colors: Partial<EdgeStyle> = {\n ...(link.stroke === 'dotted' ? { dash: [4, 4] } : {}),\n ...(link.stroke === 'thick' ? { width: 3 } : {}),\n ...(link.start ? { markerStart: 'arrow' as MarkerRef } : {}),\n ...(!link.end ? { markerEnd: null } : {}),\n };\n const label = link.text === undefined ? [] : textLines(link.text).filter((l) => l !== '');\n this.edges.push({ from, to, ...(label.length > 0 ? { label: label.join(' ') } : {}), ...(Object.keys(colors).length > 0 ? { colors } : {}) });\n }\n\n /** Reads `stmts` into `level`, whose items in order are `members`. */\n walk(stmts: readonly BlockStmt[], level: string | null, members: string[]): void {\n let skip = 0;\n for (const s of stmts) {\n if (s.kind === 'items') {\n for (const item of s.items) {\n if (item.kind === 'space') {\n skip += item.n;\n continue;\n }\n const fresh = !this.nodes.has(item.id);\n this.block(item, members);\n if (fresh && skip > 0) this.grid.skips[item.id] = skip;\n skip = 0;\n }\n } else if (s.kind === 'links') {\n for (const end of s.ends) if (!this.groups.has(end.id)) this.block(end, members);\n s.links.forEach((link, k) => this.link(link, s.ends[k]!.id, s.ends[k + 1]!.id));\n } else if (s.kind === 'group') {\n const id = s.id ?? anonymousGroupId(++this.anonymous);\n const inner: string[] = [];\n this.groups.set(id, inner);\n members.push(id);\n if (skip > 0) this.grid.skips[id] = skip;\n skip = 0;\n if (s.span !== undefined && s.span > 1) this.grid.spans[id] = s.span;\n this.walk(s.stmts, id, inner);\n } else if (s.kind === 'columns') {\n if (level === null) this.top = s.n;\n else if (s.n !== undefined) this.grid.columns[level] = s.n;\n } else if (s.kind === 'style') this.styles.statement(s.text);\n else this.warnings.list('Mermaid statements a diagram does not hold were dropped', s.keyword);\n }\n if (skip > 0) this.warnings.add('Mermaid spaces after the last block in a row of blocks were dropped.');\n }\n\n /** The page layout's grid, with only what was given. */\n layout(): PageLayout {\n const { columns, spans, skips } = this.grid;\n const grid: GridOptions = {\n ...(this.top !== undefined ? { columns: this.top } : {}),\n ...(Object.keys(columns).length > 0 ? { groupColumns: columns } : {}),\n ...(Object.keys(spans).length > 0 ? { spans } : {}),\n ...(Object.keys(skips).length > 0 ? { skips } : {}),\n };\n return { name: 'grid', options: { ...BLOCK_GAPS, grid } };\n }\n}\n\n/** Reads a Mermaid block diagram into a one-page document of `notation` `'block'`, laid out by `grid`. Throws, naming\n * the line, on text that is not one. */\nexport function readBlockDiagram(text: string): ImportResult {\n const { source, stmts } = parseBlockDiagram(text);\n const r = new BlockReader();\n r.walk(stmts, null, []);\n const nodes: DataNode[] = [...r.nodes].map(([id, n]) => {\n const colors = r.styles.colorsOf(id);\n return { id, lines: n.lines, outline: n.outline, ...(colors !== undefined ? { colors } : {}) };\n });\n const containers: DataContainer[] = [...r.groups].map(([id, members]) => {\n const colors = r.styles.colorsOf(id);\n return { id, role: 'container', ...(members.length > 0 ? { members } : {}), ...(colors !== undefined ? { colors } : {}) };\n });\n const name = pageNameOf(source, r.warnings);\n const page = graphPage({ ...(name !== undefined ? { name } : {}), nodes, edges: r.edges, containers });\n return { document: { pages: [{ ...page, layout: r.layout(), notation: 'block' }] }, 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, 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';\nimport { styleProps } from '../common/styles';\nimport { mermaidIds, mermaidText } from '../common/text';\n\nconst HEADER: Readonly<Record<LayoutDirection, string>> = { down: 'TD', up: 'BT', right: 'LR', left: 'RL' };\nexport const BRACKETS: Readonly<Record<string, readonly [string, string]>> = {\n rect: ['[', ']'], stadium: ['([', '])'], diamond: ['{', '}'], ellipse: ['((', '))'], hexagon: ['{{', '}}'],\n parallelogram: ['[/', '/]'], trapezoid: ['[/', '\\\\]'], cylinder: ['[(', ')]'], doubleEllipse: ['(((', ')))'], roundRect: ['(', ')'],\n};\n\n/** BPMN's figures as the Mermaid shape nearest each: an event's circle, a gateway's diamond without its marker. */\nconst NEAREST: Readonly<Record<string, string>> = {\n event: 'ellipse', intermediateEvent: 'doubleEllipse', exclusiveGateway: 'diamond', parallelGateway: 'diamond',\n inclusiveGateway: 'diamond', eventGateway: 'diamond', subprocess: 'roundRect',\n};\n\nconst px = (n: number) => `${n}px`;\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 nearest = typeof outline === 'string' ? NEAREST[outline] : undefined;\n if (nearest !== undefined) {\n this.out.warnings.add('Mermaid has no BPMN figures; events were written as circles, gateways as diamonds without their markers, and subprocesses as rounded rectangles.');\n }\n const brackets = typeof outline === 'string' ? BRACKETS[nearest ?? outline] : undefined;\n if (brackets === undefined && typeof outline === 'string') {\n this.out.warnings.add('Mermaid has no bracket shape for some outlines; they were written as rectangles.');\n }\n const [open, close] = brackets ?? BRACKETS.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 if (e.endLabels !== undefined) this.out.warnings.add('Mermaid flowcharts have no labels at a connector\\'s ends; they 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 writeFlowchart(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","/** One graph page as a Mermaid block diagram: its grid layout's columns, spans, and spaces, and containers as groups. */\nimport type { DataEdge, DataNode, GridOptions } from '@weasel-js/diagram';\nimport type { DiagramDocument, ExportResult, WriteOptions } from '../../document';\nimport { edgeStyleIn, graphOut, nodeLines, type Cluster, type GraphOut } from '../../graphWrite';\nimport { titleLines } from '../common/lines';\nimport { styleProps } from '../common/styles';\nimport { mermaidIds, mermaidText } from '../common/text';\nimport { BRACKETS } from '../flowchart/write';\n\nconst ANONYMOUS = /^block-\\d+$/;\n\ntype Item = { node: DataNode } | { cluster: Cluster };\n\nclass BlockWriter {\n readonly lines: string[] = [];\n readonly ids: Map<string, string>;\n readonly grid: GridOptions;\n readonly order: ReadonlyMap<string, number>;\n\n constructor(readonly out: GraphOut) {\n this.ids = mermaidIds([...out.page.data.nodes.map((n) => n.id), ...out.clusterIds]);\n this.grid = out.page.layout?.name === 'grid' ? out.page.layout.options?.grid ?? {} : {};\n this.order = new Map(out.page.data.nodes.map((n, i) => [n.id, i]));\n }\n\n id(id: string): string {\n return this.ids.get(id) ?? id;\n }\n\n /** Where an item stands among its level's: its first node's place in the page. */\n first(item: Item): number {\n if ('node' in item) return this.order.get(item.node.id)!;\n const c = item.cluster;\n return Math.min(Infinity, ...c.nodes.map((id) => this.order.get(id)!), ...c.clusters.map((k) => this.first({ cluster: k })));\n }\n\n span(id: string): string {\n const n = this.grid.spans?.[id];\n return n !== undefined && n > 1 ? `:${n}` : '';\n }\n\n level(nodes: readonly DataNode[], clusters: readonly Cluster[], indent: string): void {\n const items: Item[] = [...nodes.map((node) => ({ node })), ...clusters.map((cluster) => ({ cluster }))];\n items.sort((a, b) => this.first(a) - this.first(b));\n for (const item of items) {\n const id = 'node' in item ? item.node.id : item.cluster.id;\n const skip = this.grid.skips?.[id] ?? 0;\n if (skip > 0) this.lines.push(`${indent}${skip === 1 ? 'space' : `space:${skip}`}`);\n if ('node' in item) this.lines.push(`${indent}${this.block(item.node)}${this.span(id)}`);\n else this.group(item.cluster, indent);\n }\n }\n\n block(node: DataNode): string {\n const text = nodeLines(node, this.out.warnings, 'Mermaid');\n const outline = node.outline ?? 'rect';\n const brackets = typeof outline === 'string' ? BRACKETS[outline] : undefined;\n if (brackets === undefined) this.out.warnings.add('Mermaid has no bracket shape for some outlines; they were written as rectangles.');\n const id = this.id(node.id);\n if (outline === 'rect' && id === node.id && text.length === 1 && text[0] === id) return id;\n const [open, close] = brackets ?? BRACKETS.rect!;\n return `${id}${open}${mermaidText(text)}${close}`;\n }\n\n group(c: Cluster, indent: string): void {\n const named = !ANONYMOUS.test(c.id) || this.span(c.id) !== '';\n this.lines.push(`${indent}block${named ? `:${this.id(c.id)}${this.span(c.id)}` : ''}`);\n const columns = this.grid.groupColumns?.[c.id];\n if (columns !== undefined) this.lines.push(`${indent} columns ${columns}`);\n this.level(c.nodes.map((id) => this.out.byId.get(id)!), c.clusters, `${indent} `);\n this.lines.push(`${indent}end`);\n if (c.label !== undefined) this.out.warnings.add('Mermaid block groups have no titles; container titles were dropped.');\n }\n\n link(e: DataEdge): string {\n const { markerStart, markerEnd, dash, width } = edgeStyleIn(this.out, e);\n const body = dash !== undefined ? '-.-' : (width ?? 0) >= 3 ? '==' : '--';\n const end = markerEnd !== null && markerEnd !== undefined;\n const start = markerStart !== null && markerStart !== undefined;\n const tail = end ? '>' : body === '--' ? '-' : body === '==' ? '=' : '';\n const from = this.id(e.from);\n const to = this.id(e.to);\n if (e.label !== undefined && e.label !== '') {\n const open = body === '-.-' ? '-.' : body;\n return ` ${from} ${start ? '<' : ''}${open} ${mermaidText([e.label])} ${body === '-.-' ? '.-' : body}${end ? '>' : ''} ${to}`;\n }\n return ` ${from} ${start ? '<' : ''}${body}${tail} ${to}`;\n }\n\n styles(): void {\n for (const n of this.out.page.data.nodes) {\n const props = n.colors !== undefined ? styleProps(n.colors) : '';\n if (props !== '') this.lines.push(` style ${this.id(n.id)} ${props}`);\n }\n for (const c of this.out.page.data.containers ?? []) {\n const props = c.colors !== undefined ? styleProps(c.colors) : '';\n if (props !== '') this.lines.push(` style ${this.id(c.id)} ${props}`);\n }\n }\n}\n\n/** Writes the page `opts.page` names, else the first, as a Mermaid block diagram. */\nexport function writeBlockDiagram(doc: DiagramDocument, opts?: WriteOptions): ExportResult {\n const out = graphOut(doc, opts, 'Mermaid');\n if (out === null) return { text: 'block-beta\\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 if (out.edges.some((e) => e.endLabels !== undefined)) out.warnings.add('Mermaid block diagrams have no labels at a connector\\'s ends; they were dropped.');\n const w = new BlockWriter(out);\n w.lines.push(...titleLines(out.page.name), 'block-beta');\n if (w.grid.columns !== undefined) w.lines.push(` columns ${w.grid.columns}`);\n w.level(out.nodes, out.clusters, ' ');\n for (const e of out.edges) w.lines.push(w.link(e));\n w.styles();\n return { text: `${w.lines.join('\\n')}\\n`, warnings: out.warnings.all() };\n}\n","/** A Mermaid C4 diagram's grammar: macro calls, boundaries opened by `{`, and a title, each with its line. */\nimport { lineError } from '../../lineError';\nimport { statementsOf, type MermaidSource } from '../common/lines';\n\n/** A macro's arguments: positional ones in order, and `$name=value` ones by name. */\nexport interface C4Args {\n positional: string[];\n named: Record<string, string>;\n}\n\nexport type C4Stmt =\n | { kind: 'call'; macro: string; args: C4Args; body?: C4Stmt[]; line: number }\n | { kind: 'title'; text: string; line: number };\n\n/** A whole C4 diagram, and the header naming which of the five it is. */\nexport interface C4Diagram {\n source: MermaidSource;\n header: C4Header;\n stmts: C4Stmt[];\n}\n\n/** The five C4 headers. */\nexport const C4_HEADERS = ['C4Context', 'C4Container', 'C4Component', 'C4Dynamic', 'C4Deployment'] as const;\nexport type C4Header = (typeof C4_HEADERS)[number];\n\n/** Splits a macro's arguments on commas outside quotes, each a quoted string, a bare word, or `$name=value`. */\nexport function argsOf(text: string): C4Args {\n const parts: string[] = [];\n let at = '';\n let quoted = false;\n for (const c of text) {\n if (c === '\"') quoted = !quoted;\n if (c === ',' && !quoted) {\n parts.push(at);\n at = '';\n } else at += c;\n }\n if (at.trim() !== '' || parts.length > 0) parts.push(at);\n const value = (v: string) => (/^\".*\"$/s.test(v) ? v.slice(1, -1) : v);\n const args: C4Args = { positional: [], named: {} };\n for (const p of parts.map((s) => s.trim())) {\n const named = /^\\$(\\w+)\\s*=\\s*(.*)$/s.exec(p);\n if (named !== null) args.named[named[1]!] = value(named[2]!.trim());\n else args.positional.push(value(p));\n }\n return args;\n}\n\nconst CALL = /^(\\w+)\\s*\\((.*)\\)\\s*(\\{)?$/;\n\n/** Statements up to the `}` closing a boundary opened on line `opened`, or to the end when `opened` is null. */\nfunction block(lines: MermaidSource['body'], at: { i: number }, opened: number | null): C4Stmt[] {\n const out: C4Stmt[] = [];\n while (at.i < lines.length) {\n const { text, line } = lines[at.i++]!;\n if (text === '}') {\n if (opened === null) throw lineError('Mermaid', line, '\"}\" closes no boundary');\n return out;\n }\n const title = /^title\\s+(.*)$/.exec(text);\n if (title !== null) {\n out.push({ kind: 'title', text: title[1]!.trim(), line });\n continue;\n }\n const call = CALL.exec(text);\n if (call === null) throw lineError('Mermaid', line, `cannot read \"${text}\" as a C4 statement`);\n const args = argsOf(call[2]!);\n out.push({ kind: 'call', macro: call[1]!, args, line, ...(call[3] !== undefined ? { body: block(lines, at, line) } : {}) });\n }\n if (opened !== null) throw lineError('Mermaid', opened, 'a boundary opened here is never closed');\n return out;\n}\n\n/** Parses a Mermaid C4 diagram. Throws, naming the line, on text that is not one. */\nexport function parseC4(text: string): C4Diagram {\n const source = statementsOf(text);\n const header = C4_HEADERS.find((h) => h === source.header.text);\n if (header === undefined) throw lineError('Mermaid', source.header.line, `expected a C4 header, found \"${source.header.text}\"`);\n return { source, header, stmts: block(source.body, { i: 0 }, null) };\n}\n","/**\n * C4's element kinds, as the macro naming each and the shape it reads into:\n * its outline, theme role, and the `<<kind>>` row that names it again on write.\n */\nimport type { Outline, Row, RowTextStyle } from '@weasel-js/diagram';\nimport { wrapped } from '../common/text';\n\n/** An element: what it is, whether it is a store or a queue of that, and whether it is outside the system. */\nexport interface C4Kind {\n base: 'person' | 'system' | 'container' | 'component';\n variant?: 'db' | 'queue';\n external: boolean;\n}\n\n/** The element macros: `Person`, `SystemDb_Ext`, `ContainerQueue`, … */\nconst ELEMENT = /^(Person|System|Container|Component)(Db|Queue)?(_Ext)?$/;\n\n/** The kind an element macro names, or null for a macro that is not an element. */\nexport function kindOfMacro(macro: string): C4Kind | null {\n const m = ELEMENT.exec(macro);\n if (m === null || (m[1] === 'Person' && m[2] !== undefined)) return null;\n return {\n base: m[1]!.toLowerCase() as C4Kind['base'], external: m[3] !== undefined,\n ...(m[2] !== undefined ? { variant: m[2].toLowerCase() as 'db' | 'queue' } : {}),\n };\n}\n\n/** The macro naming `kind`. */\nexport function macroOf(kind: C4Kind): string {\n const cap = (s: string) => s[0]!.toUpperCase() + s.slice(1);\n return `${cap(kind.base)}${kind.variant !== undefined ? cap(kind.variant) : ''}${kind.external ? '_Ext' : ''}`;\n}\n\n/** Whether an element of `kind` carries a technology: containers and components do. */\nexport const hasTechnology = (kind: C4Kind): boolean => kind.base === 'container' || kind.base === 'component';\n\n/** The text of the row naming `kind`: `external_system_db`. */\nexport const stereotypeOf = (kind: C4Kind): string =>\n `${kind.external ? 'external_' : ''}${kind.base}${kind.variant !== undefined ? `_${kind.variant}` : ''}`;\n\n/** The kind a `<<…>>` row names, or null. */\nexport function kindOfStereotype(text: string): C4Kind | null {\n const m = /^<<(external_)?(person|system|container|component)(?:_(db|queue))?>>$/.exec(text);\n if (m === null) return null;\n return { base: m[2] as C4Kind['base'], external: m[1] !== undefined, ...(m[3] !== undefined ? { variant: m[3] as 'db' | 'queue' } : {}) };\n}\n\n/** The outline an element of `kind` is drawn in. */\nexport const outlineOf = (kind: C4Kind): Outline =>\n (kind.base === 'person' ? 'person' : kind.variant === 'db' ? 'cylinder' : kind.variant === 'queue' ? 'queue' : 'roundRect');\n\n/** The theme role an element is drawn in: `muted` outside the system, else `accent`. */\nexport const roleOf = (kind: C4Kind): string => (kind.external ? 'muted' : 'accent');\n\n/** An element's box is at least this wide, so a description wraps rather than stretching it. */\nexport const ELEMENT_WIDTH = 200;\nconst SMALL: RowTextStyle = { fontSize: 10 };\n\n/** An element's rows: its `<<kind>>`, its name in bold, its `[technology]`, and its description, wrapped. */\nexport function elementRows(kind: C4Kind, name: string, technology: string | undefined, description: string | undefined): Row[] {\n return [\n { kind: 'label', text: `<<${stereotypeOf(kind)}>>`, style: SMALL },\n { kind: 'label', text: name, style: { bold: true } },\n ...(technology !== undefined && technology !== '' ? [{ kind: 'label' as const, text: `[${technology}]`, style: SMALL }] : []),\n ...wrapped(description ?? '').map((text): Row => ({ kind: 'label', text })),\n ];\n}\n\n/** An element's parts again from its rows; a box with no `<<kind>>` row is a system, or a person, store, or queue by its outline. */\nexport function elementParts(lines: readonly string[], outline: Outline | undefined, role: string | undefined) {\n const named = kindOfStereotype(lines[0] ?? '');\n const rest = named !== null ? lines.slice(1) : lines;\n const kind: C4Kind = named ?? {\n base: outline === 'person' || outline === 'actor' ? 'person' : 'system', external: role === 'muted',\n ...(outline === 'cylinder' ? { variant: 'db' as const } : outline === 'queue' ? { variant: 'queue' as const } : {}),\n };\n const tech = /^\\[(.*)\\]$/.exec(rest[1] ?? '');\n return {\n kind, name: rest[0] ?? '', technology: tech?.[1],\n description: rest.slice(tech !== null ? 2 : 1).join(' '),\n };\n}\n","/**\n * A Mermaid C4 diagram as a one-page document: elements as boxes of their\n * kind's outline and role, boundaries and deployment nodes as containers, and\n * relationships as edges labeled with their technology.\n */\nimport type { MarkerRef } from '@weasel-js/core';\nimport type { DataContainer, DataEdge, DataNode, EdgeStyle, NodeStyle } from '@weasel-js/diagram';\nimport type { ImportResult } from '../../document';\nimport { Warnings, decodeEntities, graphPage } from '../../graphRead';\nimport { lineError } from '../../lineError';\nimport { pageNameOf } from '../common/lines';\nimport { ELEMENT_WIDTH, elementRows, hasTechnology, kindOfMacro, outlineOf, roleOf } from './kinds';\nimport { parseC4, type C4Args, type C4Header, type C4Stmt } from './parse';\n\n/** Each boundary macro, as the type its container's label names after its title. */\nexport const BOUNDARY_TYPES: Readonly<Record<string, string | null>> = {\n Enterprise_Boundary: 'enterprise', System_Boundary: 'system', Container_Boundary: 'container', Boundary: null,\n Deployment_Node: null, Node: null, Node_L: null, Node_R: null,\n};\n\n/** Each relationship macro's ports, from end then to end, by the way it says the target lies. */\nconst REL_PORTS: Readonly<Record<string, readonly [string, string] | undefined>> = {\n U: ['n', 's'], Up: ['n', 's'], D: ['s', 'n'], Down: ['s', 'n'], L: ['w', 'e'], Left: ['w', 'e'], R: ['e', 'w'], Right: ['e', 'w'],\n};\nconst REL = /^(Rel|BiRel|RelIndex)(?:_(U|Up|D|Down|L|Left|R|Right|Back))?$/;\n\n/** The notation each header reads into. */\nexport const C4_NOTATIONS: Readonly<Record<C4Header, string>> = {\n C4Context: 'c4-context', C4Container: 'c4-container', C4Component: 'c4-component', C4Dynamic: 'c4-dynamic', C4Deployment: 'c4-deployment',\n};\n\nconst text = (s: string | undefined): string | undefined => (s === undefined || s === '' ? undefined : decodeEntities(s, true));\n\nclass C4Reader {\n readonly warnings = new Warnings();\n readonly nodes = new Map<string, DataNode>();\n readonly containers: DataContainer[] = [];\n readonly edges: DataEdge[] = [];\n title: string | undefined;\n\n /** Warns of what a macro's call gives that a diagram does not hold. */\n extras(args: C4Args, kept: number): void {\n if (args.positional.length > kept) this.warnings.add('Mermaid C4 sprites, tags, links, and descriptions a diagram does not hold were dropped.');\n for (const key of Object.keys(args.named)) this.warnings.list('Mermaid C4 arguments a diagram does not hold were dropped', `$${key}`);\n }\n\n walk(stmts: readonly C4Stmt[], members: string[]): void {\n for (const s of stmts) {\n if (s.kind === 'title') {\n this.title = s.text;\n continue;\n }\n const [alias, ...rest] = s.args.positional;\n const kind = kindOfMacro(s.macro);\n if (kind !== null) {\n if (alias === undefined) throw lineError('Mermaid', s.line, `${s.macro} needs an alias`);\n const tech = hasTechnology(kind) ? rest[1] : undefined;\n const description = hasTechnology(kind) ? rest[2] : rest[1];\n this.extras(s.args, hasTechnology(kind) ? 4 : 3);\n this.nodes.set(alias, {\n id: alias, rows: elementRows(kind, text(rest[0]) ?? alias, text(tech), text(description)),\n outline: outlineOf(kind), style: roleOf(kind), width: ELEMENT_WIDTH,\n });\n members.push(alias);\n } else if (s.macro in BOUNDARY_TYPES) this.boundary(s, members);\n else if (REL.test(s.macro)) this.rel(s);\n else if (s.macro === 'UpdateElementStyle') this.elementStyle(s);\n else if (s.macro === 'UpdateRelStyle') this.relStyle(s);\n else this.warnings.list('Mermaid C4 statements a diagram does not hold were dropped', s.macro);\n if (s.body !== undefined && !(s.macro in BOUNDARY_TYPES)) throw lineError('Mermaid', s.line, `${s.macro} opens no boundary`);\n }\n }\n\n boundary(s: Extract<C4Stmt, { kind: 'call' }>, members: string[]): void {\n const [alias, title, type] = s.args.positional;\n if (alias === undefined) throw lineError('Mermaid', s.line, `${s.macro} needs an alias`);\n const fixed = BOUNDARY_TYPES[s.macro];\n if (s.macro === 'Node_L' || s.macro === 'Node_R') this.warnings.add('Mermaid C4 deployment node sides were dropped.');\n this.extras(s.args, fixed !== null ? 2 : 3);\n const kindText = fixed ?? text(type);\n const label = `${text(title) ?? alias}${kindText !== undefined ? ` [${kindText}]` : ''}`;\n const inner: string[] = [];\n this.containers.push({ id: alias, role: 'container', label });\n members.push(alias);\n this.walk(s.body ?? [], inner);\n const at = this.containers.findIndex((c) => c.id === alias);\n if (inner.length > 0) this.containers[at] = { ...this.containers[at]!, members: inner };\n }\n\n rel(s: Extract<C4Stmt, { kind: 'call' }>): void {\n const [, macro, way] = REL.exec(s.macro)! as unknown as [string, string, string | undefined];\n const args = macro === 'RelIndex' ? s.args.positional.slice(1) : s.args.positional;\n if (macro === 'RelIndex') this.warnings.add('Mermaid C4 relationship indexes were dropped.');\n const [from, to, label, tech] = args;\n if (from === undefined || to === undefined) throw lineError('Mermaid', s.line, `${s.macro} needs two ends`);\n this.extras({ positional: args, named: s.args.named }, 4);\n const ports = way !== undefined ? REL_PORTS[way] : undefined;\n const back = way === 'Back';\n const colors: Partial<EdgeStyle> = {\n ...(macro === 'BiRel' || back ? { markerStart: 'arrow' as MarkerRef } : {}),\n ...(back ? { markerEnd: null } : {}),\n };\n const words = [text(label), text(tech) !== undefined ? `[${text(tech)}]` : undefined].filter((w) => w !== undefined);\n this.edges.push({\n from, to,\n ...(ports !== undefined ? { fromPort: ports[0], toPort: ports[1] } : {}),\n ...(words.length > 0 ? { label: words.join(' ') } : {}),\n ...(Object.keys(colors).length > 0 ? { colors } : {}),\n });\n }\n\n elementStyle(s: Extract<C4Stmt, { kind: 'call' }>): void {\n const [alias] = s.args.positional;\n const { bgColor, fontColor, borderColor, ...rest } = s.args.named;\n for (const key of Object.keys(rest)) this.warnings.list('Mermaid C4 arguments a diagram does not hold were dropped', `$${key}`);\n const colors: Partial<NodeStyle> = {\n ...(bgColor !== undefined ? { fill: bgColor } : {}), ...(borderColor !== undefined ? { stroke: borderColor } : {}),\n ...(fontColor !== undefined ? { text: fontColor } : {}),\n };\n const node = this.nodes.get(alias ?? '');\n const box = this.containers.findIndex((c) => c.id === alias);\n if (node !== undefined) this.nodes.set(node.id, { ...node, colors: { ...node.colors, ...colors } });\n else if (box >= 0) this.containers[box] = { ...this.containers[box]!, colors: { ...this.containers[box]!.colors, ...colors } };\n else throw lineError('Mermaid', s.line, `no element or boundary is named \"${alias ?? ''}\"`);\n }\n\n relStyle(s: Extract<C4Stmt, { kind: 'call' }>): void {\n const [from, to] = s.args.positional;\n const { textColor, lineColor, ...rest } = s.args.named;\n for (const key of Object.keys(rest)) this.warnings.list('Mermaid C4 arguments a diagram does not hold were dropped', `$${key}`);\n const colors: Partial<EdgeStyle> = { ...(lineColor !== undefined ? { stroke: lineColor } : {}), ...(textColor !== undefined ? { label: textColor } : {}) };\n for (const [i, e] of this.edges.entries()) {\n if (e.from === from && e.to === to) this.edges[i] = { ...e, colors: { ...e.colors, ...colors } };\n }\n }\n}\n\n/** Reads a Mermaid C4 diagram into a one-page document whose `notation` names its header (`'c4-context'`, …). Throws,\n * naming the line, on text that is not one. */\nexport function readC4(source: string): ImportResult {\n const { source: src, header, stmts } = parseC4(source);\n const r = new C4Reader();\n r.walk(stmts, []);\n const known = (id: string) => r.nodes.has(id) || r.containers.some((c) => c.id === id);\n const edges = r.edges.filter((e) => known(e.from) && known(e.to));\n if (edges.length < r.edges.length) r.warnings.add('Mermaid C4 relationships to elements never declared were dropped.');\n const named = pageNameOf(src, r.warnings);\n const name = r.title ?? named;\n const page = graphPage({ ...(name !== undefined ? { name } : {}), nodes: [...r.nodes.values()], edges, containers: r.containers });\n return { document: { pages: [{ ...page, notation: C4_NOTATIONS[header] }] }, warnings: r.warnings.all() };\n}\n","/** One graph page as a Mermaid C4 diagram: shapes as elements by their `<<kind>>` row, containers as boundaries. */\nimport type { DataEdge, DataNode, EdgeStyle, NodeStyle } from '@weasel-js/diagram';\nimport type { DiagramDocument, ExportResult, WriteOptions } from '../../document';\nimport { edgeStyleIn, graphOut, nodeLines, type Cluster, type GraphOut } from '../../graphWrite';\nimport { mermaidIds } from '../common/text';\nimport { elementParts, hasTechnology, macroOf } from './kinds';\nimport { C4_HEADERS } from './parse';\nimport { BOUNDARY_TYPES, C4_NOTATIONS } from './read';\n\nconst BY_TYPE = new Map(Object.entries(BOUNDARY_TYPES).filter(([, t]) => t !== null).map(([macro, t]) => [t!, macro]));\nconst REL_WAYS: Readonly<Record<string, string>> = { 'n s': 'U', 's n': 'D', 'w e': 'L', 'e w': 'R' };\n\n/** An argument in quotes, its own quotes made single. */\nconst quoted = (s: string): string => `\"${s.replace(/\"/g, \"'\")}\"`;\n\n/** Positional arguments, the first `bare` as ids and the rest quoted, trailing empty ones left off. */\nfunction args(list: readonly (string | undefined)[], bare = 1): string {\n const out = list.map((s) => s ?? '');\n while (out.length > bare + 1 && out.at(-1) === '') out.pop();\n return out.map((s, i) => (i < bare ? s : quoted(s))).join(', ');\n}\n\nclass C4Writer {\n readonly lines: string[] = [];\n readonly ids: Map<string, string>;\n readonly styles: string[] = [];\n\n constructor(readonly out: GraphOut, readonly deployment: boolean) {\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 element(n: DataNode, indent: string): void {\n const { kind, name, technology, description } = elementParts(nodeLines(n, this.out.warnings, 'Mermaid'), n.outline, n.style);\n if (technology !== undefined && !hasTechnology(kind)) this.out.warnings.add('Mermaid C4 people and systems have no technology; it was written into the description.');\n const tech = hasTechnology(kind) ? [technology] : [];\n const desc = !hasTechnology(kind) && technology !== undefined ? `[${technology}] ${description}`.trim() : description;\n this.lines.push(`${indent}${macroOf(kind)}(${args([this.id(n.id), name, ...tech, desc])})`);\n this.colors(n.id, n.colors);\n }\n\n colors(id: string, colors: Partial<NodeStyle> | undefined): void {\n const set = [\n colors?.fill !== undefined ? `$bgColor=${quoted(colors.fill)}` : null,\n colors?.text !== undefined ? `$fontColor=${quoted(colors.text)}` : null,\n colors?.stroke !== undefined ? `$borderColor=${quoted(colors.stroke)}` : null,\n ].filter((s) => s !== null);\n if (set.length > 0) this.styles.push(` UpdateElementStyle(${this.id(id)}, ${set.join(', ')})`);\n }\n\n boundary(c: Cluster, indent: string): void {\n const m = /^(.*?)(?: \\[([^\\]]*)\\])?$/s.exec(c.label ?? c.id)!;\n const [title, type] = [m[1]!, m[2]];\n const fixed = type !== undefined ? BY_TYPE.get(type) : undefined;\n const macro = fixed ?? (this.deployment ? 'Deployment_Node' : 'Boundary');\n this.lines.push(`${indent}${macro}(${args([this.id(c.id), title, ...(fixed === undefined ? [type] : [])])}) {`);\n for (const id of c.nodes) this.element(this.out.byId.get(id)!, `${indent} `);\n for (const k of c.clusters) this.boundary(k, `${indent} `);\n this.lines.push(`${indent}}`);\n const own = this.out.page.data.containers?.find((d) => d.id === c.id)?.colors;\n this.colors(c.id, own);\n }\n\n rel(e: DataEdge): void {\n const style = edgeStyleIn(this.out, e);\n const start = style.markerStart !== null && style.markerStart !== undefined;\n const end = style.markerEnd !== null && style.markerEnd !== undefined;\n const way = REL_WAYS[`${e.fromPort ?? ''} ${e.toPort ?? ''}`];\n const macro = start && !end ? 'Rel_Back' : start ? 'BiRel' : way !== undefined ? `Rel_${way}` : 'Rel';\n if (!start && !end) this.out.warnings.add('Mermaid C4 relationships always have a head; unmarked edges were written with one.');\n if (start && way !== undefined) this.out.warnings.add('Mermaid C4 has no direction for a two-way or backward relationship; its ports were dropped.');\n const m = /^(.*?)(?: \\[([^\\]]*)\\])?$/s.exec(e.label ?? '')!;\n this.lines.push(` ${macro}(${args([this.id(e.from), this.id(e.to), m[1]!, m[2]], 2)})`);\n this.relColors(e, e.colors);\n }\n\n relColors(e: DataEdge, colors: Partial<EdgeStyle> | undefined): void {\n const set = [\n colors?.label !== undefined ? `$textColor=${quoted(colors.label)}` : null,\n colors?.stroke !== undefined ? `$lineColor=${quoted(colors.stroke)}` : null,\n ].filter((s) => s !== null);\n if (set.length > 0) this.styles.push(` UpdateRelStyle(${this.id(e.from)}, ${this.id(e.to)}, ${set.join(', ')})`);\n }\n}\n\n/** Writes the page `opts.page` names, else the first, as a Mermaid C4 diagram of the kind its `notation` names. */\nexport function writeC4(doc: DiagramDocument, opts?: WriteOptions): ExportResult {\n const out = graphOut(doc, opts, 'Mermaid');\n if (out === null) return { text: 'C4Context\\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 header = C4_HEADERS.find((h) => C4_NOTATIONS[h] === out.page.notation) ?? 'C4Context';\n const w = new C4Writer(out, header === 'C4Deployment');\n w.lines.push(header);\n if (out.page.name !== undefined) w.lines.push(` title ${out.page.name.replace(/\\n/g, ' ')}`);\n for (const n of out.nodes) w.element(n, ' ');\n for (const c of out.clusters) w.boundary(c, ' ');\n for (const e of out.edges) w.rel(e);\n w.lines.push(...w.styles);\n return { text: `${w.lines.join('\\n')}\\n`, warnings: out.warnings.all() };\n}\n","/** A Mermaid class diagram's grammar, read to statements with each one's line. */\nimport { lineError } from '../../lineError';\nimport { statementsOf, type MermaidSource, type Statement } from '../common/lines';\n\n/** A relation's end: `<|` or `|>` inheritance, `*` composition, `o` aggregation, `<` or `>` an arrow. */\nexport type ClassHead = 'triangle' | 'diamond' | 'hollow-diamond' | 'arrow';\n\n/** One member row: an attribute, or a method when it has parentheses. */\nexport interface ClassMember {\n text: string;\n method: boolean;\n}\n\nexport type ClassStmt =\n | { kind: 'class'; id: string; label?: string; generic?: string; members: ClassMember[]; annotations: string[]; cssClass?: string; line: number }\n | { kind: 'member'; id: string; member: ClassMember; line: number }\n | { kind: 'annotation'; id: string; name: string; line: number }\n | {\n kind: 'relation'; from: string; to: string; start?: ClassHead; end?: ClassHead; dashed: boolean;\n fromCard?: string; toCard?: string; label?: string; line: number;\n }\n | { kind: 'namespace'; id: string; stmts: ClassStmt[]; line: number }\n | { kind: 'note'; for?: string; text: string; line: number }\n | { kind: 'cssClass'; ids: string[]; name: string; line: number }\n | { kind: 'direction'; value: string; line: number }\n | { kind: 'style'; text: string; line: number }\n | { kind: 'other'; keyword: string; line: number };\n\n/** A whole class diagram. */\nexport interface ClassDiagram {\n source: MermaidSource;\n stmts: ClassStmt[];\n}\n\nconst ID = String.raw`([\\w-]+)(?:~[^~\\s]*~)?`;\nconst CLASS = /^class\\s+([\\w-]+)(?:~([^~]*)~)?(?:\\s*\\[\\s*\"([^\"]*)\"\\s*\\])?(?::::([\\w-]+))?\\s*(\\{.*)?$/;\nconst RELATION = new RegExp(\n `^${ID}(?:\\\\s+\"([^\"]*)\")?\\\\s*(<\\\\||\\\\*|o|<)?(--|\\\\.\\\\.)(\\\\|>|\\\\*|o|>)?\\\\s*(?:\"([^\"]*)\"\\\\s*)?${ID}(?:\\\\s*:\\\\s*(.*))?$`,\n);\nconst HEADS: Readonly<Record<string, ClassHead>> = { '<|': 'triangle', '|>': 'triangle', '*': 'diamond', o: 'hollow-diamond', '<': 'arrow', '>': 'arrow' };\nconst MEMBER = /^([\\w-]+)\\s*:\\s*(.+)$/;\nconst NOTE = /^note\\s+(?:for\\s+([\\w-]+)\\s+)?\"(.*)\"$/;\n\nconst memberOf = (text: string): ClassMember => ({ text, method: text.includes('(') });\n\nfunction relationOf(m: RegExpExecArray, line: number): ClassStmt {\n const [, from, fromCard, start, body, end, toCard, to, label] = m as unknown as (string | undefined)[];\n return {\n kind: 'relation', from: from!, to: to!, dashed: body === '..', line,\n ...(start !== undefined ? { start: HEADS[start]! } : {}),\n ...(end !== undefined ? { end: HEADS[end]! } : {}),\n ...(fromCard !== undefined ? { fromCard } : {}),\n ...(toCard !== undefined ? { toCard } : {}),\n ...(label !== undefined && label.trim() !== '' ? { label: label.trim() } : {}),\n };\n}\n\nclass ClassParser {\n i = 0;\n\n constructor(readonly lines: readonly Statement[]) {}\n\n /** Statements up to the `}` closing a block opened on line `opened`, or to the end when `opened` is null. */\n block(opened: number | null): ClassStmt[] {\n const out: ClassStmt[] = [];\n while (this.i < this.lines.length) {\n const s = this.lines[this.i++]!;\n if (s.text === '}') {\n if (opened === null) throw lineError('Mermaid', s.line, '\"}\" closes no namespace');\n return out;\n }\n out.push(this.stmt(s));\n }\n if (opened !== null) throw lineError('Mermaid', opened, 'a block opened here is never closed');\n return out;\n }\n\n stmt({ text, line }: Statement): ClassStmt {\n const cls = CLASS.exec(text);\n if (cls !== null) return this.classDecl(cls, line);\n const ns = /^namespace\\s+([\\w.-]+)\\s*\\{$/.exec(text);\n if (ns !== null) return { kind: 'namespace', id: ns[1]!, stmts: this.block(line), line };\n const rel = RELATION.exec(text);\n if (rel !== null) return relationOf(rel, line);\n const ann = /^<<\\s*(.+?)\\s*>>\\s*([\\w-]+)$/.exec(text);\n if (ann !== null) return { kind: 'annotation', id: ann[2]!, name: ann[1]!, line };\n const note = NOTE.exec(text);\n if (note !== null) return { kind: 'note', ...(note[1] !== undefined ? { for: note[1] } : {}), text: note[2]!, line };\n const css = /^cssClass\\s+\"([^\"]+)\"\\s+([\\w-]+)$/.exec(text);\n if (css !== null) return { kind: 'cssClass', ids: css[1]!.split(',').map((s) => s.trim()), name: css[2]!, line };\n const dir = /^direction\\s+(TB|TD|BT|LR|RL)$/.exec(text);\n if (dir !== null) return { kind: 'direction', value: dir[1]!, line };\n if (/^(classDef|style)\\s/.test(text)) return { kind: 'style', text, line };\n const member = MEMBER.exec(text);\n if (member !== null) return { kind: 'member', id: member[1]!, member: memberOf(member[2]!.trim()), line };\n const keyword = /^(click|link|callback)\\b/.exec(text);\n if (keyword !== null) return { kind: 'other', keyword: keyword[1]!, line };\n throw lineError('Mermaid', line, `cannot read \"${text}\" as a class diagram statement`);\n }\n\n classDecl(m: RegExpExecArray, line: number): ClassStmt {\n const [, id, generic, label, cssClass, open] = m as unknown as (string | undefined)[];\n const members: ClassMember[] = [];\n const annotations: string[] = [];\n const take = (body: string) => {\n const ann = /^<<\\s*(.+?)\\s*>>$/.exec(body);\n if (ann !== null) annotations.push(ann[1]!);\n else if (body !== '') members.push(memberOf(body));\n };\n if (open !== undefined) {\n const inline = open.slice(1).trim();\n if (inline.endsWith('}')) take(inline.slice(0, -1).trim());\n else {\n if (inline !== '') take(inline);\n for (;;) {\n const s = this.lines[this.i++];\n if (s === undefined) throw lineError('Mermaid', line, `class ${id} is never closed`);\n if (s.text === '}') break;\n take(s.text);\n }\n }\n }\n return {\n kind: 'class', id: id!, members, annotations, line,\n ...(generic !== undefined ? { generic } : {}),\n ...(label !== undefined ? { label } : {}),\n ...(cssClass !== undefined ? { cssClass } : {}),\n };\n }\n}\n\n/** Parses a Mermaid class diagram. Throws, naming the line, on text that is not one. */\nexport function parseClassDiagram(text: string): ClassDiagram {\n const source = statementsOf(text);\n if (!/^classDiagram(-v2)?$/.test(source.header.text)) {\n throw lineError('Mermaid', source.header.line, `expected a classDiagram header, found \"${source.header.text}\"`);\n }\n return { source, stmts: new ClassParser(source.body).block(null) };\n}\n","/**\n * A Mermaid class diagram as a one-page document: each class a box of a name\n * row, a divider, attribute rows, a divider, and method rows; namespaces as\n * containers; notes as `note` shapes; relations as edges with UML ends.\n */\nimport type { MarkerRef } from '@weasel-js/core';\nimport type { DataContainer, DataEdge, DataNode, EdgeStyle, LayoutDirection, Row } from '@weasel-js/diagram';\nimport type { ImportResult } from '../../document';\nimport { Membership, Warnings, decodeEntities, graphPage } from '../../graphRead';\nimport { pageNameOf } from '../common/lines';\nimport { StyleSheet } from '../common/styles';\nimport { parseClassDiagram, type ClassHead, type ClassMember, type ClassStmt } from './parse';\n\nexport const DIRECTIONS: Readonly<Record<string, LayoutDirection>> = { TB: 'down', TD: 'down', BT: 'up', LR: 'right', RL: 'left' };\n\n/** Each end a relation draws, by its head and whether its line is dashed. */\nexport function headMarker(head: ClassHead | undefined, dashed: boolean): MarkerRef | null {\n if (head === undefined) return null;\n if (head === 'triangle') return 'triangle-hollow';\n if (head === 'diamond') return 'diamond';\n if (head === 'hollow-diamond') return 'diamond-hollow';\n return dashed ? 'arrow-open' : 'arrow';\n}\n\ninterface ClassDraft { label?: string; generic?: string; annotations: string[]; members: ClassMember[] }\n\nclass ClassReader {\n readonly warnings = new Warnings();\n readonly styles = new StyleSheet(this.warnings);\n readonly membership = new Membership(this.warnings, 'Mermaid');\n readonly classes = new Map<string, ClassDraft>();\n readonly notes: DataNode[] = [];\n readonly edges: DataEdge[] = [];\n readonly noteEdges: DataEdge[] = [];\n readonly namespaces: string[] = [];\n direction: string | undefined;\n\n draft(id: string, ns: string | null = null): ClassDraft {\n let d = this.classes.get(id);\n if (d === undefined) {\n d = { annotations: [], members: [] };\n this.classes.set(id, d);\n }\n this.membership.place(id, ns);\n return d;\n }\n\n walk(stmts: readonly ClassStmt[], ns: string | null): void {\n for (const s of stmts) {\n if (s.kind === 'class') {\n const d = this.draft(s.id, ns);\n if (s.label !== undefined) d.label = decodeEntities(s.label, true);\n if (s.generic !== undefined) d.generic = s.generic;\n d.annotations.push(...s.annotations);\n d.members.push(...s.members);\n if (s.cssClass !== undefined) this.styles.assign(s.id, s.cssClass);\n } else if (s.kind === 'member') this.draft(s.id).members.push(s.member);\n else if (s.kind === 'annotation') this.draft(s.id).annotations.push(s.name);\n else if (s.kind === 'relation') this.relation(s);\n else if (s.kind === 'namespace') {\n this.membership.openCluster(s.id, ns);\n if (!this.namespaces.includes(s.id)) this.namespaces.push(s.id);\n this.walk(s.stmts, s.id);\n } else if (s.kind === 'note') this.note(s.text, s.for);\n else if (s.kind === 'cssClass') for (const id of s.ids) this.styles.assign(id, s.name);\n else if (s.kind === 'direction') this.direction = s.value;\n else if (s.kind === 'style') this.styles.statement(s.text, false);\n else this.warnings.list('Mermaid statements a diagram does not hold were dropped', s.keyword);\n }\n }\n\n relation(s: Extract<ClassStmt, { kind: 'relation' }>): void {\n this.draft(s.from);\n this.draft(s.to);\n const start = headMarker(s.start, s.dashed);\n const end = headMarker(s.end, s.dashed);\n const colors: Partial<EdgeStyle> = {\n ...(s.dashed ? { dash: [4, 4] } : {}),\n ...(start !== null ? { markerStart: start } : {}),\n ...(end !== 'arrow' ? { markerEnd: end } : {}),\n };\n const card = (c: string) => decodeEntities(c, true);\n const endLabels = { ...(s.fromCard !== undefined ? { from: card(s.fromCard) } : {}), ...(s.toCard !== undefined ? { to: card(s.toCard) } : {}) };\n this.edges.push({\n from: s.from, to: s.to,\n ...(s.label !== undefined ? { label: s.label } : {}),\n ...(Object.keys(endLabels).length > 0 ? { endLabels } : {}),\n ...(Object.keys(colors).length > 0 ? { colors } : {}),\n });\n }\n\n note(text: string, target: string | undefined): void {\n const id = `note-${this.notes.length + 1}`;\n this.notes.push({ id, outline: 'note', lines: decodeEntities(text, true).split('\\\\n') });\n if (target === undefined) return;\n this.draft(target);\n this.noteEdges.push({ from: id, to: target, colors: { dash: [4, 4], markerEnd: null } });\n }\n}\n\n/** A class's rows: its annotations and name, a divider, its attributes, a divider, its methods. */\nexport function classRows(id: string, d: ClassDraft): Row[] {\n const label = (text: string): Row => ({ kind: 'label', text });\n const name = `${d.label ?? id}${d.generic !== undefined ? `<${d.generic}>` : ''}`;\n return [\n ...d.annotations.map((a) => label(`<<${a}>>`)), label(name), { kind: 'divider' },\n ...d.members.filter((m) => !m.method).map((m) => label(m.text)), { kind: 'divider' },\n ...d.members.filter((m) => m.method).map((m) => label(m.text)),\n ];\n}\n\n/** Reads a Mermaid class diagram into a one-page document of `notation` `'class'`. Throws, naming the line, on text that is not one. */\nexport function readClassDiagram(text: string): ImportResult {\n const { source, stmts } = parseClassDiagram(text);\n const r = new ClassReader();\n r.walk(stmts, null);\n const nodes: DataNode[] = [...r.classes].map(([id, d]) => {\n const colors = r.styles.colorsOf(id);\n return { id, rows: classRows(id, d), ...(colors !== undefined ? { colors } : {}) };\n });\n const containers: DataContainer[] = r.namespaces.map((id) => {\n const members = r.membership.members(id);\n return { id, role: 'container', label: id, ...(members.length > 0 ? { members } : {}) };\n });\n const name = pageNameOf(source, r.warnings);\n const direction = r.direction !== undefined ? DIRECTIONS[r.direction] : undefined;\n const page = graphPage({\n ...(name !== undefined ? { name } : {}),\n ...(direction !== undefined ? { direction } : {}),\n nodes: [...nodes, ...r.notes], edges: [...r.edges, ...r.noteEdges], containers,\n });\n return { document: { pages: [{ ...page, notation: 'class' }] }, warnings: r.warnings.all() };\n}\n","/** One graph page as a Mermaid class diagram: boxes as classes, containers as namespaces, `note` shapes as notes. */\nimport type { MarkerRef } from '@weasel-js/core';\nimport type { DataEdge, DataNode, LayoutDirection, Row } from '@weasel-js/diagram';\nimport type { DiagramDocument, ExportResult, WriteOptions } from '../../document';\nimport { edgeStyleIn, graphOut, type Cluster, type GraphOut } from '../../graphWrite';\nimport { titleLines } from '../common/lines';\nimport { styleProps } from '../common/styles';\nimport { mermaidIds } from '../common/text';\n\nconst HEADER: Readonly<Record<LayoutDirection, string>> = { down: 'TB', up: 'BT', right: 'LR', left: 'RL' };\n\n/** A class box's parts, from its rows: what is above the first divider, then between, then below the second. */\nexport function classParts(node: DataNode): { annotations: string[]; name: string; attributes: string[]; methods: string[] } {\n const rows: readonly Row[] = node.rows ?? (node.lines ?? []).map((text) => ({ kind: 'label', text }));\n const sections: string[][] = [[]];\n for (const row of rows) {\n if (row.kind === 'divider') sections.push([]);\n else if (row.kind === 'label') sections.at(-1)!.push(row.text);\n else if (row.kind === 'field') sections.at(-1)!.push(`${row.label} ${row.value}`);\n }\n const [head = [], ...rest] = sections;\n const annotations = head.filter((t) => /^<<.*>>$/.test(t)).map((t) => t.slice(2, -2));\n const names = head.filter((t) => !/^<<.*>>$/.test(t));\n const members = rest.flat();\n const attributes = rest.length > 1 ? rest[0]! : [...names.slice(1), ...members].filter((m) => !m.includes('('));\n const methods = rest.length > 1 ? rest.slice(1).flat() : [...names.slice(1), ...members].filter((m) => m.includes('('));\n return { annotations, name: names[0] ?? node.id, attributes, methods };\n}\n\nconst HEADS: Readonly<Record<string, readonly [string, string]>> = {\n 'triangle-hollow': ['<|', '|>'], diamond: ['*', '*'], 'diamond-hollow': ['o', 'o'], arrow: ['<', '>'], 'arrow-open': ['<', '>'],\n};\n\nclass ClassWriter {\n readonly lines: string[] = [];\n readonly ids: Map<string, string>;\n readonly notes = new Map<string, DataEdge | null>();\n\n constructor(readonly out: GraphOut) {\n this.ids = mermaidIds([...out.page.data.nodes.map((n) => n.id), ...out.clusterIds]);\n for (const n of out.page.data.nodes) {\n if (n.outline !== 'note') continue;\n const own = out.edges.filter((e) => e.from === n.id || e.to === n.id);\n const target = own.length === 1 && own[0]!.from === n.id ? own[0]! : null;\n if (own.length > (target !== null ? 1 : 0)) out.warnings.add('Mermaid notes join one class; their other connectors were dropped.');\n this.notes.set(n.id, target);\n }\n }\n\n id(id: string): string {\n return this.ids.get(id) ?? id;\n }\n\n node(node: DataNode, indent: string): void {\n if (this.notes.has(node.id)) return;\n const { annotations, name, attributes, methods } = classParts(node);\n const id = this.id(node.id);\n const generic = /^(.*)<([^<>]*)>$/.exec(name);\n const head = name === node.id ? id\n : generic !== null && generic[1] === node.id ? `${id}~${generic[2]}~`\n : `${id}[\"${name.replace(/\"/g, '#quot;')}\"]`;\n const body = [...annotations.map((a) => `<<${a}>>`), ...attributes, ...methods];\n if (body.length === 0) {\n this.lines.push(`${indent}class ${head}`);\n return;\n }\n this.lines.push(`${indent}class ${head} {`, ...body.map((b) => `${indent} ${b}`), `${indent}}`);\n if (attributes.some((a) => a.includes('('))) this.out.warnings.add('Mermaid reads a member with parentheses as a method; such attributes read back as methods.');\n }\n\n cluster(c: Cluster, indent: string): void {\n this.lines.push(`${indent}namespace ${this.id(c.id)} {`);\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}}`);\n if (c.label !== undefined && c.label !== c.id) this.out.warnings.add('Mermaid names a namespace by its id; container titles were dropped.');\n }\n\n head(marker: MarkerRef | null | undefined, side: 0 | 1): string {\n if (marker === null || marker === undefined) return '';\n const known = HEADS[typeof marker === 'string' ? marker : marker.key];\n if (known === undefined) this.out.warnings.add('Mermaid class diagrams have only UML ends; others were written as arrows.');\n return (known ?? HEADS.arrow!)[side];\n }\n\n relation(e: DataEdge): string {\n const style = edgeStyleIn(this.out, e);\n const card = (text: string | undefined) => (text !== undefined ? ` \"${text.replace(/\"/g, '#quot;')}\"` : '');\n const line = style.dash !== undefined ? '..' : '--';\n const label = e.label !== undefined && e.label !== '' ? ` : ${e.label}` : '';\n const arrow = `${this.head(style.markerStart, 0)}${line}${this.head(style.markerEnd, 1)}`;\n return ` ${this.id(e.from)}${card(e.endLabels?.from)} ${arrow}${card(e.endLabels?.to)} ${this.id(e.to)}${label}`;\n }\n\n noteLines(): void {\n for (const [id, target] of this.notes) {\n const text = (this.out.byId.get(id)!.lines ?? []).join('\\\\n').replace(/\"/g, '#quot;');\n this.lines.push(target === null ? ` note \"${text}\"` : ` note for ${this.id(target.to)} \"${text}\"`);\n }\n }\n\n styles(): void {\n for (const n of this.out.page.data.nodes) {\n const props = n.colors !== undefined && !this.notes.has(n.id) ? styleProps(n.colors) : '';\n if (props !== '') this.lines.push(` style ${this.id(n.id)} ${props}`);\n }\n }\n}\n\n/** Writes the page `opts.page` names, else the first, as a Mermaid class diagram. */\nexport function writeClassDiagram(doc: DiagramDocument, opts?: WriteOptions): ExportResult {\n const out = graphOut(doc, opts, 'Mermaid');\n if (out === null) return { text: 'classDiagram\\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 ClassWriter(out);\n const { page } = out;\n w.lines.push(...titleLines(page.name), 'classDiagram');\n if (page.direction !== undefined && page.direction !== 'down') w.lines.push(` direction ${HEADER[page.direction]}`);\n for (const n of out.nodes) w.node(n, ' ');\n for (const c of out.clusters) w.cluster(c, ' ');\n const noteEdges = new Set([...w.notes.values()].filter((e) => e !== null));\n for (const e of out.edges) {\n if (noteEdges.has(e) || w.notes.has(e.from) || w.notes.has(e.to)) continue;\n w.lines.push(w.relation(e));\n }\n w.noteLines();\n w.styles();\n return { text: `${w.lines.join('\\n')}\\n`, warnings: out.warnings.all() };\n}\n","/** A Mermaid entity-relationship diagram's grammar, read to statements with each one's line. */\nimport { lineError } from '../../lineError';\nimport { statementsOf, type MermaidSource, type Statement } from '../common/lines';\nimport { unquote } from '../common/text';\n\n/** How many of an entity a relationship's end allows. */\nexport type ErCardinality = 'zero-one' | 'one' | 'zero-many' | 'one-many';\n\n/** An entity's attribute: its type, name, keys, and comment. */\nexport interface ErAttribute {\n type: string;\n name: string;\n keys: string[];\n comment?: string;\n}\n\nexport type ErStmt =\n | { kind: 'entity'; id: string; label?: string; attributes: ErAttribute[]; cssClass?: string; line: number }\n | { kind: 'relation'; from: string; to: string; fromCard: ErCardinality; toCard: ErCardinality; dashed: boolean; label: string; line: number }\n | { kind: 'direction'; value: string; line: number }\n | { kind: 'style'; text: string; line: number };\n\n/** A whole ER diagram. */\nexport interface ErDiagram {\n source: MermaidSource;\n stmts: ErStmt[];\n}\n\nconst LEFT: Readonly<Record<string, ErCardinality>> = { '|o': 'zero-one', '||': 'one', '}o': 'zero-many', '}|': 'one-many' };\nconst RIGHT: Readonly<Record<string, ErCardinality>> = { 'o|': 'zero-one', '||': 'one', 'o{': 'zero-many', '|{': 'one-many' };\nconst RELATION = /^([\\w-]+)\\s*(\\|o|\\|\\||\\}o|\\}\\|)(--|\\.\\.)(o\\||\\|\\||o\\{|\\|\\{)\\s*([\\w-]+)\\s*:\\s*(.*)$/;\nconst ENTITY = /^([\\w-]+)(?:\\s*\\[\\s*(?:\"([^\"]*)\"|([^\\]]*))\\s*\\])?(?::::([\\w-]+))?\\s*(\\{\\s*\\}?)?$/;\nconst ATTRIBUTE = /^(\\S+)\\s+(\\S+)(?:\\s+((?:PK|FK|UK)(?:\\s*,\\s*(?:PK|FK|UK))*))?(?:\\s+\"([^\"]*)\")?$/;\n\nfunction attributeOf({ text, line }: Statement): ErAttribute {\n const m = ATTRIBUTE.exec(text);\n if (m === null) throw lineError('Mermaid', line, `cannot read \"${text}\" as an attribute: a type, a name, keys, and a quoted comment`);\n return {\n type: m[1]!, name: m[2]!, keys: m[3] === undefined ? [] : m[3].split(',').map((k) => k.trim()),\n ...(m[4] !== undefined ? { comment: m[4] } : {}),\n };\n}\n\nfunction entityOf(m: RegExpExecArray, lines: readonly Statement[], at: { i: number }, line: number): ErStmt {\n const [, id, quoted, plain, cssClass, open] = m as unknown as (string | undefined)[];\n const attributes: ErAttribute[] = [];\n if (open !== undefined && !open.includes('}')) {\n for (;;) {\n const s = lines[at.i++];\n if (s === undefined) throw lineError('Mermaid', line, `entity ${id} is never closed`);\n if (s.text === '}') break;\n attributes.push(attributeOf(s));\n }\n }\n const label = quoted ?? plain?.trim();\n return {\n kind: 'entity', id: id!, attributes, line,\n ...(label !== undefined && label !== '' ? { label } : {}),\n ...(cssClass !== undefined ? { cssClass } : {}),\n };\n}\n\n/** Parses a Mermaid ER diagram. Throws, naming the line, on text that is not one. */\nexport function parseErDiagram(text: string): ErDiagram {\n const source = statementsOf(text);\n if (source.header.text !== 'erDiagram') throw lineError('Mermaid', source.header.line, `expected an erDiagram header, found \"${source.header.text}\"`);\n const stmts: ErStmt[] = [];\n const at = { i: 0 };\n while (at.i < source.body.length) {\n const { text: t, line } = source.body[at.i++]!;\n const rel = RELATION.exec(t);\n if (rel !== null) {\n const [, from, left, body, right, to, label] = rel as unknown as string[];\n stmts.push({ kind: 'relation', from: from!, to: to!, fromCard: LEFT[left!]!, toCard: RIGHT[right!]!, dashed: body === '..', label: unquote(label!.trim()), line });\n continue;\n }\n const dir = /^direction\\s+(TB|TD|BT|LR|RL)$/.exec(t);\n if (dir !== null) stmts.push({ kind: 'direction', value: dir[1]!, line });\n else if (/^(classDef|class|style)\\s/.test(t)) stmts.push({ kind: 'style', text: t, line });\n else {\n const ent = ENTITY.exec(t);\n if (ent === null) throw lineError('Mermaid', line, `cannot read \"${t}\" as an entity or a relationship`);\n stmts.push(entityOf(ent, source.body, at, line));\n }\n }\n return { source, stmts };\n}\n","/**\n * A Mermaid ER diagram as a one-page document: each entity a box of its name\n * row, a divider, and a `field` row per attribute (its type as the label; its\n * name, keys, and comment as the value), and each relationship an edge with\n * a crow's-foot marker at each end, dashed when it does not identify.\n */\nimport type { MarkerRef } from '@weasel-js/core';\nimport type { DataEdge, DataNode, Row } from '@weasel-js/diagram';\nimport type { ImportResult } from '../../document';\nimport { Warnings, decodeEntities, graphPage } from '../../graphRead';\nimport { DIRECTIONS } from '../class/read';\nimport { pageNameOf } from '../common/lines';\nimport { StyleSheet } from '../common/styles';\nimport { parseErDiagram, type ErAttribute, type ErCardinality } from './parse';\n\n/** Each cardinality's crow's-foot marker. */\nexport const CROWS: Readonly<Record<ErCardinality, MarkerRef>> = {\n 'zero-one': 'crow-zero-one', one: 'crow-one', 'zero-many': 'crow-zero-many', 'one-many': 'crow-one-many',\n};\n\n/** An attribute's field value: its name, then its keys, then its comment in quotes. */\nexport const attributeValue = (a: ErAttribute): string =>\n [a.name, ...(a.keys.length > 0 ? [a.keys.join(', ')] : []), ...(a.comment !== undefined ? [`\"${a.comment}\"`] : [])].join(' ');\n\n/** Reads a Mermaid ER diagram into a one-page document of `notation` `'er'`. Throws, naming the line, on text that is not one. */\nexport function readErDiagram(text: string): ImportResult {\n const { source, stmts } = parseErDiagram(text);\n const warnings = new Warnings();\n const styles = new StyleSheet(warnings);\n const entities = new Map<string, { label?: string; attributes: ErAttribute[] }>();\n const entity = (id: string) => {\n if (!entities.has(id)) entities.set(id, { attributes: [] });\n return entities.get(id)!;\n };\n const edges: DataEdge[] = [];\n let direction: string | undefined;\n for (const s of stmts) {\n if (s.kind === 'entity') {\n const e = entity(s.id);\n if (s.label !== undefined) e.label = decodeEntities(s.label, true);\n e.attributes.push(...s.attributes);\n if (s.cssClass !== undefined) styles.assign(s.id, s.cssClass);\n } else if (s.kind === 'relation') {\n entity(s.from);\n entity(s.to);\n edges.push({\n from: s.from, to: s.to, ...(s.label !== '' ? { label: decodeEntities(s.label, true) } : {}),\n colors: { markerStart: CROWS[s.fromCard], markerEnd: CROWS[s.toCard], ...(s.dashed ? { dash: [4, 4] } : {}) },\n });\n } else if (s.kind === 'direction') direction = s.value;\n else styles.statement(s.text);\n }\n const nodes: DataNode[] = [...entities].map(([id, e]) => {\n const rows: Row[] = [\n { kind: 'label', text: e.label ?? id },\n ...(e.attributes.length > 0 ? [{ kind: 'divider' } as const] : []),\n ...e.attributes.map((a): Row => ({ kind: 'field', label: a.type, value: attributeValue(a) })),\n ];\n const colors = styles.colorsOf(id);\n return { id, rows, ...(colors !== undefined ? { colors } : {}) };\n });\n const name = pageNameOf(source, warnings);\n const dir = direction !== undefined ? DIRECTIONS[direction] : undefined;\n const page = graphPage({ ...(name !== undefined ? { name } : {}), ...(dir !== undefined ? { direction: dir } : {}), nodes, edges, containers: [] });\n return { document: { pages: [{ ...page, notation: 'er' }] }, warnings: warnings.all() };\n}\n","/** One graph page as a Mermaid ER diagram: boxes as entities, their rows past the name as attributes, edges as relationships. */\nimport type { MarkerRef } from '@weasel-js/core';\nimport type { DataNode, LayoutDirection, Row } from '@weasel-js/diagram';\nimport type { DiagramDocument, ExportResult, WriteOptions } from '../../document';\nimport { edgeStyleIn, graphOut, type GraphOut } from '../../graphWrite';\nimport { titleLines } from '../common/lines';\nimport { styleProps } from '../common/styles';\nimport { mermaidEscaped, mermaidIds } from '../common/text';\n\nconst HEADER: Readonly<Record<LayoutDirection, string>> = { down: 'TB', up: 'BT', right: 'LR', left: 'RL' };\n\n/** Each crow's-foot marker as the left and the right end of a relationship. */\nconst ENDS: Readonly<Record<string, readonly [string, string]>> = {\n 'crow-zero-one': ['|o', 'o|'], 'crow-one': ['||', '||'], 'crow-zero-many': ['}o', 'o{'], 'crow-one-many': ['}|', '|{'], 'crow-many': ['}|', '|{'],\n};\n\n/** An entity's name and attribute lines. A row past the name with no field is written as it reads. */\nfunction entityParts(node: DataNode): { name: string; attributes: string[] } {\n const rows: readonly Row[] = node.rows ?? (node.lines ?? []).map((text) => ({ kind: 'label', text }));\n const text = rows.filter((r) => r.kind === 'label' || r.kind === 'field');\n const [first, ...rest] = text;\n const name = first === undefined ? node.id : first.kind === 'label' ? first.text : `${first.label} ${first.value}`;\n return { name, attributes: rest.map((r) => (r.kind === 'field' ? `${r.label} ${r.value}` : (r as { text: string }).text)) };\n}\n\nfunction end(out: GraphOut, marker: MarkerRef | null | undefined, side: 0 | 1): string {\n const known = marker === null || marker === undefined ? undefined : ENDS[typeof marker === 'string' ? marker : marker.key];\n if (known === undefined) out.warnings.add('Mermaid ER relationships end in crow\\'s feet; other ends were written as exactly one.');\n return (known ?? ENDS['crow-one']!)[side];\n}\n\n/** Writes the page `opts.page` names, else the first, as a Mermaid ER diagram. */\nexport function writeErDiagram(doc: DiagramDocument, opts?: WriteOptions): ExportResult {\n const out = graphOut(doc, opts, 'Mermaid');\n if (out === null) return { text: 'erDiagram\\n', warnings: [] };\n const { page } = out;\n if (page.data.nodes.some((n) => n.at !== undefined)) out.warnings.add('Mermaid holds no positions; the page is laid out again when read.');\n if (out.clusters.length > 0) out.warnings.add('Mermaid ER diagrams have no containers; they were dropped.');\n const ids = mermaidIds(page.data.nodes.map((n) => n.id));\n const lines = [...titleLines(page.name), 'erDiagram'];\n if (page.direction !== undefined && page.direction !== 'down') lines.push(` direction ${HEADER[page.direction]}`);\n for (const n of page.data.nodes) {\n const { name, attributes } = entityParts(n);\n const head = name === n.id ? ids.get(n.id)! : `${ids.get(n.id)!}[\"${mermaidEscaped([name])}\"]`;\n if (attributes.length === 0) lines.push(` ${head}`);\n else lines.push(` ${head} {`, ...attributes.map((a) => ` ${a}`), ' }');\n }\n for (const e of out.edges) {\n if (!ids.has(e.from) || !ids.has(e.to)) continue;\n const style = edgeStyleIn(out, e);\n const body = style.dash !== undefined ? '..' : '--';\n lines.push(` ${ids.get(e.from)} ${end(out, style.markerStart, 0)}${body}${end(out, style.markerEnd, 1)} ${ids.get(e.to)} : \"${mermaidEscaped([e.label ?? ''])}\"`);\n }\n for (const n of page.data.nodes) {\n const props = n.colors !== undefined ? styleProps(n.colors) : '';\n if (props !== '') lines.push(` style ${ids.get(n.id)} ${props}`);\n }\n return { text: `${lines.join('\\n')}\\n`, warnings: out.warnings.all() };\n}\n","/** A Mermaid kanban board's grammar: columns, and the cards indented under each, with each one's line. */\nimport { lineError } from '../../lineError';\nimport { statementsOf, type MermaidSource } from '../common/lines';\n\n/** A column or card: its id when it gives one, its text, and a card's `@{ … }` metadata in order. */\nexport interface KanbanItem {\n id?: string;\n text: string;\n meta: [string, string][];\n line: number;\n}\n\n/** A whole board. */\nexport interface KanbanBoard {\n source: MermaidSource;\n columns: (KanbanItem & { cards: KanbanItem[] })[];\n}\n\nconst ITEM = /^([\\p{L}\\p{N}_][\\p{L}\\p{N}_-]*)?(?:\\[(.*)\\])?\\s*(?:@\\{(.*)\\})?$/u;\n\n/** `ticket: MC-1, assigned: 'knsv'` as its pairs, values unquoted. */\nexport function metaOf(meta: string, line: number): [string, string][] {\n const out: [string, string][] = [];\n const text = meta.trim();\n const re = /\\s*([\\w-]+)\\s*:\\s*('[^']*'|\"[^\"]*\"|[^,]*?)\\s*(?:,|$)/y;\n for (re.lastIndex = 0; re.lastIndex < text.length;) {\n const at = re.lastIndex;\n const m = re.exec(text);\n if (m === null || m[0] === '') throw lineError('Mermaid', line, `cannot read \"${text.slice(at).trim()}\" as card metadata`);\n out.push([m[1]!, /^(['\"]).*\\1$/.test(m[2]!) ? m[2]!.slice(1, -1) : m[2]!]);\n }\n return out;\n}\n\nfunction itemOf(text: string, line: number): KanbanItem {\n const m = ITEM.exec(text);\n if (m === null || (m[1] === undefined && m[2] === undefined)) throw lineError('Mermaid', line, `cannot read \"${text}\" as a column or a card`);\n const [, id, label, meta] = m as unknown as (string | undefined)[];\n return { ...(id !== undefined ? { id } : {}), text: (label ?? id!).trim(), meta: meta !== undefined ? metaOf(meta, line) : [], line };\n}\n\n/** Parses a Mermaid kanban board: a line at the shallowest indent is a column, a deeper one a card in it. Throws,\n * naming the line, on text that is not one. */\nexport function parseKanban(text: string): KanbanBoard {\n const source = statementsOf(text);\n if (source.header.text !== 'kanban') throw lineError('Mermaid', source.header.line, `expected a kanban header, found \"${source.header.text}\"`);\n const top = Math.min(...source.body.map((s) => s.indent));\n const columns: KanbanBoard['columns'] = [];\n for (const s of source.body) {\n const item = itemOf(s.text, s.line);\n if (s.indent === top) columns.push({ ...item, cards: [] });\n else if (columns.length === 0) throw lineError('Mermaid', s.line, 'a card comes before any column');\n else columns.at(-1)!.cards.push(item);\n }\n return { source, columns };\n}\n","/**\n * A Mermaid kanban board as a one-page document: one pool whose lanes run\n * along `x`, a lane per column, and each card a node in its column's lane,\n * its text wrapped into label rows and its metadata as `field` rows.\n */\nimport type { DataContainer, DataNode, Row } from '@weasel-js/diagram';\nimport type { ImportResult } from '../../document';\nimport { Warnings, decodeEntities, graphPage } from '../../graphRead';\nimport { PAGE_MARGIN } from '../../pageLayout';\nimport { lineError } from '../../lineError';\nimport { pageNameOf } from '../common/lines';\nimport { wrapped } from '../common/text';\nimport { parseKanban } from './parse';\n\n/** A card's width, and a column's: wide enough for one card, so cards stack down it. */\nexport const CARD_WIDTH = 180;\nexport const COLUMN_WIDTH = 220;\n/** A card's text wraps at this many characters. */\nconst CARD_WRAP = 26;\n/** The pool's id, unless a card or column already has it. */\nexport const BOARD_ID = 'board';\n/** The id a column or card giving none reads as, by its place among them. */\nexport const columnId = (n: number): string => `column-${n}`;\nexport const cardId = (n: number): string => `card-${n}`;\n\n/** Room above a column's first card (the pool's header and the lane's), below each card, and a card's row height,\n * for sizing the board to hold its longest column before the cards are measured. */\nconst HEADERS = 72;\nconst GAP = 12;\nconst ROW = 18;\n\n/** A card's rows: its text, wrapped, then a `field` row per metadata pair. */\nexport const cardRows = (text: string, meta: readonly [string, string][]): Row[] => [\n ...wrapped(text, CARD_WRAP).map((t): Row => ({ kind: 'label', text: t })),\n ...meta.map(([label, value]): Row => ({ kind: 'field', label, value })),\n];\n\n/** Reads a Mermaid kanban board into a one-page document of `notation` `'kanban'`. Throws, naming the line, on text\n * that is not one, or on an id two items share. */\nexport function readKanban(text: string): ImportResult {\n const { source, columns } = parseKanban(text);\n const warnings = new Warnings();\n const ids = new Set<string>();\n const claim = (id: string, line: number) => {\n if (ids.has(id)) throw lineError('Mermaid', line, `\"${id}\" names two items`);\n ids.add(id);\n return id;\n };\n let cards = 0;\n const nodes: DataNode[] = [];\n const lanes = columns.map((c, i) => {\n const lane = claim(c.id ?? columnId(i + 1), c.line);\n const members = c.cards.map((card) => {\n const id = claim(card.id ?? cardId(++cards), card.line);\n nodes.push({ id, rows: cardRows(decodeEntities(card.text, true), card.meta), width: CARD_WIDTH });\n return id;\n });\n if (c.meta.length > 0) warnings.add('Mermaid kanban column metadata was dropped.');\n return { id: lane, label: decodeEntities(c.text, true), size: COLUMN_WIDTH, ...(members.length > 0 ? { members } : {}) };\n });\n let board = BOARD_ID;\n for (let n = 2; ids.has(board); n++) board = `${BOARD_ID}-${n}`;\n const tallest = Math.max(0, ...columns.map((c) => c.cards.reduce((h, card) => h + (wrapped(card.text, CARD_WRAP).length + card.meta.length) * ROW + 16 + GAP, 0)));\n const name = pageNameOf(source, warnings);\n const pool: DataContainer = {\n id: board, role: 'pool', axis: 'x', lanes, ...(name !== undefined ? { label: name } : {}),\n box: { x: PAGE_MARGIN, y: PAGE_MARGIN, width: COLUMN_WIDTH * Math.max(1, lanes.length), height: HEADERS + GAP + tallest },\n };\n const page = graphPage({ ...(name !== undefined ? { name } : {}), nodes, edges: [], containers: [pool] });\n return { document: { pages: [{ ...page, notation: 'kanban' }] }, warnings: warnings.all() };\n}\n","/** One graph page as a Mermaid kanban board: a pool's lanes as columns, the shapes in each as its cards. */\nimport type { DataContainer, DataNode } from '@weasel-js/diagram';\nimport type { DiagramDocument, ExportResult, WriteOptions } from '../../document';\nimport { graphOut, type GraphOut } from '../../graphWrite';\nimport { titleLines } from '../common/lines';\nimport { mermaidIds } from '../common/text';\n\nconst GENERATED = /^(?:column|card)-\\d+$/;\n\n/** A metadata value, quoted with whichever quote it does not hold. */\nconst metaValue = (v: string): string => (v.includes(\"'\") ? `\"${v.replace(/\"/g, \"'\")}\"` : `'${v}'`);\n\n/** Text in a column's or card's brackets: one line, no closing bracket. */\nconst bracketed = (text: string): string => `[${text.replace(/\\]/g, ')')}]`;\n\nclass KanbanWriter {\n readonly lines: string[] = [];\n readonly ids: Map<string, string>;\n readonly written = new Set<string>();\n\n constructor(readonly out: GraphOut) {\n const lanes = (out.page.data.containers ?? []).flatMap((c) => (c.lanes ?? []).map((l) => l.id));\n this.ids = mermaidIds([...out.page.data.nodes.map((n) => n.id), ...lanes]);\n }\n\n head(id: string): string {\n return GENERATED.test(id) ? '' : this.ids.get(id) ?? id;\n }\n\n card(n: DataNode): void {\n this.written.add(n.id);\n const rows = n.rows ?? (n.lines ?? []).map((text) => ({ kind: 'label' as const, text }));\n const text = rows.flatMap((r) => (r.kind === 'label' ? [r.text] : [])).join(' ');\n const meta = rows.flatMap((r) => (r.kind === 'field' ? [`${r.label}: ${metaValue(r.value)}`] : []));\n if (rows.some((r) => r.kind !== 'label' && r.kind !== 'field')) this.out.warnings.add('Mermaid kanban cards hold text and metadata only; other rows were dropped.');\n this.lines.push(` ${this.head(n.id)}${bracketed(text)}${meta.length > 0 ? `@{ ${meta.join(', ')} }` : ''}`);\n }\n\n board(pool: DataContainer): void {\n for (const lane of pool.lanes ?? []) {\n this.lines.push(` ${this.head(lane.id)}${bracketed(lane.label ?? lane.id)}`);\n for (const id of lane.members ?? []) {\n const n = this.out.byId.get(id);\n if (n !== undefined) this.card(n);\n else this.out.warnings.add('Mermaid kanban columns hold cards only; containers in them were dropped.');\n }\n }\n }\n}\n\n/** Writes the page `opts.page` names, else the first, as a Mermaid kanban board: its first pool's lanes as columns. */\nexport function writeKanban(doc: DiagramDocument, opts?: WriteOptions): ExportResult {\n const out = graphOut(doc, opts, 'Mermaid', true);\n if (out === null) return { text: 'kanban\\n', warnings: [] };\n const w = new KanbanWriter(out);\n w.lines.push(...titleLines(out.page.name), 'kanban');\n const pools = (out.page.data.containers ?? []).filter((c) => c.role === 'pool');\n if (pools[0] !== undefined) w.board(pools[0]);\n if (pools.length > 1 || (out.page.data.containers ?? []).some((c) => c.role !== 'pool')) {\n out.warnings.add('Mermaid kanban boards are one pool; other pools and containers were dropped.');\n }\n if (out.page.data.nodes.some((n) => !w.written.has(n.id))) out.warnings.add('Mermaid kanban cards sit in columns; shapes in none were dropped.');\n if (out.edges.length > 0) out.warnings.add('Mermaid kanban boards have no connectors; they were dropped.');\n return { text: `${w.lines.join('\\n')}\\n`, warnings: out.warnings.all() };\n}\n","/** A Mermaid mind map's grammar: an indented tree of nodes, read with each one's line. */\nimport { lineError } from '../../lineError';\nimport { statementsOf, type MermaidSource } from '../common/lines';\n\n/** A node's shape, by the brackets around its text; `plain` for none. */\nexport type MindmapShape = 'plain' | 'square' | 'rounded' | 'circle' | 'bang' | 'cloud' | 'hexagon';\n\n/** One node and the nodes indented under it. */\nexport interface MindmapNode {\n id?: string;\n text: string;\n shape: MindmapShape;\n /** What `::icon(…)` and `:::` gave it, which a diagram does not hold. */\n icon?: string;\n classes?: string;\n children: MindmapNode[];\n line: number;\n}\n\n/** A whole mind map. */\nexport interface Mindmap {\n source: MermaidSource;\n root: MindmapNode | null;\n}\n\n/** Openers, longest first, each with its closer. */\nconst SHAPES: readonly (readonly [string, string, MindmapShape])[] = [\n ['((', '))', 'circle'], ['))', '((', 'bang'], ['{{', '}}', 'hexagon'], ['(', ')', 'rounded'], [')', '(', 'cloud'], ['[', ']', 'square'],\n];\n\nfunction nodeOf(text: string, line: number): MindmapNode {\n const at = text.search(/[([{)]/);\n if (at >= 0) {\n const id = text.slice(0, at).trim();\n const rest = text.slice(at);\n const shape = SHAPES.find(([open, close]) => rest.startsWith(open) && rest.endsWith(close) && rest.length >= open.length + close.length);\n if (shape !== undefined && /^[\\w-]*$/.test(id)) {\n const inner = rest.slice(shape[0].length, rest.length - shape[1].length).trim();\n return { ...(id !== '' ? { id } : {}), text: /^\".*\"$/s.test(inner) ? inner.slice(1, -1) : inner, shape: shape[2], children: [], line };\n }\n if (shape === undefined && /^[\\w-]*$/.test(id) && id !== '') throw lineError('Mermaid', line, `the shape around \"${rest}\" is never closed`);\n }\n return { text: /^\".*\"$/s.test(text) ? text.slice(1, -1) : text, shape: 'plain', children: [], line };\n}\n\n/** Parses a Mermaid mind map. Throws, naming the line, on text that is not one, or on a second root. */\nexport function parseMindmap(text: string): Mindmap {\n const source = statementsOf(text);\n if (source.header.text !== 'mindmap') throw lineError('Mermaid', source.header.line, `expected a mindmap header, found \"${source.header.text}\"`);\n let root: MindmapNode | null = null;\n const stack: { indent: number; node: MindmapNode }[] = [];\n for (const s of source.body) {\n const last = stack.at(-1)?.node;\n const icon = /^::icon\\((.*)\\)$/.exec(s.text);\n const classes = /^:::\\s*(.*)$/.exec(s.text);\n if (icon !== null || classes !== null) {\n if (last === undefined) throw lineError('Mermaid', s.line, 'an icon or class must follow a node');\n if (icon !== null) last.icon = icon[1]!;\n else last.classes = classes![1]!;\n continue;\n }\n const node = nodeOf(s.text, s.line);\n while (stack.length > 0 && stack.at(-1)!.indent >= s.indent) stack.pop();\n const parent = stack.at(-1)?.node;\n if (parent !== undefined) parent.children.push(node);\n else if (root === null) root = node;\n else throw lineError('Mermaid', s.line, 'a mind map has one root; this line is indented no deeper than it');\n stack.push({ indent: s.indent, node });\n }\n return { source, root };\n}\n","/**\n * A Mermaid mind map as a one-page document: each node a shape joined to its\n * parent by an unmarked edge, laid out on import by `radial`, the root in the\n * middle and its branches to both sides.\n */\nimport type { DataEdge, DataNode, Outline } from '@weasel-js/diagram';\nimport type { ImportResult, PageLayout } from '../../document';\nimport { Warnings, graphPage } from '../../graphRead';\nimport { pageNameOf } from '../common/lines';\nimport { textLines } from '../common/text';\nimport { parseMindmap, type MindmapNode, type MindmapShape } from './parse';\n\n/** Each bracketed shape's outline. A plain node has none of its own. */\nexport const SHAPE_OUTLINES: Readonly<Record<Exclude<MindmapShape, 'plain'>, Outline>> = {\n square: 'rect', rounded: 'roundRect', circle: 'ellipse', bang: 'cloud', cloud: 'cloud', hexagon: 'hexagon',\n};\n\n/** How a mind map lays out: the root in the middle, its branches balanced to its right and left. */\nexport const MINDMAP_LAYOUT: PageLayout = { name: 'radial' };\n\n/** The ids a mind map's nodes take, in order: its own where it gives one, else `n` and its place, made unique. */\nexport function mindmapIds(nodes: readonly { id?: string }[]): string[] {\n const taken = new Set(nodes.flatMap((n) => (n.id !== undefined ? [n.id] : [])));\n return nodes.map((n, k) => {\n if (n.id !== undefined) return n.id;\n let id = `n${k + 1}`;\n for (let m = 2; taken.has(id); m++) id = `n${k + 1}_${m}`;\n taken.add(id);\n return id;\n });\n}\n\n/** Reads a Mermaid mind map into a one-page document of `notation` `'mindmap'`. Throws, naming the line, on text that is not one. */\nexport function readMindmap(text: string): ImportResult {\n const { source, root } = parseMindmap(text);\n const warnings = new Warnings();\n const order: MindmapNode[] = [];\n const parents = new Map<MindmapNode, MindmapNode>();\n const visit = (n: MindmapNode) => {\n order.push(n);\n for (const c of n.children) {\n parents.set(c, n);\n visit(c);\n }\n };\n if (root !== null) visit(root);\n const ids = mindmapIds(order);\n const idOf = new Map(order.map((n, k) => [n, ids[k]!]));\n const nodes: DataNode[] = order.map((n) => {\n if (n.icon !== undefined) warnings.add('Mermaid mind map icons were dropped.');\n if (n.classes !== undefined) warnings.add('Mermaid mind map classes were dropped.');\n return { id: idOf.get(n)!, lines: textLines(n.text), ...(n.shape !== 'plain' ? { outline: SHAPE_OUTLINES[n.shape] } : {}) };\n });\n const edges: DataEdge[] = order.filter((n) => parents.has(n)).map((n) => ({\n from: idOf.get(parents.get(n)!)!, to: idOf.get(n)!, colors: { markerEnd: null },\n }));\n const name = pageNameOf(source, warnings);\n const page = graphPage({ ...(name !== undefined ? { name } : {}), nodes, edges, containers: [] });\n return { document: { pages: [{ ...page, layout: MINDMAP_LAYOUT, notation: 'mindmap' }] }, warnings: warnings.all() };\n}\n","/** One graph page as a Mermaid mind map: the tree its edges make from the root, indented, each node in its outline's brackets. */\nimport type { DataNode } from '@weasel-js/diagram';\nimport type { DiagramDocument, ExportResult, WriteOptions } from '../../document';\nimport { graphOut, nodeLines } from '../../graphWrite';\nimport { titleLines } from '../common/lines';\nimport { mermaidEscaped } from '../common/text';\nimport { mindmapIds } from './read';\n\nconst BRACKETS: Readonly<Record<string, readonly [string, string]>> = {\n rect: ['[', ']'], roundRect: ['(', ')'], ellipse: ['((', '))'], cloud: ['))', '(('], hexagon: ['{{', '}}'],\n};\n\n/** Writes the page `opts.page` names, else the first, as a Mermaid mind map. */\nexport function writeMindmap(doc: DiagramDocument, opts?: WriteOptions): ExportResult {\n const out = graphOut(doc, opts, 'Mermaid');\n if (out === null) return { text: 'mindmap\\n', warnings: [] };\n const { page, warnings } = out;\n if (out.clusters.length > 0) warnings.add('Mermaid mind maps have no containers; they were dropped.');\n if (out.edges.some((e) => e.label !== undefined || e.endLabels !== undefined)) warnings.add('Mermaid mind maps have no connector labels; they were dropped.');\n if (page.data.nodes.some((n) => n.colors !== undefined)) warnings.add('Mermaid mind maps hold no colors; they were dropped.');\n const children = new Map<string, string[]>();\n const hasParent = new Set<string>();\n for (const e of out.edges) {\n if (!out.byId.has(e.from) || !out.byId.has(e.to) || hasParent.has(e.to)) continue;\n children.set(e.from, [...(children.get(e.from) ?? []), e.to]);\n hasParent.add(e.to);\n }\n const roots = page.data.nodes.filter((n) => !hasParent.has(n.id));\n const order: { node: DataNode; depth: number }[] = [];\n const seen = new Set<string>();\n const visit = (id: string, depth: number) => {\n if (seen.has(id)) return;\n seen.add(id);\n order.push({ node: out.byId.get(id)!, depth });\n for (const c of children.get(id) ?? []) visit(c, depth + 1);\n };\n if (roots[0] !== undefined) visit(roots[0].id, 0);\n if (seen.size < page.data.nodes.length) warnings.add('Mermaid mind maps hold one tree; shapes outside the first root\\'s were dropped.');\n const generated = mindmapIds(order.map(() => ({})));\n const lines = [...titleLines(page.name), 'mindmap'];\n order.forEach(({ node, depth }, k) => {\n const text = mermaidEscaped(nodeLines(node, warnings, 'Mermaid'));\n const outline = typeof node.outline === 'string' ? node.outline : undefined;\n const brackets = outline === undefined ? undefined : BRACKETS[outline];\n if (node.outline !== undefined && brackets === undefined) warnings.add('Mermaid mind maps have five shapes; others were written plain.');\n const id = node.id === generated[k] ? '' : node.id;\n const plain = text.replace(/[()[\\]{}]/g, (c) => `#${c.charCodeAt(0)};`);\n lines.push(`${' '.repeat(depth + 1)}${brackets === undefined ? plain : `${id}${brackets[0]}${text}${brackets[1]}`}`);\n });\n return { text: `${lines.join('\\n')}\\n`, warnings: warnings.all() };\n}\n","/** The pieces of Mermaid's `sequenceDiagram` syntax both the reader and the writer know: arrows, participant types, and text. */\nimport type { Outline, SeqMessage } from '@weasel-js/diagram';\nimport { markupLines } from '../../graphRead';\n\n/** A message's arrow, as its line, head, and whether it has a head at both ends. */\nexport type Arrow = Pick<SeqMessage, 'line' | 'head'> & { both?: true; async?: true };\n\n/** Every arrow, longest first, so a match never stops at a shorter arrow's prefix. */\nexport const ARROWS: readonly (readonly [string, Arrow])[] = [\n ['<<-->>', { line: 'dashed', head: 'arrow', both: true }],\n ['<<->>', { line: 'solid', head: 'arrow', both: true }],\n ['-->>', { line: 'dashed', head: 'arrow' }],\n ['->>', { line: 'solid', head: 'arrow' }],\n ['--x', { line: 'dashed', head: 'cross' }],\n ['-x', { line: 'solid', head: 'cross' }],\n ['--)', { line: 'dashed', head: 'open', async: true }],\n ['-)', { line: 'solid', head: 'open', async: true }],\n ['-->', { line: 'dashed', head: 'none' }],\n ['->', { line: 'solid', head: 'none' }],\n];\n\n/** The arrow that writes `m`, and whether it lost its second head. */\nexport function arrowOf(m: Pick<SeqMessage, 'line' | 'head' | 'both'>): { arrow: string; dropsBoth: boolean } {\n const both = m.both === true && m.head === 'arrow';\n const found = ARROWS.find(([, a]) => a.line === m.line && a.head === m.head && (a.both === true) === both)!;\n return { arrow: found[0], dropsBoth: m.both === true && !both };\n}\n\n/** A participant type's outline. `participant` is a plain box. */\nexport const TYPE_OUTLINES: Readonly<Record<string, Outline | undefined>> = {\n participant: undefined, actor: 'actor', boundary: 'boundary', control: 'control', entity: 'entity', database: 'cylinder',\n collections: 'collections', queue: 'queue',\n};\n\n/** The participant type that draws `outline`, or `null` for one Mermaid has no type for. */\nexport function typeOf(outline: Outline | undefined): string | null {\n if (outline === undefined || outline === 'rect') return 'participant';\n return Object.entries(TYPE_OUTLINES).find(([, o]) => o === outline)?.[0] ?? null;\n}\n\n/** Mermaid's text as plain text: `<br>` a line break, entities read. */\nexport const plainText = (text: string): string => markupLines(text.trim(), true).join('\\n');\n\nconst ENTITIES: Readonly<Record<string, string>> = { '#': '#35;', ';': '#59;', '<': '#lt;', '>': '#gt;' };\n\n/** Text as Mermaid writes it in a sequence: line breaks as `<br>`, and what it reads as syntax as entities. */\nexport const mermaidSeqText = (text: string): string =>\n text.split('\\n').map((l) => l.replace(/[#;<>]/g, (c) => ENTITIES[c]!)).join('<br>');","/**\n * A Mermaid `sequenceDiagram` as a list of statements, one per line, each\n * with its line number. Says nothing about whether the statements make sense\n * together; `readMermaidSequence` does.\n */\nimport { lineError } from '../../lineError';\nimport { ARROWS, type Arrow } from './syntax';\n\n/** Fragment keywords and the section keyword each continues with. */\nexport const FRAGMENTS = { loop: null, alt: 'else', opt: null, par: 'and', critical: 'option', break: null } as const;\nexport type FragmentWord = keyof typeof FRAGMENTS;\n\n/** One statement of a sequence diagram. */\nexport type SeqStmt = { line: number } & (\n | { kind: 'participant'; id: string; type: string; label?: string; create: boolean }\n | { kind: 'message'; from: string; to: string; arrow: Arrow; mark: '+' | '-' | ''; text: string }\n | { kind: 'note'; place: 'left of' | 'right of' | 'over'; over: string[]; text: string }\n | { kind: 'activate' | 'deactivate' | 'destroy'; participant: string }\n | { kind: 'fragment'; word: FragmentWord; label: string }\n | { kind: 'section'; word: 'else' | 'and' | 'option'; label: string }\n | { kind: 'rect'; color: string }\n | { kind: 'box'; rest: string }\n | { kind: 'end' }\n | { kind: 'autonumber'; args: string[] }\n | { kind: 'title'; text: string }\n | { kind: 'dropped'; what: string }\n);\n\n/** What {@link parseSequence} reads: the statements, the front matter's title, and what it dropped along the way. */\nexport interface ParsedSequence {\n stmts: SeqStmt[];\n title?: string;\n dropped: string[];\n}\n\nconst escape = (s: string) => s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\nconst MESSAGE = new RegExp(`^(.+?)\\\\s*(${ARROWS.map(([a]) => escape(a)).join('|')})\\\\s*([+-]?)\\\\s*([^:]+?)\\\\s*(?::(.*))?$`);\nconst NOTE = /^note\\s+(left of|right of|over)\\s+([^:]+?)\\s*:(.*)$/i;\nconst DECLARE = /^(create\\s+)?(participant|actor)\\s+(.+)$/i;\n\n/** A declaration's id, its `@{ ... }` type and alias, and its `as` label. */\nfunction declaration(rest: string, word: string, create: boolean, line: number): SeqStmt {\n const as = /\\s+as\\s+(.+)$/i.exec(rest);\n const head = (as === null ? rest : rest.slice(0, as.index)).trim();\n const meta = /^([^@\\s]+)\\s*@\\{(.*)\\}$/.exec(head);\n const id = meta === null ? head : meta[1]!;\n if (id === '' || /\\s/.test(id)) throw lineError('Mermaid', line, `\"${head}\" is not a participant id`);\n const type = (meta && /\"type\"\\s*:\\s*\"([^\"]*)\"/.exec(meta[2]!)?.[1]) ?? word.toLowerCase();\n const alias = meta ? /\"alias\"\\s*:\\s*\"([^\"]*)\"/.exec(meta[2]!)?.[1] : undefined;\n const label = as?.[1]!.trim() ?? alias;\n return { kind: 'participant', id, type, ...(label !== undefined ? { label } : {}), create, line };\n}\n\n/** One line's statement, or `null` for a blank or a comment. */\nfunction statementOf(text: string, line: number, dropped: string[]): SeqStmt | null {\n const t = text.trim().replace(/;$/, '').trim();\n if (t === '' || t.startsWith('%%')) {\n if (/^%%\\{.*\\}%%$/.test(t)) dropped.push('Mermaid configuration directives were dropped.');\n return null;\n }\n const word = /^\\S+/.exec(t)![0].toLowerCase();\n const rest = t.slice(word.length).trim();\n const declare = DECLARE.exec(t);\n if (declare) return declaration(declare[3]!, declare[2]!, declare[1] !== undefined, line);\n if (word === 'end') return { kind: 'end', line };\n if (word in FRAGMENTS) return { kind: 'fragment', word: word as FragmentWord, label: rest, line };\n if (word === 'else' || word === 'and' || word === 'option') return { kind: 'section', word, label: rest, line };\n if (word === 'rect') return { kind: 'rect', color: rest, line };\n if (word === 'box') return { kind: 'box', rest, line };\n if (word === 'activate' || word === 'deactivate' || word === 'destroy') return { kind: word, participant: rest, line };\n if (word === 'autonumber') return { kind: 'autonumber', args: rest === '' ? [] : rest.split(/\\s+/), line };\n if (/^title\\b/i.test(t)) return { kind: 'title', text: t.replace(/^title\\s*:?\\s*/i, ''), line };\n if (/^acc(Title|Descr)\\b/.test(t)) return { kind: 'dropped', what: 'Accessibility titles and descriptions were dropped.', line };\n if (/^(links?|properties|details)\\b/i.test(t)) return { kind: 'dropped', what: 'Participant menus (links, properties, details) were dropped.', line };\n const note = NOTE.exec(t);\n if (note) {\n const over = note[2]!.split(',').map((s) => s.trim()).filter((s) => s !== '');\n return { kind: 'note', place: note[1]!.toLowerCase() as 'over', over, text: note[3]!, line };\n }\n const msg = MESSAGE.exec(t);\n if (msg) {\n const arrow = ARROWS.find(([a]) => a === msg[2])![1];\n return { kind: 'message', from: msg[1]!.trim(), to: msg[4]!.trim(), arrow, mark: msg[3] as '+' | '-' | '', text: msg[5] ?? '', line };\n }\n throw lineError('Mermaid', line, `\"${t}\" is not a sequence diagram statement`);\n}\n\n/** The lines of `text` after its front matter, numbered from the file's first line, and the front matter's title. */\nfunction body(text: string, dropped: string[]): { lines: string[]; first: number; title?: string } {\n const lines = text.split(/\\r\\n?|\\n/);\n if (!/^---\\s*$/.test(lines[0] ?? '')) return { lines, first: 1 };\n const close = lines.findIndex((l, i) => i > 0 && /^---\\s*$/.test(l));\n if (close < 0) throw lineError('Mermaid', 1, 'the front matter is never closed with ---');\n const front = lines.slice(1, close);\n const raw = front.map((l) => /^title:\\s*(.*)$/.exec(l)?.[1]).find((t) => t !== undefined)?.trim();\n if (front.some((l) => /^(config|displayMode):/.test(l))) dropped.push('Mermaid configuration in the front matter was dropped.');\n const title = raw === undefined ? undefined : /^([\"']).*\\1$/.test(raw) ? raw.slice(1, -1) : raw;\n return { lines: lines.slice(close + 1), first: close + 2, ...(title !== undefined ? { title } : {}) };\n}\n\n/** Parses a Mermaid sequence diagram into statements. Throws, naming the line, on text that is not one. */\nexport function parseSequence(text: string): ParsedSequence {\n const dropped: string[] = [];\n const { lines, first, title } = body(text, dropped);\n const stmts: SeqStmt[] = [];\n let header = false;\n let inDescr = false;\n lines.forEach((raw, k) => {\n const line = first + k;\n if (inDescr) {\n inDescr = !raw.includes('}');\n return;\n }\n if (/^\\s*accDescr\\s*\\{/.test(raw)) {\n dropped.push('Accessibility titles and descriptions were dropped.');\n inDescr = !raw.includes('}');\n return;\n }\n if (!header) {\n const t = raw.trim();\n if (t === '' || t.startsWith('%%')) {\n statementOf(t, line, dropped);\n return;\n }\n if (!/^sequenceDiagram\\b/.test(t)) throw lineError('Mermaid', line, `expected \"sequenceDiagram\", found \"${t}\"`);\n header = true;\n return;\n }\n const stmt = statementOf(raw, line, dropped);\n if (stmt !== null) stmts.push(stmt);\n });\n if (!header) throw lineError('Mermaid', first, 'expected \"sequenceDiagram\", found the end of the file');\n return { stmts, ...(title !== undefined ? { title } : {}), dropped };\n}\n","/**\n * `readMermaidSequence` — a Mermaid `sequenceDiagram` as a one-page document\n * holding a sequence page. Its title is the page's name.\n */\nimport { sequenceLayout, type NodeStyle, type SeqBox, type SeqFragment, type SeqParticipant, type SeqStep, type SequenceData } from '@weasel-js/diagram';\nimport type { ImportResult, SequencePage } from '../../document';\nimport { Warnings } from '../../graphRead';\nimport { lineError } from '../../lineError';\nimport { PAGE_MARGIN } from '../../pageLayout';\nimport { FRAGMENTS, parseSequence, type SeqStmt } from './parse';\nimport { TYPE_OUTLINES, plainText } from './syntax';\n\ntype Draft = Omit<SeqFragment, 'sections'> & { sections: { label?: string; steps: SeqStep[] }[] };\ntype Open = { kind: 'fragment'; frag: Draft; line: number } | { kind: 'box'; box: SeqBox & { members: string[] }; line: number };\n\n/** A box's or a rect's color, and the box's label after it. */\nfunction colorAndLabel(rest: string): { color?: string; label?: string } {\n const color = /^(rgba?\\([^)]*\\)|hsla?\\([^)]*\\)|#[0-9a-f]{3,8}\\b|transparent\\b|[a-z]+(?=\\s|$))/i.exec(rest)?.[0];\n const isColor = color !== undefined && (!/^[a-z]+$/i.test(color) || CSS_NAMES.has(color.toLowerCase().replace(/gr[ae]y/, 'gray')));\n const label = (isColor ? rest.slice(color!.length) : rest).trim();\n return { ...(isColor && color!.toLowerCase() !== 'transparent' ? { color } : {}), ...(label !== '' ? { label: plainText(label) } : {}) };\n}\n\n/** The CSS color names Mermaid takes as a box's first word, each gray among them in its \"a\" spelling, as a name is matched. */\nconst CSS_NAMES = new Set((\n 'aliceblue antiquewhite aqua aquamarine azure beige bisque black blanchedalmond blue blueviolet brown burlywood cadetblue chartreuse '\n + 'chocolate coral cornflowerblue cornsilk crimson cyan darkblue darkcyan darkgoldenrod darkgray darkgreen darkkhaki darkmagenta '\n + 'darkolivegreen darkorange darkorchid darkred darksalmon darkseagreen darkslateblue darkslategray darkturquoise darkviolet '\n + 'deeppink deepskyblue dimgray dodgerblue firebrick floralwhite forestgreen fuchsia gainsboro ghostwhite gold goldenrod gray green '\n + 'greenyellow honeydew hotpink indianred indigo ivory khaki lavender lavenderblush lawngreen lemonchiffon lightblue lightcoral '\n + 'lightcyan lightgoldenrodyellow lightgray lightgreen lightpink lightsalmon lightseagreen lightskyblue lightslategray '\n + 'lightsteelblue lightyellow lime limegreen linen magenta maroon mediumaquamarine mediumblue mediumorchid mediumpurple '\n + 'mediumseagreen mediumslateblue mediumspringgreen mediumturquoise mediumvioletred midnightblue mintcream mistyrose moccasin navajowhite '\n + 'navy oldlace olive olivedrab orange orangered orchid palegoldenrod palegreen paleturquoise palevioletred papayawhip peachpuff peru pink '\n + 'plum powderblue purple rebeccapurple red rosybrown royalblue saddlebrown salmon sandybrown seagreen seashell sienna silver skyblue '\n + 'slateblue slategray snow springgreen steelblue tan teal thistle tomato turquoise violet wheat white whitesmoke yellow yellowgreen'\n).split(' '));\n\nclass SequenceReader {\n readonly warnings = new Warnings();\n readonly participants = new Map<string, SeqParticipant>();\n readonly root: SeqStep[] = [];\n readonly boxes: SeqBox[] = [];\n readonly open: Open[] = [];\n readonly counts = { m: 0, n: 0, f: 0, b: 0 };\n autonumber: number | undefined;\n title: string | undefined;\n\n id(prefix: keyof SequenceReader['counts']): string {\n return `${prefix}${++this.counts[prefix]}`;\n }\n\n /** The list a step goes in: the innermost open fragment's last section, else the top level. */\n get list(): SeqStep[] {\n for (let i = this.open.length - 1; i >= 0; i--) {\n const o = this.open[i]!;\n if (o.kind === 'fragment') return o.frag.sections.at(-1)!.steps;\n }\n return this.root;\n }\n\n /** `id`, declared now if it was not: Mermaid draws a participant a message first names. */\n named(id: string): string {\n if (!this.participants.has(id)) this.participants.set(id, { id });\n return id;\n }\n\n declare(s: Extract<SeqStmt, { kind: 'participant' }>): void {\n if (!(s.type in TYPE_OUTLINES)) this.warnings.list('Participant types Mermaid has but this reader draws as a box:', s.type);\n const outline = TYPE_OUTLINES[s.type];\n const label = s.label === undefined ? undefined : plainText(s.label);\n const had = this.participants.get(s.id);\n this.participants.set(s.id, {\n ...had, id: s.id, ...(outline !== undefined ? { outline } : {}), ...(label !== undefined && label !== s.id ? { label } : {}),\n });\n const box = this.open.at(-1);\n if (box?.kind === 'box' && !box.box.members.includes(s.id)) box.box.members.push(s.id);\n if (s.create) this.list.push({ kind: 'create', participant: s.id });\n }\n\n stmt(s: SeqStmt): void {\n switch (s.kind) {\n case 'participant': return this.declare(s);\n case 'message': return this.message(s);\n case 'note': {\n const side = s.place === 'over' ? undefined : s.place === 'left of' ? 'left' as const : 'right' as const;\n const over = s.over.map((id) => this.named(id));\n this.list.push({ kind: 'note', id: this.id('n'), over, ...(side ? { side } : {}), text: plainText(s.text) });\n return;\n }\n case 'activate': case 'deactivate': case 'destroy':\n this.list.push({ kind: s.kind, participant: this.named(s.participant) });\n return;\n case 'fragment': {\n const frag: Draft = { kind: 'fragment', id: this.id('f'), type: s.word, sections: [{ ...(s.label ? { label: plainText(s.label) } : {}), steps: [] }] };\n this.list.push(frag);\n this.open.push({ kind: 'fragment', frag, line: s.line });\n return;\n }\n case 'rect': {\n const { color } = colorAndLabel(s.color);\n const frag: Draft = { kind: 'fragment', id: this.id('f'), type: 'region', sections: [{ steps: [] }], ...(color ? { colors: { fill: color } } : {}) };\n this.list.push(frag);\n this.open.push({ kind: 'fragment', frag, line: s.line });\n return;\n }\n case 'section': return this.section(s);\n case 'box': {\n if (this.open.length > 0) throw lineError('Mermaid', s.line, 'a box must be at the top level');\n const { color, label } = colorAndLabel(s.rest);\n const box = { id: this.id('b'), members: [] as string[], ...(label ? { label } : {}), ...(color ? { colors: { fill: color } as Partial<NodeStyle> } : {}) };\n this.boxes.push(box);\n this.open.push({ kind: 'box', box, line: s.line });\n return;\n }\n case 'end':\n if (this.open.pop() === undefined) throw lineError('Mermaid', s.line, '\"end\" closes nothing');\n return;\n case 'autonumber': return this.numbering(s.args, s.line);\n case 'title': this.title = plainText(s.text); return;\n case 'dropped': this.warnings.add(s.what);\n }\n }\n\n message(s: Extract<SeqStmt, { kind: 'message' }>): void {\n const { arrow } = s;\n this.list.push({\n kind: 'message', id: this.id('m'), from: this.named(s.from), to: this.named(s.to), line: arrow.line, head: arrow.head,\n ...(arrow.both ? { both: true } : {}), ...(arrow.async ? { async: true } : {}),\n ...(s.text.trim() !== '' ? { text: plainText(s.text) } : {}),\n ...(s.mark === '+' ? { activate: 'to' as const } : s.mark === '-' ? { deactivate: 'from' as const } : {}),\n });\n }\n\n section(s: Extract<SeqStmt, { kind: 'section' }>): void {\n const top = this.open.at(-1);\n if (top?.kind !== 'fragment' || FRAGMENTS[top.frag.type as keyof typeof FRAGMENTS] !== s.word) {\n throw lineError('Mermaid', s.line, `\"${s.word}\" is not inside ${s.word === 'else' ? 'an alt' : s.word === 'and' ? 'a par' : 'a critical'}`);\n }\n top.frag.sections.push({ ...(s.label ? { label: plainText(s.label) } : {}), steps: [] });\n }\n\n numbering(args: readonly string[], line: number): void {\n if (args[0]?.toLowerCase() === 'off') {\n this.autonumber = undefined;\n return;\n }\n const [start = 1, step = 1] = args.map(Number);\n if (!Number.isFinite(start) || !Number.isFinite(step)) throw lineError('Mermaid', line, `\"autonumber ${args.join(' ')}\" is not a start and a step`);\n if (step !== 1) this.warnings.add('Autonumber steps other than 1 were dropped; messages count up by one.');\n this.autonumber = start;\n }\n}\n\n/** Reads a Mermaid sequence diagram. Throws, naming the line, on text that is not one. */\nexport function readMermaidSequence(text: string): ImportResult {\n const parsed = parseSequence(text);\n const r = new SequenceReader();\n for (const d of parsed.dropped) r.warnings.add(d);\n for (const s of parsed.stmts) r.stmt(s);\n const unclosed = r.open.at(-1);\n if (unclosed !== undefined) throw lineError('Mermaid', unclosed.line, `this ${unclosed.kind === 'box' ? 'box' : unclosed.frag.type} is never closed with \"end\"`);\n const data: SequenceData = {\n participants: [...r.participants.values()], steps: r.root,\n ...(r.boxes.length > 0 ? { boxes: r.boxes } : {}), ...(r.autonumber !== undefined ? { autonumber: r.autonumber } : {}),\n };\n const title = r.title ?? parsed.title;\n const size = sequenceLayout(data);\n const page: SequencePage = {\n kind: 'sequence', id: 'page-1', ...(title !== undefined ? { name: title } : {}),\n width: size.width + PAGE_MARGIN * 2, height: size.height + PAGE_MARGIN * 2, data,\n };\n return { document: { pages: [page] }, warnings: r.warnings.all() };\n}\n","/** `writeMermaidSequence` — a sequence page as a Mermaid `sequenceDiagram`. */\nimport type { SeqParticipant, SeqStep, SequenceData } from '@weasel-js/diagram';\nimport type { ExportResult, SequencePage } from '../../document';\nimport { Warnings } from '../../graphRead';\nimport { arrowOf, mermaidSeqText, typeOf } from './syntax';\n\nconst SECTION_WORDS = { loop: null, alt: 'else', opt: null, par: 'and', critical: 'option', break: null, region: null } as const;\n\nclass SequenceWriter {\n readonly lines: string[] = ['sequenceDiagram'];\n readonly warnings = new Warnings();\n\n constructor(readonly data: SequenceData) {}\n\n out(depth: number, text: string): void {\n this.lines.push(`${' '.repeat(depth)}${text}`);\n }\n\n /** A participant's declaration: its type, its label, and `create` before it where its head is created. */\n declaration(p: SeqParticipant, create: boolean): string {\n let type = typeOf(p.outline);\n if (type === null) {\n this.warnings.list('Outlines Mermaid has no participant type for, written as plain participants:', String(p.outline));\n type = 'participant';\n }\n if (p.colors !== undefined || p.style !== undefined) this.warnings.add('Participants\\' colors and roles were dropped.');\n const head = type === 'participant' || type === 'actor' ? `${type} ${p.id}` : `participant ${p.id}@{ \"type\" : \"${type}\" }`;\n const label = p.label !== undefined && p.label !== p.id ? ` as ${mermaidSeqText(p.label)}` : '';\n return `${create ? 'create ' : ''}${head}${label}`;\n }\n\n participants(created: ReadonlySet<string>): void {\n const boxOf = new Map<string, NonNullable<SequenceData['boxes']>[number]>();\n for (const b of this.data.boxes ?? []) for (const m of b.members) if (!boxOf.has(m)) boxOf.set(m, b);\n let open: string | null = null;\n for (const p of this.data.participants) {\n if (created.has(p.id)) continue;\n const box = boxOf.get(p.id);\n if (open !== null && open !== box?.id) {\n this.out(1, 'end');\n open = null;\n }\n if (box !== undefined && open !== box.id) {\n const color = box.colors?.fill;\n if (box.colors !== undefined && Object.keys(box.colors).some((k) => k !== 'fill')) this.warnings.add('Box colors other than the fill were dropped.');\n this.out(1, ['box', color, box.label === undefined ? undefined : mermaidSeqText(box.label)].filter((s) => s !== undefined).join(' '));\n open = box.id;\n }\n this.out(open === null ? 1 : 2, this.declaration(p, false));\n }\n if (open !== null) this.out(1, 'end');\n }\n\n steps(steps: readonly SeqStep[], depth: number): void {\n for (const s of steps) {\n if (s.kind === 'message') {\n const { arrow, dropsBoth } = arrowOf(s);\n if (dropsBoth) this.warnings.add('A second head on a message whose head is not an arrow was dropped.');\n const mark = s.activate === 'to' ? '+' : s.deactivate === 'from' ? '-' : '';\n this.out(depth, `${s.from}${arrow}${mark}${s.to}: ${mermaidSeqText(s.text ?? '')}`.trimEnd());\n if (s.activate === 'from') this.out(depth, `activate ${s.from}`);\n if (s.deactivate === 'to') this.out(depth, `deactivate ${s.to}`);\n if (s.activate === 'to' && s.deactivate === 'from') this.out(depth, `deactivate ${s.from}`);\n } else if (s.kind === 'note') {\n const place = s.side === 'left' ? 'left of' : s.side === 'right' ? 'right of' : 'over';\n this.out(depth, `Note ${place} ${s.over.join(',')}: ${mermaidSeqText(s.text)}`);\n } else if (s.kind === 'create') {\n const p = this.data.participants.find((q) => q.id === s.participant);\n if (p !== undefined) this.out(depth, this.declaration(p, true));\n } else if (s.kind === 'fragment') {\n const label = (k: number) => (s.sections[k]?.label === undefined ? '' : ` ${mermaidSeqText(s.sections[k]!.label!)}`);\n if (s.type === 'region') {\n if (s.sections.some((sec) => sec.label !== undefined)) this.warnings.add('Labels on colored regions were dropped.');\n this.out(depth, `rect ${s.colors?.fill ?? 'rgba(128, 128, 128, 0.1)'}`);\n } else {\n if (s.colors !== undefined) this.warnings.add('Colors on loops, alts, and other fragments were dropped.');\n this.out(depth, `${s.type}${label(0)}`);\n }\n s.sections.forEach((sec, k) => {\n if (k > 0) {\n const word = SECTION_WORDS[s.type];\n if (word === null) this.warnings.add(`A ${s.type} holds one section; the others were written into its first.`);\n else this.out(depth, `${word}${label(k)}`);\n }\n this.steps(sec.steps, depth + 1);\n });\n this.out(depth, 'end');\n } else {\n this.out(depth, `${s.kind} ${s.participant}`);\n }\n }\n }\n}\n\n/** Every participant a `create` step heads, at any depth. */\nfunction createdIn(steps: readonly SeqStep[], out = new Set<string>()): Set<string> {\n for (const s of steps) {\n if (s.kind === 'create') out.add(s.participant);\n if (s.kind === 'fragment') for (const sec of s.sections) createdIn(sec.steps, out);\n }\n return out;\n}\n\n/** Writes a sequence page as Mermaid. Its name is the diagram's title. */\nexport function writeMermaidSequence(page: SequencePage): ExportResult {\n const w = new SequenceWriter(page.data);\n if (page.name !== undefined) w.out(1, `title ${mermaidSeqText(page.name)}`);\n if (page.data.autonumber !== undefined) w.out(1, page.data.autonumber === 1 ? 'autonumber' : `autonumber ${page.data.autonumber}`);\n w.participants(createdIn(page.data.steps));\n w.steps(page.data.steps, 1);\n return { text: `${w.lines.join('\\n')}\\n`, warnings: w.warnings.all() };\n}\n","/** A Mermaid requirement diagram's grammar, read to statements with each one's line. */\nimport { lineError } from '../../lineError';\nimport { statementsOf, type MermaidSource } from '../common/lines';\nimport { unquote } from '../common/text';\n\n/** The block keywords: the requirement kinds, and `element`. */\nexport const BLOCK_KINDS = [\n 'requirement', 'functionalRequirement', 'interfaceRequirement', 'performanceRequirement', 'physicalRequirement', 'designConstraint', 'element',\n] as const;\n\n/** How one block relates to another. */\nexport const RELATIONS = ['contains', 'copies', 'derives', 'satisfies', 'verifies', 'refines', 'traces'] as const;\n\nexport type RequirementStmt =\n | { kind: 'block'; type: (typeof BLOCK_KINDS)[number]; name: string; fields: [string, string][]; line: number }\n | { kind: 'relation'; from: string; to: string; type: (typeof RELATIONS)[number]; line: number }\n | { kind: 'direction'; value: string; line: number }\n | { kind: 'style'; text: string; line: number };\n\n/** A whole requirement diagram. */\nexport interface RequirementDiagram {\n source: MermaidSource;\n stmts: RequirementStmt[];\n}\n\nconst NAME = String.raw`(\"[^\"]*\"|[\\w-]+)`;\nconst TYPE = `(${RELATIONS.join('|')})`;\nconst BLOCK = new RegExp(`^(${BLOCK_KINDS.join('|')})\\\\s+${NAME}\\\\s*\\\\{$`);\nconst FORWARD = new RegExp(`^${NAME}\\\\s*-\\\\s*${TYPE}\\\\s*->\\\\s*${NAME}$`);\nconst BACKWARD = new RegExp(`^${NAME}\\\\s*<-\\\\s*${TYPE}\\\\s*-\\\\s*${NAME}$`);\n\n/** Parses a Mermaid requirement diagram. Throws, naming the line, on text that is not one. */\nexport function parseRequirementDiagram(text: string): RequirementDiagram {\n const source = statementsOf(text);\n if (source.header.text !== 'requirementDiagram') {\n throw lineError('Mermaid', source.header.line, `expected a requirementDiagram header, found \"${source.header.text}\"`);\n }\n const stmts: RequirementStmt[] = [];\n const body = source.body;\n for (let i = 0; i < body.length; i++) {\n const { text: t, line } = body[i]!;\n const block = BLOCK.exec(t);\n const fwd = FORWARD.exec(t);\n const back = BACKWARD.exec(t);\n if (block !== null) {\n const fields: [string, string][] = [];\n for (i++; i < body.length && body[i]!.text !== '}'; i++) {\n const f = /^(\\w+)\\s*:\\s*(.*)$/.exec(body[i]!.text);\n if (f === null) throw lineError('Mermaid', body[i]!.line, `cannot read \"${body[i]!.text}\" as a field: a name, a colon, and a value`);\n fields.push([f[1]!, unquote(f[2]!.trim())]);\n }\n if (i >= body.length) throw lineError('Mermaid', line, `${block[1]} ${block[2]} is never closed`);\n stmts.push({ kind: 'block', type: block[1] as (typeof BLOCK_KINDS)[number], name: unquote(block[2]!), fields, line });\n } else if (fwd !== null) {\n stmts.push({ kind: 'relation', from: unquote(fwd[1]!), type: fwd[2] as (typeof RELATIONS)[number], to: unquote(fwd[3]!), line });\n } else if (back !== null) {\n stmts.push({ kind: 'relation', from: unquote(back[3]!), type: back[2] as (typeof RELATIONS)[number], to: unquote(back[1]!), line });\n } else if (/^direction\\s+(TB|TD|BT|LR|RL)$/.test(t)) {\n stmts.push({ kind: 'direction', value: t.split(/\\s+/)[1]!, line });\n } else if (/^(classDef|class|style)\\s/.test(t)) {\n stmts.push({ kind: 'style', text: t, line });\n } else {\n throw lineError('Mermaid', line, `cannot read \"${t}\" as a requirement, an element, or a relationship`);\n }\n }\n return { source, stmts };\n}\n","/**\n * A Mermaid requirement diagram as a one-page document: each requirement or\n * element a box of its `<<kind>>` and name rows, a divider, and a `field` row\n * per field, and each relationship a dashed arrow labeled `<<kind>>`.\n */\nimport type { DataEdge, DataNode, Row } from '@weasel-js/diagram';\nimport type { ImportResult } from '../../document';\nimport { Warnings, graphPage } from '../../graphRead';\nimport { DIRECTIONS } from '../class/read';\nimport { pageNameOf } from '../common/lines';\nimport { StyleSheet } from '../common/styles';\nimport { parseRequirementDiagram } from './parse';\n\n/** Reads a Mermaid requirement diagram into a one-page document of `notation` `'requirement'`. Throws, naming the line, on text that is not one. */\nexport function readRequirementDiagram(text: string): ImportResult {\n const { source, stmts } = parseRequirementDiagram(text);\n const warnings = new Warnings();\n const styles = new StyleSheet(warnings);\n const blocks = new Map<string, { type: string; fields: [string, string][] } | null>();\n const edges: DataEdge[] = [];\n let direction: string | undefined;\n for (const s of stmts) {\n if (s.kind === 'block') blocks.set(s.name, { type: s.type, fields: s.fields });\n else if (s.kind === 'relation') {\n for (const end of [s.from, s.to]) if (!blocks.has(end)) blocks.set(end, null);\n edges.push({ from: s.from, to: s.to, label: `<<${s.type}>>`, colors: { dash: [4, 4] } });\n } else if (s.kind === 'direction') direction = s.value;\n else styles.statement(s.text);\n }\n const nodes: DataNode[] = [...blocks].map(([id, b]) => {\n const rows: Row[] = b === null ? [{ kind: 'label', text: id }] : [\n { kind: 'label', text: `<<${b.type}>>` }, { kind: 'label', text: id },\n ...(b.fields.length > 0 ? [{ kind: 'divider' } as const] : []),\n ...b.fields.map(([label, value]): Row => ({ kind: 'field', label, value })),\n ];\n const colors = styles.colorsOf(id);\n return { id, rows, ...(colors !== undefined ? { colors } : {}) };\n });\n if ([...blocks.values()].includes(null)) warnings.add('Mermaid relationships named blocks the diagram never declares; they were read as plain boxes.');\n const name = pageNameOf(source, warnings);\n const dir = direction !== undefined ? DIRECTIONS[direction] : undefined;\n const page = graphPage({ ...(name !== undefined ? { name } : {}), ...(dir !== undefined ? { direction: dir } : {}), nodes, edges, containers: [] });\n return { document: { pages: [{ ...page, notation: 'requirement' }] }, warnings: warnings.all() };\n}\n","/** One graph page as a Mermaid requirement diagram: boxes as requirements and elements, each named by its name row,\n * and edges as relationships. */\nimport type { DataNode, LayoutDirection, Row } from '@weasel-js/diagram';\nimport type { DiagramDocument, ExportResult, WriteOptions } from '../../document';\nimport { graphOut } from '../../graphWrite';\nimport type { Warnings } from '../../graphRead';\nimport { titleLines } from '../common/lines';\nimport { styleProps } from '../common/styles';\nimport { BLOCK_KINDS, RELATIONS } from './parse';\n\nconst HEADER: Readonly<Record<LayoutDirection, string>> = { down: 'TB', up: 'BT', right: 'LR', left: 'RL' };\n\n/** A name as Mermaid reads it: bare when it is one word, else quoted. */\nconst nameOf = (name: string): string => (/^[\\w-]+$/.test(name) ? name : `\"${name.replace(/\"/g, \"'\")}\"`);\n\n/** A box's block kind, from a `<<kind>>` row, and its fields; a text row past the divider reads as `key: value`. */\nfunction blockOf(node: DataNode, warnings: Warnings): { type: string; fields: [string, string][] } {\n const rows: readonly Row[] = node.rows ?? (node.lines ?? []).map((text) => ({ kind: 'label', text }));\n const kind = rows.find((r) => r.kind === 'label' && /^<<\\w+>>$/.test(r.text)) as { text: string } | undefined;\n const type = kind?.text.slice(2, -2);\n const known = BLOCK_KINDS.find((k) => k === type);\n if (type !== undefined && known === undefined) warnings.add('Mermaid has six requirement kinds and elements; others were written as requirements.');\n const fields: [string, string][] = [];\n let past = false;\n for (const r of rows) {\n if (r.kind === 'divider') past = true;\n else if (r.kind === 'field') fields.push([r.label, r.value]);\n else if (r.kind === 'label' && past) {\n const kv = /^(\\w+)\\s*:\\s*(.*)$/.exec(r.text);\n if (kv !== null) fields.push([kv[1]!, kv[2]!]);\n else warnings.add('Mermaid requirement fields are named; rows that name none were dropped.');\n }\n }\n return { type: known ?? 'requirement', fields };\n}\n\n/** A box's name: its first text row past the `<<kind>>` one, else its id. */\nfunction blockName(node: DataNode): string {\n const rows: readonly Row[] = node.rows ?? (node.lines ?? []).map((text) => ({ kind: 'label', text }));\n const labels = rows.flatMap((r) => (r.kind === 'label' ? [r.text] : []));\n const named = labels[0] !== undefined && /^<<\\w+>>$/.test(labels[0]) ? labels[1] : labels[0];\n return named !== undefined && named.trim() !== '' ? named.trim() : node.id;\n}\n\n/** Each box's name, a name two boxes share made distinct by a number. */\nfunction blockNames(nodes: readonly DataNode[]): Map<string, string> {\n const taken = new Set<string>();\n return new Map(nodes.map((n) => {\n const base = blockName(n);\n let name = base;\n for (let k = 2; taken.has(name); k++) name = `${base} ${k}`;\n taken.add(name);\n return [n.id, name];\n }));\n}\n\n/** Writes the page `opts.page` names, else the first, as a Mermaid requirement diagram. */\nexport function writeRequirementDiagram(doc: DiagramDocument, opts?: WriteOptions): ExportResult {\n const out = graphOut(doc, opts, 'Mermaid');\n if (out === null) return { text: 'requirementDiagram\\n', warnings: [] };\n const { page, warnings } = out;\n if (out.clusters.length > 0) warnings.add('Mermaid requirement diagrams have no containers; they were dropped.');\n const lines = [...titleLines(page.name), 'requirementDiagram'];\n if (page.direction !== undefined && page.direction !== 'down') lines.push(` direction ${HEADER[page.direction]}`);\n const names = blockNames(page.data.nodes);\n const name = (id: string) => nameOf(names.get(id) ?? id);\n for (const n of page.data.nodes) {\n const { type, fields } = blockOf(n, warnings);\n lines.push(` ${type} ${name(n.id)} {`, ...fields.map(([k, v]) => ` ${k}: ${v}`), ' }');\n }\n for (const e of out.edges) {\n if (!out.byId.has(e.from) || !out.byId.has(e.to)) continue;\n const type = /^<<(\\w+)>>$/.exec(e.label ?? '')?.[1];\n const known = RELATIONS.find((r) => r === type);\n if (known === undefined) warnings.add('Mermaid relationships are one of seven kinds, named in their label; others were written as traces.');\n lines.push(` ${name(e.from)} - ${known ?? 'traces'} -> ${name(e.to)}`);\n }\n for (const n of page.data.nodes) {\n const props = n.colors !== undefined ? styleProps(n.colors) : '';\n if (props !== '' && /^[\\w-]+$/.test(names.get(n.id)!)) lines.push(` style ${names.get(n.id)} ${props}`);\n }\n return { text: `${lines.join('\\n')}\\n`, warnings: warnings.all() };\n}\n","/** A Mermaid state diagram's grammar, read to statements with each one's line. */\nimport { lineError } from '../../lineError';\nimport { statementsOf, type MermaidSource, type Statement } from '../common/lines';\n\n/** A state's kind, when `<<…>>` names one. */\nexport type StateType = 'fork' | 'join' | 'choice';\n\nexport type StateStmt =\n | { kind: 'transition'; from: string; to: string; label?: string; line: number }\n | { kind: 'state'; id: string; label?: string; type?: StateType; line: number }\n | { kind: 'describe'; id: string; text: string; line: number }\n | { kind: 'composite'; id: string; label?: string; regions: StateStmt[][]; line: number }\n | { kind: 'note'; side: 'left' | 'right'; id: string; text: string; line: number }\n | { kind: 'assign'; id: string; name: string; line: number }\n | { kind: 'direction'; value: string; line: number }\n | { kind: 'style'; text: string; line: number }\n | { kind: 'other'; keyword: string; line: number };\n\n/** A whole state diagram. */\nexport interface StateDiagram {\n source: MermaidSource;\n stmts: StateStmt[];\n}\n\n/** A state's id, `[*]` for the start or end of its scope, and the class `:::` gives it. */\nconst END = String.raw`(\\[\\*\\]|[\\w-]+)(?::::([\\w-]+))?`;\nconst TRANSITION = new RegExp(`^${END}\\\\s*-->\\\\s*${END}\\\\s*(?::\\\\s*(.*))?$`);\nconst STATE_AS = /^state\\s+\"([^\"]*)\"\\s+as\\s+([\\w-]+)\\s*(\\{)?$/;\nconst STATE_TYPE = /^state\\s+([\\w-]+)\\s+<<\\s*(fork|join|choice)\\s*>>$/;\nconst STATE = /^state\\s+([\\w-]+)\\s*(\\{)?$/;\nconst BARE = /^([\\w-]+)(?::::([\\w-]+))?$/;\nconst DESCRIBE = /^([\\w-]+)\\s*:\\s*(.+)$/;\nconst NOTE = /^note\\s+(left|right)\\s+of\\s+([\\w-]+)\\s*(?::\\s*(.*))?$/;\n\nclass StateParser {\n i = 0;\n\n constructor(readonly lines: readonly Statement[]) {}\n\n /** The regions of the block opened on line `opened`, split at `--`, to its `}`; the whole diagram when `opened` is null. */\n block(opened: number | null): StateStmt[][] {\n const regions: StateStmt[][] = [[]];\n while (this.i < this.lines.length) {\n const s = this.lines[this.i++]!;\n if (s.text === '}') {\n if (opened === null) throw lineError('Mermaid', s.line, '\"}\" closes no state');\n return regions;\n }\n if (s.text === '--') {\n if (opened === null) throw lineError('Mermaid', s.line, '\"--\" divides only a composite state');\n regions.push([]);\n continue;\n }\n regions.at(-1)!.push(...this.stmt(s));\n }\n if (opened !== null) throw lineError('Mermaid', opened, 'a composite state opened here is never closed');\n return regions;\n }\n\n stmt({ text, line }: Statement): StateStmt[] {\n const t = TRANSITION.exec(text);\n if (t !== null) {\n const [, from, fromClass, to, toClass, label] = t as unknown as (string | undefined)[];\n return [\n { kind: 'transition', from: from!, to: to!, ...(label !== undefined && label.trim() !== '' ? { label: label.trim() } : {}), line },\n ...(fromClass !== undefined ? [{ kind: 'assign' as const, id: from!, name: fromClass, line }] : []),\n ...(toClass !== undefined ? [{ kind: 'assign' as const, id: to!, name: toClass, line }] : []),\n ];\n }\n const as = STATE_AS.exec(text);\n if (as !== null) return [as[3] !== undefined ? this.composite(as[2]!, as[1]!, line) : { kind: 'state', id: as[2]!, label: as[1]!, line }];\n const typed = STATE_TYPE.exec(text);\n if (typed !== null) return [{ kind: 'state', id: typed[1]!, type: typed[2] as StateType, line }];\n const st = STATE.exec(text);\n if (st !== null) return [st[2] !== undefined ? this.composite(st[1]!, undefined, line) : { kind: 'state', id: st[1]!, line }];\n const note = NOTE.exec(text);\n if (note !== null) return [{ kind: 'note', side: note[1] as 'left' | 'right', id: note[2]!, text: note[3] ?? this.noteBody(line), line }];\n const dir = /^direction\\s+(TB|TD|BT|LR|RL)$/.exec(text);\n if (dir !== null) return [{ kind: 'direction', value: dir[1]!, line }];\n if (/^(classDef|class|style)\\s/.test(text)) return [{ kind: 'style', text, line }];\n const bare = BARE.exec(text);\n if (bare !== null) {\n return [{ kind: 'state', id: bare[1]!, line }, ...(bare[2] !== undefined ? [{ kind: 'assign' as const, id: bare[1]!, name: bare[2], line }] : [])];\n }\n const desc = DESCRIBE.exec(text);\n if (desc !== null) return [{ kind: 'describe', id: desc[1]!, text: desc[2]!.trim(), line }];\n const keyword = /^(hide|scale|click)\\b/.exec(text);\n if (keyword !== null) return [{ kind: 'other', keyword: keyword[1]!, line }];\n throw lineError('Mermaid', line, `cannot read \"${text}\" as a state diagram statement`);\n }\n\n composite(id: string, label: string | undefined, line: number): StateStmt {\n return { kind: 'composite', id, ...(label !== undefined ? { label } : {}), regions: this.block(line), line };\n }\n\n /** A note's lines up to `end note`. */\n noteBody(opened: number): string {\n const out: string[] = [];\n for (;;) {\n const s = this.lines[this.i++];\n if (s === undefined) throw lineError('Mermaid', opened, 'a note opened here has no \"end note\"');\n if (s.text === 'end note') return out.join('\\n');\n out.push(s.text);\n }\n }\n}\n\n/** Parses a Mermaid state diagram, `stateDiagram` or `stateDiagram-v2`. Throws, naming the line, on text that is not one. */\nexport function parseStateDiagram(text: string): StateDiagram {\n const source = statementsOf(text);\n if (!/^stateDiagram(-v2)?$/.test(source.header.text)) {\n throw lineError('Mermaid', source.header.line, `expected a stateDiagram header, found \"${source.header.text}\"`);\n }\n return { source, stmts: new StateParser(source.body).block(null)[0]! };\n}\n","/**\n * A Mermaid state diagram as a one-page document: states as rounded boxes,\n * `[*]` as each scope's `start` and `end`, forks and joins as `bar`s, choices\n * as diamonds, composite states as containers (a pool of lanes when `--`\n * divides them into concurrent regions), and notes as `note` shapes.\n */\nimport type { DataContainer, DataEdge, DataNode, LayoutDirection } from '@weasel-js/diagram';\nimport type { ImportResult } from '../../document';\nimport { Membership, Warnings, decodeEntities, graphPage } from '../../graphRead';\nimport { DIRECTIONS } from '../class/read';\nimport { pageNameOf } from '../common/lines';\nimport { StyleSheet } from '../common/styles';\nimport { parseStateDiagram, type StateStmt, type StateType } from './parse';\n\n/** The id `[*]` reads as in `scope`: its start where a transition leaves it, its end where one arrives. */\nexport const pseudoId = (scope: string | null, end: 'start' | 'end'): string => `${scope ?? ''}[${end}]`;\n\ninterface StateDraft { lines: string[]; named: boolean; described: boolean; type?: StateType | 'start' | 'end' }\n\n/** A fork or join bar's box, across the way the page runs. */\nconst barSize = (direction: LayoutDirection | undefined) =>\n (direction === 'left' || direction === 'right' ? { width: 10, height: 80 } : { width: 80, height: 10 });\n\nclass StateReader {\n readonly warnings = new Warnings();\n readonly styles = new StyleSheet(this.warnings);\n readonly membership = new Membership(this.warnings, 'Mermaid');\n readonly states = new Map<string, StateDraft>();\n readonly composites = new Map<string, { label?: string; lanes: string[] }>();\n readonly edges: DataEdge[] = [];\n readonly notes: DataNode[] = [];\n readonly noteEdges: DataEdge[] = [];\n direction: string | undefined;\n\n constructor(readonly compositeIds: ReadonlySet<string>) {}\n\n draft(id: string, scope: string | null): StateDraft {\n if (this.compositeIds.has(id)) return { lines: [], named: false, described: false };\n let d = this.states.get(id);\n if (d === undefined) {\n d = { lines: [id], named: false, described: false };\n this.states.set(id, d);\n }\n this.membership.place(id, scope);\n return d;\n }\n\n end(id: string, scope: string | null, end: 'start' | 'end'): string {\n if (id !== '[*]') {\n this.draft(id, scope);\n return id;\n }\n const pseudo = pseudoId(scope, end);\n this.draft(pseudo, scope).type = end;\n return pseudo;\n }\n\n walk(stmts: readonly StateStmt[], scope: string | null): void {\n for (const s of stmts) {\n if (s.kind === 'transition') {\n const from = this.end(s.from, scope, 'start');\n const to = this.end(s.to, scope, 'end');\n this.edges.push({ from, to, ...(s.label !== undefined ? { label: decodeEntities(s.label, true) } : {}) });\n } else if (s.kind === 'state') {\n const d = this.draft(s.id, scope);\n if (s.label !== undefined) Object.assign(d, { lines: [decodeEntities(s.label, true)], named: true });\n if (s.type !== undefined) d.type = s.type;\n } else if (s.kind === 'describe') this.describe(s.id, s.text, scope);\n else if (s.kind === 'composite') this.composite(s, scope);\n else if (s.kind === 'note') this.note(s, scope);\n else if (s.kind === 'assign') this.styles.assign(s.id, s.name);\n else if (s.kind === 'direction') {\n if (scope === null) this.direction = s.value;\n else this.warnings.add('Mermaid composite state directions were dropped; the page runs one way.');\n } else if (s.kind === 'style') this.styles.statement(s.text);\n else this.warnings.list('Mermaid statements a diagram does not hold were dropped', s.keyword);\n }\n }\n\n describe(id: string, text: string, scope: string | null): void {\n const comp = this.composites.get(id);\n if (comp !== undefined) {\n comp.label = text;\n return;\n }\n const d = this.draft(id, scope);\n const line = decodeEntities(text, true);\n if (d.named || d.described) d.lines.push(line);\n else d.lines = [line];\n d.described = true;\n }\n\n composite(s: Extract<StateStmt, { kind: 'composite' }>, scope: string | null): void {\n this.membership.openCluster(s.id, scope);\n const comp = this.composites.get(s.id) ?? { lanes: [] };\n if (s.label !== undefined) comp.label = s.label;\n this.composites.set(s.id, comp);\n if (s.regions.length === 1) {\n this.walk(s.regions[0]!, s.id);\n return;\n }\n s.regions.forEach((region, i) => {\n const lane = `${s.id}-region-${i + 1}`;\n comp.lanes.push(lane);\n this.membership.openCluster(lane, s.id);\n this.walk(region, lane);\n });\n }\n\n note(s: Extract<StateStmt, { kind: 'note' }>, scope: string | null): void {\n const id = `note-${this.notes.length + 1}`;\n if (s.side === 'left') this.warnings.add('Mermaid note sides were dropped.');\n this.notes.push({ id, outline: 'note', lines: s.text.split('\\n').map((l) => decodeEntities(l, true)) });\n this.draft(s.id, scope);\n this.noteEdges.push({ from: id, to: s.id, colors: { dash: [4, 4], markerEnd: null } });\n }\n\n node(id: string, d: StateDraft, direction: LayoutDirection | undefined): DataNode {\n const colors = this.styles.colorsOf(id);\n const own = colors !== undefined ? { colors } : {};\n if (d.type === 'start' || d.type === 'end') return { id, outline: d.type, lines: [], width: 20, height: 20, ...own };\n if (d.type === 'fork' || d.type === 'join') return { id, outline: 'bar', lines: [], ...barSize(direction), ...own };\n if (d.type === 'choice') return { id, outline: 'diamond', lines: [], width: 28, height: 28, ...own };\n return { id, outline: 'roundRect', lines: d.lines, ...own };\n }\n}\n\nfunction compositeIdsOf(stmts: readonly StateStmt[], out = new Set<string>()): Set<string> {\n for (const s of stmts) if (s.kind === 'composite') for (const region of s.regions) compositeIdsOf(region, out.add(s.id));\n return out;\n}\n\n/** Reads a Mermaid state diagram into a one-page document of `notation` `'state'`. Throws, naming the line, on text that is not one. */\nexport function readStateDiagram(text: string): ImportResult {\n const { source, stmts } = parseStateDiagram(text);\n const r = new StateReader(compositeIdsOf(stmts));\n r.walk(stmts, null);\n const direction = r.direction !== undefined ? DIRECTIONS[r.direction] : undefined;\n const nodes = [...r.states].map(([id, d]) => r.node(id, d, direction));\n const containers: DataContainer[] = [...r.composites].map(([id, c]) => {\n const label = c.label ?? id;\n if (c.lanes.length === 0) {\n const members = r.membership.members(id);\n return { id, role: 'container', label, ...(members.length > 0 ? { members } : {}) };\n }\n const lanes = c.lanes.map((lane) => {\n const members = r.membership.members(lane);\n return { id: lane, ...(members.length > 0 ? { members } : {}) };\n });\n return { id, role: 'pool', label, axis: 'y', lanes };\n });\n const name = pageNameOf(source, r.warnings);\n const page = graphPage({\n ...(name !== undefined ? { name } : {}),\n ...(direction !== undefined ? { direction } : {}),\n nodes: [...nodes, ...r.notes], edges: [...r.edges, ...r.noteEdges], containers,\n });\n return { document: { pages: [{ ...page, notation: 'state' }] }, warnings: r.warnings.all() };\n}\n","/**\n * One graph page as a Mermaid state diagram: `start` and `end` shapes as each\n * scope's `[*]`, bars as forks and joins, empty diamonds as choices,\n * containers as composite states and pools as composites divided into\n * concurrent regions, and `note` shapes as notes.\n */\nimport type { DataEdge, DataNode, LayoutDirection } from '@weasel-js/diagram';\nimport type { DiagramDocument, ExportResult, WriteOptions } from '../../document';\nimport { edgeStyleIn, graphOut, nodeLines, type Cluster, type GraphOut } from '../../graphWrite';\nimport { titleLines } from '../common/lines';\nimport { styleProps } from '../common/styles';\nimport { mermaidEscaped, mermaidIds } from '../common/text';\n\nconst HEADER: Readonly<Record<LayoutDirection, string>> = { down: 'TB', up: 'BT', right: 'LR', left: 'RL' };\n\nconst isPseudo = (n: DataNode | undefined): boolean => n?.outline === 'start' || n?.outline === 'end';\n\nclass StateWriter {\n readonly lines: string[] = [];\n readonly ids: Map<string, string>;\n /** The cluster each node sits in directly. */\n readonly scopeOf = new Map<string, string>();\n readonly pools: ReadonlySet<string>;\n readonly notes: ReadonlySet<string>;\n\n constructor(readonly out: GraphOut) {\n this.ids = mermaidIds([...out.page.data.nodes.map((n) => n.id), ...out.clusterIds]);\n const visit = (c: Cluster) => {\n for (const id of c.nodes) this.scopeOf.set(id, c.id);\n c.clusters.forEach(visit);\n };\n out.clusters.forEach(visit);\n this.pools = new Set((out.page.data.containers ?? []).filter((c) => c.role === 'pool').map((c) => c.id));\n this.notes = new Set(out.page.data.nodes.filter((n) => n.outline === 'note').map((n) => n.id));\n }\n\n id(id: string): string {\n return isPseudo(this.out.byId.get(id)) ? '[*]' : this.ids.get(id) ?? id;\n }\n\n node(node: DataNode, indent: string): void {\n if (isPseudo(node) || this.notes.has(node.id)) return;\n const id = this.id(node.id);\n const lines = nodeLines(node, this.out.warnings, 'Mermaid');\n if (node.outline === 'bar') {\n const outs = this.out.edges.filter((e) => e.from === node.id).length;\n const ins = this.out.edges.filter((e) => e.to === node.id).length;\n this.lines.push(`${indent}state ${id} <<${outs > ins ? 'fork' : 'join'}>>`);\n } else if (node.outline === 'diamond' && lines.length === 0) {\n this.lines.push(`${indent}state ${id} <<choice>>`);\n } else if (lines.length === 0 || (lines.length === 1 && lines[0] === node.id)) {\n this.lines.push(`${indent}${id}`);\n } else {\n this.lines.push(`${indent}state \"${mermaidEscaped([lines[0]!])}\" as ${id}`, ...lines.slice(1).map((l) => `${indent}${id} : ${mermaidEscaped([l])}`));\n }\n if (node.outline !== undefined && !['roundRect', 'bar', 'diamond'].includes(node.outline as string)) {\n this.out.warnings.add('Mermaid draws every state alike; their outlines were dropped.');\n }\n }\n\n cluster(c: Cluster, indent: string): void {\n const head = c.label !== undefined && c.label !== c.id ? `state \"${mermaidEscaped([c.label])}\" as ${this.id(c.id)}` : `state ${this.id(c.id)}`;\n this.lines.push(`${indent}${head} {`);\n if (this.pools.has(c.id)) {\n c.clusters.forEach((lane, i) => {\n if (i > 0) this.lines.push(`${indent} --`);\n this.scope(lane, `${indent} `);\n });\n } else {\n this.scope(c, `${indent} `);\n }\n this.lines.push(`${indent}}`);\n }\n\n /** A scope's states, its nested composites, and the transitions to and from its `[*]`. */\n scope(c: Cluster, indent: string): void {\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 for (const e of this.out.edges) if (this.edgeScope(e) === c.id) this.lines.push(this.transition(e, indent));\n }\n\n /** Where an edge is written: in the scope of a `[*]` it has, else at the top. Notes' edges are written as notes. */\n edgeScope(e: DataEdge): string | null | undefined {\n if (this.notes.has(e.from)) return undefined;\n const pseudo = [e.from, e.to].find((id) => isPseudo(this.out.byId.get(id)));\n return pseudo === undefined ? null : this.scopeOf.get(pseudo) ?? null;\n }\n\n transition(e: DataEdge, indent: string): string {\n const own = edgeStyleIn(this.out, e);\n const base = edgeStyleIn(this.out);\n if (own.dash !== undefined || own.markerEnd !== base.markerEnd || own.markerStart !== base.markerStart) {\n this.out.warnings.add('Mermaid draws every transition alike; their dashes and ends were dropped.');\n }\n const label = e.label !== undefined && e.label !== '' ? ` : ${mermaidEscaped([e.label])}` : '';\n return `${indent}${this.id(e.from)} --> ${this.id(e.to)}${label}`;\n }\n\n noteLines(): void {\n for (const id of this.notes) {\n const target = this.out.edges.find((e) => e.from === id);\n const text = (this.out.byId.get(id)!.lines ?? []).map((l) => mermaidEscaped([l]));\n if (target === undefined) {\n this.out.warnings.add('Mermaid notes sit beside a state; notes beside none were dropped.');\n continue;\n }\n if (text.length === 1) this.lines.push(` note right of ${this.id(target.to)} : ${text[0]}`);\n else this.lines.push(` note right of ${this.id(target.to)}`, ...text.map((t) => ` ${t}`), ' end note');\n }\n }\n\n styles(): void {\n const byProps = new Map<string, string[]>();\n for (const n of this.out.page.data.nodes) {\n const props = n.colors !== undefined && !isPseudo(n) && !this.notes.has(n.id) ? styleProps(n.colors) : '';\n if (props !== '') byProps.set(props, [...(byProps.get(props) ?? []), this.id(n.id)]);\n }\n [...byProps].forEach(([props, ids], i) => this.lines.push(` classDef s${i + 1} ${props}`, ` class ${ids.join(',')} s${i + 1}`));\n }\n}\n\n/** Writes the page `opts.page` names, else the first, as a Mermaid `stateDiagram-v2`. */\nexport function writeStateDiagram(doc: DiagramDocument, opts?: WriteOptions): ExportResult {\n const out = graphOut(doc, opts, 'Mermaid', true);\n if (out === null) return { text: 'stateDiagram-v2\\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 StateWriter(out);\n const { page } = out;\n w.lines.push(...titleLines(page.name), 'stateDiagram-v2');\n if (page.direction !== undefined && page.direction !== 'down') w.lines.push(` direction ${HEADER[page.direction]}`);\n for (const n of out.nodes) w.node(n, ' ');\n for (const c of out.clusters) w.cluster(c, ' ');\n for (const e of out.edges) if (w.edgeScope(e) === null) w.lines.push(w.transition(e, ' '));\n w.noteLines();\n w.styles();\n return { text: `${w.lines.join('\\n')}\\n`, warnings: out.warnings.all() };\n}\n","/** A Mermaid xychart's text as statements, each with the line it came from. */\nimport { lineError } from '../../lineError';\n\n/** One statement of an xychart, by the keyword that starts it. */\nexport type XyStatement =\n | { kind: 'title'; text: string; line: number }\n | { kind: 'x-axis'; title?: string; categories?: string[]; range?: [number, number]; line: number }\n | { kind: 'y-axis'; title?: string; range?: [number, number]; line: number }\n | { kind: 'bar' | 'line'; name?: string; values: number[]; line: number }\n | { kind: 'dropped'; what: string; line: number };\n\n/** An xychart's header and statements, and the front matter's title. */\nexport interface XyChartText {\n orientation: 'vertical' | 'horizontal';\n statements: XyStatement[];\n /** `title:` from the front matter. */\n frontTitle?: string;\n /** How many lines of front matter other than its title were skipped. */\n frontOther: number;\n}\n\nconst FORMAT = 'Mermaid';\nconst HEADER = /^xychart(?:-beta)?(?:\\s+(horizontal|vertical))?\\s*$/;\nconst NUMBER = /^[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?$/i;\n\n/** A quoted string's text, with Mermaid's `#quot;` entity read back as a quote. */\nexport const unquote = (s: string): string => s.slice(1, -1).replace(/#quot;/g, '\"');\n\n/** Splits `list` (what lies between the brackets) on commas outside quotes. */\nfunction listItems(list: string): string[] {\n const out: string[] = [];\n let at = 0;\n let quoted = false;\n for (let i = 0; i <= list.length; i++) {\n const c = list[i];\n if (c === '\"') quoted = !quoted;\n if (i === list.length || (c === ',' && !quoted)) {\n out.push(list.slice(at, i).trim());\n at = i + 1;\n }\n }\n return out.length === 1 && out[0] === '' ? [] : out;\n}\n\nfunction numberAt(text: string, line: number): number {\n if (!NUMBER.test(text)) throw lineError(FORMAT, line, `\"${text}\" is not a number`);\n return Number(text);\n}\n\n/** A leading quoted title off `rest`, and what follows it. */\nfunction leadingTitle(rest: string): { title?: string; rest: string } {\n const m = /^(\"[^\"]*\")\\s*(.*)$/.exec(rest);\n return m === null ? { rest } : { title: unquote(m[1]!), rest: m[2]! };\n}\n\n/** `[a, b]` as its items, or `min --> max` as a range; `null` for nothing; throws on anything else. */\nfunction axisBody(rest: string, line: number): { categories?: string[]; range?: [number, number] } | null {\n if (rest === '') return null;\n if (rest.startsWith('[')) {\n if (!rest.endsWith(']')) throw lineError(FORMAT, line, 'a category list with no closing \"]\"');\n return { categories: listItems(rest.slice(1, -1)).map((c) => (c.startsWith('\"') && c.endsWith('\"') ? unquote(c) : c)) };\n }\n const m = /^(\\S+)\\s*-->\\s*(\\S+)$/.exec(rest);\n if (m === null) throw lineError(FORMAT, line, `\"${rest}\" is neither a category list nor a range`);\n return { range: [numberAt(m[1]!, line), numberAt(m[2]!, line)] };\n}\n\nfunction statementOf(keyword: string, rest: string, line: number): XyStatement {\n switch (keyword) {\n case 'title':\n return { kind: 'title', text: rest.startsWith('\"') && rest.endsWith('\"') && rest.length > 1 ? unquote(rest) : rest, line };\n case 'x-axis':\n case 'y-axis': {\n const { title, rest: body } = leadingTitle(rest);\n const parsed = axisBody(body, line);\n if (keyword === 'y-axis' && parsed?.categories) throw lineError(FORMAT, line, 'the y axis takes a range, not categories');\n return { kind: keyword, ...(title !== undefined ? { title } : {}), ...parsed, line } as XyStatement;\n }\n case 'bar':\n case 'line': {\n const { title, rest: body } = leadingTitle(rest);\n if (!body.startsWith('[') || !body.endsWith(']')) throw lineError(FORMAT, line, `a ${keyword} series needs its values in brackets`);\n const values = listItems(body.slice(1, -1)).map((v) => numberAt(v, line));\n return { kind: keyword, ...(title !== undefined ? { name: title } : {}), values, line };\n }\n case 'accTitle:':\n case 'accDescr:':\n return { kind: 'dropped', what: keyword.slice(0, -1), line };\n default:\n throw lineError(FORMAT, line, `\"${keyword}\" is not an xychart statement`);\n }\n}\n\n/** Reads front matter off the top of `lines`: its title, and how many other lines it held. Returns the line after it. */\nfunction frontMatter(lines: readonly string[], into: XyChartText): number {\n if (!/^---\\s*$/.test(lines[0] ?? '')) return 0;\n let k = 1;\n for (; k < lines.length && !/^---\\s*$/.test(lines[k]!); k++) {\n const m = /^title:\\s*(.*)$/.exec(lines[k]!.trim());\n if (m !== null) into.frontTitle = /^\".*\"$/.test(m[1]!) ? JSON.parse(m[1]!) as string : m[1]!;\n else if (lines[k]!.trim() !== '') into.frontOther++;\n }\n return k + 1;\n}\n\n/** Parses an xychart. Throws, naming the line, on text that is not one. */\nexport function parseXyChart(text: string): XyChartText {\n const lines = text.split(/\\r\\n?|\\n/);\n const out: XyChartText = { orientation: 'vertical', statements: [], frontOther: 0 };\n let header = false;\n let block = false;\n for (let k = frontMatter(lines, out); k < lines.length; k++) {\n const l = lines[k]!.trim();\n const line = k + 1;\n if (block) {\n block = !l.includes('}');\n continue;\n }\n if (l === '' || l.startsWith('%%')) {\n if (l.startsWith('%%{')) out.statements.push({ kind: 'dropped', what: 'directive', line });\n continue;\n }\n if (!header) {\n const m = HEADER.exec(l);\n if (m === null) throw lineError(FORMAT, line, `\"${l}\" is not an xychart header`);\n if (m[1] === 'horizontal') out.orientation = 'horizontal';\n header = true;\n continue;\n }\n if (/^accDescr\\s*\\{/.test(l)) {\n out.statements.push({ kind: 'dropped', what: 'accDescr', line });\n block = !l.includes('}');\n continue;\n }\n const m = /^(\\S+)\\s*(.*)$/.exec(l)!;\n out.statements.push(statementOf(m[1]!, m[2]!.trim(), line));\n }\n if (!header) throw lineError(FORMAT, lines.length, 'no xychart header');\n return out;\n}\n","/** A Mermaid xychart as a one-page document holding a plot page. */\nimport type { XyChartData, XySeries } from '@weasel-js/plot';\nimport type { ImportResult, PlotPage } from '../../document';\nimport { parseXyChart } from './parse';\n\n/** The page an xychart is read onto. */\nexport const XYCHART_PAGE = { width: 800, height: 500 } as const;\n\n/** Reads a Mermaid `xychart-beta` (or `xychart`) diagram. Throws, naming the line, on text that is not one. */\nexport function readMermaidXychart(text: string): ImportResult {\n const parsed = parseXyChart(text);\n const warnings: string[] = [];\n const once = new Set<string>();\n const warn = (message: string) => {\n if (!once.has(message)) warnings.push(message);\n once.add(message);\n };\n if (parsed.frontOther > 0) warn('Mermaid front matter other than the title was dropped.');\n let title = parsed.frontTitle;\n let x: XyChartData['x'];\n let y: XyChartData['y'];\n const series: XySeries[] = [];\n for (const s of parsed.statements) {\n switch (s.kind) {\n case 'title': title = s.text; break;\n case 'x-axis':\n x = s.range !== undefined\n ? { kind: 'range', ...(s.title !== undefined ? { title: s.title } : {}), min: s.range[0], max: s.range[1] }\n : { kind: 'band', ...(s.title !== undefined ? { title: s.title } : {}), categories: s.categories ?? [] };\n break;\n case 'y-axis':\n y = { ...(s.title !== undefined ? { title: s.title } : {}), ...(s.range !== undefined ? { min: s.range[0], max: s.range[1] } : {}) };\n break;\n case 'bar':\n case 'line':\n series.push({ kind: s.kind, ...(s.name !== undefined ? { name: s.name } : {}), values: s.values });\n break;\n case 'dropped':\n warn(s.what === 'directive' ? 'Mermaid configuration directives were dropped.' : `The chart's ${s.what} was dropped.`);\n break;\n }\n }\n if (x?.kind === 'band' && x.categories.length > 0) {\n const longest = Math.max(0, ...series.map((s) => s.values.length));\n if (longest > x.categories.length) warn(`${longest - x.categories.length} value(s) past the last category are not drawn.`);\n }\n const data: XyChartData = {\n kind: 'xychart',\n ...(title !== undefined && title !== '' ? { title } : {}),\n ...(parsed.orientation === 'horizontal' ? { orientation: 'horizontal' } : {}),\n ...(x !== undefined ? { x } : {}),\n ...(y !== undefined ? { y } : {}),\n series,\n };\n const page: PlotPage = { kind: 'plot', id: 'page-1', ...(title ? { name: title } : {}), ...XYCHART_PAGE, data };\n return { document: { pages: [page] }, warnings };\n}\n","/** A plot page holding an xychart as Mermaid `xychart-beta` text. */\nimport type { XyChartData } from '@weasel-js/plot';\nimport type { ExportResult, PlotPage } from '../../document';\n\n/** `s` quoted, a quote inside it written as Mermaid's `#quot;`. */\nconst quoted = (s: string): string => `\"${s.replace(/\"/g, '#quot;')}\"`;\n\n/** A category bare where Mermaid reads it back the same, else quoted. */\nconst category = (s: string): string => (/^[\\w.-]+$/.test(s) ? s : quoted(s));\n\nconst titled = (title: string | undefined): string => (title !== undefined ? ` ${quoted(title)}` : '');\n\nfunction xAxisLine(x: NonNullable<XyChartData['x']>): string | null {\n if (x.kind === 'range') return `x-axis${titled(x.title)} ${x.min} --> ${x.max}`;\n if (x.categories.length === 0) return x.title !== undefined ? `x-axis${titled(x.title)}` : null;\n return `x-axis${titled(x.title)} [${x.categories.map(category).join(', ')}]`;\n}\n\nfunction yAxisLine(y: NonNullable<XyChartData['y']>, warn: (m: string) => void): string | null {\n const both = y.min !== undefined && y.max !== undefined;\n if (!both && (y.min !== undefined || y.max !== undefined)) warn('Mermaid holds both ends of the y axis or neither; its one end was dropped.');\n if (!both && y.title === undefined) return null;\n return `y-axis${titled(y.title)}${both ? ` ${y.min} --> ${y.max}` : ''}`;\n}\n\n/** Writes `page`'s xychart as Mermaid. Throws on a page holding another kind of chart. */\nexport function writeMermaidXychart(page: PlotPage): ExportResult {\n const data = page.data;\n if (data.kind !== 'xychart') throw new Error(`Mermaid writes this chart as an xychart only; the page holds a ${(data as { kind: string }).kind}`);\n const warnings: string[] = [];\n const warn = (m: string) => {\n if (!warnings.includes(m)) warnings.push(m);\n };\n const lines = [data.orientation === 'horizontal' ? 'xychart-beta horizontal' : 'xychart-beta'];\n if (data.title !== undefined) lines.push(` title ${quoted(data.title)}`);\n const x = data.x && xAxisLine(data.x);\n if (x) lines.push(` ${x}`);\n const y = data.y && yAxisLine(data.y, warn);\n if (y) lines.push(` ${y}`);\n for (const s of data.series) {\n if (s.values.some((v) => !Number.isFinite(v))) warn('Mermaid holds no missing values; they were written as 0.');\n lines.push(` ${s.kind}${titled(s.name)} [${s.values.map((v) => (Number.isFinite(v) ? v : 0)).join(', ')}]`);\n }\n return { text: `${lines.join('\\n')}\\n`, warnings };\n}\n","/** A Mermaid gantt's task lines read into tasks, their starts and ends kept as written. */\nimport { parseGanttEnd, parseGanttStart, type GanttTag, type GanttTask } from '@weasel-js/plot';\nimport { lineError } from '../../lineError';\n\nconst TAGS = new Set(['done', 'active', 'crit', 'milestone', 'vert']);\n\n/** Task text as written, `#58;` read back as the colon Mermaid splits a task on. */\nexport const ganttText = (s: string): string => s.trim().replace(/#58;/g, ':');\n\n/** A task line read: the task, or `'vert'` for a vertical marker, which a chart does not hold. */\nexport function parseGanttTask(text: string, line: number): GanttTask | 'vert' {\n const colon = text.indexOf(':');\n if (colon < 0) throw lineError('Mermaid', line, `\"${text}\" is not a gantt statement`);\n const name = ganttText(text.slice(0, colon));\n const items = text.slice(colon + 1).split(',').map((s) => s.trim());\n const tags: string[] = [];\n while (items.length > 0 && TAGS.has(items[0]!)) tags.push(items.shift()!);\n if (tags.includes('vert')) return 'vert';\n if (items.length > 3) throw lineError('Mermaid', line, 'a task takes an id, a start and an end after its tags, and no more');\n if (items.length === 0 || items.some((s) => s === '')) throw lineError('Mermaid', line, 'a task needs an end');\n const [id, start, end] = items.length === 3 ? items : items.length === 2 ? [undefined, ...items] : [undefined, undefined, items[0]];\n return {\n name,\n ...(id !== undefined ? { id } : {}),\n ...(tags.length > 0 ? { tags: [...new Set(tags)] as GanttTag[] } : {}),\n start: start === undefined ? { kind: 'previous' } : parseGanttStart(start),\n end: parseGanttEnd(end!),\n };\n}\n","/** A Mermaid gantt as a one-page document holding a plot page. */\nimport type { GanttData, GanttTask } from '@weasel-js/plot';\nimport type { ImportResult, PlotPage } from '../../document';\nimport { Warnings } from '../../graphRead';\nimport { lineError } from '../../lineError';\nimport { pageNameOf, statementsOf } from '../common/lines';\nimport { ganttText, parseGanttTask } from './parse';\n\n/** The page a gantt is read onto. */\nexport const GANTT_PAGE = { width: 1000, height: 500 } as const;\n\n/** Statements read and dropped: what a chart does not hold. */\nconst DROPPED = new Set(['click', 'call', 'inclusiveEndDates', 'topAxis', 'tickInterval', 'weekday', 'displayMode', 'weekend', 'vert', 'includes']);\n\n/** Reads a Mermaid `gantt`. Throws, naming the line, on text that is not one. */\nexport function readMermaidGantt(text: string): ImportResult {\n const src = statementsOf(text);\n const warnings = new Warnings();\n if (src.header.text !== 'gantt') throw lineError('Mermaid', src.header.line, `\"${src.header.text}\" is not a gantt header`);\n const settings: { title?: string; dateFormat?: string; axisFormat?: string; excludes?: string[]; todayMarker?: string } = {};\n const sections: { name?: string; tasks: GanttTask[] }[] = [{ tasks: [] }];\n for (const s of src.body) {\n const m = /^(\\S+)(?:\\s+(.*))?$/.exec(s.text)!;\n const [keyword, rest = ''] = [m[1]!, m[2]?.trim()];\n // A colon makes the line a task named for the word, except after `click` and `call`, whose links hold colons.\n if (DROPPED.has(keyword) && (keyword === 'click' || keyword === 'call' || !s.text.includes(':'))) {\n warnings.list('Mermaid gantt statements were dropped', keyword);\n continue;\n }\n switch (keyword) {\n case 'title': settings.title = ganttText(rest); continue;\n case 'dateFormat': settings.dateFormat = rest; continue;\n case 'axisFormat': settings.axisFormat = rest; continue;\n case 'excludes': settings.excludes = rest.split(/[\\s,]+/).filter((e) => e !== ''); continue;\n case 'todayMarker': settings.todayMarker = rest; continue;\n case 'section': sections.push({ name: ganttText(rest), tasks: [] }); continue;\n }\n const task = parseGanttTask(s.text, s.line);\n if (task === 'vert') warnings.add('Mermaid gantt vertical markers were dropped.');\n else sections[sections.length - 1]!.tasks.push(task);\n }\n const name = pageNameOf(src, warnings);\n const { title, ...rest } = settings;\n if (title !== undefined && src.title !== undefined && title !== src.title) {\n warnings.add('The front matter title was dropped; the chart is named by its title statement.');\n }\n const chartTitle = title || src.title;\n const data: GanttData = {\n kind: 'gantt',\n ...(chartTitle ? { title: chartTitle } : {}),\n ...rest,\n sections: sections.filter((sec, i) => i > 0 || sec.tasks.length > 0),\n };\n const pageName = chartTitle || name;\n const page: PlotPage = { kind: 'plot', id: 'page-1', ...(pageName ? { name: pageName } : {}), ...GANTT_PAGE, data };\n return { document: { pages: [page] }, warnings: warnings.all() };\n}\n","/** A plot page holding a gantt as Mermaid `gantt` text. */\nimport { formatGanttEnd, formatGanttStart, type GanttData, type GanttTask } from '@weasel-js/plot';\nimport type { ExportResult, PlotPage } from '../../document';\nimport { Warnings } from '../../graphRead';\n\n/** `s` on one line, the colon Mermaid splits a task on written as `#58;`. */\nfunction oneLine(s: string, warnings: Warnings): string {\n if (/[\\r\\n]/.test(s)) warnings.add('Mermaid gantt text holds one line; line breaks were written as spaces.');\n return s.replace(/\\s*[\\r\\n]+\\s*/g, ' ').replace(/:/g, '#58;');\n}\n\n/**\n * A task's items after the colon. Mermaid names no task that starts where the one before it ends, so such a task\n * with an id starts `after` that task's id, and loses its own id when that task has none.\n */\nfunction taskItems(task: GanttTask, before: GanttTask | undefined, warnings: Warnings): string[] {\n const items: string[] = [...(task.tags ?? [])];\n const end = formatGanttEnd(task.end);\n if (task.start.kind !== 'previous') return [...items, ...(task.id !== undefined ? [task.id] : []), formatGanttStart(task.start), end];\n if (task.id === undefined) return [...items, end];\n if (before?.id !== undefined) return [...items, task.id, `after ${before.id}`, end];\n warnings.add('Mermaid gives no id to a first task, or one after a task with none, unless it has a start of its own; those ids were dropped.');\n return [...items, end];\n}\n\nfunction settingLines(data: GanttData, text: (s: string) => string): string[] {\n const lines: string[] = [];\n if (data.title !== undefined) lines.push(` title ${text(data.title)}`);\n if (data.dateFormat !== undefined) lines.push(` dateFormat ${data.dateFormat}`);\n if (data.axisFormat !== undefined) lines.push(` axisFormat ${data.axisFormat}`);\n if (data.excludes !== undefined && data.excludes.length > 0) lines.push(` excludes ${data.excludes.join(', ')}`);\n if (data.todayMarker !== undefined) lines.push(` todayMarker ${data.todayMarker}`);\n return lines;\n}\n\n/** Writes `page`'s gantt as Mermaid. Throws on a page holding another kind of chart. */\nexport function writeMermaidGantt(page: PlotPage): ExportResult {\n const data = page.data;\n if (data.kind !== 'gantt') throw new Error(`Mermaid writes this chart as a gantt only; the page holds a ${(data as { kind: string }).kind}`);\n const warnings = new Warnings();\n const text = (s: string) => oneLine(s, warnings);\n const lines = ['gantt', ...settingLines(data, text)];\n let before: GanttTask | undefined;\n let named = false;\n data.sections.forEach((section, i) => {\n if (section.name !== undefined) {\n lines.push(` section ${text(section.name)}`);\n named = true;\n } else if (i > 0) {\n warnings.add('Mermaid holds no unnamed section after the first; its tasks were written into the section before it.');\n }\n for (const task of section.tasks) {\n lines.push(`${named ? ' ' : ' '}${text(task.name)} :${taskItems(task, before, warnings).join(', ')}`);\n before = task;\n }\n });\n return { text: `${lines.join('\\n')}\\n`, warnings: warnings.all() };\n}\n","/** A Mermaid gitGraph's statements as the commands they run, each with its line. */\nimport type { GitCommand, GitCommitType } from '@weasel-js/plot';\nimport { lineError } from '../../lineError';\nimport type { Statement } from '../common/lines';\n\nconst FORMAT = 'Mermaid';\nconst TYPES: readonly string[] = ['NORMAL', 'REVERSE', 'HIGHLIGHT'];\n/** One `key: value` attribute, its value quoted or bare. */\nconst ATTRIBUTE = /\\s*(\\w+)\\s*:\\s*(?:\"([^\"]*)\"|([^\\s\"]+))\\s*/y;\n/** A branch name, quoted or bare, and what follows it. */\nconst NAME = /^(?:\"([^\"]*)\"|([^\\s\"]+))\\s*(.*)$/;\n\n/** The attributes in `rest`, each checked against those `kind` takes. */\nfunction attributes(rest: string, kind: string, allowed: readonly string[], line: number): Map<string, string> {\n const out = new Map<string, string>();\n let at = 0;\n while (at < rest.length) {\n ATTRIBUTE.lastIndex = at;\n const m = ATTRIBUTE.exec(rest);\n if (m === null) throw lineError(FORMAT, line, `\"${rest.slice(at).trim()}\" is not an attribute`);\n const key = m[1]!;\n if (!allowed.includes(key)) throw lineError(FORMAT, line, `\"${key}\" is not an attribute of ${kind}; it takes ${allowed.join(', ')}`);\n if (out.has(key)) throw lineError(FORMAT, line, `\"${key}\" is given twice`);\n out.set(key, m[2] ?? m[3]!);\n at = ATTRIBUTE.lastIndex;\n }\n return out;\n}\n\nfunction typeOf(value: string | undefined, line: number): { type?: GitCommitType } {\n if (value === undefined) return {};\n if (!TYPES.includes(value)) throw lineError(FORMAT, line, `\"${value}\" is not a commit type; it is NORMAL, REVERSE or HIGHLIGHT`);\n return { type: value as GitCommitType };\n}\n\n/** Each optional attribute named in `keys`, under the field `as` names, when `attrs` gives it. */\nconst fields = (attrs: Map<string, string>, keys: Readonly<Record<string, string>>): Record<string, string> =>\n Object.fromEntries(Object.entries(keys).flatMap(([key, as]) => (attrs.has(key) ? [[as, attrs.get(key)!]] : [])));\n\nfunction nameOf(rest: string, keyword: string, line: number): { name: string; rest: string } {\n const m = NAME.exec(rest);\n if (m === null) throw lineError(FORMAT, line, `${keyword} needs a branch name`);\n return { name: m[1] ?? m[2]!, rest: m[3]! };\n}\n\n/** One statement as its command. Throws, naming the line, on one it cannot read. */\nexport function commandOf({ text, line }: Statement): GitCommand {\n const m = /^(\\S+)\\s*(.*)$/.exec(text)!;\n const keyword = m[1]!;\n const rest = m[2]!.trim();\n switch (keyword) {\n case 'commit': {\n const attrs = attributes(rest, 'commit', ['id', 'type', 'tag', 'msg'], line);\n return { kind: 'commit', ...fields(attrs, { id: 'id' }), ...typeOf(attrs.get('type'), line), ...fields(attrs, { tag: 'tag', msg: 'message' }) };\n }\n case 'branch': {\n const { name, rest: after } = nameOf(rest, 'branch', line);\n const order = attributes(after, 'branch', ['order'], line).get('order');\n if (order !== undefined && !/^\\d+$/.test(order)) throw lineError(FORMAT, line, `\"${order}\" is not an order; it is a whole number`);\n return { kind: 'branch', name, ...(order !== undefined ? { order: Number(order) } : {}) };\n }\n case 'checkout':\n case 'switch': {\n const { name, rest: after } = nameOf(rest, keyword, line);\n if (after !== '') throw lineError(FORMAT, line, `\"${after}\" follows the branch name`);\n return { kind: 'checkout', name };\n }\n case 'merge': {\n const { name, rest: after } = nameOf(rest, 'merge', line);\n const attrs = attributes(after, 'merge', ['id', 'tag', 'type'], line);\n return { kind: 'merge', branch: name, ...fields(attrs, { id: 'id' }), ...typeOf(attrs.get('type'), line), ...fields(attrs, { tag: 'tag' }) };\n }\n case 'cherry-pick': {\n const attrs = attributes(rest, 'cherry-pick', ['id', 'tag', 'parent'], line);\n const id = attrs.get('id');\n if (id === undefined) throw lineError(FORMAT, line, 'cherry-pick needs the id of the commit it copies');\n return { kind: 'cherry-pick', id, ...fields(attrs, { tag: 'tag', parent: 'parent' }) };\n }\n default:\n throw lineError(FORMAT, line, `\"${keyword}\" is not a gitGraph statement`);\n }\n}\n","/** A Mermaid gitGraph as a one-page document holding a plot page. */\nimport { replayGitGraph, type GitGraphData } from '@weasel-js/plot';\nimport type { ImportResult, PlotPage } from '../../document';\nimport { Warnings } from '../../graphRead';\nimport { lineError } from '../../lineError';\nimport { pageNameOf, statementsOf } from '../common/lines';\nimport { commandOf } from './parse';\n\n/** The page a gitGraph is read onto. */\nexport const GITGRAPH_PAGE = { width: 900, height: 420 } as const;\n\nconst HEADER = /^gitGraph(?:\\s+(LR|TB|BT))?\\s*:?$/;\n\n/** Reads a Mermaid `gitGraph` diagram. Throws, naming the line, on text that is not one, or a command Mermaid\n * would refuse: checking out a branch never made, making one twice, a merge or cherry-pick with nothing to take. */\nexport function readMermaidGitGraph(text: string): ImportResult {\n const src = statementsOf(text);\n const header = HEADER.exec(src.header.text);\n if (header === null) throw lineError('Mermaid', src.header.line, `\"${src.header.text}\" is not a gitGraph header`);\n const commands = src.body.map(commandOf);\n const data: GitGraphData = {\n kind: 'gitgraph',\n ...(src.title !== undefined && src.title !== '' ? { title: src.title } : {}),\n ...(header[1] !== undefined ? { orientation: header[1] as 'LR' | 'TB' | 'BT' } : {}),\n commands,\n };\n const { error } = replayGitGraph(data);\n if (error !== undefined) throw lineError('Mermaid', src.body[error.command]!.line, error.message);\n const warnings = new Warnings();\n if (commands.some((c) => c.kind === 'commit' && c.message !== undefined)) warnings.add('Commit messages are kept but not drawn.');\n const name = pageNameOf(src, warnings);\n const page: PlotPage = { kind: 'plot', id: 'page-1', ...(name ? { name } : {}), ...GITGRAPH_PAGE, data };\n return { document: { pages: [page] }, warnings: warnings.all() };\n}\n","/** A plot page holding a gitgraph as Mermaid `gitGraph` text: front matter for its title, then a line per command. */\nimport type { GitCommand } from '@weasel-js/plot';\nimport type { ExportResult, PlotPage } from '../../document';\nimport { titleLines } from '../common/lines';\n\ntype Warn = (m: string) => void;\n\n/** `s` in double quotes, which Mermaid strings cannot hold, so a quote inside becomes a single one. */\nfunction quoted(s: string, warn: Warn): string {\n if (s.includes('\"')) warn('Mermaid strings hold no double quotes; they were written as single quotes.');\n return `\"${s.replace(/\"/g, \"'\")}\"`;\n}\n\n/** A branch name bare where Mermaid reads it back the same, else quoted. */\nconst branchName = (s: string, warn: Warn): string => (/^[^\\s\"]+$/.test(s) ? s : quoted(s, warn));\n\n/** ` key: value` for each of `pairs` that has a value, strings quoted. */\nconst attrs = (pairs: readonly [string, string | number | undefined, boolean][], warn: Warn): string =>\n pairs.flatMap(([key, value, quote]) => (value === undefined ? [] : [` ${key}: ${quote ? quoted(String(value), warn) : value}`])).join('');\n\nfunction commandLine(cmd: GitCommand, main: (name: string) => string, warn: Warn): string {\n switch (cmd.kind) {\n case 'commit':\n return `commit${attrs([['id', cmd.id, true], ['type', cmd.type, false], ['tag', cmd.tag, true], ['msg', cmd.message, true]], warn)}`;\n case 'branch':\n return `branch ${branchName(main(cmd.name), warn)}${attrs([['order', cmd.order, false]], warn)}`;\n case 'checkout':\n return `checkout ${branchName(main(cmd.name), warn)}`;\n case 'merge':\n return `merge ${branchName(main(cmd.branch), warn)}${attrs([['id', cmd.id, true], ['type', cmd.type, false], ['tag', cmd.tag, true]], warn)}`;\n case 'cherry-pick':\n return `cherry-pick${attrs([['id', cmd.id, true], ['tag', cmd.tag, true], ['parent', cmd.parent, true]], warn)}`;\n }\n}\n\n/** Writes `page`'s gitgraph as Mermaid. Throws on a page holding another kind of chart, or one whose main branch is\n * not `main` while another branch is. */\nexport function writeMermaidGitGraph(page: PlotPage): ExportResult {\n const data = page.data;\n if (data.kind !== 'gitgraph') throw new Error(`Mermaid writes this chart as a gitGraph only; the page holds a ${(data as { kind: string }).kind}`);\n const warnings: string[] = [];\n const warn: Warn = (m) => {\n if (!warnings.includes(m)) warnings.push(m);\n };\n const mainBranch = data.mainBranch ?? 'main';\n if (mainBranch !== 'main') {\n if (data.commands.some((c) => c.kind === 'branch' && c.name === 'main')) {\n throw new Error(`Mermaid's main branch is \"main\", and this graph has another branch by that name besides its main branch \"${mainBranch}\"`);\n }\n warn(`Mermaid's main branch is \"main\"; \"${mainBranch}\" was written as main.`);\n }\n const main = (name: string) => (name === mainBranch ? 'main' : name);\n const header = data.orientation === undefined ? 'gitGraph' : `gitGraph ${data.orientation}:`;\n const lines = [...titleLines(data.title), header, ...data.commands.map((c) => ` ${commandLine(c, main, warn)}`)];\n return { text: `${lines.join('\\n')}\\n`, warnings };\n}\n","/** A Mermaid user journey as a one-page document holding a plot page. */\nimport type { JourneyData, JourneyTask } from '@weasel-js/plot';\nimport type { ImportResult, PlotPage } from '../../document';\nimport { Warnings } from '../../graphRead';\nimport { lineError } from '../../lineError';\nimport { pageNameOf, statementsOf, type Statement } from '../common/lines';\n\n/** The page a journey is read onto. */\nexport const JOURNEY_PAGE = { width: 800, height: 450 } as const;\n\n/** `Name: 5: Actor1, Actor2` as a step. Throws, naming the line, on a line that is not one or a score that is not a\n * whole number from 1 to 5. */\nfunction taskOf(s: Statement): JourneyTask {\n const [name, score, actors, ...more] = s.text.split(':').map((p) => p.trim());\n if (score === undefined || more.length > 0 || name === '') throw lineError('Mermaid', s.line, `\"${s.text}\" is not a journey statement`);\n if (!/^[+-]?\\d+$/.test(score) || Number(score) < 1 || Number(score) > 5) {\n throw lineError('Mermaid', s.line, `a step's score is a whole number from 1 to 5, and \"${score}\" is not`);\n }\n return { name: name!, score: Number(score), actors: (actors ?? '').split(',').map((a) => a.trim()).filter((a) => a !== '') };\n}\n\n/** Reads a Mermaid `journey`. Throws, naming the line, on text that is not one. */\nexport function readMermaidJourney(text: string): ImportResult {\n const src = statementsOf(text);\n if (src.header.text !== 'journey') throw lineError('Mermaid', src.header.line, `\"${src.header.text}\" is not a journey header`);\n const warnings = new Warnings();\n let title: string | undefined;\n const sections: { name?: string; tasks: JourneyTask[] }[] = [];\n for (const s of src.body) {\n const keyword = /^(title|section)(?:\\s+(.*))?$/.exec(s.text);\n if (keyword?.[1] === 'title') title = keyword[2]?.trim() || undefined;\n else if (keyword?.[1] === 'section') {\n const name = keyword[2]?.trim();\n sections.push({ ...(name ? { name } : {}), tasks: [] });\n } else {\n if (sections.length === 0) sections.push({ tasks: [] });\n sections[sections.length - 1]!.tasks.push(taskOf(s));\n }\n }\n const named = pageNameOf(src, warnings);\n if (title !== undefined && src.title !== undefined && src.title !== title) warnings.add('The front matter title was dropped; the chart is titled by its own.');\n title ??= src.title;\n const data: JourneyData = { kind: 'journey', ...(title !== undefined ? { title } : {}), sections };\n const name = title ?? named;\n const page: PlotPage = { kind: 'plot', id: 'page-1', ...(name !== undefined ? { name } : {}), ...JOURNEY_PAGE, data };\n return { document: { pages: [page] }, warnings: warnings.all() };\n}\n","/** A plot page holding a user journey as Mermaid `journey` text. */\nimport type { ExportResult, PlotPage } from '../../document';\nimport { Warnings } from '../../graphRead';\n\n/** Writes `page`'s journey as Mermaid. Throws on a page holding another kind of chart. */\nexport function writeMermaidJourney(page: PlotPage): ExportResult {\n const data = page.data;\n if (data.kind !== 'journey') throw new Error(`Mermaid writes this chart as a journey only; the page holds a ${(data as { kind: string }).kind}`);\n const warnings = new Warnings();\n const plain = (s: string, syntax: RegExp): string => {\n if (!syntax.test(s)) return s.trim();\n warnings.add('Mermaid journey text holds no \"#\", \";\" or \":\" (nor \",\" in an actor); they were dropped.');\n return s.replace(syntax, '').trim();\n };\n const lines = ['journey'];\n if (data.title?.trim()) lines.push(` title ${plain(data.title, /[#;]/g)}`);\n data.sections.forEach((section, s) => {\n if (section.name !== undefined && section.name.trim() !== '') lines.push(` section ${plain(section.name, /[#:;]/g)}`);\n else if (s > 0) warnings.add('Mermaid holds a section with no name only first; its steps were written under the section before.');\n for (const t of section.tasks) {\n const score = Math.min(5, Math.max(1, Math.round(Number.isFinite(t.score) ? t.score : 1)));\n if (score !== t.score) warnings.add('Mermaid scores are whole numbers from 1 to 5; others were rounded into that range.');\n const actors = t.actors.map((a) => plain(a, /[#:;,]/g)).filter((a) => a !== '');\n lines.push(` ${plain(t.name, /[#:;]/g)}: ${score}${actors.length > 0 ? `: ${actors.join(', ')}` : ''}`);\n }\n });\n return { text: `${lines.join('\\n')}\\n`, warnings: warnings.all() };\n}\n","/** A Mermaid packet diagram as a one-page document holding a plot page. */\nimport type { PacketData, PacketField } from '@weasel-js/plot';\nimport type { ImportResult, PlotPage } from '../../document';\nimport { Warnings } from '../../graphRead';\nimport { lineError } from '../../lineError';\nimport { pageNameOf, statementsOf, type Statement } from '../common/lines';\nimport { unquote } from '../xychart/parse';\n\n/** The page a packet diagram is read onto. */\nexport const PACKET_PAGE = { width: 800, height: 400 } as const;\n\nconst FIELD = /^(?:(\\d+)(?:\\s*-\\s*(\\d+))?|\\+(\\d+))\\s*:\\s*(\"[^\"]*\"|'[^']*')$/;\n\n/** `0-15: \"label\"`, `16: \"label\"` or `+8: \"label\"` as a field after one ending at `after`. Throws, naming the line, on\n * a line that is not one, or a field that runs backward or overlaps the one before. */\nfunction fieldOf(s: Statement, after: number): PacketField {\n const m = FIELD.exec(s.text);\n if (m === null) throw lineError('Mermaid', s.line, `\"${s.text}\" is not a packet field`);\n const label = unquote(m[4]!);\n if (m[3] !== undefined) {\n const count = Number(m[3]);\n if (count < 1) throw lineError('Mermaid', s.line, 'a field takes at least one bit');\n return { start: after + 1, end: after + count, label, relative: true };\n }\n const start = Number(m[1]);\n const end = m[2] !== undefined ? Number(m[2]) : start;\n if (end < start) throw lineError('Mermaid', s.line, `a field runs from its first bit to its last, and ${start}-${end} runs backward`);\n if (start <= after) throw lineError('Mermaid', s.line, `the field at ${start} overlaps the one before, which ends at bit ${after}`);\n return { start, end, label };\n}\n\n/** Reads a Mermaid `packet-beta` (or `packet`). Throws, naming the line, on text that is not one. */\nexport function readMermaidPacket(text: string): ImportResult {\n const src = statementsOf(text);\n if (!/^packet(?:-beta)?$/.test(src.header.text)) throw lineError('Mermaid', src.header.line, `\"${src.header.text}\" is not a packet header`);\n const warnings = new Warnings();\n let title: string | undefined;\n const fields: PacketField[] = [];\n for (const s of src.body) {\n const t = /^title(?:\\s+(.*))?$/.exec(s.text);\n if (t !== null) title = t[1]?.trim() || undefined;\n else fields.push(fieldOf(s, fields[fields.length - 1]?.end ?? -1));\n }\n const named = pageNameOf(src, warnings);\n if (title !== undefined && src.title !== undefined && src.title !== title) warnings.add('The front matter title was dropped; the chart is titled by its own.');\n title ??= src.title;\n const data: PacketData = { kind: 'packet', ...(title !== undefined ? { title } : {}), fields };\n const name = title ?? named;\n const page: PlotPage = { kind: 'plot', id: 'page-1', ...(name !== undefined ? { name } : {}), ...PACKET_PAGE, data };\n return { document: { pages: [page] }, warnings: warnings.all() };\n}\n","/** A plot page holding a packet diagram as Mermaid `packet-beta` text. */\nimport type { ExportResult, PlotPage } from '../../document';\nimport { Warnings } from '../../graphRead';\n\n/** `s` in double quotes, a quote inside it written as Mermaid's `#quot;`. */\nconst quoted = (s: string): string => `\"${s.replace(/\"/g, '#quot;')}\"`;\n\n/** Writes `page`'s packet diagram as Mermaid. Throws on a page holding another kind of chart. */\nexport function writeMermaidPacket(page: PlotPage): ExportResult {\n const data = page.data;\n if (data.kind !== 'packet') throw new Error(`Mermaid writes this chart as a packet diagram only; the page holds a ${(data as { kind: string }).kind}`);\n const warnings = new Warnings();\n if (data.bitsPerRow !== undefined && data.bitsPerRow !== 32) warnings.add('Mermaid reads bits per row from its configuration only; it was dropped.');\n const lines = ['packet-beta'];\n if (data.title?.trim()) lines.push(` title ${data.title.trim()}`);\n let after = -1;\n for (const f of data.fields) {\n const whole = Number.isInteger(f.start) && Number.isInteger(f.end);\n if (!whole || f.end < f.start || f.start <= after) {\n warnings.add('Mermaid reads fields in order of their bits, never overlapping; fields that run backward or overlap were dropped.');\n continue;\n }\n if (f.relative && f.start !== after + 1) warnings.add('Mermaid counts a field\\'s bits from the end of the one before; fields after a gap were written as ranges.');\n const bits = f.relative && f.start === after + 1 ? `+${f.end - f.start + 1}` : f.start === f.end ? `${f.start}` : `${f.start}-${f.end}`;\n lines.push(` ${bits}: ${quoted(f.label)}`);\n after = f.end;\n }\n return { text: `${lines.join('\\n')}\\n`, warnings: warnings.all() };\n}\n","/** A Mermaid pie as a one-page document holding a plot page. */\nimport type { PieData, PieSlice } from '@weasel-js/plot';\nimport type { ImportResult, PlotPage } from '../../document';\nimport { Warnings } from '../../graphRead';\nimport { lineError } from '../../lineError';\nimport { pageNameOf, statementsOf } from '../common/lines';\nimport { unquote } from '../xychart/parse';\n\n/** The page a pie is read onto. */\nexport const PIE_PAGE = { width: 640, height: 400 } as const;\n\nconst HEADER = /^pie(\\s+showData)?(?:\\s+title(?:\\s+(.*))?)?$/;\nconst SLICE = /^(\"[^\"]*\"|'[^']*')\\s*:\\s*(\\S+)$/;\nconst NUMBER = /^[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?$/i;\n\n/** Reads a Mermaid `pie`. Throws, naming the line, on text that is not one or a value that is not a non-negative number. */\nexport function readMermaidPie(text: string): ImportResult {\n const src = statementsOf(text);\n const head = HEADER.exec(src.header.text);\n if (head === null) throw lineError('Mermaid', src.header.line, `\"${src.header.text}\" is not a pie header`);\n const warnings = new Warnings();\n let title = head[2]?.trim() || undefined;\n const slices: PieSlice[] = [];\n const labels = new Set<string>();\n for (const s of src.body) {\n const t = /^title(?:\\s+(.*))?$/.exec(s.text);\n if (t !== null) {\n title = t[1]?.trim() || undefined;\n continue;\n }\n const m = SLICE.exec(s.text);\n if (m === null) throw lineError('Mermaid', s.line, `\"${s.text}\" is not a pie slice`);\n if (!NUMBER.test(m[2]!)) throw lineError('Mermaid', s.line, `\"${m[2]}\" is not a number`);\n const value = Number(m[2]);\n if (value < 0) throw lineError('Mermaid', s.line, `a slice's value must not be negative, and ${m[2]} is`);\n const label = unquote(m[1]!);\n if (labels.has(label)) {\n warnings.list('Mermaid keeps the first of slices sharing a label; the others were dropped', label);\n continue;\n }\n labels.add(label);\n slices.push({ label, value });\n }\n const named = pageNameOf(src, warnings);\n if (title !== undefined && src.title !== undefined && src.title !== title) warnings.add('The front matter title was dropped; the chart is titled by its own.');\n title ??= src.title;\n const data: PieData = { kind: 'pie', ...(title !== undefined ? { title } : {}), ...(head[1] !== undefined ? { showData: true } : {}), slices };\n const name = title ?? named;\n const page: PlotPage = { kind: 'plot', id: 'page-1', ...(name !== undefined ? { name } : {}), ...PIE_PAGE, data };\n return { document: { pages: [page] }, warnings: warnings.all() };\n}\n","/** A plot page holding a pie as Mermaid `pie` text. */\nimport type { ExportResult, PlotPage } from '../../document';\nimport { Warnings } from '../../graphRead';\n\n/** `s` in double quotes, a quote inside it written as Mermaid's `#quot;`. */\nconst quoted = (s: string): string => `\"${s.replace(/\"/g, '#quot;')}\"`;\n\n/** Writes `page`'s pie as Mermaid. Throws on a page holding another kind of chart. */\nexport function writeMermaidPie(page: PlotPage): ExportResult {\n const data = page.data;\n if (data.kind !== 'pie') throw new Error(`Mermaid writes this chart as a pie only; the page holds a ${(data as { kind: string }).kind}`);\n const warnings = new Warnings();\n const title = data.title?.trim();\n const lines = [`pie${data.showData ? ' showData' : ''}${title ? ` title ${title}` : ''}`];\n const labels = new Set<string>();\n for (const s of data.slices) {\n if (labels.has(s.label)) warnings.add('Mermaid reads only the first of slices sharing a label.');\n labels.add(s.label);\n const ok = Number.isFinite(s.value) && s.value >= 0;\n if (!ok) warnings.add('Mermaid holds only non-negative values; others were written as 0.');\n lines.push(` ${quoted(s.label)} : ${ok ? s.value : 0}`);\n }\n return { text: `${lines.join('\\n')}\\n`, warnings: warnings.all() };\n}\n","/** A Mermaid quadrant chart's statements read into the parts of its spec. */\nimport type { QuadrantAxis, QuadrantPoint, QuadrantPointStyle } from '@weasel-js/plot';\nimport { lineError } from '../../lineError';\nimport type { Statement } from '../common/lines';\nimport { unquote } from '../xychart/parse';\n\nconst NUMBER = /^[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?$/i;\n\n/** Text bare or in double quotes, its quotes and Mermaid's `#quot;` read. */\nexport const textOf = (s: string): string => {\n const t = s.trim();\n return t.length > 1 && t.startsWith('\"') && t.endsWith('\"') ? unquote(t) : t;\n};\n\nfunction numberAt(text: string, line: number): number {\n if (!NUMBER.test(text)) throw lineError('Mermaid', line, `\"${text}\" is not a number`);\n return Number(text);\n}\n\n/** `Low --> High`, `Low -->` or `Low` as an axis's ends. */\nexport function axisOf(rest: string): QuadrantAxis {\n const at = rest.indexOf('-->');\n const low = textOf(at < 0 ? rest : rest.slice(0, at));\n const high = at < 0 ? '' : textOf(rest.slice(at + 3));\n return { ...(low !== '' ? { low } : {}), ...(high !== '' ? { high } : {}) };\n}\n\n/** `radius: 10, color: #ff3300, stroke-color: #10f0f0, stroke-width: 5px` as a style. Throws, naming the line, on\n * anything else. */\nexport function styleOf(text: string, line: number): QuadrantPointStyle {\n const style: QuadrantPointStyle = {};\n for (const part of text.split(',').map((p) => p.trim()).filter((p) => p !== '')) {\n const m = /^([\\w-]+)\\s*:\\s*(\\S+)$/.exec(part);\n if (m === null) throw lineError('Mermaid', line, `\"${part}\" is not a point style`);\n const key = m[1]!;\n const value = m[2]!;\n switch (key) {\n case 'radius': style.radius = numberAt(value, line); break;\n case 'color': style.color = value; break;\n case 'stroke-color': style.strokeColor = value; break;\n case 'stroke-width': style.strokeWidth = numberAt(value.replace(/px$/, ''), line); break;\n default: throw lineError('Mermaid', line, `\"${key}\" is not a point style`);\n }\n }\n return style;\n}\n\nconst POINT = /^(.+?)(?::::([\\w-]+))?\\s*:\\s*\\[([^\\]]*)\\](.*)$/;\n\n/** `Name:::class: [x, y] styles` as a point, or `null` for a line that is not one. Throws, naming the line, on\n * coordinates that are not numbers from 0 to 1. */\nexport function pointOf(s: Statement): QuadrantPoint | null {\n const m = POINT.exec(s.text);\n if (m === null) return null;\n const coords = m[3]!.split(',').map((c) => c.trim());\n if (coords.length !== 2) throw lineError('Mermaid', s.line, `a point takes [x, y], not [${m[3]}]`);\n const [x, y] = coords.map((c) => numberAt(c, s.line)) as [number, number];\n if (x < 0 || x > 1 || y < 0 || y > 1) throw lineError('Mermaid', s.line, `a point's x and y run from 0 to 1, and [${coords.join(', ')}] does not`);\n const style = styleOf(m[4]!, s.line);\n return {\n name: textOf(m[1]!), x, y,\n ...(m[2] !== undefined ? { className: m[2] } : {}),\n ...(Object.keys(style).length > 0 ? { style } : {}),\n };\n}\n","/** A Mermaid quadrant chart as a one-page document holding a plot page. */\nimport type { QuadrantAxis, QuadrantData, QuadrantPoint, QuadrantPointStyle } from '@weasel-js/plot';\nimport type { ImportResult, PlotPage } from '../../document';\nimport { Warnings } from '../../graphRead';\nimport { lineError } from '../../lineError';\nimport { pageNameOf, statementsOf } from '../common/lines';\nimport { axisOf, pointOf, styleOf, textOf } from './parse';\n\n/** The page a quadrant chart is read onto. */\nexport const QUADRANT_PAGE = { width: 600, height: 600 } as const;\n\n/** Reads a Mermaid `quadrantChart`. Throws, naming the line, on text that is not one or a point outside the unit square. */\nexport function readMermaidQuadrant(text: string): ImportResult {\n const src = statementsOf(text);\n if (src.header.text !== 'quadrantChart') throw lineError('Mermaid', src.header.line, `\"${src.header.text}\" is not a quadrantChart header`);\n const warnings = new Warnings();\n let title: string | undefined;\n const axes: { x?: QuadrantAxis; y?: QuadrantAxis } = {};\n const quadrants: [string?, string?, string?, string?] = [undefined, undefined, undefined, undefined];\n const points: QuadrantPoint[] = [];\n const classes: Record<string, QuadrantPointStyle> = {};\n for (const s of src.body) {\n const m = /^(\\S+)(?:\\s+(.*))?$/.exec(s.text)!;\n const keyword = m[1]!;\n const rest = m[2] ?? '';\n const quadrant = /^quadrant-([1-4])$/.exec(keyword);\n if (keyword === 'title') title = rest.trim() || undefined;\n else if (keyword === 'x-axis' || keyword === 'y-axis') axes[keyword[0] as 'x' | 'y'] = axisOf(rest);\n else if (quadrant !== null) quadrants[(Number(quadrant[1]) - 1) as 0 | 1 | 2 | 3] = textOf(rest) || undefined;\n else if (keyword === 'classDef') {\n const c = /^([\\w-]+)\\s*(.*)$/.exec(rest);\n if (c === null) throw lineError('Mermaid', s.line, 'a classDef needs a name');\n classes[c[1]!] = styleOf(c[2]!, s.line);\n } else {\n const point = pointOf(s);\n if (point === null) throw lineError('Mermaid', s.line, `\"${s.text}\" is not a quadrantChart statement`);\n points.push(point);\n }\n }\n const named = pageNameOf(src, warnings);\n if (title !== undefined && src.title !== undefined && src.title !== title) warnings.add('The front matter title was dropped; the chart is titled by its own.');\n title ??= src.title;\n while (quadrants.length > 0 && quadrants[quadrants.length - 1] === undefined) quadrants.pop();\n const axis = (a: QuadrantAxis | undefined) => (a !== undefined && Object.keys(a).length > 0 ? a : undefined);\n const x = axis(axes.x);\n const y = axis(axes.y);\n const data: QuadrantData = {\n kind: 'quadrant',\n ...(title !== undefined ? { title } : {}),\n ...(x !== undefined ? { x } : {}),\n ...(y !== undefined ? { y } : {}),\n ...(quadrants.length > 0 ? { quadrants } : {}),\n points,\n ...(Object.keys(classes).length > 0 ? { classes } : {}),\n };\n const name = title ?? named;\n const page: PlotPage = { kind: 'plot', id: 'page-1', ...(name !== undefined ? { name } : {}), ...QUADRANT_PAGE, data };\n return { document: { pages: [page] }, warnings: warnings.all() };\n}\n","/** A plot page holding a quadrant chart as Mermaid `quadrantChart` text. */\nimport type { QuadrantAxis, QuadrantPointStyle } from '@weasel-js/plot';\nimport type { ExportResult, PlotPage } from '../../document';\nimport { Warnings } from '../../graphRead';\n\n/** Text bare where Mermaid reads it back the same, else in double quotes with a quote inside written `#quot;`. */\nconst text = (s: string): string => (/^[^\\s\"].*$/.test(s) && !/[:[\\]\"]|-->|\\s$/.test(s) ? s : `\"${s.replace(/\"/g, '#quot;')}\"`);\n\nfunction axisLine(name: 'x' | 'y', axis: QuadrantAxis | undefined, warnings: Warnings): string | null {\n if (axis?.low === undefined) {\n if (axis?.high !== undefined) warnings.add('Mermaid holds an axis\\'s high end only with its low end; it was dropped.');\n return null;\n }\n return `${name}-axis ${text(axis.low)}${axis.high !== undefined ? ` --> ${text(axis.high)}` : ''}`;\n}\n\nfunction styleText(style: QuadrantPointStyle | undefined): string {\n if (style === undefined) return '';\n return [\n style.radius !== undefined ? `radius: ${style.radius}` : null,\n style.color !== undefined ? `color: ${style.color}` : null,\n style.strokeColor !== undefined ? `stroke-color: ${style.strokeColor}` : null,\n style.strokeWidth !== undefined ? `stroke-width: ${style.strokeWidth}px` : null,\n ].filter((p) => p !== null).join(', ');\n}\n\n/** Writes `page`'s quadrant chart as Mermaid. Throws on a page holding another kind of chart. */\nexport function writeMermaidQuadrant(page: PlotPage): ExportResult {\n const data = page.data;\n if (data.kind !== 'quadrant') throw new Error(`Mermaid writes this chart as a quadrant chart only; the page holds a ${(data as { kind: string }).kind}`);\n const warnings = new Warnings();\n const lines = ['quadrantChart'];\n if (data.title?.trim()) lines.push(` title ${data.title.trim()}`);\n for (const axis of ['x', 'y'] as const) {\n const line = axisLine(axis, data[axis], warnings);\n if (line !== null) lines.push(` ${line}`);\n }\n data.quadrants?.forEach((label, i) => {\n if (label) lines.push(` quadrant-${i + 1} ${text(label)}`);\n });\n for (const p of data.points) {\n const outside = !(p.x >= 0 && p.x <= 1 && p.y >= 0 && p.y <= 1);\n if (outside) warnings.add('Mermaid holds points from 0 to 1 only; others were moved to the nearest edge.');\n const unit = (v: number) => (Number.isFinite(v) ? Math.min(1, Math.max(0, v)) : 0);\n const style = styleText(p.style);\n lines.push(` ${text(p.name)}${p.className !== undefined ? `:::${p.className}` : ''}: [${unit(p.x)}, ${unit(p.y)}]${style ? ` ${style}` : ''}`);\n }\n for (const [name, style] of Object.entries(data.classes ?? {})) lines.push(` classDef ${name} ${styleText(style)}`);\n return { text: `${lines.join('\\n')}\\n`, warnings: warnings.all() };\n}\n","/** A Mermaid radar's statements, read into the chart they describe. */\nimport type { RadarAxis, RadarCurve, RadarData } from '@weasel-js/plot';\nimport { lineError } from '../../lineError';\nimport type { Statement } from '../common/lines';\n\nconst FORMAT = 'Mermaid';\nconst NUMBER = /^[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?$/i;\n/** An axis or a curve: its id, then an optional quoted label in brackets. */\nconst ITEM = /\\s*([A-Za-z_][\\w-]*)\\s*(?:\\[\\s*\"([^\"]*)\"\\s*\\])?\\s*/y;\n\n/** A curve whose values name their axes, resolved once every axis is known. */\ninterface PendingCurve {\n curve: Omit<RadarCurve, 'values'>;\n entries: { axis?: string; value: number }[];\n line: number;\n}\n\nfunction numberAt(text: string, line: number): number {\n if (!NUMBER.test(text)) throw lineError(FORMAT, line, `\"${text}\" is not a number`);\n return Number(text);\n}\n\n/** An id and its label off `text` at `at`, and where it ends; `null` when no id starts there. */\nfunction itemAt(text: string, at: number): { id: string; label?: string; end: number } | null {\n ITEM.lastIndex = at;\n const m = ITEM.exec(text);\n if (m === null) return null;\n return { id: m[1]!, ...(m[2] !== undefined ? { label: m[2] } : {}), end: ITEM.lastIndex };\n}\n\n/** `axis a[\"A\"], b, …` as its axes. */\nfunction axesOf(rest: string, line: number): RadarAxis[] {\n const out: RadarAxis[] = [];\n let at = 0;\n for (;;) {\n const item = itemAt(rest, at);\n if (item === null) throw lineError(FORMAT, line, `\"${rest.slice(at).trim()}\" is not an axis`);\n out.push({ id: item.id, ...(item.label !== undefined ? { label: item.label } : {}) });\n if (item.end >= rest.length) return out;\n if (rest[item.end] !== ',') throw lineError(FORMAT, line, `\"${rest.slice(item.end).trim()}\" is not an axis`);\n at = item.end + 1;\n }\n}\n\n/** `{1, 2}` or `{a: 1, b: 2}` as its entries. */\nfunction entriesOf(body: string, line: number): PendingCurve['entries'] {\n const parts = body.split(',').map((p) => p.trim());\n if (parts.length === 1 && parts[0] === '') return [];\n const entries = parts.map((p) => {\n const keyed = /^([A-Za-z_][\\w-]*)\\s*:\\s*(.*)$/.exec(p);\n return keyed === null ? { value: numberAt(p, line) } : { axis: keyed[1]!, value: numberAt(keyed[2]!.trim(), line) };\n });\n if (entries.some((e) => e.axis === undefined) && entries.some((e) => e.axis !== undefined)) {\n throw lineError(FORMAT, line, 'a curve\\'s values are either all named by axis or none are');\n }\n return entries;\n}\n\n/** `curve a[\"A\"]{…}, b{…}` as its curves, their values still to be matched to the axes. */\nfunction curvesOf(rest: string, line: number): PendingCurve[] {\n const out: PendingCurve[] = [];\n let at = 0;\n for (;;) {\n const item = itemAt(rest, at);\n if (item === null || rest[item.end] !== '{') throw lineError(FORMAT, line, `\"${rest.slice(at).trim()}\" is not a curve`);\n const close = rest.indexOf('}', item.end);\n if (close < 0) throw lineError(FORMAT, line, 'a curve with no closing \"}\"');\n out.push({ curve: { id: item.id, ...(item.label !== undefined ? { label: item.label } : {}) }, entries: entriesOf(rest.slice(item.end + 1, close), line), line });\n const next = rest.slice(close + 1).trim();\n if (next === '') return out;\n if (!next.startsWith(',')) throw lineError(FORMAT, line, `\"${next}\" is not a curve`);\n at = rest.indexOf(',', close) + 1;\n }\n}\n\n/** A curve's values in axis order. Throws, naming its line, on a count that does not match or an axis left out. */\nfunction resolve(p: PendingCurve, axes: readonly RadarAxis[]): RadarCurve {\n const { curve, entries, line } = p;\n if (entries.every((e) => e.axis === undefined)) {\n if (entries.length !== axes.length) throw lineError(FORMAT, line, `curve \"${curve.id}\" has ${entries.length} value(s) for ${axes.length} axes`);\n return { ...curve, values: entries.map((e) => e.value) };\n }\n for (const e of entries) {\n if (!axes.some((a) => a.id === e.axis)) throw lineError(FORMAT, line, `curve \"${curve.id}\" names no axis \"${e.axis}\"`);\n }\n const values = axes.map((a) => {\n const e = entries.find((x) => x.axis === a.id);\n if (e === undefined) throw lineError(FORMAT, line, `curve \"${curve.id}\" has no value for axis \"${a.id}\"`);\n return e.value;\n });\n return { ...curve, values };\n}\n\n/** Joins a curve whose braces run over several statements into one. */\nfunction joined(body: readonly Statement[]): Statement[] {\n const out: Statement[] = [];\n for (let k = 0; k < body.length; k++) {\n let s = body[k]!;\n const open = (t: string) => (t.match(/\\{/g)?.length ?? 0) - (t.match(/\\}/g)?.length ?? 0);\n while (/^curve\\b/.test(s.text) && open(s.text) > 0 && k + 1 < body.length) s = { ...s, text: `${s.text} ${body[++k]!.text}` };\n out.push(s);\n }\n return out;\n}\n\n/** The chart `body` describes, its `title` statement apart. Throws, naming the line, on a statement it cannot read. */\nexport function parseRadarBody(body: readonly Statement[]): { data: RadarData; title?: string } {\n const axes: RadarAxis[] = [];\n const pending: PendingCurve[] = [];\n const opts: Partial<Pick<RadarData, 'min' | 'max' | 'ticks' | 'graticule' | 'showLegend'>> = {};\n let title: string | undefined;\n for (const { text, line } of joined(body)) {\n const m = /^(\\S+)\\s*(.*)$/.exec(text)!;\n const keyword = m[1]!;\n const rest = m[2]!.trim();\n switch (keyword) {\n case 'title': title = rest; break;\n case 'axis': axes.push(...axesOf(rest, line)); break;\n case 'curve': pending.push(...curvesOf(rest, line)); break;\n case 'max':\n case 'min':\n case 'ticks': opts[keyword] = numberAt(rest, line); break;\n case 'graticule':\n if (rest !== 'circle' && rest !== 'polygon') throw lineError(FORMAT, line, `\"${rest}\" is not a graticule; it is circle or polygon`);\n opts.graticule = rest;\n break;\n case 'showLegend':\n if (rest !== 'true' && rest !== 'false') throw lineError(FORMAT, line, `\"${rest}\" is not true or false`);\n opts.showLegend = rest === 'true';\n break;\n default:\n throw lineError(FORMAT, line, `\"${keyword}\" is not a radar statement`);\n }\n }\n const curves = pending.map((p) => resolve(p, axes));\n return { data: { kind: 'radar', axes, curves, ...opts }, ...(title !== undefined ? { title } : {}) };\n}\n","/** A Mermaid radar as a one-page document holding a plot page. */\nimport type { RadarData } from '@weasel-js/plot';\nimport type { ImportResult, PlotPage } from '../../document';\nimport { Warnings } from '../../graphRead';\nimport { lineError } from '../../lineError';\nimport { pageNameOf, statementsOf } from '../common/lines';\nimport { parseRadarBody } from './parse';\n\n/** The page a radar is read onto. */\nexport const RADAR_PAGE = { width: 640, height: 560 } as const;\n\n/** Reads a Mermaid `radar-beta` (or `radar`) diagram. Throws, naming the line, on text that is not one. */\nexport function readMermaidRadar(text: string): ImportResult {\n const src = statementsOf(text);\n if (!/^radar(?:-beta)?$/.test(src.header.text)) throw lineError('Mermaid', src.header.line, `\"${src.header.text}\" is not a radar header`);\n const warnings = new Warnings();\n const parsed = parseRadarBody(src.body);\n if (parsed.title !== undefined && src.title !== undefined && parsed.title !== src.title) {\n warnings.add('The front matter title was dropped; the title statement names the chart.');\n }\n const fallback = pageNameOf({ ...src, ...(parsed.title !== undefined ? { title: parsed.title } : {}) }, warnings);\n const title = parsed.title ?? src.title;\n const data: RadarData = { ...parsed.data, ...(title !== undefined && title !== '' ? { title } : {}) };\n const name = title || fallback;\n const page: PlotPage = { kind: 'plot', id: 'page-1', ...(name ? { name } : {}), ...RADAR_PAGE, data };\n return { document: { pages: [page] }, warnings: warnings.all() };\n}\n","/** A plot page holding a radar as Mermaid `radar-beta` text. */\nimport type { ExportResult, PlotPage } from '../../document';\n\nconst ID = /^[A-Za-z_][\\w-]*$/;\n\n/** An axis or curve as Mermaid names it: its id, and its label in brackets where it has one. */\nfunction item(x: { id: string; label?: string }, warn: (m: string) => void): string {\n let id = x.id;\n if (!ID.test(id)) {\n warn('Mermaid ids are a letter or underscore, then letters, digits, \"-\" or \"_\"; others were rewritten.');\n id = /^[A-Za-z_]/.test(id) ? id.replace(/[^\\w-]/g, '_') : `_${id.replace(/[^\\w-]/g, '_')}`;\n }\n if (x.label === undefined) return id;\n if (x.label.includes('\"')) warn('Mermaid labels hold no double quotes; they were written as single quotes.');\n return `${id}[\"${x.label.replace(/\"/g, \"'\")}\"]`;\n}\n\nconst option = (key: string, value: number | string | boolean | undefined): string[] => (value === undefined ? [] : [` ${key} ${value}`]);\n\n/** Writes `page`'s radar as Mermaid. Throws on a page holding another kind of chart. */\nexport function writeMermaidRadar(page: PlotPage): ExportResult {\n const data = page.data;\n if (data.kind !== 'radar') throw new Error(`Mermaid writes this chart as a radar only; the page holds a ${(data as { kind: string }).kind}`);\n const warnings: string[] = [];\n const warn = (m: string) => {\n if (!warnings.includes(m)) warnings.push(m);\n };\n const lines = ['radar-beta'];\n if (data.title !== undefined) lines.push(` title ${data.title}`);\n if (data.axes.length > 0) lines.push(` axis ${data.axes.map((a) => item(a, warn)).join(', ')}`);\n for (const c of data.curves) {\n const values = data.axes.map((_, i) => c.values[i]);\n if (values.some((v) => v === undefined || !Number.isFinite(v))) warn('Mermaid holds a value on every axis; missing ones were written as 0.');\n if (c.values.length > data.axes.length) warn('Values past the last axis were dropped.');\n lines.push(` curve ${item(c, warn)}{${values.map((v) => (v !== undefined && Number.isFinite(v) ? v : 0)).join(', ')}}`);\n }\n lines.push(\n ...option('max', data.max), ...option('min', data.min), ...option('graticule', data.graticule),\n ...option('ticks', data.ticks), ...option('showLegend', data.showLegend),\n );\n return { text: `${lines.join('\\n')}\\n`, warnings };\n}\n","/** A Mermaid sankey as a one-page document holding a plot page: each CSV row `source,target,value` a link. */\nimport type { SankeyData, SankeyLink } from '@weasel-js/plot';\nimport type { ImportResult, PlotPage } from '../../document';\nimport { Warnings } from '../../graphRead';\nimport { lineError } from '../../lineError';\nimport { pageNameOf, statementsOf } from '../common/lines';\n\n/** The page a sankey is read onto. */\nexport const SANKEY_PAGE = { width: 900, height: 540 } as const;\n\nconst NUMBER = /^[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?$/i;\n\n/** One CSV row's fields, RFC 4180 quoting read: `\"a, b\"` holds its comma, and `\"\"` inside quotes is one quote. */\nexport function csvFields(row: string, line: number): string[] {\n const out: string[] = [];\n let k = 0;\n for (;;) {\n while (row[k] === ' ' || row[k] === '\\t') k++;\n let field = '';\n if (row[k] === '\"') {\n for (k++; ; k++) {\n if (k >= row.length) throw lineError('Mermaid', line, 'a quoted field is never closed');\n if (row[k] === '\"' && row[k + 1] === '\"') field += row[k++];\n else if (row[k] === '\"') break;\n else field += row[k];\n }\n k++;\n while (row[k] === ' ' || row[k] === '\\t') k++;\n if (k < row.length && row[k] !== ',') throw lineError('Mermaid', line, `\"${row.slice(k)}\" follows a quoted field`);\n } else {\n const end = row.indexOf(',', k);\n field = row.slice(k, end < 0 ? row.length : end).trim();\n k = end < 0 ? row.length : end;\n }\n out.push(field);\n if (k >= row.length) return out;\n k++;\n }\n}\n\n/** Reads a Mermaid `sankey-beta` (or `sankey`) diagram. Throws, naming the line, on text that is not one. */\nexport function readMermaidSankey(text: string): ImportResult {\n const src = statementsOf(text);\n if (!/^sankey(?:-beta)?$/.test(src.header.text)) throw lineError('Mermaid', src.header.line, `\"${src.header.text}\" is not a sankey header`);\n const links: SankeyLink[] = src.body.map(({ text: row, line }) => {\n const fields = csvFields(row, line);\n if (fields.length !== 3) throw lineError('Mermaid', line, `a row is source,target,value; this one has ${fields.length} field(s)`);\n const [source, target, value] = fields as [string, string, string];\n if (!NUMBER.test(value) || Number(value) < 0) throw lineError('Mermaid', line, `\"${value}\" is not a flow; it is a number not below zero`);\n return { source, target, value: Number(value) };\n });\n const warnings = new Warnings();\n const name = pageNameOf(src, warnings);\n const data: SankeyData = { kind: 'sankey', ...(src.title !== undefined && src.title !== '' ? { title: src.title } : {}), links };\n const page: PlotPage = { kind: 'plot', id: 'page-1', ...(name ? { name } : {}), ...SANKEY_PAGE, data };\n return { document: { pages: [page] }, warnings: warnings.all() };\n}\n","/** A plot page holding a sankey as Mermaid `sankey-beta` text: front matter for its title, then a CSV row per link. */\nimport type { ExportResult, PlotPage } from '../../document';\nimport { titleLines } from '../common/lines';\n\n/** A field bare where it reads back the same, else quoted, a quote inside doubled. A row starting `%%` or `acc` would\n * read as a comment or accessibility text. */\nconst field = (s: string): string => (/[\",\\n]/.test(s) || s !== s.trim() || /^(?:%%|acc)/.test(s) ? `\"${s.replace(/\"/g, '\"\"')}\"` : s);\n\n/** Writes `page`'s sankey as Mermaid. Throws on a page holding another kind of chart. */\nexport function writeMermaidSankey(page: PlotPage): ExportResult {\n const data = page.data;\n if (data.kind !== 'sankey') throw new Error(`Mermaid writes this chart as a sankey only; the page holds a ${(data as { kind: string }).kind}`);\n const warnings: string[] = [];\n const rows = data.links.map((l) => {\n const ok = Number.isFinite(l.value) && l.value >= 0;\n if (!ok && warnings.length === 0) warnings.push('Mermaid holds flows of zero or more; others were written as 0.');\n return `${field(l.source)},${field(l.target)},${ok ? l.value : 0}`;\n });\n return { text: `${[...titleLines(data.title), 'sankey-beta', '', ...rows].join('\\n')}\\n`, warnings };\n}\n","/** A Mermaid timeline as a one-page document holding a plot page. */\nimport type { TimelineData, TimelinePeriod, TimelineSection } from '@weasel-js/plot';\nimport type { ImportResult, PlotPage } from '../../document';\nimport { Warnings } from '../../graphRead';\nimport { lineError } from '../../lineError';\nimport { pageNameOf, statementsOf } from '../common/lines';\n\n/** The page a timeline is read onto. */\nexport const TIMELINE_PAGE = { width: 900, height: 500 } as const;\n\n/** Text as a timeline writes it, `#58;` read back as the colon Mermaid splits on. */\nexport const timelineText = (s: string): string => s.trim().replace(/#58;/g, ':');\n\n/** Reads a Mermaid `timeline`. Throws, naming the line, on text that is not one. */\nexport function readMermaidTimeline(text: string): ImportResult {\n const src = statementsOf(text);\n const warnings = new Warnings();\n const header = /^timeline(?:\\s+(\\S+))?$/.exec(src.header.text);\n if (header === null) throw lineError('Mermaid', src.header.line, `\"${src.header.text}\" is not a timeline header`);\n if (header[1] !== undefined) warnings.add('The timeline\\'s direction was dropped; it is drawn left to right.');\n let title: string | undefined;\n const sections: { name?: string; periods: TimelinePeriod[] }[] = [{ periods: [] }];\n let last: TimelinePeriod | null = null;\n for (const s of src.body) {\n const keyword = /^(title|section)(?:\\s+(.*))?$/.exec(s.text);\n if (keyword?.[1] === 'title') {\n title = timelineText(keyword[2] ?? '');\n continue;\n }\n if (keyword?.[1] === 'section') {\n sections.push({ name: timelineText(keyword[2] ?? ''), periods: [] });\n last = null;\n continue;\n }\n const [label, ...events] = s.text.split(':').map(timelineText);\n const said = events.filter((e) => e !== '');\n if (label === '') {\n if (last === null) throw lineError('Mermaid', s.line, 'an event with no period above it');\n last.events = [...last.events, ...said];\n continue;\n }\n last = { label: label!, events: said };\n sections[sections.length - 1]!.periods.push(last);\n }\n const name = pageNameOf(src, warnings);\n if (title !== undefined && src.title !== undefined && title !== src.title) {\n warnings.add('The front matter title was dropped; the chart is named by its title statement.');\n }\n const chartTitle = title || src.title;\n const kept: TimelineSection[] = sections.filter((sec, i) => i > 0 || sec.periods.length > 0);\n const data: TimelineData = { kind: 'timeline', ...(chartTitle ? { title: chartTitle } : {}), sections: kept };\n const pageName = chartTitle || name;\n const page: PlotPage = { kind: 'plot', id: 'page-1', ...(pageName ? { name: pageName } : {}), ...TIMELINE_PAGE, data };\n return { document: { pages: [page] }, warnings: warnings.all() };\n}\n","/** A plot page holding a timeline as Mermaid `timeline` text. */\nimport type { ExportResult, PlotPage } from '../../document';\nimport { Warnings } from '../../graphRead';\n\n/** `s` on one line, the colon Mermaid splits on written as `#58;`. */\nfunction timelineText(s: string, warnings: Warnings): string {\n if (/[\\r\\n]/.test(s)) warnings.add('Mermaid timeline text holds one line; line breaks were written as spaces.');\n return s.replace(/\\s*[\\r\\n]+\\s*/g, ' ').replace(/:/g, '#58;');\n}\n\n/** Writes `page`'s timeline as Mermaid. Throws on a page holding another kind of chart. */\nexport function writeMermaidTimeline(page: PlotPage): ExportResult {\n const data = page.data;\n if (data.kind !== 'timeline') throw new Error(`Mermaid writes this chart as a timeline only; the page holds a ${(data as { kind: string }).kind}`);\n const warnings = new Warnings();\n const text = (s: string) => timelineText(s, warnings);\n const lines = ['timeline'];\n if (data.title !== undefined) lines.push(` title ${text(data.title)}`);\n let named = false;\n data.sections.forEach((section, i) => {\n if (section.name !== undefined) {\n lines.push(` section ${text(section.name)}`);\n named = true;\n } else if (i > 0) {\n warnings.add('Mermaid holds no unnamed section after the first; its periods were written into the section before it.');\n }\n const indent = named ? ' ' : ' ';\n for (const period of section.periods) {\n const events = period.events.filter((e) => e.trim() !== '');\n if (events.length < period.events.length) warnings.add('Mermaid holds no empty events; they were dropped.');\n lines.push(`${indent}${[text(period.label), ...events.map(text)].join(' : ')}`);\n }\n });\n return { text: `${lines.join('\\n')}\\n`, warnings: warnings.all() };\n}\n","/** Mermaid as a {@link DiagramFormat}: one format, each diagram kind read and written by its own codec. */\nimport { FLOWCHART_NOTATION } from '@weasel-js/diagram';\nimport type { DiagramDocument, DiagramFormat, DocumentPage, ExportResult, ImportResult, PageKind, WriteOptions } from '../document';\nimport { writtenPage } from '../document';\nimport { lineError } from '../lineError';\nimport { readArchitecture } from './architecture/read';\nimport { writeArchitecture } from './architecture/write';\nimport { readBlockDiagram } from './block/read';\nimport { writeBlockDiagram } from './block/write';\nimport { C4_HEADERS } from './c4/parse';\nimport { C4_NOTATIONS, readC4 } from './c4/read';\nimport { writeC4 } from './c4/write';\nimport { readClassDiagram } from './class/read';\nimport { writeClassDiagram } from './class/write';\nimport { MERMAID_KINDS, headerWord } from './common/header';\nimport { readErDiagram } from './er/read';\nimport { writeErDiagram } from './er/write';\nimport { readFlowchart } from './flowchart/read';\nimport { readKanban } from './kanban/read';\nimport { writeKanban } from './kanban/write';\nimport { writeFlowchart } from './flowchart/write';\nimport { readMindmap } from './mindmap/read';\nimport { writeMindmap } from './mindmap/write';\nimport { readMermaidSequence } from './sequence/read';\nimport { writeMermaidSequence } from './sequence/write';\nimport { readRequirementDiagram } from './requirement/read';\nimport { writeRequirementDiagram } from './requirement/write';\nimport { readStateDiagram } from './state/read';\nimport { writeStateDiagram } from './state/write';\nimport { readMermaidXychart } from './xychart/read';\nimport { writeMermaidXychart } from './xychart/write';\nimport type { PlotKind } from '@weasel-js/plot';\nimport { readMermaidGantt } from './gantt/read';\nimport { writeMermaidGantt } from './gantt/write';\nimport { readMermaidGitGraph } from './gitgraph/read';\nimport { writeMermaidGitGraph } from './gitgraph/write';\nimport { readMermaidJourney } from './journey/read';\nimport { writeMermaidJourney } from './journey/write';\nimport { readMermaidPacket } from './packet/read';\nimport { writeMermaidPacket } from './packet/write';\nimport { readMermaidPie } from './pie/read';\nimport { writeMermaidPie } from './pie/write';\nimport { readMermaidQuadrant } from './quadrant/read';\nimport { writeMermaidQuadrant } from './quadrant/write';\nimport { readMermaidRadar } from './radar/read';\nimport { writeMermaidRadar } from './radar/write';\nimport { readMermaidSankey } from './sankey/read';\nimport { writeMermaidSankey } from './sankey/write';\nimport { readMermaidTimeline } from './timeline/read';\nimport { writeMermaidTimeline } from './timeline/write';\n\n/** A Mermaid diagram kind this format reads and writes. */\ninterface MermaidKind {\n /** Its header word, as an error names it. */\n name: string;\n /** What its header's first word matches. */\n header: RegExp;\n /** The kind of page it reads into and writes from. */\n page: PageKind;\n /** For a graph kind, the `notation` it reads into and writes from. The flowchart has none: it writes every graph no kind claims. */\n notation?: string;\n /** For a plot kind, the kind of chart it reads into and writes from. */\n plot?: PlotKind;\n read(text: string): ImportResult;\n write(doc: DiagramDocument, opts?: WriteOptions): ExportResult;\n}\n\nconst FLOWCHART: MermaidKind = { name: 'flowchart', header: /^(?:flowchart|graph|flowchart-elk)$/, page: 'graph', read: readFlowchart, write: writeFlowchart };\n\n/** Every kind read, by header. */\nconst KINDS: readonly MermaidKind[] = [\n FLOWCHART,\n { name: 'classDiagram', header: /^classDiagram(?:-v2)?$/, page: 'graph', notation: 'class', read: readClassDiagram, write: writeClassDiagram },\n { name: 'stateDiagram', header: /^stateDiagram(?:-v2)?$/, page: 'graph', notation: 'state', read: readStateDiagram, write: writeStateDiagram },\n { name: 'erDiagram', header: /^erDiagram$/, page: 'graph', notation: 'er', read: readErDiagram, write: writeErDiagram },\n { name: 'mindmap', header: /^mindmap$/, page: 'graph', notation: 'mindmap', read: readMindmap, write: writeMindmap },\n { name: 'requirementDiagram', header: /^requirementDiagram$/, page: 'graph', notation: 'requirement', read: readRequirementDiagram, write: writeRequirementDiagram },\n {\n name: 'sequenceDiagram', header: /^sequenceDiagram$/, page: 'sequence', read: readMermaidSequence,\n write: (doc, opts) => writeMermaidSequence(pageOfKind(doc, opts, 'sequence')),\n },\n { name: 'xychart', header: /^xychart(?:-beta)?$/, page: 'plot', plot: 'xychart', read: readMermaidXychart, write: (doc, opts) => writeMermaidXychart(pageOfKind(doc, opts, 'plot')) },\n { name: 'gantt', header: /^gantt$/, page: 'plot', plot: 'gantt', read: readMermaidGantt, write: (doc, opts) => writeMermaidGantt(pageOfKind(doc, opts, 'plot')) },\n { name: 'timeline', header: /^timeline$/, page: 'plot', plot: 'timeline', read: readMermaidTimeline, write: (doc, opts) => writeMermaidTimeline(pageOfKind(doc, opts, 'plot')) },\n { name: 'pie', header: /^pie$/, page: 'plot', plot: 'pie', read: readMermaidPie, write: (doc, opts) => writeMermaidPie(pageOfKind(doc, opts, 'plot')) },\n { name: 'quadrantChart', header: /^quadrantChart$/, page: 'plot', plot: 'quadrant', read: readMermaidQuadrant, write: (doc, opts) => writeMermaidQuadrant(pageOfKind(doc, opts, 'plot')) },\n { name: 'journey', header: /^journey$/, page: 'plot', plot: 'journey', read: readMermaidJourney, write: (doc, opts) => writeMermaidJourney(pageOfKind(doc, opts, 'plot')) },\n { name: 'gitGraph', header: /^gitGraph:?$/, page: 'plot', plot: 'gitgraph', read: readMermaidGitGraph, write: (doc, opts) => writeMermaidGitGraph(pageOfKind(doc, opts, 'plot')) },\n { name: 'sankey-beta', header: /^sankey(?:-beta)?$/, page: 'plot', plot: 'sankey', read: readMermaidSankey, write: (doc, opts) => writeMermaidSankey(pageOfKind(doc, opts, 'plot')) },\n { name: 'packet-beta', header: /^packet(?:-beta)?$/, page: 'plot', plot: 'packet', read: readMermaidPacket, write: (doc, opts) => writeMermaidPacket(pageOfKind(doc, opts, 'plot')) },\n { name: 'radar-beta', header: /^radar(?:-beta)?$/, page: 'plot', plot: 'radar', read: readMermaidRadar, write: (doc, opts) => writeMermaidRadar(pageOfKind(doc, opts, 'plot')) },\n { name: 'block-beta', header: /^block(?:-beta)?$/, page: 'graph', notation: 'block', read: readBlockDiagram, write: writeBlockDiagram },\n { name: 'architecture-beta', header: /^architecture(?:-beta)?$/, page: 'graph', notation: 'architecture', read: readArchitecture, write: writeArchitecture },\n ...C4_HEADERS.map((h): MermaidKind => ({ name: h, header: new RegExp(`^${h}$`), page: 'graph', notation: C4_NOTATIONS[h], read: readC4, write: writeC4 })),\n { name: 'kanban', header: /^kanban$/, page: 'graph', notation: 'kanban', read: readKanban, write: writeKanban },\n];\n\n/** The page `opts` names, which must be of `kind`. */\nfunction pageOfKind<K extends PageKind>(doc: DiagramDocument, opts: WriteOptions | undefined, kind: K): Extract<DocumentPage, { kind: K }> {\n const page = writtenPage(doc, opts);\n if (page?.kind !== kind) throw new Error(`Mermaid writes this diagram from a ${kind} page only`);\n return page as Extract<DocumentPage, { kind: K }>;\n}\n\nconst FLOWCHART_HEADER = /^(?:flowchart|graph|flowchart-elk)(?:\\s+(?:TB|TD|BT|LR|RL|[<>^v]))?\\s*(?:;|$)/i;\n\n/** The kind `text` is, or a flowchart, whose reader then says what is wrong with it. Throws on a kind not read. */\nfunction kindOf(text: string): MermaidKind {\n const header = headerWord(text);\n if (header === null) return FLOWCHART;\n const known = KINDS.find((k) => k.header.test(header.word));\n if (known !== undefined) return known;\n if (MERMAID_KINDS.test(header.word)) {\n throw lineError('Mermaid', header.line, `${header.word} diagrams are not read; only ${KINDS.map((k) => k.name).join(', ')} are`);\n }\n return FLOWCHART;\n}\n\n/** Writes the page `opts.page` names, else the first, in the kind its page kind and `notation` say. */\nfunction writeMermaid(doc: DiagramDocument, opts?: WriteOptions): ExportResult {\n const page = writtenPage(doc, opts);\n if (page === null) return FLOWCHART.write(doc, opts);\n const notation = page.kind === 'graph' && page.notation !== FLOWCHART_NOTATION ? page.notation : undefined;\n const plot = page.kind === 'plot' ? page.data.kind : undefined;\n const kind = KINDS.find((k) => k.page === page.kind && k.notation === notation && k.plot === plot);\n if (kind !== undefined) return kind.write(doc, opts);\n const written = FLOWCHART.write(doc, opts);\n return notation === undefined ? written\n : { ...written, warnings: [`Mermaid has no ${notation} diagram; the page was written as a flowchart.`, ...written.warnings] };\n}\n\n/** Mermaid diagrams, one page per file, laid out on import. Any Mermaid diagram is recognized, so reading a kind not read says which it is. */\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_HEADER.test(header.text) || KINDS.some((k) => k !== FLOWCHART && k.header.test(header.word))\n || MERMAID_KINDS.test(header.word));\n },\n read: (text) => kindOf(text).read(text),\n write: writeMermaid,\n onePage: true,\n kinds: ['graph', 'sequence', 'plot'],\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","/** Plot pages to and from a scene: one plot root per page, which the plot package compiles and keeps. */\nimport type { PlacedPage } from '@weasel-js/core';\nimport type { DiagramTheme, MeasureRowText } from '@weasel-js/diagram';\nimport { plotRootOf, plotSpecs, type PlotMeasure, type PlotSpec, type PlotTheme } from '@weasel-js/plot';\nimport type { PlotPage } from './document';\n\n/** A diagram theme's colors by the roles a chart draws in: text in the label color, axes in the connector stroke,\n * grid lines in the container stroke, series in its series, in its face. */\nexport function plotThemeOf(theme: DiagramTheme): PlotTheme {\n return {\n text: theme.label.fill,\n axis: theme.edge.stroke,\n grid: theme.container.stroke,\n series: theme.series.length > 0 ? theme.series : [theme.edge.stroke],\n font: { fontFamily: theme.font.family, fontSize: theme.font.size },\n };\n}\n\n/** A row measurer as a plot measures a line. */\nexport const plotMeasureOf = (measure: MeasureRowText): PlotMeasure =>\n (text, font) => measure(text, { fontFamily: font.fontFamily, fontSize: font.fontSize });\n\n/** The id of the plot root drawing the page `pageId`. */\nexport const plotRootIdOf = (pageId: string): string => `${pageId}/plot`;\n\n/** The nodes plot page `page` draws as, filling it where it is placed. */\nexport function plotPageSpecs<TLayer extends string>(\n page: PlotPage, at: { x: number; y: number }, opts: { layer: TLayer; theme: DiagramTheme; measure?: MeasureRowText },\n): PlotSpec<TLayer>[] {\n return plotSpecs(page.data, {\n id: plotRootIdOf(page.id), layer: opts.layer, box: { x: at.x, y: at.y, width: page.width, height: page.height },\n theme: plotThemeOf(opts.theme), ...(opts.measure ? { measure: plotMeasureOf(opts.measure) } : {}),\n });\n}\n\n/** The plot page `page` holds when the outermost node `root` placed on it is a plot root; `null` when it is not one. */\nexport function plotPageOf(page: PlacedPage, root: { data: unknown }): PlotPage | null {\n const trait = plotRootOf(root);\n if (trait === null) return null;\n return { kind: 'plot', id: page.id, ...(page.name !== undefined ? { name: page.name } : {}), width: page.width, height: page.height, data: trait.data };\n}\n","/** A graph page's notation, layout, and direction, kept on its scene page so they survive the scene. */\nimport type { Page } from '@weasel-js/core';\nimport type { DocumentPage, GraphPage } from './document';\n\n/** The key a scene page's `meta` holds a graph page's {@link GraphPageSettings} under. */\nexport const GRAPH_PAGE_META_KEY = 'diagram:graph';\n\n/** What a graph page says beyond its data: how it is laid out and what it models. */\nexport type GraphPageSettings = Pick<GraphPage, 'direction' | 'layout' | 'notation'>;\n\n/** `page`'s settings as a scene page's `meta`, or `undefined` when it has none. */\nexport function graphPageMeta(page: DocumentPage): Page['meta'] {\n if (page.kind !== 'graph') return undefined;\n const { direction, layout, notation } = page;\n const settings: GraphPageSettings = {\n ...(direction !== undefined ? { direction } : {}),\n ...(layout !== undefined ? { layout } : {}),\n ...(notation !== undefined ? { notation } : {}),\n };\n return Object.keys(settings).length > 0 ? { [GRAPH_PAGE_META_KEY]: settings } : undefined;\n}\n\n/** The graph settings scene page `page` keeps; empty when it keeps none. */\nexport function graphPageSettingsOf(page: Pick<Page, 'meta'>): GraphPageSettings {\n return (page.meta?.[GRAPH_PAGE_META_KEY] as GraphPageSettings | undefined) ?? {};\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 { deepEqual } from '@weasel-js/registry';\nimport {\n DEFAULT_PORTS, EDGE_STROKE_WIDTH, NODE_STROKE_WIDTH, dataEdgeStyle, dataNodeStyle, dataRegionStyle, diagramContainerOf, diagramEdgeOf, layoutOwnsPort,\n layoutOwnsRoute, poolAxisOf, sequencePartOf, sequenceRootOf, titleIdOf, type DataContainer, type DataEdge, type DataGroup, type DataLane, type DataNode, type DiagramLabel,\n type DiagramRouter, type DiagramTheme, type EdgeStyle, type NodeStyle, type BodyDivider, type BodyLayout, type Row,\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 = {\n diagram?: Record<string, unknown>; fill?: Paint; stroke?: Paint; text?: unknown; bodyRow?: unknown; bodyField?: unknown; style?: { fontSize?: unknown };\n};\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 => deepEqual(a, b, { undefinedAsAbsent: true });\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' | 'sequence' | null {\n if (sequenceRootOf(node) !== null) return 'sequence';\n if (sequencePartOf(node) !== null) return 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/** Text rows and divider rows, each at its place. */\nfunction withDividers(text: readonly { index: number; row: Row }[], dividers: readonly BodyDivider[]): Row[] {\n const all = [...text, ...dividers.map((d) => ({ index: d.index, row: (d.inset === undefined ? { kind: 'divider' } : { kind: 'divider', inset: d.inset }) as Row }))];\n return all.sort((a, b) => a.index - b.index).map((e) => e.row);\n}\n\n/** A text row as built: a `field` while its text still starts with its label, else a `label`. */\nfunction textRow(data: Data, ownSize: boolean): Row {\n const text = data.text as string;\n const style = ownSize ? { style: { fontSize: data.style?.fontSize as number } } : {};\n const prefix = typeof data.bodyField === 'string' ? `${data.bodyField}: ` : null;\n return prefix !== null && text.startsWith(prefix)\n ? { kind: 'field', label: data.bodyField as string, value: text.slice(prefix.length), ...style }\n : { kind: 'label', text, ...style };\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 BodyLayout | undefined;\n const dividers = body?.dividers ?? [];\n const fields = rows.some((r) => typeof dataOf(r).bodyField === 'string');\n return {\n id: node.id,\n outline: trait.outline as DataNode['outline'],\n ...(ownSize || fields || dividers.length > 0\n ? { rows: withDividers(rows.map((r) => ({ index: dataOf(r).bodyRow as number, row: textRow(dataOf(r), ownSize) })), dividers) }\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 {\n at, ...(label.offset !== undefined ? { offset: label.offset } : {}), ...(label.inset !== undefined ? { inset: label.inset } : {}),\n ...(label.dodge === false ? { dodge: false } : {}),\n };\n}\n\n/** The label nodes at a connector's ends. */\nexport interface EndLabelNodes { from?: ReadNode; to?: ReadNode }\n\n/** The text of the labels at a connector's ends, `undefined` for none. */\nfunction endLabelsOf(ends: EndLabelNodes | undefined): DataEdge['endLabels'] {\n const text = (n: ReadNode | undefined) => {\n const t = dataOf(n).text;\n return typeof t === 'string' && t !== '' ? t : undefined;\n };\n const out = { ...optional('from', text(ends?.from)), ...optional('to', text(ends?.to)) };\n return Object.keys(out).length > 0 ? out : undefined;\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(\n node: ReadNode, labels: { label?: ReadNode | undefined; ends?: EndLabelNodes | undefined }, page: Vec2 | null, theme: DiagramTheme,\n): DataEdge {\n const { label } = labels;\n const endLabels = endLabelsOf(labels.ends);\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 ...(endLabels !== undefined ? { endLabels } : {}),\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 composeWorldPose, pageHolding, placedPagesOf, scenePoseAdapter, type PlacedPage, type RectPose, type Scene,\n} from '@weasel-js/core';\nimport {\n DIAGRAM_THEME_KEY, FLOWCHART_NOTATION, diagramLabelOf, diagramNotationOf, documentBoundsOf, endLabelIdOf, diagramThemeFrom, offPageSplits, sequenceRootOf, type DataContainer,\n type DataEdge, type DataGroup, type DataNode, type DiagramTheme, type SequenceData,\n} from '@weasel-js/diagram';\nimport type { DiagramDocument, DocumentPage, GraphPage, PlotPage } from './document';\nimport { graphPageSettingsOf } from './graphPageMeta';\nimport { plotPageOf } from './plotPages';\nimport { kindOf, readEdge, readGroup, readRegion, readShape, type EndLabelNodes, 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 {\n nodes: DataNode[]; edges: DataEdge[]; groups: DataGroup[]; containers: DataContainer[];\n /** The first sequence on the page, which makes it a sequence page. */\n sequence?: SequenceData;\n}\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 page holding a plot root is a plot page of its spec, and\n * whatever else is on it is left out. 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. A page holding a sequence's root is a sequence page holding\n * its data; the parts drawn from it, and anything else on that page, are not read.\n * A graph page takes the notation, layout, and direction its scene page keeps; with no notation there, the one the\n * scene's diagram type writes (`diagramNotationOf`).\n */\nexport function documentFromScene<TData, TLayer extends string, TPose>(\n scene: Scene<TData, TLayer, TPose>, opts: DocumentFromSceneOptions = {},\n): DiagramDocument {\n const s = inWorld(scene);\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 plots = new Map<string, PlotPage>();\n for (const node of s.renderOrderNodes()) {\n const page = plotPageOf(pageOf(node), node);\n if (page !== null && !plots.has(page.id)) plots.set(page.id, page);\n }\n\n const labels = new Map<string, ReadNode>();\n const endLabels = new Map<string, EndLabelNodes>();\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) continue;\n const edge = deps[0]!;\n const end = node.id === endLabelIdOf(edge, 'from') ? 'from' : node.id === endLabelIdOf(edge, 'to') ? 'to' : null;\n if (end === null) labels.set(edge, node);\n else endLabels.set(edge, { ...endLabels.get(edge), [end]: 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 === 'sequence') {\n bucket.sequence ??= sequenceRootOf(node)!.sequence;\n continue;\n }\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 const read = (page: PlacedPage | { x: number; y: number } | null) =>\n readEdge(node, { label: labels.get(node.id), ends: endLabels.get(node.id) }, page, theme);\n if (fromPage === toPage && !split) buckets.get(fromPage.id)!.edges.push(read(fromPage));\n else crossPageEdges.push(read(split ? null : { x: 0, y: 0 }));\n }\n\n return {\n pages: pages.map((p): DocumentPage => {\n const plot = plots.get(p.id);\n if (plot !== undefined) return plot;\n const { nodes, edges: pageEdges, groups, containers, sequence } = buckets.get(p.id)!;\n const base = { id: p.id, ...(p.name !== undefined ? { name: p.name } : {}), width: p.width, height: p.height };\n if (sequence !== undefined) return { kind: 'sequence', ...base, data: sequence };\n const { notation: own, ...settings } = graphPageSettingsOf(p);\n const notation = own ?? diagramNotationOf(s);\n return {\n kind: 'graph',\n ...base,\n ...settings,\n ...(notation !== FLOWCHART_NOTATION ? { notation } : {}),\n data: { nodes, edges: pageEdges, ...(groups.length > 0 ? { groups } : {}), ...(containers.length > 0 ? { containers } : {}) },\n } satisfies GraphPage;\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\n/** `scene` read with every node at the pose it is drawn at in document space. */\nfunction inWorld<TData, TLayer extends string, TPose>(scene: Scene<TData, TLayer, TPose>): AnyScene {\n const raw = scene as unknown as AnyScene;\n const poses = scenePoseAdapter(scene as never);\n const placed = (node: ReadNode): ReadNode => ({ ...node, pose: composeWorldPose(poses, node.id, scene.composition.compose as never) });\n return {\n roots: raw.roots,\n doc: raw.doc,\n childrenOf: (id) => raw.childrenOf(id),\n get: (id) => {\n const node = raw.get(id);\n return node === undefined ? undefined : placed(node);\n },\n renderOrderNodes: () => raw.renderOrderNodes().map(placed),\n };\n}\n","/** Which kinds of page a scene would export as, read from its top-level nodes alone. */\nimport { pageHolding, placedPagesOf, type Scene } from '@weasel-js/core';\nimport { documentBoundsOf, sequenceRootOf } from '@weasel-js/diagram';\nimport { plotRootOf } from '@weasel-js/plot';\nimport type { PageKind } from './document';\n\n/**\n * The kinds of page `documentFromScene` would make of `scene`, without making\n * them: a page holding a plot's root is a plot page, one holding a sequence's\n * root a sequence page, any other a graph page. Cheap enough to ask on every\n * menu render.\n */\nexport function scenePageKinds<TData, TLayer extends string, TPose>(scene: Scene<TData, TLayer, TPose>): ReadonlySet<PageKind> {\n const placed = placedPagesOf(scene);\n const claimed = new Map<string, PageKind>();\n const kinds = new Set<PageKind>();\n for (const id of scene.roots) {\n const node = scene.get(id)!;\n const kind: PageKind | null = plotRootOf(node) !== null ? 'plot' : sequenceRootOf(node) !== null ? 'sequence' : null;\n if (kind === null) continue;\n kinds.add(kind);\n const page = placed.length === 0 ? null : pageHolding(placed, documentBoundsOf(scene as never, node as never));\n if (page && !claimed.has(page.id)) claimed.set(page.id, kind);\n }\n if (placed.length === 0 ? kinds.size === 0 : placed.some((p) => !claimed.has(p.id))) kinds.add('graph');\n return kinds;\n}\n","/** A sequence page as a scene: one root holding its data, inside the page's margin. */\nimport type { Vec2 } from '@weasel-js/core/math';\nimport { sequenceLayout, sequenceSpecs, themeFont, type DiagramSpec, type DiagramTheme, type MeasureRowText } from '@weasel-js/diagram';\nimport type { SequencePage } from './document';\nimport { PAGE_MARGIN } from './pageLayout';\n\ntype Draw = { theme: DiagramTheme; measure?: MeasureRowText };\n\n/** The id of the root a sequence page's data is drawn under. */\nexport const sequenceRootIdOf = (pageId: string): string => `${pageId}/sequence`;\n\n/** `page`'s size, grown to hold its layout and the margin around it. */\nexport function sequencePageSize(page: SequencePage, draw: Draw): { width: number; height: number } {\n const layout = sequenceLayout(page.data, { font: themeFont(draw.theme), ...(draw.measure ? { measure: draw.measure } : {}) });\n return {\n width: Math.max(page.width, layout.width + PAGE_MARGIN * 2),\n height: Math.max(page.height, layout.height + PAGE_MARGIN * 2),\n };\n}\n\n/** The specs of `page` placed with its top-left corner at `at`. */\nexport function sequencePageSpecs(page: SequencePage, at: Vec2, draw: Draw): DiagramSpec[] {\n return sequenceSpecs(page.data, {\n id: sequenceRootIdOf(page.id), at: { x: at.x + PAGE_MARGIN, y: at.y + PAGE_MARGIN }, theme: draw.theme,\n ...(draw.measure ? { measure: draw.measure } : {}),\n });\n}\n","/** A {@link DiagramDocument} as scene specs and document values: what every import draws from. */\nimport { PAGES_DOC_KEY, layoutPages, type Page, type PlacedPage, type SerializedDoc } from '@weasel-js/core';\nimport {\n DIAGRAM_THEME_KEY, DIAGRAM_TYPE_DOC_KEY, diagramScene, diagramThemeFrom, diagramTypeDocValue, diagramTypeOfNotation, themeDocValue,\n type DataEdge, type DiagramData, type DiagramSpec, type DiagramTheme, type DiagramType, type MeasureRowText,\n} from '@weasel-js/diagram';\nimport type { DiagramDocument, DocumentPage, GraphPage } from './document';\nimport { graphPageMeta } from './graphPageMeta';\nimport { laidOutPage, needsLayout } from './pageLayout';\nimport { plotPageSpecs } from './plotPages';\nimport { sequencePageSize, sequencePageSpecs } from './sequencePage';\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`, `diagram:theme`, and `diagram:type` document values. */\nexport interface DocumentScene<TLayer extends string = 'main'> {\n specs: DiagramSpec<TLayer>[];\n doc: SerializedDoc;\n}\n\ntype Draw = { theme: DiagramTheme; measure?: MeasureRowText };\n\n/** `page` ready to place: a graph laid out if it needs it, a sequence grown to hold its layout. */\nfunction prepared(page: DocumentPage, draw: Draw): DocumentPage {\n if (page.kind === 'sequence') return { ...page, ...sequencePageSize(page, draw) };\n if (page.kind !== 'graph') return page;\n return needsLayout(page) ? laidOutPage(page, draw) : page;\n}\n\n/**\n * Every graph page, moved to its place, and the edges between pages, drawn by one `diagramScene` call with no layout,\n * so the scene holds places and routes and no layout runs again.\n */\nfunction graphSpecs(pages: readonly { page: GraphPage; at: PlacedPage }[], crossPageEdges: readonly DataEdge[], draw: Draw): DiagramSpec[] {\n const data: DiagramData = { nodes: [], edges: [], groups: [], containers: [] };\n for (const { page, at } of pages) {\n const shifted = shiftData(page.data, at);\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, ...crossPageEdges];\n return diagramScene(data, { layout: 'none', ...draw });\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 graph page whose\n * nodes all have a place is drawn where they say; any other is laid out\n * first, with `layered`, its placed nodes pinned (and grows to hold the\n * result). A sequence page is drawn from its data, one root holding it, and\n * grows to hold its layout. A plot page is one plot root filling its page, its\n * marks under it (`plotSpecs`), drawn in the theme's colors. A graph page's\n * notation, layout, and direction go on its `core:pages` page, under\n * `meta['diagram:graph']`, where `documentFromScene` reads them back. When\n * every graph page's notation is one a diagram type claims, the scene opens as\n * that type (`diagram:type`), its stencils with it.\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 draw: Draw = { theme, ...(opts.measure ? { measure: opts.measure } : {}) };\n const pages = document.pages.map((p) => prepared(p, draw));\n const pageList = pages.map(scenePageOf);\n const placed = layoutPages(pageList);\n const specs = placedSpecs(pages.map((page, i) => ({ page, at: placed[i]! })), document.crossPageEdges ?? [], draw, opts.layer);\n const type = typeOfGraphs(pages);\n return {\n specs,\n doc: {\n [PAGES_DOC_KEY]: { pages: pageList }, [DIAGRAM_THEME_KEY]: themeDocValue(theme),\n ...(type !== null ? { [DIAGRAM_TYPE_DOC_KEY]: diagramTypeDocValue(type.id) } : {}),\n },\n };\n}\n\n/** `page` as a scene's `core:pages` lists it, its graph settings in its `meta`. */\nfunction scenePageOf(page: DocumentPage): Page {\n const { id, name, width, height } = page;\n const meta = graphPageMeta(page);\n return { id, ...(name !== undefined ? { name } : {}), width, height, ...(meta !== undefined ? { meta } : {}) };\n}\n\n/** Each page's nodes, drawn where it is placed, and the edges between them. */\nfunction placedSpecs<TLayer extends string>(\n pages: readonly { page: DocumentPage; at: PlacedPage }[], crossPageEdges: readonly DataEdge[], draw: Draw, layerIn?: TLayer,\n): DiagramSpec<TLayer>[] {\n const layer = (layerIn ?? 'main') as TLayer;\n const graphs = pages.flatMap(({ page, at }) => (page.kind === 'graph' ? [{ page, at }] : []));\n const specs = [\n ...graphSpecs(graphs, crossPageEdges, draw),\n ...pages.flatMap(({ page, at }) => (page.kind === 'sequence' ? sequencePageSpecs(page, at, draw) : [])),\n ].map((s) => ({ ...s, layer })) as DiagramSpec<TLayer>[];\n // A plot root's scene data is the plot package's, which a diagram scene carries as it carries any node's.\n for (const { page, at } of pages) {\n if (page.kind === 'plot') specs.push(...(plotPageSpecs(page, at, { layer, ...draw }) as unknown as DiagramSpec<TLayer>[]));\n }\n return specs;\n}\n\n/**\n * One more page for a scene: `page` as its `core:pages` lists it, and the nodes it draws as once placed where\n * `placeAt` puts it, as `documentSpecs` draws a page. A graph page with no place for a node is laid out first; a\n * sequence page grows to hold its layout.\n */\nexport function pageSpecs<TLayer extends string = 'main'>(\n page: DocumentPage, placeAt: (page: Page) => PlacedPage, opts: DocumentSpecsOptions<TLayer> = {},\n): { page: Page; specs: DiagramSpec<TLayer>[] } {\n const draw: Draw = { theme: opts.theme ?? diagramThemeFrom(undefined), ...(opts.measure ? { measure: opts.measure } : {}) };\n const ready = prepared(page, draw);\n const listed = scenePageOf(ready);\n return { page: listed, specs: placedSpecs([{ page: ready, at: placeAt(listed) }], [], draw, opts.layer) };\n}\n\n/** The diagram type every graph page's notation names, or `null` when there are none, they differ, or no type claims it. */\nfunction typeOfGraphs(pages: readonly DocumentPage[]): DiagramType | null {\n const types = new Set(pages.flatMap((p) => (p.kind === 'graph' ? [diagramTypeOfNotation(p.notation)] : [])));\n return types.size === 1 ? [...types][0]! : null;\n}\n","/** The Mermaid each sequence and chart template starts from: small, but showing what its kind draws. */\nimport type { PlotKind } from '@weasel-js/plot';\n\nexport const SEQUENCE_STARTER = `sequenceDiagram\n participant Client\n participant Server\n Client->>Server: Request\n Server-->>Client: Response\n`;\n\n/** One per chart kind, with the label a menu calls it. */\nexport const PLOT_STARTERS: Readonly<Record<PlotKind, { label: string; source: string }>> = {\n xychart: {\n label: 'XY chart',\n source: `xychart-beta\n title \"Sales\"\n x-axis [Q1, Q2, Q3, Q4]\n y-axis \"Revenue\" 0 --> 100\n bar [40, 55, 70, 62]\n line [40, 55, 70, 62]\n`,\n },\n gantt: {\n label: 'Gantt',\n source: `gantt\n dateFormat YYYY-MM-DD\n section Plan\n Scope :a1, 2026-01-05, 5d\n Design :a2, after a1, 7d\n section Build\n Implement :b1, after a2, 10d\n Release :milestone, after b1, 0d\n`,\n },\n timeline: {\n label: 'Timeline',\n source: `timeline\n title Milestones\n 2024 : Founded\n 2025 : First release : First customer\n 2026 : Second release\n`,\n },\n pie: {\n label: 'Pie',\n source: `pie\n title Share\n \"Alpha\" : 45\n \"Beta\" : 30\n \"Gamma\" : 25\n`,\n },\n quadrant: {\n label: 'Quadrant',\n source: `quadrantChart\n title Effort and impact\n x-axis Low Effort --> High Effort\n y-axis Low Impact --> High Impact\n quadrant-1 Plan\n quadrant-2 Do now\n quadrant-3 Skip\n quadrant-4 Delegate\n Idea A: [0.3, 0.7]\n Idea B: [0.7, 0.8]\n Idea C: [0.6, 0.3]\n`,\n },\n journey: {\n label: 'User journey',\n source: `journey\n title Getting started\n section Sign up\n Find the site: 4: User\n Create an account: 3: User\n section First use\n Make something: 5: User\n`,\n },\n gitgraph: {\n label: 'Git graph',\n source: `gitGraph\n commit\n branch feature\n commit\n checkout main\n commit\n merge feature\n`,\n },\n sankey: {\n label: 'Sankey',\n source: `sankey-beta\nSource A,Middle,30\nSource B,Middle,20\nMiddle,Out X,35\nMiddle,Out Y,15\n`,\n },\n packet: {\n label: 'Packet',\n source: `packet-beta\n 0-15: \"Source\"\n 16-31: \"Destination\"\n 32-63: \"Payload\"\n`,\n },\n radar: {\n label: 'Radar',\n source: `radar-beta\n axis a[\"Speed\"], b[\"Cost\"], c[\"Quality\"], d[\"Reach\"]\n curve x[\"Plan A\"]{4, 3, 5, 2}\n curve y[\"Plan B\"]{3, 4, 2, 5}\n max 5\n min 0\n`,\n },\n};\n","/** Templates: a new page of every kind a document holds, from an empty graph of each diagram type to a small chart. */\nimport { DIAGRAM_TYPES, FLOWCHART_NOTATION, type DiagramType } from '@weasel-js/diagram';\nimport type { PlotKind } from '@weasel-js/plot';\nimport type { DiagramDocument, DocumentPage, GraphPage } from '../document';\nimport { DIAGRAM_MERMAID } from '../mermaid/format';\nimport { PLOT_STARTERS, SEQUENCE_STARTER } from './starters';\n\n/** Where a menu lists a template: with the diagrams, as a sequence diagram, or with the charts. */\nexport type PageTemplateGroup = 'diagram' | 'sequence' | 'chart';\n\n/** A new page of one kind. */\nexport interface PageTemplate {\n id: string;\n label: string;\n icon?: DiagramType['icon'];\n group: PageTemplateGroup;\n /** The diagram type a document made from it takes: the one a graph template draws. */\n diagramType?: string;\n /** The page, under `id`. `size` is a graph page's; a sequence or a chart takes the size its content needs. */\n page(id: string, size?: { width: number; height: number }): DocumentPage;\n}\n\n/** A graph page's size when none is asked for: letter, landscape, at 96 per inch. */\nexport const TEMPLATE_PAGE_SIZE = { width: 1056, height: 816 } as const;\n\n/** The page `source` reads into, under `id`. */\nfunction readPage(source: string, id: string): DocumentPage {\n const { document } = DIAGRAM_MERMAID.read!(source) as { document: DiagramDocument };\n return { ...document.pages[0]!, id };\n}\n\nfunction graphTemplate(type: DiagramType): PageTemplate {\n return {\n id: type.id, label: type.label, group: 'diagram', diagramType: type.id, ...(type.icon !== undefined ? { icon: type.icon } : {}),\n page: (id, size = TEMPLATE_PAGE_SIZE): GraphPage => ({\n kind: 'graph', id, width: size.width, height: size.height, data: { nodes: [], edges: [] },\n notation: type.notations?.[0] ?? FLOWCHART_NOTATION,\n }),\n };\n}\n\nconst SEQUENCE_TEMPLATE: PageTemplate = {\n id: 'sequence', label: 'Sequence', group: 'sequence', page: (id) => readPage(SEQUENCE_STARTER, id),\n};\n\nconst plotTemplate = (kind: PlotKind): PageTemplate => ({\n id: `plot:${kind}`, label: PLOT_STARTERS[kind].label, group: 'chart', page: (id) => readPage(PLOT_STARTERS[kind].source, id),\n});\n\n/** Every template, by id, in menu order: each diagram type's, the sequence diagram's, then each chart kind's. */\nexport const PAGE_TEMPLATES: Readonly<Record<string, PageTemplate>> = Object.freeze(Object.fromEntries([\n ...Object.values(DIAGRAM_TYPES).map(graphTemplate),\n SEQUENCE_TEMPLATE,\n ...(Object.keys(PLOT_STARTERS) as PlotKind[]).map(plotTemplate),\n].map((t) => [t.id, t])));\n","/** A template as a new scene, or as one more page of one. */\nimport { addPage, layoutPages, nextPageId, pagesOf, type Page, type Scene } from '@weasel-js/core';\nimport { DIAGRAM_TYPE_DOC_KEY, diagramTypeDocValue } from '@weasel-js/diagram';\nimport { documentSpecs, pageSpecs, type DocumentScene, type DocumentSpecsOptions } from '../toScene';\nimport type { PageTemplate } from './catalog';\n\n/** A new document of one page made from `template`, as {@link documentSpecs} draws it, with the diagram type the\n * template names. */\nexport function templateSpecs<TLayer extends string = 'main'>(\n template: PageTemplate, opts: DocumentSpecsOptions<TLayer> & { size?: { width: number; height: number } } = {},\n): DocumentScene<TLayer> {\n const { size, ...draw } = opts;\n const scene = documentSpecs({ pages: [template.page('page-1', size)] }, draw);\n if (template.diagramType === undefined) return scene;\n return { ...scene, doc: { ...scene.doc, [DIAGRAM_TYPE_DOC_KEY]: diagramTypeDocValue(template.diagramType) } };\n}\n\n/** Options for {@link addTemplatePage}. */\nexport interface AddTemplatePageOptions<TLayer extends string = 'main'> extends DocumentSpecsOptions<TLayer> {\n /** Where the page goes in the page order. Default last. */\n index?: number;\n /** A graph page's size. Default the template's. */\n size?: { width: number; height: number };\n}\n\n/** Adds a page made from `template` to `scene`, and what it draws on it, as one undo entry, `Add page`. Returns the new\n * page's id. */\nexport function addTemplatePage<TData, TLayer extends string, TPose>(\n scene: Scene<TData, TLayer, TPose>, template: PageTemplate, opts: AddTemplatePageOptions<TLayer> = {},\n): string {\n const { index, size, ...draw } = opts;\n const doc = pagesOf(scene as never);\n const pages = doc?.pages ?? [];\n const id = nextPageId(pages);\n const at = index ?? pages.length;\n const placeAt = (page: Page) => layoutPages([...pages.slice(0, at), page, ...pages.slice(at)], doc?.layout)[at]!;\n const { page, specs } = pageSpecs(template.page(id, size), placeAt, draw);\n scene.batch('Add page', () => {\n addPage(scene, page, { index: at });\n for (const spec of specs) scene.add(spec as never);\n });\n return id;\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 composeWorldPose,\n derivedDepOf,\n derivedPartsOf,\n documentOf,\n effectivePose,\n INHERIT,\n resolvePartPaint,\n isAnnotationLayer,\n scenePoseAdapter,\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 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(live: PageExportScene, page: PageRect): SvgNode[] {\n // An export writes the document, not what an open gesture or edit is showing.\n const scene = documentOf(live);\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 // A child stores its pose in its parent's frame; the walk below is handed every pose in the world.\n const poses = { ...scenePoseAdapter(scene as never), getPose: (id: string) => effectivePose(scene, scene.get(id as never)!) };\n const pose = (node: SceneNode): RectPose => {\n let p = poseCache.get(node.id);\n if (p === undefined) poseCache.set(node.id, (p = composeWorldPose(poses as never, node.id, scene.composition.compose as never) as RectPose));\n return p;\n };\n const pathOf = (node: SceneNode) => (node.kind === 'mark' ? 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.clip ? { clip: node.clip } : {}),\n ...(node.copiesFromPose ? { copiesFromPose: node.copiesFromPose as SvgKitTreeNode['copiesFromPose'] } : {}),\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 });\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 /** The document's language, a BCP 47 tag. Default: the language every text on the pages shares, if they share one. */\n lang?: 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 ...(opts.lang !== undefined ? { lang: opts.lang } : {}),\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/rowLines.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/common/header.ts","../src/mermaid/common/lines.ts","../src/mermaid/common/text.ts","../src/mermaid/architecture/parse.ts","../src/mermaid/architecture/read.ts","../src/mermaid/architecture/write.ts","../src/mermaid/common/styles.ts","../src/mermaid/flowchart/lex.ts","../src/mermaid/flowchart/parse.ts","../src/mermaid/flowchart/read.ts","../src/mermaid/block/parse.ts","../src/mermaid/block/read.ts","../src/mermaid/flowchart/write.ts","../src/mermaid/block/write.ts","../src/mermaid/c4/parse.ts","../src/mermaid/c4/kinds.ts","../src/mermaid/c4/read.ts","../src/mermaid/c4/write.ts","../src/mermaid/class/parse.ts","../src/mermaid/class/read.ts","../src/mermaid/class/write.ts","../src/mermaid/er/parse.ts","../src/mermaid/er/read.ts","../src/mermaid/er/write.ts","../src/mermaid/kanban/parse.ts","../src/mermaid/kanban/read.ts","../src/mermaid/kanban/write.ts","../src/mermaid/mindmap/parse.ts","../src/mermaid/mindmap/read.ts","../src/mermaid/mindmap/write.ts","../src/mermaid/sequence/syntax.ts","../src/mermaid/sequence/parse.ts","../src/mermaid/sequence/read.ts","../src/mermaid/sequence/write.ts","../src/mermaid/requirement/parse.ts","../src/mermaid/requirement/read.ts","../src/mermaid/requirement/write.ts","../src/mermaid/state/parse.ts","../src/mermaid/state/read.ts","../src/mermaid/state/write.ts","../src/mermaid/xychart/parse.ts","../src/mermaid/xychart/read.ts","../src/mermaid/xychart/write.ts","../src/mermaid/gantt/parse.ts","../src/mermaid/gantt/read.ts","../src/mermaid/gantt/write.ts","../src/mermaid/gitgraph/parse.ts","../src/mermaid/gitgraph/read.ts","../src/mermaid/gitgraph/write.ts","../src/mermaid/journey/read.ts","../src/mermaid/journey/write.ts","../src/mermaid/packet/read.ts","../src/mermaid/packet/write.ts","../src/mermaid/pie/read.ts","../src/mermaid/pie/write.ts","../src/mermaid/quadrant/parse.ts","../src/mermaid/quadrant/read.ts","../src/mermaid/quadrant/write.ts","../src/mermaid/radar/parse.ts","../src/mermaid/radar/read.ts","../src/mermaid/radar/write.ts","../src/mermaid/sankey/read.ts","../src/mermaid/sankey/write.ts","../src/mermaid/timeline/read.ts","../src/mermaid/timeline/write.ts","../src/mermaid/format.ts","../src/formats.ts","../src/plotPages.ts","../src/graphPageMeta.ts","../src/sceneReaders.ts","../src/fromScene.ts","../src/pageKinds.ts","../src/sequencePage.ts","../src/toScene.ts","../src/templates/starters.ts","../src/templates/catalog.ts","../src/templates/templateScene.ts","../src/pageNodes.ts","../src/pageSvg.ts","../src/pagePng.ts","../src/pdfRaster.ts","../src/pagesPdf.ts"],"names":["item","text","num","end","marker","quoted","fail","attrList","attrs","body","textOf","joined","claim","rgbaToHex","POINTS_PER_INCH","shapeOf","wrapped","kindOf","boxOf","NAMED","decodeEntities","markerOf","outlineOf","dashOf","readNode","readEdge","endOf","childElements","color","nodeLines","VERTICAL","dataNodeStyle","dataRegionStyle","dataEdgeStyle","DEFAULT_PORTS","edgeIdOf","diagramScene","IDENTITY_POSE_COMPOSITION","diagramThemeFrom","title","nodeColors","keyword","SHAPES","KEYWORDS","block","DIRECTIONS","WORD","LINK","SPAN","strokeOf","HEADER","px","args","ID","attributes","HEADS","RELATION","metaOf","SHAPE_OUTLINES","BRACKETS","ARROWS","NOTE","statementOf","parsed","NAME","fields","FORMAT","unquote","frontMatter","m","rest","pageName","ATTRIBUTE","typeOf","nameOf","name","NUMBER","numberAt","ITEM","field","timelineText","colorOf","deepEqual","moved","NODE_STROKE_WIDTH","optional","EDGE_STROKE_WIDTH","membersOf","readRegion","readGroup","pageOf","endLabelIdOf","sequenceRootOf","read","FLOWCHART_NOTATION","placedPagesOf","plotRootOf","pageHolding","documentBoundsOf","sequenceLayout","DIAGRAM_THEME_KEY","readPage","DIAGRAM_TYPE_DOC_KEY","diagramTypeDocValue","page","layoutPages","scenePoseAdapter","composeWorldPose","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, LayoutOptions, SequenceData } from '@weasel-js/diagram';\nimport type { PlotData } from '@weasel-js/plot';\n\n/** What every page has: its sheet size. Ids share one namespace across the whole document. */\nexport interface PageBase {\n id: string;\n name?: string;\n width: number;\n height: number;\n}\n\n/** A page of nodes and edges, in coordinates from the page's top-left corner. */\nexport interface GraphPage extends PageBase {\n kind: 'graph';\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 /** The layout that runs when the page is laid out on import. Unset, `layered`. */\n layout?: PageLayout;\n /** What the graph models, such as `'class'` or `'state'`: a format with a notation of that name writes it in\n * that notation. Unset, a plain flowchart. */\n notation?: string;\n}\n\n/** A layout by its name in `@weasel-js/diagram`'s `LAYOUTS`, and the options a file can carry for it. */\nexport interface PageLayout {\n name: 'layered' | 'tree' | 'force' | 'chain' | 'radial' | 'grid';\n options?: Pick<LayoutOptions, 'nodeGap' | 'rankGap' | 'order' | 'chainSide' | 'grid'>;\n}\n\n/** A page holding one chart, which fills it. */\nexport interface PlotPage extends PageBase {\n kind: 'plot';\n data: PlotData;\n}\n\n/** A sequence diagram, laid out from its data whenever it is drawn. Its `name` is the diagram's title. */\nexport interface SequencePage extends PageBase {\n kind: 'sequence';\n data: SequenceData;\n}\n\n/** One page of a document; `kind` says what its `data` is. */\nexport type DocumentPage = GraphPage | SequencePage | PlotPage;\n\n/** The kinds of page a document can hold. */\nexport type PageKind = DocumentPage['kind'];\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 /** The kinds of page it reads and writes. A writer leaves out a page of any other kind, with a warning. */\n kinds: readonly PageKind[];\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\n/** `page` as a graph, for a format that writes graphs only. Throws on a page of any other kind. */\nexport function graphPageOf(page: DocumentPage, format: string): GraphPage {\n if (page.kind !== 'graph') throw new Error(`${format} writes graph pages only; this page holds a ${(page as DocumentPage).kind}`);\n return page;\n}\n\n/** The graph pages of `doc`, warning once for each page of another kind left out. */\nexport function graphPagesOf(doc: DiagramDocument, format: string, warn: (message: string) => void): GraphPage[] {\n const pages: GraphPage[] = [];\n for (const page of doc.pages) {\n if (page.kind === 'graph') pages.push(page);\n else warn(`${format} holds graph pages only; the ${(page as DocumentPage).kind} page \"${(page as DocumentPage).name ?? (page as DocumentPage).id}\" was left out.`);\n }\n return pages;\n}\n\n/** Whether `format` can write every page of `doc`. */\nexport function formatHolds(format: DiagramFormat, doc: DiagramDocument): boolean {\n return formatTakes(format, new Set(doc.pages.map((p) => p.kind)));\n}\n\n/** Whether `format` reads and writes every kind in `kinds`: what a menu asks of `scenePageKinds`. */\nexport function formatTakes(format: DiagramFormat, kinds: ReadonlySet<PageKind>): boolean {\n return [...kinds].every((k) => format.kinds.includes(k));\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 { IDENTITY_POSE_COMPOSITION } from '@weasel-js/core';\nimport type { Vec2 } from '@weasel-js/core/math';\nimport {\n LAYOUTS, diagramScene, edgeIdOf, type DataContainer, type DataEdge, type DiagramEdge, type DiagramLabel, type DiagramSpec,\n type DiagramTheme, type MeasureRowText,\n} from '@weasel-js/diagram';\nimport type { GraphPage } 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: GraphPage): 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 its `layout` (default `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: GraphPage, opts: { theme: DiagramTheme; measure?: MeasureRowText }): GraphPage {\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 // Read as laid out, in world.\n const layoutOptions = { ...page.layout?.options, ...(page.direction ? { direction: page.direction } : {}) };\n const specs = diagramScene(pinned, {\n layout: LAYOUTS[page.layout?.name ?? 'layered'], theme: opts.theme, composition: IDENTITY_POSE_COMPOSITION, ...(opts.measure ? { measure: opts.measure } : {}),\n ...(Object.keys(layoutOptions).length > 0 ? { layoutOptions } : {}),\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 { GraphPage } 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\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 GraphRead {\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: GraphRead): GraphPage {\n const ids = [...g.nodes.map((n) => n.id), ...g.containers.map((c) => c.id)];\n return {\n kind: 'graph',\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 { rgbaToHex } from '@weasel-js/paint';\nimport { 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 rgbaToHex([f(5), f(3), 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: 'doubleEllipse', point: 'ellipse',\n diamond: 'diamond', hexagon: 'hexagon', parallelogram: 'parallelogram', trapezium: 'trapezoid',\n cylinder: 'cylinder', note: 'note', folder: 'folder', tab: 'folder', octagon: 'octagon', triangle: 'triangle', box3d: 'cube',\n};\n\n/** The attribute naming the outline a node really has, where its DOT shape is only an approximation.\n * Graphviz ignores attributes it doesn't know, so it draws the shape and a diagram reads the name. */\nexport const OUTLINE_ATTR = 'weasel_outline';\n\n/** Outlines DOT names differently, or draws as a rounded box. A stadium shares the rounded box with\n * `roundRect`, so it is `marked` to come back as itself. */\nconst SHAPE_NAMES: Readonly<Record<string, { shape: string; rounded?: boolean; marked?: true }>> = {\n stadium: { shape: 'box', rounded: true, marked: true }, roundRect: { shape: 'box', rounded: true }, trapezoid: { shape: 'trapezium' },\n cube: { shape: 'box3d' }, doubleEllipse: { shape: 'doublecircle' },\n};\n\n/** The outlines DOT has a shape of the same name for. */\nconst SAME_NAMES: ReadonlySet<string> = new Set([\n 'diamond', 'ellipse', 'hexagon', 'parallelogram', 'cylinder', 'note', 'folder', 'octagon', 'triangle',\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') ? 'roundRect' : outline;\n}\n\n/** The shape and the style word an outline writes as; a drawn path as a box, and a name DOT has no\n * shape for as a box marked `missing`. `marked` asks for {@link OUTLINE_ATTR}. */\nexport function shapeOf(outline: Outline | undefined): { shape: string; rounded?: boolean; missing?: true; marked?: true } {\n if (outline === undefined || typeof outline !== 'string' || outline === 'rect') return { shape: 'box' };\n return SHAPE_NAMES[outline] ?? (SAME_NAMES.has(outline) ? { shape: outline } : { shape: 'box', missing: true, marked: true });\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: 'triangle-hollow', vee: 'arrow-concave',\n crow: 'crow-many', teetee: 'crow-one', teeodot: 'crow-zero-one', crowtee: 'crow-one-many', crowodot: 'crow-zero-many',\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', 'triangle-hollow': 'onormal',\n 'crow-many': 'crow', 'crow-one': 'teetee', 'crow-zero-one': 'teeodot', 'crow-one-many': 'crowtee', 'crow-zero-many': 'crowodot',\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, OUTLINE_ATTR, 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([OUTLINE_ATTR, 'label', 'shape', 'style', 'color', 'fillcolor', 'fontcolor', 'penwidth', 'width', 'height', 'pos']),\n edge: new Set(['label', 'taillabel', 'headlabel', '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 = str(attrs, OUTLINE_ATTR) ?? 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 textOf = (key: string) => {\n const value = e.attrs.get(key);\n const joined = value === undefined ? '' : labelLines(value, '', r.graph.id ?? '').join(' ');\n return joined === '' ? undefined : joined;\n };\n const lines = [textOf('label')].filter((l) => l !== undefined);\n const endLabels = { ...(textOf('taillabel') ? { from: textOf('taillabel') } : {}), ...(textOf('headlabel') ? { to: textOf('headlabel') } : {}) };\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(endLabels).length > 0 ? { endLabels } : {}),\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","import type { DataNode } from '@weasel-js/diagram';\n\n/** A node's text, one line per text row. A divider is left out quietly, since it holds no text;\n * `dropped` is called for a port row or slot, which do. */\nexport function rowLines(node: DataNode, dropped: () => void): 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 if (row.kind !== 'divider') dropped();\n }\n return lines;\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 { normalizeHex, parseColor, rgbaToHex, tryNormalizeHex } from '@weasel-js/paint';\nimport { deepEqual } from '@weasel-js/registry';\nimport { graphPageOf, writtenPage, type DiagramDocument, type GraphPage, type WriteOptions } from './document';\nimport { Warnings } from './graphRead';\nimport { rowLines } from './rowLines';\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: GraphPage;\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 return rowLines(node, () => warnings.add(`${format} holds only text in a shape; its port rows and slots were dropped.`));\n}\n\nfunction clusterTree(page: GraphPage, theme: DiagramTheme, warnings: Warnings, format: string, holdsPools: boolean) {\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' && !holdsPools) 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.\n * `holdsPools` says the writer has a form of its own for a pool and its lanes, which are then written without a warning. */\nexport function graphOut(doc: DiagramDocument, opts: WriteOptions | undefined, format: string, holdsPools = false): GraphOut | null {\n const written = writtenPage(doc, opts);\n if (written === null) return null;\n const page = graphPageOf(written, format);\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, holdsPools);\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 if (page.data.edges.some((e) => dataEdgeStyle(e, theme).trim !== undefined)) {\n warnings.add(`${format} draws a connector whole; trims 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 if (css.startsWith('#')) return tryNormalizeHex(css) ?? css;\n if (!/^rgba?\\(/i.test(css)) return css;\n let rgba: readonly [number, number, number, number];\n try {\n rgba = parseColor(css);\n } catch {\n return css;\n }\n // An alpha written out is kept, `ff` included: a fourth comma-separated value or one after `/`.\n return normalizeHex(rgbaToHex(rgba), /\\/|(?:,[^,]*){3}/.test(css) ? 'rgba' : 'rgb');\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 (!deepEqual(style[key], base[key], { undefinedAsAbsent: true })) 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, OUTLINE_ATTR, 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, missing, marked } = shapeOf(node.outline);\n if (missing) out.warnings.add('DOT has no shape for some outlines; they were written as boxes.');\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 marked ? `${OUTLINE_ATTR}=${dotId(node.outline as string)}` : 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 edge.endLabels?.from ? `taillabel=${quoteLabel([edge.endLabels.from])}` : null,\n edge.endLabels?.to ? `headlabel=${quoteLabel([edge.endLabels.to])}` : 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 kinds: ['graph'],\n};\n","/** The native format: a {@link DiagramDocument} written out as JSON, which carries everything the model holds. */\nimport type { DiagramDocument, DiagramFormat, DocumentPage, 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 // Files written before pages had kinds hold only graphs.\n const pages = document.pages.map((p) => ({ ...p, kind: p.kind ?? 'graph' }) as DocumentPage);\n return { document: { ...document, pages }, 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 kinds: ['graph', 'sequence', 'plot'],\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\ntype StylePart = string | [string, string | number];\n\n/** A figure drawn over its label, as BPMN's events and gateways and the network devices are. */\nconst LABEL_BELOW: StylePart[] = [['verticalLabelPosition', 'bottom'], ['verticalAlign', 'top']];\nconst event = (outline: string): StylePart[] =>\n [['shape', 'mxgraph.bpmn.event'], ['outline', outline], ['symbol', 'general'], ...LABEL_BELOW];\nconst gateway = (...parts: StylePart[]): StylePart[] => [['shape', 'mxgraph.bpmn.gateway2'], ...parts, ...LABEL_BELOW];\nconst device = (name: string): StylePart[] => [['shape', `mxgraph.networks.${name}`], ...LABEL_BELOW];\n\n/**\n * Shapes by their style name, each with the style that writes it back. `when` narrows a name to the\n * cells whose style also holds that pair; an entry without `write` is read only. Read takes the first\n * entry that matches, write the first that names the outline.\n */\nexport const SHAPES: ReadonlyArray<{\n name: string;\n when?: readonly [string, string];\n outline: Exclude<Outline, object>;\n write?: readonly StylePart[];\n}> = [\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 { name: 'cylinder3', outline: 'cylinder', write: [['shape', 'cylinder3'], ['boundedLbl', 1], ['backgroundOutline', 1], ['size', 15]] },\n { name: 'document', outline: 'document', write: [['shape', 'document'], ['boundedLbl', 1]] },\n { name: 'note', outline: 'note', write: [['shape', 'note'], ['size', 20]] },\n { name: 'cloud', outline: 'cloud', write: ['ellipse', ['shape', 'cloud']] },\n { name: 'triangle', outline: 'triangle', write: ['triangle', ['direction', 'north']] },\n { name: 'cube', outline: 'cube', write: [['shape', 'cube'], ['boundedLbl', 1], ['flipH', 1]] },\n { name: 'folder', outline: 'folder', write: [['shape', 'folder'], ['tabPosition', 'left']] },\n { name: 'umlActor', outline: 'actor', write: [['shape', 'umlActor'], ['verticalLabelPosition', 'bottom'], ['verticalAlign', 'top']] },\n { name: 'doubleEllipse', outline: 'doubleEllipse', write: ['ellipse', ['shape', 'doubleEllipse']] },\n // As draw.io's UML palette (Sidebar-UML.js) writes a state machine's start, end, and fork or join.\n { name: 'startState', outline: 'start', write: ['ellipse', ['shape', 'startState']] },\n { name: 'endState', outline: 'end', write: ['ellipse', ['shape', 'endState']] },\n { name: 'line', outline: 'bar', write: [['shape', 'line']] },\n { name: 'mxgraph.bpmn.event', when: ['outline', 'standard'], outline: 'event', write: event('standard') },\n { name: 'mxgraph.bpmn.event', when: ['outline', 'catching'], outline: 'intermediateEvent', write: event('catching') },\n { name: 'mxgraph.bpmn.event', when: ['outline', 'throwing'], outline: 'intermediateEvent' },\n { name: 'mxgraph.bpmn.event', outline: 'event' },\n // As draw.io's own BPMN palette (Sidebar-BPMN.js) writes them: only exclusive, parallel and complex are a `gwType`;\n // the default, `event`, draws the event `outline` and `symbol` name inside the diamond.\n { name: 'mxgraph.bpmn.gateway2', when: ['gwType', 'exclusive'], outline: 'exclusiveGateway', write: gateway(['outline', 'none'], ['symbol', 'none'], ['gwType', 'exclusive']) },\n { name: 'mxgraph.bpmn.gateway2', when: ['gwType', 'parallel'], outline: 'parallelGateway', write: gateway(['outline', 'none'], ['symbol', 'none'], ['gwType', 'parallel']) },\n { name: 'mxgraph.bpmn.gateway2', when: ['gwType', 'complex'], outline: 'diamond' },\n { name: 'mxgraph.bpmn.gateway2', when: ['outline', 'end'], outline: 'inclusiveGateway', write: gateway(['outline', 'end'], ['symbol', 'general']) },\n { name: 'mxgraph.bpmn.gateway2', when: ['outline', 'catching'], outline: 'eventGateway', write: gateway(['outline', 'catching'], ['symbol', 'multiple']) },\n // What this package wrote before 2026-10-27, which draw.io draws as a bare diamond.\n { name: 'mxgraph.bpmn.gateway2', when: ['gwType', 'inclusive'], outline: 'inclusiveGateway' },\n { name: 'mxgraph.bpmn.gateway2', when: ['gwType', 'eventBased'], outline: 'eventGateway' },\n { name: 'mxgraph.bpmn.gateway2', outline: 'diamond' },\n {\n name: 'mxgraph.bpmn.task', when: ['isLoopSub', '1'], outline: 'subprocess',\n write: [['shape', 'mxgraph.bpmn.task'], ['taskMarker', 'abstract'], ['isLoopSub', 1], ['rounded', 1]],\n },\n { name: 'mxgraph.networks.server', outline: 'server', write: device('server') },\n { name: 'mxgraph.networks.router', outline: 'router', write: device('router') },\n { name: 'mxgraph.networks.switch', outline: 'switch', write: device('switch') },\n { name: 'mxgraph.networks.firewall', outline: 'firewall', write: device('firewall') },\n { name: 'mxgraph.networks.laptop', outline: 'laptop', write: device('laptop') },\n { name: 'mxgraph.networks.pc', outline: 'desktop', write: device('pc') },\n { name: 'mxgraph.networks.mobile', outline: 'phone', write: device('mobile') },\n { name: 'mxgraph.networks.printer', outline: 'printer', write: device('printer') },\n { name: 'mxgraph.networks.user_male', outline: 'user', write: device('user_male') },\n // mxgraph.networks has no globe; this is the Office set's.\n { name: 'mxgraph.office.concepts.globe_internet', outline: 'globe', write: [['shape', 'mxgraph.office.concepts.globe_internet'], ...LABEL_BELOW] },\n];\n\n/** The entry a cell's style reads as: its shape name, and the pair that narrows it where one does. */\nexport function shapeEntry(name: string | undefined, value: (key: string) => string | undefined): (typeof SHAPES)[number] | undefined {\n return SHAPES.find((s) => s.name === name && (s.when === undefined || value(s.when[0]) === s.when[1]));\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: 'triangle-hollow' },\n blockThin: { filled: 'arrow', hollow: 'triangle-hollow' }, 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 ERone: { filled: 'bar' }, ERmandOne: { filled: 'crow-one' }, ERmany: { filled: 'crow-many' },\n ERzeroToOne: { filled: 'crow-zero-one' }, ERoneToMany: { filled: 'crow-one-many' }, ERzeroToMany: { filled: 'crow-zero-many' },\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 'triangle-hollow': ['block', 0], 'crow-one': ['ERmandOne', 0], 'crow-many': ['ERmany', 0],\n 'crow-zero-one': ['ERzeroToOne', 0], 'crow-one-many': ['ERoneToMany', 0], 'crow-zero-many': ['ERzeroToMany', 0],\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, STADIUM_ARC, markerOf, shapeEntry } 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 = shapeEntry(shape, (key) => style.values.get(key));\n if (known !== undefined) return known.outline;\n if (styleFlag(style, 'rounded')) return (styleNumber(style, 'arcSize') ?? 0) >= STADIUM_ARC ? 'stadium' : 'roundRect';\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 italic: fontStyle !== undefined && (fontStyle & 2) === 2 ? 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, and not only because its shape is written that way. */\nexport function verticalAlignOf(style: CellStyle): DataNode['verticalAlign'] {\n const raw = style.values.get('verticalAlign') ?? '';\n const own = shapeEntry(shapeOf(style), (key) => style.values.get(key))?.write;\n if (own?.some((part) => Array.isArray(part) && part[0] === 'verticalAlign' && part[1] === raw)) return undefined;\n return VERTICAL[raw];\n}\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 children = page.childrenOf(cell.id).filter((c) => labelOf(c) !== undefined);\n const endOf = (c: RawCell) => {\n const g = geometryOf(c);\n return !g.relative ? null : g.x === -1 ? 'from' : g.x === 1 ? 'to' : null;\n };\n const ends = children.filter((c) => endOf(c) !== null);\n const labels = children.filter((c) => endOf(c) === null);\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 const endLabels = Object.fromEntries(ends.map((c) => [endOf(c)!, labelOf(c)!]));\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 ...(ends.length > 0 ? { endLabels } : {}),\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 { kind: 'graph', 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, type RowTextStyle,\n} from '@weasel-js/diagram';\nimport { rowLines } from '../rowLines';\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 if (outline === 'roundRect') return [['rounded', 1]];\n const shape = SHAPES.find((s) => s.outline === outline && s.write !== undefined);\n if (shape?.write !== 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 else if (outline !== 'rect') warn(`Shapes of kind \"${outline}\" 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 return rowLines(node, () => warn('Port rows and slots inside shapes were left out.'));\n}\n\n/** draw-style XML's `fontStyle`: bit 1 bold, bit 2 italic. */\nfunction fontBits(style: RowTextStyle): number | undefined {\n const bits = (style.bold === true ? 1 : 0) | (style.italic === true ? 2 : 0);\n return bits === 0 ? undefined : bits;\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', fontBits(style)]];\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 if (style.trim !== undefined) warn('Trims on connectors were left out; they were written whole.');\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\n/** A label on edge `parent` at one end, `x` -1 for its source and 1 for its target, as draw.io writes a multiplicity. */\nexport function endLabelXml(cell: { id: string; value: string; parent: string }, x: -1 | 1): string {\n const head = attrs([\n ['id', cell.id], ['value', cell.value], ['style', `edgeLabel;html=1;resizable=0;align=${x < 0 ? 'left' : 'right'};verticalAlign=bottom;`],\n ['vertex', '1'], ['connectable', '0'], ['parent', cell.parent],\n ]);\n return ` <mxCell${head}>\\n <mxGeometry${attrs([['x', x], ['relative', '1'], ['as', 'geometry']])}>\\n`\n + ' <mxPoint as=\"offset\" />\\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, endLabelIdOf, 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, endLabelXml } 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 const id = edge.id ?? edgeIdOf(edge);\n const ends = (['from', 'to'] as const).filter((end) => edge.endLabels?.[end])\n .map((end) => endLabelXml({ id: endLabelIdOf(id, end), value: edge.endLabels![end]!, parent: id }, end === 'from' ? -1 : 1));\n return edgeXml({ id, value: edge.label ?? '', style, parent: page.layer, source: edge.from, target: edge.to }, label, points)\n + ends.join('');\n}\n","/** One page of a document as a draw-style `<diagram>`: its shapes, regions, and groups as nested cells, then its edges. */\nimport { IDENTITY_POSE_COMPOSITION, 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 { GraphPage } 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: GraphPage, index: number, theme: DiagramTheme, warn: Warn): string {\n const laid = needsLayout(page) ? laidOutPage(page, { theme }) : page;\n const { data } = laid;\n // In world: the tree below makes each box relative to the cell holding it.\n const specs = new Map(diagramScene(data, { layout: 'none', theme, composition: IDENTITY_POSE_COMPOSITION }).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 { graphPagesOf, type DiagramDocument, type 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 = graphPagesOf(doc, 'Draw-style XML', warn).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 kinds: ['graph'],\n};\n","/** What every Mermaid diagram starts with: front matter, then a header naming its kind. */\n\n/** A JSON string's value, else the text between its quotes. */\nexport function jsonString(quoted: string): string {\n try {\n return JSON.parse(quoted) as string;\n } catch {\n return quoted.slice(1, -1);\n }\n}\n\n/** A `---` block before the diagram: its `title`, and how many characters and lines it takes. */\nexport interface FrontMatter {\n title?: string;\n length: number;\n lines: number;\n}\n\n/** The front matter at the start of `text`, `length` 0 when there is none. Newlines are `\\n`. */\nexport function frontMatter(text: string): FrontMatter {\n const front = /^---[ \\t]*\\n([\\s\\S]*?)\\n---[ \\t]*(?:\\n|$)/.exec(text);\n if (front === null) return { length: 0, lines: 0 };\n const t = /^title:[ \\t]*(.*)$/m.exec(front[1]!)?.[1]?.trim();\n const title = t === undefined ? undefined : /^\".*\"$/.test(t) ? jsonString(t) : /^'.*'$/.test(t) ? t.slice(1, -1).replace(/''/g, \"'\") : t;\n return {\n ...(title !== undefined ? { title } : {}),\n length: front[0].length,\n lines: front[0].split('\\n').length - (front[0].endsWith('\\n') ? 1 : 0),\n };\n}\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 let directive = false;\n for (; k < lines.length; k++) {\n const l = lines[k]!.trim();\n if (directive || l.startsWith('%%{')) {\n directive = !l.includes('}%%');\n continue;\n }\n if (l === '' || l.startsWith('%%')) continue;\n return { word: /^[^\\s;]+/.exec(l)![0], text: l, line: k + 1 };\n }\n return null;\n}\n\n/** Every Mermaid diagram kind's header word but a flowchart's, whose `graph` a DOT file starts with too, so a file of a\n * kind not read is still recognized and named. */\nexport const MERMAID_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 * A line-oriented Mermaid diagram as its statements: one per line, each with\n * its line number and indent, front matter, `%%` comments, `%%{…}%%`\n * directives, and `accTitle`/`accDescr` read off first. Every kind but the\n * flowchart, whose statements run several to a line, reads its text this way.\n */\nimport type { Warnings } from '../../graphRead';\nimport { lineError } from '../../lineError';\nimport { frontMatter } from './header';\n\n/** One statement, trimmed. */\nexport interface Statement {\n text: string;\n line: number;\n /** Its leading whitespace's width, a tab counting as four. */\n indent: number;\n}\n\n/** A diagram's statements, and what came before and around them. */\nexport interface MermaidSource {\n /** The header line: the diagram's kind, and anything after it. */\n header: Statement;\n body: Statement[];\n title?: string;\n accTitle?: string;\n accDescr?: string;\n /** How many `%%{…}%%` directives there were. */\n directives: number;\n}\n\nconst widthOf = (lead: string): number => [...lead].reduce((n, c) => n + (c === '\\t' ? 4 : 1), 0);\n\n/** Splits `text` into statements. Throws, naming the line, on an `accDescr { … }` never closed or a diagram with no header. */\nexport function statementsOf(text: string): MermaidSource {\n const source = text.replace(/\\r\\n?/g, '\\n');\n const front = frontMatter(source);\n const raw = source.slice(front.length).split('\\n');\n const out: Statement[] = [];\n let directives = 0;\n let accTitle: string | undefined;\n let accDescr: string | undefined;\n for (let k = 0; k < raw.length; k++) {\n const line = front.lines + k + 1;\n const full = raw[k]!;\n const trimmed = full.trim();\n if (trimmed.startsWith('%%{')) {\n directives++;\n while (!raw[k]!.includes('}%%') && k < raw.length - 1) k++;\n continue;\n }\n if (trimmed === '' || trimmed.startsWith('%%')) continue;\n const acc = /^acc(Title|Descr)\\s*(?::\\s*(.*)|\\{\\s*(.*))$/.exec(trimmed);\n if (acc !== null && acc[3] === undefined) {\n if (acc[1] === 'Title') accTitle = acc[2]!.trim();\n else accDescr = acc[2]!.trim();\n continue;\n }\n if (acc !== null) {\n const lines = [acc[3]!];\n for (k++; k < raw.length && !raw[k]!.includes('}'); k++) lines.push(raw[k]!.trim());\n if (k >= raw.length) throw lineError('Mermaid', line, 'an accDescr block is never closed');\n lines.push(raw[k]!.slice(0, raw[k]!.indexOf('}')).trim());\n accDescr = lines.filter((l) => l !== '').join('\\n');\n continue;\n }\n out.push({ text: trimmed, line, indent: widthOf(/^\\s*/.exec(full)![0]) });\n }\n const [header, ...body] = out;\n if (header === undefined) throw lineError('Mermaid', front.lines + 1, 'the diagram has no header');\n return {\n header, body, directives,\n ...(front.title !== undefined ? { title: front.title } : {}),\n ...(accTitle !== undefined ? { accTitle } : {}),\n ...(accDescr !== undefined ? { accDescr } : {}),\n };\n}\n\n/** The page name `src` gives: its title, else its accessible title. Warns of what a page does not hold. */\nexport function pageNameOf(src: MermaidSource, warnings: Warnings): string | undefined {\n if (src.directives > 0) warnings.add('Mermaid configuration directives were dropped.');\n if (src.accDescr !== undefined) warnings.add('Mermaid accessible descriptions were dropped.');\n if (src.title !== undefined && src.accTitle !== undefined) warnings.add('Mermaid accessible titles were dropped; the page is named by the title.');\n return src.title ?? src.accTitle;\n}\n\n/** The front matter naming a page, as lines to start a diagram with. */\nexport const titleLines = (name: string | undefined): string[] => (name === undefined ? [] : ['---', `title: ${JSON.stringify(name)}`, '---']);\n","/** Mermaid text and ids, read and written alike by every diagram kind. */\nimport { markupLines } from '../../graphRead';\n\n/** Mermaid's text: markdown string quotes and bold dropped, entities and `<br>` read. */\nexport function 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\n/** `text` broken at spaces into lines of at most `width` characters, a longer word on a line of its own: how a\n * kind whose renderer wraps its text reads it into rows. */\nexport function wrapped(text: string, width = 32): string[] {\n const out: string[] = [];\n for (const word of text.split(/\\s+/).filter((w) => w !== '')) {\n const last = out.at(-1);\n if (last !== undefined && last.length + 1 + word.length <= width) out[out.length - 1] = `${last} ${word}`;\n else out.push(word);\n }\n return out;\n}\n\n/** `text` without the double quotes around it, if it has them. */\nexport const unquote = (text: string): string => (/^\".*\"$/s.test(text) ? text.slice(1, -1) : text);\n\nconst RESERVED = new Set(['end', 'subgraph', 'graph', 'flowchart', 'style', 'classdef', 'class', 'click', 'linkstyle', 'direction', 'default', 'call', 'href']);\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 with the characters Mermaid reads as syntax spelled as entities, lines joined by `<br>`. */\nexport function mermaidEscaped(lines: readonly string[]): string {\n return lines.map((l) => l.replace(/#/g, '#35;').replace(/\"/g, '#quot;').replace(/</g, '#lt;').replace(/>/g, '#gt;')).join('<br>');\n}\n\n/** Text as Mermaid quotes it: {@link mermaidEscaped}, in double quotes. */\nexport function mermaidText(lines: readonly string[]): string {\n const text = mermaidEscaped(lines);\n return `\"${text === '' ? ' ' : text}\"`;\n}\n","/** A Mermaid architecture diagram's grammar, read to statements with each one's line. */\nimport { lineError } from '../../lineError';\nimport { statementsOf, type MermaidSource } from '../common/lines';\nimport { unquote } from '../common/text';\n\n/** A side of a service, as an edge names it. */\nexport type ArchSide = 'L' | 'R' | 'T' | 'B';\n\n/** One end of an edge: a service or junction, the side it leaves by, and whether it meets the group around it. */\nexport interface ArchEnd {\n id: string;\n side: ArchSide;\n group: boolean;\n}\n\nexport type ArchStmt =\n | { kind: 'group'; id: string; icon?: string; title?: string; in?: string; line: number }\n | { kind: 'service'; id: string; icon?: string; title?: string; in?: string; line: number }\n | { kind: 'junction'; id: string; in?: string; line: number }\n | { kind: 'edge'; from: ArchEnd; to: ArchEnd; start: boolean; end: boolean; line: number };\n\n/** A whole architecture diagram. */\nexport interface ArchDiagram {\n source: MermaidSource;\n stmts: ArchStmt[];\n}\n\nconst ID = String.raw`[\\p{L}\\p{N}_][\\p{L}\\p{N}_-]*`;\nconst BOX = new RegExp(`^(group|service)\\\\s+(${ID})(?:\\\\(([^)]*)\\\\))?(?:\\\\[([^\\\\]]*)\\\\])?(?:\\\\s+in\\\\s+(${ID}))?$`, 'u');\nconst JUNCTION = new RegExp(`^junction\\\\s+(${ID})(?:\\\\s+in\\\\s+(${ID}))?$`, 'u');\nconst EDGE = new RegExp(`^(${ID})(\\\\{group\\\\})?\\\\s*:\\\\s*([LRTB])\\\\s*(<)?--(>)?\\\\s*([LRTB])\\\\s*:\\\\s*(${ID})(\\\\{group\\\\})?$`, 'u');\n\n/** Parses a Mermaid architecture diagram. Throws, naming the line, on text that is not one. */\nexport function parseArchitecture(text: string): ArchDiagram {\n const source = statementsOf(text);\n if (!/^architecture(-beta)?$/.test(source.header.text)) {\n throw lineError('Mermaid', source.header.line, `expected an architecture-beta header, found \"${source.header.text}\"`);\n }\n const stmts = source.body.map(({ text: t, line }): ArchStmt => {\n const box = BOX.exec(t);\n if (box !== null) {\n const [, kind, id, icon, title, parent] = box as unknown as [string, 'group' | 'service', string, string?, string?, string?];\n return {\n kind, id: id, line,\n ...(icon !== undefined && icon.trim() !== '' ? { icon: icon.trim() } : {}),\n ...(title !== undefined ? { title: unquote(title.trim()) } : {}),\n ...(parent !== undefined ? { in: parent } : {}),\n };\n }\n const junction = JUNCTION.exec(t);\n if (junction !== null) return { kind: 'junction', id: junction[1]!, line, ...(junction[2] !== undefined ? { in: junction[2] } : {}) };\n const edge = EDGE.exec(t);\n if (edge !== null) {\n const [, from, fromGroup, fromSide, start, end, toSide, to, toGroup] = edge as unknown as (string | undefined)[];\n return {\n kind: 'edge', line, start: start !== undefined, end: end !== undefined,\n from: { id: from!, side: fromSide as ArchSide, group: fromGroup !== undefined },\n to: { id: to!, side: toSide as ArchSide, group: toGroup !== undefined },\n };\n }\n throw lineError('Mermaid', line, `cannot read \"${t}\" as an architecture statement`);\n });\n return { source, stmts };\n}\n","/**\n * A Mermaid architecture diagram as a one-page document: services as nodes\n * whose outline is their icon's, junctions as dots, groups as containers, and\n * edges joined at the compass port each side names.\n */\nimport type { MarkerRef } from '@weasel-js/core';\nimport type { DataContainer, DataEdge, DataNode, Outline } from '@weasel-js/diagram';\nimport type { ImportResult } from '../../document';\nimport { Warnings, graphPage } from '../../graphRead';\nimport { lineError } from '../../lineError';\nimport { pageNameOf } from '../common/lines';\nimport { textLines } from '../common/text';\nimport { parseArchitecture, type ArchEnd, type ArchSide, type ArchStmt } from './parse';\n\n/** Mermaid's built-in icons, as the outline each is drawn with. */\nexport const ICON_OUTLINES: Readonly<Record<string, Outline>> = {\n cloud: 'cloud', database: 'cylinder', disk: 'disk', internet: 'globe', server: 'server',\n};\n/** A service with no icon, or one not built in. */\nexport const SERVICE_OUTLINE = 'roundRect';\n/** A side, as the compass port it names. */\nexport const SIDE_PORTS: Readonly<Record<ArchSide, string>> = { L: 'w', R: 'e', T: 'n', B: 's' };\n/** A junction's box. */\nexport const JUNCTION_SIZE = 12;\n\nclass ArchReader {\n readonly warnings = new Warnings();\n readonly nodes: DataNode[] = [];\n readonly groups = new Map<string, string | undefined>();\n readonly parent = new Map<string, string>();\n readonly order: string[] = [];\n readonly edges: DataEdge[] = [];\n\n place(id: string, parent: string | undefined): void {\n this.order.push(id);\n if (parent !== undefined) this.parent.set(id, parent);\n }\n\n outline(icon: string | undefined): Outline {\n if (icon === undefined) return SERVICE_OUTLINE;\n const known = ICON_OUTLINES[icon];\n if (known === undefined) this.warnings.list('Mermaid icons not built in were drawn as rounded boxes', icon);\n return known ?? SERVICE_OUTLINE;\n }\n\n /** An edge's end: the service, or the group around it when the end says `{group}`. */\n end(end: ArchEnd): { id: string; port?: string } {\n if (!end.group) return { id: end.id, port: SIDE_PORTS[end.side] };\n const group = this.parent.get(end.id);\n if (group === undefined) {\n this.warnings.add('Mermaid {group} on a service in no group was dropped.');\n return { id: end.id, port: SIDE_PORTS[end.side] };\n }\n return { id: group };\n }\n\n read(stmts: readonly ArchStmt[]): void {\n for (const s of stmts) {\n if (s.kind === 'group') {\n this.groups.set(s.id, s.title);\n this.place(s.id, s.in);\n if (s.icon !== undefined) this.warnings.list('Mermaid group icons were dropped', s.icon);\n } else if (s.kind === 'service') {\n this.nodes.push({ id: s.id, lines: textLines(s.title ?? s.id), outline: this.outline(s.icon) });\n this.place(s.id, s.in);\n } else if (s.kind === 'junction') {\n this.nodes.push({ id: s.id, lines: [], outline: 'start', width: JUNCTION_SIZE, height: JUNCTION_SIZE, padding: 0 });\n this.place(s.id, s.in);\n }\n }\n for (const s of stmts) if (s.kind === 'edge') this.edge(s);\n }\n\n edge(s: Extract<ArchStmt, { kind: 'edge' }>): void {\n for (const { id } of [s.from, s.to]) {\n if (!this.nodes.some((n) => n.id === id)) throw lineError('Mermaid', s.line, `no service or junction is named \"${id}\"`);\n }\n const from = this.end(s.from);\n const to = this.end(s.to);\n const colors = { ...(s.start ? { markerStart: 'arrow' as MarkerRef } : {}), ...(!s.end ? { markerEnd: null } : {}) };\n this.edges.push({\n from: from.id, to: to.id,\n ...(from.port !== undefined ? { fromPort: from.port } : {}),\n ...(to.port !== undefined ? { toPort: to.port } : {}),\n ...(Object.keys(colors).length > 0 ? { colors } : {}),\n });\n }\n}\n\n/** Reads a Mermaid architecture diagram into a one-page document of `notation` `'architecture'`. Throws, naming the\n * line, on text that is not one, or on a name no group holds. */\nexport function readArchitecture(text: string): ImportResult {\n const { source, stmts } = parseArchitecture(text);\n const r = new ArchReader();\n r.read(stmts);\n for (const s of stmts) {\n if (s.kind !== 'edge' && s.in !== undefined && !r.groups.has(s.in)) throw lineError('Mermaid', s.line, `no group is named \"${s.in}\"`);\n }\n const containers: DataContainer[] = [...r.groups].map(([id, title]) => {\n const members = r.order.filter((m) => r.parent.get(m) === id);\n return { id, role: 'container', ...(title !== undefined ? { label: textLines(title).join(' ') } : {}), ...(members.length > 0 ? { members } : {}) };\n });\n const name = pageNameOf(source, r.warnings);\n const page = graphPage({ ...(name !== undefined ? { name } : {}), direction: 'right', nodes: r.nodes, edges: r.edges, containers });\n return { document: { pages: [{ ...page, notation: 'architecture' }] }, warnings: r.warnings.all() };\n}\n","/** One graph page as a Mermaid architecture diagram: containers as groups, shapes as services, dots as junctions. */\nimport type { DataEdge, DataNode } from '@weasel-js/diagram';\nimport type { DiagramDocument, ExportResult, WriteOptions } from '../../document';\nimport { edgeStyleIn, graphOut, nodeLines, type Cluster, type GraphOut } from '../../graphWrite';\nimport { titleLines } from '../common/lines';\nimport { mermaidIds } from '../common/text';\nimport type { ArchSide } from './parse';\nimport { ICON_OUTLINES, SIDE_PORTS } from './read';\n\nconst OUTLINE_ICONS = new Map(Object.entries(ICON_OUTLINES).map(([icon, outline]) => [outline, icon]));\nconst PORT_SIDES = new Map(Object.entries(SIDE_PORTS).map(([side, port]) => [port, side as ArchSide]));\n\n/** A title as Mermaid's brackets hold it: one line, no closing bracket. */\nconst title = (lines: readonly string[]): string => lines.join(' ').replace(/\\]/g, ')');\n\nclass ArchWriter {\n readonly lines: string[] = [];\n readonly ids: Map<string, string>;\n /** Each cluster's id and the cluster it is in. */\n readonly parent = new Map<string, string>();\n readonly clusters = new Map<string, Cluster>();\n\n constructor(readonly out: GraphOut) {\n this.ids = mermaidIds([...out.page.data.nodes.map((n) => n.id), ...out.clusterIds]);\n const visit = (c: Cluster, parent: string | undefined) => {\n this.clusters.set(c.id, c);\n if (parent !== undefined) this.parent.set(c.id, parent);\n for (const n of c.nodes) this.parent.set(n, c.id);\n for (const k of c.clusters) visit(k, c.id);\n };\n for (const c of out.clusters) visit(c, undefined);\n }\n\n id(id: string): string {\n return this.ids.get(id) ?? id;\n }\n\n in(id: string): string {\n const p = this.parent.get(id);\n return p === undefined ? '' : ` in ${this.id(p)}`;\n }\n\n group(c: Cluster): void {\n this.lines.push(` group ${this.id(c.id)}${c.label !== undefined ? `[${title([c.label])}]` : ''}${this.in(c.id)}`);\n for (const k of c.clusters) this.group(k);\n }\n\n node(n: DataNode): void {\n const text = nodeLines(n, this.out.warnings, 'Mermaid');\n if (n.outline === 'start' && text.every((t) => t === '')) {\n this.lines.push(` junction ${this.id(n.id)}${this.in(n.id)}`);\n return;\n }\n const icon = typeof n.outline === 'string' ? OUTLINE_ICONS.get(n.outline) : undefined;\n if (icon === undefined && n.outline !== undefined && n.outline !== 'roundRect') {\n this.out.warnings.add('Mermaid architecture services wear only its built-in icons; other outlines were dropped.');\n }\n const named = text.length === 0 || (text.length === 1 && text[0] === n.id) ? '' : `[${title(text)}]`;\n this.lines.push(` service ${this.id(n.id)}${icon !== undefined ? `(${icon})` : ''}${named}${this.in(n.id)}`);\n }\n\n /** An edge's end: a service and its side, or a service in a group and `{group}`. Null for an empty group. */\n end(id: string, port: string | undefined, fallback: ArchSide): string | null {\n const c = this.clusters.get(id);\n const side = PORT_SIDES.get(port ?? '') ?? fallback;\n if (c === undefined) return `${this.id(id)}:${side}`;\n const inside = this.firstNode(c);\n return inside === undefined ? null : `${this.id(inside)}{group}:${side}`;\n }\n\n firstNode(c: Cluster): string | undefined {\n return c.nodes[0] ?? c.clusters.map((k) => this.firstNode(k)).find((n) => n !== undefined);\n }\n\n edge(e: DataEdge): void {\n const style = edgeStyleIn(this.out, e);\n const from = this.end(e.from, e.fromPort ?? e.routedPorts?.from, 'R');\n const to = this.end(e.to, e.toPort ?? e.routedPorts?.to, 'L');\n if (from === null || to === null) {\n this.out.warnings.add('Mermaid architecture edges meet a group through a service in it; edges to empty groups were dropped.');\n return;\n }\n if (e.label !== undefined && e.label !== '') this.out.warnings.add('Mermaid architecture edges have no labels; they were dropped.');\n const [name, side] = to.split(/:(?=[LRTB]$)/) as [string, string];\n const start = style.markerStart !== null && style.markerStart !== undefined ? '<' : '';\n const end = style.markerEnd !== null && style.markerEnd !== undefined ? '>' : '';\n this.lines.push(` ${from} ${start}--${end} ${side}:${name}`);\n }\n}\n\n/** Writes the page `opts.page` names, else the first, as a Mermaid architecture diagram. */\nexport function writeArchitecture(doc: DiagramDocument, opts?: WriteOptions): ExportResult {\n const out = graphOut(doc, opts, 'Mermaid');\n if (out === null) return { text: 'architecture-beta\\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 ArchWriter(out);\n w.lines.push(...titleLines(out.page.name), 'architecture-beta');\n for (const c of out.clusters) w.group(c);\n for (const n of out.page.data.nodes) w.node(n);\n for (const e of out.edges) w.edge(e);\n if (out.page.data.nodes.some((n) => n.colors !== undefined) || out.edges.some((e) => e.colors?.stroke !== undefined)) {\n out.warnings.add('Mermaid architecture diagrams have no styles; colors were dropped.');\n }\n return { text: `${w.lines.join('\\n')}\\n`, warnings: out.warnings.all() };\n}\n","/**\n * Mermaid's `classDef`, `class`, and `style`, which several diagram kinds\n * share: CSS-like `key:value` lists read into a node's own colors, and its\n * colors written back as one.\n */\nimport type { NodeStyle } from '@weasel-js/diagram';\nimport type { Warnings } from '../../graphRead';\nimport { hexColor } from '../../graphWrite';\n\n/** A style's `key:value` pairs, in order. */\nexport type StyleProps = [string, string][];\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\n/** `fill:#f96,stroke:#333` as its pairs. */\nexport const 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\nconst KEPT = ['fill', 'stroke', 'color', 'stroke-width', 'stroke-dasharray'];\n\n/** Warns of each property a diagram does not hold. */\nexport function checkProps(props: StyleProps, warnings: Warnings): void {\n for (const [key] of props) if (!KEPT.includes(key)) warnings.list('Mermaid style properties a diagram does not hold were dropped', key);\n}\n\n/** A CSS length in px as a number. */\nexport const px = (v: string): number => Number(v.replace(/px$/, ''));\n/** A `stroke-dasharray` as numbers. */\nexport const dashOf = (v: string): number[] => v.split(/[\\s,]+/).filter((s) => s !== '').map(px);\n\n/** A node's colors from the properties that apply to it, `undefined` for none. */\nexport function 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\n/** A node's colors as a style's properties, `fill:#ff0000,color:#000000`. */\nexport function 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:${style.strokeWidth}px` : null,\n style.dash !== undefined ? `stroke-dasharray:${style.dash.join(' ')}` : null,\n ].filter((p) => p !== null).join(',');\n}\n\n/** The `classDef`s, `class` assignments, and `style`s of one diagram, and the colors they give each node. */\nexport class StyleSheet {\n private readonly defs = new Map<string, StyleProps>();\n private readonly classes = new Map<string, string[]>();\n private readonly styles = new Map<string, StyleProps>();\n\n constructor(private readonly warnings: Warnings) {}\n\n classDef(names: readonly string[], props: StyleProps): void {\n checkProps(props, this.warnings);\n for (const name of names) this.defs.set(name, [...(this.defs.get(name) ?? []), ...props]);\n }\n\n assign(id: string, name: string): void {\n this.classes.set(id, [...(this.classes.get(id) ?? []), name]);\n }\n\n style(id: string, props: StyleProps): void {\n checkProps(props, this.warnings);\n this.styles.set(id, [...(this.styles.get(id) ?? []), ...props]);\n }\n\n /** `id`'s colors: the `default` class's, then its classes' in order, then its own style's. */\n colorsOf(id: string): Partial<NodeStyle> | undefined {\n const props = new Map<string, string>();\n const lists = [this.defs.get('default'), ...(this.classes.get(id) ?? []).map((c) => this.defs.get(c)), this.styles.get(id)];\n for (const list of lists) for (const [k, v] of list ?? []) props.set(k, v);\n return nodeColors(props);\n }\n\n /** Reads `classDef`, `style id …`, and, unless `withClass` is false, `class a,b name` statements; whether `text` was one. */\n statement(text: string, withClass = true): boolean {\n const m = /^(classDef|class|style)\\s+(\\S+)\\s*(.*)$/.exec(text);\n if (m === null || (!withClass && m[1] === 'class')) return false;\n const [, keyword, first, rest] = m as unknown as [string, string, string, string];\n if (keyword === 'classDef') this.classDef(first.split(','), propsOf(rest));\n else if (keyword === 'style') this.style(first, propsOf(rest));\n else for (const id of first.split(',')) this.assign(id.trim(), rest.trim());\n return true;\n }\n}\n","/** A Mermaid flowchart's tokens: ids, node shapes, links, and the raw rest of keyword lines. */\nimport { lineError } from '../../lineError';\nimport { frontMatter } from '../common/header';\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/** Each shape's openers, longest first, and the closers each may end with. */\nexport const 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\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 = frontMatter(this.text);\n this.title = front.title;\n this.i = front.length;\n this.line += front.lines;\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 lexFlowchart(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 { propsOf, type StyleProps } from '../common/styles';\nimport { lexFlowchart, type LinkHead, type MermaidShape, type MermaidToken } from './lex';\n\nexport type { StyleProps };\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\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\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\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 parseFlowchart(text: string): MermaidFlowchart {\n const { tokens, title, directives } = lexFlowchart(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, Outline } from '@weasel-js/diagram';\nimport type { ImportResult } from '../../document';\nimport { Membership, Warnings, graphPage } from '../../graphRead';\nimport { checkProps, dashOf, nodeColors, px } from '../common/styles';\nimport { textLines } from '../common/text';\nimport type { LinkHead, MermaidShape } from './lex';\nimport { parseFlowchart, 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\nexport const SHAPE_OUTLINES: Readonly<Partial<Record<MermaidShape, Outline>>> = {\n rect: 'rect', rounded: 'roundRect', stadium: 'stadium', circle: 'ellipse', 'double-circle': 'doubleEllipse', diamond: 'diamond',\n cylinder: 'cylinder',\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: 'roundRect', event: 'roundRect', stadium: 'stadium',\n pill: 'stadium', terminal: 'stadium', circle: 'ellipse', circ: 'ellipse', 'dbl-circ': 'doubleEllipse', 'double-circle': 'doubleEllipse',\n cyl: 'cylinder', cylinder: 'cylinder', db: 'cylinder', database: 'cylinder', doc: 'document', document: 'document',\n cloud: 'cloud', tri: 'triangle', triangle: 'triangle', extract: 'triangle',\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\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 checkProps(props, this.warnings);\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\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, its `notation` unset. Throws, naming the line, on text that is not one. */\nexport function readFlowchart(text: string): ImportResult {\n const chart = parseFlowchart(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","/** A Mermaid block diagram's grammar, read to statements with each one's line. */\nimport { lineError } from '../../lineError';\nimport { SHAPES, type MermaidShape } from '../flowchart/lex';\nimport { statementsOf, type MermaidSource, type Statement } from '../common/lines';\n\n/** A block: its id, its shape and text when it gives them, and the columns it spans. */\nexport interface BlockItem {\n kind: 'block';\n id: string;\n shape?: MermaidShape | 'arrow';\n text?: string;\n span?: number;\n}\n\n/** A link between blocks: its line, its heads, and its text. */\nexport interface BlockLink {\n stroke: 'normal' | 'thick' | 'dotted';\n start: boolean;\n end: boolean;\n text?: string;\n}\n\nexport type BlockStmt =\n | { kind: 'items'; items: (BlockItem | { kind: 'space'; n: number })[]; line: number }\n | { kind: 'links'; ends: BlockItem[]; links: BlockLink[]; line: number }\n | { kind: 'group'; id?: string; span?: number; stmts: BlockStmt[]; line: number }\n | { kind: 'columns'; n?: number; line: number }\n | { kind: 'style'; text: string; line: number }\n | { kind: 'other'; keyword: string; line: number };\n\n/** A whole block diagram. */\nexport interface BlockDiagram {\n source: MermaidSource;\n stmts: BlockStmt[];\n}\n\nconst WORD = /[\\p{L}\\p{N}_](?:[\\p{L}\\p{N}_]|[-.](?=[\\p{L}\\p{N}_]))*/uy;\nconst LABELED = /(<)?(--|==|-\\.)\\s*\"([^\"]*)\"\\s*(-{2,}|={2,}|\\.-+)(>)?/y;\nconst LINK = /(<)?(-{2,}|={2,}|-\\.+-)(>)?(?:\\|([^|]*)\\|)?/y;\nconst SPAN = /:(\\d+)/y;\n\nconst strokeOf = (body: string): BlockLink['stroke'] => (body.startsWith('=') ? 'thick' : body.includes('.') ? 'dotted' : 'normal');\n\n/** One line's blocks, spaces, and links, read left to right. */\nclass LineReader {\n i = 0;\n\n constructor(readonly text: string, readonly line: number) {}\n\n sticky(re: RegExp): RegExpExecArray | null {\n re.lastIndex = this.i;\n const m = re.exec(this.text);\n if (m !== null) this.i += m[0].length;\n return m;\n }\n\n span(): number | undefined {\n const m = this.sticky(SPAN);\n return m === null ? undefined : Number(m[1]);\n }\n\n link(): BlockLink | null {\n const labeled = this.sticky(LABELED);\n if (labeled !== null) {\n return { stroke: strokeOf(labeled[2]!), start: labeled[1] !== undefined, end: labeled[5] !== undefined, text: labeled[3]! };\n }\n const m = this.sticky(LINK);\n if (m === null) return null;\n return { stroke: strokeOf(m[2]!), start: m[1] !== undefined, end: m[3] !== undefined, ...(m[4] !== undefined ? { text: m[4].trim() } : {}) };\n }\n\n /** The text between `open` and `close`, quoted or bare. */\n shapeText(open: string, close: string): string {\n const from = this.i + open.length;\n const quoted = /^\\s*\"([^\"]*)\"\\s*/.exec(this.text.slice(from));\n const at = quoted !== null ? from + quoted[0].length : this.text.indexOf(close, from);\n if (at < 0 || !this.text.startsWith(close, at)) throw lineError('Mermaid', this.line, `a shape opened with \"${open}\" is never closed`);\n this.i = at + close.length;\n return quoted !== null ? quoted[1]! : this.text.slice(from, at).trim();\n }\n\n block(): BlockItem {\n const word = this.sticky(WORD);\n if (word === null) throw lineError('Mermaid', this.line, `cannot read \"${this.text.slice(this.i)}\" as a block`);\n const item: BlockItem = { kind: 'block', id: word[0] };\n if (this.text.startsWith('<[', this.i)) {\n item.shape = 'arrow';\n item.text = this.shapeText('<[', ']>');\n this.sticky(/\\([\\w, ]*\\)/y);\n }\n for (const [open, closers] of item.shape === undefined ? SHAPES : []) {\n if (!this.text.startsWith(open, this.i)) continue;\n const found = closers.find(([close]) => this.text.indexOf(close, this.i + open.length) >= 0);\n if (found === undefined) throw lineError('Mermaid', this.line, `a shape opened with \"${open}\" is never closed`);\n item.shape = found[1];\n item.text = this.shapeText(open, found[0]);\n break;\n }\n const span = this.span();\n if (span !== undefined) item.span = span;\n return item;\n }\n\n /** The line as a run of blocks and spaces, or as blocks joined by links. */\n read(): BlockStmt {\n const items: (BlockItem | { kind: 'space'; n: number })[] = [];\n const links: BlockLink[] = [];\n for (;;) {\n this.sticky(/\\s*/y);\n if (this.i >= this.text.length) break;\n const space = this.sticky(/space(?![\\p{L}\\p{N}_-])/uy);\n if (space !== null) {\n items.push({ kind: 'space', n: this.span() ?? 1 });\n continue;\n }\n const link = items.length > 0 ? this.link() : null;\n if (link !== null) links.push(link);\n else items.push(this.block());\n }\n if (links.length === 0) return { kind: 'items', items, line: this.line };\n const ends = items.filter((i): i is BlockItem => i.kind === 'block');\n if (ends.length !== links.length + 1 || ends.length !== items.length) {\n throw lineError('Mermaid', this.line, `cannot read \"${this.text}\" as blocks joined by links`);\n }\n return { kind: 'links', ends, links, line: this.line };\n }\n}\n\nconst GROUP = /^block(?::([\\p{L}\\p{N}_][\\p{L}\\p{N}_-]*))?(?::(\\d+))?$/u;\n\n/** Statements up to the `end` closing a group opened on line `opened`, or to the end when `opened` is null. */\nfunction block(lines: readonly Statement[], at: { i: number }, opened: number | null): BlockStmt[] {\n const out: BlockStmt[] = [];\n while (at.i < lines.length) {\n const { text, line } = lines[at.i++]!;\n if (text === 'end') {\n if (opened === null) throw lineError('Mermaid', line, '\"end\" closes no block');\n return out;\n }\n const group = GROUP.exec(text);\n const columns = /^columns\\s+(\\d+|auto)$/.exec(text);\n if (group !== null) {\n out.push({\n kind: 'group', line, stmts: block(lines, at, line),\n ...(group[1] !== undefined ? { id: group[1] } : {}), ...(group[2] !== undefined ? { span: Number(group[2]) } : {}),\n });\n } else if (columns !== null) out.push({ kind: 'columns', line, ...(columns[1] !== 'auto' ? { n: Number(columns[1]) } : {}) });\n else if (/^(classDef|class|style)\\s/.test(text)) out.push({ kind: 'style', text, line });\n else if (/^(click|direction)\\b/.test(text)) out.push({ kind: 'other', keyword: /^\\w+/.exec(text)![0], line });\n else out.push(new LineReader(text, line).read());\n }\n if (opened !== null) throw lineError('Mermaid', opened, 'a block opened here is never closed');\n return out;\n}\n\n/** Parses a Mermaid block diagram. Throws, naming the line, on text that is not one. */\nexport function parseBlockDiagram(text: string): BlockDiagram {\n const source = statementsOf(text);\n if (!/^block(-beta)?$/.test(source.header.text)) {\n throw lineError('Mermaid', source.header.line, `expected a block-beta header, found \"${source.header.text}\"`);\n }\n return { source, stmts: block(source.body, { i: 0 }, null) };\n}\n","/**\n * A Mermaid block diagram as a one-page document laid out by `grid`: blocks\n * as nodes in the flowchart's shapes, nested `block … end` groups as\n * containers, and `columns`, spans, and `space`s as the page layout's grid.\n */\nimport type { MarkerRef } from '@weasel-js/core';\nimport type { DataContainer, DataEdge, DataNode, EdgeStyle, GridOptions, Outline } from '@weasel-js/diagram';\nimport type { ImportResult, PageLayout } from '../../document';\nimport { Warnings, graphPage } from '../../graphRead';\nimport { pageNameOf } from '../common/lines';\nimport { StyleSheet } from '../common/styles';\nimport { textLines } from '../common/text';\nimport { SHAPE_OUTLINES } from '../flowchart/read';\nimport { parseBlockDiagram, type BlockItem, type BlockLink, type BlockStmt } from './parse';\n\n/** Between a block diagram's columns, and its rows. */\nexport const BLOCK_GAPS = { nodeGap: 24, rankGap: 40 } as const;\n\n/** The id an anonymous `block … end` reads as: `block-` and its place among them. */\nexport const anonymousGroupId = (n: number): string => `block-${n}`;\n\ninterface Grid { columns: Record<string, number>; spans: Record<string, number>; skips: Record<string, number> }\n\nclass BlockReader {\n readonly warnings = new Warnings();\n readonly styles = new StyleSheet(this.warnings);\n readonly nodes = new Map<string, { lines: string[]; outline: Outline }>();\n readonly groups = new Map<string, string[]>();\n readonly edges: DataEdge[] = [];\n readonly grid: Grid = { columns: {}, spans: {}, skips: {} };\n top: number | undefined;\n anonymous = 0;\n\n /** Declares `item`, a new one as the next of `members`, its shape and text when it gives them. */\n block(item: BlockItem, members: string[]): void {\n let node = this.nodes.get(item.id);\n if (node === undefined) {\n node = { lines: [item.id], outline: 'rect' };\n this.nodes.set(item.id, node);\n members.push(item.id);\n }\n if (item.text !== undefined) node.lines = textLines(item.text);\n if (item.shape === 'arrow') this.warnings.add('Mermaid block arrows read as rectangles; their directions were dropped.');\n else if (item.shape !== undefined) node.outline = SHAPE_OUTLINES[item.shape] ?? this.unknownShape(item.shape);\n if (item.span !== undefined && item.span > 1) this.grid.spans[item.id] = item.span;\n }\n\n unknownShape(name: string): Outline {\n this.warnings.list('Mermaid shapes read as rectangles', name);\n return 'rect';\n }\n\n link(link: BlockLink, from: string, to: string): void {\n const colors: Partial<EdgeStyle> = {\n ...(link.stroke === 'dotted' ? { dash: [4, 4] } : {}),\n ...(link.stroke === 'thick' ? { width: 3 } : {}),\n ...(link.start ? { markerStart: 'arrow' as MarkerRef } : {}),\n ...(!link.end ? { markerEnd: null } : {}),\n };\n const label = link.text === undefined ? [] : textLines(link.text).filter((l) => l !== '');\n this.edges.push({ from, to, ...(label.length > 0 ? { label: label.join(' ') } : {}), ...(Object.keys(colors).length > 0 ? { colors } : {}) });\n }\n\n /** Reads `stmts` into `level`, whose items in order are `members`. */\n walk(stmts: readonly BlockStmt[], level: string | null, members: string[]): void {\n let skip = 0;\n for (const s of stmts) {\n if (s.kind === 'items') {\n for (const item of s.items) {\n if (item.kind === 'space') {\n skip += item.n;\n continue;\n }\n const fresh = !this.nodes.has(item.id);\n this.block(item, members);\n if (fresh && skip > 0) this.grid.skips[item.id] = skip;\n skip = 0;\n }\n } else if (s.kind === 'links') {\n for (const end of s.ends) if (!this.groups.has(end.id)) this.block(end, members);\n s.links.forEach((link, k) => this.link(link, s.ends[k]!.id, s.ends[k + 1]!.id));\n } else if (s.kind === 'group') {\n const id = s.id ?? anonymousGroupId(++this.anonymous);\n const inner: string[] = [];\n this.groups.set(id, inner);\n members.push(id);\n if (skip > 0) this.grid.skips[id] = skip;\n skip = 0;\n if (s.span !== undefined && s.span > 1) this.grid.spans[id] = s.span;\n this.walk(s.stmts, id, inner);\n } else if (s.kind === 'columns') {\n if (level === null) this.top = s.n;\n else if (s.n !== undefined) this.grid.columns[level] = s.n;\n } else if (s.kind === 'style') this.styles.statement(s.text);\n else this.warnings.list('Mermaid statements a diagram does not hold were dropped', s.keyword);\n }\n if (skip > 0) this.warnings.add('Mermaid spaces after the last block in a row of blocks were dropped.');\n }\n\n /** The page layout's grid, with only what was given. */\n layout(): PageLayout {\n const { columns, spans, skips } = this.grid;\n const grid: GridOptions = {\n ...(this.top !== undefined ? { columns: this.top } : {}),\n ...(Object.keys(columns).length > 0 ? { groupColumns: columns } : {}),\n ...(Object.keys(spans).length > 0 ? { spans } : {}),\n ...(Object.keys(skips).length > 0 ? { skips } : {}),\n };\n return { name: 'grid', options: { ...BLOCK_GAPS, grid } };\n }\n}\n\n/** Reads a Mermaid block diagram into a one-page document of `notation` `'block'`, laid out by `grid`. Throws, naming\n * the line, on text that is not one. */\nexport function readBlockDiagram(text: string): ImportResult {\n const { source, stmts } = parseBlockDiagram(text);\n const r = new BlockReader();\n r.walk(stmts, null, []);\n const nodes: DataNode[] = [...r.nodes].map(([id, n]) => {\n const colors = r.styles.colorsOf(id);\n return { id, lines: n.lines, outline: n.outline, ...(colors !== undefined ? { colors } : {}) };\n });\n const containers: DataContainer[] = [...r.groups].map(([id, members]) => {\n const colors = r.styles.colorsOf(id);\n return { id, role: 'container', ...(members.length > 0 ? { members } : {}), ...(colors !== undefined ? { colors } : {}) };\n });\n const name = pageNameOf(source, r.warnings);\n const page = graphPage({ ...(name !== undefined ? { name } : {}), nodes, edges: r.edges, containers });\n return { document: { pages: [{ ...page, layout: r.layout(), notation: 'block' }] }, 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, 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';\nimport { styleProps } from '../common/styles';\nimport { mermaidIds, mermaidText } from '../common/text';\n\nconst HEADER: Readonly<Record<LayoutDirection, string>> = { down: 'TD', up: 'BT', right: 'LR', left: 'RL' };\nexport const BRACKETS: Readonly<Record<string, readonly [string, string]>> = {\n rect: ['[', ']'], stadium: ['([', '])'], diamond: ['{', '}'], ellipse: ['((', '))'], hexagon: ['{{', '}}'],\n parallelogram: ['[/', '/]'], trapezoid: ['[/', '\\\\]'], cylinder: ['[(', ')]'], doubleEllipse: ['(((', ')))'], roundRect: ['(', ')'],\n};\n\n/** BPMN's figures as the Mermaid shape nearest each: an event's circle, a gateway's diamond without its marker. */\nconst NEAREST: Readonly<Record<string, string>> = {\n event: 'ellipse', intermediateEvent: 'doubleEllipse', exclusiveGateway: 'diamond', parallelGateway: 'diamond',\n inclusiveGateway: 'diamond', eventGateway: 'diamond', subprocess: 'roundRect',\n};\n\nconst px = (n: number) => `${n}px`;\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 nearest = typeof outline === 'string' ? NEAREST[outline] : undefined;\n if (nearest !== undefined) {\n this.out.warnings.add('Mermaid has no BPMN figures; events were written as circles, gateways as diamonds without their markers, and subprocesses as rounded rectangles.');\n }\n const brackets = typeof outline === 'string' ? BRACKETS[nearest ?? outline] : undefined;\n if (brackets === undefined && typeof outline === 'string') {\n this.out.warnings.add('Mermaid has no bracket shape for some outlines; they were written as rectangles.');\n }\n const [open, close] = brackets ?? BRACKETS.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 if (e.endLabels !== undefined) this.out.warnings.add('Mermaid flowcharts have no labels at a connector\\'s ends; they 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 writeFlowchart(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","/** One graph page as a Mermaid block diagram: its grid layout's columns, spans, and spaces, and containers as groups. */\nimport type { DataEdge, DataNode, GridOptions } from '@weasel-js/diagram';\nimport type { DiagramDocument, ExportResult, WriteOptions } from '../../document';\nimport { edgeStyleIn, graphOut, nodeLines, type Cluster, type GraphOut } from '../../graphWrite';\nimport { titleLines } from '../common/lines';\nimport { styleProps } from '../common/styles';\nimport { mermaidIds, mermaidText } from '../common/text';\nimport { BRACKETS } from '../flowchart/write';\n\nconst ANONYMOUS = /^block-\\d+$/;\n\ntype Item = { node: DataNode } | { cluster: Cluster };\n\nclass BlockWriter {\n readonly lines: string[] = [];\n readonly ids: Map<string, string>;\n readonly grid: GridOptions;\n readonly order: ReadonlyMap<string, number>;\n\n constructor(readonly out: GraphOut) {\n this.ids = mermaidIds([...out.page.data.nodes.map((n) => n.id), ...out.clusterIds]);\n this.grid = out.page.layout?.name === 'grid' ? out.page.layout.options?.grid ?? {} : {};\n this.order = new Map(out.page.data.nodes.map((n, i) => [n.id, i]));\n }\n\n id(id: string): string {\n return this.ids.get(id) ?? id;\n }\n\n /** Where an item stands among its level's: its first node's place in the page. */\n first(item: Item): number {\n if ('node' in item) return this.order.get(item.node.id)!;\n const c = item.cluster;\n return Math.min(Infinity, ...c.nodes.map((id) => this.order.get(id)!), ...c.clusters.map((k) => this.first({ cluster: k })));\n }\n\n span(id: string): string {\n const n = this.grid.spans?.[id];\n return n !== undefined && n > 1 ? `:${n}` : '';\n }\n\n level(nodes: readonly DataNode[], clusters: readonly Cluster[], indent: string): void {\n const items: Item[] = [...nodes.map((node) => ({ node })), ...clusters.map((cluster) => ({ cluster }))];\n items.sort((a, b) => this.first(a) - this.first(b));\n for (const item of items) {\n const id = 'node' in item ? item.node.id : item.cluster.id;\n const skip = this.grid.skips?.[id] ?? 0;\n if (skip > 0) this.lines.push(`${indent}${skip === 1 ? 'space' : `space:${skip}`}`);\n if ('node' in item) this.lines.push(`${indent}${this.block(item.node)}${this.span(id)}`);\n else this.group(item.cluster, indent);\n }\n }\n\n block(node: DataNode): string {\n const text = nodeLines(node, this.out.warnings, 'Mermaid');\n const outline = node.outline ?? 'rect';\n const brackets = typeof outline === 'string' ? BRACKETS[outline] : undefined;\n if (brackets === undefined) this.out.warnings.add('Mermaid has no bracket shape for some outlines; they were written as rectangles.');\n const id = this.id(node.id);\n if (outline === 'rect' && id === node.id && text.length === 1 && text[0] === id) return id;\n const [open, close] = brackets ?? BRACKETS.rect!;\n return `${id}${open}${mermaidText(text)}${close}`;\n }\n\n group(c: Cluster, indent: string): void {\n const named = !ANONYMOUS.test(c.id) || this.span(c.id) !== '';\n this.lines.push(`${indent}block${named ? `:${this.id(c.id)}${this.span(c.id)}` : ''}`);\n const columns = this.grid.groupColumns?.[c.id];\n if (columns !== undefined) this.lines.push(`${indent} columns ${columns}`);\n this.level(c.nodes.map((id) => this.out.byId.get(id)!), c.clusters, `${indent} `);\n this.lines.push(`${indent}end`);\n if (c.label !== undefined) this.out.warnings.add('Mermaid block groups have no titles; container titles were dropped.');\n }\n\n link(e: DataEdge): string {\n const { markerStart, markerEnd, dash, width } = edgeStyleIn(this.out, e);\n const body = dash !== undefined ? '-.-' : (width ?? 0) >= 3 ? '==' : '--';\n const end = markerEnd !== null && markerEnd !== undefined;\n const start = markerStart !== null && markerStart !== undefined;\n const tail = end ? '>' : body === '--' ? '-' : body === '==' ? '=' : '';\n const from = this.id(e.from);\n const to = this.id(e.to);\n if (e.label !== undefined && e.label !== '') {\n const open = body === '-.-' ? '-.' : body;\n return ` ${from} ${start ? '<' : ''}${open} ${mermaidText([e.label])} ${body === '-.-' ? '.-' : body}${end ? '>' : ''} ${to}`;\n }\n return ` ${from} ${start ? '<' : ''}${body}${tail} ${to}`;\n }\n\n styles(): void {\n for (const n of this.out.page.data.nodes) {\n const props = n.colors !== undefined ? styleProps(n.colors) : '';\n if (props !== '') this.lines.push(` style ${this.id(n.id)} ${props}`);\n }\n for (const c of this.out.page.data.containers ?? []) {\n const props = c.colors !== undefined ? styleProps(c.colors) : '';\n if (props !== '') this.lines.push(` style ${this.id(c.id)} ${props}`);\n }\n }\n}\n\n/** Writes the page `opts.page` names, else the first, as a Mermaid block diagram. */\nexport function writeBlockDiagram(doc: DiagramDocument, opts?: WriteOptions): ExportResult {\n const out = graphOut(doc, opts, 'Mermaid');\n if (out === null) return { text: 'block-beta\\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 if (out.edges.some((e) => e.endLabels !== undefined)) out.warnings.add('Mermaid block diagrams have no labels at a connector\\'s ends; they were dropped.');\n const w = new BlockWriter(out);\n w.lines.push(...titleLines(out.page.name), 'block-beta');\n if (w.grid.columns !== undefined) w.lines.push(` columns ${w.grid.columns}`);\n w.level(out.nodes, out.clusters, ' ');\n for (const e of out.edges) w.lines.push(w.link(e));\n w.styles();\n return { text: `${w.lines.join('\\n')}\\n`, warnings: out.warnings.all() };\n}\n","/** A Mermaid C4 diagram's grammar: macro calls, boundaries opened by `{`, and a title, each with its line. */\nimport { lineError } from '../../lineError';\nimport { statementsOf, type MermaidSource } from '../common/lines';\n\n/** A macro's arguments: positional ones in order, and `$name=value` ones by name. */\nexport interface C4Args {\n positional: string[];\n named: Record<string, string>;\n}\n\nexport type C4Stmt =\n | { kind: 'call'; macro: string; args: C4Args; body?: C4Stmt[]; line: number }\n | { kind: 'title'; text: string; line: number };\n\n/** A whole C4 diagram, and the header naming which of the five it is. */\nexport interface C4Diagram {\n source: MermaidSource;\n header: C4Header;\n stmts: C4Stmt[];\n}\n\n/** The five C4 headers. */\nexport const C4_HEADERS = ['C4Context', 'C4Container', 'C4Component', 'C4Dynamic', 'C4Deployment'] as const;\nexport type C4Header = (typeof C4_HEADERS)[number];\n\n/** Splits a macro's arguments on commas outside quotes, each a quoted string, a bare word, or `$name=value`. */\nexport function argsOf(text: string): C4Args {\n const parts: string[] = [];\n let at = '';\n let quoted = false;\n for (const c of text) {\n if (c === '\"') quoted = !quoted;\n if (c === ',' && !quoted) {\n parts.push(at);\n at = '';\n } else at += c;\n }\n if (at.trim() !== '' || parts.length > 0) parts.push(at);\n const value = (v: string) => (/^\".*\"$/s.test(v) ? v.slice(1, -1) : v);\n const args: C4Args = { positional: [], named: {} };\n for (const p of parts.map((s) => s.trim())) {\n const named = /^\\$(\\w+)\\s*=\\s*(.*)$/s.exec(p);\n if (named !== null) args.named[named[1]!] = value(named[2]!.trim());\n else args.positional.push(value(p));\n }\n return args;\n}\n\nconst CALL = /^(\\w+)\\s*\\((.*)\\)\\s*(\\{)?$/;\n\n/** Statements up to the `}` closing a boundary opened on line `opened`, or to the end when `opened` is null. */\nfunction block(lines: MermaidSource['body'], at: { i: number }, opened: number | null): C4Stmt[] {\n const out: C4Stmt[] = [];\n while (at.i < lines.length) {\n const { text, line } = lines[at.i++]!;\n if (text === '}') {\n if (opened === null) throw lineError('Mermaid', line, '\"}\" closes no boundary');\n return out;\n }\n const title = /^title\\s+(.*)$/.exec(text);\n if (title !== null) {\n out.push({ kind: 'title', text: title[1]!.trim(), line });\n continue;\n }\n const call = CALL.exec(text);\n if (call === null) throw lineError('Mermaid', line, `cannot read \"${text}\" as a C4 statement`);\n const args = argsOf(call[2]!);\n out.push({ kind: 'call', macro: call[1]!, args, line, ...(call[3] !== undefined ? { body: block(lines, at, line) } : {}) });\n }\n if (opened !== null) throw lineError('Mermaid', opened, 'a boundary opened here is never closed');\n return out;\n}\n\n/** Parses a Mermaid C4 diagram. Throws, naming the line, on text that is not one. */\nexport function parseC4(text: string): C4Diagram {\n const source = statementsOf(text);\n const header = C4_HEADERS.find((h) => h === source.header.text);\n if (header === undefined) throw lineError('Mermaid', source.header.line, `expected a C4 header, found \"${source.header.text}\"`);\n return { source, header, stmts: block(source.body, { i: 0 }, null) };\n}\n","/**\n * C4's element kinds, as the macro naming each and the shape it reads into:\n * its outline, theme role, and the `<<kind>>` row that names it again on write.\n */\nimport type { Outline, Row, RowTextStyle } from '@weasel-js/diagram';\nimport { wrapped } from '../common/text';\n\n/** An element: what it is, whether it is a store or a queue of that, and whether it is outside the system. */\nexport interface C4Kind {\n base: 'person' | 'system' | 'container' | 'component';\n variant?: 'db' | 'queue';\n external: boolean;\n}\n\n/** The element macros: `Person`, `SystemDb_Ext`, `ContainerQueue`, … */\nconst ELEMENT = /^(Person|System|Container|Component)(Db|Queue)?(_Ext)?$/;\n\n/** The kind an element macro names, or null for a macro that is not an element. */\nexport function kindOfMacro(macro: string): C4Kind | null {\n const m = ELEMENT.exec(macro);\n if (m === null || (m[1] === 'Person' && m[2] !== undefined)) return null;\n return {\n base: m[1]!.toLowerCase() as C4Kind['base'], external: m[3] !== undefined,\n ...(m[2] !== undefined ? { variant: m[2].toLowerCase() as 'db' | 'queue' } : {}),\n };\n}\n\n/** The macro naming `kind`. */\nexport function macroOf(kind: C4Kind): string {\n const cap = (s: string) => s[0]!.toUpperCase() + s.slice(1);\n return `${cap(kind.base)}${kind.variant !== undefined ? cap(kind.variant) : ''}${kind.external ? '_Ext' : ''}`;\n}\n\n/** Whether an element of `kind` carries a technology: containers and components do. */\nexport const hasTechnology = (kind: C4Kind): boolean => kind.base === 'container' || kind.base === 'component';\n\n/** The text of the row naming `kind`: `external_system_db`. */\nexport const stereotypeOf = (kind: C4Kind): string =>\n `${kind.external ? 'external_' : ''}${kind.base}${kind.variant !== undefined ? `_${kind.variant}` : ''}`;\n\n/** The kind a `<<…>>` row names, or null. */\nexport function kindOfStereotype(text: string): C4Kind | null {\n const m = /^<<(external_)?(person|system|container|component)(?:_(db|queue))?>>$/.exec(text);\n if (m === null) return null;\n return { base: m[2] as C4Kind['base'], external: m[1] !== undefined, ...(m[3] !== undefined ? { variant: m[3] as 'db' | 'queue' } : {}) };\n}\n\n/** The outline an element of `kind` is drawn in. */\nexport const outlineOf = (kind: C4Kind): Outline =>\n (kind.base === 'person' ? 'person' : kind.variant === 'db' ? 'cylinder' : kind.variant === 'queue' ? 'queue' : 'roundRect');\n\n/** The theme role an element is drawn in: `muted` outside the system, else `accent`. */\nexport const roleOf = (kind: C4Kind): string => (kind.external ? 'muted' : 'accent');\n\n/** An element's box is at least this wide, so a description wraps rather than stretching it. */\nexport const ELEMENT_WIDTH = 200;\nconst SMALL: RowTextStyle = { fontSize: 10 };\n\n/** An element's rows: its `<<kind>>`, its name in bold, its `[technology]`, and its description, wrapped. */\nexport function elementRows(kind: C4Kind, name: string, technology: string | undefined, description: string | undefined): Row[] {\n return [\n { kind: 'label', text: `<<${stereotypeOf(kind)}>>`, style: SMALL },\n { kind: 'label', text: name, style: { bold: true } },\n ...(technology !== undefined && technology !== '' ? [{ kind: 'label' as const, text: `[${technology}]`, style: SMALL }] : []),\n ...wrapped(description ?? '').map((text): Row => ({ kind: 'label', text })),\n ];\n}\n\n/** An element's parts again from its rows; a box with no `<<kind>>` row is a system, or a person, store, or queue by its outline. */\nexport function elementParts(lines: readonly string[], outline: Outline | undefined, role: string | undefined) {\n const named = kindOfStereotype(lines[0] ?? '');\n const rest = named !== null ? lines.slice(1) : lines;\n const kind: C4Kind = named ?? {\n base: outline === 'person' || outline === 'actor' ? 'person' : 'system', external: role === 'muted',\n ...(outline === 'cylinder' ? { variant: 'db' as const } : outline === 'queue' ? { variant: 'queue' as const } : {}),\n };\n const tech = /^\\[(.*)\\]$/.exec(rest[1] ?? '');\n return {\n kind, name: rest[0] ?? '', technology: tech?.[1],\n description: rest.slice(tech !== null ? 2 : 1).join(' '),\n };\n}\n","/**\n * A Mermaid C4 diagram as a one-page document: elements as boxes of their\n * kind's outline and role, boundaries and deployment nodes as containers, and\n * relationships as edges labeled with their technology.\n */\nimport type { MarkerRef } from '@weasel-js/core';\nimport type { DataContainer, DataEdge, DataNode, EdgeStyle, NodeStyle } from '@weasel-js/diagram';\nimport type { ImportResult } from '../../document';\nimport { Warnings, decodeEntities, graphPage } from '../../graphRead';\nimport { lineError } from '../../lineError';\nimport { pageNameOf } from '../common/lines';\nimport { ELEMENT_WIDTH, elementRows, hasTechnology, kindOfMacro, outlineOf, roleOf } from './kinds';\nimport { parseC4, type C4Args, type C4Header, type C4Stmt } from './parse';\n\n/** Each boundary macro, as the type its container's label names after its title. */\nexport const BOUNDARY_TYPES: Readonly<Record<string, string | null>> = {\n Enterprise_Boundary: 'enterprise', System_Boundary: 'system', Container_Boundary: 'container', Boundary: null,\n Deployment_Node: null, Node: null, Node_L: null, Node_R: null,\n};\n\n/** Each relationship macro's ports, from end then to end, by the way it says the target lies. */\nconst REL_PORTS: Readonly<Record<string, readonly [string, string] | undefined>> = {\n U: ['n', 's'], Up: ['n', 's'], D: ['s', 'n'], Down: ['s', 'n'], L: ['w', 'e'], Left: ['w', 'e'], R: ['e', 'w'], Right: ['e', 'w'],\n};\nconst REL = /^(Rel|BiRel|RelIndex)(?:_(U|Up|D|Down|L|Left|R|Right|Back))?$/;\n\n/** The notation each header reads into. */\nexport const C4_NOTATIONS: Readonly<Record<C4Header, string>> = {\n C4Context: 'c4-context', C4Container: 'c4-container', C4Component: 'c4-component', C4Dynamic: 'c4-dynamic', C4Deployment: 'c4-deployment',\n};\n\nconst text = (s: string | undefined): string | undefined => (s === undefined || s === '' ? undefined : decodeEntities(s, true));\n\nclass C4Reader {\n readonly warnings = new Warnings();\n readonly nodes = new Map<string, DataNode>();\n readonly containers: DataContainer[] = [];\n readonly edges: DataEdge[] = [];\n title: string | undefined;\n\n /** Warns of what a macro's call gives that a diagram does not hold. */\n extras(args: C4Args, kept: number): void {\n if (args.positional.length > kept) this.warnings.add('Mermaid C4 sprites, tags, links, and descriptions a diagram does not hold were dropped.');\n for (const key of Object.keys(args.named)) this.warnings.list('Mermaid C4 arguments a diagram does not hold were dropped', `$${key}`);\n }\n\n walk(stmts: readonly C4Stmt[], members: string[]): void {\n for (const s of stmts) {\n if (s.kind === 'title') {\n this.title = s.text;\n continue;\n }\n const [alias, ...rest] = s.args.positional;\n const kind = kindOfMacro(s.macro);\n if (kind !== null) {\n if (alias === undefined) throw lineError('Mermaid', s.line, `${s.macro} needs an alias`);\n const tech = hasTechnology(kind) ? rest[1] : undefined;\n const description = hasTechnology(kind) ? rest[2] : rest[1];\n this.extras(s.args, hasTechnology(kind) ? 4 : 3);\n this.nodes.set(alias, {\n id: alias, rows: elementRows(kind, text(rest[0]) ?? alias, text(tech), text(description)),\n outline: outlineOf(kind), style: roleOf(kind), width: ELEMENT_WIDTH,\n });\n members.push(alias);\n } else if (s.macro in BOUNDARY_TYPES) this.boundary(s, members);\n else if (REL.test(s.macro)) this.rel(s);\n else if (s.macro === 'UpdateElementStyle') this.elementStyle(s);\n else if (s.macro === 'UpdateRelStyle') this.relStyle(s);\n else this.warnings.list('Mermaid C4 statements a diagram does not hold were dropped', s.macro);\n if (s.body !== undefined && !(s.macro in BOUNDARY_TYPES)) throw lineError('Mermaid', s.line, `${s.macro} opens no boundary`);\n }\n }\n\n boundary(s: Extract<C4Stmt, { kind: 'call' }>, members: string[]): void {\n const [alias, title, type] = s.args.positional;\n if (alias === undefined) throw lineError('Mermaid', s.line, `${s.macro} needs an alias`);\n const fixed = BOUNDARY_TYPES[s.macro];\n if (s.macro === 'Node_L' || s.macro === 'Node_R') this.warnings.add('Mermaid C4 deployment node sides were dropped.');\n this.extras(s.args, fixed !== null ? 2 : 3);\n const kindText = fixed ?? text(type);\n const label = `${text(title) ?? alias}${kindText !== undefined ? ` [${kindText}]` : ''}`;\n const inner: string[] = [];\n this.containers.push({ id: alias, role: 'container', label });\n members.push(alias);\n this.walk(s.body ?? [], inner);\n const at = this.containers.findIndex((c) => c.id === alias);\n if (inner.length > 0) this.containers[at] = { ...this.containers[at]!, members: inner };\n }\n\n rel(s: Extract<C4Stmt, { kind: 'call' }>): void {\n const [, macro, way] = REL.exec(s.macro)! as unknown as [string, string, string | undefined];\n const args = macro === 'RelIndex' ? s.args.positional.slice(1) : s.args.positional;\n if (macro === 'RelIndex') this.warnings.add('Mermaid C4 relationship indexes were dropped.');\n const [from, to, label, tech] = args;\n if (from === undefined || to === undefined) throw lineError('Mermaid', s.line, `${s.macro} needs two ends`);\n this.extras({ positional: args, named: s.args.named }, 4);\n const ports = way !== undefined ? REL_PORTS[way] : undefined;\n const back = way === 'Back';\n const colors: Partial<EdgeStyle> = {\n ...(macro === 'BiRel' || back ? { markerStart: 'arrow' as MarkerRef } : {}),\n ...(back ? { markerEnd: null } : {}),\n };\n const words = [text(label), text(tech) !== undefined ? `[${text(tech)}]` : undefined].filter((w) => w !== undefined);\n this.edges.push({\n from, to,\n ...(ports !== undefined ? { fromPort: ports[0], toPort: ports[1] } : {}),\n ...(words.length > 0 ? { label: words.join(' ') } : {}),\n ...(Object.keys(colors).length > 0 ? { colors } : {}),\n });\n }\n\n elementStyle(s: Extract<C4Stmt, { kind: 'call' }>): void {\n const [alias] = s.args.positional;\n const { bgColor, fontColor, borderColor, ...rest } = s.args.named;\n for (const key of Object.keys(rest)) this.warnings.list('Mermaid C4 arguments a diagram does not hold were dropped', `$${key}`);\n const colors: Partial<NodeStyle> = {\n ...(bgColor !== undefined ? { fill: bgColor } : {}), ...(borderColor !== undefined ? { stroke: borderColor } : {}),\n ...(fontColor !== undefined ? { text: fontColor } : {}),\n };\n const node = this.nodes.get(alias ?? '');\n const box = this.containers.findIndex((c) => c.id === alias);\n if (node !== undefined) this.nodes.set(node.id, { ...node, colors: { ...node.colors, ...colors } });\n else if (box >= 0) this.containers[box] = { ...this.containers[box]!, colors: { ...this.containers[box]!.colors, ...colors } };\n else throw lineError('Mermaid', s.line, `no element or boundary is named \"${alias ?? ''}\"`);\n }\n\n relStyle(s: Extract<C4Stmt, { kind: 'call' }>): void {\n const [from, to] = s.args.positional;\n const { textColor, lineColor, ...rest } = s.args.named;\n for (const key of Object.keys(rest)) this.warnings.list('Mermaid C4 arguments a diagram does not hold were dropped', `$${key}`);\n const colors: Partial<EdgeStyle> = { ...(lineColor !== undefined ? { stroke: lineColor } : {}), ...(textColor !== undefined ? { label: textColor } : {}) };\n for (const [i, e] of this.edges.entries()) {\n if (e.from === from && e.to === to) this.edges[i] = { ...e, colors: { ...e.colors, ...colors } };\n }\n }\n}\n\n/** Reads a Mermaid C4 diagram into a one-page document whose `notation` names its header (`'c4-context'`, …). Throws,\n * naming the line, on text that is not one. */\nexport function readC4(source: string): ImportResult {\n const { source: src, header, stmts } = parseC4(source);\n const r = new C4Reader();\n r.walk(stmts, []);\n const known = (id: string) => r.nodes.has(id) || r.containers.some((c) => c.id === id);\n const edges = r.edges.filter((e) => known(e.from) && known(e.to));\n if (edges.length < r.edges.length) r.warnings.add('Mermaid C4 relationships to elements never declared were dropped.');\n const named = pageNameOf(src, r.warnings);\n const name = r.title ?? named;\n const page = graphPage({ ...(name !== undefined ? { name } : {}), nodes: [...r.nodes.values()], edges, containers: r.containers });\n return { document: { pages: [{ ...page, notation: C4_NOTATIONS[header] }] }, warnings: r.warnings.all() };\n}\n","/** One graph page as a Mermaid C4 diagram: shapes as elements by their `<<kind>>` row, containers as boundaries. */\nimport type { DataEdge, DataNode, EdgeStyle, NodeStyle } from '@weasel-js/diagram';\nimport type { DiagramDocument, ExportResult, WriteOptions } from '../../document';\nimport { edgeStyleIn, graphOut, nodeLines, type Cluster, type GraphOut } from '../../graphWrite';\nimport { mermaidIds } from '../common/text';\nimport { elementParts, hasTechnology, macroOf } from './kinds';\nimport { C4_HEADERS } from './parse';\nimport { BOUNDARY_TYPES, C4_NOTATIONS } from './read';\n\nconst BY_TYPE = new Map(Object.entries(BOUNDARY_TYPES).filter(([, t]) => t !== null).map(([macro, t]) => [t!, macro]));\nconst REL_WAYS: Readonly<Record<string, string>> = { 'n s': 'U', 's n': 'D', 'w e': 'L', 'e w': 'R' };\n\n/** An argument in quotes, its own quotes made single. */\nconst quoted = (s: string): string => `\"${s.replace(/\"/g, \"'\")}\"`;\n\n/** Positional arguments, the first `bare` as ids and the rest quoted, trailing empty ones left off. */\nfunction args(list: readonly (string | undefined)[], bare = 1): string {\n const out = list.map((s) => s ?? '');\n while (out.length > bare + 1 && out.at(-1) === '') out.pop();\n return out.map((s, i) => (i < bare ? s : quoted(s))).join(', ');\n}\n\nclass C4Writer {\n readonly lines: string[] = [];\n readonly ids: Map<string, string>;\n readonly styles: string[] = [];\n\n constructor(readonly out: GraphOut, readonly deployment: boolean) {\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 element(n: DataNode, indent: string): void {\n const { kind, name, technology, description } = elementParts(nodeLines(n, this.out.warnings, 'Mermaid'), n.outline, n.style);\n if (technology !== undefined && !hasTechnology(kind)) this.out.warnings.add('Mermaid C4 people and systems have no technology; it was written into the description.');\n const tech = hasTechnology(kind) ? [technology] : [];\n const desc = !hasTechnology(kind) && technology !== undefined ? `[${technology}] ${description}`.trim() : description;\n this.lines.push(`${indent}${macroOf(kind)}(${args([this.id(n.id), name, ...tech, desc])})`);\n this.colors(n.id, n.colors);\n }\n\n colors(id: string, colors: Partial<NodeStyle> | undefined): void {\n const set = [\n colors?.fill !== undefined ? `$bgColor=${quoted(colors.fill)}` : null,\n colors?.text !== undefined ? `$fontColor=${quoted(colors.text)}` : null,\n colors?.stroke !== undefined ? `$borderColor=${quoted(colors.stroke)}` : null,\n ].filter((s) => s !== null);\n if (set.length > 0) this.styles.push(` UpdateElementStyle(${this.id(id)}, ${set.join(', ')})`);\n }\n\n boundary(c: Cluster, indent: string): void {\n const m = /^(.*?)(?: \\[([^\\]]*)\\])?$/s.exec(c.label ?? c.id)!;\n const [title, type] = [m[1]!, m[2]];\n const fixed = type !== undefined ? BY_TYPE.get(type) : undefined;\n const macro = fixed ?? (this.deployment ? 'Deployment_Node' : 'Boundary');\n this.lines.push(`${indent}${macro}(${args([this.id(c.id), title, ...(fixed === undefined ? [type] : [])])}) {`);\n for (const id of c.nodes) this.element(this.out.byId.get(id)!, `${indent} `);\n for (const k of c.clusters) this.boundary(k, `${indent} `);\n this.lines.push(`${indent}}`);\n const own = this.out.page.data.containers?.find((d) => d.id === c.id)?.colors;\n this.colors(c.id, own);\n }\n\n rel(e: DataEdge): void {\n const style = edgeStyleIn(this.out, e);\n const start = style.markerStart !== null && style.markerStart !== undefined;\n const end = style.markerEnd !== null && style.markerEnd !== undefined;\n const way = REL_WAYS[`${e.fromPort ?? ''} ${e.toPort ?? ''}`];\n const macro = start && !end ? 'Rel_Back' : start ? 'BiRel' : way !== undefined ? `Rel_${way}` : 'Rel';\n if (!start && !end) this.out.warnings.add('Mermaid C4 relationships always have a head; unmarked edges were written with one.');\n if (start && way !== undefined) this.out.warnings.add('Mermaid C4 has no direction for a two-way or backward relationship; its ports were dropped.');\n const m = /^(.*?)(?: \\[([^\\]]*)\\])?$/s.exec(e.label ?? '')!;\n this.lines.push(` ${macro}(${args([this.id(e.from), this.id(e.to), m[1]!, m[2]], 2)})`);\n this.relColors(e, e.colors);\n }\n\n relColors(e: DataEdge, colors: Partial<EdgeStyle> | undefined): void {\n const set = [\n colors?.label !== undefined ? `$textColor=${quoted(colors.label)}` : null,\n colors?.stroke !== undefined ? `$lineColor=${quoted(colors.stroke)}` : null,\n ].filter((s) => s !== null);\n if (set.length > 0) this.styles.push(` UpdateRelStyle(${this.id(e.from)}, ${this.id(e.to)}, ${set.join(', ')})`);\n }\n}\n\n/** Writes the page `opts.page` names, else the first, as a Mermaid C4 diagram of the kind its `notation` names. */\nexport function writeC4(doc: DiagramDocument, opts?: WriteOptions): ExportResult {\n const out = graphOut(doc, opts, 'Mermaid');\n if (out === null) return { text: 'C4Context\\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 header = C4_HEADERS.find((h) => C4_NOTATIONS[h] === out.page.notation) ?? 'C4Context';\n const w = new C4Writer(out, header === 'C4Deployment');\n w.lines.push(header);\n if (out.page.name !== undefined) w.lines.push(` title ${out.page.name.replace(/\\n/g, ' ')}`);\n for (const n of out.nodes) w.element(n, ' ');\n for (const c of out.clusters) w.boundary(c, ' ');\n for (const e of out.edges) w.rel(e);\n w.lines.push(...w.styles);\n return { text: `${w.lines.join('\\n')}\\n`, warnings: out.warnings.all() };\n}\n","/** A Mermaid class diagram's grammar, read to statements with each one's line. */\nimport { lineError } from '../../lineError';\nimport { statementsOf, type MermaidSource, type Statement } from '../common/lines';\n\n/** A relation's end: `<|` or `|>` inheritance, `*` composition, `o` aggregation, `<` or `>` an arrow. */\nexport type ClassHead = 'triangle' | 'diamond' | 'hollow-diamond' | 'arrow';\n\n/** One member row: an attribute, or a method when it has parentheses. */\nexport interface ClassMember {\n text: string;\n method: boolean;\n}\n\nexport type ClassStmt =\n | { kind: 'class'; id: string; label?: string; generic?: string; members: ClassMember[]; annotations: string[]; cssClass?: string; line: number }\n | { kind: 'member'; id: string; member: ClassMember; line: number }\n | { kind: 'annotation'; id: string; name: string; line: number }\n | {\n kind: 'relation'; from: string; to: string; start?: ClassHead; end?: ClassHead; dashed: boolean;\n fromCard?: string; toCard?: string; label?: string; line: number;\n }\n | { kind: 'namespace'; id: string; stmts: ClassStmt[]; line: number }\n | { kind: 'note'; for?: string; text: string; line: number }\n | { kind: 'cssClass'; ids: string[]; name: string; line: number }\n | { kind: 'direction'; value: string; line: number }\n | { kind: 'style'; text: string; line: number }\n | { kind: 'other'; keyword: string; line: number };\n\n/** A whole class diagram. */\nexport interface ClassDiagram {\n source: MermaidSource;\n stmts: ClassStmt[];\n}\n\nconst ID = String.raw`([\\w-]+)(?:~[^~\\s]*~)?`;\nconst CLASS = /^class\\s+([\\w-]+)(?:~([^~]*)~)?(?:\\s*\\[\\s*\"([^\"]*)\"\\s*\\])?(?::::([\\w-]+))?\\s*(\\{.*)?$/;\nconst RELATION = new RegExp(\n `^${ID}(?:\\\\s+\"([^\"]*)\")?\\\\s*(<\\\\||\\\\*|o|<)?(--|\\\\.\\\\.)(\\\\|>|\\\\*|o|>)?\\\\s*(?:\"([^\"]*)\"\\\\s*)?${ID}(?:\\\\s*:\\\\s*(.*))?$`,\n);\nconst HEADS: Readonly<Record<string, ClassHead>> = { '<|': 'triangle', '|>': 'triangle', '*': 'diamond', o: 'hollow-diamond', '<': 'arrow', '>': 'arrow' };\nconst MEMBER = /^([\\w-]+)\\s*:\\s*(.+)$/;\nconst NOTE = /^note\\s+(?:for\\s+([\\w-]+)\\s+)?\"(.*)\"$/;\n\nconst memberOf = (text: string): ClassMember => ({ text, method: text.includes('(') });\n\nfunction relationOf(m: RegExpExecArray, line: number): ClassStmt {\n const [, from, fromCard, start, body, end, toCard, to, label] = m as unknown as (string | undefined)[];\n return {\n kind: 'relation', from: from!, to: to!, dashed: body === '..', line,\n ...(start !== undefined ? { start: HEADS[start]! } : {}),\n ...(end !== undefined ? { end: HEADS[end]! } : {}),\n ...(fromCard !== undefined ? { fromCard } : {}),\n ...(toCard !== undefined ? { toCard } : {}),\n ...(label !== undefined && label.trim() !== '' ? { label: label.trim() } : {}),\n };\n}\n\nclass ClassParser {\n i = 0;\n\n constructor(readonly lines: readonly Statement[]) {}\n\n /** Statements up to the `}` closing a block opened on line `opened`, or to the end when `opened` is null. */\n block(opened: number | null): ClassStmt[] {\n const out: ClassStmt[] = [];\n while (this.i < this.lines.length) {\n const s = this.lines[this.i++]!;\n if (s.text === '}') {\n if (opened === null) throw lineError('Mermaid', s.line, '\"}\" closes no namespace');\n return out;\n }\n out.push(this.stmt(s));\n }\n if (opened !== null) throw lineError('Mermaid', opened, 'a block opened here is never closed');\n return out;\n }\n\n stmt({ text, line }: Statement): ClassStmt {\n const cls = CLASS.exec(text);\n if (cls !== null) return this.classDecl(cls, line);\n const ns = /^namespace\\s+([\\w.-]+)\\s*\\{$/.exec(text);\n if (ns !== null) return { kind: 'namespace', id: ns[1]!, stmts: this.block(line), line };\n const rel = RELATION.exec(text);\n if (rel !== null) return relationOf(rel, line);\n const ann = /^<<\\s*(.+?)\\s*>>\\s*([\\w-]+)$/.exec(text);\n if (ann !== null) return { kind: 'annotation', id: ann[2]!, name: ann[1]!, line };\n const note = NOTE.exec(text);\n if (note !== null) return { kind: 'note', ...(note[1] !== undefined ? { for: note[1] } : {}), text: note[2]!, line };\n const css = /^cssClass\\s+\"([^\"]+)\"\\s+([\\w-]+)$/.exec(text);\n if (css !== null) return { kind: 'cssClass', ids: css[1]!.split(',').map((s) => s.trim()), name: css[2]!, line };\n const dir = /^direction\\s+(TB|TD|BT|LR|RL)$/.exec(text);\n if (dir !== null) return { kind: 'direction', value: dir[1]!, line };\n if (/^(classDef|style)\\s/.test(text)) return { kind: 'style', text, line };\n const member = MEMBER.exec(text);\n if (member !== null) return { kind: 'member', id: member[1]!, member: memberOf(member[2]!.trim()), line };\n const keyword = /^(click|link|callback)\\b/.exec(text);\n if (keyword !== null) return { kind: 'other', keyword: keyword[1]!, line };\n throw lineError('Mermaid', line, `cannot read \"${text}\" as a class diagram statement`);\n }\n\n classDecl(m: RegExpExecArray, line: number): ClassStmt {\n const [, id, generic, label, cssClass, open] = m as unknown as (string | undefined)[];\n const members: ClassMember[] = [];\n const annotations: string[] = [];\n const take = (body: string) => {\n const ann = /^<<\\s*(.+?)\\s*>>$/.exec(body);\n if (ann !== null) annotations.push(ann[1]!);\n else if (body !== '') members.push(memberOf(body));\n };\n if (open !== undefined) {\n const inline = open.slice(1).trim();\n if (inline.endsWith('}')) take(inline.slice(0, -1).trim());\n else {\n if (inline !== '') take(inline);\n for (;;) {\n const s = this.lines[this.i++];\n if (s === undefined) throw lineError('Mermaid', line, `class ${id} is never closed`);\n if (s.text === '}') break;\n take(s.text);\n }\n }\n }\n return {\n kind: 'class', id: id!, members, annotations, line,\n ...(generic !== undefined ? { generic } : {}),\n ...(label !== undefined ? { label } : {}),\n ...(cssClass !== undefined ? { cssClass } : {}),\n };\n }\n}\n\n/** Parses a Mermaid class diagram. Throws, naming the line, on text that is not one. */\nexport function parseClassDiagram(text: string): ClassDiagram {\n const source = statementsOf(text);\n if (!/^classDiagram(-v2)?$/.test(source.header.text)) {\n throw lineError('Mermaid', source.header.line, `expected a classDiagram header, found \"${source.header.text}\"`);\n }\n return { source, stmts: new ClassParser(source.body).block(null) };\n}\n","/**\n * A Mermaid class diagram as a one-page document: each class a box of a name\n * row, a divider, attribute rows, a divider, and method rows; namespaces as\n * containers; notes as `note` shapes; relations as edges with UML ends.\n */\nimport type { MarkerRef } from '@weasel-js/core';\nimport type { DataContainer, DataEdge, DataNode, EdgeStyle, LayoutDirection, Row } from '@weasel-js/diagram';\nimport type { ImportResult } from '../../document';\nimport { Membership, Warnings, decodeEntities, graphPage } from '../../graphRead';\nimport { pageNameOf } from '../common/lines';\nimport { StyleSheet } from '../common/styles';\nimport { parseClassDiagram, type ClassHead, type ClassMember, type ClassStmt } from './parse';\n\nexport const DIRECTIONS: Readonly<Record<string, LayoutDirection>> = { TB: 'down', TD: 'down', BT: 'up', LR: 'right', RL: 'left' };\n\n/** Each end a relation draws, by its head and whether its line is dashed. */\nexport function headMarker(head: ClassHead | undefined, dashed: boolean): MarkerRef | null {\n if (head === undefined) return null;\n if (head === 'triangle') return 'triangle-hollow';\n if (head === 'diamond') return 'diamond';\n if (head === 'hollow-diamond') return 'diamond-hollow';\n return dashed ? 'arrow-open' : 'arrow';\n}\n\ninterface ClassDraft { label?: string; generic?: string; annotations: string[]; members: ClassMember[] }\n\nclass ClassReader {\n readonly warnings = new Warnings();\n readonly styles = new StyleSheet(this.warnings);\n readonly membership = new Membership(this.warnings, 'Mermaid');\n readonly classes = new Map<string, ClassDraft>();\n readonly notes: DataNode[] = [];\n readonly edges: DataEdge[] = [];\n readonly noteEdges: DataEdge[] = [];\n readonly namespaces: string[] = [];\n direction: string | undefined;\n\n draft(id: string, ns: string | null = null): ClassDraft {\n let d = this.classes.get(id);\n if (d === undefined) {\n d = { annotations: [], members: [] };\n this.classes.set(id, d);\n }\n this.membership.place(id, ns);\n return d;\n }\n\n walk(stmts: readonly ClassStmt[], ns: string | null): void {\n for (const s of stmts) {\n if (s.kind === 'class') {\n const d = this.draft(s.id, ns);\n if (s.label !== undefined) d.label = decodeEntities(s.label, true);\n if (s.generic !== undefined) d.generic = s.generic;\n d.annotations.push(...s.annotations);\n d.members.push(...s.members);\n if (s.cssClass !== undefined) this.styles.assign(s.id, s.cssClass);\n } else if (s.kind === 'member') this.draft(s.id).members.push(s.member);\n else if (s.kind === 'annotation') this.draft(s.id).annotations.push(s.name);\n else if (s.kind === 'relation') this.relation(s);\n else if (s.kind === 'namespace') {\n this.membership.openCluster(s.id, ns);\n if (!this.namespaces.includes(s.id)) this.namespaces.push(s.id);\n this.walk(s.stmts, s.id);\n } else if (s.kind === 'note') this.note(s.text, s.for);\n else if (s.kind === 'cssClass') for (const id of s.ids) this.styles.assign(id, s.name);\n else if (s.kind === 'direction') this.direction = s.value;\n else if (s.kind === 'style') this.styles.statement(s.text, false);\n else this.warnings.list('Mermaid statements a diagram does not hold were dropped', s.keyword);\n }\n }\n\n relation(s: Extract<ClassStmt, { kind: 'relation' }>): void {\n this.draft(s.from);\n this.draft(s.to);\n const start = headMarker(s.start, s.dashed);\n const end = headMarker(s.end, s.dashed);\n const colors: Partial<EdgeStyle> = {\n ...(s.dashed ? { dash: [4, 4] } : {}),\n ...(start !== null ? { markerStart: start } : {}),\n ...(end !== 'arrow' ? { markerEnd: end } : {}),\n };\n const card = (c: string) => decodeEntities(c, true);\n const endLabels = { ...(s.fromCard !== undefined ? { from: card(s.fromCard) } : {}), ...(s.toCard !== undefined ? { to: card(s.toCard) } : {}) };\n this.edges.push({\n from: s.from, to: s.to,\n ...(s.label !== undefined ? { label: s.label } : {}),\n ...(Object.keys(endLabels).length > 0 ? { endLabels } : {}),\n ...(Object.keys(colors).length > 0 ? { colors } : {}),\n });\n }\n\n note(text: string, target: string | undefined): void {\n const id = `note-${this.notes.length + 1}`;\n this.notes.push({ id, outline: 'note', lines: decodeEntities(text, true).split('\\\\n') });\n if (target === undefined) return;\n this.draft(target);\n this.noteEdges.push({ from: id, to: target, colors: { dash: [4, 4], markerEnd: null } });\n }\n}\n\n/** A class's rows: its annotations and name, a divider, its attributes, a divider, its methods. */\nexport function classRows(id: string, d: ClassDraft): Row[] {\n const label = (text: string): Row => ({ kind: 'label', text });\n const name = `${d.label ?? id}${d.generic !== undefined ? `<${d.generic}>` : ''}`;\n return [\n ...d.annotations.map((a) => label(`<<${a}>>`)), label(name), { kind: 'divider' },\n ...d.members.filter((m) => !m.method).map((m) => label(m.text)), { kind: 'divider' },\n ...d.members.filter((m) => m.method).map((m) => label(m.text)),\n ];\n}\n\n/** Reads a Mermaid class diagram into a one-page document of `notation` `'class'`. Throws, naming the line, on text that is not one. */\nexport function readClassDiagram(text: string): ImportResult {\n const { source, stmts } = parseClassDiagram(text);\n const r = new ClassReader();\n r.walk(stmts, null);\n const nodes: DataNode[] = [...r.classes].map(([id, d]) => {\n const colors = r.styles.colorsOf(id);\n return { id, rows: classRows(id, d), ...(colors !== undefined ? { colors } : {}) };\n });\n const containers: DataContainer[] = r.namespaces.map((id) => {\n const members = r.membership.members(id);\n return { id, role: 'container', label: id, ...(members.length > 0 ? { members } : {}) };\n });\n const name = pageNameOf(source, r.warnings);\n const direction = r.direction !== undefined ? DIRECTIONS[r.direction] : undefined;\n const page = graphPage({\n ...(name !== undefined ? { name } : {}),\n ...(direction !== undefined ? { direction } : {}),\n nodes: [...nodes, ...r.notes], edges: [...r.edges, ...r.noteEdges], containers,\n });\n return { document: { pages: [{ ...page, notation: 'class' }] }, warnings: r.warnings.all() };\n}\n","/** One graph page as a Mermaid class diagram: boxes as classes, containers as namespaces, `note` shapes as notes. */\nimport type { MarkerRef } from '@weasel-js/core';\nimport type { DataEdge, DataNode, LayoutDirection, Row } from '@weasel-js/diagram';\nimport type { DiagramDocument, ExportResult, WriteOptions } from '../../document';\nimport { edgeStyleIn, graphOut, type Cluster, type GraphOut } from '../../graphWrite';\nimport { titleLines } from '../common/lines';\nimport { styleProps } from '../common/styles';\nimport { mermaidIds } from '../common/text';\n\nconst HEADER: Readonly<Record<LayoutDirection, string>> = { down: 'TB', up: 'BT', right: 'LR', left: 'RL' };\n\n/** A class box's parts, from its rows: what is above the first divider, then between, then below the second. */\nexport function classParts(node: DataNode): { annotations: string[]; name: string; attributes: string[]; methods: string[] } {\n const rows: readonly Row[] = node.rows ?? (node.lines ?? []).map((text) => ({ kind: 'label', text }));\n const sections: string[][] = [[]];\n for (const row of rows) {\n if (row.kind === 'divider') sections.push([]);\n else if (row.kind === 'label') sections.at(-1)!.push(row.text);\n else if (row.kind === 'field') sections.at(-1)!.push(`${row.label} ${row.value}`);\n }\n const [head = [], ...rest] = sections;\n const annotations = head.filter((t) => /^<<.*>>$/.test(t)).map((t) => t.slice(2, -2));\n const names = head.filter((t) => !/^<<.*>>$/.test(t));\n const members = rest.flat();\n const attributes = rest.length > 1 ? rest[0]! : [...names.slice(1), ...members].filter((m) => !m.includes('('));\n const methods = rest.length > 1 ? rest.slice(1).flat() : [...names.slice(1), ...members].filter((m) => m.includes('('));\n return { annotations, name: names[0] ?? node.id, attributes, methods };\n}\n\nconst HEADS: Readonly<Record<string, readonly [string, string]>> = {\n 'triangle-hollow': ['<|', '|>'], diamond: ['*', '*'], 'diamond-hollow': ['o', 'o'], arrow: ['<', '>'], 'arrow-open': ['<', '>'],\n};\n\nclass ClassWriter {\n readonly lines: string[] = [];\n readonly ids: Map<string, string>;\n readonly notes = new Map<string, DataEdge | null>();\n\n constructor(readonly out: GraphOut) {\n this.ids = mermaidIds([...out.page.data.nodes.map((n) => n.id), ...out.clusterIds]);\n for (const n of out.page.data.nodes) {\n if (n.outline !== 'note') continue;\n const own = out.edges.filter((e) => e.from === n.id || e.to === n.id);\n const target = own.length === 1 && own[0]!.from === n.id ? own[0]! : null;\n if (own.length > (target !== null ? 1 : 0)) out.warnings.add('Mermaid notes join one class; their other connectors were dropped.');\n this.notes.set(n.id, target);\n }\n }\n\n id(id: string): string {\n return this.ids.get(id) ?? id;\n }\n\n node(node: DataNode, indent: string): void {\n if (this.notes.has(node.id)) return;\n const { annotations, name, attributes, methods } = classParts(node);\n const id = this.id(node.id);\n const generic = /^(.*)<([^<>]*)>$/.exec(name);\n const head = name === node.id ? id\n : generic !== null && generic[1] === node.id ? `${id}~${generic[2]}~`\n : `${id}[\"${name.replace(/\"/g, '#quot;')}\"]`;\n const body = [...annotations.map((a) => `<<${a}>>`), ...attributes, ...methods];\n if (body.length === 0) {\n this.lines.push(`${indent}class ${head}`);\n return;\n }\n this.lines.push(`${indent}class ${head} {`, ...body.map((b) => `${indent} ${b}`), `${indent}}`);\n if (attributes.some((a) => a.includes('('))) this.out.warnings.add('Mermaid reads a member with parentheses as a method; such attributes read back as methods.');\n }\n\n cluster(c: Cluster, indent: string): void {\n this.lines.push(`${indent}namespace ${this.id(c.id)} {`);\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}}`);\n if (c.label !== undefined && c.label !== c.id) this.out.warnings.add('Mermaid names a namespace by its id; container titles were dropped.');\n }\n\n head(marker: MarkerRef | null | undefined, side: 0 | 1): string {\n if (marker === null || marker === undefined) return '';\n const known = HEADS[typeof marker === 'string' ? marker : marker.key];\n if (known === undefined) this.out.warnings.add('Mermaid class diagrams have only UML ends; others were written as arrows.');\n return (known ?? HEADS.arrow!)[side];\n }\n\n relation(e: DataEdge): string {\n const style = edgeStyleIn(this.out, e);\n const card = (text: string | undefined) => (text !== undefined ? ` \"${text.replace(/\"/g, '#quot;')}\"` : '');\n const line = style.dash !== undefined ? '..' : '--';\n const label = e.label !== undefined && e.label !== '' ? ` : ${e.label}` : '';\n const arrow = `${this.head(style.markerStart, 0)}${line}${this.head(style.markerEnd, 1)}`;\n return ` ${this.id(e.from)}${card(e.endLabels?.from)} ${arrow}${card(e.endLabels?.to)} ${this.id(e.to)}${label}`;\n }\n\n noteLines(): void {\n for (const [id, target] of this.notes) {\n const text = (this.out.byId.get(id)!.lines ?? []).join('\\\\n').replace(/\"/g, '#quot;');\n this.lines.push(target === null ? ` note \"${text}\"` : ` note for ${this.id(target.to)} \"${text}\"`);\n }\n }\n\n styles(): void {\n for (const n of this.out.page.data.nodes) {\n const props = n.colors !== undefined && !this.notes.has(n.id) ? styleProps(n.colors) : '';\n if (props !== '') this.lines.push(` style ${this.id(n.id)} ${props}`);\n }\n }\n}\n\n/** Writes the page `opts.page` names, else the first, as a Mermaid class diagram. */\nexport function writeClassDiagram(doc: DiagramDocument, opts?: WriteOptions): ExportResult {\n const out = graphOut(doc, opts, 'Mermaid');\n if (out === null) return { text: 'classDiagram\\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 ClassWriter(out);\n const { page } = out;\n w.lines.push(...titleLines(page.name), 'classDiagram');\n if (page.direction !== undefined && page.direction !== 'down') w.lines.push(` direction ${HEADER[page.direction]}`);\n for (const n of out.nodes) w.node(n, ' ');\n for (const c of out.clusters) w.cluster(c, ' ');\n const noteEdges = new Set([...w.notes.values()].filter((e) => e !== null));\n for (const e of out.edges) {\n if (noteEdges.has(e) || w.notes.has(e.from) || w.notes.has(e.to)) continue;\n w.lines.push(w.relation(e));\n }\n w.noteLines();\n w.styles();\n return { text: `${w.lines.join('\\n')}\\n`, warnings: out.warnings.all() };\n}\n","/** A Mermaid entity-relationship diagram's grammar, read to statements with each one's line. */\nimport { lineError } from '../../lineError';\nimport { statementsOf, type MermaidSource, type Statement } from '../common/lines';\nimport { unquote } from '../common/text';\n\n/** How many of an entity a relationship's end allows. */\nexport type ErCardinality = 'zero-one' | 'one' | 'zero-many' | 'one-many';\n\n/** An entity's attribute: its type, name, keys, and comment. */\nexport interface ErAttribute {\n type: string;\n name: string;\n keys: string[];\n comment?: string;\n}\n\nexport type ErStmt =\n | { kind: 'entity'; id: string; label?: string; attributes: ErAttribute[]; cssClass?: string; line: number }\n | { kind: 'relation'; from: string; to: string; fromCard: ErCardinality; toCard: ErCardinality; dashed: boolean; label: string; line: number }\n | { kind: 'direction'; value: string; line: number }\n | { kind: 'style'; text: string; line: number };\n\n/** A whole ER diagram. */\nexport interface ErDiagram {\n source: MermaidSource;\n stmts: ErStmt[];\n}\n\nconst LEFT: Readonly<Record<string, ErCardinality>> = { '|o': 'zero-one', '||': 'one', '}o': 'zero-many', '}|': 'one-many' };\nconst RIGHT: Readonly<Record<string, ErCardinality>> = { 'o|': 'zero-one', '||': 'one', 'o{': 'zero-many', '|{': 'one-many' };\nconst RELATION = /^([\\w-]+)\\s*(\\|o|\\|\\||\\}o|\\}\\|)(--|\\.\\.)(o\\||\\|\\||o\\{|\\|\\{)\\s*([\\w-]+)\\s*:\\s*(.*)$/;\nconst ENTITY = /^([\\w-]+)(?:\\s*\\[\\s*(?:\"([^\"]*)\"|([^\\]]*))\\s*\\])?(?::::([\\w-]+))?\\s*(\\{\\s*\\}?)?$/;\nconst ATTRIBUTE = /^(\\S+)\\s+(\\S+)(?:\\s+((?:PK|FK|UK)(?:\\s*,\\s*(?:PK|FK|UK))*))?(?:\\s+\"([^\"]*)\")?$/;\n\nfunction attributeOf({ text, line }: Statement): ErAttribute {\n const m = ATTRIBUTE.exec(text);\n if (m === null) throw lineError('Mermaid', line, `cannot read \"${text}\" as an attribute: a type, a name, keys, and a quoted comment`);\n return {\n type: m[1]!, name: m[2]!, keys: m[3] === undefined ? [] : m[3].split(',').map((k) => k.trim()),\n ...(m[4] !== undefined ? { comment: m[4] } : {}),\n };\n}\n\nfunction entityOf(m: RegExpExecArray, lines: readonly Statement[], at: { i: number }, line: number): ErStmt {\n const [, id, quoted, plain, cssClass, open] = m as unknown as (string | undefined)[];\n const attributes: ErAttribute[] = [];\n if (open !== undefined && !open.includes('}')) {\n for (;;) {\n const s = lines[at.i++];\n if (s === undefined) throw lineError('Mermaid', line, `entity ${id} is never closed`);\n if (s.text === '}') break;\n attributes.push(attributeOf(s));\n }\n }\n const label = quoted ?? plain?.trim();\n return {\n kind: 'entity', id: id!, attributes, line,\n ...(label !== undefined && label !== '' ? { label } : {}),\n ...(cssClass !== undefined ? { cssClass } : {}),\n };\n}\n\n/** Parses a Mermaid ER diagram. Throws, naming the line, on text that is not one. */\nexport function parseErDiagram(text: string): ErDiagram {\n const source = statementsOf(text);\n if (source.header.text !== 'erDiagram') throw lineError('Mermaid', source.header.line, `expected an erDiagram header, found \"${source.header.text}\"`);\n const stmts: ErStmt[] = [];\n const at = { i: 0 };\n while (at.i < source.body.length) {\n const { text: t, line } = source.body[at.i++]!;\n const rel = RELATION.exec(t);\n if (rel !== null) {\n const [, from, left, body, right, to, label] = rel as unknown as string[];\n stmts.push({ kind: 'relation', from: from!, to: to!, fromCard: LEFT[left!]!, toCard: RIGHT[right!]!, dashed: body === '..', label: unquote(label!.trim()), line });\n continue;\n }\n const dir = /^direction\\s+(TB|TD|BT|LR|RL)$/.exec(t);\n if (dir !== null) stmts.push({ kind: 'direction', value: dir[1]!, line });\n else if (/^(classDef|class|style)\\s/.test(t)) stmts.push({ kind: 'style', text: t, line });\n else {\n const ent = ENTITY.exec(t);\n if (ent === null) throw lineError('Mermaid', line, `cannot read \"${t}\" as an entity or a relationship`);\n stmts.push(entityOf(ent, source.body, at, line));\n }\n }\n return { source, stmts };\n}\n","/**\n * A Mermaid ER diagram as a one-page document: each entity a box of its name\n * row, a divider, and a `field` row per attribute (its type as the label; its\n * name, keys, and comment as the value), and each relationship an edge with\n * a crow's-foot marker at each end, dashed when it does not identify.\n */\nimport type { MarkerRef } from '@weasel-js/core';\nimport type { DataEdge, DataNode, Row } from '@weasel-js/diagram';\nimport type { ImportResult } from '../../document';\nimport { Warnings, decodeEntities, graphPage } from '../../graphRead';\nimport { DIRECTIONS } from '../class/read';\nimport { pageNameOf } from '../common/lines';\nimport { StyleSheet } from '../common/styles';\nimport { parseErDiagram, type ErAttribute, type ErCardinality } from './parse';\n\n/** Each cardinality's crow's-foot marker. */\nexport const CROWS: Readonly<Record<ErCardinality, MarkerRef>> = {\n 'zero-one': 'crow-zero-one', one: 'crow-one', 'zero-many': 'crow-zero-many', 'one-many': 'crow-one-many',\n};\n\n/** An attribute's field value: its name, then its keys, then its comment in quotes. */\nexport const attributeValue = (a: ErAttribute): string =>\n [a.name, ...(a.keys.length > 0 ? [a.keys.join(', ')] : []), ...(a.comment !== undefined ? [`\"${a.comment}\"`] : [])].join(' ');\n\n/** Reads a Mermaid ER diagram into a one-page document of `notation` `'er'`. Throws, naming the line, on text that is not one. */\nexport function readErDiagram(text: string): ImportResult {\n const { source, stmts } = parseErDiagram(text);\n const warnings = new Warnings();\n const styles = new StyleSheet(warnings);\n const entities = new Map<string, { label?: string; attributes: ErAttribute[] }>();\n const entity = (id: string) => {\n if (!entities.has(id)) entities.set(id, { attributes: [] });\n return entities.get(id)!;\n };\n const edges: DataEdge[] = [];\n let direction: string | undefined;\n for (const s of stmts) {\n if (s.kind === 'entity') {\n const e = entity(s.id);\n if (s.label !== undefined) e.label = decodeEntities(s.label, true);\n e.attributes.push(...s.attributes);\n if (s.cssClass !== undefined) styles.assign(s.id, s.cssClass);\n } else if (s.kind === 'relation') {\n entity(s.from);\n entity(s.to);\n edges.push({\n from: s.from, to: s.to, ...(s.label !== '' ? { label: decodeEntities(s.label, true) } : {}),\n colors: { markerStart: CROWS[s.fromCard], markerEnd: CROWS[s.toCard], ...(s.dashed ? { dash: [4, 4] } : {}) },\n });\n } else if (s.kind === 'direction') direction = s.value;\n else styles.statement(s.text);\n }\n const nodes: DataNode[] = [...entities].map(([id, e]) => {\n const rows: Row[] = [\n { kind: 'label', text: e.label ?? id },\n ...(e.attributes.length > 0 ? [{ kind: 'divider' } as const] : []),\n ...e.attributes.map((a): Row => ({ kind: 'field', label: a.type, value: attributeValue(a) })),\n ];\n const colors = styles.colorsOf(id);\n return { id, rows, ...(colors !== undefined ? { colors } : {}) };\n });\n const name = pageNameOf(source, warnings);\n const dir = direction !== undefined ? DIRECTIONS[direction] : undefined;\n const page = graphPage({ ...(name !== undefined ? { name } : {}), ...(dir !== undefined ? { direction: dir } : {}), nodes, edges, containers: [] });\n return { document: { pages: [{ ...page, notation: 'er' }] }, warnings: warnings.all() };\n}\n","/** One graph page as a Mermaid ER diagram: boxes as entities, their rows past the name as attributes, edges as relationships. */\nimport type { MarkerRef } from '@weasel-js/core';\nimport type { DataNode, LayoutDirection, Row } from '@weasel-js/diagram';\nimport type { DiagramDocument, ExportResult, WriteOptions } from '../../document';\nimport { edgeStyleIn, graphOut, type GraphOut } from '../../graphWrite';\nimport { titleLines } from '../common/lines';\nimport { styleProps } from '../common/styles';\nimport { mermaidEscaped, mermaidIds } from '../common/text';\n\nconst HEADER: Readonly<Record<LayoutDirection, string>> = { down: 'TB', up: 'BT', right: 'LR', left: 'RL' };\n\n/** Each crow's-foot marker as the left and the right end of a relationship. */\nconst ENDS: Readonly<Record<string, readonly [string, string]>> = {\n 'crow-zero-one': ['|o', 'o|'], 'crow-one': ['||', '||'], 'crow-zero-many': ['}o', 'o{'], 'crow-one-many': ['}|', '|{'], 'crow-many': ['}|', '|{'],\n};\n\n/** An entity's name and attribute lines. A row past the name with no field is written as it reads. */\nfunction entityParts(node: DataNode): { name: string; attributes: string[] } {\n const rows: readonly Row[] = node.rows ?? (node.lines ?? []).map((text) => ({ kind: 'label', text }));\n const text = rows.filter((r) => r.kind === 'label' || r.kind === 'field');\n const [first, ...rest] = text;\n const name = first === undefined ? node.id : first.kind === 'label' ? first.text : `${first.label} ${first.value}`;\n return { name, attributes: rest.map((r) => (r.kind === 'field' ? `${r.label} ${r.value}` : (r as { text: string }).text)) };\n}\n\nfunction end(out: GraphOut, marker: MarkerRef | null | undefined, side: 0 | 1): string {\n const known = marker === null || marker === undefined ? undefined : ENDS[typeof marker === 'string' ? marker : marker.key];\n if (known === undefined) out.warnings.add('Mermaid ER relationships end in crow\\'s feet; other ends were written as exactly one.');\n return (known ?? ENDS['crow-one']!)[side];\n}\n\n/** Writes the page `opts.page` names, else the first, as a Mermaid ER diagram. */\nexport function writeErDiagram(doc: DiagramDocument, opts?: WriteOptions): ExportResult {\n const out = graphOut(doc, opts, 'Mermaid');\n if (out === null) return { text: 'erDiagram\\n', warnings: [] };\n const { page } = out;\n if (page.data.nodes.some((n) => n.at !== undefined)) out.warnings.add('Mermaid holds no positions; the page is laid out again when read.');\n if (out.clusters.length > 0) out.warnings.add('Mermaid ER diagrams have no containers; they were dropped.');\n const ids = mermaidIds(page.data.nodes.map((n) => n.id));\n const lines = [...titleLines(page.name), 'erDiagram'];\n if (page.direction !== undefined && page.direction !== 'down') lines.push(` direction ${HEADER[page.direction]}`);\n for (const n of page.data.nodes) {\n const { name, attributes } = entityParts(n);\n const head = name === n.id ? ids.get(n.id)! : `${ids.get(n.id)!}[\"${mermaidEscaped([name])}\"]`;\n if (attributes.length === 0) lines.push(` ${head}`);\n else lines.push(` ${head} {`, ...attributes.map((a) => ` ${a}`), ' }');\n }\n for (const e of out.edges) {\n if (!ids.has(e.from) || !ids.has(e.to)) continue;\n const style = edgeStyleIn(out, e);\n const body = style.dash !== undefined ? '..' : '--';\n lines.push(` ${ids.get(e.from)} ${end(out, style.markerStart, 0)}${body}${end(out, style.markerEnd, 1)} ${ids.get(e.to)} : \"${mermaidEscaped([e.label ?? ''])}\"`);\n }\n for (const n of page.data.nodes) {\n const props = n.colors !== undefined ? styleProps(n.colors) : '';\n if (props !== '') lines.push(` style ${ids.get(n.id)} ${props}`);\n }\n return { text: `${lines.join('\\n')}\\n`, warnings: out.warnings.all() };\n}\n","/** A Mermaid kanban board's grammar: columns, and the cards indented under each, with each one's line. */\nimport { lineError } from '../../lineError';\nimport { statementsOf, type MermaidSource } from '../common/lines';\n\n/** A column or card: its id when it gives one, its text, and a card's `@{ … }` metadata in order. */\nexport interface KanbanItem {\n id?: string;\n text: string;\n meta: [string, string][];\n line: number;\n}\n\n/** A whole board. */\nexport interface KanbanBoard {\n source: MermaidSource;\n columns: (KanbanItem & { cards: KanbanItem[] })[];\n}\n\nconst ITEM = /^([\\p{L}\\p{N}_][\\p{L}\\p{N}_-]*)?(?:\\[(.*)\\])?\\s*(?:@\\{(.*)\\})?$/u;\n\n/** `ticket: MC-1, assigned: 'knsv'` as its pairs, values unquoted. */\nexport function metaOf(meta: string, line: number): [string, string][] {\n const out: [string, string][] = [];\n const text = meta.trim();\n const re = /\\s*([\\w-]+)\\s*:\\s*('[^']*'|\"[^\"]*\"|[^,]*?)\\s*(?:,|$)/y;\n for (re.lastIndex = 0; re.lastIndex < text.length;) {\n const at = re.lastIndex;\n const m = re.exec(text);\n if (m === null || m[0] === '') throw lineError('Mermaid', line, `cannot read \"${text.slice(at).trim()}\" as card metadata`);\n out.push([m[1]!, /^(['\"]).*\\1$/.test(m[2]!) ? m[2]!.slice(1, -1) : m[2]!]);\n }\n return out;\n}\n\nfunction itemOf(text: string, line: number): KanbanItem {\n const m = ITEM.exec(text);\n if (m === null || (m[1] === undefined && m[2] === undefined)) throw lineError('Mermaid', line, `cannot read \"${text}\" as a column or a card`);\n const [, id, label, meta] = m as unknown as (string | undefined)[];\n return { ...(id !== undefined ? { id } : {}), text: (label ?? id!).trim(), meta: meta !== undefined ? metaOf(meta, line) : [], line };\n}\n\n/** Parses a Mermaid kanban board: a line at the shallowest indent is a column, a deeper one a card in it. Throws,\n * naming the line, on text that is not one. */\nexport function parseKanban(text: string): KanbanBoard {\n const source = statementsOf(text);\n if (source.header.text !== 'kanban') throw lineError('Mermaid', source.header.line, `expected a kanban header, found \"${source.header.text}\"`);\n const top = Math.min(...source.body.map((s) => s.indent));\n const columns: KanbanBoard['columns'] = [];\n for (const s of source.body) {\n const item = itemOf(s.text, s.line);\n if (s.indent === top) columns.push({ ...item, cards: [] });\n else if (columns.length === 0) throw lineError('Mermaid', s.line, 'a card comes before any column');\n else columns.at(-1)!.cards.push(item);\n }\n return { source, columns };\n}\n","/**\n * A Mermaid kanban board as a one-page document: one pool whose lanes run\n * along `x`, a lane per column, and each card a node in its column's lane,\n * its text wrapped into label rows and its metadata as `field` rows.\n */\nimport type { DataContainer, DataNode, Row } from '@weasel-js/diagram';\nimport type { ImportResult } from '../../document';\nimport { Warnings, decodeEntities, graphPage } from '../../graphRead';\nimport { PAGE_MARGIN } from '../../pageLayout';\nimport { lineError } from '../../lineError';\nimport { pageNameOf } from '../common/lines';\nimport { wrapped } from '../common/text';\nimport { parseKanban } from './parse';\n\n/** A card's width, and a column's: wide enough for one card, so cards stack down it. */\nexport const CARD_WIDTH = 180;\nexport const COLUMN_WIDTH = 220;\n/** A card's text wraps at this many characters. */\nconst CARD_WRAP = 26;\n/** The pool's id, unless a card or column already has it. */\nexport const BOARD_ID = 'board';\n/** The id a column or card giving none reads as, by its place among them. */\nexport const columnId = (n: number): string => `column-${n}`;\nexport const cardId = (n: number): string => `card-${n}`;\n\n/** Room above a column's first card (the pool's header and the lane's), below each card, and a card's row height,\n * for sizing the board to hold its longest column before the cards are measured. */\nconst HEADERS = 72;\nconst GAP = 12;\nconst ROW = 18;\n\n/** A card's rows: its text, wrapped, then a `field` row per metadata pair. */\nexport const cardRows = (text: string, meta: readonly [string, string][]): Row[] => [\n ...wrapped(text, CARD_WRAP).map((t): Row => ({ kind: 'label', text: t })),\n ...meta.map(([label, value]): Row => ({ kind: 'field', label, value })),\n];\n\n/** Reads a Mermaid kanban board into a one-page document of `notation` `'kanban'`. Throws, naming the line, on text\n * that is not one, or on an id two items share. */\nexport function readKanban(text: string): ImportResult {\n const { source, columns } = parseKanban(text);\n const warnings = new Warnings();\n const ids = new Set<string>();\n const claim = (id: string, line: number) => {\n if (ids.has(id)) throw lineError('Mermaid', line, `\"${id}\" names two items`);\n ids.add(id);\n return id;\n };\n let cards = 0;\n const nodes: DataNode[] = [];\n const lanes = columns.map((c, i) => {\n const lane = claim(c.id ?? columnId(i + 1), c.line);\n const members = c.cards.map((card) => {\n const id = claim(card.id ?? cardId(++cards), card.line);\n nodes.push({ id, rows: cardRows(decodeEntities(card.text, true), card.meta), width: CARD_WIDTH });\n return id;\n });\n if (c.meta.length > 0) warnings.add('Mermaid kanban column metadata was dropped.');\n return { id: lane, label: decodeEntities(c.text, true), size: COLUMN_WIDTH, ...(members.length > 0 ? { members } : {}) };\n });\n let board = BOARD_ID;\n for (let n = 2; ids.has(board); n++) board = `${BOARD_ID}-${n}`;\n const tallest = Math.max(0, ...columns.map((c) => c.cards.reduce((h, card) => h + (wrapped(card.text, CARD_WRAP).length + card.meta.length) * ROW + 16 + GAP, 0)));\n const name = pageNameOf(source, warnings);\n const pool: DataContainer = {\n id: board, role: 'pool', axis: 'x', lanes, ...(name !== undefined ? { label: name } : {}),\n box: { x: PAGE_MARGIN, y: PAGE_MARGIN, width: COLUMN_WIDTH * Math.max(1, lanes.length), height: HEADERS + GAP + tallest },\n };\n const page = graphPage({ ...(name !== undefined ? { name } : {}), nodes, edges: [], containers: [pool] });\n return { document: { pages: [{ ...page, notation: 'kanban' }] }, warnings: warnings.all() };\n}\n","/** One graph page as a Mermaid kanban board: a pool's lanes as columns, the shapes in each as its cards. */\nimport type { DataContainer, DataNode } from '@weasel-js/diagram';\nimport type { DiagramDocument, ExportResult, WriteOptions } from '../../document';\nimport { graphOut, type GraphOut } from '../../graphWrite';\nimport { titleLines } from '../common/lines';\nimport { mermaidIds } from '../common/text';\n\nconst GENERATED = /^(?:column|card)-\\d+$/;\n\n/** A metadata value, quoted with whichever quote it does not hold. */\nconst metaValue = (v: string): string => (v.includes(\"'\") ? `\"${v.replace(/\"/g, \"'\")}\"` : `'${v}'`);\n\n/** Text in a column's or card's brackets: one line, no closing bracket. */\nconst bracketed = (text: string): string => `[${text.replace(/\\]/g, ')')}]`;\n\nclass KanbanWriter {\n readonly lines: string[] = [];\n readonly ids: Map<string, string>;\n readonly written = new Set<string>();\n\n constructor(readonly out: GraphOut) {\n const lanes = (out.page.data.containers ?? []).flatMap((c) => (c.lanes ?? []).map((l) => l.id));\n this.ids = mermaidIds([...out.page.data.nodes.map((n) => n.id), ...lanes]);\n }\n\n head(id: string): string {\n return GENERATED.test(id) ? '' : this.ids.get(id) ?? id;\n }\n\n card(n: DataNode): void {\n this.written.add(n.id);\n const rows = n.rows ?? (n.lines ?? []).map((text) => ({ kind: 'label' as const, text }));\n const text = rows.flatMap((r) => (r.kind === 'label' ? [r.text] : [])).join(' ');\n const meta = rows.flatMap((r) => (r.kind === 'field' ? [`${r.label}: ${metaValue(r.value)}`] : []));\n if (rows.some((r) => r.kind !== 'label' && r.kind !== 'field')) this.out.warnings.add('Mermaid kanban cards hold text and metadata only; other rows were dropped.');\n this.lines.push(` ${this.head(n.id)}${bracketed(text)}${meta.length > 0 ? `@{ ${meta.join(', ')} }` : ''}`);\n }\n\n board(pool: DataContainer): void {\n for (const lane of pool.lanes ?? []) {\n this.lines.push(` ${this.head(lane.id)}${bracketed(lane.label ?? lane.id)}`);\n for (const id of lane.members ?? []) {\n const n = this.out.byId.get(id);\n if (n !== undefined) this.card(n);\n else this.out.warnings.add('Mermaid kanban columns hold cards only; containers in them were dropped.');\n }\n }\n }\n}\n\n/** Writes the page `opts.page` names, else the first, as a Mermaid kanban board: its first pool's lanes as columns. */\nexport function writeKanban(doc: DiagramDocument, opts?: WriteOptions): ExportResult {\n const out = graphOut(doc, opts, 'Mermaid', true);\n if (out === null) return { text: 'kanban\\n', warnings: [] };\n const w = new KanbanWriter(out);\n w.lines.push(...titleLines(out.page.name), 'kanban');\n const pools = (out.page.data.containers ?? []).filter((c) => c.role === 'pool');\n if (pools[0] !== undefined) w.board(pools[0]);\n if (pools.length > 1 || (out.page.data.containers ?? []).some((c) => c.role !== 'pool')) {\n out.warnings.add('Mermaid kanban boards are one pool; other pools and containers were dropped.');\n }\n if (out.page.data.nodes.some((n) => !w.written.has(n.id))) out.warnings.add('Mermaid kanban cards sit in columns; shapes in none were dropped.');\n if (out.edges.length > 0) out.warnings.add('Mermaid kanban boards have no connectors; they were dropped.');\n return { text: `${w.lines.join('\\n')}\\n`, warnings: out.warnings.all() };\n}\n","/** A Mermaid mind map's grammar: an indented tree of nodes, read with each one's line. */\nimport { lineError } from '../../lineError';\nimport { statementsOf, type MermaidSource } from '../common/lines';\n\n/** A node's shape, by the brackets around its text; `plain` for none. */\nexport type MindmapShape = 'plain' | 'square' | 'rounded' | 'circle' | 'bang' | 'cloud' | 'hexagon';\n\n/** One node and the nodes indented under it. */\nexport interface MindmapNode {\n id?: string;\n text: string;\n shape: MindmapShape;\n /** What `::icon(…)` and `:::` gave it, which a diagram does not hold. */\n icon?: string;\n classes?: string;\n children: MindmapNode[];\n line: number;\n}\n\n/** A whole mind map. */\nexport interface Mindmap {\n source: MermaidSource;\n root: MindmapNode | null;\n}\n\n/** Openers, longest first, each with its closer. */\nconst SHAPES: readonly (readonly [string, string, MindmapShape])[] = [\n ['((', '))', 'circle'], ['))', '((', 'bang'], ['{{', '}}', 'hexagon'], ['(', ')', 'rounded'], [')', '(', 'cloud'], ['[', ']', 'square'],\n];\n\nfunction nodeOf(text: string, line: number): MindmapNode {\n const at = text.search(/[([{)]/);\n if (at >= 0) {\n const id = text.slice(0, at).trim();\n const rest = text.slice(at);\n const shape = SHAPES.find(([open, close]) => rest.startsWith(open) && rest.endsWith(close) && rest.length >= open.length + close.length);\n if (shape !== undefined && /^[\\w-]*$/.test(id)) {\n const inner = rest.slice(shape[0].length, rest.length - shape[1].length).trim();\n return { ...(id !== '' ? { id } : {}), text: /^\".*\"$/s.test(inner) ? inner.slice(1, -1) : inner, shape: shape[2], children: [], line };\n }\n if (shape === undefined && /^[\\w-]*$/.test(id) && id !== '') throw lineError('Mermaid', line, `the shape around \"${rest}\" is never closed`);\n }\n return { text: /^\".*\"$/s.test(text) ? text.slice(1, -1) : text, shape: 'plain', children: [], line };\n}\n\n/** Parses a Mermaid mind map. Throws, naming the line, on text that is not one, or on a second root. */\nexport function parseMindmap(text: string): Mindmap {\n const source = statementsOf(text);\n if (source.header.text !== 'mindmap') throw lineError('Mermaid', source.header.line, `expected a mindmap header, found \"${source.header.text}\"`);\n let root: MindmapNode | null = null;\n const stack: { indent: number; node: MindmapNode }[] = [];\n for (const s of source.body) {\n const last = stack.at(-1)?.node;\n const icon = /^::icon\\((.*)\\)$/.exec(s.text);\n const classes = /^:::\\s*(.*)$/.exec(s.text);\n if (icon !== null || classes !== null) {\n if (last === undefined) throw lineError('Mermaid', s.line, 'an icon or class must follow a node');\n if (icon !== null) last.icon = icon[1]!;\n else last.classes = classes![1]!;\n continue;\n }\n const node = nodeOf(s.text, s.line);\n while (stack.length > 0 && stack.at(-1)!.indent >= s.indent) stack.pop();\n const parent = stack.at(-1)?.node;\n if (parent !== undefined) parent.children.push(node);\n else if (root === null) root = node;\n else throw lineError('Mermaid', s.line, 'a mind map has one root; this line is indented no deeper than it');\n stack.push({ indent: s.indent, node });\n }\n return { source, root };\n}\n","/**\n * A Mermaid mind map as a one-page document: each node a shape joined to its\n * parent by an unmarked edge, laid out on import by `radial`, the root in the\n * middle and its branches to both sides.\n */\nimport type { DataEdge, DataNode, Outline } from '@weasel-js/diagram';\nimport type { ImportResult, PageLayout } from '../../document';\nimport { Warnings, graphPage } from '../../graphRead';\nimport { pageNameOf } from '../common/lines';\nimport { textLines } from '../common/text';\nimport { parseMindmap, type MindmapNode, type MindmapShape } from './parse';\n\n/** Each bracketed shape's outline. A plain node has none of its own. */\nexport const SHAPE_OUTLINES: Readonly<Record<Exclude<MindmapShape, 'plain'>, Outline>> = {\n square: 'rect', rounded: 'roundRect', circle: 'ellipse', bang: 'cloud', cloud: 'cloud', hexagon: 'hexagon',\n};\n\n/** How a mind map lays out: the root in the middle, its branches balanced to its right and left. */\nexport const MINDMAP_LAYOUT: PageLayout = { name: 'radial' };\n\n/** The ids a mind map's nodes take, in order: its own where it gives one, else `n` and its place, made unique. */\nexport function mindmapIds(nodes: readonly { id?: string }[]): string[] {\n const taken = new Set(nodes.flatMap((n) => (n.id !== undefined ? [n.id] : [])));\n return nodes.map((n, k) => {\n if (n.id !== undefined) return n.id;\n let id = `n${k + 1}`;\n for (let m = 2; taken.has(id); m++) id = `n${k + 1}_${m}`;\n taken.add(id);\n return id;\n });\n}\n\n/** Reads a Mermaid mind map into a one-page document of `notation` `'mindmap'`. Throws, naming the line, on text that is not one. */\nexport function readMindmap(text: string): ImportResult {\n const { source, root } = parseMindmap(text);\n const warnings = new Warnings();\n const order: MindmapNode[] = [];\n const parents = new Map<MindmapNode, MindmapNode>();\n const visit = (n: MindmapNode) => {\n order.push(n);\n for (const c of n.children) {\n parents.set(c, n);\n visit(c);\n }\n };\n if (root !== null) visit(root);\n const ids = mindmapIds(order);\n const idOf = new Map(order.map((n, k) => [n, ids[k]!]));\n const nodes: DataNode[] = order.map((n) => {\n if (n.icon !== undefined) warnings.add('Mermaid mind map icons were dropped.');\n if (n.classes !== undefined) warnings.add('Mermaid mind map classes were dropped.');\n return { id: idOf.get(n)!, lines: textLines(n.text), ...(n.shape !== 'plain' ? { outline: SHAPE_OUTLINES[n.shape] } : {}) };\n });\n const edges: DataEdge[] = order.filter((n) => parents.has(n)).map((n) => ({\n from: idOf.get(parents.get(n)!)!, to: idOf.get(n)!, colors: { markerEnd: null },\n }));\n const name = pageNameOf(source, warnings);\n const page = graphPage({ ...(name !== undefined ? { name } : {}), nodes, edges, containers: [] });\n return { document: { pages: [{ ...page, layout: MINDMAP_LAYOUT, notation: 'mindmap' }] }, warnings: warnings.all() };\n}\n","/** One graph page as a Mermaid mind map: the tree its edges make from the root, indented, each node in its outline's brackets. */\nimport type { DataNode } from '@weasel-js/diagram';\nimport type { DiagramDocument, ExportResult, WriteOptions } from '../../document';\nimport { graphOut, nodeLines } from '../../graphWrite';\nimport { titleLines } from '../common/lines';\nimport { mermaidEscaped } from '../common/text';\nimport { mindmapIds } from './read';\n\nconst BRACKETS: Readonly<Record<string, readonly [string, string]>> = {\n rect: ['[', ']'], roundRect: ['(', ')'], ellipse: ['((', '))'], cloud: ['))', '(('], hexagon: ['{{', '}}'],\n};\n\n/** Writes the page `opts.page` names, else the first, as a Mermaid mind map. */\nexport function writeMindmap(doc: DiagramDocument, opts?: WriteOptions): ExportResult {\n const out = graphOut(doc, opts, 'Mermaid');\n if (out === null) return { text: 'mindmap\\n', warnings: [] };\n const { page, warnings } = out;\n if (out.clusters.length > 0) warnings.add('Mermaid mind maps have no containers; they were dropped.');\n if (out.edges.some((e) => e.label !== undefined || e.endLabels !== undefined)) warnings.add('Mermaid mind maps have no connector labels; they were dropped.');\n if (page.data.nodes.some((n) => n.colors !== undefined)) warnings.add('Mermaid mind maps hold no colors; they were dropped.');\n const children = new Map<string, string[]>();\n const hasParent = new Set<string>();\n for (const e of out.edges) {\n if (!out.byId.has(e.from) || !out.byId.has(e.to) || hasParent.has(e.to)) continue;\n children.set(e.from, [...(children.get(e.from) ?? []), e.to]);\n hasParent.add(e.to);\n }\n const roots = page.data.nodes.filter((n) => !hasParent.has(n.id));\n const order: { node: DataNode; depth: number }[] = [];\n const seen = new Set<string>();\n const visit = (id: string, depth: number) => {\n if (seen.has(id)) return;\n seen.add(id);\n order.push({ node: out.byId.get(id)!, depth });\n for (const c of children.get(id) ?? []) visit(c, depth + 1);\n };\n if (roots[0] !== undefined) visit(roots[0].id, 0);\n if (seen.size < page.data.nodes.length) warnings.add('Mermaid mind maps hold one tree; shapes outside the first root\\'s were dropped.');\n const generated = mindmapIds(order.map(() => ({})));\n const lines = [...titleLines(page.name), 'mindmap'];\n order.forEach(({ node, depth }, k) => {\n const text = mermaidEscaped(nodeLines(node, warnings, 'Mermaid'));\n const outline = typeof node.outline === 'string' ? node.outline : undefined;\n const brackets = outline === undefined ? undefined : BRACKETS[outline];\n if (node.outline !== undefined && brackets === undefined) warnings.add('Mermaid mind maps have five shapes; others were written plain.');\n const id = node.id === generated[k] ? '' : node.id;\n const plain = text.replace(/[()[\\]{}]/g, (c) => `#${c.charCodeAt(0)};`);\n lines.push(`${' '.repeat(depth + 1)}${brackets === undefined ? plain : `${id}${brackets[0]}${text}${brackets[1]}`}`);\n });\n return { text: `${lines.join('\\n')}\\n`, warnings: warnings.all() };\n}\n","/** The pieces of Mermaid's `sequenceDiagram` syntax both the reader and the writer know: arrows, participant types, and text. */\nimport type { Outline, SeqMessage } from '@weasel-js/diagram';\nimport { markupLines } from '../../graphRead';\n\n/** A message's arrow, as its line, head, and whether it has a head at both ends. */\nexport type Arrow = Pick<SeqMessage, 'line' | 'head'> & { both?: true; async?: true };\n\n/** Every arrow, longest first, so a match never stops at a shorter arrow's prefix. */\nexport const ARROWS: readonly (readonly [string, Arrow])[] = [\n ['<<-->>', { line: 'dashed', head: 'arrow', both: true }],\n ['<<->>', { line: 'solid', head: 'arrow', both: true }],\n ['-->>', { line: 'dashed', head: 'arrow' }],\n ['->>', { line: 'solid', head: 'arrow' }],\n ['--x', { line: 'dashed', head: 'cross' }],\n ['-x', { line: 'solid', head: 'cross' }],\n ['--)', { line: 'dashed', head: 'open', async: true }],\n ['-)', { line: 'solid', head: 'open', async: true }],\n ['-->', { line: 'dashed', head: 'none' }],\n ['->', { line: 'solid', head: 'none' }],\n];\n\n/** The arrow that writes `m`, and whether it lost its second head. */\nexport function arrowOf(m: Pick<SeqMessage, 'line' | 'head' | 'both'>): { arrow: string; dropsBoth: boolean } {\n const both = m.both === true && m.head === 'arrow';\n const found = ARROWS.find(([, a]) => a.line === m.line && a.head === m.head && (a.both === true) === both)!;\n return { arrow: found[0], dropsBoth: m.both === true && !both };\n}\n\n/** A participant type's outline. `participant` is a plain box. */\nexport const TYPE_OUTLINES: Readonly<Record<string, Outline | undefined>> = {\n participant: undefined, actor: 'actor', boundary: 'boundary', control: 'control', entity: 'entity', database: 'cylinder',\n collections: 'collections', queue: 'queue',\n};\n\n/** The participant type that draws `outline`, or `null` for one Mermaid has no type for. */\nexport function typeOf(outline: Outline | undefined): string | null {\n if (outline === undefined || outline === 'rect') return 'participant';\n return Object.entries(TYPE_OUTLINES).find(([, o]) => o === outline)?.[0] ?? null;\n}\n\n/** Mermaid's text as plain text: `<br>` a line break, entities read. */\nexport const plainText = (text: string): string => markupLines(text.trim(), true).join('\\n');\n\nconst ENTITIES: Readonly<Record<string, string>> = { '#': '#35;', ';': '#59;', '<': '#lt;', '>': '#gt;' };\n\n/** Text as Mermaid writes it in a sequence: line breaks as `<br>`, and what it reads as syntax as entities. */\nexport const mermaidSeqText = (text: string): string =>\n text.split('\\n').map((l) => l.replace(/[#;<>]/g, (c) => ENTITIES[c]!)).join('<br>');","/**\n * A Mermaid `sequenceDiagram` as a list of statements, one per line, each\n * with its line number. Says nothing about whether the statements make sense\n * together; `readMermaidSequence` does.\n */\nimport { lineError } from '../../lineError';\nimport { ARROWS, type Arrow } from './syntax';\n\n/** Fragment keywords and the section keyword each continues with. */\nexport const FRAGMENTS = { loop: null, alt: 'else', opt: null, par: 'and', critical: 'option', break: null } as const;\nexport type FragmentWord = keyof typeof FRAGMENTS;\n\n/** One statement of a sequence diagram. */\nexport type SeqStmt = { line: number } & (\n | { kind: 'participant'; id: string; type: string; label?: string; create: boolean }\n | { kind: 'message'; from: string; to: string; arrow: Arrow; mark: '+' | '-' | ''; text: string }\n | { kind: 'note'; place: 'left of' | 'right of' | 'over'; over: string[]; text: string }\n | { kind: 'activate' | 'deactivate' | 'destroy'; participant: string }\n | { kind: 'fragment'; word: FragmentWord; label: string }\n | { kind: 'section'; word: 'else' | 'and' | 'option'; label: string }\n | { kind: 'rect'; color: string }\n | { kind: 'box'; rest: string }\n | { kind: 'end' }\n | { kind: 'autonumber'; args: string[] }\n | { kind: 'title'; text: string }\n | { kind: 'dropped'; what: string }\n);\n\n/** What {@link parseSequence} reads: the statements, the front matter's title, and what it dropped along the way. */\nexport interface ParsedSequence {\n stmts: SeqStmt[];\n title?: string;\n dropped: string[];\n}\n\nconst escape = (s: string) => s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\nconst MESSAGE = new RegExp(`^(.+?)\\\\s*(${ARROWS.map(([a]) => escape(a)).join('|')})\\\\s*([+-]?)\\\\s*([^:]+?)\\\\s*(?::(.*))?$`);\nconst NOTE = /^note\\s+(left of|right of|over)\\s+([^:]+?)\\s*:(.*)$/i;\nconst DECLARE = /^(create\\s+)?(participant|actor)\\s+(.+)$/i;\n\n/** A declaration's id, its `@{ ... }` type and alias, and its `as` label. */\nfunction declaration(rest: string, word: string, create: boolean, line: number): SeqStmt {\n const as = /\\s+as\\s+(.+)$/i.exec(rest);\n const head = (as === null ? rest : rest.slice(0, as.index)).trim();\n const meta = /^([^@\\s]+)\\s*@\\{(.*)\\}$/.exec(head);\n const id = meta === null ? head : meta[1]!;\n if (id === '' || /\\s/.test(id)) throw lineError('Mermaid', line, `\"${head}\" is not a participant id`);\n const type = (meta && /\"type\"\\s*:\\s*\"([^\"]*)\"/.exec(meta[2]!)?.[1]) ?? word.toLowerCase();\n const alias = meta ? /\"alias\"\\s*:\\s*\"([^\"]*)\"/.exec(meta[2]!)?.[1] : undefined;\n const label = as?.[1]!.trim() ?? alias;\n return { kind: 'participant', id, type, ...(label !== undefined ? { label } : {}), create, line };\n}\n\n/** One line's statement, or `null` for a blank or a comment. */\nfunction statementOf(text: string, line: number, dropped: string[]): SeqStmt | null {\n const t = text.trim().replace(/;$/, '').trim();\n if (t === '' || t.startsWith('%%')) {\n if (/^%%\\{.*\\}%%$/.test(t)) dropped.push('Mermaid configuration directives were dropped.');\n return null;\n }\n const word = /^\\S+/.exec(t)![0].toLowerCase();\n const rest = t.slice(word.length).trim();\n const declare = DECLARE.exec(t);\n if (declare) return declaration(declare[3]!, declare[2]!, declare[1] !== undefined, line);\n if (word === 'end') return { kind: 'end', line };\n if (word in FRAGMENTS) return { kind: 'fragment', word: word as FragmentWord, label: rest, line };\n if (word === 'else' || word === 'and' || word === 'option') return { kind: 'section', word, label: rest, line };\n if (word === 'rect') return { kind: 'rect', color: rest, line };\n if (word === 'box') return { kind: 'box', rest, line };\n if (word === 'activate' || word === 'deactivate' || word === 'destroy') return { kind: word, participant: rest, line };\n if (word === 'autonumber') return { kind: 'autonumber', args: rest === '' ? [] : rest.split(/\\s+/), line };\n if (/^title\\b/i.test(t)) return { kind: 'title', text: t.replace(/^title\\s*:?\\s*/i, ''), line };\n if (/^acc(Title|Descr)\\b/.test(t)) return { kind: 'dropped', what: 'Accessibility titles and descriptions were dropped.', line };\n if (/^(links?|properties|details)\\b/i.test(t)) return { kind: 'dropped', what: 'Participant menus (links, properties, details) were dropped.', line };\n const note = NOTE.exec(t);\n if (note) {\n const over = note[2]!.split(',').map((s) => s.trim()).filter((s) => s !== '');\n return { kind: 'note', place: note[1]!.toLowerCase() as 'over', over, text: note[3]!, line };\n }\n const msg = MESSAGE.exec(t);\n if (msg) {\n const arrow = ARROWS.find(([a]) => a === msg[2])![1];\n return { kind: 'message', from: msg[1]!.trim(), to: msg[4]!.trim(), arrow, mark: msg[3] as '+' | '-' | '', text: msg[5] ?? '', line };\n }\n throw lineError('Mermaid', line, `\"${t}\" is not a sequence diagram statement`);\n}\n\n/** The lines of `text` after its front matter, numbered from the file's first line, and the front matter's title. */\nfunction body(text: string, dropped: string[]): { lines: string[]; first: number; title?: string } {\n const lines = text.split(/\\r\\n?|\\n/);\n if (!/^---\\s*$/.test(lines[0] ?? '')) return { lines, first: 1 };\n const close = lines.findIndex((l, i) => i > 0 && /^---\\s*$/.test(l));\n if (close < 0) throw lineError('Mermaid', 1, 'the front matter is never closed with ---');\n const front = lines.slice(1, close);\n const raw = front.map((l) => /^title:\\s*(.*)$/.exec(l)?.[1]).find((t) => t !== undefined)?.trim();\n if (front.some((l) => /^(config|displayMode):/.test(l))) dropped.push('Mermaid configuration in the front matter was dropped.');\n const title = raw === undefined ? undefined : /^([\"']).*\\1$/.test(raw) ? raw.slice(1, -1) : raw;\n return { lines: lines.slice(close + 1), first: close + 2, ...(title !== undefined ? { title } : {}) };\n}\n\n/** Parses a Mermaid sequence diagram into statements. Throws, naming the line, on text that is not one. */\nexport function parseSequence(text: string): ParsedSequence {\n const dropped: string[] = [];\n const { lines, first, title } = body(text, dropped);\n const stmts: SeqStmt[] = [];\n let header = false;\n let inDescr = false;\n lines.forEach((raw, k) => {\n const line = first + k;\n if (inDescr) {\n inDescr = !raw.includes('}');\n return;\n }\n if (/^\\s*accDescr\\s*\\{/.test(raw)) {\n dropped.push('Accessibility titles and descriptions were dropped.');\n inDescr = !raw.includes('}');\n return;\n }\n if (!header) {\n const t = raw.trim();\n if (t === '' || t.startsWith('%%')) {\n statementOf(t, line, dropped);\n return;\n }\n if (!/^sequenceDiagram\\b/.test(t)) throw lineError('Mermaid', line, `expected \"sequenceDiagram\", found \"${t}\"`);\n header = true;\n return;\n }\n const stmt = statementOf(raw, line, dropped);\n if (stmt !== null) stmts.push(stmt);\n });\n if (!header) throw lineError('Mermaid', first, 'expected \"sequenceDiagram\", found the end of the file');\n return { stmts, ...(title !== undefined ? { title } : {}), dropped };\n}\n","/**\n * `readMermaidSequence` — a Mermaid `sequenceDiagram` as a one-page document\n * holding a sequence page. Its title is the page's name.\n */\nimport { sequenceLayout, type NodeStyle, type SeqBox, type SeqFragment, type SeqParticipant, type SeqStep, type SequenceData } from '@weasel-js/diagram';\nimport type { ImportResult, SequencePage } from '../../document';\nimport { Warnings } from '../../graphRead';\nimport { lineError } from '../../lineError';\nimport { PAGE_MARGIN } from '../../pageLayout';\nimport { FRAGMENTS, parseSequence, type SeqStmt } from './parse';\nimport { TYPE_OUTLINES, plainText } from './syntax';\n\ntype Draft = Omit<SeqFragment, 'sections'> & { sections: { label?: string; steps: SeqStep[] }[] };\ntype Open = { kind: 'fragment'; frag: Draft; line: number } | { kind: 'box'; box: SeqBox & { members: string[] }; line: number };\n\n/** A box's or a rect's color, and the box's label after it. */\nfunction colorAndLabel(rest: string): { color?: string; label?: string } {\n const color = /^(rgba?\\([^)]*\\)|hsla?\\([^)]*\\)|#[0-9a-f]{3,8}\\b|transparent\\b|[a-z]+(?=\\s|$))/i.exec(rest)?.[0];\n const isColor = color !== undefined && (!/^[a-z]+$/i.test(color) || CSS_NAMES.has(color.toLowerCase().replace(/gr[ae]y/, 'gray')));\n const label = (isColor ? rest.slice(color!.length) : rest).trim();\n return { ...(isColor && color!.toLowerCase() !== 'transparent' ? { color } : {}), ...(label !== '' ? { label: plainText(label) } : {}) };\n}\n\n/** The CSS color names Mermaid takes as a box's first word, each gray among them in its \"a\" spelling, as a name is matched. */\nconst CSS_NAMES = new Set((\n 'aliceblue antiquewhite aqua aquamarine azure beige bisque black blanchedalmond blue blueviolet brown burlywood cadetblue chartreuse '\n + 'chocolate coral cornflowerblue cornsilk crimson cyan darkblue darkcyan darkgoldenrod darkgray darkgreen darkkhaki darkmagenta '\n + 'darkolivegreen darkorange darkorchid darkred darksalmon darkseagreen darkslateblue darkslategray darkturquoise darkviolet '\n + 'deeppink deepskyblue dimgray dodgerblue firebrick floralwhite forestgreen fuchsia gainsboro ghostwhite gold goldenrod gray green '\n + 'greenyellow honeydew hotpink indianred indigo ivory khaki lavender lavenderblush lawngreen lemonchiffon lightblue lightcoral '\n + 'lightcyan lightgoldenrodyellow lightgray lightgreen lightpink lightsalmon lightseagreen lightskyblue lightslategray '\n + 'lightsteelblue lightyellow lime limegreen linen magenta maroon mediumaquamarine mediumblue mediumorchid mediumpurple '\n + 'mediumseagreen mediumslateblue mediumspringgreen mediumturquoise mediumvioletred midnightblue mintcream mistyrose moccasin navajowhite '\n + 'navy oldlace olive olivedrab orange orangered orchid palegoldenrod palegreen paleturquoise palevioletred papayawhip peachpuff peru pink '\n + 'plum powderblue purple rebeccapurple red rosybrown royalblue saddlebrown salmon sandybrown seagreen seashell sienna silver skyblue '\n + 'slateblue slategray snow springgreen steelblue tan teal thistle tomato turquoise violet wheat white whitesmoke yellow yellowgreen'\n).split(' '));\n\nclass SequenceReader {\n readonly warnings = new Warnings();\n readonly participants = new Map<string, SeqParticipant>();\n readonly root: SeqStep[] = [];\n readonly boxes: SeqBox[] = [];\n readonly open: Open[] = [];\n readonly counts = { m: 0, n: 0, f: 0, b: 0 };\n autonumber: number | undefined;\n title: string | undefined;\n\n id(prefix: keyof SequenceReader['counts']): string {\n return `${prefix}${++this.counts[prefix]}`;\n }\n\n /** The list a step goes in: the innermost open fragment's last section, else the top level. */\n get list(): SeqStep[] {\n for (let i = this.open.length - 1; i >= 0; i--) {\n const o = this.open[i]!;\n if (o.kind === 'fragment') return o.frag.sections.at(-1)!.steps;\n }\n return this.root;\n }\n\n /** `id`, declared now if it was not: Mermaid draws a participant a message first names. */\n named(id: string): string {\n if (!this.participants.has(id)) this.participants.set(id, { id });\n return id;\n }\n\n declare(s: Extract<SeqStmt, { kind: 'participant' }>): void {\n if (!(s.type in TYPE_OUTLINES)) this.warnings.list('Participant types Mermaid has but this reader draws as a box:', s.type);\n const outline = TYPE_OUTLINES[s.type];\n const label = s.label === undefined ? undefined : plainText(s.label);\n const had = this.participants.get(s.id);\n this.participants.set(s.id, {\n ...had, id: s.id, ...(outline !== undefined ? { outline } : {}), ...(label !== undefined && label !== s.id ? { label } : {}),\n });\n const box = this.open.at(-1);\n if (box?.kind === 'box' && !box.box.members.includes(s.id)) box.box.members.push(s.id);\n if (s.create) this.list.push({ kind: 'create', participant: s.id });\n }\n\n stmt(s: SeqStmt): void {\n switch (s.kind) {\n case 'participant': return this.declare(s);\n case 'message': return this.message(s);\n case 'note': {\n const side = s.place === 'over' ? undefined : s.place === 'left of' ? 'left' as const : 'right' as const;\n const over = s.over.map((id) => this.named(id));\n this.list.push({ kind: 'note', id: this.id('n'), over, ...(side ? { side } : {}), text: plainText(s.text) });\n return;\n }\n case 'activate': case 'deactivate': case 'destroy':\n this.list.push({ kind: s.kind, participant: this.named(s.participant) });\n return;\n case 'fragment': {\n const frag: Draft = { kind: 'fragment', id: this.id('f'), type: s.word, sections: [{ ...(s.label ? { label: plainText(s.label) } : {}), steps: [] }] };\n this.list.push(frag);\n this.open.push({ kind: 'fragment', frag, line: s.line });\n return;\n }\n case 'rect': {\n const { color } = colorAndLabel(s.color);\n const frag: Draft = { kind: 'fragment', id: this.id('f'), type: 'region', sections: [{ steps: [] }], ...(color ? { colors: { fill: color } } : {}) };\n this.list.push(frag);\n this.open.push({ kind: 'fragment', frag, line: s.line });\n return;\n }\n case 'section': return this.section(s);\n case 'box': {\n if (this.open.length > 0) throw lineError('Mermaid', s.line, 'a box must be at the top level');\n const { color, label } = colorAndLabel(s.rest);\n const box = { id: this.id('b'), members: [] as string[], ...(label ? { label } : {}), ...(color ? { colors: { fill: color } as Partial<NodeStyle> } : {}) };\n this.boxes.push(box);\n this.open.push({ kind: 'box', box, line: s.line });\n return;\n }\n case 'end':\n if (this.open.pop() === undefined) throw lineError('Mermaid', s.line, '\"end\" closes nothing');\n return;\n case 'autonumber': return this.numbering(s.args, s.line);\n case 'title': this.title = plainText(s.text); return;\n case 'dropped': this.warnings.add(s.what);\n }\n }\n\n message(s: Extract<SeqStmt, { kind: 'message' }>): void {\n const { arrow } = s;\n this.list.push({\n kind: 'message', id: this.id('m'), from: this.named(s.from), to: this.named(s.to), line: arrow.line, head: arrow.head,\n ...(arrow.both ? { both: true } : {}), ...(arrow.async ? { async: true } : {}),\n ...(s.text.trim() !== '' ? { text: plainText(s.text) } : {}),\n ...(s.mark === '+' ? { activate: 'to' as const } : s.mark === '-' ? { deactivate: 'from' as const } : {}),\n });\n }\n\n section(s: Extract<SeqStmt, { kind: 'section' }>): void {\n const top = this.open.at(-1);\n if (top?.kind !== 'fragment' || FRAGMENTS[top.frag.type as keyof typeof FRAGMENTS] !== s.word) {\n throw lineError('Mermaid', s.line, `\"${s.word}\" is not inside ${s.word === 'else' ? 'an alt' : s.word === 'and' ? 'a par' : 'a critical'}`);\n }\n top.frag.sections.push({ ...(s.label ? { label: plainText(s.label) } : {}), steps: [] });\n }\n\n numbering(args: readonly string[], line: number): void {\n if (args[0]?.toLowerCase() === 'off') {\n this.autonumber = undefined;\n return;\n }\n const [start = 1, step = 1] = args.map(Number);\n if (!Number.isFinite(start) || !Number.isFinite(step)) throw lineError('Mermaid', line, `\"autonumber ${args.join(' ')}\" is not a start and a step`);\n if (step !== 1) this.warnings.add('Autonumber steps other than 1 were dropped; messages count up by one.');\n this.autonumber = start;\n }\n}\n\n/** Reads a Mermaid sequence diagram. Throws, naming the line, on text that is not one. */\nexport function readMermaidSequence(text: string): ImportResult {\n const parsed = parseSequence(text);\n const r = new SequenceReader();\n for (const d of parsed.dropped) r.warnings.add(d);\n for (const s of parsed.stmts) r.stmt(s);\n const unclosed = r.open.at(-1);\n if (unclosed !== undefined) throw lineError('Mermaid', unclosed.line, `this ${unclosed.kind === 'box' ? 'box' : unclosed.frag.type} is never closed with \"end\"`);\n const data: SequenceData = {\n participants: [...r.participants.values()], steps: r.root,\n ...(r.boxes.length > 0 ? { boxes: r.boxes } : {}), ...(r.autonumber !== undefined ? { autonumber: r.autonumber } : {}),\n };\n const title = r.title ?? parsed.title;\n const size = sequenceLayout(data);\n const page: SequencePage = {\n kind: 'sequence', id: 'page-1', ...(title !== undefined ? { name: title } : {}),\n width: size.width + PAGE_MARGIN * 2, height: size.height + PAGE_MARGIN * 2, data,\n };\n return { document: { pages: [page] }, warnings: r.warnings.all() };\n}\n","/** `writeMermaidSequence` — a sequence page as a Mermaid `sequenceDiagram`. */\nimport type { SeqParticipant, SeqStep, SequenceData } from '@weasel-js/diagram';\nimport type { ExportResult, SequencePage } from '../../document';\nimport { Warnings } from '../../graphRead';\nimport { arrowOf, mermaidSeqText, typeOf } from './syntax';\n\nconst SECTION_WORDS = { loop: null, alt: 'else', opt: null, par: 'and', critical: 'option', break: null, region: null } as const;\n\nclass SequenceWriter {\n readonly lines: string[] = ['sequenceDiagram'];\n readonly warnings = new Warnings();\n\n constructor(readonly data: SequenceData) {}\n\n out(depth: number, text: string): void {\n this.lines.push(`${' '.repeat(depth)}${text}`);\n }\n\n /** A participant's declaration: its type, its label, and `create` before it where its head is created. */\n declaration(p: SeqParticipant, create: boolean): string {\n let type = typeOf(p.outline);\n if (type === null) {\n this.warnings.list('Outlines Mermaid has no participant type for, written as plain participants:', String(p.outline));\n type = 'participant';\n }\n if (p.colors !== undefined || p.style !== undefined) this.warnings.add('Participants\\' colors and roles were dropped.');\n const head = type === 'participant' || type === 'actor' ? `${type} ${p.id}` : `participant ${p.id}@{ \"type\" : \"${type}\" }`;\n const label = p.label !== undefined && p.label !== p.id ? ` as ${mermaidSeqText(p.label)}` : '';\n return `${create ? 'create ' : ''}${head}${label}`;\n }\n\n participants(created: ReadonlySet<string>): void {\n const boxOf = new Map<string, NonNullable<SequenceData['boxes']>[number]>();\n for (const b of this.data.boxes ?? []) for (const m of b.members) if (!boxOf.has(m)) boxOf.set(m, b);\n let open: string | null = null;\n for (const p of this.data.participants) {\n if (created.has(p.id)) continue;\n const box = boxOf.get(p.id);\n if (open !== null && open !== box?.id) {\n this.out(1, 'end');\n open = null;\n }\n if (box !== undefined && open !== box.id) {\n const color = box.colors?.fill;\n if (box.colors !== undefined && Object.keys(box.colors).some((k) => k !== 'fill')) this.warnings.add('Box colors other than the fill were dropped.');\n this.out(1, ['box', color, box.label === undefined ? undefined : mermaidSeqText(box.label)].filter((s) => s !== undefined).join(' '));\n open = box.id;\n }\n this.out(open === null ? 1 : 2, this.declaration(p, false));\n }\n if (open !== null) this.out(1, 'end');\n }\n\n steps(steps: readonly SeqStep[], depth: number): void {\n for (const s of steps) {\n if (s.kind === 'message') {\n const { arrow, dropsBoth } = arrowOf(s);\n if (dropsBoth) this.warnings.add('A second head on a message whose head is not an arrow was dropped.');\n const mark = s.activate === 'to' ? '+' : s.deactivate === 'from' ? '-' : '';\n this.out(depth, `${s.from}${arrow}${mark}${s.to}: ${mermaidSeqText(s.text ?? '')}`.trimEnd());\n if (s.activate === 'from') this.out(depth, `activate ${s.from}`);\n if (s.deactivate === 'to') this.out(depth, `deactivate ${s.to}`);\n if (s.activate === 'to' && s.deactivate === 'from') this.out(depth, `deactivate ${s.from}`);\n } else if (s.kind === 'note') {\n const place = s.side === 'left' ? 'left of' : s.side === 'right' ? 'right of' : 'over';\n this.out(depth, `Note ${place} ${s.over.join(',')}: ${mermaidSeqText(s.text)}`);\n } else if (s.kind === 'create') {\n const p = this.data.participants.find((q) => q.id === s.participant);\n if (p !== undefined) this.out(depth, this.declaration(p, true));\n } else if (s.kind === 'fragment') {\n const label = (k: number) => (s.sections[k]?.label === undefined ? '' : ` ${mermaidSeqText(s.sections[k]!.label!)}`);\n if (s.type === 'region') {\n if (s.sections.some((sec) => sec.label !== undefined)) this.warnings.add('Labels on colored regions were dropped.');\n this.out(depth, `rect ${s.colors?.fill ?? 'rgba(128, 128, 128, 0.1)'}`);\n } else {\n if (s.colors !== undefined) this.warnings.add('Colors on loops, alts, and other fragments were dropped.');\n this.out(depth, `${s.type}${label(0)}`);\n }\n s.sections.forEach((sec, k) => {\n if (k > 0) {\n const word = SECTION_WORDS[s.type];\n if (word === null) this.warnings.add(`A ${s.type} holds one section; the others were written into its first.`);\n else this.out(depth, `${word}${label(k)}`);\n }\n this.steps(sec.steps, depth + 1);\n });\n this.out(depth, 'end');\n } else {\n this.out(depth, `${s.kind} ${s.participant}`);\n }\n }\n }\n}\n\n/** Every participant a `create` step heads, at any depth. */\nfunction createdIn(steps: readonly SeqStep[], out = new Set<string>()): Set<string> {\n for (const s of steps) {\n if (s.kind === 'create') out.add(s.participant);\n if (s.kind === 'fragment') for (const sec of s.sections) createdIn(sec.steps, out);\n }\n return out;\n}\n\n/** Writes a sequence page as Mermaid. Its name is the diagram's title. */\nexport function writeMermaidSequence(page: SequencePage): ExportResult {\n const w = new SequenceWriter(page.data);\n if (page.name !== undefined) w.out(1, `title ${mermaidSeqText(page.name)}`);\n if (page.data.autonumber !== undefined) w.out(1, page.data.autonumber === 1 ? 'autonumber' : `autonumber ${page.data.autonumber}`);\n w.participants(createdIn(page.data.steps));\n w.steps(page.data.steps, 1);\n return { text: `${w.lines.join('\\n')}\\n`, warnings: w.warnings.all() };\n}\n","/** A Mermaid requirement diagram's grammar, read to statements with each one's line. */\nimport { lineError } from '../../lineError';\nimport { statementsOf, type MermaidSource } from '../common/lines';\nimport { unquote } from '../common/text';\n\n/** The block keywords: the requirement kinds, and `element`. */\nexport const BLOCK_KINDS = [\n 'requirement', 'functionalRequirement', 'interfaceRequirement', 'performanceRequirement', 'physicalRequirement', 'designConstraint', 'element',\n] as const;\n\n/** How one block relates to another. */\nexport const RELATIONS = ['contains', 'copies', 'derives', 'satisfies', 'verifies', 'refines', 'traces'] as const;\n\nexport type RequirementStmt =\n | { kind: 'block'; type: (typeof BLOCK_KINDS)[number]; name: string; fields: [string, string][]; line: number }\n | { kind: 'relation'; from: string; to: string; type: (typeof RELATIONS)[number]; line: number }\n | { kind: 'direction'; value: string; line: number }\n | { kind: 'style'; text: string; line: number };\n\n/** A whole requirement diagram. */\nexport interface RequirementDiagram {\n source: MermaidSource;\n stmts: RequirementStmt[];\n}\n\nconst NAME = String.raw`(\"[^\"]*\"|[\\w-]+)`;\nconst TYPE = `(${RELATIONS.join('|')})`;\nconst BLOCK = new RegExp(`^(${BLOCK_KINDS.join('|')})\\\\s+${NAME}\\\\s*\\\\{$`);\nconst FORWARD = new RegExp(`^${NAME}\\\\s*-\\\\s*${TYPE}\\\\s*->\\\\s*${NAME}$`);\nconst BACKWARD = new RegExp(`^${NAME}\\\\s*<-\\\\s*${TYPE}\\\\s*-\\\\s*${NAME}$`);\n\n/** Parses a Mermaid requirement diagram. Throws, naming the line, on text that is not one. */\nexport function parseRequirementDiagram(text: string): RequirementDiagram {\n const source = statementsOf(text);\n if (source.header.text !== 'requirementDiagram') {\n throw lineError('Mermaid', source.header.line, `expected a requirementDiagram header, found \"${source.header.text}\"`);\n }\n const stmts: RequirementStmt[] = [];\n const body = source.body;\n for (let i = 0; i < body.length; i++) {\n const { text: t, line } = body[i]!;\n const block = BLOCK.exec(t);\n const fwd = FORWARD.exec(t);\n const back = BACKWARD.exec(t);\n if (block !== null) {\n const fields: [string, string][] = [];\n for (i++; i < body.length && body[i]!.text !== '}'; i++) {\n const f = /^(\\w+)\\s*:\\s*(.*)$/.exec(body[i]!.text);\n if (f === null) throw lineError('Mermaid', body[i]!.line, `cannot read \"${body[i]!.text}\" as a field: a name, a colon, and a value`);\n fields.push([f[1]!, unquote(f[2]!.trim())]);\n }\n if (i >= body.length) throw lineError('Mermaid', line, `${block[1]} ${block[2]} is never closed`);\n stmts.push({ kind: 'block', type: block[1] as (typeof BLOCK_KINDS)[number], name: unquote(block[2]!), fields, line });\n } else if (fwd !== null) {\n stmts.push({ kind: 'relation', from: unquote(fwd[1]!), type: fwd[2] as (typeof RELATIONS)[number], to: unquote(fwd[3]!), line });\n } else if (back !== null) {\n stmts.push({ kind: 'relation', from: unquote(back[3]!), type: back[2] as (typeof RELATIONS)[number], to: unquote(back[1]!), line });\n } else if (/^direction\\s+(TB|TD|BT|LR|RL)$/.test(t)) {\n stmts.push({ kind: 'direction', value: t.split(/\\s+/)[1]!, line });\n } else if (/^(classDef|class|style)\\s/.test(t)) {\n stmts.push({ kind: 'style', text: t, line });\n } else {\n throw lineError('Mermaid', line, `cannot read \"${t}\" as a requirement, an element, or a relationship`);\n }\n }\n return { source, stmts };\n}\n","/**\n * A Mermaid requirement diagram as a one-page document: each requirement or\n * element a box of its `<<kind>>` and name rows, a divider, and a `field` row\n * per field, and each relationship a dashed arrow labeled `<<kind>>`.\n */\nimport type { DataEdge, DataNode, Row } from '@weasel-js/diagram';\nimport type { ImportResult } from '../../document';\nimport { Warnings, graphPage } from '../../graphRead';\nimport { DIRECTIONS } from '../class/read';\nimport { pageNameOf } from '../common/lines';\nimport { StyleSheet } from '../common/styles';\nimport { parseRequirementDiagram } from './parse';\n\n/** Reads a Mermaid requirement diagram into a one-page document of `notation` `'requirement'`. Throws, naming the line, on text that is not one. */\nexport function readRequirementDiagram(text: string): ImportResult {\n const { source, stmts } = parseRequirementDiagram(text);\n const warnings = new Warnings();\n const styles = new StyleSheet(warnings);\n const blocks = new Map<string, { type: string; fields: [string, string][] } | null>();\n const edges: DataEdge[] = [];\n let direction: string | undefined;\n for (const s of stmts) {\n if (s.kind === 'block') blocks.set(s.name, { type: s.type, fields: s.fields });\n else if (s.kind === 'relation') {\n for (const end of [s.from, s.to]) if (!blocks.has(end)) blocks.set(end, null);\n edges.push({ from: s.from, to: s.to, label: `<<${s.type}>>`, colors: { dash: [4, 4] } });\n } else if (s.kind === 'direction') direction = s.value;\n else styles.statement(s.text);\n }\n const nodes: DataNode[] = [...blocks].map(([id, b]) => {\n const rows: Row[] = b === null ? [{ kind: 'label', text: id }] : [\n { kind: 'label', text: `<<${b.type}>>` }, { kind: 'label', text: id },\n ...(b.fields.length > 0 ? [{ kind: 'divider' } as const] : []),\n ...b.fields.map(([label, value]): Row => ({ kind: 'field', label, value })),\n ];\n const colors = styles.colorsOf(id);\n return { id, rows, ...(colors !== undefined ? { colors } : {}) };\n });\n if ([...blocks.values()].includes(null)) warnings.add('Mermaid relationships named blocks the diagram never declares; they were read as plain boxes.');\n const name = pageNameOf(source, warnings);\n const dir = direction !== undefined ? DIRECTIONS[direction] : undefined;\n const page = graphPage({ ...(name !== undefined ? { name } : {}), ...(dir !== undefined ? { direction: dir } : {}), nodes, edges, containers: [] });\n return { document: { pages: [{ ...page, notation: 'requirement' }] }, warnings: warnings.all() };\n}\n","/** One graph page as a Mermaid requirement diagram: boxes as requirements and elements, each named by its name row,\n * and edges as relationships. */\nimport type { DataNode, LayoutDirection, Row } from '@weasel-js/diagram';\nimport type { DiagramDocument, ExportResult, WriteOptions } from '../../document';\nimport { graphOut } from '../../graphWrite';\nimport type { Warnings } from '../../graphRead';\nimport { titleLines } from '../common/lines';\nimport { styleProps } from '../common/styles';\nimport { BLOCK_KINDS, RELATIONS } from './parse';\n\nconst HEADER: Readonly<Record<LayoutDirection, string>> = { down: 'TB', up: 'BT', right: 'LR', left: 'RL' };\n\n/** A name as Mermaid reads it: bare when it is one word, else quoted. */\nconst nameOf = (name: string): string => (/^[\\w-]+$/.test(name) ? name : `\"${name.replace(/\"/g, \"'\")}\"`);\n\n/** A box's block kind, from a `<<kind>>` row, and its fields; a text row past the divider reads as `key: value`. */\nfunction blockOf(node: DataNode, warnings: Warnings): { type: string; fields: [string, string][] } {\n const rows: readonly Row[] = node.rows ?? (node.lines ?? []).map((text) => ({ kind: 'label', text }));\n const kind = rows.find((r) => r.kind === 'label' && /^<<\\w+>>$/.test(r.text)) as { text: string } | undefined;\n const type = kind?.text.slice(2, -2);\n const known = BLOCK_KINDS.find((k) => k === type);\n if (type !== undefined && known === undefined) warnings.add('Mermaid has six requirement kinds and elements; others were written as requirements.');\n const fields: [string, string][] = [];\n let past = false;\n for (const r of rows) {\n if (r.kind === 'divider') past = true;\n else if (r.kind === 'field') fields.push([r.label, r.value]);\n else if (r.kind === 'label' && past) {\n const kv = /^(\\w+)\\s*:\\s*(.*)$/.exec(r.text);\n if (kv !== null) fields.push([kv[1]!, kv[2]!]);\n else warnings.add('Mermaid requirement fields are named; rows that name none were dropped.');\n }\n }\n return { type: known ?? 'requirement', fields };\n}\n\n/** A box's name: its first text row past the `<<kind>>` one, else its id. */\nfunction blockName(node: DataNode): string {\n const rows: readonly Row[] = node.rows ?? (node.lines ?? []).map((text) => ({ kind: 'label', text }));\n const labels = rows.flatMap((r) => (r.kind === 'label' ? [r.text] : []));\n const named = labels[0] !== undefined && /^<<\\w+>>$/.test(labels[0]) ? labels[1] : labels[0];\n return named !== undefined && named.trim() !== '' ? named.trim() : node.id;\n}\n\n/** Each box's name, a name two boxes share made distinct by a number. */\nfunction blockNames(nodes: readonly DataNode[]): Map<string, string> {\n const taken = new Set<string>();\n return new Map(nodes.map((n) => {\n const base = blockName(n);\n let name = base;\n for (let k = 2; taken.has(name); k++) name = `${base} ${k}`;\n taken.add(name);\n return [n.id, name];\n }));\n}\n\n/** Writes the page `opts.page` names, else the first, as a Mermaid requirement diagram. */\nexport function writeRequirementDiagram(doc: DiagramDocument, opts?: WriteOptions): ExportResult {\n const out = graphOut(doc, opts, 'Mermaid');\n if (out === null) return { text: 'requirementDiagram\\n', warnings: [] };\n const { page, warnings } = out;\n if (out.clusters.length > 0) warnings.add('Mermaid requirement diagrams have no containers; they were dropped.');\n const lines = [...titleLines(page.name), 'requirementDiagram'];\n if (page.direction !== undefined && page.direction !== 'down') lines.push(` direction ${HEADER[page.direction]}`);\n const names = blockNames(page.data.nodes);\n const name = (id: string) => nameOf(names.get(id) ?? id);\n for (const n of page.data.nodes) {\n const { type, fields } = blockOf(n, warnings);\n lines.push(` ${type} ${name(n.id)} {`, ...fields.map(([k, v]) => ` ${k}: ${v}`), ' }');\n }\n for (const e of out.edges) {\n if (!out.byId.has(e.from) || !out.byId.has(e.to)) continue;\n const type = /^<<(\\w+)>>$/.exec(e.label ?? '')?.[1];\n const known = RELATIONS.find((r) => r === type);\n if (known === undefined) warnings.add('Mermaid relationships are one of seven kinds, named in their label; others were written as traces.');\n lines.push(` ${name(e.from)} - ${known ?? 'traces'} -> ${name(e.to)}`);\n }\n for (const n of page.data.nodes) {\n const props = n.colors !== undefined ? styleProps(n.colors) : '';\n if (props !== '' && /^[\\w-]+$/.test(names.get(n.id)!)) lines.push(` style ${names.get(n.id)} ${props}`);\n }\n return { text: `${lines.join('\\n')}\\n`, warnings: warnings.all() };\n}\n","/** A Mermaid state diagram's grammar, read to statements with each one's line. */\nimport { lineError } from '../../lineError';\nimport { statementsOf, type MermaidSource, type Statement } from '../common/lines';\n\n/** A state's kind, when `<<…>>` names one. */\nexport type StateType = 'fork' | 'join' | 'choice';\n\nexport type StateStmt =\n | { kind: 'transition'; from: string; to: string; label?: string; line: number }\n | { kind: 'state'; id: string; label?: string; type?: StateType; line: number }\n | { kind: 'describe'; id: string; text: string; line: number }\n | { kind: 'composite'; id: string; label?: string; regions: StateStmt[][]; line: number }\n | { kind: 'note'; side: 'left' | 'right'; id: string; text: string; line: number }\n | { kind: 'assign'; id: string; name: string; line: number }\n | { kind: 'direction'; value: string; line: number }\n | { kind: 'style'; text: string; line: number }\n | { kind: 'other'; keyword: string; line: number };\n\n/** A whole state diagram. */\nexport interface StateDiagram {\n source: MermaidSource;\n stmts: StateStmt[];\n}\n\n/** A state's id, `[*]` for the start or end of its scope, and the class `:::` gives it. */\nconst END = String.raw`(\\[\\*\\]|[\\w-]+)(?::::([\\w-]+))?`;\nconst TRANSITION = new RegExp(`^${END}\\\\s*-->\\\\s*${END}\\\\s*(?::\\\\s*(.*))?$`);\nconst STATE_AS = /^state\\s+\"([^\"]*)\"\\s+as\\s+([\\w-]+)\\s*(\\{)?$/;\nconst STATE_TYPE = /^state\\s+([\\w-]+)\\s+<<\\s*(fork|join|choice)\\s*>>$/;\nconst STATE = /^state\\s+([\\w-]+)\\s*(\\{)?$/;\nconst BARE = /^([\\w-]+)(?::::([\\w-]+))?$/;\nconst DESCRIBE = /^([\\w-]+)\\s*:\\s*(.+)$/;\nconst NOTE = /^note\\s+(left|right)\\s+of\\s+([\\w-]+)\\s*(?::\\s*(.*))?$/;\n\nclass StateParser {\n i = 0;\n\n constructor(readonly lines: readonly Statement[]) {}\n\n /** The regions of the block opened on line `opened`, split at `--`, to its `}`; the whole diagram when `opened` is null. */\n block(opened: number | null): StateStmt[][] {\n const regions: StateStmt[][] = [[]];\n while (this.i < this.lines.length) {\n const s = this.lines[this.i++]!;\n if (s.text === '}') {\n if (opened === null) throw lineError('Mermaid', s.line, '\"}\" closes no state');\n return regions;\n }\n if (s.text === '--') {\n if (opened === null) throw lineError('Mermaid', s.line, '\"--\" divides only a composite state');\n regions.push([]);\n continue;\n }\n regions.at(-1)!.push(...this.stmt(s));\n }\n if (opened !== null) throw lineError('Mermaid', opened, 'a composite state opened here is never closed');\n return regions;\n }\n\n stmt({ text, line }: Statement): StateStmt[] {\n const t = TRANSITION.exec(text);\n if (t !== null) {\n const [, from, fromClass, to, toClass, label] = t as unknown as (string | undefined)[];\n return [\n { kind: 'transition', from: from!, to: to!, ...(label !== undefined && label.trim() !== '' ? { label: label.trim() } : {}), line },\n ...(fromClass !== undefined ? [{ kind: 'assign' as const, id: from!, name: fromClass, line }] : []),\n ...(toClass !== undefined ? [{ kind: 'assign' as const, id: to!, name: toClass, line }] : []),\n ];\n }\n const as = STATE_AS.exec(text);\n if (as !== null) return [as[3] !== undefined ? this.composite(as[2]!, as[1]!, line) : { kind: 'state', id: as[2]!, label: as[1]!, line }];\n const typed = STATE_TYPE.exec(text);\n if (typed !== null) return [{ kind: 'state', id: typed[1]!, type: typed[2] as StateType, line }];\n const st = STATE.exec(text);\n if (st !== null) return [st[2] !== undefined ? this.composite(st[1]!, undefined, line) : { kind: 'state', id: st[1]!, line }];\n const note = NOTE.exec(text);\n if (note !== null) return [{ kind: 'note', side: note[1] as 'left' | 'right', id: note[2]!, text: note[3] ?? this.noteBody(line), line }];\n const dir = /^direction\\s+(TB|TD|BT|LR|RL)$/.exec(text);\n if (dir !== null) return [{ kind: 'direction', value: dir[1]!, line }];\n if (/^(classDef|class|style)\\s/.test(text)) return [{ kind: 'style', text, line }];\n const bare = BARE.exec(text);\n if (bare !== null) {\n return [{ kind: 'state', id: bare[1]!, line }, ...(bare[2] !== undefined ? [{ kind: 'assign' as const, id: bare[1]!, name: bare[2], line }] : [])];\n }\n const desc = DESCRIBE.exec(text);\n if (desc !== null) return [{ kind: 'describe', id: desc[1]!, text: desc[2]!.trim(), line }];\n const keyword = /^(hide|scale|click)\\b/.exec(text);\n if (keyword !== null) return [{ kind: 'other', keyword: keyword[1]!, line }];\n throw lineError('Mermaid', line, `cannot read \"${text}\" as a state diagram statement`);\n }\n\n composite(id: string, label: string | undefined, line: number): StateStmt {\n return { kind: 'composite', id, ...(label !== undefined ? { label } : {}), regions: this.block(line), line };\n }\n\n /** A note's lines up to `end note`. */\n noteBody(opened: number): string {\n const out: string[] = [];\n for (;;) {\n const s = this.lines[this.i++];\n if (s === undefined) throw lineError('Mermaid', opened, 'a note opened here has no \"end note\"');\n if (s.text === 'end note') return out.join('\\n');\n out.push(s.text);\n }\n }\n}\n\n/** Parses a Mermaid state diagram, `stateDiagram` or `stateDiagram-v2`. Throws, naming the line, on text that is not one. */\nexport function parseStateDiagram(text: string): StateDiagram {\n const source = statementsOf(text);\n if (!/^stateDiagram(-v2)?$/.test(source.header.text)) {\n throw lineError('Mermaid', source.header.line, `expected a stateDiagram header, found \"${source.header.text}\"`);\n }\n return { source, stmts: new StateParser(source.body).block(null)[0]! };\n}\n","/**\n * A Mermaid state diagram as a one-page document: states as rounded boxes,\n * `[*]` as each scope's `start` and `end`, forks and joins as `bar`s, choices\n * as diamonds, composite states as containers (a pool of lanes when `--`\n * divides them into concurrent regions), and notes as `note` shapes.\n */\nimport type { DataContainer, DataEdge, DataNode, LayoutDirection } from '@weasel-js/diagram';\nimport type { ImportResult } from '../../document';\nimport { Membership, Warnings, decodeEntities, graphPage } from '../../graphRead';\nimport { DIRECTIONS } from '../class/read';\nimport { pageNameOf } from '../common/lines';\nimport { StyleSheet } from '../common/styles';\nimport { parseStateDiagram, type StateStmt, type StateType } from './parse';\n\n/** The id `[*]` reads as in `scope`: its start where a transition leaves it, its end where one arrives. */\nexport const pseudoId = (scope: string | null, end: 'start' | 'end'): string => `${scope ?? ''}[${end}]`;\n\ninterface StateDraft { lines: string[]; named: boolean; described: boolean; type?: StateType | 'start' | 'end' }\n\n/** A fork or join bar's box, across the way the page runs. */\nconst barSize = (direction: LayoutDirection | undefined) =>\n (direction === 'left' || direction === 'right' ? { width: 10, height: 80 } : { width: 80, height: 10 });\n\nclass StateReader {\n readonly warnings = new Warnings();\n readonly styles = new StyleSheet(this.warnings);\n readonly membership = new Membership(this.warnings, 'Mermaid');\n readonly states = new Map<string, StateDraft>();\n readonly composites = new Map<string, { label?: string; lanes: string[] }>();\n readonly edges: DataEdge[] = [];\n readonly notes: DataNode[] = [];\n readonly noteEdges: DataEdge[] = [];\n direction: string | undefined;\n\n constructor(readonly compositeIds: ReadonlySet<string>) {}\n\n draft(id: string, scope: string | null): StateDraft {\n if (this.compositeIds.has(id)) return { lines: [], named: false, described: false };\n let d = this.states.get(id);\n if (d === undefined) {\n d = { lines: [id], named: false, described: false };\n this.states.set(id, d);\n }\n this.membership.place(id, scope);\n return d;\n }\n\n end(id: string, scope: string | null, end: 'start' | 'end'): string {\n if (id !== '[*]') {\n this.draft(id, scope);\n return id;\n }\n const pseudo = pseudoId(scope, end);\n this.draft(pseudo, scope).type = end;\n return pseudo;\n }\n\n walk(stmts: readonly StateStmt[], scope: string | null): void {\n for (const s of stmts) {\n if (s.kind === 'transition') {\n const from = this.end(s.from, scope, 'start');\n const to = this.end(s.to, scope, 'end');\n this.edges.push({ from, to, ...(s.label !== undefined ? { label: decodeEntities(s.label, true) } : {}) });\n } else if (s.kind === 'state') {\n const d = this.draft(s.id, scope);\n if (s.label !== undefined) Object.assign(d, { lines: [decodeEntities(s.label, true)], named: true });\n if (s.type !== undefined) d.type = s.type;\n } else if (s.kind === 'describe') this.describe(s.id, s.text, scope);\n else if (s.kind === 'composite') this.composite(s, scope);\n else if (s.kind === 'note') this.note(s, scope);\n else if (s.kind === 'assign') this.styles.assign(s.id, s.name);\n else if (s.kind === 'direction') {\n if (scope === null) this.direction = s.value;\n else this.warnings.add('Mermaid composite state directions were dropped; the page runs one way.');\n } else if (s.kind === 'style') this.styles.statement(s.text);\n else this.warnings.list('Mermaid statements a diagram does not hold were dropped', s.keyword);\n }\n }\n\n describe(id: string, text: string, scope: string | null): void {\n const comp = this.composites.get(id);\n if (comp !== undefined) {\n comp.label = text;\n return;\n }\n const d = this.draft(id, scope);\n const line = decodeEntities(text, true);\n if (d.named || d.described) d.lines.push(line);\n else d.lines = [line];\n d.described = true;\n }\n\n composite(s: Extract<StateStmt, { kind: 'composite' }>, scope: string | null): void {\n this.membership.openCluster(s.id, scope);\n const comp = this.composites.get(s.id) ?? { lanes: [] };\n if (s.label !== undefined) comp.label = s.label;\n this.composites.set(s.id, comp);\n if (s.regions.length === 1) {\n this.walk(s.regions[0]!, s.id);\n return;\n }\n s.regions.forEach((region, i) => {\n const lane = `${s.id}-region-${i + 1}`;\n comp.lanes.push(lane);\n this.membership.openCluster(lane, s.id);\n this.walk(region, lane);\n });\n }\n\n note(s: Extract<StateStmt, { kind: 'note' }>, scope: string | null): void {\n const id = `note-${this.notes.length + 1}`;\n if (s.side === 'left') this.warnings.add('Mermaid note sides were dropped.');\n this.notes.push({ id, outline: 'note', lines: s.text.split('\\n').map((l) => decodeEntities(l, true)) });\n this.draft(s.id, scope);\n this.noteEdges.push({ from: id, to: s.id, colors: { dash: [4, 4], markerEnd: null } });\n }\n\n node(id: string, d: StateDraft, direction: LayoutDirection | undefined): DataNode {\n const colors = this.styles.colorsOf(id);\n const own = colors !== undefined ? { colors } : {};\n if (d.type === 'start' || d.type === 'end') return { id, outline: d.type, lines: [], width: 20, height: 20, ...own };\n if (d.type === 'fork' || d.type === 'join') return { id, outline: 'bar', lines: [], ...barSize(direction), ...own };\n if (d.type === 'choice') return { id, outline: 'diamond', lines: [], width: 28, height: 28, ...own };\n return { id, outline: 'roundRect', lines: d.lines, ...own };\n }\n}\n\nfunction compositeIdsOf(stmts: readonly StateStmt[], out = new Set<string>()): Set<string> {\n for (const s of stmts) if (s.kind === 'composite') for (const region of s.regions) compositeIdsOf(region, out.add(s.id));\n return out;\n}\n\n/** Reads a Mermaid state diagram into a one-page document of `notation` `'state'`. Throws, naming the line, on text that is not one. */\nexport function readStateDiagram(text: string): ImportResult {\n const { source, stmts } = parseStateDiagram(text);\n const r = new StateReader(compositeIdsOf(stmts));\n r.walk(stmts, null);\n const direction = r.direction !== undefined ? DIRECTIONS[r.direction] : undefined;\n const nodes = [...r.states].map(([id, d]) => r.node(id, d, direction));\n const containers: DataContainer[] = [...r.composites].map(([id, c]) => {\n const label = c.label ?? id;\n if (c.lanes.length === 0) {\n const members = r.membership.members(id);\n return { id, role: 'container', label, ...(members.length > 0 ? { members } : {}) };\n }\n const lanes = c.lanes.map((lane) => {\n const members = r.membership.members(lane);\n return { id: lane, ...(members.length > 0 ? { members } : {}) };\n });\n return { id, role: 'pool', label, axis: 'y', lanes };\n });\n const name = pageNameOf(source, r.warnings);\n const page = graphPage({\n ...(name !== undefined ? { name } : {}),\n ...(direction !== undefined ? { direction } : {}),\n nodes: [...nodes, ...r.notes], edges: [...r.edges, ...r.noteEdges], containers,\n });\n return { document: { pages: [{ ...page, notation: 'state' }] }, warnings: r.warnings.all() };\n}\n","/**\n * One graph page as a Mermaid state diagram: `start` and `end` shapes as each\n * scope's `[*]`, bars as forks and joins, empty diamonds as choices,\n * containers as composite states and pools as composites divided into\n * concurrent regions, and `note` shapes as notes.\n */\nimport type { DataEdge, DataNode, LayoutDirection } from '@weasel-js/diagram';\nimport type { DiagramDocument, ExportResult, WriteOptions } from '../../document';\nimport { edgeStyleIn, graphOut, nodeLines, type Cluster, type GraphOut } from '../../graphWrite';\nimport { titleLines } from '../common/lines';\nimport { styleProps } from '../common/styles';\nimport { mermaidEscaped, mermaidIds } from '../common/text';\n\nconst HEADER: Readonly<Record<LayoutDirection, string>> = { down: 'TB', up: 'BT', right: 'LR', left: 'RL' };\n\nconst isPseudo = (n: DataNode | undefined): boolean => n?.outline === 'start' || n?.outline === 'end';\n\nclass StateWriter {\n readonly lines: string[] = [];\n readonly ids: Map<string, string>;\n /** The cluster each node sits in directly. */\n readonly scopeOf = new Map<string, string>();\n readonly pools: ReadonlySet<string>;\n readonly notes: ReadonlySet<string>;\n\n constructor(readonly out: GraphOut) {\n this.ids = mermaidIds([...out.page.data.nodes.map((n) => n.id), ...out.clusterIds]);\n const visit = (c: Cluster) => {\n for (const id of c.nodes) this.scopeOf.set(id, c.id);\n c.clusters.forEach(visit);\n };\n out.clusters.forEach(visit);\n this.pools = new Set((out.page.data.containers ?? []).filter((c) => c.role === 'pool').map((c) => c.id));\n this.notes = new Set(out.page.data.nodes.filter((n) => n.outline === 'note').map((n) => n.id));\n }\n\n id(id: string): string {\n return isPseudo(this.out.byId.get(id)) ? '[*]' : this.ids.get(id) ?? id;\n }\n\n node(node: DataNode, indent: string): void {\n if (isPseudo(node) || this.notes.has(node.id)) return;\n const id = this.id(node.id);\n const lines = nodeLines(node, this.out.warnings, 'Mermaid');\n if (node.outline === 'bar') {\n const outs = this.out.edges.filter((e) => e.from === node.id).length;\n const ins = this.out.edges.filter((e) => e.to === node.id).length;\n this.lines.push(`${indent}state ${id} <<${outs > ins ? 'fork' : 'join'}>>`);\n } else if (node.outline === 'diamond' && lines.length === 0) {\n this.lines.push(`${indent}state ${id} <<choice>>`);\n } else if (lines.length === 0 || (lines.length === 1 && lines[0] === node.id)) {\n this.lines.push(`${indent}${id}`);\n } else {\n this.lines.push(`${indent}state \"${mermaidEscaped([lines[0]!])}\" as ${id}`, ...lines.slice(1).map((l) => `${indent}${id} : ${mermaidEscaped([l])}`));\n }\n if (node.outline !== undefined && !['roundRect', 'bar', 'diamond'].includes(node.outline as string)) {\n this.out.warnings.add('Mermaid draws every state alike; their outlines were dropped.');\n }\n }\n\n cluster(c: Cluster, indent: string): void {\n const head = c.label !== undefined && c.label !== c.id ? `state \"${mermaidEscaped([c.label])}\" as ${this.id(c.id)}` : `state ${this.id(c.id)}`;\n this.lines.push(`${indent}${head} {`);\n if (this.pools.has(c.id)) {\n c.clusters.forEach((lane, i) => {\n if (i > 0) this.lines.push(`${indent} --`);\n this.scope(lane, `${indent} `);\n });\n } else {\n this.scope(c, `${indent} `);\n }\n this.lines.push(`${indent}}`);\n }\n\n /** A scope's states, its nested composites, and the transitions to and from its `[*]`. */\n scope(c: Cluster, indent: string): void {\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 for (const e of this.out.edges) if (this.edgeScope(e) === c.id) this.lines.push(this.transition(e, indent));\n }\n\n /** Where an edge is written: in the scope of a `[*]` it has, else at the top. Notes' edges are written as notes. */\n edgeScope(e: DataEdge): string | null | undefined {\n if (this.notes.has(e.from)) return undefined;\n const pseudo = [e.from, e.to].find((id) => isPseudo(this.out.byId.get(id)));\n return pseudo === undefined ? null : this.scopeOf.get(pseudo) ?? null;\n }\n\n transition(e: DataEdge, indent: string): string {\n const own = edgeStyleIn(this.out, e);\n const base = edgeStyleIn(this.out);\n if (own.dash !== undefined || own.markerEnd !== base.markerEnd || own.markerStart !== base.markerStart) {\n this.out.warnings.add('Mermaid draws every transition alike; their dashes and ends were dropped.');\n }\n const label = e.label !== undefined && e.label !== '' ? ` : ${mermaidEscaped([e.label])}` : '';\n return `${indent}${this.id(e.from)} --> ${this.id(e.to)}${label}`;\n }\n\n noteLines(): void {\n for (const id of this.notes) {\n const target = this.out.edges.find((e) => e.from === id);\n const text = (this.out.byId.get(id)!.lines ?? []).map((l) => mermaidEscaped([l]));\n if (target === undefined) {\n this.out.warnings.add('Mermaid notes sit beside a state; notes beside none were dropped.');\n continue;\n }\n if (text.length === 1) this.lines.push(` note right of ${this.id(target.to)} : ${text[0]}`);\n else this.lines.push(` note right of ${this.id(target.to)}`, ...text.map((t) => ` ${t}`), ' end note');\n }\n }\n\n styles(): void {\n const byProps = new Map<string, string[]>();\n for (const n of this.out.page.data.nodes) {\n const props = n.colors !== undefined && !isPseudo(n) && !this.notes.has(n.id) ? styleProps(n.colors) : '';\n if (props !== '') byProps.set(props, [...(byProps.get(props) ?? []), this.id(n.id)]);\n }\n [...byProps].forEach(([props, ids], i) => this.lines.push(` classDef s${i + 1} ${props}`, ` class ${ids.join(',')} s${i + 1}`));\n }\n}\n\n/** Writes the page `opts.page` names, else the first, as a Mermaid `stateDiagram-v2`. */\nexport function writeStateDiagram(doc: DiagramDocument, opts?: WriteOptions): ExportResult {\n const out = graphOut(doc, opts, 'Mermaid', true);\n if (out === null) return { text: 'stateDiagram-v2\\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 StateWriter(out);\n const { page } = out;\n w.lines.push(...titleLines(page.name), 'stateDiagram-v2');\n if (page.direction !== undefined && page.direction !== 'down') w.lines.push(` direction ${HEADER[page.direction]}`);\n for (const n of out.nodes) w.node(n, ' ');\n for (const c of out.clusters) w.cluster(c, ' ');\n for (const e of out.edges) if (w.edgeScope(e) === null) w.lines.push(w.transition(e, ' '));\n w.noteLines();\n w.styles();\n return { text: `${w.lines.join('\\n')}\\n`, warnings: out.warnings.all() };\n}\n","/** A Mermaid xychart's text as statements, each with the line it came from. */\nimport { lineError } from '../../lineError';\n\n/** One statement of an xychart, by the keyword that starts it. */\nexport type XyStatement =\n | { kind: 'title'; text: string; line: number }\n | { kind: 'x-axis'; title?: string; categories?: string[]; range?: [number, number]; line: number }\n | { kind: 'y-axis'; title?: string; range?: [number, number]; line: number }\n | { kind: 'bar' | 'line'; name?: string; values: number[]; line: number }\n | { kind: 'dropped'; what: string; line: number };\n\n/** An xychart's header and statements, and the front matter's title. */\nexport interface XyChartText {\n orientation: 'vertical' | 'horizontal';\n statements: XyStatement[];\n /** `title:` from the front matter. */\n frontTitle?: string;\n /** How many lines of front matter other than its title were skipped. */\n frontOther: number;\n}\n\nconst FORMAT = 'Mermaid';\nconst HEADER = /^xychart(?:-beta)?(?:\\s+(horizontal|vertical))?\\s*$/;\nconst NUMBER = /^[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?$/i;\n\n/** A quoted string's text, with Mermaid's `#quot;` entity read back as a quote. */\nexport const unquote = (s: string): string => s.slice(1, -1).replace(/#quot;/g, '\"');\n\n/** Splits `list` (what lies between the brackets) on commas outside quotes. */\nfunction listItems(list: string): string[] {\n const out: string[] = [];\n let at = 0;\n let quoted = false;\n for (let i = 0; i <= list.length; i++) {\n const c = list[i];\n if (c === '\"') quoted = !quoted;\n if (i === list.length || (c === ',' && !quoted)) {\n out.push(list.slice(at, i).trim());\n at = i + 1;\n }\n }\n return out.length === 1 && out[0] === '' ? [] : out;\n}\n\nfunction numberAt(text: string, line: number): number {\n if (!NUMBER.test(text)) throw lineError(FORMAT, line, `\"${text}\" is not a number`);\n return Number(text);\n}\n\n/** A leading quoted title off `rest`, and what follows it. */\nfunction leadingTitle(rest: string): { title?: string; rest: string } {\n const m = /^(\"[^\"]*\")\\s*(.*)$/.exec(rest);\n return m === null ? { rest } : { title: unquote(m[1]!), rest: m[2]! };\n}\n\n/** `[a, b]` as its items, or `min --> max` as a range; `null` for nothing; throws on anything else. */\nfunction axisBody(rest: string, line: number): { categories?: string[]; range?: [number, number] } | null {\n if (rest === '') return null;\n if (rest.startsWith('[')) {\n if (!rest.endsWith(']')) throw lineError(FORMAT, line, 'a category list with no closing \"]\"');\n return { categories: listItems(rest.slice(1, -1)).map((c) => (c.startsWith('\"') && c.endsWith('\"') ? unquote(c) : c)) };\n }\n const m = /^(\\S+)\\s*-->\\s*(\\S+)$/.exec(rest);\n if (m === null) throw lineError(FORMAT, line, `\"${rest}\" is neither a category list nor a range`);\n return { range: [numberAt(m[1]!, line), numberAt(m[2]!, line)] };\n}\n\nfunction statementOf(keyword: string, rest: string, line: number): XyStatement {\n switch (keyword) {\n case 'title':\n return { kind: 'title', text: rest.startsWith('\"') && rest.endsWith('\"') && rest.length > 1 ? unquote(rest) : rest, line };\n case 'x-axis':\n case 'y-axis': {\n const { title, rest: body } = leadingTitle(rest);\n const parsed = axisBody(body, line);\n if (keyword === 'y-axis' && parsed?.categories) throw lineError(FORMAT, line, 'the y axis takes a range, not categories');\n return { kind: keyword, ...(title !== undefined ? { title } : {}), ...parsed, line } as XyStatement;\n }\n case 'bar':\n case 'line': {\n const { title, rest: body } = leadingTitle(rest);\n if (!body.startsWith('[') || !body.endsWith(']')) throw lineError(FORMAT, line, `a ${keyword} series needs its values in brackets`);\n const values = listItems(body.slice(1, -1)).map((v) => numberAt(v, line));\n return { kind: keyword, ...(title !== undefined ? { name: title } : {}), values, line };\n }\n case 'accTitle:':\n case 'accDescr:':\n return { kind: 'dropped', what: keyword.slice(0, -1), line };\n default:\n throw lineError(FORMAT, line, `\"${keyword}\" is not an xychart statement`);\n }\n}\n\n/** Reads front matter off the top of `lines`: its title, and how many other lines it held. Returns the line after it. */\nfunction frontMatter(lines: readonly string[], into: XyChartText): number {\n if (!/^---\\s*$/.test(lines[0] ?? '')) return 0;\n let k = 1;\n for (; k < lines.length && !/^---\\s*$/.test(lines[k]!); k++) {\n const m = /^title:\\s*(.*)$/.exec(lines[k]!.trim());\n if (m !== null) into.frontTitle = /^\".*\"$/.test(m[1]!) ? JSON.parse(m[1]!) as string : m[1]!;\n else if (lines[k]!.trim() !== '') into.frontOther++;\n }\n return k + 1;\n}\n\n/** Parses an xychart. Throws, naming the line, on text that is not one. */\nexport function parseXyChart(text: string): XyChartText {\n const lines = text.split(/\\r\\n?|\\n/);\n const out: XyChartText = { orientation: 'vertical', statements: [], frontOther: 0 };\n let header = false;\n let block = false;\n for (let k = frontMatter(lines, out); k < lines.length; k++) {\n const l = lines[k]!.trim();\n const line = k + 1;\n if (block) {\n block = !l.includes('}');\n continue;\n }\n if (l === '' || l.startsWith('%%')) {\n if (l.startsWith('%%{')) out.statements.push({ kind: 'dropped', what: 'directive', line });\n continue;\n }\n if (!header) {\n const m = HEADER.exec(l);\n if (m === null) throw lineError(FORMAT, line, `\"${l}\" is not an xychart header`);\n if (m[1] === 'horizontal') out.orientation = 'horizontal';\n header = true;\n continue;\n }\n if (/^accDescr\\s*\\{/.test(l)) {\n out.statements.push({ kind: 'dropped', what: 'accDescr', line });\n block = !l.includes('}');\n continue;\n }\n const m = /^(\\S+)\\s*(.*)$/.exec(l)!;\n out.statements.push(statementOf(m[1]!, m[2]!.trim(), line));\n }\n if (!header) throw lineError(FORMAT, lines.length, 'no xychart header');\n return out;\n}\n","/** A Mermaid xychart as a one-page document holding a plot page. */\nimport type { XyChartData, XySeries } from '@weasel-js/plot';\nimport type { ImportResult, PlotPage } from '../../document';\nimport { parseXyChart } from './parse';\n\n/** The page an xychart is read onto. */\nexport const XYCHART_PAGE = { width: 800, height: 500 } as const;\n\n/** Reads a Mermaid `xychart-beta` (or `xychart`) diagram. Throws, naming the line, on text that is not one. */\nexport function readMermaidXychart(text: string): ImportResult {\n const parsed = parseXyChart(text);\n const warnings: string[] = [];\n const once = new Set<string>();\n const warn = (message: string) => {\n if (!once.has(message)) warnings.push(message);\n once.add(message);\n };\n if (parsed.frontOther > 0) warn('Mermaid front matter other than the title was dropped.');\n let title = parsed.frontTitle;\n let x: XyChartData['x'];\n let y: XyChartData['y'];\n const series: XySeries[] = [];\n for (const s of parsed.statements) {\n switch (s.kind) {\n case 'title': title = s.text; break;\n case 'x-axis':\n x = s.range !== undefined\n ? { kind: 'range', ...(s.title !== undefined ? { title: s.title } : {}), min: s.range[0], max: s.range[1] }\n : { kind: 'band', ...(s.title !== undefined ? { title: s.title } : {}), categories: s.categories ?? [] };\n break;\n case 'y-axis':\n y = { ...(s.title !== undefined ? { title: s.title } : {}), ...(s.range !== undefined ? { min: s.range[0], max: s.range[1] } : {}) };\n break;\n case 'bar':\n case 'line':\n series.push({ kind: s.kind, ...(s.name !== undefined ? { name: s.name } : {}), values: s.values });\n break;\n case 'dropped':\n warn(s.what === 'directive' ? 'Mermaid configuration directives were dropped.' : `The chart's ${s.what} was dropped.`);\n break;\n }\n }\n if (x?.kind === 'band' && x.categories.length > 0) {\n const longest = Math.max(0, ...series.map((s) => s.values.length));\n if (longest > x.categories.length) warn(`${longest - x.categories.length} value(s) past the last category are not drawn.`);\n }\n const data: XyChartData = {\n kind: 'xychart',\n ...(title !== undefined && title !== '' ? { title } : {}),\n ...(parsed.orientation === 'horizontal' ? { orientation: 'horizontal' } : {}),\n ...(x !== undefined ? { x } : {}),\n ...(y !== undefined ? { y } : {}),\n series,\n };\n const page: PlotPage = { kind: 'plot', id: 'page-1', ...(title ? { name: title } : {}), ...XYCHART_PAGE, data };\n return { document: { pages: [page] }, warnings };\n}\n","/** A plot page holding an xychart as Mermaid `xychart-beta` text. */\nimport type { XyChartData } from '@weasel-js/plot';\nimport type { ExportResult, PlotPage } from '../../document';\n\n/** `s` quoted, a quote inside it written as Mermaid's `#quot;`. */\nconst quoted = (s: string): string => `\"${s.replace(/\"/g, '#quot;')}\"`;\n\n/** A category bare where Mermaid reads it back the same, else quoted. */\nconst category = (s: string): string => (/^[\\w.-]+$/.test(s) ? s : quoted(s));\n\nconst titled = (title: string | undefined): string => (title !== undefined ? ` ${quoted(title)}` : '');\n\nfunction xAxisLine(x: NonNullable<XyChartData['x']>): string | null {\n if (x.kind === 'range') return `x-axis${titled(x.title)} ${x.min} --> ${x.max}`;\n if (x.categories.length === 0) return x.title !== undefined ? `x-axis${titled(x.title)}` : null;\n return `x-axis${titled(x.title)} [${x.categories.map(category).join(', ')}]`;\n}\n\nfunction yAxisLine(y: NonNullable<XyChartData['y']>, warn: (m: string) => void): string | null {\n const both = y.min !== undefined && y.max !== undefined;\n if (!both && (y.min !== undefined || y.max !== undefined)) warn('Mermaid holds both ends of the y axis or neither; its one end was dropped.');\n if (!both && y.title === undefined) return null;\n return `y-axis${titled(y.title)}${both ? ` ${y.min} --> ${y.max}` : ''}`;\n}\n\n/** Writes `page`'s xychart as Mermaid. Throws on a page holding another kind of chart. */\nexport function writeMermaidXychart(page: PlotPage): ExportResult {\n const data = page.data;\n if (data.kind !== 'xychart') throw new Error(`Mermaid writes this chart as an xychart only; the page holds a ${(data as { kind: string }).kind}`);\n const warnings: string[] = [];\n const warn = (m: string) => {\n if (!warnings.includes(m)) warnings.push(m);\n };\n const lines = [data.orientation === 'horizontal' ? 'xychart-beta horizontal' : 'xychart-beta'];\n if (data.title !== undefined) lines.push(` title ${quoted(data.title)}`);\n const x = data.x && xAxisLine(data.x);\n if (x) lines.push(` ${x}`);\n const y = data.y && yAxisLine(data.y, warn);\n if (y) lines.push(` ${y}`);\n for (const s of data.series) {\n if (s.values.some((v) => !Number.isFinite(v))) warn('Mermaid holds no missing values; they were written as 0.');\n lines.push(` ${s.kind}${titled(s.name)} [${s.values.map((v) => (Number.isFinite(v) ? v : 0)).join(', ')}]`);\n }\n return { text: `${lines.join('\\n')}\\n`, warnings };\n}\n","/** A Mermaid gantt's task lines read into tasks, their starts and ends kept as written. */\nimport { parseGanttEnd, parseGanttStart, type GanttTag, type GanttTask } from '@weasel-js/plot';\nimport { lineError } from '../../lineError';\n\nconst TAGS = new Set(['done', 'active', 'crit', 'milestone', 'vert']);\n\n/** Task text as written, `#58;` read back as the colon Mermaid splits a task on. */\nexport const ganttText = (s: string): string => s.trim().replace(/#58;/g, ':');\n\n/** A task line read: the task, or `'vert'` for a vertical marker, which a chart does not hold. */\nexport function parseGanttTask(text: string, line: number): GanttTask | 'vert' {\n const colon = text.indexOf(':');\n if (colon < 0) throw lineError('Mermaid', line, `\"${text}\" is not a gantt statement`);\n const name = ganttText(text.slice(0, colon));\n const items = text.slice(colon + 1).split(',').map((s) => s.trim());\n const tags: string[] = [];\n while (items.length > 0 && TAGS.has(items[0]!)) tags.push(items.shift()!);\n if (tags.includes('vert')) return 'vert';\n if (items.length > 3) throw lineError('Mermaid', line, 'a task takes an id, a start and an end after its tags, and no more');\n if (items.length === 0 || items.some((s) => s === '')) throw lineError('Mermaid', line, 'a task needs an end');\n const [id, start, end] = items.length === 3 ? items : items.length === 2 ? [undefined, ...items] : [undefined, undefined, items[0]];\n return {\n name,\n ...(id !== undefined ? { id } : {}),\n ...(tags.length > 0 ? { tags: [...new Set(tags)] as GanttTag[] } : {}),\n start: start === undefined ? { kind: 'previous' } : parseGanttStart(start),\n end: parseGanttEnd(end!),\n };\n}\n","/** A Mermaid gantt as a one-page document holding a plot page. */\nimport type { GanttData, GanttTask } from '@weasel-js/plot';\nimport type { ImportResult, PlotPage } from '../../document';\nimport { Warnings } from '../../graphRead';\nimport { lineError } from '../../lineError';\nimport { pageNameOf, statementsOf } from '../common/lines';\nimport { ganttText, parseGanttTask } from './parse';\n\n/** The page a gantt is read onto. */\nexport const GANTT_PAGE = { width: 1000, height: 500 } as const;\n\n/** Statements read and dropped: what a chart does not hold. */\nconst DROPPED = new Set(['click', 'call', 'inclusiveEndDates', 'topAxis', 'tickInterval', 'weekday', 'displayMode', 'weekend', 'vert', 'includes']);\n\n/** Reads a Mermaid `gantt`. Throws, naming the line, on text that is not one. */\nexport function readMermaidGantt(text: string): ImportResult {\n const src = statementsOf(text);\n const warnings = new Warnings();\n if (src.header.text !== 'gantt') throw lineError('Mermaid', src.header.line, `\"${src.header.text}\" is not a gantt header`);\n const settings: { title?: string; dateFormat?: string; axisFormat?: string; excludes?: string[]; todayMarker?: string } = {};\n const sections: { name?: string; tasks: GanttTask[] }[] = [{ tasks: [] }];\n for (const s of src.body) {\n const m = /^(\\S+)(?:\\s+(.*))?$/.exec(s.text)!;\n const [keyword, rest = ''] = [m[1]!, m[2]?.trim()];\n // A colon makes the line a task named for the word, except after `click` and `call`, whose links hold colons.\n if (DROPPED.has(keyword) && (keyword === 'click' || keyword === 'call' || !s.text.includes(':'))) {\n warnings.list('Mermaid gantt statements were dropped', keyword);\n continue;\n }\n switch (keyword) {\n case 'title': settings.title = ganttText(rest); continue;\n case 'dateFormat': settings.dateFormat = rest; continue;\n case 'axisFormat': settings.axisFormat = rest; continue;\n case 'excludes': settings.excludes = rest.split(/[\\s,]+/).filter((e) => e !== ''); continue;\n case 'todayMarker': settings.todayMarker = rest; continue;\n case 'section': sections.push({ name: ganttText(rest), tasks: [] }); continue;\n }\n const task = parseGanttTask(s.text, s.line);\n if (task === 'vert') warnings.add('Mermaid gantt vertical markers were dropped.');\n else sections[sections.length - 1]!.tasks.push(task);\n }\n const name = pageNameOf(src, warnings);\n const { title, ...rest } = settings;\n if (title !== undefined && src.title !== undefined && title !== src.title) {\n warnings.add('The front matter title was dropped; the chart is named by its title statement.');\n }\n const chartTitle = title || src.title;\n const data: GanttData = {\n kind: 'gantt',\n ...(chartTitle ? { title: chartTitle } : {}),\n ...rest,\n sections: sections.filter((sec, i) => i > 0 || sec.tasks.length > 0),\n };\n const pageName = chartTitle || name;\n const page: PlotPage = { kind: 'plot', id: 'page-1', ...(pageName ? { name: pageName } : {}), ...GANTT_PAGE, data };\n return { document: { pages: [page] }, warnings: warnings.all() };\n}\n","/** A plot page holding a gantt as Mermaid `gantt` text. */\nimport { formatGanttEnd, formatGanttStart, type GanttData, type GanttTask } from '@weasel-js/plot';\nimport type { ExportResult, PlotPage } from '../../document';\nimport { Warnings } from '../../graphRead';\n\n/** `s` on one line, the colon Mermaid splits a task on written as `#58;`. */\nfunction oneLine(s: string, warnings: Warnings): string {\n if (/[\\r\\n]/.test(s)) warnings.add('Mermaid gantt text holds one line; line breaks were written as spaces.');\n return s.replace(/\\s*[\\r\\n]+\\s*/g, ' ').replace(/:/g, '#58;');\n}\n\n/**\n * A task's items after the colon. Mermaid names no task that starts where the one before it ends, so such a task\n * with an id starts `after` that task's id, and loses its own id when that task has none.\n */\nfunction taskItems(task: GanttTask, before: GanttTask | undefined, warnings: Warnings): string[] {\n const items: string[] = [...(task.tags ?? [])];\n const end = formatGanttEnd(task.end);\n if (task.start.kind !== 'previous') return [...items, ...(task.id !== undefined ? [task.id] : []), formatGanttStart(task.start), end];\n if (task.id === undefined) return [...items, end];\n if (before?.id !== undefined) return [...items, task.id, `after ${before.id}`, end];\n warnings.add('Mermaid gives no id to a first task, or one after a task with none, unless it has a start of its own; those ids were dropped.');\n return [...items, end];\n}\n\nfunction settingLines(data: GanttData, text: (s: string) => string): string[] {\n const lines: string[] = [];\n if (data.title !== undefined) lines.push(` title ${text(data.title)}`);\n if (data.dateFormat !== undefined) lines.push(` dateFormat ${data.dateFormat}`);\n if (data.axisFormat !== undefined) lines.push(` axisFormat ${data.axisFormat}`);\n if (data.excludes !== undefined && data.excludes.length > 0) lines.push(` excludes ${data.excludes.join(', ')}`);\n if (data.todayMarker !== undefined) lines.push(` todayMarker ${data.todayMarker}`);\n return lines;\n}\n\n/** Writes `page`'s gantt as Mermaid. Throws on a page holding another kind of chart. */\nexport function writeMermaidGantt(page: PlotPage): ExportResult {\n const data = page.data;\n if (data.kind !== 'gantt') throw new Error(`Mermaid writes this chart as a gantt only; the page holds a ${(data as { kind: string }).kind}`);\n const warnings = new Warnings();\n const text = (s: string) => oneLine(s, warnings);\n const lines = ['gantt', ...settingLines(data, text)];\n let before: GanttTask | undefined;\n let named = false;\n data.sections.forEach((section, i) => {\n if (section.name !== undefined) {\n lines.push(` section ${text(section.name)}`);\n named = true;\n } else if (i > 0) {\n warnings.add('Mermaid holds no unnamed section after the first; its tasks were written into the section before it.');\n }\n for (const task of section.tasks) {\n lines.push(`${named ? ' ' : ' '}${text(task.name)} :${taskItems(task, before, warnings).join(', ')}`);\n before = task;\n }\n });\n return { text: `${lines.join('\\n')}\\n`, warnings: warnings.all() };\n}\n","/** A Mermaid gitGraph's statements as the commands they run, each with its line. */\nimport type { GitCommand, GitCommitType } from '@weasel-js/plot';\nimport { lineError } from '../../lineError';\nimport type { Statement } from '../common/lines';\n\nconst FORMAT = 'Mermaid';\nconst TYPES: readonly string[] = ['NORMAL', 'REVERSE', 'HIGHLIGHT'];\n/** One `key: value` attribute, its value quoted or bare. */\nconst ATTRIBUTE = /\\s*(\\w+)\\s*:\\s*(?:\"([^\"]*)\"|([^\\s\"]+))\\s*/y;\n/** A branch name, quoted or bare, and what follows it. */\nconst NAME = /^(?:\"([^\"]*)\"|([^\\s\"]+))\\s*(.*)$/;\n\n/** The attributes in `rest`, each checked against those `kind` takes. */\nfunction attributes(rest: string, kind: string, allowed: readonly string[], line: number): Map<string, string> {\n const out = new Map<string, string>();\n let at = 0;\n while (at < rest.length) {\n ATTRIBUTE.lastIndex = at;\n const m = ATTRIBUTE.exec(rest);\n if (m === null) throw lineError(FORMAT, line, `\"${rest.slice(at).trim()}\" is not an attribute`);\n const key = m[1]!;\n if (!allowed.includes(key)) throw lineError(FORMAT, line, `\"${key}\" is not an attribute of ${kind}; it takes ${allowed.join(', ')}`);\n if (out.has(key)) throw lineError(FORMAT, line, `\"${key}\" is given twice`);\n out.set(key, m[2] ?? m[3]!);\n at = ATTRIBUTE.lastIndex;\n }\n return out;\n}\n\nfunction typeOf(value: string | undefined, line: number): { type?: GitCommitType } {\n if (value === undefined) return {};\n if (!TYPES.includes(value)) throw lineError(FORMAT, line, `\"${value}\" is not a commit type; it is NORMAL, REVERSE or HIGHLIGHT`);\n return { type: value as GitCommitType };\n}\n\n/** Each optional attribute named in `keys`, under the field `as` names, when `attrs` gives it. */\nconst fields = (attrs: Map<string, string>, keys: Readonly<Record<string, string>>): Record<string, string> =>\n Object.fromEntries(Object.entries(keys).flatMap(([key, as]) => (attrs.has(key) ? [[as, attrs.get(key)!]] : [])));\n\nfunction nameOf(rest: string, keyword: string, line: number): { name: string; rest: string } {\n const m = NAME.exec(rest);\n if (m === null) throw lineError(FORMAT, line, `${keyword} needs a branch name`);\n return { name: m[1] ?? m[2]!, rest: m[3]! };\n}\n\n/** One statement as its command. Throws, naming the line, on one it cannot read. */\nexport function commandOf({ text, line }: Statement): GitCommand {\n const m = /^(\\S+)\\s*(.*)$/.exec(text)!;\n const keyword = m[1]!;\n const rest = m[2]!.trim();\n switch (keyword) {\n case 'commit': {\n const attrs = attributes(rest, 'commit', ['id', 'type', 'tag', 'msg'], line);\n return { kind: 'commit', ...fields(attrs, { id: 'id' }), ...typeOf(attrs.get('type'), line), ...fields(attrs, { tag: 'tag', msg: 'message' }) };\n }\n case 'branch': {\n const { name, rest: after } = nameOf(rest, 'branch', line);\n const order = attributes(after, 'branch', ['order'], line).get('order');\n if (order !== undefined && !/^\\d+$/.test(order)) throw lineError(FORMAT, line, `\"${order}\" is not an order; it is a whole number`);\n return { kind: 'branch', name, ...(order !== undefined ? { order: Number(order) } : {}) };\n }\n case 'checkout':\n case 'switch': {\n const { name, rest: after } = nameOf(rest, keyword, line);\n if (after !== '') throw lineError(FORMAT, line, `\"${after}\" follows the branch name`);\n return { kind: 'checkout', name };\n }\n case 'merge': {\n const { name, rest: after } = nameOf(rest, 'merge', line);\n const attrs = attributes(after, 'merge', ['id', 'tag', 'type'], line);\n return { kind: 'merge', branch: name, ...fields(attrs, { id: 'id' }), ...typeOf(attrs.get('type'), line), ...fields(attrs, { tag: 'tag' }) };\n }\n case 'cherry-pick': {\n const attrs = attributes(rest, 'cherry-pick', ['id', 'tag', 'parent'], line);\n const id = attrs.get('id');\n if (id === undefined) throw lineError(FORMAT, line, 'cherry-pick needs the id of the commit it copies');\n return { kind: 'cherry-pick', id, ...fields(attrs, { tag: 'tag', parent: 'parent' }) };\n }\n default:\n throw lineError(FORMAT, line, `\"${keyword}\" is not a gitGraph statement`);\n }\n}\n","/** A Mermaid gitGraph as a one-page document holding a plot page. */\nimport { replayGitGraph, type GitGraphData } from '@weasel-js/plot';\nimport type { ImportResult, PlotPage } from '../../document';\nimport { Warnings } from '../../graphRead';\nimport { lineError } from '../../lineError';\nimport { pageNameOf, statementsOf } from '../common/lines';\nimport { commandOf } from './parse';\n\n/** The page a gitGraph is read onto. */\nexport const GITGRAPH_PAGE = { width: 900, height: 420 } as const;\n\nconst HEADER = /^gitGraph(?:\\s+(LR|TB|BT))?\\s*:?$/;\n\n/** Reads a Mermaid `gitGraph` diagram. Throws, naming the line, on text that is not one, or a command Mermaid\n * would refuse: checking out a branch never made, making one twice, a merge or cherry-pick with nothing to take. */\nexport function readMermaidGitGraph(text: string): ImportResult {\n const src = statementsOf(text);\n const header = HEADER.exec(src.header.text);\n if (header === null) throw lineError('Mermaid', src.header.line, `\"${src.header.text}\" is not a gitGraph header`);\n const commands = src.body.map(commandOf);\n const data: GitGraphData = {\n kind: 'gitgraph',\n ...(src.title !== undefined && src.title !== '' ? { title: src.title } : {}),\n ...(header[1] !== undefined ? { orientation: header[1] as 'LR' | 'TB' | 'BT' } : {}),\n commands,\n };\n const { error } = replayGitGraph(data);\n if (error !== undefined) throw lineError('Mermaid', src.body[error.command]!.line, error.message);\n const warnings = new Warnings();\n if (commands.some((c) => c.kind === 'commit' && c.message !== undefined)) warnings.add('Commit messages are kept but not drawn.');\n const name = pageNameOf(src, warnings);\n const page: PlotPage = { kind: 'plot', id: 'page-1', ...(name ? { name } : {}), ...GITGRAPH_PAGE, data };\n return { document: { pages: [page] }, warnings: warnings.all() };\n}\n","/** A plot page holding a gitgraph as Mermaid `gitGraph` text: front matter for its title, then a line per command. */\nimport type { GitCommand } from '@weasel-js/plot';\nimport type { ExportResult, PlotPage } from '../../document';\nimport { titleLines } from '../common/lines';\n\ntype Warn = (m: string) => void;\n\n/** `s` in double quotes, which Mermaid strings cannot hold, so a quote inside becomes a single one. */\nfunction quoted(s: string, warn: Warn): string {\n if (s.includes('\"')) warn('Mermaid strings hold no double quotes; they were written as single quotes.');\n return `\"${s.replace(/\"/g, \"'\")}\"`;\n}\n\n/** A branch name bare where Mermaid reads it back the same, else quoted. */\nconst branchName = (s: string, warn: Warn): string => (/^[^\\s\"]+$/.test(s) ? s : quoted(s, warn));\n\n/** ` key: value` for each of `pairs` that has a value, strings quoted. */\nconst attrs = (pairs: readonly [string, string | number | undefined, boolean][], warn: Warn): string =>\n pairs.flatMap(([key, value, quote]) => (value === undefined ? [] : [` ${key}: ${quote ? quoted(String(value), warn) : value}`])).join('');\n\nfunction commandLine(cmd: GitCommand, main: (name: string) => string, warn: Warn): string {\n switch (cmd.kind) {\n case 'commit':\n return `commit${attrs([['id', cmd.id, true], ['type', cmd.type, false], ['tag', cmd.tag, true], ['msg', cmd.message, true]], warn)}`;\n case 'branch':\n return `branch ${branchName(main(cmd.name), warn)}${attrs([['order', cmd.order, false]], warn)}`;\n case 'checkout':\n return `checkout ${branchName(main(cmd.name), warn)}`;\n case 'merge':\n return `merge ${branchName(main(cmd.branch), warn)}${attrs([['id', cmd.id, true], ['type', cmd.type, false], ['tag', cmd.tag, true]], warn)}`;\n case 'cherry-pick':\n return `cherry-pick${attrs([['id', cmd.id, true], ['tag', cmd.tag, true], ['parent', cmd.parent, true]], warn)}`;\n }\n}\n\n/** Writes `page`'s gitgraph as Mermaid. Throws on a page holding another kind of chart, or one whose main branch is\n * not `main` while another branch is. */\nexport function writeMermaidGitGraph(page: PlotPage): ExportResult {\n const data = page.data;\n if (data.kind !== 'gitgraph') throw new Error(`Mermaid writes this chart as a gitGraph only; the page holds a ${(data as { kind: string }).kind}`);\n const warnings: string[] = [];\n const warn: Warn = (m) => {\n if (!warnings.includes(m)) warnings.push(m);\n };\n const mainBranch = data.mainBranch ?? 'main';\n if (mainBranch !== 'main') {\n if (data.commands.some((c) => c.kind === 'branch' && c.name === 'main')) {\n throw new Error(`Mermaid's main branch is \"main\", and this graph has another branch by that name besides its main branch \"${mainBranch}\"`);\n }\n warn(`Mermaid's main branch is \"main\"; \"${mainBranch}\" was written as main.`);\n }\n const main = (name: string) => (name === mainBranch ? 'main' : name);\n const header = data.orientation === undefined ? 'gitGraph' : `gitGraph ${data.orientation}:`;\n const lines = [...titleLines(data.title), header, ...data.commands.map((c) => ` ${commandLine(c, main, warn)}`)];\n return { text: `${lines.join('\\n')}\\n`, warnings };\n}\n","/** A Mermaid user journey as a one-page document holding a plot page. */\nimport type { JourneyData, JourneyTask } from '@weasel-js/plot';\nimport type { ImportResult, PlotPage } from '../../document';\nimport { Warnings } from '../../graphRead';\nimport { lineError } from '../../lineError';\nimport { pageNameOf, statementsOf, type Statement } from '../common/lines';\n\n/** The page a journey is read onto. */\nexport const JOURNEY_PAGE = { width: 800, height: 450 } as const;\n\n/** `Name: 5: Actor1, Actor2` as a step. Throws, naming the line, on a line that is not one or a score that is not a\n * whole number from 1 to 5. */\nfunction taskOf(s: Statement): JourneyTask {\n const [name, score, actors, ...more] = s.text.split(':').map((p) => p.trim());\n if (score === undefined || more.length > 0 || name === '') throw lineError('Mermaid', s.line, `\"${s.text}\" is not a journey statement`);\n if (!/^[+-]?\\d+$/.test(score) || Number(score) < 1 || Number(score) > 5) {\n throw lineError('Mermaid', s.line, `a step's score is a whole number from 1 to 5, and \"${score}\" is not`);\n }\n return { name: name!, score: Number(score), actors: (actors ?? '').split(',').map((a) => a.trim()).filter((a) => a !== '') };\n}\n\n/** Reads a Mermaid `journey`. Throws, naming the line, on text that is not one. */\nexport function readMermaidJourney(text: string): ImportResult {\n const src = statementsOf(text);\n if (src.header.text !== 'journey') throw lineError('Mermaid', src.header.line, `\"${src.header.text}\" is not a journey header`);\n const warnings = new Warnings();\n let title: string | undefined;\n const sections: { name?: string; tasks: JourneyTask[] }[] = [];\n for (const s of src.body) {\n const keyword = /^(title|section)(?:\\s+(.*))?$/.exec(s.text);\n if (keyword?.[1] === 'title') title = keyword[2]?.trim() || undefined;\n else if (keyword?.[1] === 'section') {\n const name = keyword[2]?.trim();\n sections.push({ ...(name ? { name } : {}), tasks: [] });\n } else {\n if (sections.length === 0) sections.push({ tasks: [] });\n sections[sections.length - 1]!.tasks.push(taskOf(s));\n }\n }\n const named = pageNameOf(src, warnings);\n if (title !== undefined && src.title !== undefined && src.title !== title) warnings.add('The front matter title was dropped; the chart is titled by its own.');\n title ??= src.title;\n const data: JourneyData = { kind: 'journey', ...(title !== undefined ? { title } : {}), sections };\n const name = title ?? named;\n const page: PlotPage = { kind: 'plot', id: 'page-1', ...(name !== undefined ? { name } : {}), ...JOURNEY_PAGE, data };\n return { document: { pages: [page] }, warnings: warnings.all() };\n}\n","/** A plot page holding a user journey as Mermaid `journey` text. */\nimport type { ExportResult, PlotPage } from '../../document';\nimport { Warnings } from '../../graphRead';\n\n/** Writes `page`'s journey as Mermaid. Throws on a page holding another kind of chart. */\nexport function writeMermaidJourney(page: PlotPage): ExportResult {\n const data = page.data;\n if (data.kind !== 'journey') throw new Error(`Mermaid writes this chart as a journey only; the page holds a ${(data as { kind: string }).kind}`);\n const warnings = new Warnings();\n const plain = (s: string, syntax: RegExp): string => {\n if (!syntax.test(s)) return s.trim();\n warnings.add('Mermaid journey text holds no \"#\", \";\" or \":\" (nor \",\" in an actor); they were dropped.');\n return s.replace(syntax, '').trim();\n };\n const lines = ['journey'];\n if (data.title?.trim()) lines.push(` title ${plain(data.title, /[#;]/g)}`);\n data.sections.forEach((section, s) => {\n if (section.name !== undefined && section.name.trim() !== '') lines.push(` section ${plain(section.name, /[#:;]/g)}`);\n else if (s > 0) warnings.add('Mermaid holds a section with no name only first; its steps were written under the section before.');\n for (const t of section.tasks) {\n const score = Math.min(5, Math.max(1, Math.round(Number.isFinite(t.score) ? t.score : 1)));\n if (score !== t.score) warnings.add('Mermaid scores are whole numbers from 1 to 5; others were rounded into that range.');\n const actors = t.actors.map((a) => plain(a, /[#:;,]/g)).filter((a) => a !== '');\n lines.push(` ${plain(t.name, /[#:;]/g)}: ${score}${actors.length > 0 ? `: ${actors.join(', ')}` : ''}`);\n }\n });\n return { text: `${lines.join('\\n')}\\n`, warnings: warnings.all() };\n}\n","/** A Mermaid packet diagram as a one-page document holding a plot page. */\nimport type { PacketData, PacketField } from '@weasel-js/plot';\nimport type { ImportResult, PlotPage } from '../../document';\nimport { Warnings } from '../../graphRead';\nimport { lineError } from '../../lineError';\nimport { pageNameOf, statementsOf, type Statement } from '../common/lines';\nimport { unquote } from '../xychart/parse';\n\n/** The page a packet diagram is read onto. */\nexport const PACKET_PAGE = { width: 800, height: 400 } as const;\n\nconst FIELD = /^(?:(\\d+)(?:\\s*-\\s*(\\d+))?|\\+(\\d+))\\s*:\\s*(\"[^\"]*\"|'[^']*')$/;\n\n/** `0-15: \"label\"`, `16: \"label\"` or `+8: \"label\"` as a field after one ending at `after`. Throws, naming the line, on\n * a line that is not one, or a field that runs backward or overlaps the one before. */\nfunction fieldOf(s: Statement, after: number): PacketField {\n const m = FIELD.exec(s.text);\n if (m === null) throw lineError('Mermaid', s.line, `\"${s.text}\" is not a packet field`);\n const label = unquote(m[4]!);\n if (m[3] !== undefined) {\n const count = Number(m[3]);\n if (count < 1) throw lineError('Mermaid', s.line, 'a field takes at least one bit');\n return { start: after + 1, end: after + count, label, relative: true };\n }\n const start = Number(m[1]);\n const end = m[2] !== undefined ? Number(m[2]) : start;\n if (end < start) throw lineError('Mermaid', s.line, `a field runs from its first bit to its last, and ${start}-${end} runs backward`);\n if (start <= after) throw lineError('Mermaid', s.line, `the field at ${start} overlaps the one before, which ends at bit ${after}`);\n return { start, end, label };\n}\n\n/** Reads a Mermaid `packet-beta` (or `packet`). Throws, naming the line, on text that is not one. */\nexport function readMermaidPacket(text: string): ImportResult {\n const src = statementsOf(text);\n if (!/^packet(?:-beta)?$/.test(src.header.text)) throw lineError('Mermaid', src.header.line, `\"${src.header.text}\" is not a packet header`);\n const warnings = new Warnings();\n let title: string | undefined;\n const fields: PacketField[] = [];\n for (const s of src.body) {\n const t = /^title(?:\\s+(.*))?$/.exec(s.text);\n if (t !== null) title = t[1]?.trim() || undefined;\n else fields.push(fieldOf(s, fields[fields.length - 1]?.end ?? -1));\n }\n const named = pageNameOf(src, warnings);\n if (title !== undefined && src.title !== undefined && src.title !== title) warnings.add('The front matter title was dropped; the chart is titled by its own.');\n title ??= src.title;\n const data: PacketData = { kind: 'packet', ...(title !== undefined ? { title } : {}), fields };\n const name = title ?? named;\n const page: PlotPage = { kind: 'plot', id: 'page-1', ...(name !== undefined ? { name } : {}), ...PACKET_PAGE, data };\n return { document: { pages: [page] }, warnings: warnings.all() };\n}\n","/** A plot page holding a packet diagram as Mermaid `packet-beta` text. */\nimport type { ExportResult, PlotPage } from '../../document';\nimport { Warnings } from '../../graphRead';\n\n/** `s` in double quotes, a quote inside it written as Mermaid's `#quot;`. */\nconst quoted = (s: string): string => `\"${s.replace(/\"/g, '#quot;')}\"`;\n\n/** Writes `page`'s packet diagram as Mermaid. Throws on a page holding another kind of chart. */\nexport function writeMermaidPacket(page: PlotPage): ExportResult {\n const data = page.data;\n if (data.kind !== 'packet') throw new Error(`Mermaid writes this chart as a packet diagram only; the page holds a ${(data as { kind: string }).kind}`);\n const warnings = new Warnings();\n if (data.bitsPerRow !== undefined && data.bitsPerRow !== 32) warnings.add('Mermaid reads bits per row from its configuration only; it was dropped.');\n const lines = ['packet-beta'];\n if (data.title?.trim()) lines.push(` title ${data.title.trim()}`);\n let after = -1;\n for (const f of data.fields) {\n const whole = Number.isInteger(f.start) && Number.isInteger(f.end);\n if (!whole || f.end < f.start || f.start <= after) {\n warnings.add('Mermaid reads fields in order of their bits, never overlapping; fields that run backward or overlap were dropped.');\n continue;\n }\n if (f.relative && f.start !== after + 1) warnings.add('Mermaid counts a field\\'s bits from the end of the one before; fields after a gap were written as ranges.');\n const bits = f.relative && f.start === after + 1 ? `+${f.end - f.start + 1}` : f.start === f.end ? `${f.start}` : `${f.start}-${f.end}`;\n lines.push(` ${bits}: ${quoted(f.label)}`);\n after = f.end;\n }\n return { text: `${lines.join('\\n')}\\n`, warnings: warnings.all() };\n}\n","/** A Mermaid pie as a one-page document holding a plot page. */\nimport type { PieData, PieSlice } from '@weasel-js/plot';\nimport type { ImportResult, PlotPage } from '../../document';\nimport { Warnings } from '../../graphRead';\nimport { lineError } from '../../lineError';\nimport { pageNameOf, statementsOf } from '../common/lines';\nimport { unquote } from '../xychart/parse';\n\n/** The page a pie is read onto. */\nexport const PIE_PAGE = { width: 640, height: 400 } as const;\n\nconst HEADER = /^pie(\\s+showData)?(?:\\s+title(?:\\s+(.*))?)?$/;\nconst SLICE = /^(\"[^\"]*\"|'[^']*')\\s*:\\s*(\\S+)$/;\nconst NUMBER = /^[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?$/i;\n\n/** Reads a Mermaid `pie`. Throws, naming the line, on text that is not one or a value that is not a non-negative number. */\nexport function readMermaidPie(text: string): ImportResult {\n const src = statementsOf(text);\n const head = HEADER.exec(src.header.text);\n if (head === null) throw lineError('Mermaid', src.header.line, `\"${src.header.text}\" is not a pie header`);\n const warnings = new Warnings();\n let title = head[2]?.trim() || undefined;\n const slices: PieSlice[] = [];\n const labels = new Set<string>();\n for (const s of src.body) {\n const t = /^title(?:\\s+(.*))?$/.exec(s.text);\n if (t !== null) {\n title = t[1]?.trim() || undefined;\n continue;\n }\n const m = SLICE.exec(s.text);\n if (m === null) throw lineError('Mermaid', s.line, `\"${s.text}\" is not a pie slice`);\n if (!NUMBER.test(m[2]!)) throw lineError('Mermaid', s.line, `\"${m[2]}\" is not a number`);\n const value = Number(m[2]);\n if (value < 0) throw lineError('Mermaid', s.line, `a slice's value must not be negative, and ${m[2]} is`);\n const label = unquote(m[1]!);\n if (labels.has(label)) {\n warnings.list('Mermaid keeps the first of slices sharing a label; the others were dropped', label);\n continue;\n }\n labels.add(label);\n slices.push({ label, value });\n }\n const named = pageNameOf(src, warnings);\n if (title !== undefined && src.title !== undefined && src.title !== title) warnings.add('The front matter title was dropped; the chart is titled by its own.');\n title ??= src.title;\n const data: PieData = { kind: 'pie', ...(title !== undefined ? { title } : {}), ...(head[1] !== undefined ? { showData: true } : {}), slices };\n const name = title ?? named;\n const page: PlotPage = { kind: 'plot', id: 'page-1', ...(name !== undefined ? { name } : {}), ...PIE_PAGE, data };\n return { document: { pages: [page] }, warnings: warnings.all() };\n}\n","/** A plot page holding a pie as Mermaid `pie` text. */\nimport type { ExportResult, PlotPage } from '../../document';\nimport { Warnings } from '../../graphRead';\n\n/** `s` in double quotes, a quote inside it written as Mermaid's `#quot;`. */\nconst quoted = (s: string): string => `\"${s.replace(/\"/g, '#quot;')}\"`;\n\n/** Writes `page`'s pie as Mermaid. Throws on a page holding another kind of chart. */\nexport function writeMermaidPie(page: PlotPage): ExportResult {\n const data = page.data;\n if (data.kind !== 'pie') throw new Error(`Mermaid writes this chart as a pie only; the page holds a ${(data as { kind: string }).kind}`);\n const warnings = new Warnings();\n const title = data.title?.trim();\n const lines = [`pie${data.showData ? ' showData' : ''}${title ? ` title ${title}` : ''}`];\n const labels = new Set<string>();\n for (const s of data.slices) {\n if (labels.has(s.label)) warnings.add('Mermaid reads only the first of slices sharing a label.');\n labels.add(s.label);\n const ok = Number.isFinite(s.value) && s.value >= 0;\n if (!ok) warnings.add('Mermaid holds only non-negative values; others were written as 0.');\n lines.push(` ${quoted(s.label)} : ${ok ? s.value : 0}`);\n }\n return { text: `${lines.join('\\n')}\\n`, warnings: warnings.all() };\n}\n","/** A Mermaid quadrant chart's statements read into the parts of its spec. */\nimport type { QuadrantAxis, QuadrantPoint, QuadrantPointStyle } from '@weasel-js/plot';\nimport { lineError } from '../../lineError';\nimport type { Statement } from '../common/lines';\nimport { unquote } from '../xychart/parse';\n\nconst NUMBER = /^[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?$/i;\n\n/** Text bare or in double quotes, its quotes and Mermaid's `#quot;` read. */\nexport const textOf = (s: string): string => {\n const t = s.trim();\n return t.length > 1 && t.startsWith('\"') && t.endsWith('\"') ? unquote(t) : t;\n};\n\nfunction numberAt(text: string, line: number): number {\n if (!NUMBER.test(text)) throw lineError('Mermaid', line, `\"${text}\" is not a number`);\n return Number(text);\n}\n\n/** `Low --> High`, `Low -->` or `Low` as an axis's ends. */\nexport function axisOf(rest: string): QuadrantAxis {\n const at = rest.indexOf('-->');\n const low = textOf(at < 0 ? rest : rest.slice(0, at));\n const high = at < 0 ? '' : textOf(rest.slice(at + 3));\n return { ...(low !== '' ? { low } : {}), ...(high !== '' ? { high } : {}) };\n}\n\n/** `radius: 10, color: #ff3300, stroke-color: #10f0f0, stroke-width: 5px` as a style. Throws, naming the line, on\n * anything else. */\nexport function styleOf(text: string, line: number): QuadrantPointStyle {\n const style: QuadrantPointStyle = {};\n for (const part of text.split(',').map((p) => p.trim()).filter((p) => p !== '')) {\n const m = /^([\\w-]+)\\s*:\\s*(\\S+)$/.exec(part);\n if (m === null) throw lineError('Mermaid', line, `\"${part}\" is not a point style`);\n const key = m[1]!;\n const value = m[2]!;\n switch (key) {\n case 'radius': style.radius = numberAt(value, line); break;\n case 'color': style.color = value; break;\n case 'stroke-color': style.strokeColor = value; break;\n case 'stroke-width': style.strokeWidth = numberAt(value.replace(/px$/, ''), line); break;\n default: throw lineError('Mermaid', line, `\"${key}\" is not a point style`);\n }\n }\n return style;\n}\n\nconst POINT = /^(.+?)(?::::([\\w-]+))?\\s*:\\s*\\[([^\\]]*)\\](.*)$/;\n\n/** `Name:::class: [x, y] styles` as a point, or `null` for a line that is not one. Throws, naming the line, on\n * coordinates that are not numbers from 0 to 1. */\nexport function pointOf(s: Statement): QuadrantPoint | null {\n const m = POINT.exec(s.text);\n if (m === null) return null;\n const coords = m[3]!.split(',').map((c) => c.trim());\n if (coords.length !== 2) throw lineError('Mermaid', s.line, `a point takes [x, y], not [${m[3]}]`);\n const [x, y] = coords.map((c) => numberAt(c, s.line)) as [number, number];\n if (x < 0 || x > 1 || y < 0 || y > 1) throw lineError('Mermaid', s.line, `a point's x and y run from 0 to 1, and [${coords.join(', ')}] does not`);\n const style = styleOf(m[4]!, s.line);\n return {\n name: textOf(m[1]!), x, y,\n ...(m[2] !== undefined ? { className: m[2] } : {}),\n ...(Object.keys(style).length > 0 ? { style } : {}),\n };\n}\n","/** A Mermaid quadrant chart as a one-page document holding a plot page. */\nimport type { QuadrantAxis, QuadrantData, QuadrantPoint, QuadrantPointStyle } from '@weasel-js/plot';\nimport type { ImportResult, PlotPage } from '../../document';\nimport { Warnings } from '../../graphRead';\nimport { lineError } from '../../lineError';\nimport { pageNameOf, statementsOf } from '../common/lines';\nimport { axisOf, pointOf, styleOf, textOf } from './parse';\n\n/** The page a quadrant chart is read onto. */\nexport const QUADRANT_PAGE = { width: 600, height: 600 } as const;\n\n/** Reads a Mermaid `quadrantChart`. Throws, naming the line, on text that is not one or a point outside the unit square. */\nexport function readMermaidQuadrant(text: string): ImportResult {\n const src = statementsOf(text);\n if (src.header.text !== 'quadrantChart') throw lineError('Mermaid', src.header.line, `\"${src.header.text}\" is not a quadrantChart header`);\n const warnings = new Warnings();\n let title: string | undefined;\n const axes: { x?: QuadrantAxis; y?: QuadrantAxis } = {};\n const quadrants: [string?, string?, string?, string?] = [undefined, undefined, undefined, undefined];\n const points: QuadrantPoint[] = [];\n const classes: Record<string, QuadrantPointStyle> = {};\n for (const s of src.body) {\n const m = /^(\\S+)(?:\\s+(.*))?$/.exec(s.text)!;\n const keyword = m[1]!;\n const rest = m[2] ?? '';\n const quadrant = /^quadrant-([1-4])$/.exec(keyword);\n if (keyword === 'title') title = rest.trim() || undefined;\n else if (keyword === 'x-axis' || keyword === 'y-axis') axes[keyword[0] as 'x' | 'y'] = axisOf(rest);\n else if (quadrant !== null) quadrants[(Number(quadrant[1]) - 1) as 0 | 1 | 2 | 3] = textOf(rest) || undefined;\n else if (keyword === 'classDef') {\n const c = /^([\\w-]+)\\s*(.*)$/.exec(rest);\n if (c === null) throw lineError('Mermaid', s.line, 'a classDef needs a name');\n classes[c[1]!] = styleOf(c[2]!, s.line);\n } else {\n const point = pointOf(s);\n if (point === null) throw lineError('Mermaid', s.line, `\"${s.text}\" is not a quadrantChart statement`);\n points.push(point);\n }\n }\n const named = pageNameOf(src, warnings);\n if (title !== undefined && src.title !== undefined && src.title !== title) warnings.add('The front matter title was dropped; the chart is titled by its own.');\n title ??= src.title;\n while (quadrants.length > 0 && quadrants[quadrants.length - 1] === undefined) quadrants.pop();\n const axis = (a: QuadrantAxis | undefined) => (a !== undefined && Object.keys(a).length > 0 ? a : undefined);\n const x = axis(axes.x);\n const y = axis(axes.y);\n const data: QuadrantData = {\n kind: 'quadrant',\n ...(title !== undefined ? { title } : {}),\n ...(x !== undefined ? { x } : {}),\n ...(y !== undefined ? { y } : {}),\n ...(quadrants.length > 0 ? { quadrants } : {}),\n points,\n ...(Object.keys(classes).length > 0 ? { classes } : {}),\n };\n const name = title ?? named;\n const page: PlotPage = { kind: 'plot', id: 'page-1', ...(name !== undefined ? { name } : {}), ...QUADRANT_PAGE, data };\n return { document: { pages: [page] }, warnings: warnings.all() };\n}\n","/** A plot page holding a quadrant chart as Mermaid `quadrantChart` text. */\nimport type { QuadrantAxis, QuadrantPointStyle } from '@weasel-js/plot';\nimport type { ExportResult, PlotPage } from '../../document';\nimport { Warnings } from '../../graphRead';\n\n/** Text bare where Mermaid reads it back the same, else in double quotes with a quote inside written `#quot;`. */\nconst text = (s: string): string => (/^[^\\s\"].*$/.test(s) && !/[:[\\]\"]|-->|\\s$/.test(s) ? s : `\"${s.replace(/\"/g, '#quot;')}\"`);\n\nfunction axisLine(name: 'x' | 'y', axis: QuadrantAxis | undefined, warnings: Warnings): string | null {\n if (axis?.low === undefined) {\n if (axis?.high !== undefined) warnings.add('Mermaid holds an axis\\'s high end only with its low end; it was dropped.');\n return null;\n }\n return `${name}-axis ${text(axis.low)}${axis.high !== undefined ? ` --> ${text(axis.high)}` : ''}`;\n}\n\nfunction styleText(style: QuadrantPointStyle | undefined): string {\n if (style === undefined) return '';\n return [\n style.radius !== undefined ? `radius: ${style.radius}` : null,\n style.color !== undefined ? `color: ${style.color}` : null,\n style.strokeColor !== undefined ? `stroke-color: ${style.strokeColor}` : null,\n style.strokeWidth !== undefined ? `stroke-width: ${style.strokeWidth}px` : null,\n ].filter((p) => p !== null).join(', ');\n}\n\n/** Writes `page`'s quadrant chart as Mermaid. Throws on a page holding another kind of chart. */\nexport function writeMermaidQuadrant(page: PlotPage): ExportResult {\n const data = page.data;\n if (data.kind !== 'quadrant') throw new Error(`Mermaid writes this chart as a quadrant chart only; the page holds a ${(data as { kind: string }).kind}`);\n const warnings = new Warnings();\n const lines = ['quadrantChart'];\n if (data.title?.trim()) lines.push(` title ${data.title.trim()}`);\n for (const axis of ['x', 'y'] as const) {\n const line = axisLine(axis, data[axis], warnings);\n if (line !== null) lines.push(` ${line}`);\n }\n data.quadrants?.forEach((label, i) => {\n if (label) lines.push(` quadrant-${i + 1} ${text(label)}`);\n });\n for (const p of data.points) {\n const outside = !(p.x >= 0 && p.x <= 1 && p.y >= 0 && p.y <= 1);\n if (outside) warnings.add('Mermaid holds points from 0 to 1 only; others were moved to the nearest edge.');\n const unit = (v: number) => (Number.isFinite(v) ? Math.min(1, Math.max(0, v)) : 0);\n const style = styleText(p.style);\n lines.push(` ${text(p.name)}${p.className !== undefined ? `:::${p.className}` : ''}: [${unit(p.x)}, ${unit(p.y)}]${style ? ` ${style}` : ''}`);\n }\n for (const [name, style] of Object.entries(data.classes ?? {})) lines.push(` classDef ${name} ${styleText(style)}`);\n return { text: `${lines.join('\\n')}\\n`, warnings: warnings.all() };\n}\n","/** A Mermaid radar's statements, read into the chart they describe. */\nimport type { RadarAxis, RadarCurve, RadarData } from '@weasel-js/plot';\nimport { lineError } from '../../lineError';\nimport type { Statement } from '../common/lines';\n\nconst FORMAT = 'Mermaid';\nconst NUMBER = /^[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?$/i;\n/** An axis or a curve: its id, then an optional quoted label in brackets. */\nconst ITEM = /\\s*([A-Za-z_][\\w-]*)\\s*(?:\\[\\s*\"([^\"]*)\"\\s*\\])?\\s*/y;\n\n/** A curve whose values name their axes, resolved once every axis is known. */\ninterface PendingCurve {\n curve: Omit<RadarCurve, 'values'>;\n entries: { axis?: string; value: number }[];\n line: number;\n}\n\nfunction numberAt(text: string, line: number): number {\n if (!NUMBER.test(text)) throw lineError(FORMAT, line, `\"${text}\" is not a number`);\n return Number(text);\n}\n\n/** An id and its label off `text` at `at`, and where it ends; `null` when no id starts there. */\nfunction itemAt(text: string, at: number): { id: string; label?: string; end: number } | null {\n ITEM.lastIndex = at;\n const m = ITEM.exec(text);\n if (m === null) return null;\n return { id: m[1]!, ...(m[2] !== undefined ? { label: m[2] } : {}), end: ITEM.lastIndex };\n}\n\n/** `axis a[\"A\"], b, …` as its axes. */\nfunction axesOf(rest: string, line: number): RadarAxis[] {\n const out: RadarAxis[] = [];\n let at = 0;\n for (;;) {\n const item = itemAt(rest, at);\n if (item === null) throw lineError(FORMAT, line, `\"${rest.slice(at).trim()}\" is not an axis`);\n out.push({ id: item.id, ...(item.label !== undefined ? { label: item.label } : {}) });\n if (item.end >= rest.length) return out;\n if (rest[item.end] !== ',') throw lineError(FORMAT, line, `\"${rest.slice(item.end).trim()}\" is not an axis`);\n at = item.end + 1;\n }\n}\n\n/** `{1, 2}` or `{a: 1, b: 2}` as its entries. */\nfunction entriesOf(body: string, line: number): PendingCurve['entries'] {\n const parts = body.split(',').map((p) => p.trim());\n if (parts.length === 1 && parts[0] === '') return [];\n const entries = parts.map((p) => {\n const keyed = /^([A-Za-z_][\\w-]*)\\s*:\\s*(.*)$/.exec(p);\n return keyed === null ? { value: numberAt(p, line) } : { axis: keyed[1]!, value: numberAt(keyed[2]!.trim(), line) };\n });\n if (entries.some((e) => e.axis === undefined) && entries.some((e) => e.axis !== undefined)) {\n throw lineError(FORMAT, line, 'a curve\\'s values are either all named by axis or none are');\n }\n return entries;\n}\n\n/** `curve a[\"A\"]{…}, b{…}` as its curves, their values still to be matched to the axes. */\nfunction curvesOf(rest: string, line: number): PendingCurve[] {\n const out: PendingCurve[] = [];\n let at = 0;\n for (;;) {\n const item = itemAt(rest, at);\n if (item === null || rest[item.end] !== '{') throw lineError(FORMAT, line, `\"${rest.slice(at).trim()}\" is not a curve`);\n const close = rest.indexOf('}', item.end);\n if (close < 0) throw lineError(FORMAT, line, 'a curve with no closing \"}\"');\n out.push({ curve: { id: item.id, ...(item.label !== undefined ? { label: item.label } : {}) }, entries: entriesOf(rest.slice(item.end + 1, close), line), line });\n const next = rest.slice(close + 1).trim();\n if (next === '') return out;\n if (!next.startsWith(',')) throw lineError(FORMAT, line, `\"${next}\" is not a curve`);\n at = rest.indexOf(',', close) + 1;\n }\n}\n\n/** A curve's values in axis order. Throws, naming its line, on a count that does not match or an axis left out. */\nfunction resolve(p: PendingCurve, axes: readonly RadarAxis[]): RadarCurve {\n const { curve, entries, line } = p;\n if (entries.every((e) => e.axis === undefined)) {\n if (entries.length !== axes.length) throw lineError(FORMAT, line, `curve \"${curve.id}\" has ${entries.length} value(s) for ${axes.length} axes`);\n return { ...curve, values: entries.map((e) => e.value) };\n }\n for (const e of entries) {\n if (!axes.some((a) => a.id === e.axis)) throw lineError(FORMAT, line, `curve \"${curve.id}\" names no axis \"${e.axis}\"`);\n }\n const values = axes.map((a) => {\n const e = entries.find((x) => x.axis === a.id);\n if (e === undefined) throw lineError(FORMAT, line, `curve \"${curve.id}\" has no value for axis \"${a.id}\"`);\n return e.value;\n });\n return { ...curve, values };\n}\n\n/** Joins a curve whose braces run over several statements into one. */\nfunction joined(body: readonly Statement[]): Statement[] {\n const out: Statement[] = [];\n for (let k = 0; k < body.length; k++) {\n let s = body[k]!;\n const open = (t: string) => (t.match(/\\{/g)?.length ?? 0) - (t.match(/\\}/g)?.length ?? 0);\n while (/^curve\\b/.test(s.text) && open(s.text) > 0 && k + 1 < body.length) s = { ...s, text: `${s.text} ${body[++k]!.text}` };\n out.push(s);\n }\n return out;\n}\n\n/** The chart `body` describes, its `title` statement apart. Throws, naming the line, on a statement it cannot read. */\nexport function parseRadarBody(body: readonly Statement[]): { data: RadarData; title?: string } {\n const axes: RadarAxis[] = [];\n const pending: PendingCurve[] = [];\n const opts: Partial<Pick<RadarData, 'min' | 'max' | 'ticks' | 'graticule' | 'showLegend'>> = {};\n let title: string | undefined;\n for (const { text, line } of joined(body)) {\n const m = /^(\\S+)\\s*(.*)$/.exec(text)!;\n const keyword = m[1]!;\n const rest = m[2]!.trim();\n switch (keyword) {\n case 'title': title = rest; break;\n case 'axis': axes.push(...axesOf(rest, line)); break;\n case 'curve': pending.push(...curvesOf(rest, line)); break;\n case 'max':\n case 'min':\n case 'ticks': opts[keyword] = numberAt(rest, line); break;\n case 'graticule':\n if (rest !== 'circle' && rest !== 'polygon') throw lineError(FORMAT, line, `\"${rest}\" is not a graticule; it is circle or polygon`);\n opts.graticule = rest;\n break;\n case 'showLegend':\n if (rest !== 'true' && rest !== 'false') throw lineError(FORMAT, line, `\"${rest}\" is not true or false`);\n opts.showLegend = rest === 'true';\n break;\n default:\n throw lineError(FORMAT, line, `\"${keyword}\" is not a radar statement`);\n }\n }\n const curves = pending.map((p) => resolve(p, axes));\n return { data: { kind: 'radar', axes, curves, ...opts }, ...(title !== undefined ? { title } : {}) };\n}\n","/** A Mermaid radar as a one-page document holding a plot page. */\nimport type { RadarData } from '@weasel-js/plot';\nimport type { ImportResult, PlotPage } from '../../document';\nimport { Warnings } from '../../graphRead';\nimport { lineError } from '../../lineError';\nimport { pageNameOf, statementsOf } from '../common/lines';\nimport { parseRadarBody } from './parse';\n\n/** The page a radar is read onto. */\nexport const RADAR_PAGE = { width: 640, height: 560 } as const;\n\n/** Reads a Mermaid `radar-beta` (or `radar`) diagram. Throws, naming the line, on text that is not one. */\nexport function readMermaidRadar(text: string): ImportResult {\n const src = statementsOf(text);\n if (!/^radar(?:-beta)?$/.test(src.header.text)) throw lineError('Mermaid', src.header.line, `\"${src.header.text}\" is not a radar header`);\n const warnings = new Warnings();\n const parsed = parseRadarBody(src.body);\n if (parsed.title !== undefined && src.title !== undefined && parsed.title !== src.title) {\n warnings.add('The front matter title was dropped; the title statement names the chart.');\n }\n const fallback = pageNameOf({ ...src, ...(parsed.title !== undefined ? { title: parsed.title } : {}) }, warnings);\n const title = parsed.title ?? src.title;\n const data: RadarData = { ...parsed.data, ...(title !== undefined && title !== '' ? { title } : {}) };\n const name = title || fallback;\n const page: PlotPage = { kind: 'plot', id: 'page-1', ...(name ? { name } : {}), ...RADAR_PAGE, data };\n return { document: { pages: [page] }, warnings: warnings.all() };\n}\n","/** A plot page holding a radar as Mermaid `radar-beta` text. */\nimport type { ExportResult, PlotPage } from '../../document';\n\nconst ID = /^[A-Za-z_][\\w-]*$/;\n\n/** An axis or curve as Mermaid names it: its id, and its label in brackets where it has one. */\nfunction item(x: { id: string; label?: string }, warn: (m: string) => void): string {\n let id = x.id;\n if (!ID.test(id)) {\n warn('Mermaid ids are a letter or underscore, then letters, digits, \"-\" or \"_\"; others were rewritten.');\n id = /^[A-Za-z_]/.test(id) ? id.replace(/[^\\w-]/g, '_') : `_${id.replace(/[^\\w-]/g, '_')}`;\n }\n if (x.label === undefined) return id;\n if (x.label.includes('\"')) warn('Mermaid labels hold no double quotes; they were written as single quotes.');\n return `${id}[\"${x.label.replace(/\"/g, \"'\")}\"]`;\n}\n\nconst option = (key: string, value: number | string | boolean | undefined): string[] => (value === undefined ? [] : [` ${key} ${value}`]);\n\n/** Writes `page`'s radar as Mermaid. Throws on a page holding another kind of chart. */\nexport function writeMermaidRadar(page: PlotPage): ExportResult {\n const data = page.data;\n if (data.kind !== 'radar') throw new Error(`Mermaid writes this chart as a radar only; the page holds a ${(data as { kind: string }).kind}`);\n const warnings: string[] = [];\n const warn = (m: string) => {\n if (!warnings.includes(m)) warnings.push(m);\n };\n const lines = ['radar-beta'];\n if (data.title !== undefined) lines.push(` title ${data.title}`);\n if (data.axes.length > 0) lines.push(` axis ${data.axes.map((a) => item(a, warn)).join(', ')}`);\n for (const c of data.curves) {\n const values = data.axes.map((_, i) => c.values[i]);\n if (values.some((v) => v === undefined || !Number.isFinite(v))) warn('Mermaid holds a value on every axis; missing ones were written as 0.');\n if (c.values.length > data.axes.length) warn('Values past the last axis were dropped.');\n lines.push(` curve ${item(c, warn)}{${values.map((v) => (v !== undefined && Number.isFinite(v) ? v : 0)).join(', ')}}`);\n }\n lines.push(\n ...option('max', data.max), ...option('min', data.min), ...option('graticule', data.graticule),\n ...option('ticks', data.ticks), ...option('showLegend', data.showLegend),\n );\n return { text: `${lines.join('\\n')}\\n`, warnings };\n}\n","/** A Mermaid sankey as a one-page document holding a plot page: each CSV row `source,target,value` a link. */\nimport type { SankeyData, SankeyLink } from '@weasel-js/plot';\nimport type { ImportResult, PlotPage } from '../../document';\nimport { Warnings } from '../../graphRead';\nimport { lineError } from '../../lineError';\nimport { pageNameOf, statementsOf } from '../common/lines';\n\n/** The page a sankey is read onto. */\nexport const SANKEY_PAGE = { width: 900, height: 540 } as const;\n\nconst NUMBER = /^[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?$/i;\n\n/** One CSV row's fields, RFC 4180 quoting read: `\"a, b\"` holds its comma, and `\"\"` inside quotes is one quote. */\nexport function csvFields(row: string, line: number): string[] {\n const out: string[] = [];\n let k = 0;\n for (;;) {\n while (row[k] === ' ' || row[k] === '\\t') k++;\n let field = '';\n if (row[k] === '\"') {\n for (k++; ; k++) {\n if (k >= row.length) throw lineError('Mermaid', line, 'a quoted field is never closed');\n if (row[k] === '\"' && row[k + 1] === '\"') field += row[k++];\n else if (row[k] === '\"') break;\n else field += row[k];\n }\n k++;\n while (row[k] === ' ' || row[k] === '\\t') k++;\n if (k < row.length && row[k] !== ',') throw lineError('Mermaid', line, `\"${row.slice(k)}\" follows a quoted field`);\n } else {\n const end = row.indexOf(',', k);\n field = row.slice(k, end < 0 ? row.length : end).trim();\n k = end < 0 ? row.length : end;\n }\n out.push(field);\n if (k >= row.length) return out;\n k++;\n }\n}\n\n/** Reads a Mermaid `sankey-beta` (or `sankey`) diagram. Throws, naming the line, on text that is not one. */\nexport function readMermaidSankey(text: string): ImportResult {\n const src = statementsOf(text);\n if (!/^sankey(?:-beta)?$/.test(src.header.text)) throw lineError('Mermaid', src.header.line, `\"${src.header.text}\" is not a sankey header`);\n const links: SankeyLink[] = src.body.map(({ text: row, line }) => {\n const fields = csvFields(row, line);\n if (fields.length !== 3) throw lineError('Mermaid', line, `a row is source,target,value; this one has ${fields.length} field(s)`);\n const [source, target, value] = fields as [string, string, string];\n if (!NUMBER.test(value) || Number(value) < 0) throw lineError('Mermaid', line, `\"${value}\" is not a flow; it is a number not below zero`);\n return { source, target, value: Number(value) };\n });\n const warnings = new Warnings();\n const name = pageNameOf(src, warnings);\n const data: SankeyData = { kind: 'sankey', ...(src.title !== undefined && src.title !== '' ? { title: src.title } : {}), links };\n const page: PlotPage = { kind: 'plot', id: 'page-1', ...(name ? { name } : {}), ...SANKEY_PAGE, data };\n return { document: { pages: [page] }, warnings: warnings.all() };\n}\n","/** A plot page holding a sankey as Mermaid `sankey-beta` text: front matter for its title, then a CSV row per link. */\nimport type { ExportResult, PlotPage } from '../../document';\nimport { titleLines } from '../common/lines';\n\n/** A field bare where it reads back the same, else quoted, a quote inside doubled. A row starting `%%` or `acc` would\n * read as a comment or accessibility text. */\nconst field = (s: string): string => (/[\",\\n]/.test(s) || s !== s.trim() || /^(?:%%|acc)/.test(s) ? `\"${s.replace(/\"/g, '\"\"')}\"` : s);\n\n/** Writes `page`'s sankey as Mermaid. Throws on a page holding another kind of chart. */\nexport function writeMermaidSankey(page: PlotPage): ExportResult {\n const data = page.data;\n if (data.kind !== 'sankey') throw new Error(`Mermaid writes this chart as a sankey only; the page holds a ${(data as { kind: string }).kind}`);\n const warnings: string[] = [];\n const rows = data.links.map((l) => {\n const ok = Number.isFinite(l.value) && l.value >= 0;\n if (!ok && warnings.length === 0) warnings.push('Mermaid holds flows of zero or more; others were written as 0.');\n return `${field(l.source)},${field(l.target)},${ok ? l.value : 0}`;\n });\n return { text: `${[...titleLines(data.title), 'sankey-beta', '', ...rows].join('\\n')}\\n`, warnings };\n}\n","/** A Mermaid timeline as a one-page document holding a plot page. */\nimport type { TimelineData, TimelinePeriod, TimelineSection } from '@weasel-js/plot';\nimport type { ImportResult, PlotPage } from '../../document';\nimport { Warnings } from '../../graphRead';\nimport { lineError } from '../../lineError';\nimport { pageNameOf, statementsOf } from '../common/lines';\n\n/** The page a timeline is read onto. */\nexport const TIMELINE_PAGE = { width: 900, height: 500 } as const;\n\n/** Text as a timeline writes it, `#58;` read back as the colon Mermaid splits on. */\nexport const timelineText = (s: string): string => s.trim().replace(/#58;/g, ':');\n\n/** Reads a Mermaid `timeline`. Throws, naming the line, on text that is not one. */\nexport function readMermaidTimeline(text: string): ImportResult {\n const src = statementsOf(text);\n const warnings = new Warnings();\n const header = /^timeline(?:\\s+(\\S+))?$/.exec(src.header.text);\n if (header === null) throw lineError('Mermaid', src.header.line, `\"${src.header.text}\" is not a timeline header`);\n if (header[1] !== undefined) warnings.add('The timeline\\'s direction was dropped; it is drawn left to right.');\n let title: string | undefined;\n const sections: { name?: string; periods: TimelinePeriod[] }[] = [{ periods: [] }];\n let last: TimelinePeriod | null = null;\n for (const s of src.body) {\n const keyword = /^(title|section)(?:\\s+(.*))?$/.exec(s.text);\n if (keyword?.[1] === 'title') {\n title = timelineText(keyword[2] ?? '');\n continue;\n }\n if (keyword?.[1] === 'section') {\n sections.push({ name: timelineText(keyword[2] ?? ''), periods: [] });\n last = null;\n continue;\n }\n const [label, ...events] = s.text.split(':').map(timelineText);\n const said = events.filter((e) => e !== '');\n if (label === '') {\n if (last === null) throw lineError('Mermaid', s.line, 'an event with no period above it');\n last.events = [...last.events, ...said];\n continue;\n }\n last = { label: label!, events: said };\n sections[sections.length - 1]!.periods.push(last);\n }\n const name = pageNameOf(src, warnings);\n if (title !== undefined && src.title !== undefined && title !== src.title) {\n warnings.add('The front matter title was dropped; the chart is named by its title statement.');\n }\n const chartTitle = title || src.title;\n const kept: TimelineSection[] = sections.filter((sec, i) => i > 0 || sec.periods.length > 0);\n const data: TimelineData = { kind: 'timeline', ...(chartTitle ? { title: chartTitle } : {}), sections: kept };\n const pageName = chartTitle || name;\n const page: PlotPage = { kind: 'plot', id: 'page-1', ...(pageName ? { name: pageName } : {}), ...TIMELINE_PAGE, data };\n return { document: { pages: [page] }, warnings: warnings.all() };\n}\n","/** A plot page holding a timeline as Mermaid `timeline` text. */\nimport type { ExportResult, PlotPage } from '../../document';\nimport { Warnings } from '../../graphRead';\n\n/** `s` on one line, the colon Mermaid splits on written as `#58;`. */\nfunction timelineText(s: string, warnings: Warnings): string {\n if (/[\\r\\n]/.test(s)) warnings.add('Mermaid timeline text holds one line; line breaks were written as spaces.');\n return s.replace(/\\s*[\\r\\n]+\\s*/g, ' ').replace(/:/g, '#58;');\n}\n\n/** Writes `page`'s timeline as Mermaid. Throws on a page holding another kind of chart. */\nexport function writeMermaidTimeline(page: PlotPage): ExportResult {\n const data = page.data;\n if (data.kind !== 'timeline') throw new Error(`Mermaid writes this chart as a timeline only; the page holds a ${(data as { kind: string }).kind}`);\n const warnings = new Warnings();\n const text = (s: string) => timelineText(s, warnings);\n const lines = ['timeline'];\n if (data.title !== undefined) lines.push(` title ${text(data.title)}`);\n let named = false;\n data.sections.forEach((section, i) => {\n if (section.name !== undefined) {\n lines.push(` section ${text(section.name)}`);\n named = true;\n } else if (i > 0) {\n warnings.add('Mermaid holds no unnamed section after the first; its periods were written into the section before it.');\n }\n const indent = named ? ' ' : ' ';\n for (const period of section.periods) {\n const events = period.events.filter((e) => e.trim() !== '');\n if (events.length < period.events.length) warnings.add('Mermaid holds no empty events; they were dropped.');\n lines.push(`${indent}${[text(period.label), ...events.map(text)].join(' : ')}`);\n }\n });\n return { text: `${lines.join('\\n')}\\n`, warnings: warnings.all() };\n}\n","/** Mermaid as a {@link DiagramFormat}: one format, each diagram kind read and written by its own codec. */\nimport { FLOWCHART_NOTATION } from '@weasel-js/diagram';\nimport type { DiagramDocument, DiagramFormat, DocumentPage, ExportResult, ImportResult, PageKind, WriteOptions } from '../document';\nimport { writtenPage } from '../document';\nimport { lineError } from '../lineError';\nimport { readArchitecture } from './architecture/read';\nimport { writeArchitecture } from './architecture/write';\nimport { readBlockDiagram } from './block/read';\nimport { writeBlockDiagram } from './block/write';\nimport { C4_HEADERS } from './c4/parse';\nimport { C4_NOTATIONS, readC4 } from './c4/read';\nimport { writeC4 } from './c4/write';\nimport { readClassDiagram } from './class/read';\nimport { writeClassDiagram } from './class/write';\nimport { MERMAID_KINDS, headerWord } from './common/header';\nimport { readErDiagram } from './er/read';\nimport { writeErDiagram } from './er/write';\nimport { readFlowchart } from './flowchart/read';\nimport { readKanban } from './kanban/read';\nimport { writeKanban } from './kanban/write';\nimport { writeFlowchart } from './flowchart/write';\nimport { readMindmap } from './mindmap/read';\nimport { writeMindmap } from './mindmap/write';\nimport { readMermaidSequence } from './sequence/read';\nimport { writeMermaidSequence } from './sequence/write';\nimport { readRequirementDiagram } from './requirement/read';\nimport { writeRequirementDiagram } from './requirement/write';\nimport { readStateDiagram } from './state/read';\nimport { writeStateDiagram } from './state/write';\nimport { readMermaidXychart } from './xychart/read';\nimport { writeMermaidXychart } from './xychart/write';\nimport type { PlotKind } from '@weasel-js/plot';\nimport { readMermaidGantt } from './gantt/read';\nimport { writeMermaidGantt } from './gantt/write';\nimport { readMermaidGitGraph } from './gitgraph/read';\nimport { writeMermaidGitGraph } from './gitgraph/write';\nimport { readMermaidJourney } from './journey/read';\nimport { writeMermaidJourney } from './journey/write';\nimport { readMermaidPacket } from './packet/read';\nimport { writeMermaidPacket } from './packet/write';\nimport { readMermaidPie } from './pie/read';\nimport { writeMermaidPie } from './pie/write';\nimport { readMermaidQuadrant } from './quadrant/read';\nimport { writeMermaidQuadrant } from './quadrant/write';\nimport { readMermaidRadar } from './radar/read';\nimport { writeMermaidRadar } from './radar/write';\nimport { readMermaidSankey } from './sankey/read';\nimport { writeMermaidSankey } from './sankey/write';\nimport { readMermaidTimeline } from './timeline/read';\nimport { writeMermaidTimeline } from './timeline/write';\n\n/** A Mermaid diagram kind this format reads and writes. */\ninterface MermaidKind {\n /** Its header word, as an error names it. */\n name: string;\n /** What its header's first word matches. */\n header: RegExp;\n /** The kind of page it reads into and writes from. */\n page: PageKind;\n /** For a graph kind, the `notation` it reads into and writes from. The flowchart has none: it writes every graph no kind claims. */\n notation?: string;\n /** For a plot kind, the kind of chart it reads into and writes from. */\n plot?: PlotKind;\n read(text: string): ImportResult;\n write(doc: DiagramDocument, opts?: WriteOptions): ExportResult;\n}\n\nconst FLOWCHART: MermaidKind = { name: 'flowchart', header: /^(?:flowchart|graph|flowchart-elk)$/, page: 'graph', read: readFlowchart, write: writeFlowchart };\n\n/** Every kind read, by header. */\nconst KINDS: readonly MermaidKind[] = [\n FLOWCHART,\n { name: 'classDiagram', header: /^classDiagram(?:-v2)?$/, page: 'graph', notation: 'class', read: readClassDiagram, write: writeClassDiagram },\n { name: 'stateDiagram', header: /^stateDiagram(?:-v2)?$/, page: 'graph', notation: 'state', read: readStateDiagram, write: writeStateDiagram },\n { name: 'erDiagram', header: /^erDiagram$/, page: 'graph', notation: 'er', read: readErDiagram, write: writeErDiagram },\n { name: 'mindmap', header: /^mindmap$/, page: 'graph', notation: 'mindmap', read: readMindmap, write: writeMindmap },\n { name: 'requirementDiagram', header: /^requirementDiagram$/, page: 'graph', notation: 'requirement', read: readRequirementDiagram, write: writeRequirementDiagram },\n {\n name: 'sequenceDiagram', header: /^sequenceDiagram$/, page: 'sequence', read: readMermaidSequence,\n write: (doc, opts) => writeMermaidSequence(pageOfKind(doc, opts, 'sequence')),\n },\n { name: 'xychart', header: /^xychart(?:-beta)?$/, page: 'plot', plot: 'xychart', read: readMermaidXychart, write: (doc, opts) => writeMermaidXychart(pageOfKind(doc, opts, 'plot')) },\n { name: 'gantt', header: /^gantt$/, page: 'plot', plot: 'gantt', read: readMermaidGantt, write: (doc, opts) => writeMermaidGantt(pageOfKind(doc, opts, 'plot')) },\n { name: 'timeline', header: /^timeline$/, page: 'plot', plot: 'timeline', read: readMermaidTimeline, write: (doc, opts) => writeMermaidTimeline(pageOfKind(doc, opts, 'plot')) },\n { name: 'pie', header: /^pie$/, page: 'plot', plot: 'pie', read: readMermaidPie, write: (doc, opts) => writeMermaidPie(pageOfKind(doc, opts, 'plot')) },\n { name: 'quadrantChart', header: /^quadrantChart$/, page: 'plot', plot: 'quadrant', read: readMermaidQuadrant, write: (doc, opts) => writeMermaidQuadrant(pageOfKind(doc, opts, 'plot')) },\n { name: 'journey', header: /^journey$/, page: 'plot', plot: 'journey', read: readMermaidJourney, write: (doc, opts) => writeMermaidJourney(pageOfKind(doc, opts, 'plot')) },\n { name: 'gitGraph', header: /^gitGraph:?$/, page: 'plot', plot: 'gitgraph', read: readMermaidGitGraph, write: (doc, opts) => writeMermaidGitGraph(pageOfKind(doc, opts, 'plot')) },\n { name: 'sankey-beta', header: /^sankey(?:-beta)?$/, page: 'plot', plot: 'sankey', read: readMermaidSankey, write: (doc, opts) => writeMermaidSankey(pageOfKind(doc, opts, 'plot')) },\n { name: 'packet-beta', header: /^packet(?:-beta)?$/, page: 'plot', plot: 'packet', read: readMermaidPacket, write: (doc, opts) => writeMermaidPacket(pageOfKind(doc, opts, 'plot')) },\n { name: 'radar-beta', header: /^radar(?:-beta)?$/, page: 'plot', plot: 'radar', read: readMermaidRadar, write: (doc, opts) => writeMermaidRadar(pageOfKind(doc, opts, 'plot')) },\n { name: 'block-beta', header: /^block(?:-beta)?$/, page: 'graph', notation: 'block', read: readBlockDiagram, write: writeBlockDiagram },\n { name: 'architecture-beta', header: /^architecture(?:-beta)?$/, page: 'graph', notation: 'architecture', read: readArchitecture, write: writeArchitecture },\n ...C4_HEADERS.map((h): MermaidKind => ({ name: h, header: new RegExp(`^${h}$`), page: 'graph', notation: C4_NOTATIONS[h], read: readC4, write: writeC4 })),\n { name: 'kanban', header: /^kanban$/, page: 'graph', notation: 'kanban', read: readKanban, write: writeKanban },\n];\n\n/** The page `opts` names, which must be of `kind`. */\nfunction pageOfKind<K extends PageKind>(doc: DiagramDocument, opts: WriteOptions | undefined, kind: K): Extract<DocumentPage, { kind: K }> {\n const page = writtenPage(doc, opts);\n if (page?.kind !== kind) throw new Error(`Mermaid writes this diagram from a ${kind} page only`);\n return page as Extract<DocumentPage, { kind: K }>;\n}\n\nconst FLOWCHART_HEADER = /^(?:flowchart|graph|flowchart-elk)(?:\\s+(?:TB|TD|BT|LR|RL|[<>^v]))?\\s*(?:;|$)/i;\n\n/** The kind `text` is, or a flowchart, whose reader then says what is wrong with it. Throws on a kind not read. */\nfunction kindOf(text: string): MermaidKind {\n const header = headerWord(text);\n if (header === null) return FLOWCHART;\n const known = KINDS.find((k) => k.header.test(header.word));\n if (known !== undefined) return known;\n if (MERMAID_KINDS.test(header.word)) {\n throw lineError('Mermaid', header.line, `${header.word} diagrams are not read; only ${KINDS.map((k) => k.name).join(', ')} are`);\n }\n return FLOWCHART;\n}\n\n/** Writes the page `opts.page` names, else the first, in the kind its page kind and `notation` say. */\nfunction writeMermaid(doc: DiagramDocument, opts?: WriteOptions): ExportResult {\n const page = writtenPage(doc, opts);\n if (page === null) return FLOWCHART.write(doc, opts);\n const notation = page.kind === 'graph' && page.notation !== FLOWCHART_NOTATION ? page.notation : undefined;\n const plot = page.kind === 'plot' ? page.data.kind : undefined;\n const kind = KINDS.find((k) => k.page === page.kind && k.notation === notation && k.plot === plot);\n if (kind !== undefined) return kind.write(doc, opts);\n const written = FLOWCHART.write(doc, opts);\n return notation === undefined ? written\n : { ...written, warnings: [`Mermaid has no ${notation} diagram; the page was written as a flowchart.`, ...written.warnings] };\n}\n\n/** Mermaid diagrams, one page per file, laid out on import. Any Mermaid diagram is recognized, so reading a kind not read says which it is. */\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_HEADER.test(header.text) || KINDS.some((k) => k !== FLOWCHART && k.header.test(header.word))\n || MERMAID_KINDS.test(header.word));\n },\n read: (text) => kindOf(text).read(text),\n write: writeMermaid,\n onePage: true,\n kinds: ['graph', 'sequence', 'plot'],\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","/** Plot pages to and from a scene: one plot root per page, which the plot package compiles and keeps. */\nimport type { PlacedPage } from '@weasel-js/core';\nimport type { DiagramTheme, MeasureRowText } from '@weasel-js/diagram';\nimport { plotRootOf, plotSpecs, type PlotMeasure, type PlotSpec, type PlotTheme } from '@weasel-js/plot';\nimport type { PlotPage } from './document';\n\n/** A diagram theme's colors by the roles a chart draws in: text in the label color, axes in the connector stroke,\n * grid lines in the container stroke, series in its series, in its face. */\nexport function plotThemeOf(theme: DiagramTheme): PlotTheme {\n return {\n text: theme.label.fill,\n axis: theme.edge.stroke,\n grid: theme.container.stroke,\n series: theme.series.length > 0 ? theme.series : [theme.edge.stroke],\n font: { fontFamily: theme.font.family, fontSize: theme.font.size },\n };\n}\n\n/** A row measurer as a plot measures a line. */\nexport const plotMeasureOf = (measure: MeasureRowText): PlotMeasure =>\n (text, font) => measure(text, { fontFamily: font.fontFamily, fontSize: font.fontSize });\n\n/** The id of the plot root drawing the page `pageId`. */\nexport const plotRootIdOf = (pageId: string): string => `${pageId}/plot`;\n\n/** The nodes plot page `page` draws as, filling it where it is placed. */\nexport function plotPageSpecs<TLayer extends string>(\n page: PlotPage, at: { x: number; y: number }, opts: { layer: TLayer; theme: DiagramTheme; measure?: MeasureRowText },\n): PlotSpec<TLayer>[] {\n return plotSpecs(page.data, {\n id: plotRootIdOf(page.id), layer: opts.layer, box: { x: at.x, y: at.y, width: page.width, height: page.height },\n theme: plotThemeOf(opts.theme), ...(opts.measure ? { measure: plotMeasureOf(opts.measure) } : {}),\n });\n}\n\n/** The plot page `page` holds when the outermost node `root` placed on it is a plot root; `null` when it is not one. */\nexport function plotPageOf(page: PlacedPage, root: { data: unknown }): PlotPage | null {\n const trait = plotRootOf(root);\n if (trait === null) return null;\n return { kind: 'plot', id: page.id, ...(page.name !== undefined ? { name: page.name } : {}), width: page.width, height: page.height, data: trait.data };\n}\n","/** A graph page's notation, layout, and direction, kept on its scene page so they survive the scene. */\nimport type { Page } from '@weasel-js/core';\nimport type { DocumentPage, GraphPage } from './document';\n\n/** The key a scene page's `meta` holds a graph page's {@link GraphPageSettings} under. */\nexport const GRAPH_PAGE_META_KEY = 'diagram:graph';\n\n/** What a graph page says beyond its data: how it is laid out and what it models. */\nexport type GraphPageSettings = Pick<GraphPage, 'direction' | 'layout' | 'notation'>;\n\n/** `page`'s settings as a scene page's `meta`, or `undefined` when it has none. */\nexport function graphPageMeta(page: DocumentPage): Page['meta'] {\n if (page.kind !== 'graph') return undefined;\n const { direction, layout, notation } = page;\n const settings: GraphPageSettings = {\n ...(direction !== undefined ? { direction } : {}),\n ...(layout !== undefined ? { layout } : {}),\n ...(notation !== undefined ? { notation } : {}),\n };\n return Object.keys(settings).length > 0 ? { [GRAPH_PAGE_META_KEY]: settings } : undefined;\n}\n\n/** The graph settings scene page `page` keeps; empty when it keeps none. */\nexport function graphPageSettingsOf(page: Pick<Page, 'meta'>): GraphPageSettings {\n return (page.meta?.[GRAPH_PAGE_META_KEY] as GraphPageSettings | undefined) ?? {};\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 { deepEqual } from '@weasel-js/registry';\nimport {\n DEFAULT_PORTS, EDGE_STROKE_WIDTH, NODE_STROKE_WIDTH, dataEdgeStyle, dataNodeStyle, dataRegionStyle, diagramContainerOf, diagramEdgeOf, layoutOwnsPort,\n layoutOwnsRoute, poolAxisOf, sequencePartOf, sequenceRootOf, titleIdOf, type DataContainer, type DataEdge, type DataGroup, type DataLane, type DataNode, type DiagramLabel,\n type DiagramRouter, type DiagramTheme, type EdgeStyle, type NodeStyle, type BodyDivider, type BodyLayout, type Row,\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; trim?: unknown; markerStart?: unknown; markerEnd?: unknown };\ntype Data = {\n diagram?: Record<string, unknown>; fill?: Paint; stroke?: Paint; text?: unknown; bodyRow?: unknown; bodyField?: unknown; style?: { fontSize?: unknown };\n};\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 => deepEqual(a, b, { undefinedAsAbsent: true });\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' | 'sequence' | null {\n if (sequenceRootOf(node) !== null) return 'sequence';\n if (sequencePartOf(node) !== null) return 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/** Text rows and divider rows, each at its place. */\nfunction withDividers(text: readonly { index: number; row: Row }[], dividers: readonly BodyDivider[]): Row[] {\n const all = [...text, ...dividers.map((d) => ({ index: d.index, row: (d.inset === undefined ? { kind: 'divider' } : { kind: 'divider', inset: d.inset }) as Row }))];\n return all.sort((a, b) => a.index - b.index).map((e) => e.row);\n}\n\n/** A text row as built: a `field` while its text still starts with its label, else a `label`. */\nfunction textRow(data: Data, ownSize: boolean): Row {\n const text = data.text as string;\n const style = ownSize ? { style: { fontSize: data.style?.fontSize as number } } : {};\n const prefix = typeof data.bodyField === 'string' ? `${data.bodyField}: ` : null;\n return prefix !== null && text.startsWith(prefix)\n ? { kind: 'field', label: data.bodyField as string, value: text.slice(prefix.length), ...style }\n : { kind: 'label', text, ...style };\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 BodyLayout | undefined;\n const dividers = body?.dividers ?? [];\n const fields = rows.some((r) => typeof dataOf(r).bodyField === 'string');\n return {\n id: node.id,\n outline: trait.outline as DataNode['outline'],\n ...(ownSize || fields || dividers.length > 0\n ? { rows: withDividers(rows.map((r) => ({ index: dataOf(r).bodyRow as number, row: textRow(dataOf(r), ownSize) })), dividers) }\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 {\n at, ...(label.offset !== undefined ? { offset: label.offset } : {}), ...(label.inset !== undefined ? { inset: label.inset } : {}),\n ...(label.dodge === false ? { dodge: false } : {}),\n };\n}\n\n/** The label nodes at a connector's ends. */\nexport interface EndLabelNodes { from?: ReadNode; to?: ReadNode }\n\n/** The text of the labels at a connector's ends, `undefined` for none. */\nfunction endLabelsOf(ends: EndLabelNodes | undefined): DataEdge['endLabels'] {\n const text = (n: ReadNode | undefined) => {\n const t = dataOf(n).text;\n return typeof t === 'string' && t !== '' ? t : undefined;\n };\n const out = { ...optional('from', text(ends?.from)), ...optional('to', text(ends?.to)) };\n return Object.keys(out).length > 0 ? out : undefined;\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(\n node: ReadNode, labels: { label?: ReadNode | undefined; ends?: EndLabelNodes | undefined }, page: Vec2 | null, theme: DiagramTheme,\n): DataEdge {\n const { label } = labels;\n const endLabels = endLabelsOf(labels.ends);\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, trim: stroke?.trim as EdgeStyle['trim'],\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 ...(endLabels !== undefined ? { endLabels } : {}),\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 composeWorldPose, pageHolding, placedPagesOf, scenePoseAdapter, type PlacedPage, type RectPose, type Scene,\n} from '@weasel-js/core';\nimport {\n DIAGRAM_THEME_KEY, FLOWCHART_NOTATION, diagramLabelOf, diagramNotationOf, documentBoundsOf, endLabelIdOf, diagramThemeFrom, offPageSplits, sequenceRootOf, type DataContainer,\n type DataEdge, type DataGroup, type DataNode, type DiagramTheme, type SequenceData,\n} from '@weasel-js/diagram';\nimport type { DiagramDocument, DocumentPage, GraphPage, PlotPage } from './document';\nimport { graphPageSettingsOf } from './graphPageMeta';\nimport { plotPageOf } from './plotPages';\nimport { kindOf, readEdge, readGroup, readRegion, readShape, type EndLabelNodes, 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 {\n nodes: DataNode[]; edges: DataEdge[]; groups: DataGroup[]; containers: DataContainer[];\n /** The first sequence on the page, which makes it a sequence page. */\n sequence?: SequenceData;\n}\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 page holding a plot root is a plot page of its spec, and\n * whatever else is on it is left out. 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. A page holding a sequence's root is a sequence page holding\n * its data; the parts drawn from it, and anything else on that page, are not read.\n * A graph page takes the notation, layout, and direction its scene page keeps; with no notation there, the one the\n * scene's diagram type writes (`diagramNotationOf`).\n */\nexport function documentFromScene<TData, TLayer extends string, TPose>(\n scene: Scene<TData, TLayer, TPose>, opts: DocumentFromSceneOptions = {},\n): DiagramDocument {\n const s = inWorld(scene);\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 plots = new Map<string, PlotPage>();\n for (const node of s.renderOrderNodes()) {\n const page = plotPageOf(pageOf(node), node);\n if (page !== null && !plots.has(page.id)) plots.set(page.id, page);\n }\n\n const labels = new Map<string, ReadNode>();\n const endLabels = new Map<string, EndLabelNodes>();\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) continue;\n const edge = deps[0]!;\n const end = node.id === endLabelIdOf(edge, 'from') ? 'from' : node.id === endLabelIdOf(edge, 'to') ? 'to' : null;\n if (end === null) labels.set(edge, node);\n else endLabels.set(edge, { ...endLabels.get(edge), [end]: 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 === 'sequence') {\n bucket.sequence ??= sequenceRootOf(node)!.sequence;\n continue;\n }\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 const read = (page: PlacedPage | { x: number; y: number } | null) =>\n readEdge(node, { label: labels.get(node.id), ends: endLabels.get(node.id) }, page, theme);\n if (fromPage === toPage && !split) buckets.get(fromPage.id)!.edges.push(read(fromPage));\n else crossPageEdges.push(read(split ? null : { x: 0, y: 0 }));\n }\n\n return {\n pages: pages.map((p): DocumentPage => {\n const plot = plots.get(p.id);\n if (plot !== undefined) return plot;\n const { nodes, edges: pageEdges, groups, containers, sequence } = buckets.get(p.id)!;\n const base = { id: p.id, ...(p.name !== undefined ? { name: p.name } : {}), width: p.width, height: p.height };\n if (sequence !== undefined) return { kind: 'sequence', ...base, data: sequence };\n const { notation: own, ...settings } = graphPageSettingsOf(p);\n const notation = own ?? diagramNotationOf(s);\n return {\n kind: 'graph',\n ...base,\n ...settings,\n ...(notation !== FLOWCHART_NOTATION ? { notation } : {}),\n data: { nodes, edges: pageEdges, ...(groups.length > 0 ? { groups } : {}), ...(containers.length > 0 ? { containers } : {}) },\n } satisfies GraphPage;\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\n/** `scene` read with every node at the pose it is drawn at in document space. */\nfunction inWorld<TData, TLayer extends string, TPose>(scene: Scene<TData, TLayer, TPose>): AnyScene {\n const raw = scene as unknown as AnyScene;\n const poses = scenePoseAdapter(scene as never);\n const placed = (node: ReadNode): ReadNode => ({ ...node, pose: composeWorldPose(poses, node.id, scene.composition.compose as never) });\n return {\n roots: raw.roots,\n doc: raw.doc,\n childrenOf: (id) => raw.childrenOf(id),\n get: (id) => {\n const node = raw.get(id);\n return node === undefined ? undefined : placed(node);\n },\n renderOrderNodes: () => raw.renderOrderNodes().map(placed),\n };\n}\n","/** Which kinds of page a scene would export as, read from its top-level nodes alone. */\nimport { pageHolding, placedPagesOf, type Scene } from '@weasel-js/core';\nimport { documentBoundsOf, sequenceRootOf } from '@weasel-js/diagram';\nimport { plotRootOf } from '@weasel-js/plot';\nimport type { PageKind } from './document';\n\n/**\n * The kinds of page `documentFromScene` would make of `scene`, without making\n * them: a page holding a plot's root is a plot page, one holding a sequence's\n * root a sequence page, any other a graph page. Cheap enough to ask on every\n * menu render.\n */\nexport function scenePageKinds<TData, TLayer extends string, TPose>(scene: Scene<TData, TLayer, TPose>): ReadonlySet<PageKind> {\n const placed = placedPagesOf(scene);\n const claimed = new Map<string, PageKind>();\n const kinds = new Set<PageKind>();\n for (const id of scene.roots) {\n const node = scene.get(id)!;\n const kind: PageKind | null = plotRootOf(node) !== null ? 'plot' : sequenceRootOf(node) !== null ? 'sequence' : null;\n if (kind === null) continue;\n kinds.add(kind);\n const page = placed.length === 0 ? null : pageHolding(placed, documentBoundsOf(scene as never, node as never));\n if (page && !claimed.has(page.id)) claimed.set(page.id, kind);\n }\n if (placed.length === 0 ? kinds.size === 0 : placed.some((p) => !claimed.has(p.id))) kinds.add('graph');\n return kinds;\n}\n","/** A sequence page as a scene: one root holding its data, inside the page's margin. */\nimport type { Vec2 } from '@weasel-js/core/math';\nimport { sequenceLayout, sequenceSpecs, themeFont, type DiagramSpec, type DiagramTheme, type MeasureRowText } from '@weasel-js/diagram';\nimport type { SequencePage } from './document';\nimport { PAGE_MARGIN } from './pageLayout';\n\ntype Draw = { theme: DiagramTheme; measure?: MeasureRowText };\n\n/** The id of the root a sequence page's data is drawn under. */\nexport const sequenceRootIdOf = (pageId: string): string => `${pageId}/sequence`;\n\n/** `page`'s size, grown to hold its layout and the margin around it. */\nexport function sequencePageSize(page: SequencePage, draw: Draw): { width: number; height: number } {\n const layout = sequenceLayout(page.data, { font: themeFont(draw.theme), ...(draw.measure ? { measure: draw.measure } : {}) });\n return {\n width: Math.max(page.width, layout.width + PAGE_MARGIN * 2),\n height: Math.max(page.height, layout.height + PAGE_MARGIN * 2),\n };\n}\n\n/** The specs of `page` placed with its top-left corner at `at`. */\nexport function sequencePageSpecs(page: SequencePage, at: Vec2, draw: Draw): DiagramSpec[] {\n return sequenceSpecs(page.data, {\n id: sequenceRootIdOf(page.id), at: { x: at.x + PAGE_MARGIN, y: at.y + PAGE_MARGIN }, theme: draw.theme,\n ...(draw.measure ? { measure: draw.measure } : {}),\n });\n}\n","/** A {@link DiagramDocument} as scene specs and document values: what every import draws from. */\nimport { PAGES_DOC_KEY, layoutPages, type Page, type PlacedPage, type SerializedDoc } from '@weasel-js/core';\nimport {\n DIAGRAM_THEME_KEY, DIAGRAM_TYPE_DOC_KEY, diagramScene, diagramThemeFrom, diagramTypeDocValue, diagramTypeOfNotation, themeDocValue,\n type DataEdge, type DiagramData, type DiagramSpec, type DiagramTheme, type DiagramType, type MeasureRowText,\n} from '@weasel-js/diagram';\nimport type { DiagramDocument, DocumentPage, GraphPage } from './document';\nimport { graphPageMeta } from './graphPageMeta';\nimport { laidOutPage, needsLayout } from './pageLayout';\nimport { plotPageSpecs } from './plotPages';\nimport { sequencePageSize, sequencePageSpecs } from './sequencePage';\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`, `diagram:theme`, and `diagram:type` document values. */\nexport interface DocumentScene<TLayer extends string = 'main'> {\n specs: DiagramSpec<TLayer>[];\n doc: SerializedDoc;\n}\n\ntype Draw = { theme: DiagramTheme; measure?: MeasureRowText };\n\n/** `page` ready to place: a graph laid out if it needs it, a sequence grown to hold its layout. */\nfunction prepared(page: DocumentPage, draw: Draw): DocumentPage {\n if (page.kind === 'sequence') return { ...page, ...sequencePageSize(page, draw) };\n if (page.kind !== 'graph') return page;\n return needsLayout(page) ? laidOutPage(page, draw) : page;\n}\n\n/**\n * Every graph page, moved to its place, and the edges between pages, drawn by one `diagramScene` call with no layout,\n * so the scene holds places and routes and no layout runs again.\n */\nfunction graphSpecs(pages: readonly { page: GraphPage; at: PlacedPage }[], crossPageEdges: readonly DataEdge[], draw: Draw): DiagramSpec[] {\n const data: DiagramData = { nodes: [], edges: [], groups: [], containers: [] };\n for (const { page, at } of pages) {\n const shifted = shiftData(page.data, at);\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, ...crossPageEdges];\n return diagramScene(data, { layout: 'none', ...draw });\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 graph page whose\n * nodes all have a place is drawn where they say; any other is laid out\n * first, with `layered`, its placed nodes pinned (and grows to hold the\n * result). A sequence page is drawn from its data, one root holding it, and\n * grows to hold its layout. A plot page is one plot root filling its page, its\n * marks under it (`plotSpecs`), drawn in the theme's colors. A graph page's\n * notation, layout, and direction go on its `core:pages` page, under\n * `meta['diagram:graph']`, where `documentFromScene` reads them back. When\n * every graph page's notation is one a diagram type claims, the scene opens as\n * that type (`diagram:type`), its stencils with it.\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 draw: Draw = { theme, ...(opts.measure ? { measure: opts.measure } : {}) };\n const pages = document.pages.map((p) => prepared(p, draw));\n const pageList = pages.map(scenePageOf);\n const placed = layoutPages(pageList);\n const specs = placedSpecs(pages.map((page, i) => ({ page, at: placed[i]! })), document.crossPageEdges ?? [], draw, opts.layer);\n const type = typeOfGraphs(pages);\n return {\n specs,\n doc: {\n [PAGES_DOC_KEY]: { pages: pageList }, [DIAGRAM_THEME_KEY]: themeDocValue(theme),\n ...(type !== null ? { [DIAGRAM_TYPE_DOC_KEY]: diagramTypeDocValue(type.id) } : {}),\n },\n };\n}\n\n/** `page` as a scene's `core:pages` lists it, its graph settings in its `meta`. */\nfunction scenePageOf(page: DocumentPage): Page {\n const { id, name, width, height } = page;\n const meta = graphPageMeta(page);\n return { id, ...(name !== undefined ? { name } : {}), width, height, ...(meta !== undefined ? { meta } : {}) };\n}\n\n/** Each page's nodes, drawn where it is placed, and the edges between them. */\nfunction placedSpecs<TLayer extends string>(\n pages: readonly { page: DocumentPage; at: PlacedPage }[], crossPageEdges: readonly DataEdge[], draw: Draw, layerIn?: TLayer,\n): DiagramSpec<TLayer>[] {\n const layer = (layerIn ?? 'main') as TLayer;\n const graphs = pages.flatMap(({ page, at }) => (page.kind === 'graph' ? [{ page, at }] : []));\n const specs = [\n ...graphSpecs(graphs, crossPageEdges, draw),\n ...pages.flatMap(({ page, at }) => (page.kind === 'sequence' ? sequencePageSpecs(page, at, draw) : [])),\n ].map((s) => ({ ...s, layer })) as DiagramSpec<TLayer>[];\n // A plot root's scene data is the plot package's, which a diagram scene carries as it carries any node's.\n for (const { page, at } of pages) {\n if (page.kind === 'plot') specs.push(...(plotPageSpecs(page, at, { layer, ...draw }) as unknown as DiagramSpec<TLayer>[]));\n }\n return specs;\n}\n\n/**\n * One more page for a scene: `page` as its `core:pages` lists it, and the nodes it draws as once placed where\n * `placeAt` puts it, as `documentSpecs` draws a page. A graph page with no place for a node is laid out first; a\n * sequence page grows to hold its layout.\n */\nexport function pageSpecs<TLayer extends string = 'main'>(\n page: DocumentPage, placeAt: (page: Page) => PlacedPage, opts: DocumentSpecsOptions<TLayer> = {},\n): { page: Page; specs: DiagramSpec<TLayer>[] } {\n const draw: Draw = { theme: opts.theme ?? diagramThemeFrom(undefined), ...(opts.measure ? { measure: opts.measure } : {}) };\n const ready = prepared(page, draw);\n const listed = scenePageOf(ready);\n return { page: listed, specs: placedSpecs([{ page: ready, at: placeAt(listed) }], [], draw, opts.layer) };\n}\n\n/** The diagram type every graph page's notation names, or `null` when there are none, they differ, or no type claims it. */\nfunction typeOfGraphs(pages: readonly DocumentPage[]): DiagramType | null {\n const types = new Set(pages.flatMap((p) => (p.kind === 'graph' ? [diagramTypeOfNotation(p.notation)] : [])));\n return types.size === 1 ? [...types][0]! : null;\n}\n","/** The Mermaid each sequence and chart template starts from: small, but showing what its kind draws. */\nimport type { PlotKind } from '@weasel-js/plot';\n\nexport const SEQUENCE_STARTER = `sequenceDiagram\n participant Client\n participant Server\n Client->>Server: Request\n Server-->>Client: Response\n`;\n\n/** One per chart kind, with the label a menu calls it. */\nexport const PLOT_STARTERS: Readonly<Record<PlotKind, { label: string; source: string }>> = {\n xychart: {\n label: 'XY chart',\n source: `xychart-beta\n title \"Sales\"\n x-axis [Q1, Q2, Q3, Q4]\n y-axis \"Revenue\" 0 --> 100\n bar [40, 55, 70, 62]\n line [40, 55, 70, 62]\n`,\n },\n gantt: {\n label: 'Gantt',\n source: `gantt\n dateFormat YYYY-MM-DD\n section Plan\n Scope :a1, 2026-01-05, 5d\n Design :a2, after a1, 7d\n section Build\n Implement :b1, after a2, 10d\n Release :milestone, after b1, 0d\n`,\n },\n timeline: {\n label: 'Timeline',\n source: `timeline\n title Milestones\n 2024 : Founded\n 2025 : First release : First customer\n 2026 : Second release\n`,\n },\n pie: {\n label: 'Pie',\n source: `pie\n title Share\n \"Alpha\" : 45\n \"Beta\" : 30\n \"Gamma\" : 25\n`,\n },\n quadrant: {\n label: 'Quadrant',\n source: `quadrantChart\n title Effort and impact\n x-axis Low Effort --> High Effort\n y-axis Low Impact --> High Impact\n quadrant-1 Plan\n quadrant-2 Do now\n quadrant-3 Skip\n quadrant-4 Delegate\n Idea A: [0.3, 0.7]\n Idea B: [0.7, 0.8]\n Idea C: [0.6, 0.3]\n`,\n },\n journey: {\n label: 'User journey',\n source: `journey\n title Getting started\n section Sign up\n Find the site: 4: User\n Create an account: 3: User\n section First use\n Make something: 5: User\n`,\n },\n gitgraph: {\n label: 'Git graph',\n source: `gitGraph\n commit\n branch feature\n commit\n checkout main\n commit\n merge feature\n`,\n },\n sankey: {\n label: 'Sankey',\n source: `sankey-beta\nSource A,Middle,30\nSource B,Middle,20\nMiddle,Out X,35\nMiddle,Out Y,15\n`,\n },\n packet: {\n label: 'Packet',\n source: `packet-beta\n 0-15: \"Source\"\n 16-31: \"Destination\"\n 32-63: \"Payload\"\n`,\n },\n radar: {\n label: 'Radar',\n source: `radar-beta\n axis a[\"Speed\"], b[\"Cost\"], c[\"Quality\"], d[\"Reach\"]\n curve x[\"Plan A\"]{4, 3, 5, 2}\n curve y[\"Plan B\"]{3, 4, 2, 5}\n max 5\n min 0\n`,\n },\n};\n","/** Templates: a new page of every kind a document holds, from an empty graph of each diagram type to a small chart. */\nimport { DIAGRAM_TYPES, FLOWCHART_NOTATION, type DiagramType } from '@weasel-js/diagram';\nimport type { PlotKind } from '@weasel-js/plot';\nimport type { DiagramDocument, DocumentPage, GraphPage } from '../document';\nimport { DIAGRAM_MERMAID } from '../mermaid/format';\nimport { PLOT_STARTERS, SEQUENCE_STARTER } from './starters';\n\n/** Where a menu lists a template: with the diagrams, as a sequence diagram, or with the charts. */\nexport type PageTemplateGroup = 'diagram' | 'sequence' | 'chart';\n\n/** A new page of one kind. */\nexport interface PageTemplate {\n id: string;\n label: string;\n icon?: DiagramType['icon'];\n group: PageTemplateGroup;\n /** The diagram type a document made from it takes: the one a graph template draws. */\n diagramType?: string;\n /** The page, under `id`. `size` is a graph page's; a sequence or a chart takes the size its content needs. */\n page(id: string, size?: { width: number; height: number }): DocumentPage;\n}\n\n/** A graph page's size when none is asked for: letter, landscape, at 96 per inch. */\nexport const TEMPLATE_PAGE_SIZE = { width: 1056, height: 816 } as const;\n\n/** The page `source` reads into, under `id`. */\nfunction readPage(source: string, id: string): DocumentPage {\n const { document } = DIAGRAM_MERMAID.read!(source) as { document: DiagramDocument };\n return { ...document.pages[0]!, id };\n}\n\nfunction graphTemplate(type: DiagramType): PageTemplate {\n return {\n id: type.id, label: type.label, group: 'diagram', diagramType: type.id, ...(type.icon !== undefined ? { icon: type.icon } : {}),\n page: (id, size = TEMPLATE_PAGE_SIZE): GraphPage => ({\n kind: 'graph', id, width: size.width, height: size.height, data: { nodes: [], edges: [] },\n notation: type.notations?.[0] ?? FLOWCHART_NOTATION,\n }),\n };\n}\n\nconst SEQUENCE_TEMPLATE: PageTemplate = {\n id: 'sequence', label: 'Sequence', group: 'sequence', page: (id) => readPage(SEQUENCE_STARTER, id),\n};\n\nconst plotTemplate = (kind: PlotKind): PageTemplate => ({\n id: `plot:${kind}`, label: PLOT_STARTERS[kind].label, group: 'chart', page: (id) => readPage(PLOT_STARTERS[kind].source, id),\n});\n\n/** Every template, by id, in menu order: each diagram type's, the sequence diagram's, then each chart kind's. */\nexport const PAGE_TEMPLATES: Readonly<Record<string, PageTemplate>> = Object.freeze(Object.fromEntries([\n ...Object.values(DIAGRAM_TYPES).map(graphTemplate),\n SEQUENCE_TEMPLATE,\n ...(Object.keys(PLOT_STARTERS) as PlotKind[]).map(plotTemplate),\n].map((t) => [t.id, t])));\n","/** A template as a new scene, or as one more page of one. */\nimport { addPage, layoutPages, nextPageId, pagesOf, type Page, type Scene } from '@weasel-js/core';\nimport { DIAGRAM_TYPE_DOC_KEY, diagramTypeDocValue } from '@weasel-js/diagram';\nimport { documentSpecs, pageSpecs, type DocumentScene, type DocumentSpecsOptions } from '../toScene';\nimport type { PageTemplate } from './catalog';\n\n/** A new document of one page made from `template`, as {@link documentSpecs} draws it, with the diagram type the\n * template names. */\nexport function templateSpecs<TLayer extends string = 'main'>(\n template: PageTemplate, opts: DocumentSpecsOptions<TLayer> & { size?: { width: number; height: number } } = {},\n): DocumentScene<TLayer> {\n const { size, ...draw } = opts;\n const scene = documentSpecs({ pages: [template.page('page-1', size)] }, draw);\n if (template.diagramType === undefined) return scene;\n return { ...scene, doc: { ...scene.doc, [DIAGRAM_TYPE_DOC_KEY]: diagramTypeDocValue(template.diagramType) } };\n}\n\n/** Options for {@link addTemplatePage}. */\nexport interface AddTemplatePageOptions<TLayer extends string = 'main'> extends DocumentSpecsOptions<TLayer> {\n /** Where the page goes in the page order. Default last. */\n index?: number;\n /** A graph page's size. Default the template's. */\n size?: { width: number; height: number };\n}\n\n/** Adds a page made from `template` to `scene`, and what it draws on it, as one undo entry, `Add page`. Returns the new\n * page's id. */\nexport function addTemplatePage<TData, TLayer extends string, TPose>(\n scene: Scene<TData, TLayer, TPose>, template: PageTemplate, opts: AddTemplatePageOptions<TLayer> = {},\n): string {\n const { index, size, ...draw } = opts;\n const doc = pagesOf(scene as never);\n const pages = doc?.pages ?? [];\n const id = nextPageId(pages);\n const at = index ?? pages.length;\n const placeAt = (page: Page) => layoutPages([...pages.slice(0, at), page, ...pages.slice(at)], doc?.layout)[at]!;\n const { page, specs } = pageSpecs(template.page(id, size), placeAt, draw);\n scene.batch('Add page', () => {\n addPage(scene, page, { index: at });\n for (const spec of specs) scene.add(spec as never);\n });\n return id;\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 composeWorldPose,\n derivedDepOf,\n derivedPartsOf,\n documentOf,\n effectivePose,\n INHERIT,\n resolvePartPaint,\n isAnnotationLayer,\n scenePoseAdapter,\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 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(live: PageExportScene, page: PageRect): SvgNode[] {\n // An export writes the document, not what an open gesture or edit is showing.\n const scene = documentOf(live);\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 // A child stores its pose in its parent's frame; the walk below is handed every pose in the world.\n const poses = { ...scenePoseAdapter(scene as never), getPose: (id: string) => effectivePose(scene, scene.get(id as never)!) };\n const pose = (node: SceneNode): RectPose => {\n let p = poseCache.get(node.id);\n if (p === undefined) poseCache.set(node.id, (p = composeWorldPose(poses as never, node.id, scene.composition.compose as never) as RectPose));\n return p;\n };\n const pathOf = (node: SceneNode) => (node.kind === 'mark' ? 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.clip ? { clip: node.clip } : {}),\n ...(node.copiesFromPose ? { copiesFromPose: node.copiesFromPose as SvgKitTreeNode['copiesFromPose'] } : {}),\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 });\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 /** The document's language, a BCP 47 tag. Default: the language every text on the pages shares, if they share one. */\n lang?: 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 ...(opts.lang !== undefined ? { lang: opts.lang } : {}),\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"]}