{
  "version": 3,
  "sources": ["../../../src/diagrams/agentflow/diagnostics.ts", "../../../src/diagrams/agentflow/shapes.ts", "../../../src/diagrams/agentflow/colorSlots.ts", "../../../src/diagrams/agentflow/agentflowDb.ts", "../../../src/diagrams/agentflow/renderer.ts", "../../../src/diagrams/agentflow/parser/agentflow.jison", "../../../src/diagrams/agentflow/parser/agentflowParser.ts", "../../../src/diagrams/agentflow/styles.ts", "../../../src/diagrams/agentflow/diagram.ts"],
  "sourcesContent": ["/**\n * Agentflow diagnostics \u2014 structured warnings/errors emitted by the DB\n * during parse, post-parse validation, and rendering. Downstream tooling\n * reads these via `AgentFlowDB.getDiagnostics()`.\n *\n * v0.8.1: capability evaluation, the instance-of mechanism, type /\n * template declarations, the `procs` reference shape, and `==>`-based\n * container-edge data flow are all removed. Their diagnostic codes are\n * gone with them. New codes cover the v0.8.1 additions: removed-shape\n * usage, removed-operator usage, reference-edge label rejection, and\n * flow-no-input validation.\n *\n * v0.8.2 (issue #64): the parser no longer performs property-level metadata\n * validation or semantic checks. The IDs it still raises are enumerated in\n * {@link PARSER_EMITTED_DIAGNOSTICS}; everything else stays part of the shared\n * diagnostic vocabulary but is **reserved** \u2014 emitted by the semantics module,\n * not by anything in this package. See {@link RESERVED_DIAGNOSTICS}.\n *\n * v0.8.2 (issue #66): `METADATA_KEY_LEGACY_PROMPT` is removed from the\n * vocabulary. `prompt` is not an agentflow metadata key \u2014 the canonical key\n * is `instruction` \u2014 and nothing aliases, warns about, or rejects it. An\n * authored `prompt` is carried as-is like any other unknown key and surfaces\n * downstream as `METADATA_UNKNOWN_KEY` from the semantics module.\n */\n\nimport type { ElementPosition } from './types.js';\n\n/**\n * Stable IDs for every diagnostic the agentflow DB may emit.\n *\n * These IDs are part of the public contract consumed by conformance\n * fixtures (issue #13) and any downstream tooling. Adding new IDs is\n * additive; renaming an existing ID is a breaking change.\n */\nexport const AgentflowWarning = {\n  /**\n   * Shape annotation that v0.8.1 does *not* remove explicitly but the\n   * renderer doesn't recognise. The renderer falls back to roundedRect.\n   * Distinct from `SHAPE_REMOVED`, which is a hard error.\n   */\n  SHAPE_UNSUPPORTED: 'SHAPE_UNSUPPORTED',\n  /**\n   * Shape explicitly removed in v0.8.1 (\u00A74.3.3): `doc`, `stadium`,\n   * `terminal`, `circle`, `trapezoid`/`inv-trapezoid`, `double-circle`,\n   * `typeDeclaration`, `procs`, the five per-kind instance shapes, plus\n   * `cylinder`, `ellipse`, `odd`, `lean_left`. Hard error.\n   */\n  SHAPE_REMOVED: 'SHAPE_REMOVED',\n  /**\n   * Edge operator removed in v0.8.1 (\u00A75.1): `==>`, `~~`, `-.->`, plus\n   * marker variants of `--` (`<-->`, `o--o`, `--o`, `-->>`). Hard error.\n   *\n   * Reserved \u2014 emitted by the semantics module, never by this package.\n   */\n  EDGE_OPERATOR_UNSUPPORTED: 'EDGE_OPERATOR_UNSUPPORTED',\n  /**\n   * A label was authored on a `-.-` reference edge. Per \u00A75.2 reference\n   * edges carry no parameter/channel meaning so a label \"would not mean\n   * anything\"; the label is ignored. Warn tier.\n   *\n   * Reserved \u2014 emitted by the semantics module, never by this package.\n   */\n  REFERENCE_EDGE_LABEL_REJECTED: 'REFERENCE_EDGE_LABEL_REJECTED',\n  /**\n   * A `connectorRef` value's prefix (or whole bare-id form) doesn't\n   * resolve to a declared `connector`. Per \u00A78.1. Warn-only pre-1.0;\n   * error from v1.0.\n   *\n   * Reserved \u2014 emitted by the semantics module, never by this package.\n   */\n  CONNECTOR_REF_UNRESOLVED: 'CONNECTOR_REF_UNRESOLVED',\n  /**\n   * A `connectorRef` value resolves to an id that exists but isn't a\n   * connector declaration (it's a vertex, flow, etc.). Per \u00A78.1\n   * connectors must be declared with the `connector` keyword. Warn pre-\n   * 1.0; error from v1.0.\n   *\n   * Reserved \u2014 emitted by the semantics module, never by this package.\n   */\n  CONNECTOR_REF_NOT_A_CONNECTOR: 'CONNECTOR_REF_NOT_A_CONNECTOR',\n  /**\n   * A known domain metadata key appears on an element kind it isn't\n   * declared for per the \u00A710 applicability table (e.g. `params` on a\n   * `refdoc`, or `protocol` on a `flow`). Universal keys (`description`,\n   * `instruction`, plus structural and presentation controls) are\n   * excluded. Warn pre-1.0; error from v1.0.\n   *\n   * Reserved \u2014 emitted by the semantics module, never by this package.\n   */\n  METADATA_KEY_MISAPPLIED: 'METADATA_KEY_MISAPPLIED',\n  /**\n   * Two declarations in the node-or-container namespace (\u00A79) share an\n   * id \u2014 e.g. two `a[\"...\"]` vertex declarations, or a vertex and a\n   * container with the same id. Implicit vertices created by edge\n   * resolution do not count as declarations. Warn-only pre-1.0; error\n   * from v1.0 behind `agentflow.strictIds`.\n   *\n   * Reserved \u2014 emitted by the semantics module, never by this package.\n   */\n  DUPLICATE_ID_NODE: 'DUPLICATE_ID_NODE',\n  /**\n   * An author declared an id reserved for synthetic renderer output.\n   * v0.8.1 keeps `connectors` reserved through pre-1.0 even though the\n   * real `connector` keyword removes the synthesised group; reservation\n   * stays for forward compat. Warn-only.\n   *\n   * Reserved \u2014 emitted by the semantics module, never by this package.\n   */\n  RESERVED_SYNTHETIC_ID: 'RESERVED_SYNTHETIC_ID',\n  /**\n   * A container's child violates the \u00A73.3 containment matrix. In v0.8.1\n   * the matrix is trivial \u2014 only `flow` is a container, and it accepts\n   * nested `flow` plus any node. Warn-only pre-1.0; error from v1.0\n   * behind `agentflow.strictContainment`.\n   */\n  CONTAINMENT_VIOLATION: 'CONTAINMENT_VIOLATION',\n  /**\n   * An edge's \u00A75.1 semantic is incompatible with the kinds of its\n   * endpoints. v0.8.1 covers two cases:\n   *\n   * - A `-.-` reference edge has no `refdoc`-shape endpoint (the only\n   *   meaningful target for \u00A716.2 reference-document attachment).\n   * - A `--x` failure edge originates from a non-flow endpoint.\n   *\n   * Warn-only pre-1.0; error from v1.0 behind the future\n   * `agentflow.strictEdgeSemantics` flag.\n   *\n   * Reserved \u2014 emitted by the semantics module, never by this package.\n   */\n  EDGE_SEMANTIC_CONTRADICTION: 'EDGE_SEMANTIC_CONTRADICTION',\n  /**\n   * A `flow` container's tree contains no input node (`shape: input`,\n   * canonical `lean-right`). Per \u00A710.2 a flow must declare its required\n   * inputs; the runtime / editor prompts the user for any missing\n   * values. Warn pre-1.0; error from v1.0.\n   *\n   * Reserved \u2014 emitted by the semantics module, never by this package.\n   */\n  FLOW_NO_INPUT: 'FLOW_NO_INPUT',\n} as const;\n\nexport type AgentflowWarningId = (typeof AgentflowWarning)[keyof typeof AgentflowWarning];\n\n/**\n * The IDs this package actually raises. Everything else in\n * {@link AgentflowWarning} is **reserved**: part of the shared vocabulary, with\n * a stable meaning, but emitted by the semantics module rather than by the\n * parser/DB shipped here.\n *\n * The split is explicit so downstream tooling can tell \"will never fire from\n * mermaid\" from \"may fire from mermaid\" instead of building matchers against\n * codes this package cannot produce. `diagnostics.spec.ts` keeps this set\n * honest against the source.\n */\nexport const PARSER_EMITTED_DIAGNOSTICS: ReadonlySet<AgentflowWarningId> = new Set([\n  AgentflowWarning.SHAPE_UNSUPPORTED,\n  AgentflowWarning.SHAPE_REMOVED,\n  AgentflowWarning.CONTAINMENT_VIOLATION,\n]);\n\n/**\n * IDs reserved for the semantics module. Listed here so the reservation is\n * data, not prose: nothing in this package emits them today.\n */\nexport const RESERVED_DIAGNOSTICS: ReadonlySet<AgentflowWarningId> = new Set(\n  (Object.values(AgentflowWarning) as AgentflowWarningId[]).filter(\n    (id) => !PARSER_EMITTED_DIAGNOSTICS.has(id)\n  )\n);\n\n/**\n * A single diagnostic. `nodeId` / `edgeId` and `position` are best-effort\n * context: fixtures match on `id` and may assert on `nodeId` or `position`\n * when they are populated. Downstream tooling should treat unknown IDs as\n * opaque strings and preserve them through serialisation.\n */\nexport interface AgentflowDiagnostic {\n  id: AgentflowWarningId;\n  severity: 'warning' | 'error';\n  message: string;\n  nodeId?: string;\n  edgeId?: string;\n  position?: ElementPosition;\n}\n\n/** Caller-supplied context for a diagnostic. Either `nodeId` or `edgeId`\n *  (or neither) \u2014 setting both is not supported and the edgeId is ignored\n *  if `nodeId` is also present. */\nexport interface AgentflowDiagnosticContext {\n  nodeId?: string;\n  edgeId?: string;\n}\n", "/**\n * Agentflow's shape vocabulary \u2014 the single source of truth for the \u00A74.3\n * aliases, the shapes v0.8.1 removed, and the shapes it allows.\n *\n * This used to be duplicated between `agentflowDb.ts` (alias resolution at\n * `addVertex` time) and `transformData.ts` (validation at render time), and the\n * two copies had already drifted.\n */\nimport { log } from '../../logger.js';\n\n/**\n * v0.8.1 shape aliases (\u00A74.3.2). Author-friendly names map to canonical Mermaid\n * shape IDs. `round` is a forgiving legacy alias of `rect`, which the render\n * pass then normalises to {@link DEFAULT_SHAPE}.\n */\nexport const SHAPE_ALIASES: ReadonlyMap<string, string> = new Map([\n  ['task', 'roundedRect'],\n  ['tool', 'subroutine'],\n  ['input', 'lean-right'],\n  ['decision', 'diamond'],\n  ['refdoc', 'lin-doc'],\n  ['action', 'hexagon'],\n  ['round', 'rect'],\n]);\n\n/**\n * Shapes that are *removed* in v0.8.1 (\u00A74.3.3). Authoring any of these is a hard\n * error (`SHAPE_REMOVED`); the node is coerced to {@link DEFAULT_SHAPE} rather\n * than crashing the render.\n */\nexport const REMOVED_SHAPES: ReadonlySet<string> = new Set([\n  'doc',\n  'stadium',\n  'terminal',\n  'circle',\n  'trapezoid',\n  'inv_trapezoid',\n  'inv-trapezoid',\n  'doublecircle',\n  'double-circle',\n  'typeDeclaration',\n  'procs',\n  'lean_left',\n  'lean-left',\n  'in-out',\n  'cylinder',\n  'ellipse',\n  'odd',\n  // Instance shapes \u2014 instancing mechanism removed entirely.\n  'tag-rect',\n  'tagged-rectangle',\n  'delay',\n  'half-rounded-rectangle',\n  'lin-rect',\n  'lined-rectangle',\n  'win-pane',\n  'window-pane',\n  'curv-trap',\n  'curved-trapezoid',\n]);\n\n/**\n * Shapes the v0.8.1 spec allows authors to use, as canonical Mermaid shape IDs\n * after alias resolution. `rect`/`squareRect` are normalised to\n * {@link DEFAULT_SHAPE} before this set is consulted, so they are not listed.\n */\nexport const ALLOWED_SHAPES: ReadonlySet<string> = new Set([\n  'roundedRect',\n  'subroutine',\n  'subprocess',\n  'subproc',\n  'framed-rectangle',\n  'lean-right',\n  'diamond',\n  'lin-doc',\n  'lined-document',\n  'hexagon',\n  'hex',\n  'connector',\n  // Collapsed flow container\n  'collapsedGroup',\n]);\n\nexport const DEFAULT_SHAPE = 'roundedRect';\n\n/**\n * Resolve a shape name (alias or canonical) to its canonical Mermaid shape ID.\n * Returns the input unchanged when no alias matches.\n */\nexport function resolveShapeAlias(shape: string | undefined): string | undefined {\n  if (!shape) {\n    return shape;\n  }\n  return SHAPE_ALIASES.get(shape) ?? shape;\n}\n\n/** Minimal diagnostic sink, so this module does not have to know about the DB. */\nexport interface ShapeDiagnosticSink {\n  emitError?: (id: 'SHAPE_REMOVED', message: string, ctx: { nodeId: string }) => void;\n  emitWarning?: (id: 'SHAPE_UNSUPPORTED', message: string, ctx: { nodeId: string }) => void;\n}\n\ninterface ShapedNode {\n  id: string;\n  shape?: string;\n  isGroup?: boolean;\n}\n\n/**\n * Normalise every node's shape to a canonical, supported ID, reporting removed\n * and unsupported shapes through `sink`. Group nodes keep their cluster shape.\n */\nexport function normaliseNodeShapes(nodes: ShapedNode[], sink?: ShapeDiagnosticSink): void {\n  for (const node of nodes) {\n    // Group/cluster nodes use specific cluster shapes \u2014 don't override\n    if (node.isGroup) {\n      continue;\n    }\n\n    // Map rect/squareRect (incl. the `round` \u2192 `rect` alias) to the canonical\n    // rounded default.\n    if (!node.shape || node.shape === 'squareRect' || node.shape === 'rect') {\n      node.shape = DEFAULT_SHAPE;\n    }\n\n    if (REMOVED_SHAPES.has(node.shape)) {\n      const msg = `shape \"${node.shape}\" was removed in v0.8.1, using \"${DEFAULT_SHAPE}\"`;\n      if (sink?.emitError) {\n        sink.emitError('SHAPE_REMOVED', msg, { nodeId: node.id });\n      } else {\n        log.warn(`agentflow: ${msg}`);\n      }\n      node.shape = DEFAULT_SHAPE;\n      continue;\n    }\n\n    if (!ALLOWED_SHAPES.has(node.shape)) {\n      const msg = `shape \"${node.shape}\" is not supported, using \"${DEFAULT_SHAPE}\"`;\n      if (sink?.emitWarning) {\n        sink.emitWarning('SHAPE_UNSUPPORTED', msg, { nodeId: node.id });\n      } else {\n        log.warn(`agentflow: ${msg}`);\n      }\n      node.shape = DEFAULT_SHAPE;\n    }\n  }\n}\n", "/**\n * Palette slots for agentflow, under the redux colour themes.\n *\n * Two different rules, because agentflow has two different things to colour:\n *\n * - **Nodes take a colour per KIND.** A `tool` is not a `task` is not a `decision` \u2014 the\n *   diagram type exists to say so \u2014 and colour that tracks kind is invariant under\n *   editing: inserting a node in the middle recolours nothing. Each kind is pinned to a\n *   fixed palette slot, so a tool is the same colour in every diagram.\n * - **Containers cycle a counter**, exactly as flowchart subgraphs do: one counter across\n *   the whole diagram, in declaration order, so sibling containers differ and a nested one\n *   continues the cycle instead of restarting it.\n *\n * The two ranges are kept apart. Kinds own slots `0 .. KIND_COUNT-1` and containers cycle\n * the slots above them, so a container frame can never land on the same colour as a node\n * inside it \u2014 which would read as the node bleeding into its own container.\n *\n * Kind comes from the db's own `vertexKind`, never from the rendered shape. Shape is not\n * one-to-one with kind \u2014 a `connector` and a `task` are both `roundedRect` \u2014 so inverting\n * the shape map would silently paint every connector as a task.\n */\nimport { getConfig } from '../../diagram-api/diagramAPI.js';\nimport type { Node } from '../../rendering-util/types.js';\n\n/**\n * Fixed slot per kind. Declaration order of this map is the palette order, so `tool` is\n * always the first palette colour, `task` the second, and so on.\n */\nexport const KIND_SLOT: ReadonlyMap<string, number> = new Map([\n  ['tool', 0],\n  ['task', 1],\n  ['decision', 2],\n  ['input', 3],\n  ['refdoc', 4],\n  ['connector', 5],\n  ['action', 6],\n]);\n\n/** Slots reserved for kinds. Containers start above this. */\nexport const KIND_COUNT = KIND_SLOT.size;\n\n/** Class marking a node's kind, matched by the rules `styles.ts` emits. */\nexport const kindClass = (kind: string): string => `af-kind-${kind}`;\n\n/** Every kind, for the stylesheet to iterate. */\nexport const KINDS: readonly string[] = [...KIND_SLOT.keys()];\n\n/**\n * How many slots containers may cycle through, given a palette length.\n *\n * At least one: a palette shorter than the kind range would otherwise yield a modulo by\n * zero, and one repeated container colour beats a crash.\n */\nexport const containerSlotCount = (paletteLength: number): number =>\n  Math.max(1, paletteLength - KIND_COUNT);\n\n/**\n * The palette slot for the `n`th container, given the palette length.\n *\n * The single source of truth for both sides. `stampColorSlot` reduces whatever index it is\n * given modulo the palette length, so the stylesheet has to name the slot the stamp will\n * actually produce \u2014 otherwise a palette shorter than the kind range assigns slot 7, the\n * stamp writes `color-1`, and the rule for `color-7` matches nothing. Measured before this\n * was shared: a 3-colour palette left every container unpainted.\n *\n * On such a short palette a container will land on a kind's colour. That is unavoidable \u2014\n * seven kinds already collide among themselves below eight colours \u2014 and a shared colour\n * beats an unpainted frame.\n */\nexport const containerSlot = (n: number, paletteLength: number): number => {\n  const slot = KIND_COUNT + (n % containerSlotCount(paletteLength));\n  return paletteLength > 0 ? slot % paletteLength : slot;\n};\n\n/**\n * Tag every node with its kind class, and give every container its slot.\n *\n * Nodes are tagged rather than stamped with `data-color-id` because agentflow draws\n * through six different shapes \u2014 `subroutine`, `diamond`, `hexagon`, `lean-right`,\n * `lin-doc`, `roundedRect` \u2014 and of the shared shapes only `squareRect` stamps for\n * itself. A class travels through the shared pipeline on every one of them, and keeps this\n * change inside agentflow instead of editing six files other diagrams also draw with.\n *\n * Containers use `colorIndex` and nothing else \u2014 the same mechanism flowchart subgraphs,\n * block composites, state composites and usecase boundaries all use. Both forms are\n * covered: `createContainerGroup` stamps the expanded frame and `collapsedGroup.ts` stamps\n * the collapsed one, so collapsing a container keeps its colour.\n *\n * `containerOrder` carries declaration order, which the node array does not: `getData()`\n * walks `subGraphs` in reverse, and `subGraphs` is itself in completion order, so neither\n * it nor its reverse is the order the author wrote. The caller does that walk.\n */\nexport function assignColorSlots(\n  nodes: Node[],\n  kindOf: (id: string) => string | undefined,\n  containerOrder: ReadonlyMap<string, number>\n): void {\n  const palette = (getConfig().themeVariables as { borderColorArray?: unknown })?.borderColorArray;\n  const paletteLength = Array.isArray(palette) ? palette.length : 0;\n\n  // Containers that the walk did not reach still need a slot, and they must not all take\n  // the same one. Counted after the declared ones so nothing shifts.\n  let fallbackOrdinal = containerOrder.size;\n  for (const node of nodes ?? []) {\n    // A collapsed container is drawn as a single node (`isGroup` is false) but it is still\n    // a container, and it takes its slot like one -- so collapsing a container does not\n    // reshuffle the colours of the ones after it. Flowchart does the same for a collapsed\n    // subgraph.\n    if (node.isGroup || node.shape === 'collapsedGroup') {\n      const n = containerOrder.get(String(node.id)) ?? fallbackOrdinal++;\n      node.colorIndex = containerSlot(n, paletteLength);\n      continue;\n    }\n    const kind = kindOf(String(node.id));\n    if (kind && KIND_SLOT.has(kind)) {\n      node.cssClasses = `${node.cssClasses ?? ''} ${kindClass(kind)}`.replace(/\\s+/g, ' ').trim();\n    }\n  }\n}\n", "import { select } from 'd3';\nimport * as yaml from 'js-yaml';\nimport { getConfig, defaultConfig } from '../../diagram-api/diagramAPI.js';\nimport type { DiagramDB } from '../../diagram-api/types.js';\nimport { log } from '../../logger.js';\nimport { isValidShape, type ShapeID } from '../../rendering-util/rendering-elements/shapes.js';\nimport type { ClusterShapeID } from '../../rendering-util/rendering-elements/clusters.js';\nimport type { Edge, Node } from '../../rendering-util/types.js';\nimport type { EdgeMetaData, NodeMetaData } from '../../types.js';\nimport utils, { getEdgeId } from '../../utils.js';\nimport common from '../common/common.js';\nimport {\n  setAccTitle,\n  getAccTitle,\n  getAccDescription,\n  setAccDescription,\n  clear as commonClear,\n  setDiagramTitle,\n  getDiagramTitle,\n} from '../common/commonDb.js';\nimport { createTooltip } from '../common/svgDrawCommon.js';\nimport type {\n  AgentflowElementMapping,\n  AgentflowSemanticModel,\n  AgentflowStatementType,\n  EdgeSemantic,\n  ElementPosition,\n  FlowClass,\n  FlowEdge,\n  FlowLink,\n  FlowSubGraph,\n  FlowText,\n  FlowVertex,\n  FlowVertexTypeParam,\n  SemanticConnector,\n  SemanticEdge,\n  SemanticSubGraph,\n  SemanticVertex,\n  VertexKind,\n} from './types.js';\nimport { AgentflowWarning } from './diagnostics.js';\nimport { normaliseNodeShapes, resolveShapeAlias } from './shapes.js';\nimport { assignColorSlots } from './colorSlots.js';\nimport type {\n  AgentflowDiagnostic,\n  AgentflowDiagnosticContext,\n  AgentflowWarningId,\n} from './diagnostics.js';\n\n/**\n * Raw JISON `@$` location object. Produced by the jison-generated parser\n * when location tracking is enabled (default). Only the line/column/range\n * fields are used.\n */\ninterface JisonLocation {\n  first_line: number;\n  first_column: number;\n  last_line: number;\n  last_column: number;\n  range?: [number, number];\n}\nimport DOMPurify from 'dompurify';\ninterface LinkData {\n  id: string;\n}\n\nconst MERMAID_DOM_ID_PREFIX = 'agentflow-';\n\n/**\n * Metadata keys that are presentation-only per the agentflow syntax specification \u00A711 and\n * therefore stripped from the semantic model projection. Everything else\n * in `@{...}` metadata carries semantic weight and flows through.\n */\nconst SEMANTIC_METADATA_SKIP_KEYS = new Set([\n  'shape',\n  'view',\n  'icon',\n  'img',\n  'form',\n  'pos',\n  'w',\n  'h',\n  'class',\n  'style',\n  'labelType',\n]);\n\n/**\n * Shape ids that mark a node as a tool definition per the agentflow syntax specification\n * \u00A77: the canonical name plus the accepted aliases. v0.8.1 adds `tool` as\n * an alias. Membership in this set is the source of truth for\n * `isToolDefinition()`.\n */\nconst SUBROUTINE_ALIASES = new Set<string>([\n  'subroutine',\n  'subprocess',\n  'subproc',\n  'framed-rectangle',\n  'tool',\n]);\n\n// Property-level metadata validation (\u00A710 applicability, connector-ref\n// resolution, \u00A73.3 containment, reserved/synthetic ids) was removed from the\n// parser in v0.8.2 (issue #64) \u2014 those checks are semantic concerns and now\n// live in the semantics module. The parser keeps only structural parsing plus\n// `shape` and `view` handling. The associated lookup tables were removed with\n// the validators that consumed them.\n\n/** Maps subgraph container types to their cluster shape IDs. */\nconst SUBGRAPH_TYPE_TO_SHAPE: Record<NonNullable<FlowSubGraph['type']>, ClusterShapeID> = {\n  flow: 'flowGroup',\n};\n\n/**\n * Remove `__proto__` / `constructor` / `prototype` own keys from parsed `@{ }`\n * metadata, recursively.\n *\n * js-yaml defines `__proto__` with `Object.defineProperty` and the metadata\n * spreads copy it as an own property, so nothing is polluted inside mermaid.\n * But `metadata` and `getSemanticModel()` are consumer-facing, and a downstream\n * `merge(target, node.metadata)` over an authored `__proto__` key would\n * pollute. Strip it at the parse boundary so no consumer inherits the hazard.\n */\nfunction stripPrototypeKeys<T>(value: T): T {\n  if (Array.isArray(value)) {\n    return value.map((entry) => stripPrototypeKeys(entry)) as T;\n  }\n  if (value === null || typeof value !== 'object') {\n    return value;\n  }\n  const clean: Record<string, unknown> = {};\n  for (const key of Object.keys(value)) {\n    if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n      continue;\n    }\n    clean[key] = stripPrototypeKeys((value as Record<string, unknown>)[key]);\n  }\n  return clean as T;\n}\n\n/**\n * Strip line-trailing commas from a multi-line `@{ \u2026 }` metadata body.\n *\n * Multi-line bodies are block YAML, where the comma-separated style of the\n * single-line form (`@{ a: 1, b: 2 }`) is a syntax error. Only commas that\n * are syntactically trailing get stripped: commas inside quoted scalars,\n * flow collections (`[ \u2026 ]` / `{ \u2026 }`) and block scalar content survive, and\n * a comma directly before a line-trailing comment counts as trailing.\n */\nfunction stripLineTrailingCommas(body: string): string {\n  let inSingle = false;\n  let inDouble = false;\n  let flowDepth = 0;\n  let blockScalarIndent: number | undefined;\n  const out: string[] = [];\n  for (const line of body.split('\\n')) {\n    if (blockScalarIndent !== undefined) {\n      const indent = line.length - line.trimStart().length;\n      if (line.trim() === '' || indent > blockScalarIndent) {\n        // Block scalar content is verbatim text \u2014 commas are content.\n        out.push(line);\n        continue;\n      }\n      blockScalarIndent = undefined;\n    }\n    let commentStart = -1;\n    for (let i = 0; i < line.length; i++) {\n      const ch = line[i];\n      if (inDouble) {\n        if (ch === '\\\\') {\n          i++;\n        } else if (ch === '\"') {\n          inDouble = false;\n        }\n      } else if (inSingle) {\n        if (ch === \"'\") {\n          inSingle = false;\n        }\n      } else if (ch === '\"') {\n        inDouble = true;\n      } else if (ch === \"'\") {\n        inSingle = true;\n      } else if (ch === '#' && (i === 0 || line[i - 1] === ' ' || line[i - 1] === '\\t')) {\n        commentStart = i;\n        break;\n      } else if (ch === '[' || ch === '{') {\n        flowDepth++;\n      } else if (ch === ']' || ch === '}') {\n        flowDepth = Math.max(0, flowDepth - 1);\n      }\n    }\n    if (inSingle || inDouble || flowDepth > 0) {\n      // The line ends inside a quoted scalar or flow collection \u2014 any\n      // trailing comma is content or a separator, not a stray.\n      out.push(line);\n      continue;\n    }\n    const code = commentStart >= 0 ? line.slice(0, commentStart) : line;\n    const comment = commentStart >= 0 ? line.slice(commentStart) : '';\n    if (/:\\s*[>|][\\d+-]*\\s*$/.test(code)) {\n      // `key: |` / `key: >` opens a block scalar; its deeper-indented lines\n      // are verbatim content.\n      blockScalarIndent = line.length - line.trimStart().length;\n      out.push(line);\n      continue;\n    }\n    out.push(code.replace(/,([\\t ]*)$/, '$1') + comment);\n  }\n  return out.join('\\n');\n}\n\n// We are using arrow functions assigned to class instance fields instead of methods as they are required by JISON\nexport class AgentFlowDB implements DiagramDB {\n  private vertexCounter = 0;\n  private config = getConfig();\n  private vertices = new Map<string, FlowVertex>();\n  private edges: FlowEdge[] & { defaultInterpolate?: string; defaultStyle?: string[] } = [];\n  private classes = new Map<string, FlowClass>();\n  private subGraphs: FlowSubGraph[] = [];\n  private subGraphLookup = new Map<string, FlowSubGraph>();\n  private globalNodes = new Set<string>();\n  private connectors = new Map<string, FlowVertex>();\n  private tooltips = new Map<string, string>();\n  private subCount = 0;\n  private firstGraphFlag = true;\n  private direction: string | undefined;\n  private version: string | undefined; // As in graph\n  private secCount = -1;\n  private posCrossRef: number[] = [];\n  private diagramId = '';\n\n  // \u2500\u2500 Element-mapping infrastructure (PR 2a) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  // Agentflow reports source positions, so it opts into source-faithful\n  // parsing: `Diagram.fromText` keeps `%%` comments in the parsed text and\n  // hands over the frontmatter line offset, letting captured JISON `@$`\n  // positions be reported in original-source space (including any YAML\n  // frontmatter the parser never saw).\n  public readonly preserveCommentsWhenParsing = true;\n  private frontmatterLineOffset = 0;\n  private elementMappings: AgentflowElementMapping[] = [];\n  // Vertex mappings pushed for bare `id` references (no label/shape\n  // brackets). A trailing `@{ ... }` block retypes these to 'attachment'\n  // in `extendVertexMapping` (issue #75).\n  private bareVertexMappings = new WeakSet<AgentflowElementMapping>();\n\n  // \u2500\u2500 Diagnostic layer (PR 2b) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  // Structured warnings/errors emitted during parse, post-parse validation,\n  // and rendering. Consumed by conformance fixtures (issue #13) and by any\n  // downstream tooling that wants programmatic access to problems the DB\n  // found. `emitWarning` always also writes to `log.warn` so humans see\n  // warnings in the console; tests assert against `getDiagnostics()`.\n  private diagnostics: AgentflowDiagnostic[] = [];\n\n  /**\n   * Post-parse validators that emit diagnostics run at most once per parse\n   * (idempotent `getData()` calls). Resettable via `clear()`.\n   */\n  private postParseValidationRun = false;\n\n  // Functions to be run after graph rendering\n  private funs: ((element: Element) => void)[] = []; // cspell:ignore funs\n\n  constructor() {\n    this.funs.push(this.setupToolTips.bind(this));\n\n    // Needed for JISON since it only supports direct properties\n    this.addVertex = this.addVertex.bind(this);\n    this.firstGraph = this.firstGraph.bind(this);\n    this.setDirection = this.setDirection.bind(this);\n    this.addSubGraph = this.addSubGraph.bind(this);\n    this.addGlobal = this.addGlobal.bind(this);\n    this.addConnector = this.addConnector.bind(this);\n    this.addConnectorMapping = this.addConnectorMapping.bind(this);\n    this.addLink = this.addLink.bind(this);\n    this.setLink = this.setLink.bind(this);\n    this.updateLink = this.updateLink.bind(this);\n    this.addClass = this.addClass.bind(this);\n    this.setClass = this.setClass.bind(this);\n    this.destructLink = this.destructLink.bind(this);\n    this.setClickEvent = this.setClickEvent.bind(this);\n    this.setTooltip = this.setTooltip.bind(this);\n    this.updateLinkInterpolate = this.updateLinkInterpolate.bind(this);\n    this.setClickFun = this.setClickFun.bind(this);\n    this.bindFunctions = this.bindFunctions.bind(this);\n\n    // Element-mapping hooks (see ./types.ts ElementPosition / AgentflowElementMapping)\n    this.setFrontmatterLineOffset = this.setFrontmatterLineOffset.bind(this);\n    this.addVertexMapping = this.addVertexMapping.bind(this);\n    this.extendVertexMapping = this.extendVertexMapping.bind(this);\n    this.addEdgeMapping = this.addEdgeMapping.bind(this);\n    this.addSubgraphMapping = this.addSubgraphMapping.bind(this);\n\n    // Diagnostic hooks (see ./diagnostics.ts)\n    this.emitWarning = this.emitWarning.bind(this);\n    this.emitError = this.emitError.bind(this);\n    this.getDiagnostics = this.getDiagnostics.bind(this);\n\n    this.lex = {\n      firstGraph: this.firstGraph.bind(this),\n    };\n\n    this.clear();\n    this.setGen('gen-2');\n  }\n\n  private sanitizeText(txt: string) {\n    return common.sanitizeText(txt, this.config);\n  }\n\n  private sanitizeNodeLabelType(labelType?: string) {\n    switch (labelType) {\n      case 'markdown':\n      case 'string':\n      case 'text':\n        return labelType;\n      default:\n        return 'markdown';\n    }\n  }\n\n  /**\n   * Sets the diagram's SVG element ID, used to prefix domIds for uniqueness\n   * across multiple diagrams on the same page.\n   */\n  public setDiagramId(svgElementId: string) {\n    this.diagramId = svgElementId;\n  }\n\n  /**\n   * Function to lookup domId from id in the graph definition.\n   * When diagramId is set, returns the prefixed version for DOM uniqueness.\n   *\n   * @param id - id of the node\n   */\n  public lookUpDomId(id: string) {\n    for (const vertex of this.vertices.values()) {\n      if (vertex.id === id) {\n        return this.diagramId ? `${this.diagramId}-${vertex.domId}` : vertex.domId;\n      }\n    }\n    return this.diagramId ? `${this.diagramId}-${id}` : id;\n  }\n\n  /**\n   * Function called by parser when a node definition has been found\n   */\n  public addVertex(\n    id: string,\n    textObj: FlowText,\n    type: FlowVertexTypeParam,\n    style: string[],\n    classes: string[],\n    dir: string,\n    props = {},\n    metadata: any,\n    metadataLoc?: JisonLocation\n  ) {\n    if (!id || id.trim().length === 0) {\n      return;\n    }\n    // Extract the metadata from the shapeData, the syntax for adding metadata for nodes and edges is the same\n    // so at this point we don't know if it's a node or an edge, but we can still extract the metadata\n    let doc;\n    if (metadata !== undefined) {\n      let yamlData;\n      // detect if shapeData contains a newline character\n      if (!metadata.includes('\\n')) {\n        yamlData = '{\\n' + metadata + '\\n}';\n      } else {\n        yamlData = metadata + '\\n';\n      }\n      try {\n        // A whitespace-only YAML document loads as `null`, not `{}` \u2014 coalesce\n        // so an empty multi-line `@{\\n}` behaves like single-line `@{}` (whose\n        // brace-wrap already yields `{}`) instead of handing `null` to the\n        // metadata consumers below (issue #83).\n        doc = (yaml.load(yamlData, { schema: yaml.JSON_SCHEMA }) ?? {}) as NodeMetaData;\n      } catch (err) {\n        // Multi-line bodies are block YAML, where the comma-separated style of\n        // the single-line form is a syntax error. Retry once with line-trailing\n        // commas stripped so trailing commas work in both forms; valid\n        // documents never reach this path and are parsed verbatim above.\n        const stripped = metadata.includes('\\n') ? stripLineTrailingCommas(metadata) : metadata;\n        if (stripped !== metadata) {\n          try {\n            doc = (yaml.load(stripped + '\\n', { schema: yaml.JSON_SCHEMA }) ?? {}) as NodeMetaData;\n          } catch {\n            // The commas weren't the problem \u2014 surface the original error\n            // against the original, unstripped buffer so positions match.\n            this.rethrowMetadataYamlError(err, metadata, metadataLoc);\n          }\n        } else {\n          // js-yaml reports the failure position relative to the `@{ ... }` block\n          // buffer, not the source. Translate it into absolute source coordinates\n          // before it propagates so error banners and editor markers land on the\n          // right line/column (issue #56 part 2). Always throws.\n          this.rethrowMetadataYamlError(err, metadata, metadataLoc);\n        }\n      }\n      doc = stripPrototypeKeys(doc);\n    }\n\n    // Resolve shape alias (\u00A74.3.2) before any other shape handling. Keep the\n    // authored name around: the lowercase style rule in the vertex branch must\n    // judge what the user typed, not an internal id like `roundedRect` that\n    // alias resolution produces (`task` \u2192 `roundedRect` used to trip it).\n    let authoredShape: string | undefined;\n    if (doc && typeof (doc as unknown as Record<string, unknown>).shape === 'string') {\n      const docRec = doc as unknown as Record<string, unknown>;\n      authoredShape = docRec.shape as string;\n      const resolved = resolveShapeAlias(authoredShape);\n      if (resolved && resolved !== authoredShape) {\n        docRec.shape = resolved;\n      }\n    }\n\n    // Check if this is a subgraph (e.g. my_flow@{ view: \"collapsed\" })\n    const subGraph = this.subGraphLookup.get(id);\n    if (subGraph && doc) {\n      subGraph.metadata = { ...subGraph.metadata, ...(doc as unknown as Record<string, unknown>) };\n      return;\n    }\n\n    // Check if this is a connector declared via the `connector` keyword\n    // \u2014 attach metadata to the connector record so applicability rules\n    // (\u00A710) apply on the connector kind.\n    const connector = this.connectors.get(id);\n    if (connector && doc) {\n      connector.metadata = {\n        ...connector.metadata,\n        ...(doc as unknown as Record<string, unknown>),\n      };\n      return;\n    }\n\n    // Reserve 'connectors' as a declaration group ID for forward compat\n    // (the synthesised connectors group was removed in v0.8.1, but the\n    // id stays reserved). The subgraph branch above runs first, so a\n    // user-declared `flow connectors[...]` still owns the id.\n    if (id === 'connectors') {\n      return;\n    }\n\n    // Check if this is an edge \u2014 route metadata to the edge instead of\n    // creating a placeholder vertex. Presentation keys map to dedicated edge\n    // fields; all authored metadata is carried faithfully onto `edge.metadata`\n    // (which keys are valid on an edge is a semantic concern handled\n    // downstream \u2014 issue #64).\n    const edge = this.edges.find((e) => e.id === id);\n    if (edge) {\n      const edgeDoc = doc as unknown as EdgeMetaData & Record<string, unknown>;\n      if (edgeDoc?.animate !== undefined) {\n        edge.animate = edgeDoc.animate;\n      }\n      if (edgeDoc?.animation !== undefined) {\n        edge.animation = edgeDoc.animation;\n      }\n      if (edgeDoc?.curve !== undefined) {\n        edge.interpolate = edgeDoc.curve;\n      }\n      if (doc) {\n        edge.metadata = { ...edge.metadata, ...(doc as unknown as Record<string, unknown>) };\n      }\n      return;\n    }\n\n    let txt;\n\n    let vertex = this.vertices.get(id);\n    if (vertex === undefined) {\n      vertex = {\n        id,\n        labelType: 'text',\n        domId: MERMAID_DOM_ID_PREFIX + id + '-' + this.vertexCounter,\n        styles: [],\n        classes: [],\n      };\n      this.vertices.set(id, vertex);\n    }\n    this.vertexCounter++;\n\n    if (textObj !== undefined) {\n      this.config = getConfig();\n      txt = this.sanitizeText(textObj.text.trim());\n      vertex.labelType = textObj.type;\n      // strip quotes if string starts and ends with a quote\n      if (txt.startsWith('\"') && txt.endsWith('\"')) {\n        txt = txt.substring(1, txt.length - 1);\n      }\n      vertex.text = txt;\n    } else {\n      if (vertex.text === undefined) {\n        vertex.text = id;\n      }\n    }\n    if (type !== undefined) {\n      vertex.type = type;\n    }\n    if (style !== undefined && style !== null) {\n      style.forEach((s) => {\n        vertex.styles.push(s);\n      });\n    }\n    if (classes !== undefined && classes !== null) {\n      classes.forEach((s) => {\n        vertex.classes.push(s);\n      });\n    }\n    if (dir !== undefined) {\n      vertex.dir = dir;\n    }\n    if (vertex.props === undefined) {\n      vertex.props = props;\n    } else if (props !== undefined) {\n      Object.assign(vertex.props, props);\n    }\n\n    if (doc) {\n      vertex.metadata = { ...vertex.metadata, ...(doc as unknown as Record<string, unknown>) };\n      if (doc.shape) {\n        const authored = authoredShape ?? doc.shape;\n        // An unknown shape stays a hard error, matching flowchart \u2014 accepting\n        // something flowchart rejects is the divergence this grammar exists to\n        // avoid. What it gains here is a source position, so an editor can\n        // point at the `@{ \u2026 }` block instead of just blanking the diagram.\n        //\n        // A non-string value (e.g. `shape: 123`) is an ordinary unknown shape,\n        // not an uncaught TypeError on `.toLowerCase` (issue #83).\n        if (typeof authored !== 'string') {\n          throw this.positionedShapeError(\n            `No such shape: ${JSON.stringify(authored)}.`,\n            metadataLoc\n          );\n        }\n        if (authored !== authored.toLowerCase() || authored.includes('_')) {\n          throw this.positionedShapeError(\n            `No such shape: ${authored}. Shape names should be lowercase.`,\n            metadataLoc\n          );\n        } else if (!isValidShape(doc.shape)) {\n          throw this.positionedShapeError(`No such shape: ${doc.shape}.`, metadataLoc);\n        }\n        vertex.type = doc?.shape;\n      }\n\n      if (doc?.label) {\n        // Sanitize like the bracket-label and edge-label paths do. Not\n        // currently exploitable \u2014 `createText` sanitizes before writing and the\n        // finished SVG is DOMPurify'd \u2014 but the metadata path should not be the\n        // one place a label reaches the DB unsanitized.\n        vertex.text = this.sanitizeText(doc.label);\n        vertex.labelType = this.sanitizeNodeLabelType(doc?.labelType);\n      }\n      // `icon`, `img`, `form`, `pos`, `w` and `h` are deliberately not promoted\n      // onto the vertex. Agentflow's shape catalogue (\u00A74.3) is the six domain\n      // shapes; the icon and image shapes these keys select are outside it, so\n      // the shape they produced was replaced with the default and reported as\n      // SHAPE_UNSUPPORTED before it ever reached the renderer. They stay\n      // available as ordinary metadata on `vertex.metadata`.\n    }\n  }\n\n  /**\n   * Translate a js-yaml failure raised while parsing an `<id>@{ ... }` block\n   * from block-relative coordinates into absolute source coordinates, then\n   * rethrow (issue #56 part 2).\n   *\n   * js-yaml's `mark.line` / `mark.column` (and the `(R:C)` reference plus the\n   * `N |` excerpt prefixes baked into `message`) count from the start of the\n   * block buffer the DB hands it \u2014 either the synthetic `{\\n \u2026 \\n}` wrapper\n   * (single-line `@{ \u2026 }`) or the verbatim multi-line body. Neither matches\n   * the line the user sees. Using the `shapeData` symbol's JISON location\n   * (`@{`'s position) plus the frontmatter offset, we map the reported\n   * coordinate back to source space, rewrite the message's `(R:C)` and excerpt\n   * prefixes, update `mark`, and attach a JISON-style `hash.loc` so downstream\n   * tooling can read source coordinates structurally instead of re-deriving\n   * them from the buffer.\n   *\n   * Defensive: if the error isn't a positioned js-yaml exception, or we lack\n   * the block location, the original error propagates untouched \u2014 translation\n   * never makes a failure harder to read than it already was.\n   */\n  /**\n   * Build a shape error carrying a JISON-shaped `hash.loc`, so the position is\n   * readable structurally rather than only as prose. Mirrors what\n   * `rethrowMetadataYamlError` attaches for YAML failures.\n   */\n  private positionedShapeError(message: string, metadataLoc: JisonLocation | undefined): Error {\n    const error = new Error(message);\n    if (!metadataLoc) {\n      return error;\n    }\n    const line = metadataLoc.first_line + this.frontmatterLineOffset;\n    Object.assign(error, {\n      hash: {\n        text: '',\n        token: null,\n        line: line - 1,\n        loc: {\n          first_line: line,\n          last_line: metadataLoc.last_line + this.frontmatterLineOffset,\n          first_column: metadataLoc.first_column,\n          last_column: metadataLoc.last_column,\n        },\n        expected: [],\n      },\n    });\n    return error;\n  }\n\n  private rethrowMetadataYamlError(\n    err: unknown,\n    metadata: string,\n    metadataLoc: JisonLocation | undefined\n  ): never {\n    const ex = err as {\n      name?: string;\n      reason?: string;\n      message?: string;\n      mark?: { line: number; column: number; buffer?: string; position?: number };\n      hash?: unknown;\n    };\n    if (!ex || ex.name !== 'YAMLException' || !ex.mark || !metadataLoc) {\n      throw err;\n    }\n    // Compute the whole translation into `translation` first, then commit it to\n    // `ex` in one assignment-only block. If anything in the computation throws,\n    // `translation` stays undefined and the original error is rethrown\n    // untouched \u2014 never a half-rewritten one.\n    let translation:\n      | { message: string; markLine: number; markColumn: number; hash: unknown }\n      | undefined;\n    try {\n      const isInline = !metadata.includes('\\n');\n      // Buffer the DB actually handed to yaml.load \u2014 kept in lock-step with the\n      // `addVertex` wrapping above.\n      const buffer = isInline ? '{\\n' + metadata + '\\n}' : metadata + '\\n';\n      // `@{`'s source position. Content begins two columns later (after `@{`).\n      const blockLine = metadataLoc.first_line + this.frontmatterLineOffset;\n      const contentColumn = metadataLoc.first_column + 2;\n\n      // Map a 0-based (line, column) in the block buffer to 0-based source\n      // coordinates. For the single-line wrapper only buffer line 1 holds real\n      // content (lines 0 and 2 are the synthetic braces) and it lives on the\n      // block's own source line. For a multi-line body, buffer line 0 is the\n      // tail of the `@{` line and every later line is a verbatim source line,\n      // so its columns already match source.\n      const toSource = (line: number, column: number): { line: number; column: number } => {\n        if (isInline) {\n          return { line: blockLine, column: contentColumn + (line === 1 ? column : 0) };\n        }\n        return {\n          line: blockLine + line,\n          column: line === 0 ? contentColumn + column : column,\n        };\n      };\n\n      const src = toSource(ex.mark.line, ex.mark.column);\n      const reason =\n        ex.reason ?? (ex.message ?? '').split('\\n')[0].replace(/\\s*\\(\\d+:\\d+\\)\\s*$/, '');\n\n      // Rebuild the excerpt in source-line space. Show the offending buffer\n      // line (skipping the synthetic braces for the inline form) with a caret\n      // under the failure column; tabs render as `\u2192` exactly as js-yaml does so\n      // the caret stays aligned.\n      const bufferLines = buffer.split('\\n');\n      const display: number[] = [];\n      if (isInline) {\n        display.push(1);\n      } else {\n        for (let i = ex.mark.line - 1; i <= ex.mark.line + 1; i++) {\n          if (i < 0 || i >= bufferLines.length) {\n            continue;\n          }\n          // Drop the trailing empty line our `+ '\\n'` appended.\n          if (i === bufferLines.length - 1 && bufferLines[i] === '' && i !== ex.mark.line) {\n            continue;\n          }\n          display.push(i);\n        }\n      }\n      const gutterWidth = Math.max(...display.map((i) => String(toSource(i, 0).line).length));\n      const snippet: string[] = [];\n      for (const i of display) {\n        const lineNo = toSource(i, 0).line;\n        const prefix = ` ${String(lineNo).padStart(gutterWidth)} | `;\n        snippet.push(prefix + bufferLines[i].replace(/\\t/g, '\u2192'));\n        if (i === ex.mark.line) {\n          snippet.push('-'.repeat(prefix.length + ex.mark.column) + '^');\n        }\n      }\n\n      translation = {\n        message: `${reason} (${src.line}:${src.column + 1})\\n\\n${snippet.join('\\n')}`,\n        markLine: src.line - 1,\n        markColumn: src.column,\n        // JISON-style hash so editors can consume source coordinates directly.\n        hash: {\n          text: '',\n          token: null,\n          line: src.line - 1,\n          loc: {\n            first_line: src.line,\n            last_line: src.line,\n            first_column: src.column,\n            last_column: src.column + 1,\n          },\n          expected: [],\n        },\n      };\n    } catch {\n      // Translation failed \u2014 leave `ex` untouched and surface the original below.\n    }\n\n    if (translation) {\n      ex.message = translation.message;\n      ex.mark.line = translation.markLine;\n      ex.mark.column = translation.markColumn;\n      ex.hash = translation.hash;\n    }\n    throw ex;\n  }\n\n  /**\n   * Function called by parser when a link/edge definition has been found\n   *\n   */\n  public addSingleLink(_start: string, _end: string, type: any, id?: string) {\n    const start = _start;\n    const end = _end;\n\n    const edge: FlowEdge = {\n      start: start,\n      end: end,\n      type: undefined,\n      text: '',\n      labelType: 'text',\n      classes: [],\n      isUserDefinedId: false,\n      interpolate: this.edges.defaultInterpolate,\n    };\n    log.info('abc78 Got edge...', edge);\n    const linkTextObj = type.text;\n\n    if (linkTextObj !== undefined) {\n      edge.text = this.sanitizeText(linkTextObj.text.trim());\n\n      // strip quotes if string starts and ends with a quote\n      if (edge.text.startsWith('\"') && edge.text.endsWith('\"')) {\n        edge.text = edge.text.substring(1, edge.text.length - 1);\n      }\n      edge.labelType = this.sanitizeNodeLabelType(linkTextObj.type);\n    }\n\n    if (type !== undefined) {\n      edge.type = type.type;\n      edge.stroke = type.stroke;\n      edge.length = type.length > 10 ? 10 : type.length;\n      if (type.edgeSemantic) {\n        edge.edgeSemantic = type.edgeSemantic;\n      }\n    }\n    if (id && !this.edges.some((e) => e.id === id)) {\n      edge.id = id;\n      edge.isUserDefinedId = true;\n    } else {\n      const existingLinks = this.edges.filter((e) => e.start === edge.start && e.end === edge.end);\n      if (existingLinks.length === 0) {\n        edge.id = getEdgeId(edge.start, edge.end, { counter: 0, prefix: 'L' });\n      } else {\n        edge.id = getEdgeId(edge.start, edge.end, {\n          counter: existingLinks.length + 1,\n          prefix: 'L',\n        });\n      }\n    }\n\n    if (this.edges.length < (this.config.maxEdges ?? 500)) {\n      log.info('Pushing edge...');\n      this.edges.push(edge);\n    } else {\n      throw new Error(\n        `Edge limit exceeded. ${this.edges.length} edges found, but the limit is ${this.config.maxEdges}.\n\nInitialize mermaid with maxEdges set to a higher number to allow more edges.\nYou cannot set this config via configuration inside the diagram as it is a secure config.\nYou have to call mermaid.initialize.`\n      );\n    }\n  }\n\n  private isLinkData(value: unknown): value is LinkData {\n    return (\n      value !== null &&\n      typeof value === 'object' &&\n      'id' in value &&\n      typeof (value as LinkData).id === 'string'\n    );\n  }\n\n  public addLink(_start: string[], _end: string[], linkData: unknown) {\n    const id = this.isLinkData(linkData) ? linkData.id.replace('@', '') : undefined;\n\n    log.info('addLink', _start, _end, id);\n\n    // for a group syntax like A e1@--> B & C, only the first edge should have a userDefined id\n    // the rest of the edges should have auto generated ids\n    for (const start of _start) {\n      for (const end of _end) {\n        //use the id only for last node in _start and first node in _end\n        const isLastStart = start === _start[_start.length - 1];\n        const isFirstEnd = end === _end[0];\n        if (isLastStart && isFirstEnd) {\n          this.addSingleLink(start, end, linkData, id);\n        } else {\n          this.addSingleLink(start, end, linkData, undefined);\n        }\n      }\n    }\n  }\n\n  /**\n   * Updates a link's line interpolation algorithm\n   */\n  public updateLinkInterpolate(positions: ('default' | number)[], interpolate: string) {\n    positions.forEach((pos) => {\n      if (pos === 'default') {\n        this.edges.defaultInterpolate = interpolate;\n        return;\n      }\n      // Same bounds message as `updateLink`. Without it an out-of-range index\n      // surfaced as `TypeError: Cannot set properties of undefined`.\n      if (typeof pos === 'number' && pos >= this.edges.length) {\n        throw new Error(\n          `The index ${pos} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${\n            this.edges.length - 1\n          }. (Help: Ensure that the index is within the range of existing edges.)`\n        );\n      }\n      this.edges[pos].interpolate = interpolate;\n    });\n  }\n\n  /**\n   * Updates a link with a style\n   *\n   */\n  public updateLink(positions: ('default' | number)[], style: string[]) {\n    positions.forEach((pos) => {\n      if (typeof pos === 'number' && pos >= this.edges.length) {\n        throw new Error(\n          `The index ${pos} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${\n            this.edges.length - 1\n          }. (Help: Ensure that the index is within the range of existing edges.)`\n        );\n      }\n      if (pos === 'default') {\n        this.edges.defaultStyle = style;\n      } else {\n        this.edges[pos].style = style;\n        // if edges[pos].style does have fill not set, set it to none\n        if (\n          (this.edges[pos]?.style?.length ?? 0) > 0 &&\n          !this.edges[pos]?.style?.some((s) => s?.startsWith('fill'))\n        ) {\n          this.edges[pos]?.style?.push('fill:none');\n        }\n      }\n    });\n  }\n\n  public addClass(ids: string, _style: string[]) {\n    const style = _style\n      .join()\n      .replace(/\\\\,/g, '\u00A7\u00A7\u00A7')\n      .replace(/,/g, ';')\n      .replace(/\u00A7\u00A7\u00A7/g, ',')\n      .split(';');\n    ids.split(',').forEach((id) => {\n      let classNode = this.classes.get(id);\n      if (classNode === undefined) {\n        classNode = { id, styles: [], textStyles: [] };\n        this.classes.set(id, classNode);\n      }\n\n      if (style !== undefined && style !== null) {\n        style.forEach((s) => {\n          if (/color/.exec(s)) {\n            const newStyle = s.replace('fill', 'bgFill'); // .replace('color', 'fill');\n            classNode.textStyles.push(newStyle);\n          }\n          classNode.styles.push(s);\n        });\n      }\n    });\n  }\n\n  /**\n   * Called by parser when a graph definition is found, stores the direction of the chart.\n   *\n   */\n  public setDirection(dir: string) {\n    this.direction = dir.trim();\n\n    if (/.*</.exec(this.direction)) {\n      this.direction = 'RL';\n    }\n    if (/.*\\^/.exec(this.direction)) {\n      this.direction = 'BT';\n    }\n    if (/.*>/.exec(this.direction)) {\n      this.direction = 'LR';\n    }\n    if (/.*v/.exec(this.direction)) {\n      this.direction = 'TB';\n    }\n    if (this.direction === 'TD') {\n      this.direction = 'TB';\n    }\n  }\n\n  /**\n   * Called by parser when a special node is found, e.g. a clickable element.\n   *\n   * @param ids - Comma separated list of ids\n   * @param className - Class to add\n   */\n  public setClass(ids: string, className: string) {\n    for (const id of ids.split(',')) {\n      const vertex = this.vertices.get(id);\n      if (vertex) {\n        vertex.classes.push(className);\n      }\n      const edge = this.edges.find((e) => e.id === id);\n      if (edge) {\n        edge.classes.push(className);\n      }\n      const subGraph = this.subGraphLookup.get(id);\n      if (subGraph) {\n        subGraph.classes.push(className);\n      }\n    }\n  }\n\n  public setTooltip(ids: string, tooltip: string) {\n    if (tooltip === undefined) {\n      return;\n    }\n    tooltip = this.sanitizeText(tooltip);\n    for (const id of ids.split(',')) {\n      this.tooltips.set(this.version === 'gen-1' ? this.lookUpDomId(id) : id, tooltip);\n    }\n  }\n\n  private setClickFun(id: string, functionName: string, functionArgs: string) {\n    // if (_id[0].match(/\\d/)) id = MERMAID_DOM_ID_PREFIX + id;\n    if (getConfig().securityLevel !== 'loose') {\n      return;\n    }\n    if (functionName === undefined) {\n      return;\n    }\n    let argList: string[] = [];\n    if (typeof functionArgs === 'string') {\n      /* Splits functionArgs by ',', ignoring all ',' in double quoted strings */\n      argList = functionArgs.split(/,(?=(?:(?:[^\"]*\"){2})*[^\"]*$)/);\n      for (let i = 0; i < argList.length; i++) {\n        let item = argList[i].trim();\n        /* Removes all double quotes at the start and end of an argument */\n        /* This preserves all starting and ending whitespace inside */\n        if (item.startsWith('\"') && item.endsWith('\"')) {\n          item = item.substr(1, item.length - 2);\n        }\n        argList[i] = item;\n      }\n    }\n\n    /* if no arguments passed into callback, default to passing in id */\n    if (argList.length === 0) {\n      argList.push(id);\n    }\n\n    const vertex = this.vertices.get(id);\n    if (vertex) {\n      vertex.haveCallback = true;\n      this.funs.push(() => {\n        // Defer lookUpDomId to bind time so it includes the diagramId prefix\n        const domId = this.lookUpDomId(id);\n        const elem = document.querySelector(`[id=\"${domId}\"]`);\n        if (elem !== null) {\n          elem.addEventListener(\n            'click',\n            () => {\n              utils.runFunc(functionName, ...argList);\n            },\n            false\n          );\n        }\n      });\n    }\n  }\n\n  /**\n   * Called by parser when a link is found. Adds the URL to the vertex data.\n   *\n   * @param ids - Comma separated list of ids\n   * @param linkStr - URL to create a link for\n   * @param target - Target attribute for the link\n   */\n  public setLink(ids: string, linkStr: string, target: string) {\n    ids.split(',').forEach((id) => {\n      const vertex = this.vertices.get(id);\n      if (vertex !== undefined) {\n        vertex.link = utils.formatUrl(linkStr, this.config);\n        vertex.linkTarget = target;\n      }\n    });\n    this.setClass(ids, 'clickable');\n  }\n\n  public getTooltip(id: string) {\n    return this.tooltips.get(id);\n  }\n\n  /**\n   * Called by parser when a click definition is found. Registers an event handler.\n   *\n   * @param ids - Comma separated list of ids\n   * @param functionName - Function to be called on click\n   * @param functionArgs - Arguments to be passed to the function\n   */\n  public setClickEvent(ids: string, functionName: string, functionArgs: string) {\n    ids.split(',').forEach((id) => {\n      this.setClickFun(id, functionName, functionArgs);\n    });\n    this.setClass(ids, 'clickable');\n  }\n\n  public bindFunctions(element: Element) {\n    this.funs.forEach((fun) => {\n      fun(element);\n    });\n  }\n  public getDirection() {\n    return this.direction?.trim();\n  }\n  /**\n   * Retrieval function for fetching the found nodes after parsing has completed.\n   *\n   */\n  public getVertices() {\n    return this.vertices;\n  }\n\n  /**\n   * Retrieval function for fetching the found links after parsing has completed.\n   *\n   */\n  public getEdges() {\n    return this.edges;\n  }\n\n  /**\n   * Returns true when `vertex` is a **tool definition** per\n   * the agentflow syntax specification \u00A78 \u2014 its resolved shape is `subroutine` or one\n   * of the accepted aliases (`subprocess`, `subproc`, `framed-rectangle`).\n   *\n   * This is the source of truth for \"is this a tool?\" \u2014 there is no\n   * separate kind tag stored on the vertex; tool-ness is derived from\n   * shape on every check. Downstream consumers reading the semantic model\n   * see this surfaced as `vertexKind: 'tool'` (see `getSemanticModel`).\n   */\n  public isToolDefinition(vertex: FlowVertex): boolean {\n    return SUBROUTINE_ALIASES.has(vertex.type as string);\n  }\n\n  /**\n   * Returns every vertex that is a tool definition (per `isToolDefinition`).\n   * Derived view; not cached.\n   */\n  public getTools(): FlowVertex[] {\n    const tools: FlowVertex[] = [];\n    for (const vertex of this.vertices.values()) {\n      if (this.isToolDefinition(vertex)) {\n        tools.push(vertex);\n      }\n    }\n    return tools;\n  }\n\n  /**\n   * Retrieval function for fetching the found class definitions after parsing has completed.\n   *\n   */\n  public getClasses() {\n    return this.classes;\n  }\n\n  private setupToolTips(element: Element) {\n    const tooltipElem = createTooltip();\n\n    const svg = select(element).select('svg');\n\n    const nodes = svg.selectAll('g.node');\n    nodes\n      .on('mouseover', (e: MouseEvent) => {\n        const el = select(e.currentTarget as Element);\n        const title = el.attr('title');\n\n        // Don't try to draw a tooltip if no data is provided\n        if (title === null) {\n          return;\n        }\n        const rect = (e.currentTarget as Element)?.getBoundingClientRect();\n\n        tooltipElem.transition().duration(200).style('opacity', '.9');\n        tooltipElem\n          .text(el.attr('title'))\n          .style('left', window.scrollX + rect.left + (rect.right - rect.left) / 2 + 'px')\n          .style('top', window.scrollY + rect.bottom + 'px');\n        tooltipElem.html(DOMPurify.sanitize(title));\n        el.classed('hover', true);\n      })\n      .on('mouseout', (e: MouseEvent) => {\n        tooltipElem.transition().duration(500).style('opacity', 0);\n        const el = select(e.currentTarget as Element);\n        el.classed('hover', false);\n      });\n  }\n\n  /**\n   * Clears the internal graph db so that a new graph can be parsed.\n   *\n   */\n  public clear(ver = 'gen-2') {\n    this.vertices = new Map();\n    this.classes = new Map();\n    this.edges = [];\n    this.funs = [this.setupToolTips.bind(this)];\n    this.subGraphs = [];\n    this.subGraphLookup = new Map();\n    this.globalNodes = new Set();\n    this.connectors = new Map();\n    this.subCount = 0;\n    this.tooltips = new Map();\n    this.firstGraphFlag = true;\n    this.version = ver;\n    this.config = getConfig();\n    this.diagramId = '';\n    this.vertexCounter = 0;\n    this.direction = undefined;\n    this.secCount = -1;\n    this.posCrossRef = [];\n    this.frontmatterLineOffset = 0;\n    this.elementMappings = [];\n    this.bareVertexMappings = new WeakSet();\n    this.diagnostics = [];\n    this.postParseValidationRun = false;\n    commonClear();\n  }\n\n  public setGen(ver: string) {\n    this.version = ver || 'gen-2';\n  }\n\n  /**\n   * Legacy `linkStyle default` colours, byte-identical to `flowDb`. Hardcoded\n   * rather than theme-derived on purpose: nothing in the repo calls this, and\n   * changing the values would diverge from flowchart for no visible gain.\n   */\n  public defaultStyle() {\n    return 'fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;';\n  }\n\n  public addSubGraph(\n    _id: { text: string },\n    list: string[],\n    _title: { text: string; type: string },\n    type?: 'flow'\n  ) {\n    let id: string | undefined = _id?.text?.trim();\n    let title = _title?.text;\n    if (_id === _title && _title?.text && /\\s/.exec(_title.text)) {\n      id = undefined;\n    }\n\n    const uniq = (a: any[]) => {\n      const prims: any = { boolean: {}, number: {}, string: {} };\n      const objs: any[] = [];\n\n      let dir: string | undefined;\n\n      const nodeList = a.filter(function (item) {\n        const type = typeof item;\n        if (item.stmt && item.stmt === 'dir') {\n          dir = item.value;\n          return false;\n        }\n        if (item.trim() === '') {\n          return false;\n        }\n        if (type in prims) {\n          return prims[type].hasOwnProperty(item) ? false : (prims[type][item] = true);\n        } else {\n          return objs.includes(item) ? false : objs.push(item);\n        }\n      });\n      return { nodeList, dir };\n    };\n\n    const result = uniq(list.flat());\n    const nodeList = result.nodeList;\n    let dir = result.dir;\n    const flowchartConfig = getConfig().flowchart ?? {};\n    dir =\n      dir ??\n      (flowchartConfig.inheritDir\n        ? (this.getDirection() ?? (getConfig() as any).direction ?? undefined)\n        : undefined);\n\n    if (this.version === 'gen-1') {\n      for (let i = 0; i < nodeList.length; i++) {\n        nodeList[i] = this.lookUpDomId(nodeList[i]);\n      }\n    }\n\n    id = id ?? 'subGraph' + this.subCount;\n    title = title || '';\n    title = this.sanitizeText(title);\n    this.subCount = this.subCount + 1;\n\n    const subGraph: FlowSubGraph = {\n      id: id,\n      // A subgraph is never a member of itself. In-block edge endpoints are\n      // folded into the member list, so `a --> myFlow` written inside\n      // `flow myFlow \u2026 end` would otherwise make the flow its own member and\n      // self-parent, crashing the renderer with graphlib's \"would create a\n      // cycle\" (issue #70). Globally scoped nodes (`global \u2026 end`, issue #80)\n      // are exempt from membership the same way \u2014 referencing one inside a\n      // flow must not adopt it.\n      nodes: nodeList.filter((nodeId: string) => nodeId !== id && !this.globalNodes.has(nodeId)),\n      title: title.trim(),\n      classes: [],\n      dir,\n      labelType: this.sanitizeNodeLabelType(_title?.type),\n      type: type ?? 'flow',\n    };\n\n    log.info('Adding', subGraph.id, subGraph.nodes, subGraph.dir);\n\n    // Remove the members in the new subgraph if they already belong to another subgraph\n    subGraph.nodes = this.makeUniq(subGraph, this.subGraphs).nodes;\n\n    // Duplicate subgraph IDs merge children into the first occurrence\n    // (structural). Identifier-namespace diagnostics moved to semantics (#64).\n    const existingPos = this.getPosForId(id);\n    if (existingPos !== -1) {\n      // Duplicate subgraph ID \u2014 merge children into the existing entry.\n      // First occurrence wins for hierarchy position.\n      const existing = this.subGraphs[existingPos];\n      for (const nodeId of subGraph.nodes) {\n        if (!existing.nodes.includes(nodeId)) {\n          existing.nodes.push(nodeId);\n        }\n      }\n      // Last occurrence wins for properties\n      if (subGraph.title) {\n        existing.title = subGraph.title;\n      }\n      if (subGraph.dir) {\n        existing.dir = subGraph.dir;\n      }\n      if (subGraph.type) {\n        existing.type = subGraph.type;\n      }\n      this.subGraphLookup.set(id, existing);\n    } else {\n      this.subGraphs.push(subGraph);\n      this.subGraphLookup.set(id, subGraph);\n    }\n    return id;\n  }\n\n  /**\n   * Registers every node id that appears inside a `global \u2026 end` block as\n   * globally scoped (issue #80): the node keeps no parent even when it is\n   * referenced inside a `flow \u2026 end` block, opting out of the textual\n   * membership rule that would otherwise pull it in. Edges declared inside\n   * the block are ordinary top-level edges \u2014 only the membership exemption\n   * is recorded here, and no container is emitted for the block.\n   */\n  public addGlobal(list: unknown[]) {\n    for (const item of list.flat()) {\n      // Skip non-id statement values (e.g. `direction` markers); node ids\n      // arrive as plain strings.\n      if (typeof item !== 'string') {\n        continue;\n      }\n      const id = item.trim();\n      if (id !== '') {\n        this.globalNodes.add(id);\n      }\n    }\n    // Flows parsed before this block already claimed the ids \u2014 release them\n    // so the exemption is independent of declaration order.\n    for (const subGraph of this.subGraphs) {\n      subGraph.nodes = subGraph.nodes.filter((nodeId) => !this.globalNodes.has(nodeId));\n    }\n  }\n\n  private getPosForId(id: string) {\n    for (const [i, subGraph] of this.subGraphs.entries()) {\n      if (subGraph.id === id) {\n        return i;\n      }\n    }\n    return -1;\n  }\n\n  private indexNodes2(id: string, pos: number): { result: boolean; count: number } {\n    const nodes = this.subGraphs[pos].nodes;\n    this.secCount = this.secCount + 1;\n    if (this.secCount > 2000) {\n      return {\n        result: false,\n        count: 0,\n      };\n    }\n    this.posCrossRef[this.secCount] = pos;\n    // Check if match\n    if (this.subGraphs[pos].id === id) {\n      return {\n        result: true,\n        count: 0,\n      };\n    }\n\n    let count = 0;\n    let posCount = 1;\n    while (count < nodes.length) {\n      const childPos = this.getPosForId(nodes[count]);\n      // Ignore regular nodes (pos will be -1)\n      if (childPos >= 0) {\n        const res = this.indexNodes2(id, childPos);\n        if (res.result) {\n          return {\n            result: true,\n            count: posCount + res.count,\n          };\n        } else {\n          posCount = posCount + res.count;\n        }\n      }\n      count = count + 1;\n    }\n\n    return {\n      result: false,\n      count: posCount,\n    };\n  }\n\n  public getDepthFirstPos(pos: number) {\n    return this.posCrossRef[pos];\n  }\n  public indexNodes() {\n    this.secCount = -1;\n    if (this.subGraphs.length > 0) {\n      this.indexNodes2('none', this.subGraphs.length - 1);\n    }\n  }\n\n  /**\n   * Called by parser when a `connector <id>[\"Title\"]` declaration is\n   * encountered (\u00A78). Stores the connector as a FlowVertex with\n   * `isConnector: true` so the connector flows through the renderer\n   * alongside vertices, while keeping a separate index for connector-\n   * specific lookups (e.g. `connectorRef` resolution).\n   */\n  public addConnector(textObj: FlowText, titleObj?: FlowText): string {\n    const id = textObj?.text?.trim();\n    if (!id) {\n      return '';\n    }\n\n    const title = titleObj?.text?.trim() ?? '';\n    const resolvedTitle = title.length > 0 ? this.sanitizeText(title) : id;\n\n    let connector = this.connectors.get(id);\n    if (!connector) {\n      connector = {\n        id,\n        labelType: 'text',\n        domId: MERMAID_DOM_ID_PREFIX + id + '-' + this.vertexCounter,\n        styles: [],\n        classes: [],\n        isConnector: true,\n        text: resolvedTitle,\n      };\n      this.connectors.set(id, connector);\n      this.vertices.set(id, connector);\n      this.vertexCounter++;\n    } else if (title.length > 0) {\n      connector.text = resolvedTitle;\n    }\n    return id;\n  }\n\n  /**\n   * Live array. `getData()` and the JISON actions read it on the hot path and a\n   * per-call copy would be wasted work; unlike `getDiagnostics()` this is not an\n   * accessor built for external consumers. Same for `getVertices()` /\n   * `getEdges()`, whose `defaultStyle` / `defaultInterpolate` side-properties a\n   * copy would drop.\n   */\n  public getSubGraphs() {\n    return this.subGraphs;\n  }\n\n  /** Returns connectors declared via the `connector` keyword (\u00A78). */\n  public getConnectors(): FlowVertex[] {\n    return [...this.connectors.values()];\n  }\n\n  public firstGraph() {\n    if (this.firstGraphFlag) {\n      this.firstGraphFlag = false;\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * Maps the post-`destructLink` `(type, stroke)` pair onto the canonical\n   * `edgeSemantic` value defined by the agentflow syntax specification \u00A75.1 (v0.8.1).\n   * The three-way table:\n   *   - `-->` \u2192 arrow_point + normal \u2192 sequence\n   *   - `-.-` \u2192 arrow_open  + dotted \u2192 reference\n   *   - `--x` \u2192 arrow_cross + normal \u2192 failure\n   * Returns `undefined` for combinations the spec no longer permits.\n   */\n  private computeEdgeSemantic(\n    type: string | undefined,\n    stroke: 'normal' | 'thick' | 'invisible' | 'dotted' | undefined\n  ): EdgeSemantic | undefined {\n    if (type === 'arrow_point' && stroke === 'normal') {\n      return 'sequence';\n    }\n    if (type === 'arrow_cross' && stroke === 'normal') {\n      return 'failure';\n    }\n    if (type === 'arrow_open' && stroke === 'dotted') {\n      return 'reference';\n    }\n    return undefined;\n  }\n\n  private destructStartLink(_str: string): FlowLink {\n    const str = _str.trim();\n    // v0.8.1: only `-->`, `-.-`, `--x` are valid. Start-link forms (the\n    // first half of a split arrow `a -- xyz -->`) only carry stroke/dot\n    // information; the type comes from the end-link.\n    const type = 'arrow_open';\n\n    let stroke = 'normal';\n    if (str.includes('.')) {\n      stroke = 'dotted';\n    }\n\n    return { type, stroke };\n  }\n\n  private countChar(char: string, str: string) {\n    const length = str.length;\n    let count = 0;\n    for (let i = 0; i < length; ++i) {\n      if (str[i] === char) {\n        ++count;\n      }\n    }\n    return count;\n  }\n\n  private destructEndLink(_str: string) {\n    const str = _str.trim();\n    let line = str.slice(0, -1);\n    let type = 'arrow_open';\n\n    switch (str.slice(-1)) {\n      case 'x':\n        type = 'arrow_cross';\n        break;\n      case '>':\n        type = 'arrow_point';\n        break;\n      case '-':\n      case '.':\n        // `-.-` form: the trailing character is `-` (or `.`), the operator\n        // is non-directional. Keep `arrow_open` so the renderer draws no\n        // arrowhead and we route to the reference semantic.\n        type = 'arrow_open';\n        line = str;\n        break;\n    }\n\n    let stroke: 'normal' | 'thick' | 'invisible' | 'dotted' = 'normal';\n    let length = line.length - 1;\n\n    const dots = this.countChar('.', line);\n    if (dots > 0) {\n      stroke = 'dotted';\n      length = dots;\n    }\n\n    return { type, stroke, length };\n  }\n\n  public destructLink(_str: string, _startStr: string) {\n    const info = this.destructEndLink(_str);\n    let startInfo;\n    if (_startStr) {\n      startInfo = this.destructStartLink(_startStr);\n\n      if (startInfo.stroke !== info.stroke) {\n        return { type: 'INVALID', stroke: 'INVALID' };\n      }\n\n      // -- xyz -->  - take arrow type from ending\n      startInfo.type = info.type;\n      startInfo.length = info.length;\n      return {\n        ...startInfo,\n        edgeSemantic: this.computeEdgeSemantic(\n          startInfo.type,\n          startInfo.stroke as 'normal' | 'thick' | 'invisible' | 'dotted'\n        ),\n      };\n    }\n\n    return {\n      ...info,\n      edgeSemantic: this.computeEdgeSemantic(info.type, info.stroke),\n    };\n  }\n\n  // Todo optimizer this by caching existing nodes\n  public exists(allSgs: FlowSubGraph[], _id: string) {\n    for (const sg of allSgs) {\n      if (sg.nodes.includes(_id)) {\n        return true;\n      }\n    }\n    return false;\n  }\n  /**\n   * Deletes an id from all subgraphs\n   *\n   */\n  public makeUniq(sg: FlowSubGraph, allSubgraphs: FlowSubGraph[]) {\n    const res: string[] = [];\n    sg.nodes.forEach((_id, pos) => {\n      if (!this.exists(allSubgraphs, _id)) {\n        res.push(sg.nodes[pos]);\n      }\n    });\n    return { nodes: res };\n  }\n\n  public lex: { firstGraph: typeof AgentFlowDB.prototype.firstGraph };\n\n  private getTypeFromVertex(vertex: FlowVertex): ShapeID {\n    // Resolve v0.8.1 alias (e.g. `task` \u2192 `roundedRect`, `action` \u2192 `hexagon`)\n    // before mapping to the canonical Mermaid shape id.\n    const resolved = typeof vertex.type === 'string' ? resolveShapeAlias(vertex.type) : vertex.type;\n    switch (resolved) {\n      case 'square':\n      case undefined:\n        return 'squareRect';\n      case 'round':\n        return 'roundedRect';\n      case 'ellipse':\n        // @ts-expect-error -- Ellipses are broken, see https://github.com/mermaid-js/mermaid/issues/5976\n        return 'ellipse';\n      default:\n        return resolved as ShapeID;\n    }\n  }\n\n  private findNode(nodes: Node[], id: string) {\n    return nodes.find((node) => node.id === id);\n  }\n  private destructEdgeType(type: string | undefined) {\n    let arrowTypeStart = 'none';\n    let arrowTypeEnd = 'arrow_point';\n    switch (type) {\n      case 'arrow_point':\n      case 'arrow_circle':\n      case 'arrow_cross':\n      case 'arrow_hierarchy':\n        arrowTypeEnd = type;\n        break;\n\n      case 'double_arrow_point':\n      case 'double_arrow_circle':\n      case 'double_arrow_cross':\n        arrowTypeStart = type.replace('double_', '');\n        arrowTypeEnd = arrowTypeStart;\n        break;\n    }\n    return { arrowTypeStart, arrowTypeEnd };\n  }\n\n  private addNodeFromVertex(\n    vertex: FlowVertex,\n    nodes: Node[],\n    parentDB: Map<string, string>,\n    subGraphDB: Map<string, boolean>,\n    config: any,\n    look: string\n  ) {\n    const parentId = parentDB.get(vertex.id);\n    const isGroup = subGraphDB.get(vertex.id) ?? false;\n\n    const node = this.findNode(nodes, vertex.id);\n    if (node) {\n      node.cssStyles = vertex.styles;\n      node.cssCompiledStyles = this.getCompiledStyles(vertex.classes);\n      node.cssClasses = vertex.classes.join(' ');\n    } else {\n      const baseNode = {\n        id: vertex.id,\n        label: vertex.text,\n        labelType: vertex.labelType,\n        labelStyle: '',\n        parentId,\n        padding: config.flowchart?.padding || 8,\n        cssStyles: vertex.styles,\n        cssCompiledStyles: this.getCompiledStyles(['default', 'node', ...vertex.classes]),\n        cssClasses: 'default ' + vertex.classes.join(' '),\n        dir: vertex.dir,\n        domId: vertex.domId,\n        look,\n        link: vertex.link,\n        linkTarget: vertex.linkTarget,\n        tooltip: this.getTooltip(vertex.id),\n        metadata: vertex.metadata,\n      };\n      if (isGroup) {\n        nodes.push({\n          ...baseNode,\n          isGroup: true,\n          shape: 'rect',\n        });\n      } else {\n        nodes.push({\n          ...baseNode,\n          isGroup: false,\n          shape: this.getTypeFromVertex(vertex),\n          wrappingWidth: config.agentflow?.wrappingWidth,\n          minWidth: config.agentflow?.minNodeWidth,\n        });\n      }\n    }\n  }\n\n  private getCompiledStyles(classDefs: string[]) {\n    let compiledStyles: string[] = [];\n    for (const customClass of classDefs) {\n      const cssClass = this.classes.get(customClass);\n      if (cssClass?.styles) {\n        compiledStyles = [...compiledStyles, ...(cssClass.styles ?? [])].map((s) => s.trim());\n      }\n      if (cssClass?.textStyles) {\n        compiledStyles = [...compiledStyles, ...(cssClass.textStyles ?? [])].map((s) => s.trim());\n      }\n    }\n    return compiledStyles;\n  }\n\n  /**\n   * Post-parse hook. Property-level metadata validation and semantic checks\n   * (\u00A710 applicability, connector-ref resolution, \u00A73.3 containment, edge\n   * endpoint kinds, flow input, identifier namespace) were removed from the\n   * parser in v0.8.2 (issue #64) \u2014 they are semantic concerns owned by the\n   * semantics module. The parser keeps only structural parsing plus `shape`\n   * (unknown-shape errors, see `transformData`) and `view` handling. This hook\n   * remains as a no-op so downstream callers and the run-once guard are intact.\n   */\n  private runPostParseValidators(): void {\n    if (this.postParseValidationRun) {\n      return;\n    }\n    this.postParseValidationRun = true;\n  }\n\n  public getData() {\n    this.runPostParseValidators();\n    const config = getConfig();\n    const nodes: Node[] = [];\n    const edges: Edge[] = [];\n\n    const subGraphs = this.getSubGraphs();\n    const parentDB = new Map<string, string>();\n    const subGraphDB = new Map<string, boolean>();\n\n    // Collect IDs hidden by collapsed subgraphs (the subgraph's descendants).\n    // `collapsedAncestorMap` records the *outermost* collapsed ancestor for\n    // each hidden id so that cross-boundary edges can be redirected to the\n    // visible collapsed node (issue #53). Nested collapses resolve to the\n    // outermost ancestor because we process collapsed subgraphs in\n    // declaration order (outer first) and the ancestor parameter is held\n    // constant during recursion.\n    const hiddenIds = new Set<string>();\n    const collapsedAncestorMap = new Map<string, string>();\n    //\n    // Containment can be cyclic: an edge written inside one container that\n    // names another container folds that container into the first one's member\n    // list, so `A` can contain `B` while `B` contains `A`. Without the `seen`\n    // guard the recursion never terminated and `getData()` blew the stack,\n    // blanking the diagram. The collapse root itself is excluded so a back-edge\n    // cannot hide the very node the collapse is supposed to draw.\n    const collectDescendants = (sgId: string, ancestor: string, seen = new Set<string>()) => {\n      if (seen.has(sgId)) {\n        return;\n      }\n      seen.add(sgId);\n      const sg = this.subGraphLookup.get(sgId);\n      if (!sg) {\n        return;\n      }\n      for (const childId of sg.nodes) {\n        if (childId === ancestor || seen.has(childId)) {\n          continue;\n        }\n        hiddenIds.add(childId);\n        collapsedAncestorMap.set(childId, ancestor);\n        // Recurse into child subgraphs\n        collectDescendants(childId, ancestor, seen);\n      }\n    };\n    for (const sg of subGraphs) {\n      if (sg.metadata?.view === 'collapsed' && !hiddenIds.has(sg.id)) {\n        collectDescendants(sg.id, sg.id);\n      }\n    }\n\n    // Setup the subgraph data for adding nodes\n    //\n    // A parent assignment that closes a containment cycle (`A` contains `B`\n    // and `B` contains `A`, which two cross-boundary edges are enough to\n    // produce) is refused: graphlib rejects `setParent` on a cycle and the\n    // whole diagram would fail to render. The first assignment wins and the\n    // one that would close the loop is reported as a containment violation.\n    const wouldCloseContainmentCycle = (childId: string, parentId: string) => {\n      const seen = new Set<string>();\n      let current: string | undefined = parentId;\n      while (current !== undefined && !seen.has(current)) {\n        if (current === childId) {\n          return true;\n        }\n        seen.add(current);\n        current = parentDB.get(current);\n      }\n      return false;\n    };\n    for (let i = subGraphs.length - 1; i >= 0; i--) {\n      const subGraph = subGraphs[i];\n      if (hiddenIds.has(subGraph.id)) {\n        continue;\n      }\n      if (subGraph.nodes.length > 0) {\n        subGraphDB.set(subGraph.id, true);\n      }\n      for (const id of subGraph.nodes) {\n        if (wouldCloseContainmentCycle(id, subGraph.id)) {\n          this.emitWarning(\n            AgentflowWarning.CONTAINMENT_VIOLATION,\n            `Container \"${subGraph.id}\" cannot contain \"${id}\" because \"${id}\" already contains it. The nesting that would close the loop is dropped.`,\n            { nodeId: id }\n          );\n          continue;\n        }\n        parentDB.set(id, subGraph.id);\n      }\n    }\n\n    // Data is setup, add the nodes\n    for (let i = subGraphs.length - 1; i >= 0; i--) {\n      const subGraph = subGraphs[i];\n      if (hiddenIds.has(subGraph.id)) {\n        continue;\n      }\n\n      const isCollapsed = subGraph.metadata?.view === 'collapsed';\n\n      if (isCollapsed) {\n        // Collapsed: render as a compact node with container-type styling and collapse indicator\n        const collapsedMetadata = {\n          ...subGraph.metadata,\n          containerType: subGraph.type,\n        };\n        nodes.push({\n          id: subGraph.id,\n          label: subGraph.title,\n          labelStyle: '',\n          labelType: subGraph.labelType,\n          parentId: parentDB.get(subGraph.id),\n          padding: 8,\n          cssCompiledStyles: this.getCompiledStyles(subGraph.classes),\n          cssClasses: subGraph.classes.join(' '),\n          shape: 'collapsedGroup',\n          dir: subGraph.dir,\n          isGroup: false,\n          look: config.look,\n          metadata: collapsedMetadata,\n        });\n      } else {\n        nodes.push({\n          id: subGraph.id,\n          label: subGraph.title,\n          labelStyle: '',\n          labelType: subGraph.labelType,\n          parentId: parentDB.get(subGraph.id),\n          padding: 8,\n          cssCompiledStyles: this.getCompiledStyles(subGraph.classes),\n          cssClasses: subGraph.classes.join(' '),\n          shape: SUBGRAPH_TYPE_TO_SHAPE[subGraph.type ?? 'flow'],\n          dir: subGraph.dir,\n          isGroup: true,\n          look: config.look,\n          metadata: subGraph.metadata,\n        });\n      }\n    }\n\n    const n = this.getVertices();\n    n.forEach((vertex) => {\n      // Skip vertices hidden by collapsed subgraphs\n      if (hiddenIds.has(vertex.id)) {\n        return;\n      }\n      this.addNodeFromVertex(vertex, nodes, parentDB, subGraphDB, config, config.look || 'classic');\n    });\n\n    const e = this.getEdges();\n    e.forEach((rawEdge, index) => {\n      // Redirect cross-boundary edges to the outermost visible collapsed\n      // ancestor (issue #53). When two *distinct* endpoints collapse to the\n      // same ancestor the edge would be a self-loop on the collapsed node and\n      // is dropped instead. Genuine self-loops authored as `a --> a` are kept\n      // (issue #58) \u2014 only collapse-induced self-loops are dropped.\n      const startId = collapsedAncestorMap.get(rawEdge.start) ?? rawEdge.start;\n      const endId = collapsedAncestorMap.get(rawEdge.end) ?? rawEdge.end;\n      if (startId === endId && rawEdge.start !== rawEdge.end) {\n        return;\n      }\n      const { arrowTypeStart, arrowTypeEnd } = this.destructEdgeType(rawEdge.type);\n      const styles = [...(e.defaultStyle ?? [])];\n\n      if (rawEdge.style) {\n        styles.push(...rawEdge.style);\n      }\n      const edge: Edge = {\n        id: getEdgeId(startId, endId, { counter: index, prefix: 'L' }, rawEdge.id),\n        isUserDefinedId: rawEdge.isUserDefinedId,\n        start: startId,\n        end: endId,\n        type: rawEdge.type ?? 'normal',\n        label: rawEdge.text,\n        labelType: rawEdge.labelType,\n        labelpos: 'c',\n        thickness: rawEdge.stroke,\n        minlen: rawEdge.length,\n        classes:\n          rawEdge?.stroke === 'invisible'\n            ? ''\n            : 'edge-thickness-normal edge-pattern-solid flowchart-link',\n        arrowTypeStart:\n          rawEdge?.stroke === 'invisible' || rawEdge?.type === 'arrow_open'\n            ? 'none'\n            : arrowTypeStart,\n        arrowTypeEnd:\n          rawEdge?.stroke === 'invisible' || rawEdge?.type === 'arrow_open' ? 'none' : arrowTypeEnd,\n        // Inert: `Edge.arrowheadStyle` is declared but never read by the\n        // renderer. Kept at flowchart parity rather than theme-derived.\n        arrowheadStyle: 'fill: #333',\n        cssCompiledStyles: this.getCompiledStyles(rawEdge.classes),\n        labelStyle: styles,\n        style: styles,\n        pattern: rawEdge.stroke,\n        look: config.look,\n        animate: rawEdge.animate,\n        animation: rawEdge.animation,\n        curve: rawEdge.interpolate || this.edges.defaultInterpolate || config.flowchart?.curve,\n        // \u00A75.3 edge metadata (e.g. `instruction`) \u2014 carried to the IR so\n        // downstream tooling (dispatch compile) can read it (issue #62).\n        metadata: rawEdge.metadata,\n      };\n\n      edges.push(edge);\n    });\n\n    // Shape validation runs here, not only at render time. `getDiagnostics()`\n    // is built for editor tooling, and tooling calls `parse()` \u2014 it never\n    // renders \u2014 so leaving the only two live diagnostics behind `renderer.draw`\n    // meant `mermaid.parse(text)` followed by `getDiagnostics()` always\n    // returned `[]`.\n    normaliseNodeShapes(nodes, this);\n\n    // Palette slots. Wired here rather than in `transformData` because this is the path the\n    // renderer actually takes -- `getData()` calls `normaliseNodeShapes` directly, so a hook\n    // added to `transformData` never runs on a real render.\n    //\n    // The kind comes from the vertex record, not from the resolved shape: a `connector` and a\n    // `task` are both `roundedRect`, so reading it off the shape paints every connector as a\n    // task.\n    // Declaration order for the container counter. Neither `nodes` nor `subGraphs` carries\n    // it: the loops above walk `subGraphs` in REVERSE, and `subGraphs` is itself in\n    // completion order, because the grammar reduces a container when it closes and a\n    // nested one therefore lands before its parent. Un-reversing would fix the flat case\n    // and still get nesting wrong.\n    //\n    // A pre-order walk of the containment forest recovers source order: roots complete in\n    // source order relative to each other, and a parent is always declared before the\n    // children it holds. `flowDb` builds its `declarationIndex` the same way.\n    const containerOrder = new Map<string, number>();\n    const childContainers = new Map<string, string[]>();\n    for (const sg of subGraphs) {\n      const parent = parentDB.get(sg.id);\n      if (parent !== undefined) {\n        childContainers.set(parent, [...(childContainers.get(parent) ?? []), sg.id]);\n      }\n    }\n    let nextContainer = 0;\n    const walkContainers = (id: string) => {\n      if (containerOrder.has(id)) {\n        return; // a containment cycle was refused above; do not loop on its remnant\n      }\n      containerOrder.set(id, nextContainer++);\n      for (const child of childContainers.get(id) ?? []) {\n        walkContainers(child);\n      }\n    };\n    for (const sg of subGraphs) {\n      if (parentDB.get(sg.id) === undefined) {\n        walkContainers(sg.id);\n      }\n    }\n\n    const connectorIds = new Set(this.getConnectors().map((c) => c.id));\n    assignColorSlots(\n      nodes,\n      (id) => {\n        if (connectorIds.has(id)) {\n          return 'connector';\n        }\n        const v = this.vertices.get(id);\n        return v\n          ? this.deriveVertexKind(v, resolveShapeAlias(v.type as string | undefined))\n          : undefined;\n      },\n      containerOrder\n    );\n\n    return {\n      nodes,\n      edges,\n      other: {},\n      config,\n      connectors: this.getConnectors(),\n    };\n  }\n\n  public defaultConfig() {\n    return defaultConfig.flowchart;\n  }\n\n  // \u2500\u2500 Semantic-model projection (PR 3) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  //\n  // `getSemanticModel()` returns a presentation-stripped view of the\n  // diagram state for downstream tooling. Per the agentflow syntax specification \u00A713\n  // `view`, `classDef` / `class` / `style` / `linkStyle`, `icon`, `img`,\n  // `w`, `h`, collapsed/expanded state, element mappings, and interactivity\n  // bindings are presentation-only and MUST NOT influence semantic\n  // interpretation \u2014 so none of them appear in the returned model. Fields\n  // that carry meaning (ids, labels, shape, domain metadata, edge\n  // arrow/stroke/label, subgraph membership, type/template declarations,\n  // diagnostics) are kept.\n\n  /**\n   * The v0.8.1 \u00A74 vertex kind for a parsed vertex.\n   *\n   * Extracted so the semantic model and `getData()`'s palette slots read the same rules\n   * from one place. Kind is NOT recoverable from the resolved shape alone \u2014 a tool and a\n   * task can both land on `roundedRect` \u2014 which is why this takes the vertex and not just\n   * its shape.\n   */\n  private deriveVertexKind(v: FlowVertex, resolvedShape: string | undefined): VertexKind {\n    if (this.isToolDefinition(v)) {\n      return 'tool';\n    }\n    if (resolvedShape === 'hexagon' || resolvedShape === 'hex') {\n      return 'action';\n    }\n    if (resolvedShape === 'lean-right' || resolvedShape === 'lean_right') {\n      return 'input';\n    }\n    if (resolvedShape === 'lin-doc' || resolvedShape === 'lined-document') {\n      return 'refdoc';\n    }\n    if (resolvedShape === 'diamond') {\n      return 'decision';\n    }\n    return 'task';\n  }\n\n  public getSemanticModel(): AgentflowSemanticModel {\n    // Run the post-parse validators so that the semantic export includes\n    // up-to-date diagnostics.\n    this.runPostParseValidators();\n    // Subgraph ids sometimes also appear in `this.vertices` when metadata\n    // (`@{...}`) is attached to a container id \u2014 the metadata-attachment\n    // path creates a placeholder vertex record. Those are NOT semantic\n    // vertices; they're container descriptors and the semantic model\n    // exposes them via `subGraphs` instead.\n    const subGraphIds = new Set(this.subGraphs.map((sg) => sg.id));\n    const vertices: SemanticVertex[] = [];\n    const connectors: SemanticConnector[] = [];\n    for (const [id, v] of this.vertices) {\n      if (subGraphIds.has(id)) {\n        continue;\n      }\n      if (v.isConnector) {\n        const connector: SemanticConnector = { id };\n        if (v.text !== undefined && v.text !== id) {\n          connector.title = v.text;\n        }\n        if (v.metadata && Object.keys(v.metadata).length > 0) {\n          const meta: Record<string, unknown> = {};\n          for (const [key, value] of Object.entries(v.metadata)) {\n            if (SEMANTIC_METADATA_SKIP_KEYS.has(key)) {\n              continue;\n            }\n            meta[key] = value;\n          }\n          if (Object.keys(meta).length > 0) {\n            connector.metadata = meta;\n          }\n        }\n        connectors.push(connector);\n        continue;\n      }\n      const vertex: SemanticVertex = { id };\n      if (v.text !== undefined) {\n        vertex.label = v.text;\n      }\n      const resolvedShape = typeof v.type === 'string' ? resolveShapeAlias(v.type) : v.type;\n      if (resolvedShape !== undefined) {\n        vertex.shape = resolvedShape;\n      }\n      // Derived vertex kind per v0.8.1 \u00A74.\n      vertex.vertexKind = this.deriveVertexKind(v, resolvedShape);\n      if (v.metadata && Object.keys(v.metadata).length > 0) {\n        // Strip presentation-only keys from metadata passthrough.\n        const meta: Record<string, unknown> = {};\n        for (const [key, value] of Object.entries(v.metadata)) {\n          if (SEMANTIC_METADATA_SKIP_KEYS.has(key)) {\n            continue;\n          }\n          meta[key] = value;\n        }\n        if (Object.keys(meta).length > 0) {\n          vertex.metadata = meta;\n        }\n      }\n      vertices.push(vertex);\n    }\n\n    const edges: SemanticEdge[] = this.edges.map((e) => {\n      const edge: SemanticEdge = { start: e.start, end: e.end };\n      if (e.id !== undefined) {\n        edge.id = e.id;\n      }\n      if (typeof e.text === 'string' && e.text.length > 0) {\n        edge.label = e.text;\n      }\n      if (e.type !== undefined) {\n        edge.type = e.type;\n      }\n      if (e.stroke !== undefined) {\n        edge.stroke = e.stroke;\n      }\n      if (e.edgeSemantic !== undefined) {\n        edge.edgeSemantic = e.edgeSemantic;\n      }\n      if (e.length !== undefined) {\n        edge.length = e.length;\n      }\n      if (e.metadata && Object.keys(e.metadata).length > 0) {\n        edge.metadata = { ...e.metadata };\n      }\n      return edge;\n    });\n\n    const subGraphs: SemanticSubGraph[] = this.subGraphs.map((sg) => {\n      const out: SemanticSubGraph = {\n        id: sg.id,\n        nodes: [...sg.nodes],\n      };\n      if (sg.type !== undefined) {\n        out.type = sg.type;\n      }\n      if (sg.title !== undefined) {\n        out.title = sg.title;\n      }\n      if (sg.dir !== undefined) {\n        out.direction = sg.dir;\n      }\n      if (sg.metadata && Object.keys(sg.metadata).length > 0) {\n        const meta: Record<string, unknown> = {};\n        for (const [key, value] of Object.entries(sg.metadata)) {\n          if (SEMANTIC_METADATA_SKIP_KEYS.has(key)) {\n            continue;\n          }\n          meta[key] = value;\n        }\n        if (Object.keys(meta).length > 0) {\n          out.metadata = meta;\n        }\n      }\n      return out;\n    });\n\n    const model: AgentflowSemanticModel = {\n      vertices,\n      edges,\n      subGraphs,\n      connectors,\n      diagnostics: this.diagnostics,\n    };\n    if (this.direction !== undefined) {\n      model.direction = this.direction;\n    }\n    return model;\n  }\n\n  // \u2500\u2500 Element-mapping infrastructure (PR 2a) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  //\n  // JISON action blocks call the `add*Mapping` methods alongside the\n  // structural `add*` methods; see `agentflow.jison`. When a diagram DB\n  // does not expose these methods the JISON guard `if (yy.addVertexMapping)`\n  // simply skips them, so the mapping layer is opt-in and has no effect on\n  // diagrams that don't consume positions.\n  public setFrontmatterLineOffset(offset: number): void {\n    this.frontmatterLineOffset = offset ?? 0;\n  }\n\n  private toElementPosition(loc: JisonLocation | undefined): ElementPosition {\n    // JISON always passes a location object when location tracking is\n    // enabled, but defend against a missing loc to keep the parser robust\n    // in the face of future grammar rules that forget `@$`.\n    const first_line = loc?.first_line ?? 0;\n    const first_column = loc?.first_column ?? 0;\n    const last_line = loc?.last_line ?? first_line;\n    const last_column = loc?.last_column ?? first_column;\n    const [startIndex, endIndex] = loc?.range ?? [0, 0];\n    return {\n      startLine: first_line + this.frontmatterLineOffset,\n      startColumn: first_column,\n      endLine: last_line + this.frontmatterLineOffset,\n      endColumn: last_column,\n      startIndex,\n      endIndex,\n    };\n  }\n\n  private pushMapping(\n    id: string,\n    type: AgentflowStatementType,\n    loc: JisonLocation | undefined\n  ): AgentflowElementMapping | undefined {\n    if (!id) {\n      return undefined;\n    }\n    const mapping: AgentflowElementMapping = {\n      id,\n      type,\n      position: this.toElementPosition(loc),\n    };\n    this.elementMappings.push(mapping);\n    return mapping;\n  }\n\n  public addVertexMapping(\n    id: string,\n    _text: unknown,\n    shape: unknown,\n    loc: JisonLocation | undefined\n  ): void {\n    const mapping = this.pushMapping(id, 'vertex', loc);\n    // A bare `id` reference carries no shape (the bracketed declaration\n    // forms all pass one). Remember it so a trailing `@{ ... }` block can\n    // retype it to 'attachment' instead of leaving a second mapping that\n    // looks like a redeclaration (issue #75).\n    if (mapping && shape == null) {\n      this.bareVertexMappings.add(mapping);\n    }\n  }\n\n  /**\n   * Extend a vertex's mapping end to cover a trailing inline metadata block\n   * (`id[\"...\"]@{ ... }`). The node declaration already pushed a mapping\n   * spanning just the declaration; when the `@{ ... }` block reduces we widen\n   * that mapping's end to the block's closing `}` so editor cursors inside the\n   * block resolve to the node rather than the containing flow (issue #60).\n   * `loc` is the `shapeData` symbol's location, so only the end moves \u2014 the\n   * declaration start is preserved. Falls back to a fresh mapping if the node\n   * has none yet.\n   *\n   * When the mapping being widened came from a bare `id` reference (no\n   * label/shape brackets), the statement is a standalone attachment\n   * (`id@{ ... }`) annotating an element declared elsewhere \u2014 retype it to\n   * 'attachment' so consumers can tell it apart from a declaration\n   * (issue #75).\n   */\n  public extendVertexMapping(id: string, loc: JisonLocation | undefined): void {\n    if (!id || !loc) {\n      return;\n    }\n    const end = this.toElementPosition(loc);\n    for (let i = this.elementMappings.length - 1; i >= 0; i--) {\n      const m = this.elementMappings[i];\n      if (m.type === 'vertex' && m.id === id) {\n        if (this.bareVertexMappings.has(m)) {\n          m.type = 'attachment';\n          this.bareVertexMappings.delete(m);\n        }\n        const extendsPastEnd =\n          end.endLine > m.position.endLine ||\n          (end.endLine === m.position.endLine && end.endColumn > m.position.endColumn);\n        if (extendsPastEnd) {\n          m.position.endLine = end.endLine;\n          m.position.endColumn = end.endColumn;\n          m.position.endIndex = end.endIndex;\n        }\n        return;\n      }\n    }\n    // No vertex mapping to widen \u2014 the `@{ ... }` block stands alone, so\n    // record it as an attachment spanning just the block.\n    this.pushMapping(id, 'attachment', loc);\n  }\n\n  public addEdgeMapping(\n    _fromStmt: unknown,\n    toNodes: unknown,\n    _link: unknown,\n    loc: JisonLocation | undefined\n  ): void {\n    // JISON hands the edge's right-hand-side node list in; derive a stable\n    // identifier from the destination node IDs joined by `>`. This matches\n    // the fan-out shape (`A --> B & C` resolves to one edge statement with\n    // two destinations) and keeps the mapping lookup intuitive.\n    const ids = Array.isArray(toNodes)\n      ? toNodes.map((n) => (typeof n === 'string' ? n : (n?.id ?? ''))).filter(Boolean)\n      : [];\n    const edgeId = ids.length > 0 ? ids.join('>') : 'edge';\n    this.pushMapping(edgeId, 'edge', loc);\n  }\n\n  public addSubgraphMapping(\n    _id: unknown,\n    _title: unknown,\n    startLoc: JisonLocation | undefined,\n    endLoc: JisonLocation | undefined\n  ): void {\n    const id = (typeof _id === 'string' ? _id : (_id as { text?: string } | undefined)?.text) ?? '';\n    const start = this.toElementPosition(startLoc);\n    const end = endLoc ? this.toElementPosition(endLoc) : start;\n    if (!id) {\n      return;\n    }\n    this.elementMappings.push({\n      id,\n      type: 'subgraph',\n      // Range spans from the container keyword to its `end` \u2014 startLine from\n      // the opener, endLine from the closer.\n      position: {\n        startLine: start.startLine,\n        startColumn: start.startColumn,\n        endLine: end.endLine,\n        endColumn: end.endColumn,\n        startIndex: start.startIndex,\n        endIndex: end.endIndex,\n      },\n    });\n  }\n\n  public addConnectorMapping(\n    textObj: FlowText | undefined,\n    _titleObj: FlowText | undefined,\n    startLoc: JisonLocation | undefined,\n    endLoc: JisonLocation | undefined\n  ): void {\n    const id = textObj?.text?.trim() ?? '';\n    if (!id) {\n      return;\n    }\n    const start = this.toElementPosition(startLoc);\n    const end = endLoc ? this.toElementPosition(endLoc) : start;\n    this.elementMappings.push({\n      id,\n      type: 'connector',\n      position: {\n        startLine: start.startLine,\n        startColumn: start.startColumn,\n        endLine: end.endLine,\n        endColumn: end.endColumn,\n        startIndex: start.startIndex,\n        endIndex: end.endIndex,\n      },\n    });\n  }\n\n  public getElementMappings(): readonly AgentflowElementMapping[] {\n    // Copy, for the same reason as `getDiagnostics()`.\n    return [...this.elementMappings];\n  }\n\n  public getElementById(id: string): AgentflowElementMapping | undefined {\n    return this.elementMappings.find((m) => m.id === id);\n  }\n\n  public getElementsOnLine(line: number): AgentflowElementMapping[] {\n    return this.elementMappings.filter(\n      (m) => line >= m.position.startLine && line <= m.position.endLine\n    );\n  }\n\n  public getElementAtPosition(line: number, column: number): AgentflowElementMapping | undefined {\n    // Return the innermost (smallest span) match so nested subgraphs resolve\n    // to the deepest container that contains the point rather than the\n    // outermost one.\n    const candidates = this.elementMappings.filter((m) => {\n      const { startLine, startColumn, endLine, endColumn } = m.position;\n      if (line < startLine || line > endLine) {\n        return false;\n      }\n      if (line === startLine && column < startColumn) {\n        return false;\n      }\n      if (line === endLine && column > endColumn) {\n        return false;\n      }\n      return true;\n    });\n    if (candidates.length === 0) {\n      return undefined;\n    }\n    // Compare [lineSpan, columnSpan] lexicographically. Folding the two into\n    // `lineSpan * 1000 + columnSpan` mis-ranked lines wider than 1000 columns,\n    // and the column term goes negative whenever a span crosses a line break.\n    const span = ({ position }: AgentflowElementMapping): [number, number] => [\n      position.endLine - position.startLine,\n      position.endColumn - position.startColumn,\n    ];\n    return candidates.reduce((smallest, cur) => {\n      const [smallLines, smallColumns] = span(smallest);\n      const [curLines, curColumns] = span(cur);\n      if (curLines !== smallLines) {\n        return curLines < smallLines ? cur : smallest;\n      }\n      return curColumns < smallColumns ? cur : smallest;\n    });\n  }\n\n  public getMappingStats(): {\n    vertices: number;\n    edges: number;\n    subgraphs: number;\n    connectors: number;\n    attachments: number;\n    totalElements: number;\n  } {\n    let vertices = 0;\n    let edges = 0;\n    let subgraphs = 0;\n    let connectors = 0;\n    let attachments = 0;\n    for (const m of this.elementMappings) {\n      if (m.type === 'vertex') {\n        vertices++;\n      } else if (m.type === 'edge') {\n        edges++;\n      } else if (m.type === 'subgraph') {\n        subgraphs++;\n      } else if (m.type === 'connector') {\n        connectors++;\n      } else if (m.type === 'attachment') {\n        attachments++;\n      }\n    }\n    return {\n      vertices,\n      edges,\n      subgraphs,\n      connectors,\n      attachments,\n      totalElements: this.elementMappings.length,\n    };\n  }\n\n  // \u2500\u2500 Diagnostics (PR 2b) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  //\n  // `emitWarning` (and its error-severity counterpart `emitError`) record a\n  // structured diagnostic and also fire `log.warn` so humans see the\n  // message in the console. When the caller supplies a `nodeId` or\n  // `edgeId`, the position is looked up through the element-mapping layer\n  // added in PR 2a \u2014 so the diagnostic carries enough context for an\n  // editor to highlight the offending element.\n\n  private emitDiagnostic(\n    id: AgentflowWarningId,\n    severity: 'warning' | 'error',\n    message: string,\n    ctx?: AgentflowDiagnosticContext\n  ): void {\n    const anchorId = ctx?.nodeId ?? ctx?.edgeId;\n    const mapping = anchorId ? this.getElementById(anchorId) : undefined;\n    const diagnostic: AgentflowDiagnostic = {\n      id,\n      severity,\n      message,\n      ...(ctx?.nodeId ? { nodeId: ctx.nodeId } : {}),\n      ...(ctx?.edgeId && !ctx?.nodeId ? { edgeId: ctx.edgeId } : {}),\n      ...(mapping ? { position: mapping.position } : {}),\n    };\n    // `getData()` is idempotent and may be called more than once (parse-then-\n    // render, or tooling probing the DB). Re-emitting the same finding each\n    // time would inflate the diagnostics list, so record each one once.\n    const alreadyRecorded = this.diagnostics.some(\n      (existing) =>\n        existing.id === diagnostic.id &&\n        existing.severity === diagnostic.severity &&\n        existing.message === diagnostic.message &&\n        existing.nodeId === diagnostic.nodeId &&\n        existing.edgeId === diagnostic.edgeId\n    );\n    if (alreadyRecorded) {\n      return;\n    }\n    this.diagnostics.push(diagnostic);\n    const formatted = `agentflow[${id}]: ${message}`;\n    if (severity === 'error') {\n      log.error(formatted);\n    } else {\n      log.warn(formatted);\n    }\n  }\n\n  public emitWarning(\n    id: AgentflowWarningId,\n    message: string,\n    ctx?: AgentflowDiagnosticContext\n  ): void {\n    this.emitDiagnostic(id, 'warning', message, ctx);\n  }\n\n  public emitError(\n    id: AgentflowWarningId,\n    message: string,\n    ctx?: AgentflowDiagnosticContext\n  ): void {\n    this.emitDiagnostic(id, 'error', message, ctx);\n  }\n\n  /**\n   * `readonly` is erased at runtime, so hand back a copy \u2014 this is a\n   * consumer-facing accessor and a caller sorting the result in place would\n   * otherwise reorder the DB's own list.\n   */\n  public getDiagnostics(): readonly AgentflowDiagnostic[] {\n    return [...this.diagnostics];\n  }\n\n  public setAccTitle = setAccTitle;\n  public setAccDescription = setAccDescription;\n  public setDiagramTitle = setDiagramTitle;\n  public getAccTitle = getAccTitle;\n  public getAccDescription = getAccDescription;\n  public getDiagramTitle = getDiagramTitle;\n}\n", "import { getConfig } from '../../diagram-api/diagramAPI.js';\nimport type { DiagramStyleClassDef } from '../../diagram-api/types.js';\nimport { log } from '../../logger.js';\nimport { getDiagramElement } from '../../rendering-util/insertElementsForSize.js';\nimport { getRegisteredLayoutAlgorithm, render } from '../../rendering-util/render.js';\nimport { setupViewPortForSVG } from '../../rendering-util/setupViewPortForSVG.js';\nimport type { LayoutData } from '../../rendering-util/types.js';\nimport utils from '../../utils.js';\n\nexport const getClasses = function (\n  text: string,\n  diagramObj: any\n): Map<string, DiagramStyleClassDef> {\n  return diagramObj.db.getClasses();\n};\n\nexport const draw = async function (text: string, id: string, _version: string, diag: any) {\n  log.debug('Drawing agentflow diagram', id);\n  const { securityLevel, agentflow: conf, layout } = getConfig();\n\n  // Scope generated domIds to this diagram's svg id so click handlers bind to\n  // this diagram's nodes and not to an identically-named node in another\n  // diagram on the same page.\n  diag.db.setDiagramId(id);\n\n  // The getData method provided in all supported diagrams is used to extract the data from the parsed structure\n  // into the Layout data format\n  log.debug('Before getData: ');\n  // `getData()` already applies the agentflow shape transformations and emits\n  // the SHAPE_* diagnostics, so the data arrives render-ready.\n  const data4Layout = diag.db.getData() as LayoutData;\n  log.debug('Data: ', data4Layout);\n\n  // Create the root SVG\n  const svg = getDiagramElement(id, securityLevel);\n  const direction = diag.db.getDirection();\n\n  data4Layout.type = diag.type;\n  data4Layout.layoutAlgorithm = getRegisteredLayoutAlgorithm(layout);\n  if (data4Layout.layoutAlgorithm === 'dagre' && layout === 'elk') {\n    log.warn(\n      'flowchart-elk was moved to an external package in Mermaid v11. Please refer [release notes](https://github.com/mermaid-js/mermaid/releases/tag/v11.0.0) for more details. This diagram will be rendered using `dagre` layout as a fallback.'\n    );\n  }\n  data4Layout.direction = direction;\n  data4Layout.nodeSpacing = conf?.nodeSpacing || 50;\n  data4Layout.rankSpacing = conf?.rankSpacing || 50;\n  data4Layout.markers = ['point', 'circle', 'cross', 'hierarchy'];\n\n  data4Layout.diagramId = id;\n  log.debug('REF1:', data4Layout);\n  await render(data4Layout, svg);\n  const padding = conf?.diagramPadding ?? 8;\n  utils.insertTitle(\n    svg,\n    'agentflowTitleText',\n    conf?.titleTopMargin ?? 0,\n    diag.db.getDiagramTitle()\n  );\n  setupViewPortForSVG(svg, padding, 'agentflow', conf?.useMaxWidth ?? true);\n};\n\nexport default {\n  getClasses,\n  draw,\n};\n", "/* parser generated by jison 0.4.18 */\n/*\n  Returns a Parser object of the following structure:\n\n  Parser: {\n    yy: {}\n  }\n\n  Parser.prototype: {\n    yy: {},\n    trace: function(),\n    symbols_: {associative list: name ==> number},\n    terminals_: {associative list: number ==> name},\n    productions_: [...],\n    performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n    table: [...],\n    defaultActions: {...},\n    parseError: function(str, hash),\n    parse: function(input),\n\n    lexer: {\n        EOF: 1,\n        parseError: function(str, hash),\n        setInput: function(input),\n        input: function(),\n        unput: function(str),\n        more: function(),\n        less: function(n),\n        pastInput: function(),\n        upcomingInput: function(),\n        showPosition: function(),\n        test_match: function(regex_match_array, rule_index),\n        next: function(),\n        lex: function(),\n        begin: function(condition),\n        popState: function(),\n        _currentRules: function(),\n        topState: function(),\n        pushState: function(condition),\n\n        options: {\n            ranges: boolean           (optional: true ==> token location info will include a .range[] member)\n            flex: boolean             (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n            backtrack_lexer: boolean  (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n        },\n\n        performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n        rules: [...],\n        conditions: {associative list: name ==> set},\n    }\n  }\n\n\n  token location info (@$, _$, etc.): {\n    first_line: n,\n    last_line: n,\n    first_column: n,\n    last_column: n,\n    range: [start_number, end_number]       (where the numbers are indexes into the input string, regular zero-based)\n  }\n\n\n  the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n    text:        (matched text)\n    token:       (the produced terminal token, if any)\n    line:        (yylineno)\n  }\n  while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n    loc:         (yylloc)\n    expected:    (string describing the set of expected tokens)\n    recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n  }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,5],$V1=[1,4],$V2=[1,3],$V3=[1,6],$V4=[1,8,9,10,11,12,28,35,36,38,40,42,47,63,87,88,89,90,91,92,105,108,109,112,114,117,118,119,124,125,126,127,128],$V5=[2,2],$V6=[1,15],$V7=[1,16],$V8=[1,17],$V9=[1,18],$Va=[1,19],$Vb=[1,26],$Vc=[1,27],$Vd=[1,28],$Ve=[1,30],$Vf=[1,31],$Vg=[1,32],$Vh=[1,55],$Vi=[1,54],$Vj=[1,34],$Vk=[1,35],$Vl=[1,36],$Vm=[1,37],$Vn=[1,38],$Vo=[1,50],$Vp=[1,52],$Vq=[1,48],$Vr=[1,53],$Vs=[1,49],$Vt=[1,56],$Vu=[1,51],$Vv=[1,57],$Vw=[1,58],$Vx=[1,39],$Vy=[1,40],$Vz=[1,41],$VA=[1,42],$VB=[1,43],$VC=[1,64],$VD=[1,8,9,10,11,12,28,33,35,36,38,40,42,47,63,87,88,89,90,91,92,105,108,109,112,114,117,118,119,124,125,126,127,128],$VE=[1,70],$VF=[1,68],$VG=[1,67],$VH=[1,69],$VI=[8,9,10,12,78,80,81],$VJ=[1,88],$VK=[1,101],$VL=[1,106],$VM=[1,105],$VN=[1,102],$VO=[1,98],$VP=[1,104],$VQ=[1,100],$VR=[1,107],$VS=[1,103],$VT=[1,108],$VU=[1,99],$VV=[8,9,10,11,12,43,78,80,81],$VW=[8,9,10,11,12,43,49,78,80,81],$VX=[8,9,10,11,12,30,43,47,49,51,53,55,57,59,61,63,66,68,70,71,73,78,80,81,92,105,108,109,112,114,117,118,119],$VY=[8,9,10,12,47,63,78,80,81,92,105,108,109,112,114,117,118,119],$VZ=[47,63,92,105,108,109,112,114,117,118,119],$V_=[1,131],$V$=[1,132],$V01=[1,134],$V11=[1,133],$V21=[47,63,65,77,92,105,108,109,112,114,117,118,119],$V31=[1,143],$V41=[1,157],$V51=[1,158],$V61=[1,159],$V71=[1,162],$V81=[1,161],$V91=[1,160],$Va1=[1,145],$Vb1=[1,147],$Vc1=[1,151],$Vd1=[1,139],$Ve1=[1,140],$Vf1=[1,152],$Vg1=[1,153],$Vh1=[1,154],$Vi1=[1,155],$Vj1=[1,156],$Vk1=[1,163],$Vl1=[1,164],$Vm1=[1,141],$Vn1=[1,142],$Vo1=[1,149],$Vp1=[1,144],$Vq1=[1,148],$Vr1=[1,146],$Vs1=[8,9,10,11,12,28,33,35,36,38,40,42,47,63,87,88,89,90,91,92,105,108,109,112,114,117,118,119,124,125,126,127,128],$Vt1=[1,168],$Vu1=[1,170],$Vv1=[8,9,10,12],$Vw1=[8,9,10,11,12,15,47,63,92,108,109,112,114,117,118,119],$Vx1=[1,190],$Vy1=[1,186],$Vz1=[1,187],$VA1=[1,191],$VB1=[1,188],$VC1=[1,189],$VD1=[80,119,122],$VE1=[8,9,10,11,12,13,15,28,30,33,35,36,43,47,63,78,87,88,89,90,91,92,93,108,112,114,117,118,119],$VF1=[11,109],$VG1=[32,52,54,56,58,60,65,67,69,70,72,74,119,120,121],$VH1=[1,269],$VI1=[1,267],$VJ1=[1,271],$VK1=[1,265],$VL1=[1,266],$VM1=[1,268],$VN1=[1,270],$VO1=[1,272],$VP1=[1,292],$VQ1=[8,9,10,12,109],$VR1=[8,9,10,11,12,63,87,108,109,112,113,114,115];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"graphConfig\":4,\"document\":5,\"line\":6,\"statement\":7,\"COMMENT\":8,\"SEMI\":9,\"NEWLINE\":10,\"SPACE\":11,\"EOF\":12,\"GRAPH\":13,\"NODIR\":14,\"DIR\":15,\"FirstStmtSeparator\":16,\"ending\":17,\"endToken\":18,\"spaceList\":19,\"spaceListNewline\":20,\"vertexStatement\":21,\"separator\":22,\"styleStatement\":23,\"linkStyleStatement\":24,\"classDefStatement\":25,\"classStatement\":26,\"clickStatement\":27,\"flow\":28,\"textNoTags\":29,\"SQS\":30,\"text\":31,\"SQE\":32,\"end\":33,\"shapeData\":34,\"global\":35,\"connector\":36,\"direction\":37,\"acc_title\":38,\"acc_title_value\":39,\"acc_descr\":40,\"acc_descr_value\":41,\"acc_descr_multiline_value\":42,\"SHAPE_DATA\":43,\"link\":44,\"node\":45,\"styledVertex\":46,\"AMP\":47,\"vertex\":48,\"STYLE_SEPARATOR\":49,\"idString\":50,\"DOUBLECIRCLESTART\":51,\"DOUBLECIRCLEEND\":52,\"PS\":53,\"PE\":54,\"(-\":55,\"-)\":56,\"STADIUMSTART\":57,\"STADIUMEND\":58,\"SUBROUTINESTART\":59,\"SUBROUTINEEND\":60,\"VERTEX_WITH_PROPS_START\":61,\"NODE_STRING[field]\":62,\"COLON\":63,\"NODE_STRING[value]\":64,\"PIPE\":65,\"CYLINDERSTART\":66,\"CYLINDEREND\":67,\"DIAMOND_START\":68,\"DIAMOND_STOP\":69,\"TAGEND\":70,\"TRAPSTART\":71,\"TRAPEND\":72,\"INVTRAPSTART\":73,\"INVTRAPEND\":74,\"linkStatement\":75,\"arrowText\":76,\"TESTSTR\":77,\"START_LINK\":78,\"edgeText\":79,\"LINK\":80,\"LINK_ID\":81,\"edgeTextToken\":82,\"STR\":83,\"MD_STR\":84,\"textToken\":85,\"keywords\":86,\"STYLE\":87,\"LINKSTYLE\":88,\"CLASSDEF\":89,\"CLASS\":90,\"CLICK\":91,\"DOWN\":92,\"UP\":93,\"textNoTagsToken\":94,\"stylesOpt\":95,\"idString[vertex]\":96,\"idString[class]\":97,\"CALLBACKNAME\":98,\"CALLBACKARGS\":99,\"HREF\":100,\"LINK_TARGET\":101,\"STR[link]\":102,\"STR[tooltip]\":103,\"alphaNum\":104,\"DEFAULT\":105,\"numList\":106,\"INTERPOLATE\":107,\"NUM\":108,\"COMMA\":109,\"style\":110,\"styleComponent\":111,\"NODE_STRING\":112,\"UNIT\":113,\"BRKT\":114,\"PCT\":115,\"idStringToken\":116,\"MINUS\":117,\"MULT\":118,\"UNICODE_TEXT\":119,\"TEXT\":120,\"TAGSTART\":121,\"EDGE_TEXT\":122,\"alphaNumToken\":123,\"direction_tb\":124,\"direction_bt\":125,\"direction_rl\":126,\"direction_lr\":127,\"direction_td\":128,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",8:\"COMMENT\",9:\"SEMI\",10:\"NEWLINE\",11:\"SPACE\",12:\"EOF\",13:\"GRAPH\",14:\"NODIR\",15:\"DIR\",28:\"flow\",30:\"SQS\",32:\"SQE\",33:\"end\",35:\"global\",36:\"connector\",38:\"acc_title\",39:\"acc_title_value\",40:\"acc_descr\",41:\"acc_descr_value\",42:\"acc_descr_multiline_value\",43:\"SHAPE_DATA\",47:\"AMP\",49:\"STYLE_SEPARATOR\",51:\"DOUBLECIRCLESTART\",52:\"DOUBLECIRCLEEND\",53:\"PS\",54:\"PE\",55:\"(-\",56:\"-)\",57:\"STADIUMSTART\",58:\"STADIUMEND\",59:\"SUBROUTINESTART\",60:\"SUBROUTINEEND\",61:\"VERTEX_WITH_PROPS_START\",62:\"NODE_STRING[field]\",63:\"COLON\",64:\"NODE_STRING[value]\",65:\"PIPE\",66:\"CYLINDERSTART\",67:\"CYLINDEREND\",68:\"DIAMOND_START\",69:\"DIAMOND_STOP\",70:\"TAGEND\",71:\"TRAPSTART\",72:\"TRAPEND\",73:\"INVTRAPSTART\",74:\"INVTRAPEND\",77:\"TESTSTR\",78:\"START_LINK\",80:\"LINK\",81:\"LINK_ID\",83:\"STR\",84:\"MD_STR\",87:\"STYLE\",88:\"LINKSTYLE\",89:\"CLASSDEF\",90:\"CLASS\",91:\"CLICK\",92:\"DOWN\",93:\"UP\",96:\"idString[vertex]\",97:\"idString[class]\",98:\"CALLBACKNAME\",99:\"CALLBACKARGS\",100:\"HREF\",101:\"LINK_TARGET\",102:\"STR[link]\",103:\"STR[tooltip]\",105:\"DEFAULT\",107:\"INTERPOLATE\",108:\"NUM\",109:\"COMMA\",112:\"NODE_STRING\",113:\"UNIT\",114:\"BRKT\",115:\"PCT\",117:\"MINUS\",118:\"MULT\",119:\"UNICODE_TEXT\",120:\"TEXT\",121:\"TAGSTART\",122:\"EDGE_TEXT\",124:\"direction_tb\",125:\"direction_bt\",126:\"direction_rl\",127:\"direction_lr\",128:\"direction_td\"},\nproductions_: [0,[3,2],[5,0],[5,2],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[4,2],[4,2],[4,2],[4,2],[4,3],[17,2],[17,1],[18,1],[18,1],[18,1],[16,1],[16,1],[16,2],[16,1],[20,2],[20,2],[20,2],[20,1],[20,1],[20,1],[19,2],[19,1],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,9],[7,10],[7,6],[7,7],[7,4],[7,4],[7,7],[7,8],[7,4],[7,5],[7,1],[7,2],[7,2],[7,1],[22,1],[22,1],[22,1],[22,1],[34,2],[34,1],[21,4],[21,3],[21,4],[21,2],[21,2],[21,1],[45,1],[45,6],[45,5],[46,1],[46,3],[48,4],[48,4],[48,6],[48,4],[48,4],[48,4],[48,8],[48,4],[48,4],[48,4],[48,6],[48,4],[48,4],[48,4],[48,4],[48,4],[48,1],[44,2],[44,3],[44,3],[44,1],[44,3],[44,4],[79,1],[79,2],[79,1],[79,1],[75,1],[75,2],[76,3],[31,1],[31,2],[31,1],[31,1],[86,1],[86,1],[86,1],[86,1],[86,1],[86,1],[86,1],[86,1],[86,1],[86,1],[86,1],[86,1],[86,1],[29,1],[29,2],[29,1],[29,1],[25,5],[26,5],[27,2],[27,4],[27,3],[27,5],[27,3],[27,5],[27,5],[27,7],[27,2],[27,4],[27,2],[27,4],[27,4],[27,6],[23,5],[24,5],[24,5],[24,9],[24,9],[24,7],[24,7],[106,1],[106,3],[95,1],[95,3],[110,1],[110,2],[111,1],[111,1],[111,1],[111,1],[111,1],[111,1],[111,1],[111,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[85,1],[85,1],[85,1],[85,1],[94,1],[94,1],[94,1],[94,1],[94,1],[94,1],[94,1],[94,1],[94,1],[94,1],[94,1],[82,1],[82,1],[123,1],[123,1],[123,1],[123,1],[123,1],[123,1],[123,1],[123,1],[123,1],[123,1],[123,1],[50,1],[50,2],[104,1],[104,2],[37,1],[37,1],[37,1],[37,1],[37,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 2:\n this.$ = [];\nbreak;\ncase 3:\n\n\t    if(!Array.isArray($$[$0]) || $$[$0].length > 0){\n\t        $$[$0-1].push($$[$0]);\n\t    }\n\t    this.$=$$[$0-1];\nbreak;\ncase 4: case 198:\nthis.$=$$[$0];\nbreak;\ncase 5: case 33: case 34: case 35: case 36: case 37:\nthis.$=[];\nbreak;\ncase 13:\n yy.setDirection('TB');this.$ = 'TB';\nbreak;\ncase 14:\n yy.setDirection($$[$0-1]);this.$ = $$[$0-1];\nbreak;\ncase 32:\n this.$=$$[$0-1].nodes\nbreak;\ncase 38:\nthis.$=yy.addSubGraph($$[$0-6],$$[$0-1],$$[$0-4],'flow');if(yy.addSubgraphMapping){yy.addSubgraphMapping($$[$0-6],$$[$0-4],_$[$0-8],_$[$0]);}\nbreak;\ncase 39:\nthis.$=yy.addSubGraph($$[$0-7],$$[$0-1],$$[$0-5],'flow');yy.addVertex(this.$,undefined,undefined,undefined,undefined,undefined,undefined,$$[$0-3],_$[$0-3]);if(yy.addSubgraphMapping){yy.addSubgraphMapping($$[$0-7],$$[$0-5],_$[$0-9],_$[$0]);}\nbreak;\ncase 40:\nthis.$=yy.addSubGraph($$[$0-3],$$[$0-1],{text:'', type:'text'},'flow');if(yy.addSubgraphMapping){yy.addSubgraphMapping($$[$0-3],{text:'', type:'text'},_$[$0-5],_$[$0]);}\nbreak;\ncase 41:\nthis.$=yy.addSubGraph($$[$0-4],$$[$0-1],{text:'', type:'text'},'flow');yy.addVertex(this.$,undefined,undefined,undefined,undefined,undefined,undefined,$$[$0-3],_$[$0-3]);if(yy.addSubgraphMapping){yy.addSubgraphMapping($$[$0-4],{text:'', type:'text'},_$[$0-6],_$[$0]);}\nbreak;\ncase 42:\nthis.$=yy.addSubGraph(undefined,$$[$0-1],undefined,'flow');if(yy.addSubgraphMapping){yy.addSubgraphMapping(undefined,undefined,_$[$0-3],_$[$0]);}\nbreak;\ncase 43:\nyy.addGlobal($$[$0-1]);this.$=[];\nbreak;\ncase 44:\nthis.$=yy.addConnector($$[$0-4],$$[$0-2]);if(yy.addConnectorMapping){yy.addConnectorMapping($$[$0-4],$$[$0-2],_$[$0-6],_$[$0]);}\nbreak;\ncase 45:\nthis.$=yy.addConnector($$[$0-5],$$[$0-3]);yy.addVertex(this.$,undefined,undefined,undefined,undefined,undefined,undefined,$$[$0-1],_$[$0-1]);if(yy.addConnectorMapping){yy.addConnectorMapping($$[$0-5],$$[$0-3],_$[$0-7],_$[$0]);}\nbreak;\ncase 46:\nthis.$=yy.addConnector($$[$0-1],{text:'', type:'text'});if(yy.addConnectorMapping){yy.addConnectorMapping($$[$0-1],{text:'', type:'text'},_$[$0-3],_$[$0]);}\nbreak;\ncase 47:\nthis.$=yy.addConnector($$[$0-2],{text:'', type:'text'});yy.addVertex(this.$,undefined,undefined,undefined,undefined,undefined,undefined,$$[$0-1],_$[$0-1]);if(yy.addConnectorMapping){yy.addConnectorMapping($$[$0-2],{text:'', type:'text'},_$[$0-4],_$[$0]);}\nbreak;\ncase 49:\n this.$=$$[$0].trim();yy.setAccTitle(this.$); \nbreak;\ncase 50: case 51:\n this.$=$$[$0].trim();yy.setAccDescription(this.$); \nbreak;\ncase 56:\n this.$ = $$[$0-1] + $$[$0]; \nbreak;\ncase 57:\n this.$ = $$[$0]; \nbreak;\ncase 58:\n /* console.warn('vs shapeData',$$[$0-3].stmt,$$[$0-1], $$[$0]);*/ yy.addVertex($$[$0-1][$$[$0-1].length-1],undefined,undefined,undefined, undefined,undefined, undefined,$$[$0],_$[$0]); if(yy.extendVertexMapping){yy.extendVertexMapping($$[$0-1][$$[$0-1].length-1],_$[$0]);} yy.addLink($$[$0-3].stmt,$$[$0-1],$$[$0-2]); if(yy.addEdgeMapping){yy.addEdgeMapping($$[$0-3].stmt,$$[$0-1],$$[$0-2],this._$);} this.$ = { stmt: $$[$0-1], nodes: $$[$0-1].concat($$[$0-3].nodes) } \nbreak;\ncase 59:\n /*console.warn('vs',$$[$0-2].stmt,$$[$0]);*/ yy.addLink($$[$0-2].stmt,$$[$0],$$[$0-1]); if(yy.addEdgeMapping){yy.addEdgeMapping($$[$0-2].stmt,$$[$0],$$[$0-1],this._$);} this.$ = { stmt: $$[$0], nodes: $$[$0].concat($$[$0-2].nodes) } \nbreak;\ncase 60:\n /* console.warn('vs',$$[$0-3].stmt,$$[$0-1]); */ yy.addLink($$[$0-3].stmt,$$[$0-1],$$[$0-2]); if(yy.addEdgeMapping){yy.addEdgeMapping($$[$0-3].stmt,$$[$0-1],$$[$0-2],this._$);} this.$ = { stmt: $$[$0-1], nodes: $$[$0-1].concat($$[$0-3].nodes) } \nbreak;\ncase 61:\n /*console.warn('vertexStatement: node spaceList', $$[$0-1]);*/ this.$ = {stmt: $$[$0-1], nodes:$$[$0-1] }\nbreak;\ncase 62:\n\n        /*console.warn('vertexStatement: node shapeData', $$[$0-1][0], $$[$0]);*/\n        yy.addVertex($$[$0-1][$$[$0-1].length-1],undefined,undefined,undefined, undefined,undefined, undefined,$$[$0],_$[$0]);\n        if(yy.extendVertexMapping){yy.extendVertexMapping($$[$0-1][$$[$0-1].length-1],_$[$0]);}\n        this.$ = {stmt: $$[$0-1], nodes:$$[$0-1], shapeData: $$[$0]}\n    \nbreak;\ncase 63:\n /* console.warn('vertexStatement: single node', $$[$0]); */ this.$ = {stmt: $$[$0], nodes:$$[$0] }\nbreak;\ncase 64:\n /*console.warn('nod', $$[$0]);*/ this.$ = [$$[$0]];\nbreak;\ncase 65:\n  yy.addVertex($$[$0-5][$$[$0-5].length-1],undefined,undefined,undefined, undefined,undefined, undefined,$$[$0-4],_$[$0-4]); if(yy.extendVertexMapping){yy.extendVertexMapping($$[$0-5][$$[$0-5].length-1],_$[$0-4]);} this.$ = $$[$0-5].concat($$[$0]); /*console.warn('pip2', $$[$0-5][0], $$[$0], this.$);*/  \nbreak;\ncase 66:\n this.$ = $$[$0-4].concat($$[$0]); /*console.warn('pip', $$[$0-4][0], $$[$0], this.$);*/  \nbreak;\ncase 67:\n /* console.warn('nodc', $$[$0]);*/ this.$ = $$[$0];\nbreak;\ncase 68:\nthis.$ = $$[$0-2];yy.setClass($$[$0-2],$$[$0])\nbreak;\ncase 69:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'square');if(yy.addVertexMapping){yy.addVertexMapping($$[$0-3],$$[$0-1],'square',this._$);}\nbreak;\ncase 70:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'doublecircle');if(yy.addVertexMapping){yy.addVertexMapping($$[$0-3],$$[$0-1],'doublecircle',this._$);}\nbreak;\ncase 71:\nthis.$ = $$[$0-5];yy.addVertex($$[$0-5],$$[$0-2],'circle');if(yy.addVertexMapping){yy.addVertexMapping($$[$0-5],$$[$0-2],'circle',this._$);}\nbreak;\ncase 72:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'ellipse');if(yy.addVertexMapping){yy.addVertexMapping($$[$0-3],$$[$0-1],'ellipse',this._$);}\nbreak;\ncase 73:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'stadium');if(yy.addVertexMapping){yy.addVertexMapping($$[$0-3],$$[$0-1],'stadium',this._$);}\nbreak;\ncase 74:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'subroutine');if(yy.addVertexMapping){yy.addVertexMapping($$[$0-3],$$[$0-1],'subroutine',this._$);}\nbreak;\ncase 75:\nthis.$ = $$[$0-7];yy.addVertex($$[$0-7],$$[$0-1],'rect',undefined,undefined,undefined, Object.fromEntries([[$$[$0-5], $$[$0-3]]]));if(yy.addVertexMapping){yy.addVertexMapping($$[$0-7],$$[$0-1],'rect',this._$);}\nbreak;\ncase 76:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'cylinder');if(yy.addVertexMapping){yy.addVertexMapping($$[$0-3],$$[$0-1],'cylinder',this._$);}\nbreak;\ncase 77:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'round');if(yy.addVertexMapping){yy.addVertexMapping($$[$0-3],$$[$0-1],'round',this._$);}\nbreak;\ncase 78:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'diamond');if(yy.addVertexMapping){yy.addVertexMapping($$[$0-3],$$[$0-1],'diamond',this._$);}\nbreak;\ncase 79:\nthis.$ = $$[$0-5];yy.addVertex($$[$0-5],$$[$0-2],'hexagon');if(yy.addVertexMapping){yy.addVertexMapping($$[$0-5],$$[$0-2],'hexagon',this._$);}\nbreak;\ncase 80:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'odd');if(yy.addVertexMapping){yy.addVertexMapping($$[$0-3],$$[$0-1],'odd',this._$);}\nbreak;\ncase 81:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'trapezoid');if(yy.addVertexMapping){yy.addVertexMapping($$[$0-3],$$[$0-1],'trapezoid',this._$);}\nbreak;\ncase 82:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'inv_trapezoid');if(yy.addVertexMapping){yy.addVertexMapping($$[$0-3],$$[$0-1],'inv_trapezoid',this._$);}\nbreak;\ncase 83:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'lean_right');if(yy.addVertexMapping){yy.addVertexMapping($$[$0-3],$$[$0-1],'lean_right',this._$);}\nbreak;\ncase 84:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'lean_left');if(yy.addVertexMapping){yy.addVertexMapping($$[$0-3],$$[$0-1],'lean_left',this._$);}\nbreak;\ncase 85:\n /*console.warn('h: ', $$[$0]);*/this.$ = $$[$0];yy.addVertex($$[$0]);if(yy.addVertexMapping){yy.addVertexMapping($$[$0],undefined,undefined,this._$);}\nbreak;\ncase 86:\n$$[$0-1].text = $$[$0];this.$ = $$[$0-1];\nbreak;\ncase 87: case 88:\n$$[$0-2].text = $$[$0-1];this.$ = $$[$0-2];\nbreak;\ncase 89:\nthis.$ = $$[$0];\nbreak;\ncase 90:\nvar inf = yy.destructLink($$[$0], $$[$0-2]); this.$ = {\"type\":inf.type,\"stroke\":inf.stroke,\"length\":inf.length,\"edgeSemantic\":inf.edgeSemantic,\"text\":$$[$0-1]};\nbreak;\ncase 91:\nvar inf = yy.destructLink($$[$0], $$[$0-2]); this.$ = {\"type\":inf.type,\"stroke\":inf.stroke,\"length\":inf.length,\"edgeSemantic\":inf.edgeSemantic,\"text\":$$[$0-1], \"id\": $$[$0-3]};\nbreak;\ncase 92:\nthis.$={text:$$[$0], type:'text'};\nbreak;\ncase 93:\nthis.$={text:$$[$0-1].text+''+$$[$0], type:$$[$0-1].type};\nbreak;\ncase 94:\nthis.$={text: $$[$0], type: 'string'};\nbreak;\ncase 95:\nthis.$={text:$$[$0], type:'markdown'};\nbreak;\ncase 96:\nvar inf = yy.destructLink($$[$0]);this.$ = {\"type\":inf.type,\"stroke\":inf.stroke,\"length\":inf.length,\"edgeSemantic\":inf.edgeSemantic};\nbreak;\ncase 97:\nvar inf = yy.destructLink($$[$0]);this.$ = {\"type\":inf.type,\"stroke\":inf.stroke,\"length\":inf.length,\"edgeSemantic\":inf.edgeSemantic, \"id\": $$[$0-1]};\nbreak;\ncase 98:\nthis.$ = $$[$0-1];\nbreak;\ncase 99:\n this.$={text:$$[$0], type: 'text'};\nbreak;\ncase 100:\n this.$={text:$$[$0-1].text+''+$$[$0], type: $$[$0-1].type};\nbreak;\ncase 101:\n this.$ = {text: $$[$0], type: 'string'};\nbreak;\ncase 102: case 119:\n this.$={text: $$[$0], type: 'markdown'};\nbreak;\ncase 116:\nthis.$={text:$$[$0], type: 'text'};\nbreak;\ncase 117:\nthis.$={text:$$[$0-1].text+''+$$[$0], type: $$[$0-1].type};\nbreak;\ncase 118:\n this.$={text: $$[$0], type: 'text'};\nbreak;\ncase 120:\nthis.$ = $$[$0-4];yy.addClass($$[$0-2],$$[$0]);\nbreak;\ncase 121:\nthis.$ = $$[$0-4];yy.setClass($$[$0-2], $$[$0]);\nbreak;\ncase 122: case 130:\nthis.$ = $$[$0-1];yy.setClickEvent($$[$0-1], $$[$0]);\nbreak;\ncase 123: case 131:\nthis.$ = $$[$0-3];yy.setClickEvent($$[$0-3], $$[$0-2]);yy.setTooltip($$[$0-3], $$[$0]);\nbreak;\ncase 124:\nthis.$ = $$[$0-2];yy.setClickEvent($$[$0-2], $$[$0-1], $$[$0]);\nbreak;\ncase 125:\nthis.$ = $$[$0-4];yy.setClickEvent($$[$0-4], $$[$0-3], $$[$0-2]);yy.setTooltip($$[$0-4], $$[$0]);\nbreak;\ncase 126:\nthis.$ = $$[$0-2];yy.setLink($$[$0-2], $$[$0]);\nbreak;\ncase 127:\nthis.$ = $$[$0-4];yy.setLink($$[$0-4], $$[$0-2]);yy.setTooltip($$[$0-4], $$[$0]);\nbreak;\ncase 128:\nthis.$ = $$[$0-4];yy.setLink($$[$0-4], $$[$0-2], $$[$0]);\nbreak;\ncase 129:\nthis.$ = $$[$0-6];yy.setLink($$[$0-6], $$[$0-4], $$[$0]);yy.setTooltip($$[$0-6], $$[$0-2]);\nbreak;\ncase 132:\nthis.$ = $$[$0-1];yy.setLink($$[$0-1], $$[$0]);\nbreak;\ncase 133:\nthis.$ = $$[$0-3];yy.setLink($$[$0-3], $$[$0-2]);yy.setTooltip($$[$0-3], $$[$0]);\nbreak;\ncase 134:\nthis.$ = $$[$0-3];yy.setLink($$[$0-3], $$[$0-2], $$[$0]);\nbreak;\ncase 135:\nthis.$ = $$[$0-5];yy.setLink($$[$0-5], $$[$0-4], $$[$0]);yy.setTooltip($$[$0-5], $$[$0-2]);\nbreak;\ncase 136:\nthis.$ = $$[$0-4];yy.addVertex($$[$0-2],undefined,undefined,$$[$0]);\nbreak;\ncase 137:\nthis.$ = $$[$0-4];yy.updateLink([$$[$0-2]],$$[$0]);\nbreak;\ncase 138:\nthis.$ = $$[$0-4];yy.updateLink($$[$0-2],$$[$0]);\nbreak;\ncase 139:\nthis.$ = $$[$0-8];yy.updateLinkInterpolate([$$[$0-6]],$$[$0-2]);yy.updateLink([$$[$0-6]],$$[$0]);\nbreak;\ncase 140:\nthis.$ = $$[$0-8];yy.updateLinkInterpolate($$[$0-6],$$[$0-2]);yy.updateLink($$[$0-6],$$[$0]);\nbreak;\ncase 141:\nthis.$ = $$[$0-6];yy.updateLinkInterpolate([$$[$0-4]],$$[$0]);\nbreak;\ncase 142:\nthis.$ = $$[$0-6];yy.updateLinkInterpolate($$[$0-4],$$[$0]);\nbreak;\ncase 143: case 145:\nthis.$ = [$$[$0]]\nbreak;\ncase 144: case 146:\n$$[$0-2].push($$[$0]);this.$ = $$[$0-2];\nbreak;\ncase 148:\nthis.$ = $$[$0-1] + $$[$0];\nbreak;\ncase 196:\nthis.$=$$[$0]\nbreak;\ncase 197:\nthis.$=$$[$0-1]+''+$$[$0]\nbreak;\ncase 199:\nthis.$=$$[$0-1]+''+$$[$0];\nbreak;\ncase 200:\n this.$={stmt:'dir', value:'TB'};\nbreak;\ncase 201:\n this.$={stmt:'dir', value:'BT'};\nbreak;\ncase 202:\n this.$={stmt:'dir', value:'RL'};\nbreak;\ncase 203:\n this.$={stmt:'dir', value:'LR'};\nbreak;\ncase 204:\n this.$={stmt:'dir', value:'TD'};\nbreak;\n}\n},\ntable: [{3:1,4:2,8:$V0,10:$V1,11:$V2,13:$V3},{1:[3]},o($V4,$V5,{5:7}),{4:8,8:$V0,10:$V1,11:$V2,13:$V3},{4:9,8:$V0,10:$V1,11:$V2,13:$V3},{4:10,8:$V0,10:$V1,11:$V2,13:$V3},{14:[1,11],15:[1,12]},{1:[2,1],6:13,7:14,8:$V6,9:$V7,10:$V8,11:$V9,12:$Va,21:20,23:21,24:22,25:23,26:24,27:25,28:$Vb,35:$Vc,36:$Vd,37:29,38:$Ve,40:$Vf,42:$Vg,45:33,46:44,47:$Vh,48:45,50:46,63:$Vi,87:$Vj,88:$Vk,89:$Vl,90:$Vm,91:$Vn,92:$Vo,105:$Vp,108:$Vq,109:$Vr,112:$Vs,114:$Vt,116:47,117:$Vu,118:$Vv,119:$Vw,124:$Vx,125:$Vy,126:$Vz,127:$VA,128:$VB},o($V4,[2,10]),o($V4,[2,11]),o($V4,[2,12]),o($V4,[2,13]),{8:[1,63],9:[1,60],10:[1,61],11:$VC,16:59,19:62},o($VD,[2,3]),o($VD,[2,4]),o($VD,[2,5]),o($VD,[2,6]),o($VD,[2,7]),o($VD,[2,8]),o($VD,[2,9]),{8:$VE,9:$VF,10:$VG,12:$VH,22:65,44:66,75:71,78:[1,72],80:[1,74],81:[1,73]},{8:$VE,9:$VF,10:$VG,12:$VH,22:75},{8:$VE,9:$VF,10:$VG,12:$VH,22:76},{8:$VE,9:$VF,10:$VG,12:$VH,22:77},{8:$VE,9:$VF,10:$VG,12:$VH,22:78},{8:$VE,9:$VF,10:$VG,12:$VH,22:79},{8:$VE,9:$VF,10:$VG,11:[1,80],12:$VH,22:81},{8:$VE,9:$VF,10:$VG,12:$VH,22:82},{11:[1,83]},o($VD,[2,48]),{39:[1,84]},{41:[1,85]},o($VD,[2,51]),o($VI,[2,63],{19:86,34:87,11:$VC,43:$VJ}),{11:[1,89]},{11:[1,90]},{11:[1,91]},{11:[1,92]},{15:$VK,47:$VL,63:$VM,83:[1,96],92:$VN,98:[1,93],100:[1,94],104:95,108:$VO,109:$VP,112:$VQ,114:$VR,117:$VS,118:$VT,119:$VU,123:97},o($VD,[2,200]),o($VD,[2,201]),o($VD,[2,202]),o($VD,[2,203]),o($VD,[2,204]),o($VV,[2,64]),o($VV,[2,67],{49:[1,109]}),o($VW,[2,85],{116:122,30:[1,110],47:$Vh,51:[1,111],53:[1,112],55:[1,113],57:[1,114],59:[1,115],61:[1,116],63:$Vi,66:[1,117],68:[1,118],70:[1,119],71:[1,120],73:[1,121],92:$Vo,105:$Vp,108:$Vq,109:$Vr,112:$Vs,114:$Vt,117:$Vu,118:$Vv,119:$Vw}),o($VX,[2,196]),o($VX,[2,157]),o($VX,[2,158]),o($VX,[2,159]),o($VX,[2,160]),o($VX,[2,161]),o($VX,[2,162]),o($VX,[2,163]),o($VX,[2,164]),o($VX,[2,165]),o($VX,[2,166]),o($VX,[2,167]),o($V4,[2,14]),o($V4,[2,20]),o($V4,[2,21]),{10:[1,123]},o($V4,[2,23]),o($VY,[2,31],{19:124,11:$VC}),o($VD,[2,32]),{45:125,46:44,47:$Vh,48:45,50:46,63:$Vi,92:$Vo,105:$Vp,108:$Vq,109:$Vr,112:$Vs,114:$Vt,116:47,117:$Vu,118:$Vv,119:$Vw},o($VD,[2,52]),o($VD,[2,53]),o($VD,[2,54]),o($VD,[2,55]),o($VZ,[2,89],{76:126,65:[1,128],77:[1,127]}),{79:129,82:130,83:$V_,84:$V$,119:$V01,122:$V11},{78:[1,135],80:[1,136]},o($V21,[2,96]),o($VD,[2,33]),o($VD,[2,34]),o($VD,[2,35]),o($VD,[2,36]),o($VD,[2,37]),{11:$V31,13:$V41,15:$V51,28:$V61,29:137,33:$V71,35:$V81,36:$V91,47:$Va1,63:$Vb1,78:$Vc1,83:$Vd1,84:$Ve1,86:150,87:$Vf1,88:$Vg1,89:$Vh1,90:$Vi1,91:$Vj1,92:$Vk1,93:$Vl1,94:138,108:$Vm1,112:$Vn1,114:$Vo1,117:$Vp1,118:$Vq1,119:$Vr1},o($Vs1,$V5,{5:165}),o($Vs1,$V5,{5:166}),{11:$V31,13:$V41,15:$V51,28:$V61,29:167,33:$V71,35:$V81,36:$V91,47:$Va1,63:$Vb1,78:$Vc1,83:$Vd1,84:$Ve1,86:150,87:$Vf1,88:$Vg1,89:$Vh1,90:$Vi1,91:$Vj1,92:$Vk1,93:$Vl1,94:138,108:$Vm1,112:$Vn1,114:$Vo1,117:$Vp1,118:$Vq1,119:$Vr1},o($VD,[2,49]),o($VD,[2,50]),o($VI,[2,61],{47:$Vt1}),o($VI,[2,62],{19:169,11:$VC,43:$Vu1}),o($VV,[2,57]),{47:$Vh,50:171,63:$Vi,92:$Vo,105:$Vp,108:$Vq,109:$Vr,112:$Vs,114:$Vt,116:47,117:$Vu,118:$Vv,119:$Vw},{105:[1,172],106:173,108:[1,174]},{47:$Vh,50:175,63:$Vi,92:$Vo,105:$Vp,108:$Vq,109:$Vr,112:$Vs,114:$Vt,116:47,117:$Vu,118:$Vv,119:$Vw},{47:$Vh,50:176,63:$Vi,92:$Vo,105:$Vp,108:$Vq,109:$Vr,112:$Vs,114:$Vt,116:47,117:$Vu,118:$Vv,119:$Vw},o($Vv1,[2,122],{11:[1,177],99:[1,178]}),{83:[1,179]},o($Vv1,[2,130],{123:181,11:[1,180],15:$VK,47:$VL,63:$VM,92:$VN,108:$VO,109:$VP,112:$VQ,114:$VR,117:$VS,118:$VT,119:$VU}),o($Vv1,[2,132],{11:[1,182]}),o($Vw1,[2,198]),o($Vw1,[2,185]),o($Vw1,[2,186]),o($Vw1,[2,187]),o($Vw1,[2,188]),o($Vw1,[2,189]),o($Vw1,[2,190]),o($Vw1,[2,191]),o($Vw1,[2,192]),o($Vw1,[2,193]),o($Vw1,[2,194]),o($Vw1,[2,195]),{47:$Vh,50:183,63:$Vi,92:$Vo,105:$Vp,108:$Vq,109:$Vr,112:$Vs,114:$Vt,116:47,117:$Vu,118:$Vv,119:$Vw},{31:184,70:$Vx1,83:$Vy1,84:$Vz1,85:185,119:$VA1,120:$VB1,121:$VC1},{31:192,70:$Vx1,83:$Vy1,84:$Vz1,85:185,119:$VA1,120:$VB1,121:$VC1},{31:194,53:[1,193],70:$Vx1,83:$Vy1,84:$Vz1,85:185,119:$VA1,120:$VB1,121:$VC1},{31:195,70:$Vx1,83:$Vy1,84:$Vz1,85:185,119:$VA1,120:$VB1,121:$VC1},{31:196,70:$Vx1,83:$Vy1,84:$Vz1,85:185,119:$VA1,120:$VB1,121:$VC1},{31:197,70:$Vx1,83:$Vy1,84:$Vz1,85:185,119:$VA1,120:$VB1,121:$VC1},{112:[1,198]},{31:199,70:$Vx1,83:$Vy1,84:$Vz1,85:185,119:$VA1,120:$VB1,121:$VC1},{31:200,68:[1,201],70:$Vx1,83:$Vy1,84:$Vz1,85:185,119:$VA1,120:$VB1,121:$VC1},{31:202,70:$Vx1,83:$Vy1,84:$Vz1,85:185,119:$VA1,120:$VB1,121:$VC1},{31:203,70:$Vx1,83:$Vy1,84:$Vz1,85:185,119:$VA1,120:$VB1,121:$VC1},{31:204,70:$Vx1,83:$Vy1,84:$Vz1,85:185,119:$VA1,120:$VB1,121:$VC1},o($VX,[2,197]),o($V4,[2,22]),o($VY,[2,30]),o($VI,[2,59],{34:205,19:206,11:$VC,43:$VJ}),o($VZ,[2,86],{11:[1,207]}),{11:[1,208]},{31:209,70:$Vx1,83:$Vy1,84:$Vz1,85:185,119:$VA1,120:$VB1,121:$VC1},{80:[1,210],82:211,119:$V01,122:$V11},o($VD1,[2,92]),o($VD1,[2,94]),o($VD1,[2,95]),o($VD1,[2,183]),o($VD1,[2,184]),{79:212,82:130,83:$V_,84:$V$,119:$V01,122:$V11},o($V21,[2,97]),{8:$VE,9:$VF,10:$VG,11:$V31,12:$VH,13:$V41,15:$V51,22:214,28:$V61,30:[1,213],33:$V71,34:215,35:$V81,36:$V91,43:$VJ,47:$Va1,63:$Vb1,78:$Vc1,86:150,87:$Vf1,88:$Vg1,89:$Vh1,90:$Vi1,91:$Vj1,92:$Vk1,93:$Vl1,94:216,108:$Vm1,112:$Vn1,114:$Vo1,117:$Vp1,118:$Vq1,119:$Vr1},o($VE1,[2,116]),o($VE1,[2,118]),o($VE1,[2,119]),o($VE1,[2,172]),o($VE1,[2,173]),o($VE1,[2,174]),o($VE1,[2,175]),o($VE1,[2,176]),o($VE1,[2,177]),o($VE1,[2,178]),o($VE1,[2,179]),o($VE1,[2,180]),o($VE1,[2,181]),o($VE1,[2,182]),o($VE1,[2,103]),o($VE1,[2,104]),o($VE1,[2,105]),o($VE1,[2,106]),o($VE1,[2,107]),o($VE1,[2,108]),o($VE1,[2,109]),o($VE1,[2,110]),o($VE1,[2,111]),o($VE1,[2,112]),o($VE1,[2,113]),o($VE1,[2,114]),o($VE1,[2,115]),{6:13,7:14,8:$V6,9:$V7,10:$V8,11:$V9,12:$Va,21:20,23:21,24:22,25:23,26:24,27:25,28:$Vb,33:[1,217],35:$Vc,36:$Vd,37:29,38:$Ve,40:$Vf,42:$Vg,45:33,46:44,47:$Vh,48:45,50:46,63:$Vi,87:$Vj,88:$Vk,89:$Vl,90:$Vm,91:$Vn,92:$Vo,105:$Vp,108:$Vq,109:$Vr,112:$Vs,114:$Vt,116:47,117:$Vu,118:$Vv,119:$Vw,124:$Vx,125:$Vy,126:$Vz,127:$VA,128:$VB},{6:13,7:14,8:$V6,9:$V7,10:$V8,11:$V9,12:$Va,21:20,23:21,24:22,25:23,26:24,27:25,28:$Vb,33:[1,218],35:$Vc,36:$Vd,37:29,38:$Ve,40:$Vf,42:$Vg,45:33,46:44,47:$Vh,48:45,50:46,63:$Vi,87:$Vj,88:$Vk,89:$Vl,90:$Vm,91:$Vn,92:$Vo,105:$Vp,108:$Vq,109:$Vr,112:$Vs,114:$Vt,116:47,117:$Vu,118:$Vv,119:$Vw,124:$Vx,125:$Vy,126:$Vz,127:$VA,128:$VB},{8:$VE,9:$VF,10:$VG,11:$V31,12:$VH,13:$V41,15:$V51,22:220,28:$V61,30:[1,219],33:$V71,34:221,35:$V81,36:$V91,43:$VJ,47:$Va1,63:$Vb1,78:$Vc1,86:150,87:$Vf1,88:$Vg1,89:$Vh1,90:$Vi1,91:$Vj1,92:$Vk1,93:$Vl1,94:216,108:$Vm1,112:$Vn1,114:$Vo1,117:$Vp1,118:$Vq1,119:$Vr1},{11:$VC,19:222},{47:[1,223]},o($VV,[2,56]),{11:[1,224],47:$Vh,63:$Vi,92:$Vo,105:$Vp,108:$Vq,109:$Vr,112:$Vs,114:$Vt,116:122,117:$Vu,118:$Vv,119:$Vw},{11:[1,225]},{11:[1,226],109:[1,227]},o($VF1,[2,143]),{11:[1,228],47:$Vh,63:$Vi,92:$Vo,105:$Vp,108:$Vq,109:$Vr,112:$Vs,114:$Vt,116:122,117:$Vu,118:$Vv,119:$Vw},{11:[1,229],47:$Vh,63:$Vi,92:$Vo,105:$Vp,108:$Vq,109:$Vr,112:$Vs,114:$Vt,116:122,117:$Vu,118:$Vv,119:$Vw},{83:[1,230]},o($Vv1,[2,124],{11:[1,231]}),o($Vv1,[2,126],{11:[1,232]}),{83:[1,233]},o($Vw1,[2,199]),{83:[1,234],101:[1,235]},o($VV,[2,68],{116:122,47:$Vh,63:$Vi,92:$Vo,105:$Vp,108:$Vq,109:$Vr,112:$Vs,114:$Vt,117:$Vu,118:$Vv,119:$Vw}),{32:[1,236],70:$Vx1,85:237,119:$VA1,120:$VB1,121:$VC1},o($VG1,[2,99]),o($VG1,[2,101]),o($VG1,[2,102]),o($VG1,[2,168]),o($VG1,[2,169]),o($VG1,[2,170]),o($VG1,[2,171]),{52:[1,238],70:$Vx1,85:237,119:$VA1,120:$VB1,121:$VC1},{31:239,70:$Vx1,83:$Vy1,84:$Vz1,85:185,119:$VA1,120:$VB1,121:$VC1},{54:[1,240],70:$Vx1,85:237,119:$VA1,120:$VB1,121:$VC1},{56:[1,241],70:$Vx1,85:237,119:$VA1,120:$VB1,121:$VC1},{58:[1,242],70:$Vx1,85:237,119:$VA1,120:$VB1,121:$VC1},{60:[1,243],70:$Vx1,85:237,119:$VA1,120:$VB1,121:$VC1},{63:[1,244]},{67:[1,245],70:$Vx1,85:237,119:$VA1,120:$VB1,121:$VC1},{69:[1,246],70:$Vx1,85:237,119:$VA1,120:$VB1,121:$VC1},{31:247,70:$Vx1,83:$Vy1,84:$Vz1,85:185,119:$VA1,120:$VB1,121:$VC1},{32:[1,248],70:$Vx1,85:237,119:$VA1,120:$VB1,121:$VC1},{70:$Vx1,72:[1,249],74:[1,250],85:237,119:$VA1,120:$VB1,121:$VC1},{70:$Vx1,72:[1,252],74:[1,251],85:237,119:$VA1,120:$VB1,121:$VC1},o($VI,[2,58],{19:169,11:$VC,43:$Vu1}),o($VI,[2,60],{47:$Vt1}),o($VZ,[2,88]),o($VZ,[2,87]),{65:[1,253],70:$Vx1,85:237,119:$VA1,120:$VB1,121:$VC1},o($VZ,[2,90]),o($VD1,[2,93]),{80:[1,254],82:211,119:$V01,122:$V11},{31:255,70:$Vx1,83:$Vy1,84:$Vz1,85:185,119:$VA1,120:$VB1,121:$VC1},o($Vs1,$V5,{5:256}),{8:$VE,9:$VF,10:$VG,12:$VH,22:257,43:$Vu1},o($VE1,[2,117]),o($VD,[2,42]),o($VD,[2,43]),{31:258,70:$Vx1,83:$Vy1,84:$Vz1,85:185,119:$VA1,120:$VB1,121:$VC1},o($VD,[2,46]),{8:$VE,9:$VF,10:$VG,12:$VH,22:259,43:$Vu1},{46:260,47:$Vh,48:45,50:46,63:$Vi,92:$Vo,105:$Vp,108:$Vq,109:$Vr,112:$Vs,114:$Vt,116:47,117:$Vu,118:$Vv,119:$Vw},{11:$VC,19:261},{11:$VH1,63:$VI1,87:$VJ1,95:262,108:$VK1,110:263,111:264,112:$VL1,113:$VM1,114:$VN1,115:$VO1},{11:$VH1,63:$VI1,87:$VJ1,95:273,107:[1,274],108:$VK1,110:263,111:264,112:$VL1,113:$VM1,114:$VN1,115:$VO1},{11:$VH1,63:$VI1,87:$VJ1,95:275,107:[1,276],108:$VK1,110:263,111:264,112:$VL1,113:$VM1,114:$VN1,115:$VO1},{108:[1,277]},{11:$VH1,63:$VI1,87:$VJ1,95:278,108:$VK1,110:263,111:264,112:$VL1,113:$VM1,114:$VN1,115:$VO1},{47:$Vh,50:279,63:$Vi,92:$Vo,105:$Vp,108:$Vq,109:$Vr,112:$Vs,114:$Vt,116:47,117:$Vu,118:$Vv,119:$Vw},o($Vv1,[2,123]),{83:[1,280]},{83:[1,281],101:[1,282]},o($Vv1,[2,131]),o($Vv1,[2,133],{11:[1,283]}),o($Vv1,[2,134]),o($VW,[2,69]),o($VG1,[2,100]),o($VW,[2,70]),{54:[1,284],70:$Vx1,85:237,119:$VA1,120:$VB1,121:$VC1},o($VW,[2,77]),o($VW,[2,72]),o($VW,[2,73]),o($VW,[2,74]),{112:[1,285]},o($VW,[2,76]),o($VW,[2,78]),{69:[1,286],70:$Vx1,85:237,119:$VA1,120:$VB1,121:$VC1},o($VW,[2,80]),o($VW,[2,81]),o($VW,[2,83]),o($VW,[2,82]),o($VW,[2,84]),o([11,47,63,92,105,108,109,112,114,117,118,119],[2,98]),o($VZ,[2,91]),{32:[1,287],70:$Vx1,85:237,119:$VA1,120:$VB1,121:$VC1},{6:13,7:14,8:$V6,9:$V7,10:$V8,11:$V9,12:$Va,21:20,23:21,24:22,25:23,26:24,27:25,28:$Vb,33:[1,288],35:$Vc,36:$Vd,37:29,38:$Ve,40:$Vf,42:$Vg,45:33,46:44,47:$Vh,48:45,50:46,63:$Vi,87:$Vj,88:$Vk,89:$Vl,90:$Vm,91:$Vn,92:$Vo,105:$Vp,108:$Vq,109:$Vr,112:$Vs,114:$Vt,116:47,117:$Vu,118:$Vv,119:$Vw,124:$Vx,125:$Vy,126:$Vz,127:$VA,128:$VB},o($Vs1,$V5,{5:289}),{32:[1,290],70:$Vx1,85:237,119:$VA1,120:$VB1,121:$VC1},o($VD,[2,47]),o($VV,[2,66]),{46:291,47:$Vh,48:45,50:46,63:$Vi,92:$Vo,105:$Vp,108:$Vq,109:$Vr,112:$Vs,114:$Vt,116:47,117:$Vu,118:$Vv,119:$Vw},o($Vv1,[2,136],{109:$VP1}),o($VQ1,[2,145],{111:293,11:$VH1,63:$VI1,87:$VJ1,108:$VK1,112:$VL1,113:$VM1,114:$VN1,115:$VO1}),o($VR1,[2,147]),o($VR1,[2,149]),o($VR1,[2,150]),o($VR1,[2,151]),o($VR1,[2,152]),o($VR1,[2,153]),o($VR1,[2,154]),o($VR1,[2,155]),o($VR1,[2,156]),o($Vv1,[2,137],{109:$VP1}),{11:[1,294]},o($Vv1,[2,138],{109:$VP1}),{11:[1,295]},o($VF1,[2,144]),o($Vv1,[2,120],{109:$VP1}),o($Vv1,[2,121],{116:122,47:$Vh,63:$Vi,92:$Vo,105:$Vp,108:$Vq,109:$Vr,112:$Vs,114:$Vt,117:$Vu,118:$Vv,119:$Vw}),o($Vv1,[2,125]),o($Vv1,[2,127],{11:[1,296]}),o($Vv1,[2,128]),{101:[1,297]},{54:[1,298]},{65:[1,299]},{69:[1,300]},{8:$VE,9:$VF,10:$VG,12:$VH,22:301,34:302,43:$VJ},o($VD,[2,40]),{6:13,7:14,8:$V6,9:$V7,10:$V8,11:$V9,12:$Va,21:20,23:21,24:22,25:23,26:24,27:25,28:$Vb,33:[1,303],35:$Vc,36:$Vd,37:29,38:$Ve,40:$Vf,42:$Vg,45:33,46:44,47:$Vh,48:45,50:46,63:$Vi,87:$Vj,88:$Vk,89:$Vl,90:$Vm,91:$Vn,92:$Vo,105:$Vp,108:$Vq,109:$Vr,112:$Vs,114:$Vt,116:47,117:$Vu,118:$Vv,119:$Vw,124:$Vx,125:$Vy,126:$Vz,127:$VA,128:$VB},{8:$VE,9:$VF,10:$VG,12:$VH,22:304,34:305,43:$VJ},o($VV,[2,65]),{11:$VH1,63:$VI1,87:$VJ1,108:$VK1,110:306,111:264,112:$VL1,113:$VM1,114:$VN1,115:$VO1},o($VR1,[2,148]),{15:$VK,47:$VL,63:$VM,92:$VN,104:307,108:$VO,109:$VP,112:$VQ,114:$VR,117:$VS,118:$VT,119:$VU,123:97},{15:$VK,47:$VL,63:$VM,92:$VN,104:308,108:$VO,109:$VP,112:$VQ,114:$VR,117:$VS,118:$VT,119:$VU,123:97},{101:[1,309]},o($Vv1,[2,135]),o($VW,[2,71]),{31:310,70:$Vx1,83:$Vy1,84:$Vz1,85:185,119:$VA1,120:$VB1,121:$VC1},o($VW,[2,79]),o($Vs1,$V5,{5:311}),{8:$VE,9:$VF,10:$VG,12:$VH,22:312,43:$Vu1},o($VD,[2,41]),o($VD,[2,44]),{8:$VE,9:$VF,10:$VG,12:$VH,22:313,43:$Vu1},o($VQ1,[2,146],{111:293,11:$VH1,63:$VI1,87:$VJ1,108:$VK1,112:$VL1,113:$VM1,114:$VN1,115:$VO1}),o($Vv1,[2,141],{123:181,11:[1,314],15:$VK,47:$VL,63:$VM,92:$VN,108:$VO,109:$VP,112:$VQ,114:$VR,117:$VS,118:$VT,119:$VU}),o($Vv1,[2,142],{123:181,11:[1,315],15:$VK,47:$VL,63:$VM,92:$VN,108:$VO,109:$VP,112:$VQ,114:$VR,117:$VS,118:$VT,119:$VU}),o($Vv1,[2,129]),{32:[1,316],70:$Vx1,85:237,119:$VA1,120:$VB1,121:$VC1},{6:13,7:14,8:$V6,9:$V7,10:$V8,11:$V9,12:$Va,21:20,23:21,24:22,25:23,26:24,27:25,28:$Vb,33:[1,317],35:$Vc,36:$Vd,37:29,38:$Ve,40:$Vf,42:$Vg,45:33,46:44,47:$Vh,48:45,50:46,63:$Vi,87:$Vj,88:$Vk,89:$Vl,90:$Vm,91:$Vn,92:$Vo,105:$Vp,108:$Vq,109:$Vr,112:$Vs,114:$Vt,116:47,117:$Vu,118:$Vv,119:$Vw,124:$Vx,125:$Vy,126:$Vz,127:$VA,128:$VB},o($Vs1,$V5,{5:318}),o($VD,[2,45]),{11:$VH1,63:$VI1,87:$VJ1,95:319,108:$VK1,110:263,111:264,112:$VL1,113:$VM1,114:$VN1,115:$VO1},{11:$VH1,63:$VI1,87:$VJ1,95:320,108:$VK1,110:263,111:264,112:$VL1,113:$VM1,114:$VN1,115:$VO1},o($VW,[2,75]),o($VD,[2,38]),{6:13,7:14,8:$V6,9:$V7,10:$V8,11:$V9,12:$Va,21:20,23:21,24:22,25:23,26:24,27:25,28:$Vb,33:[1,321],35:$Vc,36:$Vd,37:29,38:$Ve,40:$Vf,42:$Vg,45:33,46:44,47:$Vh,48:45,50:46,63:$Vi,87:$Vj,88:$Vk,89:$Vl,90:$Vm,91:$Vn,92:$Vo,105:$Vp,108:$Vq,109:$Vr,112:$Vs,114:$Vt,116:47,117:$Vu,118:$Vv,119:$Vw,124:$Vx,125:$Vy,126:$Vz,127:$VA,128:$VB},o($Vv1,[2,139],{109:$VP1}),o($Vv1,[2,140],{109:$VP1}),o($VD,[2,39])],\ndefaultActions: {},\nparseError: function parseError (str, hash) {\n    if (hash.recoverable) {\n        this.trace(str);\n    } else {\n        var error = new Error(str);\n        error.hash = hash;\n        throw error;\n    }\n},\nparse: function parse(input) {\n    var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n    var args = lstack.slice.call(arguments, 1);\n    var lexer = Object.create(this.lexer);\n    var sharedState = { yy: {} };\n    for (var k in this.yy) {\n        if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n            sharedState.yy[k] = this.yy[k];\n        }\n    }\n    lexer.setInput(input, sharedState.yy);\n    sharedState.yy.lexer = lexer;\n    sharedState.yy.parser = this;\n    if (typeof lexer.yylloc == 'undefined') {\n        lexer.yylloc = {};\n    }\n    var yyloc = lexer.yylloc;\n    lstack.push(yyloc);\n    var ranges = lexer.options && lexer.options.ranges;\n    if (typeof sharedState.yy.parseError === 'function') {\n        this.parseError = sharedState.yy.parseError;\n    } else {\n        this.parseError = Object.getPrototypeOf(this).parseError;\n    }\n    function popStack(n) {\n        stack.length = stack.length - 2 * n;\n        vstack.length = vstack.length - n;\n        lstack.length = lstack.length - n;\n    }\n            function lex() {\n            var token;\n            token = tstack.pop() || lexer.lex() || EOF;\n            if (typeof token !== 'number') {\n                if (token instanceof Array) {\n                    tstack = token;\n                    token = tstack.pop();\n                }\n                token = self.symbols_[token] || token;\n            }\n            return token;\n        }\n    var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n    while (true) {\n        state = stack[stack.length - 1];\n        if (this.defaultActions[state]) {\n            action = this.defaultActions[state];\n        } else {\n            if (symbol === null || typeof symbol == 'undefined') {\n                symbol = lex();\n            }\n            action = table[state] && table[state][symbol];\n        }\n        if (typeof action === 'undefined' || !action.length || !action[0]) {\n            var errStr = '';\n            expected = [];\n            for (p in table[state]) {\n                if (this.terminals_[p] && p > TERROR) {\n                    expected.push('\\'' + this.terminals_[p] + '\\'');\n                }\n            }\n            if (lexer.showPosition) {\n                errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n            } else {\n                errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n            }\n            this.parseError(errStr, {\n                text: lexer.match,\n                token: this.terminals_[symbol] || symbol,\n                line: lexer.yylineno,\n                loc: yyloc,\n                expected: expected\n            });\n        }\n        if (action[0] instanceof Array && action.length > 1) {\n            throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n        }\n        switch (action[0]) {\n        case 1:\n            stack.push(symbol);\n            vstack.push(lexer.yytext);\n            lstack.push(lexer.yylloc);\n            stack.push(action[1]);\n            symbol = null;\n            if (!preErrorSymbol) {\n                yyleng = lexer.yyleng;\n                yytext = lexer.yytext;\n                yylineno = lexer.yylineno;\n                yyloc = lexer.yylloc;\n                if (recovering > 0) {\n                    recovering--;\n                }\n            } else {\n                symbol = preErrorSymbol;\n                preErrorSymbol = null;\n            }\n            break;\n        case 2:\n            len = this.productions_[action[1]][1];\n            yyval.$ = vstack[vstack.length - len];\n            yyval._$ = {\n                first_line: lstack[lstack.length - (len || 1)].first_line,\n                last_line: lstack[lstack.length - 1].last_line,\n                first_column: lstack[lstack.length - (len || 1)].first_column,\n                last_column: lstack[lstack.length - 1].last_column\n            };\n            if (ranges) {\n                yyval._$.range = [\n                    lstack[lstack.length - (len || 1)].range[0],\n                    lstack[lstack.length - 1].range[1]\n                ];\n            }\n            r = this.performAction.apply(yyval, [\n                yytext,\n                yyleng,\n                yylineno,\n                sharedState.yy,\n                action[1],\n                vstack,\n                lstack\n            ].concat(args));\n            if (typeof r !== 'undefined') {\n                return r;\n            }\n            if (len) {\n                stack = stack.slice(0, -1 * len * 2);\n                vstack = vstack.slice(0, -1 * len);\n                lstack = lstack.slice(0, -1 * len);\n            }\n            stack.push(this.productions_[action[1]][0]);\n            vstack.push(yyval.$);\n            lstack.push(yyval._$);\n            newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n            stack.push(newState);\n            break;\n        case 3:\n            return true;\n        }\n    }\n    return true;\n}};\n\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n        if (this.yy.parser) {\n            this.yy.parser.parseError(str, hash);\n        } else {\n            throw new Error(str);\n        }\n    },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n        this.yy = yy || this.yy || {};\n        this._input = input;\n        this._more = this._backtrack = this.done = false;\n        this.yylineno = this.yyleng = 0;\n        this.yytext = this.matched = this.match = '';\n        this.conditionStack = ['INITIAL'];\n        this.yylloc = {\n            first_line: 1,\n            first_column: 0,\n            last_line: 1,\n            last_column: 0\n        };\n        if (this.options.ranges) {\n            this.yylloc.range = [0,0];\n        }\n        this.offset = 0;\n        return this;\n    },\n\n// consumes and returns one char from the input\ninput:function () {\n        var ch = this._input[0];\n        this.yytext += ch;\n        this.yyleng++;\n        this.offset++;\n        this.match += ch;\n        this.matched += ch;\n        var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n        if (lines) {\n            this.yylineno++;\n            this.yylloc.last_line++;\n        } else {\n            this.yylloc.last_column++;\n        }\n        if (this.options.ranges) {\n            this.yylloc.range[1]++;\n        }\n\n        this._input = this._input.slice(1);\n        return ch;\n    },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n        var len = ch.length;\n        var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n        this._input = ch + this._input;\n        this.yytext = this.yytext.substr(0, this.yytext.length - len);\n        //this.yyleng -= len;\n        this.offset -= len;\n        var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n        this.match = this.match.substr(0, this.match.length - 1);\n        this.matched = this.matched.substr(0, this.matched.length - 1);\n\n        if (lines.length - 1) {\n            this.yylineno -= lines.length - 1;\n        }\n        var r = this.yylloc.range;\n\n        this.yylloc = {\n            first_line: this.yylloc.first_line,\n            last_line: this.yylineno + 1,\n            first_column: this.yylloc.first_column,\n            last_column: lines ?\n                (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n                 + oldLines[oldLines.length - lines.length].length - lines[0].length :\n              this.yylloc.first_column - len\n        };\n\n        if (this.options.ranges) {\n            this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n        }\n        this.yyleng = this.yytext.length;\n        return this;\n    },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n        this._more = true;\n        return this;\n    },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n        if (this.options.backtrack_lexer) {\n            this._backtrack = true;\n        } else {\n            return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n                text: \"\",\n                token: null,\n                line: this.yylineno\n            });\n\n        }\n        return this;\n    },\n\n// retain first n characters of the match\nless:function (n) {\n        this.unput(this.match.slice(n));\n    },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n        var past = this.matched.substr(0, this.matched.length - this.match.length);\n        return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n    },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n        var next = this.match;\n        if (next.length < 20) {\n            next += this._input.substr(0, 20-next.length);\n        }\n        return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n    },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n        var pre = this.pastInput();\n        var c = new Array(pre.length + 1).join(\"-\");\n        return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n    },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n        var token,\n            lines,\n            backup;\n\n        if (this.options.backtrack_lexer) {\n            // save context\n            backup = {\n                yylineno: this.yylineno,\n                yylloc: {\n                    first_line: this.yylloc.first_line,\n                    last_line: this.last_line,\n                    first_column: this.yylloc.first_column,\n                    last_column: this.yylloc.last_column\n                },\n                yytext: this.yytext,\n                match: this.match,\n                matches: this.matches,\n                matched: this.matched,\n                yyleng: this.yyleng,\n                offset: this.offset,\n                _more: this._more,\n                _input: this._input,\n                yy: this.yy,\n                conditionStack: this.conditionStack.slice(0),\n                done: this.done\n            };\n            if (this.options.ranges) {\n                backup.yylloc.range = this.yylloc.range.slice(0);\n            }\n        }\n\n        lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n        if (lines) {\n            this.yylineno += lines.length;\n        }\n        this.yylloc = {\n            first_line: this.yylloc.last_line,\n            last_line: this.yylineno + 1,\n            first_column: this.yylloc.last_column,\n            last_column: lines ?\n                         lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n                         this.yylloc.last_column + match[0].length\n        };\n        this.yytext += match[0];\n        this.match += match[0];\n        this.matches = match;\n        this.yyleng = this.yytext.length;\n        if (this.options.ranges) {\n            this.yylloc.range = [this.offset, this.offset += this.yyleng];\n        }\n        this._more = false;\n        this._backtrack = false;\n        this._input = this._input.slice(match[0].length);\n        this.matched += match[0];\n        token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n        if (this.done && this._input) {\n            this.done = false;\n        }\n        if (token) {\n            return token;\n        } else if (this._backtrack) {\n            // recover context\n            for (var k in backup) {\n                this[k] = backup[k];\n            }\n            return false; // rule action called reject() implying the next rule should be tested instead.\n        }\n        return false;\n    },\n\n// return next match in input\nnext:function () {\n        if (this.done) {\n            return this.EOF;\n        }\n        if (!this._input) {\n            this.done = true;\n        }\n\n        var token,\n            match,\n            tempMatch,\n            index;\n        if (!this._more) {\n            this.yytext = '';\n            this.match = '';\n        }\n        var rules = this._currentRules();\n        for (var i = 0; i < rules.length; i++) {\n            tempMatch = this._input.match(this.rules[rules[i]]);\n            if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n                match = tempMatch;\n                index = i;\n                if (this.options.backtrack_lexer) {\n                    token = this.test_match(tempMatch, rules[i]);\n                    if (token !== false) {\n                        return token;\n                    } else if (this._backtrack) {\n                        match = false;\n                        continue; // rule action called reject() implying a rule MISmatch.\n                    } else {\n                        // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n                        return false;\n                    }\n                } else if (!this.options.flex) {\n                    break;\n                }\n            }\n        }\n        if (match) {\n            token = this.test_match(match, rules[index]);\n            if (token !== false) {\n                return token;\n            }\n            // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n            return false;\n        }\n        if (this._input === \"\") {\n            return this.EOF;\n        } else {\n            return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n                text: \"\",\n                token: null,\n                line: this.yylineno\n            });\n        }\n    },\n\n// return next match that has a token\nlex:function lex () {\n        var r = this.next();\n        if (r) {\n            return r;\n        } else {\n            return this.lex();\n        }\n    },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n        this.conditionStack.push(condition);\n    },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n        var n = this.conditionStack.length - 1;\n        if (n > 0) {\n            return this.conditionStack.pop();\n        } else {\n            return this.conditionStack[0];\n        }\n    },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n        if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n            return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n        } else {\n            return this.conditions[\"INITIAL\"].rules;\n        }\n    },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n        n = this.conditionStack.length - 1 - Math.abs(n || 0);\n        if (n >= 0) {\n            return this.conditionStack[n];\n        } else {\n            return \"INITIAL\";\n        }\n    },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n        this.begin(condition);\n    },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n        return this.conditionStack.length;\n    },\noptions: {},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0: this.begin(\"acc_title\");return 38; \nbreak;\ncase 1: this.popState(); return \"acc_title_value\"; \nbreak;\ncase 2: this.begin(\"acc_descr\");return 40; \nbreak;\ncase 3: this.popState(); return \"acc_descr_value\"; \nbreak;\ncase 4: this.begin(\"acc_descr_multiline\");\nbreak;\ncase 5: this.popState(); \nbreak;\ncase 6:return \"acc_descr_multiline_value\";\nbreak;\ncase 7:\n                                                    // console.log('=> shapeData', yy_.yytext);\n                                                    this.pushState(\"shapeData\"); yy_.yytext=\"\"; return 43 \nbreak;\ncase 8:\n                                                    // console.log('=> shapeDataStr', yy_.yytext);\n                                                    this.pushState(\"shapeDataStr\");\n                                                    return 43;\n                                                \nbreak;\ncase 9:\n                                                    // console.log('shapeData <==', yy_.yytext);\n                                                    this.popState(); return 43\nbreak;\ncase 10:\n                                                    // console.log('shapeData', yy_.yytext);\n                                                    const re = /\\n\\s*/g;\n                                                    yy_.yytext = yy_.yytext.replace(re,\"<br/>\");\n                                                    return 43\nbreak;\ncase 11:\n                                                    // console.log('shapeData', yy_.yytext);\n                                                    return 43;\n                                                \nbreak;\ncase 12:\n                                                    // console.log('<== root', yy_.yytext)\n                                                    this.popState();\n                                                \nbreak;\ncase 13:this.begin(\"callbackname\");\nbreak;\ncase 14:this.popState();\nbreak;\ncase 15:this.popState(); this.begin(\"callbackargs\");\nbreak;\ncase 16:return 98;\nbreak;\ncase 17:this.popState();\nbreak;\ncase 18:return 99;\nbreak;\ncase 19: return \"MD_STR\";\nbreak;\ncase 20: this.popState();\nbreak;\ncase 21: this.begin(\"md_string\");\nbreak;\ncase 22: return \"STR\"; \nbreak;\ncase 23:this.popState();\nbreak;\ncase 24:this.pushState(\"string\");\nbreak;\ncase 25:return 87;\nbreak;\ncase 26:return 105;\nbreak;\ncase 27:return 88;\nbreak;\ncase 28:return 107;\nbreak;\ncase 29:return 89;\nbreak;\ncase 30:return 90;\nbreak;\ncase 31:return 100;\nbreak;\ncase 32:this.begin(\"click\");\nbreak;\ncase 33:this.popState();\nbreak;\ncase 34:return 91;\nbreak;\ncase 35:if(yy.lex.firstGraph()){this.begin(\"dir\");}  return 13;\nbreak;\ncase 36:return 28;\nbreak;\ncase 37:return 36;\nbreak;\ncase 38:return 35;\nbreak;\ncase 39:return 33;\nbreak;\ncase 40:return 101;\nbreak;\ncase 41:return 101;\nbreak;\ncase 42:return 101;\nbreak;\ncase 43:return 101;\nbreak;\ncase 44: this.popState();  return 14; \nbreak;\ncase 45: this.popState();  return 15; \nbreak;\ncase 46: this.popState();  return 15; \nbreak;\ncase 47: this.popState();  return 15; \nbreak;\ncase 48: this.popState();  return 15; \nbreak;\ncase 49: this.popState();  return 15; \nbreak;\ncase 50: this.popState();  return 15; \nbreak;\ncase 51: this.popState();  return 15; \nbreak;\ncase 52: this.popState();  return 15; \nbreak;\ncase 53: this.popState();  return 15; \nbreak;\ncase 54: this.popState();  return 15; \nbreak;\ncase 55:return 124;\nbreak;\ncase 56:return 125;\nbreak;\ncase 57:return 126;\nbreak;\ncase 58:return 127;\nbreak;\ncase 59:return 128;\nbreak;\ncase 60: return 81; \nbreak;\ncase 61:return 108;\nbreak;\ncase 62:return 114;\nbreak;\ncase 63:return 49;\nbreak;\ncase 64:return 63;\nbreak;\ncase 65:return 47;\nbreak;\ncase 66:return 9;\nbreak;\ncase 67:return 109;\nbreak;\ncase 68:return 118;\nbreak;\ncase 69: this.popState(); return 80; \nbreak;\ncase 70: this.pushState(\"edgeText\"); return 78; \nbreak;\ncase 71:return 122;\nbreak;\ncase 72: return 80; \nbreak;\ncase 73: /* inline comment - skip */ \nbreak;\ncase 74: this.popState(); return 56; \nbreak;\ncase 75:return \"TEXT\"\nbreak;\ncase 76: this.pushState(\"ellipseText\"); return 55; \nbreak;\ncase 77: this.popState(); return 58; \nbreak;\ncase 78: this.pushState(\"text\"); return 57; \nbreak;\ncase 79: this.popState(); return 60; \nbreak;\ncase 80: this.pushState(\"text\"); return 59; \nbreak;\ncase 81: return 61; \nbreak;\ncase 82: this.pushState(\"text\"); return 70; \nbreak;\ncase 83: this.popState(); return 67; \nbreak;\ncase 84: this.pushState(\"text\") ;return 66; \nbreak;\ncase 85: this.popState(); return 52; \nbreak;\ncase 86: this.pushState(\"text\"); return 51; \nbreak;\ncase 87: /* inline comment - skip */ \nbreak;\ncase 88: this.popState(); return 72; \nbreak;\ncase 89: this.popState(); return 74; \nbreak;\ncase 90:return 120;\nbreak;\ncase 91: this.pushState(\"trapText\"); return 71; \nbreak;\ncase 92: this.pushState(\"trapText\"); return 73; \nbreak;\ncase 93:return 121;\nbreak;\ncase 94:return 70;\nbreak;\ncase 95:return 93;\nbreak;\ncase 96:return 'SEP';\nbreak;\ncase 97:return 92;\nbreak;\ncase 98:return 118;\nbreak;\ncase 99:return 114;\nbreak;\ncase 100:return 47;\nbreak;\ncase 101:return 8;\nbreak;\ncase 102:\n    return 112;\n\nbreak;\ncase 103:return 117\nbreak;\ncase 104:return 119;\nbreak;\ncase 105: this.popState(); return 65; \nbreak;\ncase 106: this.pushState(\"text\"); return 65; \nbreak;\ncase 107: this.popState(); return 54; \nbreak;\ncase 108: this.pushState(\"text\"); return 53; \nbreak;\ncase 109: this.popState(); return 32; \nbreak;\ncase 110: this.pushState(\"text\"); return 30; \nbreak;\ncase 111: this.popState(); return 69 \nbreak;\ncase 112: this.pushState(\"text\"); return 68 \nbreak;\ncase 113: /* inline comment - skip */ \nbreak;\ncase 114:return \"TEXT\";\nbreak;\ncase 115:return 'QUOTE';\nbreak;\ncase 116:return 10;\nbreak;\ncase 117:return 11;\nbreak;\ncase 118:return 12;\nbreak;\n}\n},\nrules: [/^(?:accTitle\\s*:\\s*)/,/^(?:(?!\\n||)*[^\\n]*)/,/^(?:accDescr\\s*:\\s*)/,/^(?:(?!\\n||)*[^\\n]*)/,/^(?:accDescr\\s*\\{\\s*)/,/^(?:[\\}])/,/^(?:[^\\}]*)/,/^(?:@\\{)/,/^(?:[\"])/,/^(?:[\"])/,/^(?:[^\\\"]+)/,/^(?:[^}^\"]+)/,/^(?:\\})/,/^(?:call[\\s]+)/,/^(?:\\([\\s]*\\))/,/^(?:\\()/,/^(?:[^(]*)/,/^(?:\\))/,/^(?:[^)]*)/,/^(?:[^`\"]+)/,/^(?:[`][\"])/,/^(?:[\"][`])/,/^(?:[^\"]+)/,/^(?:[\"])/,/^(?:[\"])/,/^(?:style\\b)/,/^(?:default\\b)/,/^(?:linkStyle\\b)/,/^(?:interpolate\\b)/,/^(?:classDef\\b)/,/^(?:class\\b)/,/^(?:href[\\s])/,/^(?:click[\\s]+)/,/^(?:[\\s\\n])/,/^(?:[^\\s\\n]*)/,/^(?:agentflow-beta\\b)/,/^(?:flow\\b)/,/^(?:connector\\b)/,/^(?:global\\b[ \\t]*)/,/^(?:end\\b[ \\t]*)/,/^(?:_self\\b)/,/^(?:_blank\\b)/,/^(?:_parent\\b)/,/^(?:_top\\b)/,/^(?:(\\r?\\n)*\\s*\\n)/,/^(?:\\s*LR\\b)/,/^(?:\\s*RL\\b)/,/^(?:\\s*TB\\b)/,/^(?:\\s*BT\\b)/,/^(?:\\s*TD\\b)/,/^(?:\\s*BR\\b)/,/^(?:\\s*<)/,/^(?:\\s*>)/,/^(?:\\s*\\^)/,/^(?:\\s*v\\b)/,/^(?:.*direction\\s+TB[^\\n]*)/,/^(?:.*direction\\s+BT[^\\n]*)/,/^(?:.*direction\\s+RL[^\\n]*)/,/^(?:.*direction\\s+LR[^\\n]*)/,/^(?:.*direction\\s+TD[^\\n]*)/,/^(?:[^\\s\\\"]+@(?=[^\\{\\\"]))/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\\*)/,/^(?:\\s*--+[x>]\\s*)/,/^(?:\\s*--\\s*)/,/^(?:[^-]|-(?!-)+)/,/^(?:\\s*-\\.+-\\s*)/,/^(?:%%(?!\\{)[^\\n]*)/,/^(?:[-/\\)][\\)])/,/^(?:[^\\(\\)\\[\\]\\{\\}]|!\\)+)/,/^(?:\\(-)/,/^(?:\\]\\))/,/^(?:\\(\\[)/,/^(?:\\]\\])/,/^(?:\\[\\[)/,/^(?:\\[\\|)/,/^(?:>)/,/^(?:\\)\\])/,/^(?:\\[\\()/,/^(?:\\)\\)\\))/,/^(?:\\(\\(\\()/,/^(?:%%(?!\\{)[^\\n]*)/,/^(?:[\\\\(?=\\])][\\]])/,/^(?:\\/(?=\\])\\])/,/^(?:\\/(?!\\])|\\\\(?!\\])|(?:[^\\\\\\[\\]\\(\\)\\{\\}\\/%]+|(?!))+)/,/^(?:\\[\\/)/,/^(?:\\[\\\\)/,/^(?:<)/,/^(?:>)/,/^(?:\\^)/,/^(?:\\\\\\|)/,/^(?:v\\b)/,/^(?:\\*)/,/^(?:#)/,/^(?:&)/,/^(?:[ \\t]*%%(?!\\{)[^\\n]*)/,/^(?:([A-Za-z0-9!\"\\#$%&'*+\\.`?\\\\_\\/]|-(?=[^\\>\\-\\.])|(?!))+)/,/^(?:-)/,/^(?:[\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6]|[\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377]|[\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5]|[\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA]|[\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE]|[\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA]|[\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0]|[\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977]|[\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2]|[\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A]|[\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39]|[\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8]|[\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C]|[\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C]|[\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99]|[\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0]|[\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D]|[\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3]|[\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10]|[\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1]|[\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81]|[\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3]|[\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6]|[\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A]|[\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081]|[\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D]|[\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0]|[\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310]|[\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C]|[\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711]|[\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7]|[\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C]|[\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16]|[\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF]|[\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC]|[\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D]|[\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D]|[\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3]|[\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F]|[\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128]|[\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184]|[\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3]|[\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6]|[\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE]|[\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C]|[\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D]|[\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC]|[\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B]|[\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788]|[\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805]|[\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB]|[\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28]|[\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5]|[\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4]|[\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E]|[\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D]|[\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36]|[\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D]|[\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC]|[\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF]|[\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC])/,/^(?:\\|)/,/^(?:\\|)/,/^(?:\\))/,/^(?:\\()/,/^(?:\\])/,/^(?:\\[)/,/^(?:(\\}))/,/^(?:\\{)/,/^(?:%%(?!\\{)[^\\n]*)/,/^(?:(?:[^\\[\\]\\(\\)\\{\\}\\|\\\"%]+|(?!))+)/,/^(?:\")/,/^(?:(\\r?\\n)+)/,/^(?:\\s)/,/^(?:$)/],\nconditions: {\"shapeDataEndBracket\":{\"rules\":[21,24,76,78,80,84,86,91,92,106,108,110,112],\"inclusive\":false},\"shapeDataStr\":{\"rules\":[9,10,21,24,76,78,80,84,86,91,92,106,108,110,112],\"inclusive\":false},\"shapeData\":{\"rules\":[8,11,12,21,24,76,78,80,84,86,91,92,106,108,110,112],\"inclusive\":false},\"callbackargs\":{\"rules\":[17,18,21,24,76,78,80,84,86,91,92,106,108,110,112],\"inclusive\":false},\"callbackname\":{\"rules\":[14,15,16,21,24,76,78,80,84,86,91,92,106,108,110,112],\"inclusive\":false},\"href\":{\"rules\":[21,24,76,78,80,84,86,91,92,106,108,110,112],\"inclusive\":false},\"click\":{\"rules\":[21,24,33,34,76,78,80,84,86,91,92,106,108,110,112],\"inclusive\":false},\"edgeText\":{\"rules\":[21,24,69,71,76,78,80,84,86,91,92,106,108,110,112],\"inclusive\":false},\"trapText\":{\"rules\":[21,24,76,78,80,84,86,87,88,89,90,91,92,106,108,110,112],\"inclusive\":false},\"ellipseText\":{\"rules\":[21,24,73,74,75,76,78,80,84,86,91,92,106,108,110,112],\"inclusive\":false},\"text\":{\"rules\":[21,24,76,77,78,79,80,83,84,85,86,91,92,105,106,107,108,109,110,111,112,113,114],\"inclusive\":false},\"vertex\":{\"rules\":[21,24,76,78,80,84,86,91,92,106,108,110,112],\"inclusive\":false},\"dir\":{\"rules\":[21,24,44,45,46,47,48,49,50,51,52,53,54,76,78,80,84,86,91,92,106,108,110,112],\"inclusive\":false},\"acc_descr_multiline\":{\"rules\":[5,6,21,24,76,78,80,84,86,91,92,106,108,110,112],\"inclusive\":false},\"acc_descr\":{\"rules\":[3,21,24,76,78,80,84,86,91,92,106,108,110,112],\"inclusive\":false},\"acc_title\":{\"rules\":[1,21,24,76,78,80,84,86,91,92,106,108,110,112],\"inclusive\":false},\"md_string\":{\"rules\":[19,20,21,24,76,78,80,84,86,91,92,106,108,110,112],\"inclusive\":false},\"string\":{\"rules\":[21,22,23,24,76,78,80,84,86,91,92,106,108,110,112],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,2,4,7,13,21,24,25,26,27,28,29,30,31,32,35,36,37,38,39,40,41,42,43,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,72,76,78,80,81,82,84,86,91,92,93,94,95,96,97,98,99,100,101,102,103,104,106,108,110,112,115,116,117,118],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n  this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})(); \n\tparser.parser = parser;\n\texport { parser };\n\texport default parser;\n\t", "// @ts-ignore: JISON doesn't support types\nimport agentflowJisonParser from './agentflow.jison';\n\nconst newParser = Object.assign({}, agentflowJisonParser);\n\nnewParser.parse = (src: string): unknown => {\n  // Strip trailing horizontal whitespace between a closing `}` and the line's\n  // newline so the grammar's `node shapeData separator` rule still reduces\n  // (a stray SPACE token after `}` otherwise breaks the parse). Match only\n  // non-newline whitespace (`[^\\S\\n]`) \u2014 using `\\s` here would also swallow a\n  // blank line that immediately follows an `@{ ... }` block, folding every\n  // downstream position one line per blank and drifting error/marker line\n  // numbers out of source space (issue #56).\n  const newSrc = src.replace(/}[^\\S\\n]*\\n/g, '}\\n');\n  return agentflowJisonParser.parse(newSrc);\n};\n\nexport default newParser;\n", "import * as khroma from 'khroma';\nimport { getIconStyles } from '../globalStyles.js';\nimport { colorSlotCount, hasPalette, isColorTheme, safeLook } from '../common/colorThemeGate.js';\nimport { KINDS, KIND_SLOT, containerSlot, containerSlotCount, kindClass } from './colorSlots.js';\n\n/** Returns the styles given options */\nexport interface AgentflowStyleOptions {\n  arrowheadColor: string;\n  border2: string;\n  clusterBkg: string;\n  clusterBorder: string;\n  edgeLabelBackground: string;\n  fontFamily: string;\n  lineColor: string;\n  mainBkg: string;\n  nodeBorder: string;\n  nodeTextColor: string;\n  strokeWidth?: string;\n  tertiaryColor: string;\n  textColor: string;\n  titleColor: string;\n  /* Supplied by `createUserStyles`, which spreads `config.themeVariables` and adds the\n     theme name and look. Only the colour themes carry the palette arrays. */\n  theme?: string;\n  look?: string;\n  borderColorArray?: string[];\n  bkgColorArray?: string[];\n  THEME_COLOR_LIMIT?: number;\n}\n\n/**\n * Palette rules. Two families, matching the two rules in `colorSlots.ts`: one colour per\n * node KIND from a fixed slot, and a counter over containers from the slots above them.\n *\n * `redux-dark-color` carries 12 border colours and no background array, so `hasBkgColors`\n * is false there and these rules stroke without filling \u2014 the node keeps the theme's own\n * background. That is the palette telling us what it has, not a special case.\n *\n * Not `!important`: a node carrying `classDef` or `style` gets an inline `style`\n * attribute, which has to keep winning over the theme palette.\n */\nconst genColor = (options: AgentflowStyleOptions) => {\n  const { theme, bkgColorArray, borderColorArray } = options;\n  if (!isColorTheme(theme, borderColorArray)) {\n    return '';\n  }\n  const look = safeLook(options.look);\n  const hasBkgColors = hasPalette(bkgColorArray);\n  const paletteLength = colorSlotCount(options.THEME_COLOR_LIMIT, borderColorArray);\n  const border = (slot: number) => borderColorArray![slot % borderColorArray!.length];\n  const fill = (slot: number) =>\n    hasBkgColors ? `fill: ${bkgColorArray[slot % bkgColorArray.length]};` : '';\n\n  let sections = '';\n\n  /* One rule per kind. Every agentflow shape is drawn as a `path` except the rounded\n     `task`, which is a `rect`, so both are named for each kind rather than guessing. */\n  for (const kind of KINDS) {\n    const slot = KIND_SLOT.get(kind)!;\n    /* Compound, not descendant: `insertNode` puts `data-look` on the very element that\n       carries the kind class, so a space would ask for the class on a CHILD and match\n       nothing.\n     *\n     * `.node` is named as well, and it is not decoration. The shared neo stylesheet emits\n     * `[data-look=\"neo\"].node rect, \u2026 .node polygon`, which is (0,2,1) \u2014 exactly the\n     * specificity of `[data-look][class]` \u2014 and it is appended after the diagram's own\n     * styles, so an equal-specificity rule loses on order and the palette never appears.\n     * Adding `.node` makes this (0,3,1) and settles it by weight rather than by luck. */\n    const sel = `[data-look=\"${look}\"].node.${kindClass(kind)}`;\n    sections += `\n\n    ${sel} rect,\n    ${sel} path,\n    ${sel} polygon {\n      stroke: ${border(slot)};\n      ${fill(slot)}\n    }\n`;\n  }\n\n  /* Containers cycle the slots above the kind range, so a frame never matches a node\n     inside it. Keyed on `data-color-id`, the same carrier every other diagram's containers\n     use \u2014 `createContainerGroup` stamps the expanded frame, `collapsedGroup` the collapsed\n     one. */\n  for (let i = 0; i < containerSlotCount(paletteLength); i++) {\n    // The same arithmetic the assignment uses, so the selector always names the slot the\n    // stamp actually writes -- see `containerSlot`.\n    const slot = containerSlot(i, paletteLength);\n    /* Both forms of a container. An expanded one is a `.cluster`; a collapsed one is\n       drawn as a single `.node` and still holds its slot, so naming only `.cluster` would\n       leave collapsed containers grey beside their expanded siblings. Each suffix is\n       appended to both prefixes separately: a comma-joined prefix list would attach the\n       suffix to the last item only. */\n    const expanded = `[data-look=\"${look}\"][data-color-id=\"color-${slot}\"].cluster`;\n    const collapsed = `[data-look=\"${look}\"][data-color-id=\"color-${slot}\"].node`;\n    const rule = (suffix: string) => `${expanded} ${suffix}, ${collapsed} ${suffix}`;\n    sections += `\n\n    ${rule('rect')},\n    ${rule('path')} {\n      stroke: ${border(slot)};\n      ${fill(slot)}\n    }\n`;\n  }\n  return sections;\n};\n\nconst fade = (color: string, opacity: number) => {\n  // @ts-ignore TODO: incorrect types from khroma\n  const channel = khroma.channel;\n\n  const r = channel(color, 'r');\n  const g = channel(color, 'g');\n  const b = channel(color, 'b');\n\n  // @ts-ignore incorrect types from khroma\n  return khroma.rgba(r, g, b, opacity);\n};\n\nconst getStyles = (options: AgentflowStyleOptions) =>\n  `${genColor(options)}\n  .label {\n    font-family: ${options.fontFamily};\n    color: ${options.nodeTextColor || options.textColor};\n  }\n  .cluster-label text {\n    fill: ${options.titleColor};\n  }\n  .cluster-label span {\n    color: ${options.titleColor};\n  }\n  .cluster-label span p {\n    background-color: transparent;\n  }\n\n  .label text,span {\n    fill: ${options.nodeTextColor || options.textColor};\n    color: ${options.nodeTextColor || options.textColor};\n  }\n\n  .node rect,\n  .node circle,\n  .node ellipse,\n  .node polygon,\n  .node path {\n    fill: ${options.mainBkg};\n    stroke: ${options.nodeBorder};\n    stroke-width: ${options.strokeWidth ?? 1}px;\n  }\n  .rough-node .label text , .node .label text, .image-shape .label, .icon-shape .label {\n    text-anchor: middle;\n  }\n  .node .katex path {\n    fill: ${options.nodeTextColor || options.textColor};\n    stroke: ${options.nodeTextColor || options.textColor};\n    stroke-width: 1px;\n  }\n\n  .rough-node .label,.node .label, .image-shape .label, .icon-shape .label {\n    text-align: center;\n  }\n  .node.clickable {\n    cursor: pointer;\n  }\n\n\n  .root .anchor path {\n    fill: ${options.lineColor} !important;\n    stroke-width: 0;\n    stroke: ${options.lineColor};\n  }\n\n  .arrowheadPath {\n    fill: ${options.arrowheadColor};\n  }\n\n  .edgePaths .path {\n    stroke: ${options.lineColor};\n    stroke-width: ${options.strokeWidth ?? 2}px;\n  }\n\n  .flowchart-link {\n    stroke: ${options.lineColor};\n    fill: none;\n  }\n\n  .edgeLabel {\n    background-color: ${options.edgeLabelBackground};\n    p {\n      background-color: ${options.edgeLabelBackground};\n    }\n    rect {\n      opacity: 0.5;\n      background-color: ${options.edgeLabelBackground};\n      fill: ${options.edgeLabelBackground};\n    }\n    text-align: center;\n  }\n\n  /* For html labels only */\n  .labelBkg {\n    background-color: ${fade(options.edgeLabelBackground, 0.5)};\n  }\n\n  .cluster rect {\n    fill: ${options.clusterBkg};\n    stroke: ${options.clusterBorder};\n    stroke-width: 1px;\n  }\n\n  .flow-cluster rect {\n    fill: none;\n    stroke: ${options.clusterBorder};\n    stroke-width: 0.75px;\n  }\n\n  .node .collapsed-indicator {\n    fill: ${options.nodeBorder};\n    stroke: none;\n    stroke-width: 0;\n    opacity: 0.5;\n  }\n\n  .node .collapsed-separator {\n    stroke-width: 0.75px;\n  }\n\n  .cluster text {\n    fill: ${options.titleColor};\n  }\n\n  .cluster span {\n    color: ${options.titleColor};\n  }\n  /* .cluster div {\n    color: ${options.titleColor};\n  } */\n\n  div.mermaidTooltip {\n    position: absolute;\n    text-align: center;\n    max-width: 200px;\n    padding: 2px;\n    font-family: ${options.fontFamily};\n    font-size: 12px;\n    background: ${options.tertiaryColor};\n    border: 1px solid ${options.border2};\n    border-radius: 2px;\n    pointer-events: none;\n    z-index: 100;\n  }\n\n  .agentflowTitleText {\n    text-anchor: middle;\n    font-size: 18px;\n    fill: ${options.textColor};\n  }\n\n  rect.text {\n    fill: none;\n    stroke-width: 0;\n  }\n\n  .icon-shape, .image-shape {\n    background-color: ${options.edgeLabelBackground};\n    p {\n      background-color: ${options.edgeLabelBackground};\n      padding: 2px;\n    }\n    .label rect {\n      opacity: 0.5;\n      background-color: ${options.edgeLabelBackground};\n      fill: ${options.edgeLabelBackground};\n    }\n    text-align: center;\n  }\n  ${getIconStyles()}\n`;\n\nexport default getStyles;\n", "import type { MermaidConfig } from '../../config.type.js';\nimport { setConfig } from '../../diagram-api/diagramAPI.js';\nimport { AgentFlowDB } from './agentflowDb.js';\nimport renderer from './renderer.js';\n// @ts-ignore: JISON doesn't support types\nimport agentflowParser from './parser/agentflowParser.ts';\nimport agentflowStyles from './styles.js';\n\nexport const diagram = {\n  parser: agentflowParser,\n  get db() {\n    return new AgentFlowDB();\n  },\n  renderer,\n  styles: agentflowStyles,\n  init: (cnf: MermaidConfig) => {\n    cnf.agentflow ??= {};\n    if (cnf.layout) {\n      setConfig({ layout: cnf.layout });\n    }\n    // `rendering-util/rendering-elements/edges.js` only consults the flowchart\n    // and state namespaces for `arrowMarkerAbsolute`, so mirror the global flag\n    // into `flowchart` to keep absolute marker URLs working. Mirrors what\n    // `createFlowDiagram` does.\n    cnf.flowchart ??= {};\n    cnf.flowchart.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n    setConfig({ flowchart: { arrowMarkerAbsolute: cnf.arrowMarkerAbsolute } });\n  },\n};\n"],
  "mappings": "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E,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,GAAG,EAAEC,GAAI,CAAC,EAAE,GAAG,EAAEC,GAAI,CAAC,EAAE,GAAG,EAAEC,GAAI,CAAC,EAAE,GAAG,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,GAAG,EAAEC,GAAI,CAAC,EAAE,GAAG,EAAEC,GAAI,CAAC,EAAE,GAAG,EAAEC,GAAI,CAAC,EAAE,GAAG,EAAEC,GAAI,CAAC,EAAE,GAAG,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAEC,GAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAEC,GAAI,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAEC,GAAI,CAAC,EAAE,GAAG,EAAEC,GAAI,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,EAAK,CAAC,EAAE,EAAE,GAAG,EAAE,EAAEC,GAAK,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAEC,EAAK,CAAC,EAAE,GAAG,EAAEC,EAAK,CAAC,EAAE,GAAG,EAAEC,EAAK,CAAC,EAAE,GAAG,EAAEC,EAAK,CAAC,EAAE,GAAG,EAAEC,EAAK,CAAC,EAAE,GAAG,EAAEC,EAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,GAAG,IAAI,GAAG,EAAEC,EAAK,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAEC,GAAK,CAAC,GAAG,GAAG,EAAEC,GAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC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AAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,C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",
  "names": ["AgentflowWarning", "PARSER_EMITTED_DIAGNOSTICS", "RESERVED_DIAGNOSTICS", "id", "SHAPE_ALIASES", "REMOVED_SHAPES", "ALLOWED_SHAPES", "DEFAULT_SHAPE", "resolveShapeAlias", "shape", "__name", "normaliseNodeShapes", "nodes", "sink", "node", "msg", "log", "KIND_SLOT", "KIND_COUNT", "kindClass", "__name", "kind", "KINDS", "containerSlotCount", "paletteLength", "containerSlot", "slot", "assignColorSlots", "nodes", "kindOf", "containerOrder", "palette", "getConfig", "fallbackOrdinal", "node", "n", "MERMAID_DOM_ID_PREFIX", "SEMANTIC_METADATA_SKIP_KEYS", "SUBROUTINE_ALIASES", "SUBGRAPH_TYPE_TO_SHAPE", "stripPrototypeKeys", "value", "entry", "clean", "key", "__name", "stripLineTrailingCommas", "body", "inSingle", "inDouble", "flowDepth", "blockScalarIndent", "out", "line", "indent", "commentStart", "i", "ch", "code", "comment", "AgentFlowDB", "getConfig", "setAccTitle", "setAccDescription", "setDiagramTitle", "getAccTitle", "getAccDescription", "getDiagramTitle", "txt", "common_default", "labelType", "svgElementId", "id", "vertex", "textObj", "type", "style", "classes", "dir", "props", "metadata", "metadataLoc", "doc", "yamlData", "load", "JSON_SCHEMA", "err", "stripped", "authoredShape", "docRec", "resolved", "resolveShapeAlias", "subGraph", "connector", "edge", "e", "edgeDoc", "s", "authored", "isValidShape", "message", "error", "ex", "translation", "isInline", "buffer", "blockLine", "contentColumn", "toSource", "column", "src", "reason", "bufferLines", "display", "gutterWidth", "snippet", "lineNo", "prefix", "_start", "_end", "log", "linkTextObj", "existingLinks", "getEdgeId", "linkData", "start", "end", "isLastStart", "isFirstEnd", "positions", "interpolate", "pos", "ids", "_style", "classNode", "newStyle", "className", "tooltip", "functionName", "functionArgs", "argList", "item", "domId", "elem", "utils_default", "linkStr", "target", "element", "fun", "tools", "tooltipElem", "createTooltip", "select_default", "el", "title", "rect", "purify", "ver", "clear", "_id", "list", "_title", "result", "a", "prims", "objs", "nodeList", "flowchartConfig", "nodeId", "existingPos", "existing", "nodes", "count", "posCount", "childPos", "res", "titleObj", "resolvedTitle", "stroke", "_str", "str", "char", "length", "dots", "_startStr", "info", "startInfo", "allSgs", "sg", "allSubgraphs", "node", "arrowTypeStart", "arrowTypeEnd", "parentDB", "subGraphDB", "config", "look", "parentId", "isGroup", "baseNode", "classDefs", "compiledStyles", "customClass", "cssClass", "edges", "subGraphs", "hiddenIds", "collapsedAncestorMap", "collectDescendants", "sgId", "ancestor", "seen", "childId", "wouldCloseContainmentCycle", "current", "AgentflowWarning", "collapsedMetadata", "rawEdge", "index", "startId", "endId", "styles", "normaliseNodeShapes", "containerOrder", "childContainers", "parent", "nextContainer", "walkContainers", "child", "connectorIds", "c", "assignColorSlots", "v", "defaultConfig", "resolvedShape", "subGraphIds", "vertices", "connectors", "meta", "model", "offset", "loc", "first_line", "first_column", "last_line", "last_column", "startIndex", "endIndex", "mapping", "_text", "shape", "m", "_fromStmt", "toNodes", "_link", "n", "edgeId", "startLoc", "endLoc", "_titleObj", "candidates", "startLine", "startColumn", "endLine", "endColumn", "span", "position", "smallest", "cur", "smallLines", "smallColumns", "curLines", "curColumns", "subgraphs", "attachments", "severity", "ctx", "anchorId", "diagnostic", "formatted", "getClasses", "__name", "text", "diagramObj", "draw", "id", "_version", "diag", "log", "securityLevel", "conf", "layout", "getConfig", "data4Layout", "svg", "getDiagramElement", "direction", "getRegisteredLayoutAlgorithm", "render", "padding", "utils_default", "setupViewPortForSVG", "renderer_default", "parser", "o", "__name", "k", "v", "l", "$V0", "$V1", "$V2", "$V3", "$V4", "$V5", "$V6", "$V7", "$V8", "$V9", "$Va", "$Vb", "$Vc", "$Vd", "$Ve", "$Vf", "$Vg", "$Vh", "$Vi", "$Vj", "$Vk", "$Vl", "$Vm", "$Vn", "$Vo", "$Vp", "$Vq", "$Vr", "$Vs", "$Vt", "$Vu", "$Vv", "$Vw", "$Vx", "$Vy", "$Vz", "$VA", "$VB", "$VC", "$VD", "$VE", "$VF", "$VG", "$VH", "$VI", "$VJ", "$VK", "$VL", "$VM", "$VN", "$VO", "$VP", "$VQ", "$VR", "$VS", "$VT", "$VU", "$VV", "$VW", "$VX", "$VY", "$VZ", "$V_", "$V$", "$V01", "$V11", "$V21", "$V31", "$V41", "$V51", "$V61", "$V71", "$V81", "$V91", "$Va1", "$Vb1", "$Vc1", "$Vd1", "$Ve1", "$Vf1", "$Vg1", "$Vh1", "$Vi1", "$Vj1", "$Vk1", "$Vl1", "$Vm1", "$Vn1", "$Vo1", "$Vp1", "$Vq1", "$Vr1", "$Vs1", "$Vt1", "$Vu1", "$Vv1", "$Vw1", "$Vx1", "$Vy1", "$Vz1", "$VA1", "$VB1", "$VC1", "$VD1", "$VE1", "$VF1", "$VG1", "$VH1", "$VI1", "$VJ1", "$VK1", "$VL1", "$VM1", "$VN1", "$VO1", "$VP1", "$VQ1", "$VR1", "yytext", "yyleng", "yylineno", "yy", "yystate", "$$", "_$", "$0", "inf", "str", "hash", "error", "input", "self", "stack", "tstack", "vstack", "lstack", "table", "recovering", "TERROR", "EOF", "args", "lexer", "sharedState", "yyloc", "ranges", "popStack", "n", "lex", "token", "symbol", "preErrorSymbol", "state", "action", "a", "r", "yyval", "p", "len", "newState", "expected", "errStr", "ch", "lines", "oldLines", "past", "next", "pre", "c", "match", "indexed_rule", "backup", "tempMatch", "index", "rules", "i", "condition", "yy_", "$avoiding_name_collisions", "YY_START", "YYSTATE", "re", "Parser", "agentflow_default", "parser", "newParser", "agentflow_default", "src", "newSrc", "agentflowParser_default", "genColor", "__name", "options", "theme", "bkgColorArray", "borderColorArray", "isColorTheme", "look", "safeLook", "hasBkgColors", "hasPalette", "paletteLength", "colorSlotCount", "border", "slot", "fill", "sections", "kind", "KINDS", "KIND_SLOT", "sel", "kindClass", "i", "containerSlotCount", "containerSlot", "expanded", "collapsed", "rule", "suffix", "fade", "color", "opacity", "channel", "channel_default", "g", "b", "rgba_default", "getStyles", "getIconStyles", "styles_default", "diagram", "agentflowParser_default", "AgentFlowDB", "renderer_default", "styles_default", "__name", "cnf", "setConfig"]
}
