UNPKG

mermaid

Version:

Markdown-ish syntax for generating flowcharts, mindmaps, sequence diagrams, class diagrams, gantt charts, git graphs and more.

8 lines 277 kB
{
  "version": 3,
  "sources": ["../../../src/diagrams/common/parser/runChevrotainParse.ts", "../../../src/diagrams/usecase/usecaseTypes.ts", "../../../src/diagrams/usecase/usecaseDb.ts", "../../../src/diagrams/usecase/parser/usecase.lexer.ts", "../../../src/diagrams/usecase/parser/usecase.tokens.ts", "../../../src/diagrams/usecase/parser/usecase.parser.ts", "../../../src/diagrams/usecase/parser/usecaseJson.ts", "../../../src/diagrams/usecase/usecaseAst.ts", "../../../src/diagrams/usecase/parser/usecaseModelBuilder.ts", "../../../src/diagrams/usecase/parser/usecase.visitor.ts", "../../../src/diagrams/usecase/parser/usecase.chevrotain.ts", "../../../src/diagrams/usecase/usecaseRenderer.ts", "../../../src/diagrams/usecase/styles.ts", "../../../src/diagrams/usecase/usecaseDiagram.ts"],
  "sourcesContent": ["import type { CstNode, CstParser, Lexer } from 'chevrotain';\n\ninterface ChevrotainParseConfig {\n  diagramType: string;\n  lexer: Lexer;\n  parser: CstParser;\n  entry: () => CstNode;\n  visit: (cst: CstNode) => void;\n}\n\n/** Runs a singleton lexer/parser pair and visits the resulting CST. */\nexport function runChevrotainParse(config: ChevrotainParseConfig, input: string): void {\n  const lexResult = config.lexer.tokenize(input);\n  if (lexResult.errors.length > 0) {\n    // Lexer failures never reach `parser.errors`, so callers cannot enrich them the way\n    // they enrich parser errors. Attach the position here so both failure modes report\n    // the same fields.\n    const lexError = lexResult.errors[0];\n    const start = Number.isFinite(lexError.offset) ? lexError.offset : input.length;\n    const end = start + (Number.isFinite(lexError.length) ? lexError.length : 0);\n    throw new Error(\n      `Error lexing ${config.diagramType} diagram: ${lexError.message} at line ${\n        lexError.line ?? 1\n      }, column ${lexError.column ?? 1} [${start},${end})`\n    );\n  }\n\n  config.parser.input = lexResult.tokens;\n  const cst = config.entry();\n  if (config.parser.errors.length > 0) {\n    throw new Error(\n      `Error parsing ${config.diagramType} diagram: ${config.parser.errors[0].message}`\n    );\n  }\n\n  config.visit(cst);\n}\n", "import type { DiagramDB } from '../../diagram-api/types.js';\nimport type { MermaidConfig, UsecaseDiagramConfig } from '../../config.type.js';\nimport type { ClusterNode, Edge, LayoutData, NonClusterNode } from '../../rendering-util/types.js';\n\nexport type LabelType = 'text' | 'markdown';\nexport type ActorType = 'normal' | 'hollow' | 'awesome' | 'icon';\nexport type UseCaseShape = 'ellipse' | 'rect';\nexport type BoundaryType = 'rect' | 'package';\nexport type RelationshipType = 'association' | 'include' | 'extend' | 'generalization';\nexport type Animation = 'fast' | 'slow';\n\nexport interface Actor {\n  id: string;\n  label: string;\n  labelType: LabelType;\n  type: ActorType;\n  icon?: string;\n  business: boolean;\n  stereotype?: string;\n  parentId?: string;\n  classes: string[];\n  styles: string[];\n}\n\nexport interface UseCase {\n  id: string;\n  label: string;\n  labelType: LabelType;\n  shape: UseCaseShape;\n  business: boolean;\n  stereotype?: string;\n  parentId?: string;\n  classes: string[];\n  styles: string[];\n}\n\nexport interface SystemBoundary {\n  id: string;\n  label: string;\n  labelType: LabelType;\n  type: BoundaryType;\n  members: string[];\n  classes: string[];\n  styles: string[];\n}\n\nexport const ARROW_TYPE = {\n  SOLID_ARROW: 0,\n  BACK_ARROW: 1,\n  LINE_SOLID: 2,\n  CIRCLE_ARROW: 3,\n  CROSS_ARROW: 4,\n  CIRCLE_ARROW_REVERSED: 5,\n  CROSS_ARROW_REVERSED: 6,\n} as const;\n\nexport type ArrowType = (typeof ARROW_TYPE)[keyof typeof ARROW_TYPE];\n\nexport interface Relationship {\n  id: string;\n  explicitId: boolean;\n  source: string;\n  target: string;\n  type: RelationshipType;\n  arrowType: ArrowType;\n  label?: string;\n  labelType?: LabelType;\n  minlen: number;\n  classes: string[];\n  styles: string[];\n  animate: boolean;\n  animation?: Animation;\n}\n\nexport interface UsecaseNote {\n  id: string;\n  target: string;\n  label: string;\n  labelType: LabelType;\n}\n\nexport interface UsecaseJsonNode {\n  id: string;\n  value: Record<string, unknown>;\n  propertyOrder: Record<string, string[]>;\n  classes: string[];\n  styles: string[];\n}\n\n// Direction types for usecase diagrams\nexport type Direction = 'TB' | 'TD' | 'BT' | 'RL' | 'LR';\n\nexport const DEFAULT_DIRECTION: Direction = 'LR';\n\nexport interface ClassDef {\n  id: string;\n  styles: string[];\n}\n\nexport interface UsecaseJsonRow {\n  /** The visual key cell. Scalar-array rows after the first use an empty string. */\n  key: string;\n  /** The key repeated for assistive technology even when the visual key is blank. */\n  accessibleKey: string;\n  value: string;\n}\n\nexport type UsecaseLayoutNodeShape =\n  | 'usecaseActor'\n  | 'usecaseActorHollow'\n  | 'usecaseActorAwesome'\n  | 'usecaseActorIcon'\n  | 'usecaseEllipse'\n  | 'rect'\n  | 'usecaseBusiness'\n  | 'note'\n  | 'usecaseJsonTable';\n\nexport type UsecaseLayoutNode = Omit<NonClusterNode, 'shape'> & {\n  shape: UsecaseLayoutNodeShape;\n  labelType: LabelType;\n  actorType?: ActorType;\n  business?: boolean;\n  stereotype?: string;\n  jsonRows?: UsecaseJsonRow[];\n  noteTarget?: string;\n  noteTargetLabel?: string;\n};\n\nexport type UsecaseLayoutCluster = ClusterNode & {\n  shape: 'usecaseSystemBoundary';\n  labelType: LabelType;\n  boundaryType: BoundaryType;\n};\n\nexport interface UsecaseLayoutEdge extends Edge {\n  start: string;\n  end: string;\n  source: string;\n  sourceLabel: string;\n  targetLabel: string;\n  target: string;\n  type: 'edge';\n  relationshipType: RelationshipType | 'note';\n  pattern: 'solid' | 'dotted';\n  arrowTypeStart: string;\n  arrowTypeEnd: string;\n  internal: boolean;\n  style: string[];\n  cssCompiledStyles: string[];\n  minlen: number;\n}\n\nexport interface UsecaseLayoutData extends Omit<LayoutData, 'nodes' | 'edges'> {\n  nodes: (UsecaseLayoutNode | UsecaseLayoutCluster)[];\n  edges: UsecaseLayoutEdge[];\n  config: MermaidConfig;\n  type: 'usecase';\n  layoutAlgorithm: string;\n  direction: Direction;\n  nodeSpacing: number;\n  actorFontSize: number;\n  actorFontFamily: string;\n  actorFontWeight: string;\n  usecaseFontSize: number;\n  usecaseFontFamily: string;\n  usecaseFontWeight: string;\n  rankSpacing: number;\n  diagramPadding: number;\n  useMaxWidth: boolean;\n  markers: ('point' | 'circle' | 'cross' | 'extension')[];\n}\n\nexport type Span = [start: number, end: number];\n\nexport interface GraphNode {\n  label?: string;\n  shape?: string;\n  classes?: string[];\n  styles?: string[];\n  attrs?: Record<string, unknown>;\n}\n\nexport interface GraphEdge {\n  id: string;\n  source: string;\n  target: string;\n  label?: string;\n  classes?: string[];\n  styles?: string[];\n  attrs?: Record<string, unknown>;\n}\n\nexport interface GraphGroup {\n  title?: string;\n  parent?: string;\n  nodes: string[];\n  direction?: Exclude<Direction, 'TD'>;\n  classes?: string[];\n  styles?: string[];\n  attrs?: Record<string, unknown>;\n}\n\nexport interface MetadataOccurrence {\n  key: string;\n  span: Span;\n  keySpan: Span;\n  valueSpan: Span;\n}\n\nexport interface NodeOccurrence {\n  id: string;\n  span: Span;\n  idSpan: Span;\n  labelSpan?: Span;\n  defines?: boolean;\n  stereotypeSpan?: Span;\n  metadata?: MetadataOccurrence[];\n  classSpans?: Span[];\n}\n\nexport interface EdgeOccurrence {\n  id: string;\n  span: Span;\n  labelSpan?: Span;\n  idSpan?: Span;\n  metadata?: MetadataOccurrence[];\n  classSpans?: Span[];\n}\n\nexport interface GraphStatement {\n  kind:\n    | 'node'\n    | 'edge'\n    | 'group'\n    | 'note'\n    | 'json'\n    | 'metadata'\n    | 'edgeMetadata'\n    | 'classDef'\n    | 'classAssign'\n    | 'style'\n    | 'linkStyle'\n    | 'click'\n    | 'direction'\n    | 'accTitle'\n    | 'accDescr'\n    | 'comment'\n    | 'blank'\n    | 'frontmatter';\n  span: Span;\n  nodes?: NodeOccurrence[];\n  edges?: EdgeOccurrence[];\n  group?: string;\n  idSpan?: Span;\n  titleSpan?: Span;\n  endSpan?: Span;\n  ref?: string;\n  refSpan?: Span;\n  children?: GraphStatement[];\n  metadata?: MetadataOccurrence[];\n  stereotypeSpan?: Span;\n  classSpans?: Span[];\n}\n\nexport interface GraphAST {\n  version: 1;\n  diagramType: 'usecase';\n  source: string;\n  header: {\n    keyword: 'usecase';\n    direction: Exclude<Direction, 'TD'>;\n    span: Span;\n  };\n  accTitle?: string;\n  accDescr?: string;\n  nodes: Record<string, GraphNode>;\n  edges: GraphEdge[];\n  groups: Record<string, GraphGroup>;\n  classDefs: Record<string, { styles: string[] }>;\n  statements: GraphStatement[];\n}\n\nexport type UsecaseSymbolKind = 'actor' | 'usecase' | 'boundary' | 'json' | 'edge';\n\nexport interface UsecaseFields {\n  actors: Map<string, Actor>;\n  useCases: Map<string, UseCase>;\n  systemBoundaries: Map<string, SystemBoundary>;\n  relationships: Relationship[];\n  notes: Map<string, UsecaseNote>;\n  jsonNodes: Map<string, UsecaseJsonNode>;\n  classDefs: Map<string, ClassDef>;\n  symbols: Map<string, UsecaseSymbolKind>;\n  direction: Direction;\n  relationshipCounter: number;\n  noteCounter: number;\n  accTitle: string;\n  accDescription: string;\n  ast: GraphAST | undefined;\n  config: Required<UsecaseDiagramConfig>;\n}\n\nexport interface UsecaseDB extends DiagramDB {\n  getConfig: () => Required<UsecaseDiagramConfig>;\n  createModel: () => UsecaseFields;\n  commit: (model: UsecaseFields) => void;\n  getAST: () => GraphAST | undefined;\n\n  getActors: () => ReadonlyMap<string, Actor>;\n  getActor: (id: string) => Actor | undefined;\n  getUseCases: () => ReadonlyMap<string, UseCase>;\n  getUseCase: (id: string) => UseCase | undefined;\n  getSystemBoundaries: () => ReadonlyMap<string, SystemBoundary>;\n  getSystemBoundary: (id: string) => SystemBoundary | undefined;\n  getRelationships: () => readonly Relationship[];\n  getNotes: () => ReadonlyMap<string, UsecaseNote>;\n  getNote: (id: string) => UsecaseNote | undefined;\n  getJsonNodes: () => ReadonlyMap<string, UsecaseJsonNode>;\n  getJsonNode: (id: string) => UsecaseJsonNode | undefined;\n  getClassDefs: () => ReadonlyMap<string, ClassDef>;\n  getClassDef: (id: string) => ClassDef | undefined;\n  getDirection: () => Direction;\n\n  getData: () => UsecaseLayoutData;\n  clear: () => void;\n}\n", "import {\n  setAccTitle,\n  getAccTitle,\n  setDiagramTitle,\n  getDiagramTitle,\n  getAccDescription,\n  setAccDescription,\n  clear as commonClear,\n} from '../common/commonDb.js';\nimport type {\n  Actor,\n  ClassDef,\n  Direction,\n  GraphAST,\n  Relationship,\n  SystemBoundary,\n  UseCase,\n  UsecaseDB,\n  UsecaseFields,\n  UsecaseJsonNode,\n  UsecaseJsonRow,\n  UsecaseLayoutData,\n  UsecaseLayoutEdge,\n  UsecaseLayoutNode,\n  UsecaseNote,\n} from './usecaseTypes.js';\nimport { DEFAULT_DIRECTION, ARROW_TYPE } from './usecaseTypes.js';\nimport type { UsecaseDiagramConfig } from '../../config.type.js';\nimport DEFAULT_CONFIG from '../../defaultConfig.js';\nimport { getConfig as getGlobalConfig } from '../../diagram-api/diagramAPI.js';\nimport { sanitizeText } from '../common/common.js';\n\nexport const DEFAULT_USECASE_CONFIG: Required<UsecaseDiagramConfig> = DEFAULT_CONFIG.usecase;\n\nconst createModel = (): UsecaseFields => ({\n  actors: new Map(),\n  useCases: new Map(),\n  systemBoundaries: new Map(),\n  relationships: [],\n  notes: new Map(),\n  jsonNodes: new Map(),\n  classDefs: new Map(),\n  symbols: new Map(),\n  direction: DEFAULT_DIRECTION,\n  relationshipCounter: 0,\n  noteCounter: 0,\n  accTitle: '',\n  accDescription: '',\n  ast: undefined,\n  config: structuredClone(DEFAULT_USECASE_CONFIG),\n});\n\nconst assertCompleteModel = (model: UsecaseFields): void => {\n  if (\n    !(model.actors instanceof Map) ||\n    !(model.useCases instanceof Map) ||\n    !(model.systemBoundaries instanceof Map) ||\n    !Array.isArray(model.relationships) ||\n    !(model.notes instanceof Map) ||\n    !(model.jsonNodes instanceof Map) ||\n    !(model.classDefs instanceof Map) ||\n    !(model.symbols instanceof Map) ||\n    !['TB', 'TD', 'BT', 'RL', 'LR'].includes(model.direction) ||\n    !Number.isSafeInteger(model.relationshipCounter) ||\n    model.relationshipCounter < 0 ||\n    !Number.isSafeInteger(model.noteCounter) ||\n    model.noteCounter < 0 ||\n    typeof model.accTitle !== 'string' ||\n    typeof model.accDescription !== 'string' ||\n    !model.config\n  ) {\n    throw new Error('Cannot commit an incomplete usecase model');\n  }\n};\n\nlet state = createModel();\n\nconst getConfig = (): Required<UsecaseDiagramConfig> => structuredClone(state.config);\nconst getAST = (): GraphAST | undefined => state.ast;\n\nconst commit = (model: UsecaseFields): void => {\n  const nextState = structuredClone(model);\n  assertCompleteModel(nextState);\n  const previousAccTitle = getAccTitle();\n  const previousAccDescription = getAccDescription();\n  try {\n    setAccTitle(nextState.accTitle);\n    setAccDescription(nextState.accDescription);\n    state = nextState;\n  } catch (error) {\n    setAccTitle(previousAccTitle);\n    setAccDescription(previousAccDescription);\n    throw error;\n  }\n};\n\nconst clear = (): void => {\n  state = createModel();\n  commonClear();\n};\n\nconst getActors = (): ReadonlyMap<string, Actor> => state.actors;\nconst getActor = (id: string): Actor | undefined => state.actors.get(id);\nconst getUseCases = (): ReadonlyMap<string, UseCase> => state.useCases;\nconst getUseCase = (id: string): UseCase | undefined => state.useCases.get(id);\nconst getSystemBoundaries = (): ReadonlyMap<string, SystemBoundary> => state.systemBoundaries;\nconst getSystemBoundary = (id: string): SystemBoundary | undefined =>\n  state.systemBoundaries.get(id);\nconst getRelationships = (): readonly Relationship[] => state.relationships;\nconst getNotes = (): ReadonlyMap<string, UsecaseNote> => state.notes;\nconst getNote = (id: string): UsecaseNote | undefined => state.notes.get(id);\nconst getJsonNodes = (): ReadonlyMap<string, UsecaseJsonNode> => state.jsonNodes;\nconst getJsonNode = (id: string): UsecaseJsonNode | undefined => state.jsonNodes.get(id);\nconst getClassDefs = (): ReadonlyMap<string, ClassDef> => state.classDefs;\nconst getClassDef = (id: string): ClassDef | undefined => state.classDefs.get(id);\nconst getDirection = (): Direction => state.direction;\n\nconst getCompiledStyles = (classNames: readonly string[]): string[] => {\n  const compiled = new Map<string, string>();\n  for (const className of ['default', ...classNames]) {\n    const definition = state.classDefs.get(className);\n    if (!definition) {\n      continue;\n    }\n    for (const rawStyle of definition.styles) {\n      const style = rawStyle.trim();\n      const separator = style.indexOf(':');\n      const property = (separator === -1 ? style : style.slice(0, separator)).trim();\n      if (property) {\n        compiled.set(property, style);\n      }\n    }\n  }\n  return [...compiled.values()];\n};\n\nconst escapeJsonPointerPart = (part: string): string =>\n  part.replaceAll('~', '~0').replaceAll('/', '~1');\n\nconst displayJsonScalar = (value: string | number | boolean | null): string =>\n  typeof value === 'string' ? value : value === null ? 'null' : String(value);\n\ntype JsonCellSanitizer = (value: string) => string;\n\n/**\n * Flattens a JSON object once into renderer-ready rows. The supplied sanitizer keeps this helper\n * deterministic and makes the security policy an explicit conversion input.\n */\nconst flattenJsonRows = (\n  value: Record<string, unknown>,\n  propertyOrder: Readonly<Record<string, readonly string[]>>,\n  sanitize: JsonCellSanitizer = (cell) => cell\n): UsecaseJsonRow[] => {\n  const rows: UsecaseJsonRow[] = [];\n\n  const append = (key: string, accessibleKey: string, cellValue: string): void => {\n    rows.push({\n      key: sanitize(key),\n      accessibleKey: sanitize(accessibleKey),\n      value: sanitize(cellValue),\n    });\n  };\n\n  const visit = (current: unknown, path: string, pointer: string): void => {\n    if (Array.isArray(current)) {\n      if (current.length === 0) {\n        append(path, path, '[]');\n        return;\n      }\n\n      const scalarArray = current.every(\n        (item) => item === null || ['string', 'number', 'boolean'].includes(typeof item)\n      );\n      if (scalarArray) {\n        for (const [index, element] of current.entries()) {\n          append(\n            index === 0 ? path : '',\n            path,\n            displayJsonScalar(element as string | number | boolean | null)\n          );\n        }\n        return;\n      }\n\n      for (const [index, element] of current.entries()) {\n        visit(element, `${path}[${index}]`, `${pointer}/${index}`);\n      }\n      return;\n    }\n\n    if (current !== null && typeof current === 'object') {\n      const object = current as Record<string, unknown>;\n      const keys = propertyOrder[pointer] ?? Object.keys(object);\n      if (keys.length === 0) {\n        append(path, path, '{}');\n        return;\n      }\n\n      for (const key of keys) {\n        const childPath = path ? `${path}.${key}` : key;\n        visit(object[key], childPath, `${pointer}/${escapeJsonPointerPart(key)}`);\n      }\n      return;\n    }\n\n    append(path, path, displayJsonScalar(current as string | number | boolean | null));\n  };\n\n  visit(value, '', '');\n  return rows;\n};\n\nconst actorShape = (actor: Actor): UsecaseLayoutNode['shape'] => {\n  switch (actor.type) {\n    case 'hollow':\n      return 'usecaseActorHollow';\n    case 'awesome':\n      return 'usecaseActorAwesome';\n    case 'icon':\n      return 'usecaseActorIcon';\n    case 'normal':\n      return 'usecaseActor';\n  }\n};\n\nconst useCaseShape = (useCase: UseCase): UsecaseLayoutNode['shape'] => {\n  if (useCase.shape === 'ellipse') {\n    return useCase.business ? 'usecaseBusiness' : 'usecaseEllipse';\n  }\n  return useCase.shape;\n};\n\nconst associationMarkers = (\n  arrowType: Relationship['arrowType']\n): Pick<UsecaseLayoutEdge, 'arrowTypeStart' | 'arrowTypeEnd'> => {\n  switch (arrowType) {\n    case ARROW_TYPE.SOLID_ARROW:\n      return { arrowTypeStart: 'none', arrowTypeEnd: 'arrow_point' };\n    case ARROW_TYPE.BACK_ARROW:\n      return { arrowTypeStart: 'arrow_point', arrowTypeEnd: 'none' };\n    case ARROW_TYPE.CIRCLE_ARROW:\n      return { arrowTypeStart: 'none', arrowTypeEnd: 'arrow_circle' };\n    case ARROW_TYPE.CROSS_ARROW:\n      return { arrowTypeStart: 'none', arrowTypeEnd: 'arrow_cross' };\n    case ARROW_TYPE.CIRCLE_ARROW_REVERSED:\n      return { arrowTypeStart: 'arrow_circle', arrowTypeEnd: 'none' };\n    case ARROW_TYPE.CROSS_ARROW_REVERSED:\n      return { arrowTypeStart: 'arrow_cross', arrowTypeEnd: 'none' };\n    case ARROW_TYPE.LINE_SOLID:\n      return { arrowTypeStart: 'none', arrowTypeEnd: 'none' };\n  }\n};\n\nconst relationshipVisuals = (\n  relationship: Relationship\n): Pick<\n  UsecaseLayoutEdge,\n  'arrowTypeStart' | 'arrowTypeEnd' | 'pattern' | 'label' | 'labelType'\n> => {\n  switch (relationship.type) {\n    case 'include':\n    case 'extend':\n      return {\n        arrowTypeStart: 'none',\n        arrowTypeEnd: 'arrow_point',\n        pattern: 'dotted',\n        label: relationship.type,\n        labelType: 'text',\n      };\n    case 'generalization':\n      return {\n        arrowTypeStart: 'none',\n        arrowTypeEnd: 'extension',\n        pattern: 'solid',\n      };\n    case 'association':\n      return {\n        ...associationMarkers(relationship.arrowType),\n        pattern: 'solid',\n        ...(relationship.label ? { label: relationship.label } : {}),\n        ...(relationship.labelType ? { labelType: relationship.labelType } : {}),\n      };\n  }\n};\n\nconst animationClasses = (relationship: Relationship): string[] =>\n  relationship.animate || relationship.animation\n    ? [`edge-animation-${relationship.animation ?? 'fast'}`]\n    : [];\n\nconst classNames = (...names: (string | false | undefined)[]): string =>\n  names.filter((name): name is string => Boolean(name)).join(' ');\n\n// Convert the committed use-case model to the unified renderer contract without semantic re-parsing.\nconst getData = (): UsecaseLayoutData => {\n  const globalConfig = getGlobalConfig();\n  const config: Required<UsecaseDiagramConfig> = {\n    ...state.config,\n    ...globalConfig.usecase,\n  };\n  const sanitize = (value: string): string => sanitizeText(value, globalConfig);\n  const endpointLabel = (id: string): string =>\n    sanitize(\n      state.actors.get(id)?.label ??\n        state.useCases.get(id)?.label ??\n        state.jsonNodes.get(id)?.id ??\n        state.notes.get(id)?.label ??\n        id\n    );\n  const nodes: UsecaseLayoutData['nodes'] = [];\n  const edges: UsecaseLayoutEdge[] = [];\n\n  /**\n   * Two counters, because the two kinds of slot mean different things.\n   *\n   * `boundaryColorIndex` numbers the system boundaries from zero in declaration order, the\n   * way `flowDb` numbers flowchart subgraphs. Here the counter carries real information --\n   * which group a thing belongs to -- so boundary N takes palette slot N, and that holds\n   * under the default colour scheme as well as under `rotate`. It stays stable as long as\n   * the boundary order does, which is the property that makes a counter defensible for a\n   * container and not for a leaf.\n   *\n   * `colorIndex` numbers actors and use cases together, and is consumed only by the opt-in\n   * `usecase.colorScheme: 'rotate'`. Sharing one cycle between the two kinds is what stops\n   * an actor and a use case landing on the same colour and reading as linked. Notes and\n   * JSON tables are deliberately not counted: a note carries the theme's fixed note colour\n   * and a JSON table is reference data, so neither is a participant and neither may shift\n   * the cycle.\n   *\n   * Both are assigned unconditionally -- `stampColorSlot` is a no-op for every theme\n   * without a palette, and `getData` has no business knowing which theme or scheme is\n   * active.\n   */\n  let colorIndex = 0;\n  let boundaryColorIndex = 0;\n\n  for (const actor of state.actors.values()) {\n    nodes.push({\n      id: actor.id,\n      label: sanitize(actor.label),\n      labelType: actor.labelType,\n      shape: actorShape(actor),\n      isGroup: false,\n      padding: 10,\n      look: globalConfig.look,\n      colorIndex: colorIndex++,\n      cssClasses: classNames(\n        'default',\n        'usecase-actor',\n        `usecase-actor-${actor.type}`,\n        actor.business && 'usecase-business',\n        ...actor.classes\n      ),\n      cssStyles: [...actor.styles],\n      cssCompiledStyles: getCompiledStyles(actor.classes),\n      actorType: actor.type,\n      business: actor.business,\n      ...(actor.icon ? { icon: actor.icon } : {}),\n      ...(actor.stereotype ? { stereotype: sanitize(actor.stereotype) } : {}),\n      ...(actor.parentId ? { parentId: actor.parentId } : {}),\n    });\n  }\n\n  for (const useCase of state.useCases.values()) {\n    nodes.push({\n      id: useCase.id,\n      label: sanitize(useCase.label),\n      labelType: useCase.labelType,\n      shape: useCaseShape(useCase),\n      isGroup: false,\n      padding: useCase.shape === 'ellipse' ? 20 : 10,\n      look: globalConfig.look,\n      colorIndex: colorIndex++,\n      cssClasses: classNames(\n        'default',\n        'usecase-element',\n        `usecase-${useCase.shape}`,\n        useCase.business && 'usecase-business',\n        ...useCase.classes\n      ),\n      cssStyles: [...useCase.styles],\n      cssCompiledStyles: getCompiledStyles(useCase.classes),\n      business: useCase.business,\n      ...(useCase.stereotype ? { stereotype: sanitize(useCase.stereotype) } : {}),\n      ...(useCase.parentId ? { parentId: useCase.parentId } : {}),\n    });\n  }\n\n  for (const note of state.notes.values()) {\n    nodes.push({\n      id: note.id,\n      label: sanitize(note.label),\n      labelType: note.labelType,\n      shape: 'note',\n      isGroup: false,\n      padding: 10,\n      look: globalConfig.look,\n      cssClasses: 'default usecase-note',\n      cssStyles: [],\n      cssCompiledStyles: getCompiledStyles([]),\n      noteTarget: note.target,\n      noteTargetLabel: sanitize(\n        state.actors.get(note.target)?.label ??\n          state.useCases.get(note.target)?.label ??\n          state.jsonNodes.get(note.target)?.id ??\n          note.target\n      ),\n    });\n  }\n\n  for (const json of state.jsonNodes.values()) {\n    nodes.push({\n      id: json.id,\n      label: sanitize(json.id),\n      labelType: 'text',\n      shape: 'usecaseJsonTable',\n      isGroup: false,\n      padding: 10,\n      look: globalConfig.look,\n      cssClasses: classNames('default', 'usecase-json-table', ...json.classes),\n      cssStyles: [...json.styles],\n      cssCompiledStyles: getCompiledStyles(json.classes),\n      jsonRows: flattenJsonRows(json.value, json.propertyOrder, sanitize),\n    });\n  }\n\n  for (const boundary of state.systemBoundaries.values()) {\n    nodes.push({\n      id: boundary.id,\n      label: sanitize(boundary.label),\n      labelType: boundary.labelType,\n      shape: 'usecaseSystemBoundary',\n      isGroup: true,\n      padding: 20,\n      look: globalConfig.look,\n      colorIndex: boundaryColorIndex++,\n      cssClasses: classNames(\n        'default',\n        'system-boundary',\n        `system-boundary-${boundary.type}`,\n        ...boundary.classes\n      ),\n      cssStyles: [...boundary.styles],\n      cssCompiledStyles: getCompiledStyles(boundary.classes),\n      boundaryType: boundary.type,\n    });\n  }\n\n  for (const relationship of state.relationships) {\n    const { label: rawLabel, ...visual } = relationshipVisuals(relationship);\n    edges.push({\n      id: relationship.id,\n      start: relationship.source,\n      end: relationship.target,\n      source: relationship.source,\n      target: relationship.target,\n      sourceLabel: endpointLabel(relationship.source),\n      targetLabel: endpointLabel(relationship.target),\n      type: 'edge',\n      relationshipType: relationship.type,\n      internal: false,\n      ...visual,\n      ...(rawLabel !== undefined ? { label: sanitize(rawLabel) } : {}),\n      labelpos: 'c',\n      classes: classNames(\n        'default',\n        'relationship',\n        `relationship-${relationship.type}`,\n        ...relationship.classes,\n        ...animationClasses(relationship)\n      ),\n      style: [...relationship.styles],\n      cssCompiledStyles: getCompiledStyles(relationship.classes),\n      animate: relationship.animate,\n      ...(relationship.animation ? { animation: relationship.animation } : {}),\n      look: globalConfig.look,\n      thickness: 'normal',\n      minlen: relationship.minlen,\n      isUserDefinedId: relationship.explicitId,\n    });\n  }\n\n  for (const note of state.notes.values()) {\n    edges.push({\n      id: `${note.id}-edge`,\n      start: note.id,\n      end: note.target,\n      source: note.id,\n      target: note.target,\n      type: 'edge',\n      relationshipType: 'note',\n      sourceLabel: endpointLabel(note.id),\n      targetLabel: endpointLabel(note.target),\n      internal: true,\n      pattern: 'dotted',\n      arrowTypeStart: 'none',\n      arrowTypeEnd: 'none',\n      labelpos: 'c',\n      classes: 'default relationship relationship-note',\n      style: [],\n      cssCompiledStyles: getCompiledStyles([]),\n      animate: false,\n      look: globalConfig.look,\n      thickness: 'normal',\n      minlen: 1,\n      isUserDefinedId: false,\n    });\n  }\n\n  for (const node of nodes) {\n    node.wrappingWidth ??= config.wrappingWidth;\n    // Actors are glyphs with a caption, not boxes -- a minimum width would only\n    // pad their layout footprint.\n    if (!node.isGroup && !node.shape.startsWith('usecaseActor')) {\n      node.minWidth ??= config.minNodeWidth;\n    }\n    // Several association edges can end on one side of a use case, each with its\n    // own marker; spread their attachment points so the markers stay apart.\n    if (node.shape === 'usecaseEllipse' || node.shape === 'usecaseBusiness') {\n      node.spreadPorts = true;\n    }\n  }\n\n  return {\n    nodes,\n    edges,\n    config: globalConfig,\n    type: 'usecase',\n    layoutAlgorithm: 'dagre',\n    direction: getDirection(),\n    nodeSpacing: config.nodeSpacing,\n    rankSpacing: config.rankSpacing,\n    actorFontSize: config.actorFontSize,\n    actorFontFamily: config.actorFontFamily,\n    actorFontWeight: config.actorFontWeight,\n    usecaseFontSize: config.usecaseFontSize,\n    usecaseFontFamily: config.usecaseFontFamily,\n    usecaseFontWeight: config.usecaseFontWeight,\n    diagramPadding: config.diagramPadding,\n    useMaxWidth: config.useMaxWidth,\n    markers: ['point', 'circle', 'cross', 'extension'],\n  };\n};\n\nexport const db: UsecaseDB = {\n  getConfig,\n  createModel,\n  commit,\n  getAST,\n\n  clear,\n  setDiagramTitle,\n  getDiagramTitle,\n  setAccTitle,\n  getAccTitle,\n  setAccDescription,\n  getAccDescription,\n\n  getActors,\n  getActor,\n  getUseCases,\n  getUseCase,\n  getSystemBoundaries,\n  getSystemBoundary,\n  getRelationships,\n  getNotes,\n  getNote,\n  getJsonNodes,\n  getJsonNode,\n  getClassDefs,\n  getClassDef,\n  getDirection,\n  getData,\n};\n", "import { Lexer } from 'chevrotain';\nimport { usecaseLexerModes } from './usecase.tokens.js';\n\n/** Singleton mode-aware lexer; construction and validation happen once at module load. */\nexport const usecaseLexer = new Lexer(usecaseLexerModes);\n", "// cspell:ignore lparen markerless rparen\n\nimport { createToken, Lexer } from 'chevrotain';\nimport type { CustomPatternMatcherFunc, TokenType } from 'chevrotain';\n\nfunction customMatch(text: string, offset: number, image: string): RegExpExecArray {\n  const match = [image] as unknown as RegExpExecArray;\n  match.index = offset;\n  match.input = text;\n  return match;\n}\n\nconst matchMarkdownString: CustomPatternMatcherFunc = (text, offset) => {\n  if (text[offset] !== '\"' || text[offset + 1] !== '`') {\n    return null;\n  }\n  for (let index = offset + 2; index < text.length - 1; index++) {\n    if (text[index] === '`' && text[index + 1] === '\"') {\n      return customMatch(text, offset, text.slice(offset, index + 2));\n    }\n  }\n  return null;\n};\n\nconst matchComment: CustomPatternMatcherFunc = (text, offset) => {\n  if (text[offset] !== '%' || text[offset + 1] !== '%') {\n    return null;\n  }\n  for (let index = offset - 1; index >= 0; index--) {\n    const character = text[index];\n    if (character === '\\n' || character === '\\r') {\n      break;\n    }\n    if (character !== ' ' && character !== '\\t') {\n      return null;\n    }\n  }\n  let end = offset + 2;\n  while (end < text.length && text[end] !== '\\n' && text[end] !== '\\r') {\n    end++;\n  }\n  return customMatch(text, offset, text.slice(offset, end));\n};\n\nconst isIndentedLineStart = (text: string, offset: number): boolean => {\n  for (let index = offset - 1; index >= 0; index--) {\n    const character = text[index];\n    if (character === '\\n' || character === '\\r') {\n      return true;\n    }\n    if (character !== ' ' && character !== '\\t') {\n      return false;\n    }\n  }\n  return true;\n};\n\nconst matchAccessibilityLine = (\n  text: string,\n  offset: number,\n  pattern: RegExp\n): RegExpExecArray | null => {\n  if (!isIndentedLineStart(text, offset)) {\n    return null;\n  }\n  const match = pattern.exec(text.slice(offset));\n  return match ? customMatch(text, offset, match[0]) : null;\n};\n\nconst matchAccDescrBlock: CustomPatternMatcherFunc = (text, offset) => {\n  if (!isIndentedLineStart(text, offset)) {\n    return null;\n  }\n  const opening = /^accDescr[\\t ]*{/.exec(text.slice(offset));\n  if (!opening) {\n    return null;\n  }\n  const end = text.indexOf('}', offset + opening[0].length);\n  return end === -1 ? null : customMatch(text, offset, text.slice(offset, end + 1));\n};\n\nconst matchJsonObject: CustomPatternMatcherFunc = (text, offset) => {\n  if (text[offset] !== '{') {\n    return null;\n  }\n\n  let depth = 0;\n  let quoted = false;\n  let escaped = false;\n  for (let index = offset; index < text.length; index++) {\n    const character = text[index];\n    if (quoted) {\n      if (escaped) {\n        escaped = false;\n      } else if (character === '\\\\') {\n        escaped = true;\n      } else if (character === '\"') {\n        quoted = false;\n      }\n      continue;\n    }\n    if (character === '\"') {\n      quoted = true;\n    } else if (character === '{') {\n      depth++;\n    } else if (character === '}' && --depth === 0) {\n      return customMatch(text, offset, text.slice(offset, index + 1));\n    }\n  }\n\n  // No match makes Chevrotain locate the lexer error at this unmatched opening brace.\n  return null;\n};\n\nconst matchStereotypeText: CustomPatternMatcherFunc = (text, offset) => {\n  const end = text.indexOf('>>', offset);\n  if (end === -1 || /[\\n\\r]/.test(text.slice(offset, end))) {\n    return null;\n  }\n  const image = text.slice(offset, end);\n  return image.trim() ? customMatch(text, offset, image) : null;\n};\n\n// Everything an unquoted label may contain. Membership is opt-in per token, so a token\n// only becomes label text once it is provably not a delimiter, operator, or suffix marker.\nexport const LabelText = createToken({ name: 'LABEL_TEXT', pattern: Lexer.NA });\nexport const Word = createToken({ name: 'WORD', pattern: Lexer.NA, categories: LabelText });\n// Declared before IDENTIFIER so it can serve as its longer_alt.\nexport const NumberLiteral = createToken({\n  name: 'NUMBER',\n  pattern: /(?:\\d+\\.\\d+|\\d+|\\.\\d+)(?:[A-Za-z]+)?/,\n  categories: LabelText,\n});\n// Ids may start with a digit (`1`, `1mg`), so this is `\\w+` rather than an\n// identifier-shaped pattern. NUMBER is the longer_alt so decimals such as `1.5`\n// and `1.5px` still lex as a single number instead of `1` + `.` + `5`.\nexport const Identifier = createToken({\n  name: 'IDENTIFIER',\n  pattern: /\\w+/,\n  longer_alt: NumberLiteral,\n  categories: Word,\n});\nexport const WhiteSpace = createToken({\n  name: 'HWS',\n  pattern: /[\\t ]+/,\n  group: Lexer.SKIPPED,\n});\nexport const MarkdownString = createToken({\n  name: 'MARKDOWN_STRING',\n  pattern: matchMarkdownString,\n  start_chars_hint: ['\"'],\n  line_breaks: true,\n});\nexport const UnclosedMarkdownString = createToken({\n  name: 'UNCLOSED_MARKDOWN_STRING',\n  pattern: /\"`[^]*/,\n  line_breaks: true,\n});\nexport const Comment = createToken({\n  name: 'COMMENT',\n  pattern: matchComment,\n  start_chars_hint: ['%'],\n  line_breaks: false,\n});\nexport const NewLine = createToken({\n  name: 'NEWLINE',\n  pattern: /\\r\\n|\\n|\\r/,\n  line_breaks: true,\n});\n\nexport const AccDescrBlock = createToken({\n  name: 'ACC_DESCR_BLOCK',\n  pattern: matchAccDescrBlock,\n  start_chars_hint: ['a'],\n  line_breaks: true,\n});\nconst accTitleLinePattern = /^accTitle[\\t ]*:[^\\n\\r]*/;\nconst accDescrLinePattern = /^accDescr[\\t ]*:[^\\n\\r]*/;\n\nexport const AccTitleLine = createToken({\n  name: 'ACC_TITLE_LINE',\n  pattern: (text, offset) => matchAccessibilityLine(text, offset, accTitleLinePattern),\n  start_chars_hint: ['a'],\n  line_breaks: false,\n});\nexport const AccDescrLine = createToken({\n  name: 'ACC_DESCR_LINE',\n  pattern: (text, offset) => matchAccessibilityLine(text, offset, accDescrLinePattern),\n  start_chars_hint: ['a'],\n  line_breaks: false,\n});\n\nexport const JsonDeclarationStart = createToken({\n  name: 'JSON_DECLARATION_START',\n  pattern: /json[\\t ]+\\w+[\\t ]*@[\\t ]*(?={)/,\n  push_mode: 'jsonBody',\n});\nexport const JsonObjectLiteral = createToken({\n  name: 'JSON_OBJECT_LITERAL',\n  pattern: matchJsonObject,\n  start_chars_hint: ['{'],\n  line_breaks: true,\n  pop_mode: true,\n});\nexport const UnclosedJsonObjectLiteral = createToken({\n  name: 'UNCLOSED_JSON_OBJECT_LITERAL',\n  pattern: /{[^]*/,\n  line_breaks: true,\n  pop_mode: true,\n});\n\nconst keyword = (name: string, pattern: RegExp) =>\n  createToken({ name, pattern, longer_alt: Identifier, categories: Word });\n\nexport const Usecase = keyword('USECASE', /usecase-beta/);\nexport const Actor = keyword('ACTOR', /actor/);\nexport const SystemBoundary = keyword('SYSTEM_BOUNDARY', /systemBoundary/);\nexport const End = keyword('END', /end/);\nexport const Direction = keyword('DIRECTION', /direction/);\nexport const Td = keyword('TD', /TD/);\nexport const Tb = keyword('TB', /TB/);\nexport const Bt = keyword('BT', /BT/);\nexport const Lr = keyword('LR', /LR/);\nexport const Rl = keyword('RL', /RL/);\nexport const Note = keyword('NOTE', /note/);\nexport const For = keyword('FOR', /for/);\nconst Json = keyword('JSON', /json/);\nexport const ClassDef = keyword('CLASS_DEF', /classDef/);\nexport const Class = keyword('CLASS', /class/);\nexport const Style = keyword('STYLE', /style/);\nexport const Include = keyword('INCLUDE', /include/i);\nexport const Extend = keyword('EXTEND', /extend/i);\nexport const True = keyword('TRUE', /true/);\nexport const False = keyword('FALSE', /false/);\n\nexport const Generalization = createToken({ name: 'GENERALIZATION', pattern: /--\\|>/ });\nexport const DependencyArrow = createToken({ name: 'DEPENDENCY_ARROW', pattern: /\\.\\.>/ });\nexport const StereotypeStart = createToken({\n  name: 'STEREOTYPE_START',\n  pattern: /<</,\n  push_mode: 'stereotype',\n});\nexport const StereotypeEnd = createToken({\n  name: 'STEREOTYPE_END',\n  pattern: />>/,\n  pop_mode: true,\n});\nexport const StereotypeText = createToken({\n  name: 'STEREOTYPE_TEXT',\n  pattern: matchStereotypeText,\n  line_breaks: false,\n});\nexport const UnclosedStereotypeText = createToken({\n  name: 'UNCLOSED_STEREOTYPE_TEXT',\n  pattern: /[^\\n\\r]+/,\n  line_breaks: false,\n  pop_mode: true,\n});\nexport const ClassSeparator = createToken({ name: 'CLASS_SEPARATOR', pattern: /:::/ });\nexport const ForwardSolid = createToken({ name: 'FORWARD_SOLID', pattern: /--+>/ });\nexport const BackwardSolid = createToken({ name: 'BACKWARD_SOLID', pattern: /<--+/ });\nexport const ForwardCircle = createToken({ name: 'FORWARD_CIRCLE', pattern: /--o/ });\nexport const BackwardCircle = createToken({ name: 'BACKWARD_CIRCLE', pattern: /o--/ });\nexport const ForwardCross = createToken({ name: 'FORWARD_CROSS', pattern: /--x/ });\nexport const BackwardCross = createToken({ name: 'BACKWARD_CROSS', pattern: /x--/ });\nexport const MarkerlessSolid = createToken({ name: 'MARKERLESS_SOLID', pattern: /--+/ });\nexport const MetadataStart = createToken({ name: 'METADATA_START', pattern: /@{/ });\nexport const At = createToken({ name: 'AT', pattern: /@/, categories: LabelText });\nexport const LeftBrace = createToken({ name: 'LBRACE', pattern: /{/ });\nexport const RightBrace = createToken({ name: 'RBRACE', pattern: /}/ });\nexport const LeftBracket = createToken({ name: 'LBRACKET', pattern: /\\[/ });\nexport const RightBracket = createToken({ name: 'RBRACKET', pattern: /]/ });\nexport const LeftParen = createToken({ name: 'LPAREN', pattern: /\\(/ });\nexport const RightParen = createToken({ name: 'RPAREN', pattern: /\\)/ });\nexport const Comma = createToken({ name: 'COMMA', pattern: /,/, categories: LabelText });\nexport const Colon = createToken({ name: 'COLON', pattern: /:/, categories: LabelText });\n\nexport const HashColor = createToken({\n  name: 'HASH_COLOR',\n  pattern: /#[\\dA-Fa-f]+/,\n  categories: LabelText,\n});\nexport const PlainString = createToken({\n  name: 'PLAIN_STRING',\n  pattern: /\"[^\\n\\r\"]*\"|'[^\\n\\r']*'/,\n});\nexport const CssIdentifier = createToken({\n  name: 'CSS_IDENTIFIER',\n  pattern: /--[A-Z_a-z][\\w-]*|[A-Z_a-z]\\w*(?:-\\w+)+/,\n  categories: LabelText,\n});\nexport const CssEscapedComma = createToken({\n  name: 'CSS_ESCAPED_COMMA',\n  pattern: /\\\\,/,\n  categories: LabelText,\n});\nexport const Dash = createToken({ name: 'DASH', pattern: /-/, categories: LabelText });\nexport const Dot = createToken({ name: 'DOT', pattern: /\\./, categories: LabelText });\nexport const Percent = createToken({ name: 'PERCENT', pattern: /%/, categories: LabelText });\nexport const CssPunctuation = createToken({\n  name: 'CSS_PUNCTUATION',\n  pattern: /[!#$&*+/=?^_|~]/,\n  categories: LabelText,\n});\n// Last-resort label text. These characters carry meaning only inside a longer operator\n// (`\\,`, `<<`, `<--`, `-->`, `..>`) or a Markdown string, all of which are matched earlier,\n// so on their own they are literal. `\"` and `'` are deliberately absent: they open the two\n// quoted-string forms, and letting them stand alone would turn an unterminated string into\n// a silently accepted label.\nexport const LabelPunctuation = createToken({\n  name: 'LABEL_PUNCTUATION',\n  pattern: /[;<>\\\\`]/,\n  categories: LabelText,\n});\n// Any run of characters outside printable ASCII, so unquoted labels are not English-only.\n// Disjoint from every other pattern in the mode, which all match printable ASCII.\nexport const LabelSymbol = createToken({\n  name: 'LABEL_SYMBOL',\n  pattern: /[^\\t\\n\\r !-~]+/,\n  categories: LabelText,\n});\n\nconst defaultModeTokens = [\n  LabelText,\n  Word,\n  WhiteSpace,\n  MarkdownString,\n  UnclosedMarkdownString,\n  Comment,\n  NewLine,\n  AccDescrBlock,\n  AccTitleLine,\n  AccDescrLine,\n  JsonDeclarationStart,\n  Usecase,\n  Actor,\n  SystemBoundary,\n  End,\n  Direction,\n  Td,\n  Tb,\n  Bt,\n  Lr,\n  Rl,\n  Note,\n  For,\n  Json,\n  ClassDef,\n  Class,\n  Style,\n  Include,\n  Extend,\n  True,\n  False,\n  Generalization,\n  DependencyArrow,\n  StereotypeStart,\n  ClassSeparator,\n  ForwardSolid,\n  BackwardSolid,\n  ForwardCircle,\n  BackwardCircle,\n  ForwardCross,\n  BackwardCross,\n  MarkerlessSolid,\n  MetadataStart,\n  At,\n  LeftBrace,\n  RightBrace,\n  LeftBracket,\n  RightBracket,\n  LeftParen,\n  RightParen,\n  Comma,\n  Colon,\n  HashColor,\n  PlainString,\n  CssIdentifier,\n  // IDENTIFIER precedes NUMBER so `1mg` lexes as one id; its longer_alt still hands\n  // decimals like `1.5px` to NUMBER.\n  Identifier,\n  NumberLiteral,\n  CssEscapedComma,\n  Dash,\n  Dot,\n  Percent,\n  CssPunctuation,\n  // Both fallbacks stay last so every operator, delimiter, and string form wins first.\n  LabelPunctuation,\n  LabelSymbol,\n] as const;\n\nexport const usecaseLexerModes = {\n  defaultMode: 'defaultMode',\n  modes: {\n    defaultMode: [...defaultModeTokens],\n    jsonBody: [JsonObjectLiteral, UnclosedJsonObjectLiteral],\n    stereotype: [StereotypeEnd, StereotypeText, UnclosedStereotypeText],\n  },\n};\n\n/** Flat vocabulary used by the parser; the lexer itself uses the mode table above. */\nexport const usecaseTokens: TokenType[] = [\n  ...defaultModeTokens,\n  JsonObjectLiteral,\n  UnclosedJsonObjectLiteral,\n  StereotypeEnd,\n  StereotypeText,\n  UnclosedStereotypeText,\n];\n", "// cspell:ignore allowmixing markerless newpage skinparam\n\nimport { CstParser, EOF, tokenMatcher } from 'chevrotain';\nimport type { CstNode, IToken, TokenType } from 'chevrotain';\nimport {\n  AccDescrBlock,\n  AccDescrLine,\n  AccTitleLine,\n  Actor,\n  At,\n  BackwardCircle,\n  BackwardCross,\n  BackwardSolid,\n  Bt,\n  Class,\n  ClassDef,\n  ClassSeparator,\n  Colon,\n  Comma,\n  Comment,\n  CssEscapedComma,\n  CssIdentifier,\n  CssPunctuation,\n  Dash,\n  DependencyArrow,\n  Direction,\n  Dot,\n  End,\n  Extend,\n  False,\n  For,\n  ForwardCircle,\n  ForwardCross,\n  ForwardSolid,\n  Generalization,\n  HashColor,\n  Identifier,\n  Include,\n  JsonDeclarationStart,\n  JsonObjectLiteral,\n  LabelText,\n  LeftBrace,\n  LeftBracket,\n  LeftParen,\n  Lr,\n  MarkdownString,\n  MarkerlessSolid,\n  MetadataStart,\n  NewLine,\n  Note,\n  NumberLiteral,\n  Percent,\n  PlainString,\n  RightBrace,\n  RightBracket,\n  RightParen,\n  Rl,\n  StereotypeEnd,\n  StereotypeStart,\n  StereotypeText,\n  Style,\n  SystemBoundary,\n  Tb,\n  Td,\n  True,\n  Usecase,\n  Word,\n  usecaseTokens,\n} from './usecase.tokens.js';\n\nconst isLabelToken = (token: IToken): boolean =>\n  tokenMatcher(token, LabelText) ||\n  token.tokenType === PlainString ||\n  token.tokenType === MarkdownString;\n\nconst forbiddenPlantUmlStatements: Record<string, true> = {\n  allowmixing: true,\n  newpage: true,\n  package: true,\n  rectangle: true,\n  skinparam: true,\n};\n\nclass UsecaseParser extends CstParser {\n  declare start: () => CstNode;\n  declare line: () => CstNode;\n  declare statement: () => CstNode;\n  declare lineEnd: () => CstNode;\n  declare blankLine: () => CstNode;\n  declare commentLine: () => CstNode;\n  declare accTitleStatement: () => CstNode;\n  declare accDescrStatement: () => CstNode;\n  declare actorStatement: () => CstNode;\n  declare actorItem: () => CstNode;\n  declare actorName: () => CstNode;\n  declare actorDeclarationOnly: () => CstNode;\n  declare entityStatement: () => CstNode;\n  declare entityName: () => CstNode;\n  declare nodeLabel: () => CstNode;\n  declare useCaseMetadata: () => CstNode;\n  declare relationTail: () => CstNode;\n  declare arrow: () => CstNode;\n  declare edgeLabel: () => CstNode;\n  declare semanticRelation: () => CstNode;\n  declare metadata: () => CstNode;\n  declare metadataProperty: () => CstNode;\n  declare metadataSeparator: () => CstNode;\n  declare systemBoundaryStatement: () => CstNode;\n  declare systemBoundaryName: () => CstNode;\n  declare systemBoundaryContent: () => CstNode;\n  declare boundaryElement: () => CstNode;\n  declare metadataAssignmentStatement: () => CstNode;\n  declare metadataAssignmentTarget: () => CstNode;\n  declare noteStatement: () => CstNode;\n  declare stereotype: () => CstNode;\n  declare classSuffix: () => CstNode;\n  declare jsonStatement: () => CstNode;\n  declare directionStatement: () => CstNode;\n  declare classDefStatement: () => CstNode;\n  declare classStatement: () => CstNode;\n  declare styleStatement: () => CstNode;\n  declare styles: () => CstNode;\n  declare styleValue: () => CstNode;\n\n  declare forwardSolidOperator: () => CstNode;\n  declare backwardSolidOperator: () => CstNode;\n  declare markerlessSolidOperator: () => CstNode;\n  declare forwardCircleOperator: () => CstNode;\n  declare backwardCircleOperator: () => CstNode;\n  declare forwardCrossOperator: () => CstNode;\n  declare backwardCrossOperator: () => CstNode;\n  declare styleComponent: () => CstNode;\n\n  constructor() {\n    super(usecaseTokens, { nodeLocationTracking: 'full' });\n\n    this.RULE('start', () => {\n      this.CONSUME(Usecase);\n      this.SUBRULE(this.lineEnd);\n      this.MANY(() => this.SUBRULE(this.line));\n    });\n\n    this.RULE('line', () => {\n      this.OR([\n        { ALT: () => this.SUBRULE(this.blankLine) },\n        { ALT: () => this.SUBRULE(this.commentLine) },\n        {\n          GATE: () => this.isStatementStart(),\n          ALT: () => this.SUBRULE(this.statement),\n        },\n      ]);\n    });\n\n    this.RULE('statement', () => {\n      this.OR([\n        { ALT: () => this.SUBRULE(this.accTitleStatement) },\n        { ALT: () => this.SUBRULE(this.accDescrStatement) },\n        { ALT: () => this.SUBRULE(this.directionStatement) },\n        { ALT: () => this.SUBRULE(this.actorStatement) },\n        { ALT: () => this.SUBRULE(this.systemBoundaryStatement) },\n        { ALT: () => this.SUBRULE(this.noteStatement) },\n        { ALT: () => this.SUBRULE(this.jsonStatement) },\n        { ALT: () => this.SUBRULE(this.classDefStatement) },\n        { ALT: () => this.SUBRULE(this.classStatement) },\n        { ALT: () => this.SUBRULE(this.styleStatement) },\n        {\n          GATE: () => this.isMetadataAssignment(),\n          ALT: () => this.SUBRULE(this.metadataAssignmentStatement),\n        },\n        {\n          GATE: () => !this.isForbiddenPlantUmlStatement(),\n          ALT: () => this.SUBRULE(this.entityStatement),\n        },\n      ]);\n    });\n\n    this.RULE('lineEnd', () => {\n      this.OR([{ ALT: () => this.CONSUME(NewLine) }, { ALT: () => this.CONSUME(EOF) }]);\n    });\n\n    this.RULE('blankLine', () => {\n      this.CONSUME(NewLine);\n    });\n\n    this.RULE('commentLine', () => {\n      this.CONSUME(Comment);\n      this.SUBRULE(this.lineEnd);\n    });\n\n    this.RULE('accTitleStatement', () => {\n      this.CONSUME(AccTitleLine);\n      this.SUBRULE(this.lineEnd);\n    });\n\n    this.RULE('accDescrStatement', () => {\n      this.OR([\n        { ALT: () => this.CONSUME(AccDescrLine) },\n        { ALT: () => this.CONSUME(AccDescrBlock) },\n      ]);\n      this.SUBRULE(this.lineEnd);\n    });\n\n    this.RULE('actorStatement', () => {\n      this.CONSUME(Actor);\n      this.SUBRULE(this.actorItem);\n      this.OPTION(() => {\n        this.OR([\n          {\n            ALT: () =>\n              this.AT_LEAST_ONE(() => {\n                this.CONSUME(Comma);\n                this.SUBRULE2(this.actorItem);\n              }),\n          },\n          { ALT: () => this.SUBRULE(this.relationTail) },\n        ]);\n      });\n      this.SUBRULE(this.lineEnd);\n    });\n\n    this.RULE('actorItem', () => {\n      this.SUBRULE(this.actorName);\n      this.OPTION(() => this.SUBRULE(this.metadata));\n      this.OPTION2(() => this.SUBRULE(this.stereotype));\n      this.OPTION3(() => this.SUBRULE(this.classSuffix));\n    });\n\n    this.RULE('actorName', () => {\n      this.OR([\n        {\n          ALT: () => {\n            this.CONSUME(Identifier);\n            this.OPTION(() => {\n              this.CONSUME(LeftParen);\n              this.SUBRULE(this.nodeLabel);\n              this.CONSUME(RightParen);\n            });\n          },\n        },\n        { ALT: () => this.CONSUME(PlainString) },\n        { ALT: () => this.CONSUME(MarkdownString) },\n      ]);\n    });\n\n    this.RULE('actorDeclarationOnly', () => {\n      this.CONSUME(Actor);\n      this.SUBRULE(this.actorItem);\n      this.MANY(() => {\n        this.CONSUME(Comma);\n        this.SUBRULE2(this.actorItem);\n      });\n      this.SUBRULE(this.lineEnd);\n    });\n\n    this.RULE('entityStatement', () => {\n      this.SUBRULE(this.entityName);\n      this.OPTION(() => this.SUBRULE(this.relationTail));\n      this.SUBRULE(this.lineEnd);\n    });\n\n    this.RULE('entityName', () => {\n      this.OR([\n        {\n          ALT: () => {\n            this.CONSUME(Identifier);\n            this.OPTION(() => {\n              this.OR2([\n                {\n                  ALT: () => {\n                    this.CONSUME(LeftParen);\n                    this.SUBRULE(this.nodeLabel);\n                    this.CONSUME(RightParen);\n                  },\n                },\n                {\n                  ALT: () => {\n                    this.CONSUME(LeftBracket);\n                    this.SUBRULE2(this.nodeLabel);\n                    this.CONSUME(RightBracket);\n                  },\n                },\n              ]);\n            });\n          },\n        },\n        { ALT: () => this.CONSUME(PlainString) },\n        { ALT: () => this.CONSUME(MarkdownString) },\n      ]);\n      this.OPTION2(() => this.SUBRULE(this.useCaseMetadata));\n      this.OPTION3(() => this.SUBRULE(this.stereotype));\n      this.OPTION4(() => this.SUBRULE(this.classSuffix));\n    });\n\n    this.RULE('nodeLabel', () => {\n      this.OR([\n        { ALT: () => this.CONSUME(PlainString) },\n        { ALT: () => this.CONSUME(MarkdownString) },\n        // Unquoted labels run until a delimiter, operator, or suffix marker, none of\n        // which belong to `LabelText`. The visitor rebuilds the text from the source\n        // slice, so the internal token split never reaches the model.\n        { ALT: () => this.AT_LEAST_ONE(() => this.CONSUME(LabelText)) },\n      ]);\n    });\n\n    this.RULE('useCaseMetadata', () => {\n      this.SUBRULE(this.metadata);\n    });\n\n    this.RULE('relationTail', () => {\n      this.OPTION({\n        GATE: () => this.LA(1).tokenType === Identifier && this.LA(2).tokenType === At,\n        DEF: () => {\n          this.CONSUME(Identifier);\n          this.CONSUME(At);\n        },\n      });\n      this.SUBRULE(this.arrow);\n      this.SUBRULE(this.entityName);\n    });\n\n    this.RULE('arrow', () => {\n      this.OR([\n        { ALT: () => this.SUBRULE(this.semanticRelation) },\n        { ALT: () => this.SUBRULE(this.forwardSolidOperator) },\n        { ALT: () => this.SUBRULE(this.backwardSolidOperator) },\n        { ALT: () => this.SUBRULE(this.markerlessSolidOperator) },\n        { ALT: () => this.SUBRULE(this.forwardCircleOperator) },\n        { ALT: () => this.SUBRULE(this.backwardCircleOperator) },\n        { ALT: () => this.SUBRULE(this.forwardCrossOperator) },\n        { ALT: () => this.SUBRULE(this.backwardCrossOperator) },\n      ]);\n    });\n\n    this.RULE('forwardSolidOperator', () => {\n      this.CONSUME(ForwardSolid);\n    });\n\n    this.RULE('backwardSolidOperator', () => {\n      this.CONSUME(BackwardSolid);\n      this.OPTION({\n        GATE: () => this.LA(0).image === '<--' && this.hasLabeledRight([MarkerlessSolid]),\n        DEF: () => {\n          this.SUBRULE(this.edgeLabel);\n          this.CONSUME(MarkerlessSolid);\n        },\n      });\n    });\n\n    this.RULE('markerlessSolidOperator', () => {\n      this.CONSUME(MarkerlessSolid);\n      this.OPTION({\n        GATE: () =>\n          this.LA(0).image === '--' &&\n          this.hasLabeledRight([ForwardSolid, MarkerlessSolid, ForwardCircle, ForwardCross]),\n        DEF: () => {\n          this.SUBRULE(this.edgeLabel);\n          this.OR([\n            { ALT: () => this.CONSUME(ForwardSolid) },\n            { ALT: () => this.CONSUME2(MarkerlessSolid) },\n            { ALT: () => this.CONSUME(ForwardCircle) },\n            { ALT: () => this.CONSUME(ForwardCross) },\n          ]);\n        },\n      });\n    });\n\n    this.RULE('forwardCircleOperator', () => {\n      this.CONSUME(ForwardCircle);\n    });\n\n    this.RULE('backwardCircleOperator', () => {\n      this.CONSUME(BackwardCircle);\n      this.OPTION({\n        GATE: () => this.hasLabeledRight([MarkerlessSolid]),\n        DEF: () => {\n          this.SUBRULE(this.edgeLabel);\n          this.CONSUME(MarkerlessSolid);\n        },\n      });\n    });\n\n    this.RULE('forwardCrossOperator', () => {\n      this.CONSUME(ForwardCross);\n    });\n\n    this.RULE('backwardCrossOperator', () => {\n      this.CONSUME(BackwardCross);\n      this.OPTION({\n        GATE: () => this.hasLabeledRight([MarkerlessSolid]),\n        DEF: () => {\n          this.SUBRULE(this.edgeLabel);\n          this.CONSUME(MarkerlessSolid);\n        },\n      });\n    });\n\n    this.RULE('edgeLabel', () => {\n      this.OR([\n        { ALT: () => this.CONSUME(PlainString) },\n        { ALT: () => this.CONSUME(MarkdownString) },\n        { ALT: () => this.AT_LEAST_ONE(() => this.CONSUME(LabelText)) },\n      ]);\n    });\n\n    this.RULE('semanticRelation', () => {\n      this.OR([\n        {\n          ALT: () => {\n            this.CONSUME(DependencyArrow);\n            this.CONSUME(Colon);\n            this.OR2([{ ALT: () => this.CONSUME(Include) }, { ALT: () => this.CONSUME(Extend) }]);\n          },\n        },\n        { ALT: () => this.CONSUME(Generalization) },\n      ]);\n    });\n\n    this.RULE('metadata', () => {\n      this.CONSUME(MetadataStart);\n      this.MANY(() => this.CONSUME(NewLine));\n      this.OPTION(() => {\n        this.SUBRULE(this.metadataProperty);\n        this.MANY2(() => {\n          this.SUBRULE(this.metadataSeparator);\n          this.SUBRULE2(this.metadataProperty);\n        });\n        this.OPTION2(() => this.CONSUME(Comma));\n        this.MANY3(() => this.CONSUME2(NewLine));\n      });\n      this.CONSUME(RightBrace);\n    });\n\n    this.RULE('metadataProperty', () => {\n      this.OR([{ ALT: () => this.CONSUME(Identifier) }, { ALT: () => this.CONSUME(PlainString) }]);\n      this.CONSUME(Colon);\n      this.OR2([\n        { ALT: () => this.CONSUME2(Identifier) },\n        { ALT: () => this.CONSUME2(PlainString) },\n        { ALT: () => this.CONSUME(True) },\n        { ALT: () => this.CONSUME(False) },\n      ]);\n    });\n\n    this.RULE('metadataSeparator', () => {\n      this.OR([\n        {\n          ALT: () => {\n            this.CONSUME(Comma);\n            this.MANY(() => this.CONSUME(NewLine));\n          },\n        },\n        {\n          ALT: () => {\n            this.AT_LEAST_ONE(() => this.CONSUME2(NewLine));\n            this.OPTION(() => this.CONSUME2(Comma));\n            this.MANY2(() => this.CONSUME3(NewLine));\n          },\n        },\n      ]);\n    });\n\n    this.RULE('systemBoundaryStatement', () => {\n      this.CONSUME(SystemBoundary);\n      this.SUBRULE(this.systemBoundaryName);\n      // Same suffix order as actor and use case declarations: metadata, then classes.\n      this.OPTION(() => this.SUBRULE(this.metadata));\n      this.OPTION2(() => this.SUBRULE(this.classSuffix));\n      this.SUBRULE(this.lineEnd);\n      this.SUBRULE(this.systemBoundaryContent);\n      this.CONSUME(End);\n      this.SUBRULE2(this.lineEnd);\n    });\n\n    this.RULE('systemBoundaryName', () => {\n      this.OR([\n        {\n          ALT: () => {\n            this.CONSUME(Identifier);\n            // Mirrors `entityName`, so a short id can carry a long title. Unlike a use\n            // case, the bracket form does not select a shape; boundary geometry comes\n            // from `type` metadata only.\n            this.OPTION(() => {\n              this.OR2([\n                {\n                  ALT: () => {\n                    this.CONSUME(LeftParen);\n                    this.SUBRULE(this.nodeLabel);\n                    this.CONSUME(RightParen);\n                  },\n                },\n                {\n                  ALT: () => {\n                    this.CONSUME(LeftBracket);\n                    this.SUBRULE2(this.nodeLabel);\n                    this.CONSUME(RightBracket);\n                  },\n                },\n              ]);\n            });\n          },\n        },\n        { ALT: () => this.CONSUME(PlainString) },\n        { ALT: () => this.CONSUME(MarkdownString) },\n      ]);\n    });\n\n    this.RULE('systemBoundaryContent', () => {\n      this.MANY(() => {\n        this.OR([\n          { ALT: () => this.SUBRULE(this.blankLine) },\n          { ALT: () => this.SUBRULE(this.commentLine) },\n          { ALT: () => this.SUBRULE(this.boundaryElement) },\n        ]);\n      });\n    });\n\n    this.RULE('boundaryElement', () => {\n      this.OR([\n        { ALT: () => this.SUBRULE(this.actorDeclarationOnly) },\n        {\n          ALT: () => {\n            this.SUBRULE(this.entityName);\n            this.SUBRULE(this.lineEnd);\n          },\n        },\n      ]);\n    });\n\n    this.RULE('metadataAssignmentStatement', () => {\n      this.SUBRULE(this.metadataAssignmentTarget);\n      this.SUBRULE(this.metadata);\n      this.SUBRULE(this.lineEnd);\n    });\n\n    this.RULE('metadataAssignmentTarget', () => {\n      this.OR([\n        { ALT: () => this.CONSUME(Identifier) },\n        { ALT: () => this.CONSUME(PlainString) },\n        { ALT: () => this.CONSUME(MarkdownString) },\n      ]);\n    });\n\n    this.RULE('noteStatement', () => {\n      this.CONSUME(Note);\n      this.CONSUME(For);\n      this.CONSUME(Identifier);\n      this.SUBRULE(this.nodeLabel);\n      this.SUBRULE(this.lineEnd);\n    });\n\n    this.RULE('stereotype', () => {\n      this.CONSUME(StereotypeStart);\n      this.CONSUME(StereotypeText);\n      this.CONSUME(StereotypeEnd);\n    });\n\n    this.RULE('classSuffix', () => {\n      this.CONSUME(ClassSeparator);\n      this.CONSUME(Identifier);\n      this.MANY(() => {\n        this.CONSUME(Comma);\n        this.CONSUME2(Identifier);\n      });\n    });\n\n    this.RULE('jsonStatement', () => {\n      this.CONSUME(JsonDeclarationStart);\n      this.CONSUME(JsonObjectLiteral);\n      this.OPTION(() => this.SUBRULE(this.classSuffix));\n      this.SUBRULE(this.lineEnd);\n    });\n\n    this.RULE('directionStatement', () => {\n      this.CONSUME(Direction);\n      this.OR([\n        { ALT: () => this.CONSUME(Td) },\n        { ALT: () => this.CONSUME(Tb) },\n        { ALT: () => this.CONSUME(Bt) },\n        { ALT: () => this.CONSUME(Lr) },\n        { ALT: () => this.CONSUME(Rl) },\n      ]);\n      this.SUBRULE(this.lineEnd);\n    });\n\n    this.RULE('classDefStatement', () => {\n      this.CONSUME(ClassDef);\n      this.CONSUME(Identifier);\n      this.MANY(() => {\n        this.CONSUME(Comma);\n        this.CONSUME2(Identifier);\n      });\n      this.SUBRULE(this.styles);\n      this.SUBRULE(this.lineEnd);\n    });\n\n    this.RULE('classStatement', () => {\n      this.CONSUME(Class);\n      this.CONSUME(Identifier);\n      this.MANY(() => {\n        this.CONSUME(Comma);\n        this.CONSUME2(Identifier);\n      });\n      this.CONSUME3(Identifier);\n      this.MANY2(() => {\n        this.CONSUME2(Comma);\n        this.CONSUME4(Identifier);\n      });\n      this.SUBRULE(this.lineEnd);\n    });\n\n    this.RULE('styleStatement', () => {\n      this.CONSUME(Style);\n      this.CONSUME(Identifier);\n      this.SUBRULE(this.styles);\n      this.SUBRULE(this.lineEnd);\n    });\n\n    this.RULE('styles', () => {\n      this.SUBRULE(this.styleValue);\n      this.MANY(() => {\n        this.CONSUME(Comma);\n        this.SUBRULE2(this.styleValue);\n      });\n    });\n\n    this.RULE('styleValue', () => {\n      this.OR([\n        { ALT: () => this.CONSUME(Word) },\n        { ALT: () => this.CONSUME(CssIdentifier) },\n        {\n          ALT: () => {\n            this.CONSUME(MarkerlessSolid);\n            this.CONSUME2(Word);\n          },\n        },\n      ]);\n      this.CONSUME(Colon);\n      this.AT_LEAST_ONE(() => this.SUBRULE(this.styleComponent));\n    });\n\n    this.RULE('styleComponent', () => {\n      this.OR([\n        { ALT: () => this.CONSUME(Word) },\n        { ALT: () => this.CONSUME(PlainString) },\n        { ALT: () => this.CONSUME(NumberLiteral) },\n        { ALT: () => this.CONSUME(HashColor) },\n        { ALT: () => this.CONSUME(CssIdentifier) },\n        { ALT: () => this.CONSUME(CssEscapedComma) },\n        { ALT: () => this.CONSUME(Dash) },\n        { ALT: () => this.CONSUME(Dot) },\n        { ALT: () => this.CONSUME(Percent) },\n        { ALT: () => this.CONSUME(CssPunctuation) },\n        { ALT: () => this.CONSUME(Colon) },\n        { ALT: () => this.CONSUME(LeftParen) },\n        { ALT: () => this.CONSUME(RightParen) },\n        { ALT: () => this.CONSUME(LeftBracket) },\n        { ALT: () => this.CONSUME(RightBracket) },\n        { ALT: () => this.CONSUME(LeftBrace) },\n        { ALT: () => this.CONSUME(RightBrace) },\n        { ALT: () => this.CONSUME(At) },\n        { ALT: () => this.CONSUME(MarkerlessSolid) },\n      ]);\n    });\n\n    this.performSelfAnalysis();\n  }\n\n  private isMetadataAssignment(): boolean {\n    const target = this.LA(1).tokenType;\n    return (\n      (target === Identifier || target === PlainString || target === MarkdownString) &&\n      this.LA(2).tokenType === MetadataStart\n    );\n  }\n\n  private isStatementStart(): boolean {\n    const tokenType = this.LA(1).tokenType;\n    return tokenType !== EOF && tokenType !== NewLine && tokenType !== Comment;\n  }\n\n  private isForbiddenPlantUmlStatement(): boolean {\n    return (\n      this.LA(1).tokenType === Identifier &&\n      forbiddenPlantUmlStatements[this.LA(1).image.toLowerCase()] === true\n    );\n  }\n\n  private hasLabeledRight(allowed: TokenType[]): boolean {\n    if (!isLabelToken(this.LA(1))) {\n      return false;\n    }\n    for (let index = 2; ; index++) {\n      const token = this.LA(index);\n      if (allowed.includes(token.tokenType)) {\n        return true;\n      }\n      if (!isLabelToken(token)) {\n        return false;\n      }\n    }\n  }\n}\n\n/** Singleton parser; grammar self-analysis runs once at module load. */\nexport const usecaseParser = new UsecaseParser();\n", "export interface OrderedJsonObject {\n  value: Record<string, unknown>;\n  propertyOrder: Record<string, string[]>;\n}\n\nexport class UsecaseJsonError extends Error {\n  constructor(\n    message: string,\n    public readonly line: number,\n    public readonly column: number\n  ) {\n    super(`${message} (line ${line}, column ${column})`);\n    this.name = 'UsecaseJsonError';\n  }\n}\n\nconst locationAtOffset = (\n  text: string,\n  offset: number,\n  startLine: number,\n  startColumn: number\n): { line: number; column: number } => {\n  let line = startLine;\n  let column = startColumn;\n  const end = Math.min(Math.max(offset, 0), text.length);\n\n  for (let index = 0; index < end; index++) {\n    const character = text[index];\n    if (character === '\\r') {\n      line++;\n      column = 1;\n    } else if (character === '\\n') {\n      if (index === 0 || text[index - 1] !== '\\r') {\n        line++;\n        column = 1;\n      }\n    } else {\n      column++;\n    }\n  }\n\n  return { line, column };\n};\n\nconst locationFromErrorMessage = (\n  message: string,\n  text: string,\n  startLine: number,\n  startColumn: number\n): { line: number; column: number } | undefined => {\n  const position = /\\bposition (\\d+)\\b/u.exec(message);\n  if (position) {\n    return locationAtOffset(text, Number.parseInt(position[1], 10), startLine, startColumn);\n  }\n\n  const localLocation = /\\bline (\\d+) column (\\d+)\\b/u.exec(message);\n  if (localLocation) {\n    const localLine = Number.parseInt(localLocation[1], 10);\n    const localColumn = Number.parseInt(localLocation[2], 10);\n    return {\n      line: startLine + localLine - 1,\n      column: localLine === 1 ? startColumn + localColumn - 1 : localColumn,\n    };\n  }\n\n  if (/unexpected end|end of json input/iu.test(message)) {\n    return locationAtOffset(text, text.length, startLine, startColumn);\n  }\n\n  return undefined;\n};\n\nclass JsonWalkError extends Error {\n  constructor(public readonly offset: number) {\n    super('Invalid JSON token');\n  }\n}\n\n/**\n * Walks JSON tokens only after JSON.parse has authoritatively accepted or rejected the text.\n * Its output is property order on success and a portable diagnostic offset on failure.\n */\nclass PropertyOrderCollector {\n  private offset = 0;\n  readonly propertyOrder: Record<string, string[]> = {};\n\n  constructor(private readonly text: string) {}\n\n  collect(): Record<string, string[]> {\n    this.skipWhitespace();\n    this.collectValue('');\n    this.skipWhitespace();\n    if (this.offset !== this.text.length) {\n      throw new JsonWalkError(this.offset);\n    }\n    return this.propertyOrder;\n  }\n\n  private collectValue(pointer: string): void {\n    this.skipWhitespace();\n    const character = this.text[this.offset];\n\n    if (character === '{') {\n      this.collectObject(pointer);\n    } else if (character === '[') {\n      this.collectArray(pointer);\n    } else if (character === '\"') {\n      this.readString(false);\n    } else if (character === 't') {\n      this.consumeLiteral('true');\n    } else if (character === 'f') {\n      this.consumeLiteral('false');\n    } else if (character === 'n') {\n      this.consumeLiteral('null');\n    } else if (character === '-' || (character >= '0' && character <= '9')) {\n      this.consumeNumber();\n    } else {\n      throw new JsonWalkError(this.offset);\n    }\n  }\n\n  private collectObject(pointer: string): void {\n    this.offset++;\n    const order: string[] = [];\n    const seen = new Set<string>();\n    this.propertyOrder[pointer] = order;\n    this.skipWhitespace();\n\n    if (this.text[this.offset] === '}') {\n      this.offset++;\n      return;\n    }\n\n    while (this.offset < this.text.length) {\n      if (this.text[this.offset] !== '\"') {\n        throw new JsonWalkError(this.offset);\n      }\n      const property = this.readString(true);\n      const propertyPointer = `${pointer}/${property.replaceAll('~', '~0').replaceAll('/', '~1')}`;\n\n      if (seen.has(property)) {\n        this.deletePointerSubtree(propertyPointer);\n      } else {\n        seen.add(property);\n        order.push(property);\n      }\n\n      this.skipWhitespace();\n      if (this.text[this.offset] !== ':') {\n        throw new JsonWalkError(this.offset);\n      }\n      this.offset++;\n      this.collectValue(propertyPointer);\n      this.skipWhitespace();\n\n      if (this.text[this.offset] === '}') {\n        this.offset++;\n        return;\n      }\n      if (this.text[this.offset] !== ',') {\n        throw new JsonWalkError(this.offset);\n      }\n\n      this.offset++;\n      this.skipWhitespace();\n    }\n\n    throw new JsonWalkError(this.offset);\n  }\n\n  private collectArray(pointer: string): void {\n    this.offset++;\n    this.skipWhitespace();\n\n    if (this.text[this.offset] === ']') {\n      this.offset++;\n      return;\n    }\n\n    let index = 0;\n    while (this.offset < this.text.length) {\n      this.collectValue(`${pointer}/${index}`);\n      index++;\n      this.skipWhitespace();\n\n      if (this.text[this.offset] === ']') {\n        this.offset++;\n        return;\n      }\n      if (this.text[this.offset] !== ',') {\n        throw new JsonWalkError(this.offset);\n      }\n\n      this.offset++;\n      this.skipWhitespace();\n    }\n\n    throw new JsonWalkError(this.offset);\n  }\n\n  private readString(decode: boolean): string {\n    this.offset++;\n    let value = '';\n\n    while (this.offset < this.text.length) {\n      const characterOffset = this.offset;\n      const character = this.text[this.offset++];\n      if (character === '\"') {\n        return value;\n      }\n      if (character.charCodeAt(0) < 0x20) {\n        throw new JsonWalkError(characterOffset);\n      }\n      if (character !== '\\\\') {\n        if (decode) {\n          value += character;\n        }\n        continue;\n      }\n\n      const escapeOffset = this.offset;\n      const escape = this.text[this.offset++];\n      switch (escape) {\n        case '\"':\n        case '\\\\':\n        case '/':\n          if (decode) {\n            value += escape;\n          }\n          break;\n        case 'b':\n          if (decode) {\n            value += '\\b';\n          }\n          break;\n        case 'f':\n          if (decode) {\n            value += '\\f';\n          }\n          break;\n        case 'n':\n          if (decode) {\n            value += '\\n';\n          }\n          break;\n        case 'r':\n          if (decode) {\n            value += '\\r';\n          }\n          break;\n        case 't':\n          if (decode) {\n            value += '\\t';\n          }\n          break;\n        case 'u': {\n          const codeUnit = this.text.slice(this.offset, this.offset + 4);\n          if (!/^[\\dA-Fa-f]{4}$/u.test(codeUnit)) {\n            throw new JsonWalkError(this.offset);\n          }\n          if (decode) {\n            value += String.fromCharCode(Number.parseInt(codeUnit, 16));\n          }\n          this.offset += 4;\n          break;\n        }\n        default:\n          throw new JsonWalkError(escapeOffset);\n      }\n    }\n\n    throw new JsonWalkError(this.offset);\n  }\n\n  private consumeLiteral(literal: string): void {\n    let index = 0;\n    for (const element of literal) {\n      if (this.text[this.offset + index] !== element) {\n        throw new JsonWalkError(this.offset + index);\n      }\n      index++;\n    }\n    this.offset += literal.length;\n  }\n\n  private consumeNumber(): void {\n    if (this.text[this.offset] === '-') {\n      this.offset++;\n    }\n\n    if (this.text[this.offset] === '0') {\n      this.offset++;\n    } else if (this.text[this.offset] >= '1' && this.text[this.offset] <= '9') {\n      while (this.text[this.offset] >= '0' && this.text[this.offset] <= '9') {\n        this.offset++;\n      }\n    } else {\n      throw new JsonWalkError(this.offset);\n    }\n\n    if (this.text[this.offset] === '.') {\n      this.offset++;\n      if (this.text[this.offset] < '0' || this.text[this.offset] > '9') {\n        throw new JsonWalkError(this.offset);\n      }\n      while (this.text[this.offset] >= '0' && this.text[this.offset] <= '9') {\n        this.offset++;\n      }\n    }\n\n    if (this.text[this.offset] === 'e' || this.text[this.offset] === 'E') {\n      this.offset++;\n      if (this.text[this.offset] === '+' || this.text[this.offset] === '-') {\n        this.offset++;\n      }\n      if (this.text[this.offset] < '0' || this.text[this.offset] > '9') {\n        throw new JsonWalkError(this.offset);\n      }\n      while (this.text[this.offset] >= '0' && this.text[this.offset] <= '9') {\n        this.offset++;\n      }\n    }\n  }\n\n  private skipWhitespace(): void {\n    while (this.offset < this.text.length) {\n      const character = this.text[this.offset];\n      if (character !== ' ' && character !== '\\t' && character !== '\\n' && character !== '\\r') {\n        return;\n      }\n      this.offset++;\n    }\n  }\n\n  private deletePointerSubtree(pointer: string): void {\n    const descendantPrefix = `${pointer}/`;\n    for (const existingPointer of Object.keys(this.propertyOrder)) {\n      if (existingPointer === pointer || existingPointer.startsWith(descendantPrefix)) {\n        delete this.propertyOrder[existingPointer];\n      }\n    }\n  }\n}\n\nexport function parseOrderedJsonObject(\n  jsonText: string,\n  startLine: number,\n  startColumn: number\n): OrderedJsonObject {\n  let parsed: unknown;\n  try {\n    parsed = JSON.parse(jsonText);\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    let location = locationFromErrorMessage(message, jsonText, startLine, startColumn);\n    if (!location) {\n      let invalidOffset = 0;\n      try {\n        new PropertyOrderCollector(jsonText).collect();\n      } catch (walkError) {\n        if (walkError instanceof JsonWalkError) {\n          invalidOffset = walkError.offset;\n        }\n      }\n      location = locationAtOffset(jsonText, invalidOffset, startLine, startColumn);\n    }\n    throw new UsecaseJsonError(`Invalid JSON: ${message}`, location.line, location.column);\n  }\n\n  if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {\n    throw new UsecaseJsonError('JSON value must have an object root', startLine, startColumn);\n  }\n\n  return {\n    value: parsed as Record<string, unknown>,\n    propertyOrder: new PropertyOrderCollector(jsonText).collect(),\n  };\n}\n", "import { ARROW_TYPE } from './usecaseTypes.js';\nimport type {\n  Actor,\n  ClassDef,\n  Direction,\n  GraphAST,\n  GraphEdge,\n  GraphGroup,\n  GraphNode,\n  GraphStatement,\n  Relationship,\n  Span,\n  SystemBoundary,\n  UseCase,\n  UsecaseJsonNode,\n  UsecaseNote,\n} from './usecaseTypes.js';\n\nexport interface UsecaseModelReader {\n  getActors(): ReadonlyMap<string, Actor>;\n  getUseCases(): ReadonlyMap<string, UseCase>;\n  getSystemBoundaries(): ReadonlyMap<string, SystemBoundary>;\n  getRelationships(): readonly Relationship[];\n  getNotes(): ReadonlyMap<string, UsecaseNote>;\n  getJsonNodes(): ReadonlyMap<string, UsecaseJsonNode>;\n  getClassDefs(): ReadonlyMap<string, ClassDef>;\n  getDirection(): Direction;\n  getAccTitle(): string;\n  getAccDescription(): string;\n}\n\nconst actorNode = (actor: Actor): GraphNode => ({\n  shape:\n    actor.type === 'normal'\n      ? 'actor'\n      : actor.type === 'hollow'\n        ? 'actor-hollow'\n        : actor.type === 'awesome'\n          ? 'actor-awesome'\n          : 'actor-icon',\n  ...(actor.label === actor.id ? {} : { label: actor.label }),\n  ...(actor.classes.length ? { classes: [...actor.classes] } : {}),\n  ...(actor.styles.length ? { styles: [...actor.styles] } : {}),\n  attrs: {\n    kind: 'actor',\n    actorType: actor.type,\n    business: actor.business,\n    labelType: actor.labelType,\n    ...(actor.icon ? { icon: actor.icon } : {}),\n    ...(actor.stereotype ? { stereotype: actor.stereotype } : {}),\n    ...(actor.parentId ? { parentId: actor.parentId } : {}),\n  },\n});\n\nconst useCaseNode = (useCase: UseCase): GraphNode => ({\n  shape: useCase.shape,\n  ...(useCase.label === useCase.id ? {} : { label: useCase.label }),\n  ...(useCase.classes.length ? { classes: [...useCase.classes] } : {}),\n  ...(useCase.styles.length ? { styles: [...useCase.styles] } : {}),\n  attrs: {\n    kind: 'usecase',\n    useCaseShape: useCase.shape,\n    business: useCase.business,\n    labelType: useCase.labelType,\n    ...(useCase.stereotype ? { stereotype: useCase.stereotype } : {}),\n    ...(useCase.parentId ? { parentId: useCase.parentId } : {}),\n  },\n});\n\nconst noteNode = (note: UsecaseNote): GraphNode => ({\n  label: note.label,\n  shape: 'note',\n  attrs: { kind: 'note', target: note.target, labelType: note.labelType },\n});\n\nconst jsonNode = (json: UsecaseJsonNode): GraphNode => ({\n  label: json.id,\n  shape: 'json-table',\n  ...(json.classes.length ? { classes: [...json.classes] } : {}),\n  ...(json.styles.length ? { styles: [...json.styles] } : {}),\n  attrs: { kind: 'json', value: json.value, propertyOrder: json.propertyOrder, labelType: 'text' },\n});\n\nconst relationshipEdge = (relationship: Relationship): GraphEdge => ({\n  id: relationship.id,\n  source: relationship.source,\n  target: relationship.target,\n  ...(relationship.label ? { label: relationship.label } : {}),\n  ...(relationship.classes.length ? { classes: [...relationship.classes] } : {}),\n  ...(relationship.styles.length ? { styles: [...relationship.styles] } : {}),\n  attrs: {\n    relationshipType: relationship.type,\n    arrowType: relationship.arrowType,\n    minlen: relationship.minlen,\n    explicitId: relationship.explicitId,\n    animate: relationship.animate,\n    ...(relationship.animation ? { animation: relationship.animation } : {}),\n    ...(relationship.labelType ? { labelType: relationship.labelType } : {}),\n  },\n});\n\nconst noteEdge = (note: UsecaseNote): GraphEdge => ({\n  id: `${note.id}-edge`,\n  source: note.id,\n  target: note.target,\n  attrs: {\n    relationshipType: 'note',\n    arrowType: ARROW_TYPE.LINE_SOLID,\n    pattern: 'dotted',\n    minlen: 1,\n    explicitId: false,\n    animate: false,\n    internal: true,\n  },\n});\n\nexport const buildUsecaseGraphAST = (\n  model: UsecaseModelReader,\n  source: string,\n  headerSpan: Span,\n  statements: GraphStatement[]\n): GraphAST => {\n  const nodes: Record<string, GraphNode> = {};\n  for (const actor of model.getActors().values()) {\n    nodes[actor.id] = actorNode(actor);\n  }\n  for (const useCase of model.getUseCases().values()) {\n    nodes[useCase.id] = useCaseNode(useCase);\n  }\n  for (const note of model.getNotes().values()) {\n    nodes[note.id] = noteNode(note);\n  }\n  for (const json of model.getJsonNodes().values()) {\n    nodes[json.id] = jsonNode(json);\n  }\n\n  const groups: Record<string, GraphGroup> = {};\n  for (const boundary of model.getSystemBoundaries().values()) {\n    groups[boundary.id] = {\n      ...(boundary.label === boundary.id ? {} : { title: boundary.label }),\n      nodes: [...boundary.members],\n      ...(boundary.classes.length ? { classes: [...boundary.classes] } : {}),\n      ...(boundary.styles.length ? { styles: [...boundary.styles] } : {}),\n      attrs: {\n        kind: 'systemBoundary',\n        boundaryType: boundary.type,\n        labelType: boundary.labelType,\n      },\n    };\n  }\n\n  const classDefs: GraphAST['classDefs'] = {};\n  for (const definition of model.getClassDefs().values()) {\n    classDefs[definition.id] = { styles: [...definition.styles] };\n  }\n  const direction = model.getDirection();\n  return {\n    version: 1,\n    diagramType: 'usecase',\n    source,\n    header: {\n      keyword: 'usecase',\n      direction: direction === 'TD' ? 'TB' : direction,\n      span: headerSpan,\n    },\n    ...(model.getAccTitle() ? { accTitle: model.getAccTitle() } : {}),\n    ...(model.getAccDescription() ? { accDescr: model.getAccDescription() } : {}),\n    nodes,\n    edges: [\n      ...model.getRelationships().map(relationshipEdge),\n      ...[...model.getNotes().values()].map(noteEdge),\n    ],\n    groups,\n    classDefs,\n    statements,\n  };\n};\n", "// cspell:ignore markerless\n\nimport { buildUsecaseGraphAST, type UsecaseModelReader } from '../usecaseAst.js';\nimport type {\n  Actor,\n  ActorType,\n  Animation,\n  ArrowType,\n  BoundaryType,\n  ClassDef,\n  Direction,\n  GraphAST,\n  GraphStatement,\n  LabelType,\n  MetadataOccurrence,\n  Relationship,\n  RelationshipType,\n  Span,\n  SystemBoundary,\n  UseCase,\n  UseCaseShape,\n  UsecaseDB,\n  UsecaseFields,\n  UsecaseJsonNode,\n  UsecaseNote,\n  UsecaseSymbolKind,\n} from '../usecaseTypes.js';\n\nexport interface DraftLocation {\n  span: Span;\n  line: number;\n  column: number;\n}\nexport interface DraftLabel {\n  text: string;\n  type: LabelType;\n  span: Span;\n}\nexport interface DraftMetadataProperty extends MetadataOccurrence {\n  value: string | boolean;\n  location: DraftLocation;\n}\nexport interface DraftMetadata {\n  properties: DraftMetadataProperty[];\n  location: DraftLocation;\n}\nexport interface DraftElement {\n  id: string;\n  kind: 'actor' | 'usecase';\n  label: DraftLabel;\n  location: DraftLocation;\n  generated: boolean;\n  parentId?: string;\n  parentLocation?: DraftLocation;\n  shape?: UseCaseShape;\n  metadata?: DraftMetadata;\n  stereotype?: string;\n  stereotypeSpan?: Span;\n  classes: string[];\n}\nexport interface DraftBoundary {\n  id: string;\n  label: DraftLabel;\n  location: DraftLocation;\n  generated: boolean;\n  classes: string[];\n}\nexport interface DraftJson {\n  id: string;\n  value: Record<string, unknown>;\n  propertyOrder: Record<string, string[]>;\n  location: DraftLocation;\n  classes: string[];\n}\nexport interface DraftEndpoint {\n  id: string;\n  label: DraftLabel;\n  location: DraftLocation;\n  generated: boolean;\n  declaration: boolean;\n  classesOnReference: boolean;\n}\nexport interface DraftRelationship {\n  source: DraftEndpoint;\n  target: DraftEndpoint;\n  location: DraftLocation;\n  explicitId?: string;\n  explicitIdLocation?: DraftLocation;\n  type: RelationshipType;\n  arrowType: ArrowType;\n  label?: DraftLabel;\n  minlen: number;\n}\nexport interface DraftNote {\n  target: string;\n  targetLocation: DraftLocation;\n  label: DraftLabel;\n  location: DraftLocation;\n}\ninterface DraftMetadataAssignment {\n  target: string;\n  targetLocation: DraftLocation;\n  metadata: DraftMetadata;\n  statement: GraphStatement;\n}\ninterface DraftClassAssignment {\n  targets: { id: string; location: DraftLocation }[];\n  classes: string[];\n}\ninterface DraftStyleAssignment {\n  target: string;\n  location: DraftLocation;\n  styles: string[];\n}\ninterface SymbolOrigin {\n  kind: UsecaseSymbolKind;\n  location: DraftLocation;\n  generated: boolean;\n  /** Source label a generated ID was derived from; absent when the ID was written explicitly. */\n  label?: string;\n}\ninterface ElementState {\n  kind: 'actor' | 'usecase';\n  id: string;\n  label: DraftLabel;\n  location: DraftLocation;\n  generated: boolean;\n  parentId?: string;\n  parentLocation?: DraftLocation;\n  shape?: UseCaseShape;\n  stereotype?: string;\n  stereotypeLocation?: DraftLocation;\n  classes: string[];\n  actorType?: Exclude<ActorType, 'icon'>;\n  icon?: string;\n  business?: boolean;\n}\ninterface BoundaryState {\n  id: string;\n  label: DraftLabel;\n  location: DraftLocation;\n  generated: boolean;\n  type?: BoundaryType;\n  classes: string[];\n  styles: string[];\n  members: string[];\n}\ninterface EdgeState {\n  draft: DraftRelationship;\n  relationship: Relationship;\n}\n\nconst locationText = (location: DraftLocation): string =>\n  `line ${location.line}, column ${location.column} [${location.span[0]},${location.span[1]})`;\n/**\n * Names the source label a generated ID was derived from, so that a collision between two\n * different labels that normalize to the same ID points at both originals.\n */\nconst labelSuffix = (label: string | undefined): string =>\n  label === undefined ? '' : ` (label \"${label}\")`;\nconst generatedFrom = (origin: { generated: boolean; label?: string }): string | undefined =>\n  origin.generated ? origin.label : undefined;\nconst pushUnique = (target: string[], values: readonly string[]): void => {\n  for (const value of values) {\n    if (!target.includes(value)) {\n      target.push(value);\n    }\n  }\n};\n\n/** Collects detached CST drafts and atomically publishes a fully resolved model and AST. */\nexport class UsecaseModelBuilder implements UsecaseModelReader {\n  private model: UsecaseFields;\n  private source = '';\n  private statements: GraphStatement[] = [];\n  private readonly elements: DraftElement[] = [];\n  private readonly boundaries: DraftBoundary[] = [];\n  private readonly jsonDrafts: DraftJson[] = [];\n  private readonly relationshipDrafts: DraftRelationship[] = [];\n  private readonly noteDrafts: DraftNote[] = [];\n  private readonly metadataAssignments: DraftMetadataAssignment[] = [];\n  private readonly classAssignments: DraftClassAssignment[] = [];\n  private readonly styleAssignments: DraftStyleAssignment[] = [];\n  private readonly classDefinitions: { ids: string[]; styles: string[] }[] = [];\n  private readonly directions: Direction[] = [];\n\n  constructor(private readonly db: UsecaseDB) {\n    this.model = db.createModel();\n  }\n  reset(source: string): void {\n    this.model = this.db.createModel();\n    this.source = source;\n    this.statements = [];\n    this.elements.length = 0;\n    this.boundaries.length = 0;\n    this.jsonDrafts.length = 0;\n    this.relationshipDrafts.length = 0;\n    this.noteDrafts.length = 0;\n    this.metadataAssignments.length = 0;\n    this.classAssignments.length = 0;\n    this.styleAssignments.length = 0;\n    this.classDefinitions.length = 0;\n    this.directions.length = 0;\n  }\n  addElement(value: DraftElement): void {\n    this.elements.push(value);\n  }\n  addBoundary(value: DraftBoundary): void {\n    this.boundaries.push(value);\n  }\n  addJson(value: DraftJson): void {\n    this.jsonDrafts.push(value);\n  }\n  addRelationship(value: DraftRelationship): void {\n    this.relationshipDrafts.push(value);\n  }\n  addNote(value: DraftNote): void {\n    this.noteDrafts.push(value);\n  }\n  addMetadataAssignment(\n    target: string,\n    targetLocation: DraftLocation,\n    metadata: DraftMetadata,\n    statement: GraphStatement\n  ): void {\n    this.metadataAssignments.push({ target, targetLocation, metadata, statement });\n  }\n  addClassDef(ids: string[], styles: string[]): void {\n    this.classDefinitions.push({ ids, styles });\n  }\n  addClassAssignment(targets: { id: string; location: DraftLocation }[], classes: string[]): void {\n    this.classAssignments.push({ targets, classes });\n  }\n  addStyleAssignment(target: string, location: DraftLocation, styles: string[]): void {\n    this.styleAssignments.push({ target, location, styles });\n  }\n  setDirection(direction: Direction): void {\n    this.directions.push(direction === 'TD' ? 'TB' : direction);\n  }\n  setAccTitle(title: string): void {\n    this.model.accTitle = title;\n  }\n  setAccDescription(description: string): void {\n    this.model.accDescription = description;\n  }\n  setStatements(statements: GraphStatement[]): void {\n    this.statements = statements;\n  }\n  getActors(): ReadonlyMap<string, Actor> {\n    return this.model.actors;\n  }\n  getUseCases(): ReadonlyMap<string, UseCase> {\n    return this.model.useCases;\n  }\n  getSystemBoundaries(): ReadonlyMap<string, SystemBoundary> {\n    return this.model.systemBoundaries;\n  }\n  getRelationships(): readonly Relationship[] {\n    return this.model.relationships;\n  }\n  getNotes(): ReadonlyMap<string, UsecaseNote> {\n    return this.model.notes;\n  }\n  getJsonNodes(): ReadonlyMap<string, UsecaseJsonNode> {\n    return this.model.jsonNodes;\n  }\n  getClassDefs(): ReadonlyMap<string, ClassDef> {\n    return this.model.classDefs;\n  }\n  getDirection(): Direction {\n    return this.model.direction;\n  }\n  getAccTitle(): string {\n    return this.model.accTitle;\n  }\n  getAccDescription(): string {\n    return this.model.accDescription;\n  }\n\n  finalize(headerSpan: Span): GraphAST {\n    const symbols = new Map<string, SymbolOrigin>();\n    const elements = new Map<string, ElementState>();\n    const boundaries = new Map<string, BoundaryState>();\n    const first = new Map<string, number>();\n    for (const relation of this.relationshipDrafts) {\n      this.recordFirst(first, relation.source.id, relation.source.location.span[0]);\n      this.recordFirst(first, relation.target.id, relation.target.location.span[0]);\n    }\n    for (const draft of this.elements) {\n      this.recordFirst(first, draft.id, draft.location.span[0]);\n    }\n    for (const draft of this.boundaries) {\n      this.recordFirst(first, draft.id, draft.location.span[0]);\n    }\n    for (const draft of this.jsonDrafts) {\n      this.recordFirst(first, draft.id, draft.location.span[0]);\n    }\n    const declarations = [\n      ...this.elements.map((value) => ({\n        offset: value.location.span[0],\n        type: 'element' as const,\n        value,\n      })),\n      ...this.boundaries.map((value) => ({\n        offset: value.location.span[0],\n        type: 'boundary' as const,\n        value,\n      })),\n      ...this.jsonDrafts.map((value) => ({\n        offset: value.location.span[0],\n        type: 'json' as const,\n        value,\n      })),\n      ...this.relationshipDrafts\n        .filter((value) => value.explicitId)\n        .map((value) => ({\n          offset: value.explicitIdLocation!.span[0],\n          type: 'edge' as const,\n          value,\n        })),\n    ].sort((a, b) => a.offset - b.offset);\n    for (const item of declarations) {\n      if (item.type === 'element') {\n        this.collectElement(item.value, symbols, elements);\n      } else if (item.type === 'boundary') {\n        this.collectBoundary(item.value, symbols, boundaries);\n      } else if (item.type === 'json') {\n        this.registerUnique(symbols, item.value.id, 'json', item.value.location, false);\n      } else {\n        this.registerUnique(\n          symbols,\n          item.value.explicitId!,\n          'edge',\n          item.value.explicitIdLocation!,\n          false\n        );\n      }\n    }\n    this.materializeElements(elements, first);\n    this.materializeBoundaries(boundaries, first);\n    this.materializeJson(first);\n    const edges = this.materializeRelationships(symbols, elements, first);\n    this.reorderElements(elements, first);\n    this.applyMetadataAssignments(symbols, elements, boundaries, edges);\n    this.validateAndRefreshElements(elements);\n    this.refreshBoundaries(boundaries, elements);\n    this.materializeNotes(symbols);\n    this.applyClassDefinitions();\n    this.applyClassesAndStyles(symbols, edges);\n    this.model.direction = this.directions.at(-1) ?? this.model.direction;\n    this.model.symbols = new Map([...symbols].map(([id, origin]) => [id, origin.kind]));\n    const ast = buildUsecaseGraphAST(this, this.source, headerSpan, this.statements);\n    this.model.ast = ast;\n    this.db.commit(this.model);\n    return ast;\n  }\n\n  private collectElement(\n    draft: DraftElement,\n    symbols: Map<string, SymbolOrigin>,\n    states: Map<string, ElementState>\n  ): void {\n    const origin = symbols.get(draft.id);\n    const draftLabel = generatedFrom({ generated: draft.generated, label: draft.label.text });\n    if (origin && origin.kind !== draft.kind) {\n      this.conflict(\n        `ID '${draft.id}' is declared as both ${origin.kind} and ${draft.kind}`,\n        draft.location,\n        origin.location,\n        draftLabel,\n        generatedFrom(origin)\n      );\n    }\n    if (origin && (origin.generated || draft.generated)) {\n      this.conflict(\n        `Generated ID '${draft.id}' collides with another declaration`,\n        draft.location,\n        origin.location,\n        draftLabel,\n        generatedFrom(origin)\n      );\n    }\n    const existing = states.get(draft.id);\n    if (!existing) {\n      const state: ElementState = {\n        kind: draft.kind,\n        id: draft.id,\n        label: draft.label,\n        location: draft.location,\n        generated: draft.generated,\n        classes: [...draft.classes],\n        ...(draft.parentId\n          ? { parentId: draft.parentId, parentLocation: draft.parentLocation }\n          : {}),\n        ...(draft.shape ? { shape: draft.shape } : {}),\n        ...(draft.stereotype\n          ? { stereotype: draft.stereotype, stereotypeLocation: draft.location }\n          : {}),\n      };\n      this.applyDeclarationMetadata(state, draft.metadata);\n      states.set(draft.id, state);\n      symbols.set(draft.id, {\n        kind: draft.kind,\n        location: draft.location,\n        generated: draft.generated,\n        label: draft.label.text,\n      });\n      return;\n    }\n    if (existing.label.text !== draft.label.text || existing.label.type !== draft.label.type) {\n      this.conflict(`ID '${draft.id}' has conflicting labels`, draft.location, existing.location);\n    }\n    if (draft.shape && existing.shape && draft.shape !== existing.shape) {\n      this.conflict(\n        `Use case '${draft.id}' has conflicting shapes`,\n        draft.location,\n        existing.location\n      );\n    }\n    if (draft.parentId && existing.parentId && draft.parentId !== existing.parentId) {\n      this.conflict(\n        `Element '${draft.id}' belongs to more than one system boundary`,\n        draft.parentLocation ?? draft.location,\n        existing.parentLocation ?? existing.location\n      );\n    }\n    if (draft.stereotype && existing.stereotype && draft.stereotype !== existing.stereotype) {\n      this.conflict(\n        `Element '${draft.id}' has conflicting stereotypes`,\n        draft.location,\n        existing.stereotypeLocation ?? existing.location\n      );\n    }\n    existing.shape ??= draft.shape;\n    existing.parentId ??= draft.parentId;\n    existing.parentLocation ??= draft.parentLocation;\n    existing.stereotype ??= draft.stereotype;\n    existing.stereotypeLocation ??= draft.stereotype ? draft.location : undefined;\n    pushUnique(existing.classes, draft.classes);\n    this.applyDeclarationMetadata(existing, draft.metadata);\n  }\n\n  private collectBoundary(\n    draft: DraftBoundary,\n    symbols: Map<string, SymbolOrigin>,\n    states: Map<string, BoundaryState>\n  ): void {\n    const origin = symbols.get(draft.id);\n    const draftLabel = generatedFrom({ generated: draft.generated, label: draft.label.text });\n    if (origin && origin.kind !== 'boundary') {\n      this.conflict(\n        `ID '${draft.id}' is declared as both ${origin.kind} and boundary`,\n        draft.location,\n        origin.location,\n        draftLabel,\n        generatedFrom(origin)\n      );\n    }\n    if (origin && (origin.generated || draft.generated)) {\n      this.conflict(\n        `Generated ID '${draft.id}' collides with another declaration`,\n        draft.location,\n        origin.location,\n        draftLabel,\n        generatedFrom(origin)\n      );\n    }\n    const existing = states.get(draft.id);\n    if (existing) {\n      if (existing.label.text !== draft.label.text || existing.label.type !== draft.label.type) {\n        this.conflict(\n          `Boundary '${draft.id}' has conflicting titles`,\n          draft.location,\n          existing.location\n        );\n      }\n      pushUnique(existing.classes, draft.classes);\n      return;\n    }\n    states.set(draft.id, {\n      id: draft.id,\n      label: draft.label,\n      location: draft.location,\n      generated: draft.generated,\n      classes: [...draft.classes],\n      styles: [],\n      members: [],\n    });\n    symbols.set(draft.id, {\n      kind: 'boundary',\n      location: draft.location,\n      generated: draft.generated,\n      label: draft.label.text,\n    });\n  }\n\n  private materializeElements(states: Map<string, ElementState>, first: Map<string, number>): void {\n    for (const state of [...states.values()].sort(\n      (a, b) => (first.get(a.id) ?? 0) - (first.get(b.id) ?? 0)\n    )) {\n      this.setElementModel(state);\n    }\n  }\n  private materializeBoundaries(\n    states: Map<string, BoundaryState>,\n    first: Map<string, number>\n  ): void {\n    for (const state of [...states.values()].sort(\n      (a, b) => (first.get(a.id) ?? 0) - (first.get(b.id) ?? 0)\n    )) {\n      this.model.systemBoundaries.set(state.id, {\n        id: state.id,\n        label: state.label.text,\n        labelType: state.label.type,\n        type: state.type ?? 'rect',\n        members: [],\n        classes: [...state.classes],\n        styles: [...state.styles],\n      });\n    }\n  }\n  private materializeJson(first: Map<string, number>): void {\n    for (const draft of [...this.jsonDrafts].sort(\n      (a, b) => (first.get(a.id) ?? 0) - (first.get(b.id) ?? 0)\n    )) {\n      this.model.jsonNodes.set(draft.id, {\n        id: draft.id,\n        value: draft.value,\n        propertyOrder: draft.propertyOrder,\n        classes: [...draft.classes],\n        styles: [],\n      });\n    }\n  }\n  private materializeRelationships(\n    symbols: Map<string, SymbolOrigin>,\n    states: Map<string, ElementState>,\n    first: Map<string, number>\n  ): Map<string, EdgeState> {\n    const edges = new Map<string, EdgeState>();\n    let anonymous = 0;\n    for (const draft of this.relationshipDrafts) {\n      const sourceKind = this.resolveEndpoint(draft.source, symbols, states, first);\n      const targetKind = this.resolveEndpoint(draft.target, symbols, states, first);\n      this.validateRelationship(draft, sourceKind, targetKind, symbols);\n      const id = draft.explicitId ?? `edge-${anonymous++}`;\n      const relationship: Relationship = {\n        id,\n        explicitId: Boolean(draft.explicitId),\n        source: draft.source.id,\n        target: draft.target.id,\n        type: draft.type,\n        arrowType: draft.arrowType,\n        ...(draft.label ? { label: draft.label.text, labelType: draft.label.type } : {}),\n        minlen: draft.minlen,\n        classes: [],\n        styles: [],\n        animate: false,\n      };\n      this.model.relationships.push(relationship);\n      edges.set(id, { draft, relationship });\n    }\n    this.model.relationshipCounter = anonymous;\n    return edges;\n  }\n  private resolveEndpoint(\n    endpoint: DraftEndpoint,\n    symbols: Map<string, SymbolOrigin>,\n    states: Map<string, ElementState>,\n    first: Map<string, number>\n  ): UsecaseSymbolKind {\n    if (endpoint.classesOnReference && !endpoint.declaration) {\n      throw new Error(\n        `Relationship endpoint '${endpoint.id}' uses ::: without declaring the node at ${locationText(endpoint.location)}`\n      );\n    }\n    const origin = symbols.get(endpoint.id);\n    if (origin) {\n      return origin.kind;\n    }\n    states.set(endpoint.id, {\n      kind: 'usecase',\n      id: endpoint.id,\n      label: endpoint.label,\n      location: endpoint.location,\n      generated: endpoint.generated,\n      shape: 'ellipse',\n      classes: [],\n    });\n    symbols.set(endpoint.id, {\n      kind: 'usecase',\n      location: endpoint.location,\n      generated: endpoint.generated,\n      label: endpoint.label.text,\n    });\n    this.recordFirst(first, endpoint.id, endpoint.location.span[0]);\n    return 'usecase';\n  }\n  private reorderElements(states: Map<string, ElementState>, first: Map<string, number>): void {\n    const actors = new Map(this.model.actors);\n    const useCases = new Map(this.model.useCases);\n    this.model.actors.clear();\n    this.model.useCases.clear();\n    for (const state of [...states.values()].sort(\n      (a, b) => (first.get(a.id) ?? 0) - (first.get(b.id) ?? 0)\n    )) {\n      if (!actors.has(state.id) && !useCases.has(state.id)) {\n        this.setElementModel(state);\n      }\n      const actor = actors.get(state.id) ?? this.model.actors.get(state.id);\n      const useCase = useCases.get(state.id) ?? this.model.useCases.get(state.id);\n      if (actor) {\n        this.model.actors.set(state.id, actor);\n      } else if (useCase) {\n        this.model.useCases.set(state.id, useCase);\n      }\n    }\n  }\n\n  private applyMetadataAssignments(\n    symbols: Map<string, SymbolOrigin>,\n    elements: Map<string, ElementState>,\n    boundaries: Map<string, BoundaryState>,\n    edges: Map<string, EdgeState>\n  ): void {\n    for (const assignment of this.metadataAssignments) {\n      const origin = symbols.get(assignment.target);\n      if (!origin) {\n        const inferred = this.inferMetadataKind(assignment.metadata);\n        throw new Error(\n          `Metadata target '${assignment.target}' is unresolved${inferred ? ` (metadata implies ${inferred})` : ''} at ${locationText(assignment.targetLocation)}`\n        );\n      }\n      if (origin.kind === 'actor' || origin.kind === 'usecase') {\n        this.applyStandaloneElementMetadata(elements.get(assignment.target)!, assignment.metadata);\n      } else if (origin.kind === 'boundary') {\n        const boundary = boundaries.get(assignment.target)!;\n        for (const property of assignment.metadata.properties) {\n          if (\n            property.key !== 'type' ||\n            (property.value !== 'rect' && property.value !== 'package')\n          ) {\n            this.invalidMetadata(assignment.target, origin.kind, property);\n          }\n          boundary.type = property.value;\n        }\n      } else if (origin.kind === 'edge') {\n        const edge = edges.get(assignment.target);\n        if (!edge) {\n          throw new Error(\n            `Metadata target '${assignment.target}' is not an explicit edge at ${locationText(assignment.targetLocation)}`\n          );\n        }\n        assignment.statement.kind = 'edgeMetadata';\n        assignment.statement.edges = [\n          {\n            id: assignment.target,\n            span: assignment.statement.span,\n            idSpan: assignment.targetLocation.span,\n            ...(assignment.statement.metadata ? { metadata: assignment.statement.metadata } : {}),\n          },\n        ];\n        delete assignment.statement.nodes;\n        for (const property of assignment.metadata.properties) {\n          if (property.key === 'animate' && typeof property.value === 'boolean') {\n            edge.relationship.animate = property.value;\n          } else if (\n            property.key === 'animation' &&\n            (property.value === 'fast' || property.value === 'slow')\n          ) {\n            edge.relationship.animation = property.value as Animation;\n            edge.relationship.animate = true;\n          } else {\n            this.invalidMetadata(assignment.target, origin.kind, property);\n          }\n        }\n      } else {\n        for (const property of assignment.metadata.properties) {\n          this.invalidMetadata(assignment.target, origin.kind, property);\n        }\n      }\n    }\n    for (const { relationship } of edges.values()) {\n      if (relationship.animation) {\n        relationship.animate = true;\n      }\n    }\n  }\n  private applyStandaloneElementMetadata(state: ElementState, metadata: DraftMetadata): void {\n    for (const property of metadata.properties) {\n      if (state.kind === 'actor') {\n        this.applyActorProperty(state, property, true);\n      } else if (property.key === 'business' && typeof property.value === 'boolean') {\n        state.business = property.value;\n      } else {\n        this.invalidMetadata(state.id, state.kind, property);\n      }\n    }\n  }\n  private applyDeclarationMetadata(state: ElementState, metadata?: DraftMetadata): void {\n    if (!metadata) {\n      return;\n    }\n    for (const property of metadata.properties) {\n      if (state.kind === 'actor') {\n        this.applyActorProperty(state, property, false);\n      } else if (property.key === 'business' && typeof property.value === 'boolean') {\n        if (state.business !== undefined && state.business !== property.value) {\n          this.conflict(\n            `Use case '${state.id}' has conflicting business metadata`,\n            property.location,\n            state.location\n          );\n        }\n        state.business = property.value;\n      } else {\n        this.invalidMetadata(state.id, state.kind, property);\n      }\n    }\n  }\n  private applyActorProperty(\n    state: ElementState,\n    property: DraftMetadataProperty,\n    replace: boolean\n  ): void {\n    if (\n      property.key === 'type' &&\n      (property.value === 'normal' || property.value === 'hollow' || property.value === 'awesome')\n    ) {\n      if (!replace && state.actorType !== undefined && state.actorType !== property.value) {\n        this.conflict(\n          `Actor '${state.id}' has conflicting type metadata`,\n          property.location,\n          state.location\n        );\n      }\n      state.actorType = property.value;\n    } else if (property.key === 'icon' && typeof property.value === 'string') {\n      if (!replace && state.icon !== undefined && state.icon !== property.value) {\n        this.conflict(\n          `Actor '${state.id}' has conflicting icon metadata`,\n          property.location,\n          state.location\n        );\n      }\n      state.icon = property.value;\n    } else if (property.key === 'business' && typeof property.value === 'boolean') {\n      if (!replace && state.business !== undefined && state.business !== property.value) {\n        this.conflict(\n          `Actor '${state.id}' has conflicting business metadata`,\n          property.location,\n          state.location\n        );\n      }\n      state.business = property.value;\n    } else {\n      this.invalidMetadata(state.id, state.kind, property);\n    }\n  }\n  private validateAndRefreshElements(states: Map<string, ElementState>): void {\n    for (const state of states.values()) {\n      const type: ActorType = state.icon ? 'icon' : (state.actorType ?? 'normal');\n      if (state.kind === 'actor') {\n        if (state.icon && state.actorType && state.actorType !== 'normal') {\n          throw new Error(\n            `Actor '${state.id}' cannot combine icon with type '${state.actorType}' at ${locationText(state.location)}`\n          );\n        }\n        if (state.business && (type === 'icon' || type === 'awesome')) {\n          throw new Error(\n            `Business actor '${state.id}' must use normal or hollow geometry at ${locationText(state.location)}`\n          );\n        }\n      } else if ((state.shape ?? 'ellipse') === 'rect' && state.business) {\n        throw new Error(\n          `Rectangular use case '${state.id}' cannot be a business use case at ${locationText(state.location)}`\n        );\n      }\n      this.setElementModel(state);\n    }\n  }\n  private refreshBoundaries(\n    boundaries: Map<string, BoundaryState>,\n    elements: Map<string, ElementState>\n  ): void {\n    for (const boundary of boundaries.values()) {\n      boundary.members.length = 0;\n    }\n    for (const draft of [...this.elements].sort(\n      (a, b) => a.location.span[0] - b.location.span[0]\n    )) {\n      if (!draft.parentId) {\n        continue;\n      }\n      const boundary = boundaries.get(draft.parentId);\n      if (!boundary) {\n        throw new Error(\n          `Parent boundary '${draft.parentId}' for '${draft.id}' is unresolved at ${locationText(draft.parentLocation ?? draft.location)}`\n        );\n      }\n      if (!boundary.members.includes(draft.id)) {\n        boundary.members.push(draft.id);\n      }\n    }\n    for (const state of elements.values()) {\n      if (state.parentId && !boundaries.has(state.parentId)) {\n        throw new Error(\n          `Parent boundary '${state.parentId}' for '${state.id}' is unresolved at ${locationText(state.parentLocation ?? state.location)}`\n        );\n      }\n    }\n    for (const state of boundaries.values()) {\n      const model = this.model.systemBoundaries.get(state.id)!;\n      model.type = state.type ?? 'rect';\n      model.members = [...state.members];\n      model.classes = [...state.classes];\n      model.styles = [...state.styles];\n    }\n  }\n  private materializeNotes(symbols: Map<string, SymbolOrigin>): void {\n    let counter = 0;\n    for (const draft of this.noteDrafts) {\n      const origin = symbols.get(draft.target);\n      if (!origin) {\n        throw new Error(\n          `Note target '${draft.target}' is unresolved at ${locationText(draft.targetLocation)}`\n        );\n      }\n      if (origin.kind !== 'actor' && origin.kind !== 'usecase') {\n        this.conflict(\n          `Note target '${draft.target}' must be an actor or use case, not ${origin.kind}`,\n          draft.targetLocation,\n          origin.location\n        );\n      }\n      const id = `note-${counter++}`;\n      this.model.notes.set(id, {\n        id,\n        target: draft.target,\n        label: draft.label.text,\n        labelType: draft.label.type,\n      });\n    }\n    this.model.noteCounter = counter;\n  }\n  private applyClassDefinitions(): void {\n    for (const definition of this.classDefinitions) {\n      for (const id of definition.ids) {\n        this.model.classDefs.set(id, { id, styles: [...definition.styles] });\n      }\n    }\n  }\n  private applyClassesAndStyles(\n    symbols: Map<string, SymbolOrigin>,\n    edges: Map<string, EdgeState>\n  ): void {\n    for (const assignment of this.classAssignments) {\n      for (const target of assignment.targets) {\n        pushUnique(\n          this.getStylable(target.id, symbols, edges, target.location).classes,\n          assignment.classes\n        );\n      }\n    }\n    for (const assignment of this.styleAssignments) {\n      this.getStylable(assignment.target, symbols, edges, assignment.location).styles.push(\n        ...assignment.styles\n      );\n    }\n  }\n  private getStylable(\n    id: string,\n    symbols: Map<string, SymbolOrigin>,\n    edges: Map<string, EdgeState>,\n    location: DraftLocation\n  ): { classes: string[]; styles: string[] } {\n    const kind = symbols.get(id)?.kind;\n    const target =\n      kind === 'actor'\n        ? this.model.actors.get(id)\n        : kind === 'usecase'\n          ? this.model.useCases.get(id)\n          : kind === 'boundary'\n            ? this.model.systemBoundaries.get(id)\n            : kind === 'json'\n              ? this.model.jsonNodes.get(id)\n              : kind === 'edge'\n                ? edges.get(id)?.relationship\n                : undefined;\n    if (!target) {\n      throw new Error(\n        `Class/style target '${id}' is unresolved or anonymous at ${locationText(location)}`\n      );\n    }\n    return target;\n  }\n  private validateRelationship(\n    draft: DraftRelationship,\n    sourceKind: UsecaseSymbolKind,\n    targetKind: UsecaseSymbolKind,\n    symbols: Map<string, SymbolOrigin>\n  ): void {\n    const allowed = (kind: UsecaseSymbolKind): boolean =>\n      kind === 'actor' || kind === 'usecase' || kind === 'json';\n    if (!allowed(sourceKind)) {\n      this.conflict(\n        `Relationship source '${draft.source.id}' cannot be ${sourceKind}`,\n        draft.source.location,\n        symbols.get(draft.source.id)!.location\n      );\n    }\n    if (!allowed(targetKind)) {\n      this.conflict(\n        `Relationship target '${draft.target.id}' cannot be ${targetKind}`,\n        draft.target.location,\n        symbols.get(draft.target.id)!.location\n      );\n    }\n    if (\n      (draft.type === 'include' || draft.type === 'extend') &&\n      (sourceKind !== 'usecase' || targetKind !== 'usecase')\n    ) {\n      throw new Error(\n        `${draft.type} relationship requires use-case endpoints at ${locationText(draft.location)}`\n      );\n    }\n    if (\n      draft.type === 'generalization' &&\n      ((sourceKind !== 'actor' && sourceKind !== 'usecase') || sourceKind !== targetKind)\n    ) {\n      throw new Error(\n        `Generalization requires actor-to-actor or use-case-to-use-case endpoints at ${locationText(draft.location)}`\n      );\n    }\n    if (\n      draft.type === 'association' &&\n      (sourceKind === 'json' || targetKind === 'json') &&\n      ![0, 1, 2].includes(draft.arrowType)\n    ) {\n      throw new Error(\n        `JSON relationship '${draft.source.id}' to '${draft.target.id}' permits only point, reversed-point, or markerless solid association at ${locationText(draft.location)}`\n      );\n    }\n  }\n  private setElementModel(state: ElementState): void {\n    if (state.kind === 'actor') {\n      const type: ActorType = state.icon ? 'icon' : (state.actorType ?? 'normal');\n      this.model.useCases.delete(state.id);\n      this.model.actors.set(state.id, {\n        id: state.id,\n        label: state.label.text,\n        labelType: state.label.type,\n        type,\n        ...(state.icon ? { icon: state.icon } : {}),\n        business: state.business ?? false,\n        ...(state.stereotype ? { stereotype: state.stereotype } : {}),\n        ...(state.parentId ? { parentId: state.parentId } : {}),\n        classes: [...state.classes],\n        styles: this.model.actors.get(state.id)?.styles ?? [],\n      });\n    } else {\n      this.model.actors.delete(state.id);\n      this.model.useCases.set(state.id, {\n        id: state.id,\n        label: state.label.text,\n        labelType: state.label.type,\n        shape: state.shape ?? 'ellipse',\n        business: state.business ?? false,\n        ...(state.stereotype ? { stereotype: state.stereotype } : {}),\n        ...(state.parentId ? { parentId: state.parentId } : {}),\n        classes: [...state.classes],\n        styles: this.model.useCases.get(state.id)?.styles ?? [],\n      });\n    }\n  }\n  private inferMetadataKind(metadata: DraftMetadata): string | undefined {\n    const possible = new Set(['actor', 'usecase', 'boundary', 'edge']);\n    for (const property of metadata.properties) {\n      if (property.key === 'icon') {\n        possible.clear();\n        possible.add('actor');\n      } else if (property.key === 'animate' || property.key === 'animation') {\n        possible.clear();\n        possible.add('edge');\n      } else if (property.key === 'type') {\n        possible.clear();\n        if (property.value === 'rect' || property.value === 'package') {\n          possible.add('boundary');\n        } else if (\n          property.value === 'normal' ||\n          property.value === 'hollow' ||\n          property.value === 'awesome'\n        ) {\n          possible.add('actor');\n        }\n      } else if (property.key === 'business') {\n        possible.delete('boundary');\n        possible.delete('edge');\n      } else {\n        return undefined;\n      }\n    }\n    return possible.size === 1 ? [...possible][0] : undefined;\n  }\n  private invalidMetadata(\n    id: string,\n    kind: UsecaseSymbolKind | 'actor' | 'usecase',\n    property: DraftMetadataProperty\n  ): never {\n    throw new Error(\n      `Metadata property '${property.key}' is invalid for ${kind} '${id}' at ${locationText(property.location)}`\n    );\n  }\n  private registerUnique(\n    symbols: Map<string, SymbolOrigin>,\n    id: string,\n    kind: UsecaseSymbolKind,\n    location: DraftLocation,\n    generated: boolean\n  ): void {\n    const previous = symbols.get(id);\n    if (previous) {\n      this.conflict(\n        `ID '${id}' is declared more than once (${previous.kind} and ${kind})`,\n        location,\n        previous.location,\n        undefined,\n        generatedFrom(previous)\n      );\n    }\n    symbols.set(id, { kind, location, generated });\n  }\n  private recordFirst(map: Map<string, number>, id: string, offset: number): void {\n    const previous = map.get(id);\n    if (previous === undefined || offset < previous) {\n      map.set(id, offset);\n    }\n  }\n  private conflict(\n    message: string,\n    current: DraftLocation,\n    previous: DraftLocation,\n    currentLabel?: string,\n    previousLabel?: string\n  ): never {\n    throw new Error(\n      `${message} at ${locationText(current)}${labelSuffix(currentLabel)}; previous declaration at ${locationText(previous)}${labelSuffix(previousLabel)}`\n    );\n  }\n}\n", "// cspell:ignore markerless\n\nimport type { CstNode, IToken } from 'chevrotain';\nimport { db } from '../usecaseDb.js';\nimport { ARROW_TYPE } from '../usecaseTypes.js';\nimport type {\n  ArrowType,\n  Direction,\n  GraphStatement,\n  LabelType,\n  NodeOccurrence,\n  RelationshipType,\n  Span,\n  UseCaseShape,\n} from '../usecaseTypes.js';\nimport { parseOrderedJsonObject } from './usecaseJson.js';\nimport {\n  UsecaseModelBuilder,\n  type DraftBoundary,\n  type DraftElement,\n  type DraftEndpoint,\n  type DraftJson,\n  type DraftLabel,\n  type DraftLocation,\n  type DraftMetadata,\n  type DraftMetadataProperty,\n  type DraftRelationship,\n} from './usecaseModelBuilder.js';\nimport { usecaseParser } from './usecase.parser.js';\n\ntype Ctx = Record<string, (CstNode | IToken)[]>;\ninterface ParsedStereotype {\n  value: string;\n  span: Span;\n}\ninterface ParsedClassSuffix {\n  classes: string[];\n  spans: Span[];\n}\ninterface ParsedActorItem {\n  id: string;\n  label: DraftLabel;\n  location: DraftLocation;\n  generated: boolean;\n  metadata?: DraftMetadata;\n  stereotype?: ParsedStereotype;\n  classes: string[];\n  classSpans: Span[];\n}\ninterface ParsedEntity extends ParsedActorItem {\n  shape?: UseCaseShape;\n  explicitDeclaration: boolean;\n}\ninterface ParsedArrow {\n  type: RelationshipType;\n  arrowType: ArrowType;\n  label?: DraftLabel;\n  minlen: number;\n}\ninterface ParsedRelationTail {\n  explicitId?: string;\n  explicitIdLocation?: DraftLocation;\n  arrow: ParsedArrow;\n  target: ParsedEntity;\n}\nconst BaseVisitor = usecaseParser.getBaseCstVisitorConstructor();\n\nclass UsecaseVisitor extends BaseVisitor {\n  private readonly builder = new UsecaseModelBuilder(db);\n  private source = '';\n  private parentBoundary: { id: string; location: DraftLocation } | undefined;\n  private anonymousEdge = 0;\n  private anonymousNote = 0;\n  constructor() {\n    super();\n    this.validateVisitor();\n  }\n  build(cst: CstNode, source: string): void {\n    this.source = source;\n    this.parentBoundary = undefined;\n    this.anonymousEdge = 0;\n    this.anonymousNote = 0;\n    this.builder.reset(source);\n    this.visit(cst);\n  }\n  start(ctx: Ctx): void {\n    const header = this.tokens(ctx, 'USECASE')[0];\n    const statements: GraphStatement[] = [];\n    for (const line of this.nodes(ctx, 'line')) {\n      statements.push(this.visit(line) as GraphStatement);\n    }\n    this.builder.setStatements(statements);\n    this.builder.finalize(this.tokenSpan(header));\n  }\n  line(ctx: Ctx): GraphStatement {\n    const child = this.firstNode(ctx, 'blankLine', 'commentLine', 'statement');\n    return this.wrap(child, this.visit(child) as GraphStatement);\n  }\n  statement(ctx: Ctx): GraphStatement {\n    return this.visit(\n      this.firstNode(\n        ctx,\n        'accTitleStatement',\n        'accDescrStatement',\n        'directionStatement',\n        'actorStatement',\n        'systemBoundaryStatement',\n        'noteStatement',\n        'jsonStatement',\n        'classDefStatement',\n        'classStatement',\n        'styleStatement',\n        'metadataAssignmentStatement',\n        'entityStatement'\n      )\n    ) as GraphStatement;\n  }\n  lineEnd(_ctx: Ctx): undefined {\n    return undefined;\n  }\n  blankLine(ctx: Ctx): GraphStatement {\n    return { kind: 'blank', span: this.tokenSpan(this.tokens(ctx, 'NEWLINE')[0]) };\n  }\n  commentLine(ctx: Ctx): GraphStatement {\n    return { kind: 'comment', span: this.tokenSpan(this.tokens(ctx, 'COMMENT')[0]) };\n  }\n  accTitleStatement(ctx: Ctx): GraphStatement {\n    const image = this.tokens(ctx, 'ACC_TITLE_LINE')[0].image;\n    this.builder.setAccTitle(image.slice(image.indexOf(':') + 1).trim());\n    return { kind: 'accTitle', span: [0, 0] };\n  }\n  accDescrStatement(ctx: Ctx): GraphStatement {\n    const line = this.tokens(ctx, 'ACC_DESCR_LINE')[0];\n    const block = this.tokens(ctx, 'ACC_DESCR_BLOCK')[0];\n    const description = line\n      ? line.image.slice(line.image.indexOf(':') + 1).trim()\n      : block.image.slice(block.image.indexOf('{') + 1, block.image.lastIndexOf('}')).trim();\n    this.builder.setAccDescription(description);\n    return { kind: 'accDescr', span: [0, 0] };\n  }\n\n  actorStatement(ctx: Ctx): GraphStatement {\n    const nodes = this.nodes(ctx, 'actorItem');\n    const items = nodes.map((node) => this.visit(node) as ParsedActorItem);\n    const relationNode = this.nodes(ctx, 'relationTail')[0];\n    const occurrences = items.map((item, index) => this.actorOccurrence(nodes[index], item, true));\n    for (const item of items) {\n      this.builder.addElement(this.actorDraft(item));\n    }\n    if (!relationNode) {\n      return { kind: 'node', span: [0, 0], nodes: occurrences };\n    }\n    const relation = this.visit(relationNode) as ParsedRelationTail;\n    if (relation.target.explicitDeclaration) {\n      this.builder.addElement(this.entityDraft(relation.target));\n    }\n    const draft = this.relationshipDraft(items[0], relation, this.nodeLocation(relationNode));\n    this.builder.addRelationship(draft);\n    const id = draft.explicitId ?? `edge-${this.anonymousEdge++}`;\n    occurrences.push(\n      this.entityOccurrence(\n        this.nodes(relationNode.children as Ctx, 'entityName')[0],\n        relation.target,\n        relation.target.explicitDeclaration\n      )\n    );\n    return {\n      kind: 'edge',\n      span: [0, 0],\n      nodes: occurrences,\n      edges: [\n        {\n          id,\n          span: [0, 0],\n          ...(draft.explicitIdLocation ? { idSpan: draft.explicitIdLocation.span } : {}),\n          ...(draft.label ? { labelSpan: draft.label.span } : {}),\n        },\n      ],\n    };\n  }\n  actorItem(ctx: Ctx): ParsedActorItem {\n    const base = this.visit(this.nodes(ctx, 'actorName')[0]) as ParsedActorItem;\n    const metadataNode = this.nodes(ctx, 'metadata')[0];\n    const stereotypeNode = this.nodes(ctx, 'stereotype')[0];\n    const classNode = this.nodes(ctx, 'classSuffix')[0];\n    const classes = classNode\n      ? (this.visit(classNode) as ParsedClassSuffix)\n      : { classes: [], spans: [] };\n    return {\n      ...base,\n      ...(metadataNode ? { metadata: this.visit(metadataNode) as DraftMetadata } : {}),\n      ...(stereotypeNode ? { stereotype: this.visit(stereotypeNode) as ParsedStereotype } : {}),\n      classes: classes.classes,\n      classSpans: classes.spans,\n    };\n  }\n  actorName(ctx: Ctx): ParsedActorItem {\n    const identifier = this.tokens(ctx, 'IDENTIFIER')[0];\n    const string = this.tokens(ctx, 'PLAIN_STRING')[0] ?? this.tokens(ctx, 'MARKDOWN_STRING')[0];\n    if (identifier) {\n      const labelNode = this.nodes(ctx, 'nodeLabel')[0];\n      const label = labelNode ? (this.visit(labelNode) as DraftLabel) : this.tokenLabel(identifier);\n      return {\n        id: identifier.image,\n        label,\n        location: this.tokenLocation(identifier),\n        generated: false,\n        classes: [],\n        classSpans: [],\n      };\n    }\n    const label = this.tokenLabel(string);\n    return {\n      id: this.generateId(label.text),\n      label,\n      location: this.tokenLocation(string),\n      generated: true,\n      classes: [],\n      classSpans: [],\n    };\n  }\n  actorDeclarationOnly(ctx: Ctx): GraphStatement {\n    const nodes = this.nodes(ctx, 'actorItem');\n    const items = nodes.map((node) => this.visit(node) as ParsedActorItem);\n    for (const item of items) {\n      this.builder.addElement(this.actorDraft(item));\n    }\n    return {\n      kind: 'node',\n      span: [0, 0],\n      nodes: items.map((item, index) => this.actorOccurrence(nodes[index], item, true)),\n    };\n  }\n\n  entityStatement(ctx: Ctx): GraphStatement {\n    const entityNodes = this.nodes(ctx, 'entityName');\n    const source = this.visit(entityNodes[0]) as ParsedEntity;\n    const relationNode = this.nodes(ctx, 'relationTail')[0];\n    if (!relationNode) {\n      source.explicitDeclaration = true;\n      source.shape ??= 'ellipse';\n      this.builder.addElement(this.entityDraft(source));\n      return {\n        kind: 'node',\n        span: [0, 0],\n        nodes: [this.entityOccurrence(entityNodes[0], source, true)],\n      };\n    }\n    if (source.explicitDeclaration) {\n      this.builder.addElement(this.entityDraft(source));\n    }\n    const relation = this.visit(relationNode) as ParsedRelationTail;\n    if (relation.target.explicitDeclaration) {\n      this.builder.addElement(this.entityDraft(relation.target));\n    }\n    const draft: DraftRelationship = {\n      source: this.endpoint(source),\n      target: this.endpoint(relation.target),\n      location: this.nodeLocation(relationNode),\n      ...(relation.explicitId\n        ? { explicitId: relation.explicitId, explicitIdLocation: relation.explicitIdLocation }\n        : {}),\n      ...relation.arrow,\n    };\n    this.builder.addRelationship(draft);\n    const id = draft.explicitId ?? `edge-${this.anonymousEdge++}`;\n    return {\n      kind: 'edge',\n      span: [0, 0],\n      nodes: [\n        this.entityOccurrence(entityNodes[0], source, source.explicitDeclaration),\n        this.entityOccurrence(\n          this.nodes(relationNode.children as Ctx, 'entityName')[0],\n          relation.target,\n          relation.target.explicitDeclaration\n        ),\n      ],\n      edges: [\n        {\n          id,\n          span: [0, 0],\n          ...(draft.explicitIdLocation ? { idSpan: draft.explicitIdLocation.span } : {}),\n          ...(draft.label ? { labelSpan: draft.label.span } : {}),\n        },\n      ],\n    };\n  }\n  entityName(ctx: Ctx): ParsedEntity {\n    const identifier = this.tokens(ctx, 'IDENTIFIER')[0];\n    const string = this.tokens(ctx, 'PLAIN_STRING')[0] ?? this.tokens(ctx, 'MARKDOWN_STRING')[0];\n    const labelNode = this.nodes(ctx, 'nodeLabel')[0];\n    const metadataNode = this.nodes(ctx, 'useCaseMetadata')[0];\n    const stereotypeNode = this.nodes(ctx, 'stereotype')[0];\n    const classNode = this.nodes(ctx, 'classSuffix')[0];\n    const classes = classNode\n      ? (this.visit(classNode) as ParsedClassSuffix)\n      : { classes: [], spans: [] };\n    if (identifier) {\n      const label = labelNode ? (this.visit(labelNode) as DraftLabel) : this.tokenLabel(identifier);\n      const shape = labelNode\n        ? this.tokens(ctx, 'LBRACKET').length\n          ? 'rect'\n          : 'ellipse'\n        : undefined;\n      return {\n        id: identifier.image,\n        label,\n        location: this.tokenLocation(identifier),\n        generated: false,\n        ...(shape ? { shape } : {}),\n        ...(metadataNode ? { metadata: this.visit(metadataNode) as DraftMetadata } : {}),\n        ...(stereotypeNode ? { stereotype: this.visit(stereotypeNode) as ParsedStereotype } : {}),\n        classes: classes.classes,\n        classSpans: classes.spans,\n        explicitDeclaration: Boolean(shape || metadataNode || stereotypeNode),\n      };\n    }\n    const label = this.tokenLabel(string);\n    return {\n      id: this.generateId(label.text),\n      label,\n      location: this.tokenLocation(string),\n      generated: true,\n      ...(metadataNode ? { metadata: this.visit(metadataNode) as DraftMetadata } : {}),\n      ...(stereotypeNode ? { stereotype: this.visit(stereotypeNode) as ParsedStereotype } : {}),\n      classes: classes.classes,\n      classSpans: classes.spans,\n      explicitDeclaration: Boolean(metadataNode || stereotypeNode),\n    };\n  }\n  nodeLabel(ctx: Ctx): DraftLabel {\n    const tokens = this.allTokens(ctx);\n    if (\n      tokens.length === 1 &&\n      (tokens[0].tokenType.name === 'PLAIN_STRING' ||\n        tokens[0].tokenType.name === 'MARKDOWN_STRING')\n    ) {\n      return this.tokenLabel(tokens[0]);\n    }\n    const span: Span = [\n      tokens[0].startOffset,\n      (tokens.at(-1)!.endOffset ?? tokens.at(-1)!.startOffset) + 1,\n    ];\n    return { text: this.source.slice(span[0], span[1]), type: 'text', span };\n  }\n  useCaseMetadata(ctx: Ctx): DraftMetadata {\n    return this.visit(this.nodes(ctx, 'metadata')[0]) as DraftMetadata;\n  }\n  relationTail(ctx: Ctx): ParsedRelationTail {\n    const explicitId = this.tokens(ctx, 'IDENTIFIER')[0];\n    return {\n      ...(explicitId\n        ? { explicitId: explicitId.image, explicitIdLocation: this.tokenLocation(explicitId) }\n        : {}),\n      arrow: this.visit(this.nodes(ctx, 'arrow')[0]) as ParsedArrow,\n      target: this.visit(this.nodes(ctx, 'entityName')[0]) as ParsedEntity,\n    };\n  }\n  arrow(ctx: Ctx): ParsedArrow {\n    return this.visit(\n      this.firstNode(\n        ctx,\n        'semanticRelation',\n        'forwardSolidOperator',\n        'backwardSolidOperator',\n        'markerlessSolidOperator',\n        'forwardCircleOperator',\n        'backwardCircleOperator',\n        'forwardCrossOperator',\n        'backwardCrossOperator'\n      )\n    ) as ParsedArrow;\n  }\n  edgeLabel(ctx: Ctx): DraftLabel {\n    return this.nodeLabel(ctx);\n  }\n  semanticRelation(ctx: Ctx): ParsedArrow {\n    if (this.tokens(ctx, 'GENERALIZATION').length) {\n      return { type: 'generalization', arrowType: ARROW_TYPE.SOLID_ARROW, minlen: 1 };\n    }\n    const type: RelationshipType = this.tokens(ctx, 'INCLUDE').length ? 'include' : 'extend';\n    const token = this.tokens(ctx, type === 'include' ? 'INCLUDE' : 'EXTEND')[0];\n    return {\n      type,\n      arrowType: ARROW_TYPE.SOLID_ARROW,\n      label: { text: type, type: 'text', span: this.tokenSpan(token) },\n      minlen: 1,\n    };\n  }\n\n  metadata(ctx: Ctx): DraftMetadata {\n    return {\n      properties: this.nodes(ctx, 'metadataProperty').map(\n        (node) => this.visit(node) as DraftMetadataProperty\n      ),\n      location: this.ctxLocation(ctx),\n    };\n  }\n  metadataProperty(ctx: Ctx): DraftMetadataProperty {\n    const tokens = this.allTokens(ctx).filter((token) => token.tokenType.name !== 'COLON');\n    const keyToken = tokens[0];\n    const valueToken = tokens[1];\n    const value =\n      valueToken.tokenType.name === 'TRUE'\n        ? true\n        : valueToken.tokenType.name === 'FALSE'\n          ? false\n          : this.decodePlain(valueToken);\n    const span: Span = [keyToken.startOffset, (valueToken.endOffset ?? valueToken.startOffset) + 1];\n    return {\n      key: this.decodePlain(keyToken),\n      value,\n      span,\n      keySpan: this.contentSpan(keyToken),\n      valueSpan: this.contentSpan(valueToken),\n      location: this.tokenLocation(keyToken),\n    };\n  }\n  metadataSeparator(_ctx: Ctx): undefined {\n    return undefined;\n  }\n\n  systemBoundaryStatement(ctx: Ctx): GraphStatement {\n    const boundary = this.visit(this.nodes(ctx, 'systemBoundaryName')[0]) as DraftBoundary;\n    const classNode = this.nodes(ctx, 'classSuffix')[0];\n    const classes = classNode\n      ? (this.visit(classNode) as ParsedClassSuffix)\n      : { classes: [], spans: [] };\n    boundary.classes = classes.classes;\n    this.builder.addBoundary(boundary);\n    const previous = this.parentBoundary;\n    this.parentBoundary = { id: boundary.id, location: boundary.location };\n    const contentNode = this.nodes(ctx, 'systemBoundaryContent')[0];\n    const children = contentNode ? (this.visit(contentNode) as GraphStatement[]) : [];\n    this.parentBoundary = previous;\n    const end = this.tokens(ctx, 'END')[0];\n    const metadataNode = this.nodes(ctx, 'metadata')[0];\n    const metadata = metadataNode ? (this.visit(metadataNode) as DraftMetadata) : undefined;\n    const statement: GraphStatement = {\n      kind: 'group',\n      span: [0, 0],\n      group: boundary.id,\n      idSpan: boundary.location.span,\n      titleSpan: boundary.label.span,\n      endSpan: this.tokenSpan(end),\n      classSpans: classes.spans,\n      ...(metadata\n        ? {\n            metadata: metadata.properties.map(({ key, span, keySpan, valueSpan }) => ({\n              key,\n              span,\n              keySpan,\n              valueSpan,\n            })),\n          }\n        : {}),\n      ...(children.length ? { children } : {}),\n    };\n    if (metadata) {\n      // Inline metadata resolves exactly like the standalone `id@{ \u2026 }` statement, so\n      // both forms share one validation path and a later statement can still override.\n      this.builder.addMetadataAssignment(boundary.id, boundary.location, metadata, statement);\n    }\n    return statement;\n  }\n  systemBoundaryName(ctx: Ctx): DraftBoundary {\n    const identifier = this.tokens(ctx, 'IDENTIFIER')[0];\n    if (identifier) {\n      const labelNode = this.nodes(ctx, 'nodeLabel')[0];\n      return {\n        id: identifier.image,\n        label: labelNode ? (this.visit(labelNode) as DraftLabel) : this.tokenLabel(identifier),\n        location: this.tokenLocation(identifier),\n        generated: false,\n        classes: [],\n      };\n    }\n    const token = this.tokens(ctx, 'PLAIN_STRING')[0] ?? this.tokens(ctx, 'MARKDOWN_STRING')[0];\n    const label = this.tokenLabel(token);\n    return {\n      id: this.generateId(label.text),\n      label,\n      location: this.tokenLocation(token),\n      generated: true,\n      classes: [],\n    };\n  }\n  systemBoundaryContent(ctx: Ctx): GraphStatement[] {\n    const children = [\n      ...this.nodes(ctx, 'blankLine'),\n      ...this.nodes(ctx, 'commentLine'),\n      ...this.nodes(ctx, 'boundaryElement'),\n    ].sort((a, b) => (a.location?.startOffset ?? 0) - (b.location?.startOffset ?? 0));\n    return children.map((node) => this.wrap(node, this.visit(node) as GraphStatement));\n  }\n  boundaryElement(ctx: Ctx): GraphStatement {\n    const actorNode = this.nodes(ctx, 'actorDeclarationOnly')[0];\n    if (actorNode) {\n      return this.visit(actorNode) as GraphStatement;\n    }\n    const entityNode = this.nodes(ctx, 'entityName')[0];\n    const entity = this.visit(entityNode) as ParsedEntity;\n    entity.explicitDeclaration = true;\n    entity.shape ??= 'ellipse';\n    this.builder.addElement(this.entityDraft(entity));\n    return { kind: 'node', span: [0, 0], nodes: [this.entityOccurrence(entityNode, entity, true)] };\n  }\n\n  metadataAssignmentStatement(ctx: Ctx): GraphStatement {\n    const target = this.visit(this.nodes(ctx, 'metadataAssignmentTarget')[0]) as {\n      id: string;\n      location: DraftLocation;\n    };\n    const metadata = this.visit(this.nodes(ctx, 'metadata')[0]) as DraftMetadata;\n    const statement: GraphStatement = {\n      kind: 'metadata',\n      span: [0, 0],\n      nodes: [{ id: target.id, span: target.location.span, idSpan: target.location.span }],\n      metadata: metadata.properties.map(({ key, span, keySpan, valueSpan }) => ({\n        key,\n        span,\n        keySpan,\n        valueSpan,\n      })),\n    };\n    this.builder.addMetadataAssignment(target.id, target.location, metadata, statement);\n    return statement;\n  }\n  metadataAssignmentTarget(ctx: Ctx): { id: string; location: DraftLocation } {\n    const token = this.allTokens(ctx)[0];\n    const label = this.tokenLabel(token);\n    return {\n      id: token.tokenType.name === 'IDENTIFIER' ? token.image : this.generateId(label.text),\n      location: this.tokenLocation(token),\n    };\n  }\n  noteStatement(ctx: Ctx): GraphStatement {\n    const target = this.tokens(ctx, 'IDENTIFIER')[0];\n    const label = this.visit(this.nodes(ctx, 'nodeLabel')[0]) as DraftLabel;\n    this.builder.addNote({\n      target: target.image,\n      targetLocation: this.tokenLocation(target),\n      label,\n      location: this.ctxLocation(ctx),\n    });\n    return {\n      kind: 'note',\n      span: [0, 0],\n      ref: `note-${this.anonymousNote++}`,\n      refSpan: label.span,\n      nodes: [{ id: target.image, span: this.tokenSpan(target), idSpan: this.tokenSpan(target) }],\n    };\n  }\n  stereotype(ctx: Ctx): ParsedStereotype {\n    const token = this.tokens(ctx, 'STEREOTYPE_TEXT')[0];\n    return { value: token.image.trim(), span: this.tokenSpan(token) };\n  }\n  classSuffix(ctx: Ctx): ParsedClassSuffix {\n    const tokens = this.tokens(ctx, 'IDENTIFIER');\n    return {\n      classes: tokens.map((token) => token.image),\n      spans: tokens.map((token) => this.tokenSpan(token)),\n    };\n  }\n\n  jsonStatement(ctx: Ctx): GraphStatement {\n    const start = this.tokens(ctx, 'JSON_DECLARATION_START')[0];\n    const literal = this.tokens(ctx, 'JSON_OBJECT_LITERAL')[0];\n    const match = /^json[\\t ]+(\\w+)/.exec(start.image)!;\n    const id = match[1];\n    // The match is anchored at the start of the image, so the id begins where the\n    // matched prefix ends. A text search would instead find ids like `o` or `son`\n    // inside the leading `json` keyword.\n    const relative = match[0].length - id.length;\n    const idLocation: DraftLocation = {\n      span: [start.startOffset + relative, start.startOffset + relative + id.length],\n      line: start.startLine ?? 1,\n      column: (start.startColumn ?? 1) + relative,\n    };\n    const parsed = parseOrderedJsonObject(\n      literal.image,\n      literal.startLine ?? 1,\n      literal.startColumn ?? 1\n    );\n    const classNode = this.nodes(ctx, 'classSuffix')[0];\n    const classes = classNode\n      ? (this.visit(classNode) as ParsedClassSuffix)\n      : { classes: [], spans: [] };\n    const draft: DraftJson = {\n      id,\n      value: parsed.value,\n      propertyOrder: parsed.propertyOrder,\n      location: idLocation,\n      classes: classes.classes,\n    };\n    this.builder.addJson(draft);\n    return {\n      kind: 'json',\n      span: [0, 0],\n      nodes: [\n        {\n          id,\n          span: idLocation.span,\n          idSpan: idLocation.span,\n          defines: true,\n          classSpans: classes.spans,\n        },\n      ],\n      classSpans: classes.spans,\n    };\n  }\n  directionStatement(ctx: Ctx): GraphStatement {\n    const token = this.allTokens(ctx).find((value) =>\n      ['TD', 'TB', 'BT', 'RL', 'LR'].includes(value.tokenType.name)\n    )!;\n    this.builder.setDirection(token.image as Direction);\n    return { kind: 'direction', span: [0, 0] };\n  }\n  classDefStatement(ctx: Ctx): GraphStatement {\n    const ids = this.tokens(ctx, 'IDENTIFIER');\n    const styles = this.visit(this.nodes(ctx, 'styles')[0]) as string[];\n    this.builder.addClassDef(\n      ids.map((token) => token.image),\n      styles\n    );\n    return { kind: 'classDef', span: [0, 0], ref: ids[0].image, refSpan: this.tokenSpan(ids[0]) };\n  }\n  classStatement(ctx: Ctx): GraphStatement {\n    const ids = this.tokens(ctx, 'IDENTIFIER');\n    let split = 1;\n    for (; split < ids.length; split++) {\n      const between = this.source.slice(\n        (ids[split - 1].endOffset ?? ids[split - 1].startOffset) + 1,\n        ids[split].startOffset\n      );\n      if (!between.includes(',')) {\n        break;\n      }\n    }\n    const targets = ids\n      .slice(0, split)\n      .map((token) => ({ id: token.image, location: this.tokenLocation(token) }));\n    const classes = ids.slice(split).map((token) => token.image);\n    this.builder.addClassAssignment(targets, classes);\n    return {\n      kind: 'classAssign',\n      span: [0, 0],\n      ref: classes[0],\n      refSpan: this.tokenSpan(ids[split]),\n      nodes: targets.map(({ id, location }) => ({\n        id,\n        span: location.span,\n        idSpan: location.span,\n      })),\n    };\n  }\n  styleStatement(ctx: Ctx): GraphStatement {\n    const target = this.tokens(ctx, 'IDENTIFIER')[0];\n    const styles = this.visit(this.nodes(ctx, 'styles')[0]) as string[];\n    this.builder.addStyleAssignment(target.image, this.tokenLocation(target), styles);\n    return {\n      kind: 'style',\n      span: [0, 0],\n      nodes: [{ id: target.image, span: this.tokenSpan(target), idSpan: this.tokenSpan(target) }],\n    };\n  }\n  styles(ctx: Ctx): string[] {\n    return this.nodes(ctx, 'styleValue').map((node) => this.visit(node) as string);\n  }\n  styleValue(ctx: Ctx): string {\n    const tokens = this.allTokens(ctx);\n    // WhiteSpace is Lexer.SKIPPED, so joining the token images would collapse the\n    // separators inside multi-word values such as `border:1px solid red`. Commas are\n    // consumed by the `styles` rule, so the source slice never spans two values.\n    const span: Span = [\n      tokens[0].startOffset,\n      (tokens.at(-1)!.endOffset ?? tokens.at(-1)!.startOffset) + 1,\n    ];\n    return this.source.slice(span[0], span[1]).replaceAll('\\\\,', ',');\n  }\n  styleComponent(ctx: Ctx): string {\n    return this.allTokens(ctx)\n      .map((token) => token.image)\n      .join('');\n  }\n\n  forwardSolidOperator(ctx: Ctx): ParsedArrow {\n    const token = this.tokens(ctx, 'FORWARD_SOLID')[0];\n    return {\n      type: 'association',\n      arrowType: ARROW_TYPE.SOLID_ARROW,\n      minlen: this.solidMinlen(token),\n    };\n  }\n  backwardSolidOperator(ctx: Ctx): ParsedArrow {\n    const token = this.tokens(ctx, 'BACKWARD_SOLID')[0];\n    const labelNode = this.nodes(ctx, 'edgeLabel')[0];\n    const lengthToken = labelNode ? this.tokens(ctx, 'MARKERLESS_SOLID').at(-1)! : token;\n    return {\n      type: 'association',\n      arrowType: ARROW_TYPE.BACK_ARROW,\n      minlen: this.solidMinlen(lengthToken),\n      ...(labelNode ? { label: this.visit(labelNode) as DraftLabel } : {}),\n    };\n  }\n  markerlessSolidOperator(ctx: Ctx): ParsedArrow {\n    const labelNode = this.nodes(ctx, 'edgeLabel')[0];\n    const tokens = this.allTokens(ctx);\n    if (!labelNode) {\n      return {\n        type: 'association',\n        arrowType: ARROW_TYPE.LINE_SOLID,\n        minlen: this.solidMinlen(this.tokens(ctx, 'MARKERLESS_SOLID')[0]),\n      };\n    }\n    const last = tokens.at(-1)!;\n    const arrowType =\n      last.tokenType.name === 'FORWARD_SOLID'\n        ? ARROW_TYPE.SOLID_ARROW\n        : last.tokenType.name === 'FORWARD_CIRCLE'\n          ? ARROW_TYPE.CIRCLE_ARROW\n          : last.tokenType.name === 'FORWARD_CROSS'\n            ? ARROW_TYPE.CROSS_ARROW\n            : ARROW_TYPE.LINE_SOLID;\n    return {\n      type: 'association',\n      arrowType,\n      label: this.visit(labelNode) as DraftLabel,\n      minlen:\n        arrowType === ARROW_TYPE.SOLID_ARROW || arrowType === ARROW_TYPE.LINE_SOLID\n          ? this.solidMinlen(last)\n          : 1,\n    };\n  }\n  forwardCircleOperator(_ctx: Ctx): ParsedArrow {\n    return { type: 'association', arrowType: ARROW_TYPE.CIRCLE_ARROW, minlen: 1 };\n  }\n  backwardCircleOperator(ctx: Ctx): ParsedArrow {\n    const labelNode = this.nodes(ctx, 'edgeLabel')[0];\n    return {\n      type: 'association',\n      arrowType: ARROW_TYPE.CIRCLE_ARROW_REVERSED,\n      minlen: 1,\n      ...(labelNode ? { label: this.visit(labelNode) as DraftLabel } : {}),\n    };\n  }\n  forwardCrossOperator(_ctx: Ctx): ParsedArrow {\n    return { type: 'association', arrowType: ARROW_TYPE.CROSS_ARROW, minlen: 1 };\n  }\n  backwardCrossOperator(ctx: Ctx): ParsedArrow {\n    const labelNode = this.nodes(ctx, 'edgeLabel')[0];\n    return {\n      type: 'association',\n      arrowType: ARROW_TYPE.CROSS_ARROW_REVERSED,\n      minlen: 1,\n      ...(labelNode ? { label: this.visit(labelNode) as DraftLabel } : {}),\n    };\n  }\n\n  private actorDraft(item: ParsedActorItem): DraftElement {\n    return {\n      id: item.id,\n      kind: 'actor',\n      label: item.label,\n      location: item.location,\n      generated: item.generated,\n      ...(this.parentBoundary\n        ? { parentId: this.parentBoundary.id, parentLocation: this.parentBoundary.location }\n        : {}),\n      ...(item.metadata ? { metadata: item.metadata } : {}),\n      ...(item.stereotype\n        ? { stereotype: item.stereotype.value, stereotypeSpan: item.stereotype.span }\n        : {}),\n      classes: item.classes,\n    };\n  }\n  private entityDraft(entity: ParsedEntity): DraftElement {\n    return {\n      id: entity.id,\n      kind: 'usecase',\n      label: entity.label,\n      location: entity.location,\n      generated: entity.generated,\n      ...(this.parentBoundary\n        ? { parentId: this.parentBoundary.id, parentLocation: this.parentBoundary.location }\n        : {}),\n      ...(entity.shape ? { shape: entity.shape } : {}),\n      ...(entity.metadata ? { metadata: entity.metadata } : {}),\n      ...(entity.stereotype\n        ? { stereotype: entity.stereotype.value, stereotypeSpan: entity.stereotype.span }\n        : {}),\n      classes: entity.classes,\n    };\n  }\n  private endpoint(\n    entity: ParsedEntity | ParsedActorItem,\n    declaration = (entity as ParsedEntity).explicitDeclaration ?? true\n  ): DraftEndpoint {\n    return {\n      id: entity.id,\n      label: entity.label,\n      location: entity.location,\n      generated: entity.generated,\n      declaration,\n      classesOnReference: entity.classes.length > 0,\n    };\n  }\n  private relationshipDraft(\n    source: ParsedActorItem,\n    tail: ParsedRelationTail,\n    location: DraftLocation\n  ): DraftRelationship {\n    return {\n      source: this.endpoint(source, true),\n      target: this.endpoint(tail.target),\n      location,\n      ...(tail.explicitId\n        ? { explicitId: tail.explicitId, explicitIdLocation: tail.explicitIdLocation }\n        : {}),\n      ...tail.arrow,\n    };\n  }\n  private actorOccurrence(node: CstNode, item: ParsedActorItem, defines: boolean): NodeOccurrence {\n    return {\n      id: item.id,\n      span: this.nodeSpan(node),\n      idSpan: item.location.span,\n      labelSpan: item.label.span,\n      ...(defines ? { defines: true } : {}),\n      ...(item.stereotype ? { stereotypeSpan: item.stereotype.span } : {}),\n      ...(item.metadata\n        ? {\n            metadata: item.metadata.properties.map(({ key, span, keySpan, valueSpan }) => ({\n              key,\n              span,\n              keySpan,\n              valueSpan,\n            })),\n          }\n        : {}),\n      ...(item.classSpans.length ? { classSpans: item.classSpans } : {}),\n    };\n  }\n  private entityOccurrence(node: CstNode, item: ParsedEntity, defines: boolean): NodeOccurrence {\n    return this.actorOccurrence(node, item, defines);\n  }\n  private wrap(node: CstNode, statement: GraphStatement): GraphStatement {\n    if (statement.kind === 'blank' || statement.kind === 'comment') {\n      return statement;\n    }\n    statement.span = this.nodeSpan(node);\n    for (const edge of statement.edges ?? []) {\n      edge.span = statement.span;\n    }\n    return statement;\n  }\n  private tokenLabel(token: IToken): DraftLabel {\n    const type: LabelType = token.tokenType.name === 'MARKDOWN_STRING' ? 'markdown' : 'text';\n    const trim = type === 'markdown' ? 2 : token.tokenType.name === 'PLAIN_STRING' ? 1 : 0;\n    const span = this.tokenSpan(token, trim);\n    return { text: this.source.slice(span[0], span[1]), type, span };\n  }\n  private decodePlain(token: IToken): string {\n    return token.tokenType.name === 'PLAIN_STRING' ? token.image.slice(1, -1) : token.image;\n  }\n  private contentSpan(token: IToken): Span {\n    return this.tokenSpan(\n      token,\n      token.tokenType.name === 'PLAIN_STRING'\n        ? 1\n        : token.tokenType.name === 'MARKDOWN_STRING'\n          ? 2\n          : 0\n    );\n  }\n  private generateId(label: string): string {\n    return label.replace(/\\W/g, '_');\n  }\n  private solidMinlen(token: IToken): number {\n    return Math.max(1, (token.image.match(/-/g)?.length ?? 2) - 1);\n  }\n  private nodeLocation(node: CstNode): DraftLocation {\n    const first = this.allTokens(node.children as Ctx)[0];\n    return {\n      span: this.nodeSpan(node),\n      line: first.startLine ?? 1,\n      column: first.startColumn ?? 1,\n    };\n  }\n  private ctxLocation(ctx: Ctx): DraftLocation {\n    const tokens = this.allTokens(ctx).filter(\n      (token) => token.tokenType.name !== 'NEWLINE' && token.tokenType.name !== 'EOF'\n    );\n    const first = tokens[0];\n    const last = tokens.at(-1)!;\n    return {\n      span: [\n        first.startOffset,\n        Math.min(\n          this.source.length,\n          (last.endOffset ?? last.startOffset + last.image.length - 1) + 1\n        ),\n      ],\n      line: first.startLine ?? 1,\n      column: first.startColumn ?? 1,\n    };\n  }\n  private tokenLocation(token: IToken): DraftLocation {\n    const trim =\n      token.tokenType.name === 'PLAIN_STRING'\n        ? 1\n        : token.tokenType.name === 'MARKDOWN_STRING'\n          ? 2\n          : 0;\n    return {\n      span: this.tokenSpan(token, trim),\n      line: token.startLine ?? 1,\n      column: (token.startColumn ?? 1) + trim,\n    };\n  }\n  private nodeSpan(node: CstNode): Span {\n    const tokens = this.allTokens(node.children as Ctx).filter(\n      (token) => token.tokenType.name !== 'NEWLINE' && token.tokenType.name !== 'EOF'\n    );\n    const first = tokens[0];\n    const last = tokens.at(-1);\n    if (!first || !last) {\n      throw new Error('Usecase CST node has no source token');\n    }\n    return [\n      first.startOffset,\n      Math.min(\n        this.source.length,\n        (last.endOffset ?? last.startOffset + last.image.length - 1) + 1\n      ),\n    ];\n  }\n  private tokenSpan(token: IToken, trim = 0): Span {\n    return [\n      token.startOffset + trim,\n      Math.min(\n        this.source.length,\n        (token.endOffset ?? token.startOffset + token.image.length - 1) + 1 - trim\n      ),\n    ];\n  }\n  private nodes(ctx: Ctx, key: string): CstNode[] {\n    return (ctx[key] ?? []).filter((item): item is CstNode => 'children' in item);\n  }\n  private tokens(ctx: Ctx, key: string): IToken[] {\n    return (ctx[key] ?? []).filter((item): item is IToken => 'tokenTypeIdx' in item);\n  }\n  private firstNode(ctx: Ctx, ...keys: string[]): CstNode {\n    for (const key of keys) {\n      const node = this.nodes(ctx, key)[0];\n      if (node) {\n        return node;\n      }\n    }\n    throw new Error(`Usecase CST is missing one of: ${keys.join(', ')}`);\n  }\n  private allTokens(ctx: Ctx): IToken[] {\n    const result: IToken[] = [];\n    for (const values of Object.values(ctx)) {\n      for (const value of values) {\n        if ('tokenTypeIdx' in value) {\n          result.push(value);\n        } else {\n          result.push(...this.allTokens(value.children as Ctx));\n        }\n      }\n    }\n    return result.sort((a, b) => a.startOffset - b.startOffset);\n  }\n}\nexport const usecaseVisitor = new UsecaseVisitor();\n", "import type { ParserDefinition } from '../../../diagram-api/types.js';\nimport { runChevrotainParse } from '../../common/parser/runChevrotainParse.js';\nimport { db } from '../usecaseDb.js';\nimport { usecaseLexer } from './usecase.lexer.js';\nimport { usecaseParser } from './usecase.parser.js';\nimport { usecaseVisitor } from './usecase.visitor.js';\n\nexport const parser: ParserDefinition = {\n  // eslint-disable-next-line @typescript-eslint/require-await -- normalizes synchronous parser errors into rejected promises\n  parse: async (input: string): Promise<void> => {\n    db.clear();\n    usecaseParser.input = [];\n    try {\n      runChevrotainParse(\n        {\n          diagramType: 'usecase',\n          lexer: usecaseLexer,\n          parser: usecaseParser,\n          entry: () => usecaseParser.start(),\n          visit: (cst) => usecaseVisitor.build(cst, input),\n        },\n        input\n      );\n    } catch (error) {\n      db.clear();\n      const parseError = usecaseParser.errors[0];\n      if (parseError) {\n        const { token } = parseError;\n        const start = Number.isFinite(token.startOffset) ? token.startOffset : input.length;\n        const end =\n          typeof token.endOffset === 'number' && Number.isFinite(token.endOffset)\n            ? token.endOffset + 1\n            : start;\n        const line = token.startLine ?? input.slice(0, start).split(/\\r\\n|\\r|\\n/).length;\n        const lineStart = Math.max(\n          input.lastIndexOf('\\n', start - 1),\n          input.lastIndexOf('\\r', start - 1)\n        );\n        const column = token.startColumn ?? start - lineStart;\n        const message = error instanceof Error ? error.message : String(error);\n        throw new Error(`${message} at line ${line}, column ${column} [${start},${end})`);\n      }\n      throw error;\n    }\n  },\n};\n", "import { select } from 'd3';\nimport { getConfig } from '../../diagram-api/diagramAPI.js';\nimport type { DrawDefinition, SVG } 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 { markdownToLines } from '../../rendering-util/handle-markdown-text.js';\nimport { setupViewPortForSVG } from '../../rendering-util/setupViewPortForSVG.js';\nimport type { UsecaseLayoutData, UsecaseLayoutEdge, UsecaseLayoutNode } from './usecaseTypes.js';\nimport utils from '../../utils.js';\nimport type { UsecaseDB } from './usecaseTypes.js';\n\nexport const USECASE_MARKERS: UsecaseLayoutData['markers'] = [\n  'point',\n  'circle',\n  'cross',\n  'extension',\n];\n\nconst ACTOR_SHAPES: Record<string, true> = {\n  usecaseActor: true,\n  usecaseActorHollow: true,\n  usecaseActorAwesome: true,\n  usecaseActorIcon: true,\n};\n\nexport const usecaseDomId = (diagramId: string, modelId: string): string => {\n  const [safeDiagramId, safeModelId] = [diagramId, modelId].map(\n    (value) => value.replace(/[^\\w-]+/g, '_').replace(/^_+|_+$/g, '') || 'element'\n  );\n  return `usecase-${safeDiagramId}-${safeModelId}`;\n};\n\nconst usecaseNodeDomId = (modelId: string): string =>\n  `usecase-${modelId.replace(/[^\\w-]+/g, '_').replace(/^_+|_+$/g, '') || 'element'}`;\n\nconst getAccessibleLabel = (label: string, labelType?: string): string => {\n  if (labelType !== 'markdown') {\n    return label;\n  }\n  return markdownToLines(label)\n    .map((line) => line.map((word) => word.content).join(' '))\n    .join('\\n');\n};\n\nexport const getUsecaseNodeAccessibleName = (node: UsecaseLayoutNode): string => {\n  const label = getAccessibleLabel(node.label ?? node.id, node.labelType);\n  if (ACTOR_SHAPES[node.shape]) {\n    const variant = node.actorType && node.actorType !== 'normal' ? `${node.actorType} ` : '';\n    const business = node.business ? 'business ' : '';\n    const stereotype = node.stereotype ? `, stereotype ${node.stereotype}` : '';\n    return `${business}${variant}actor ${label}${stereotype}`;\n  }\n  if (node.shape === 'note') {\n    return `Note for ${node.noteTargetLabel ?? node.noteTarget ?? ''}: ${label}`;\n  }\n  if (node.shape === 'usecaseJsonTable') {\n    const rows = (node.jsonRows ?? [])\n      .map((row) => `${row.accessibleKey}: ${row.value}`)\n      .join('; ');\n    return rows ? `${label}: ${rows}` : label;\n  }\n  const stereotype = node.stereotype ? `, stereotype ${node.stereotype}` : '';\n  return `${node.business ? 'business ' : ''}use case ${label}${stereotype}`;\n};\n\nexport const getUsecaseBoundaryAccessibleName = (\n  boundary: Extract<UsecaseLayoutData['nodes'][number], { isGroup: true }>\n): string =>\n  `${boundary.boundaryType} system boundary ${getAccessibleLabel(\n    boundary.label ?? boundary.id,\n    boundary.labelType\n  )}`;\n\nexport const getUsecaseEdgeAccessibleName = (edge: UsecaseLayoutEdge): string => {\n  if (edge.relationshipType === 'note') {\n    return '';\n  }\n  const relation =\n    edge.relationshipType === 'association' && edge.label\n      ? `association ${getAccessibleLabel(edge.label, edge.labelType)}`\n      : edge.relationshipType;\n  return `${relation} from ${edge.sourceLabel} to ${edge.targetLabel}`;\n};\n\nconst escapePlainLabel = (label: string): string =>\n  label.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n\nconst escapeMarkdownMarkers = (label: string): string => label.replace(/([*[\\\\\\]_`])/g, '\\\\$1');\n\ninterface UsecaseAccessibleNames {\n  nodes: ReadonlyMap<string, string>;\n  edges: ReadonlyMap<string, string>;\n}\n\ntype UsecaseRenderingNode = UsecaseLayoutData['nodes'][number] & {\n  hasFoldedStereotype?: boolean;\n};\n\nexport const prepareUsecaseLayoutData = (\n  data: UsecaseLayoutData,\n  diagramId: string\n): UsecaseLayoutData => {\n  data.diagramId = diagramId;\n  data.markers = [...USECASE_MARKERS];\n  for (const node of data.nodes) {\n    const renderingNode = node as UsecaseRenderingNode;\n    renderingNode.domId = usecaseNodeDomId(node.id);\n    if (node.label !== undefined && node.labelType === 'text') {\n      node.label = escapePlainLabel(node.label);\n    }\n    if (node.stereotype) {\n      node.stereotype = escapePlainLabel(node.stereotype);\n    }\n    if (!node.isGroup && node.shape === 'usecaseJsonTable') {\n      node.jsonRows = node.jsonRows?.map((row) => ({\n        ...row,\n        key: escapePlainLabel(row.key),\n        value: escapePlainLabel(row.value),\n      }));\n    }\n    if (\n      !node.isGroup &&\n      (node.shape === 'usecaseEllipse' || node.shape === 'rect') &&\n      node.stereotype\n    ) {\n      const label = node.label ?? escapePlainLabel(node.id);\n      node.label = `\u00AB${escapeMarkdownMarkers(node.stereotype)}\u00BB<br/>${\n        node.labelType === 'text' ? escapeMarkdownMarkers(label) : label\n      }`;\n      node.labelType = 'markdown';\n      renderingNode.hasFoldedStereotype = true;\n      delete node.stereotype;\n    }\n  }\n  for (const edge of data.edges) {\n    if (edge.label !== undefined && edge.labelType === 'text') {\n      edge.label = escapePlainLabel(edge.label);\n    }\n  }\n  return data;\n};\n\nconst annotateUsecaseElements = (\n  svg: SVG,\n  data: UsecaseLayoutData,\n  accessibleNames: UsecaseAccessibleNames\n) => {\n  for (const node of data.nodes) {\n    const stableDomId =\n      typeof node.domId === 'string' ? node.domId : usecaseDomId(data.diagramId, node.id);\n    const element = svg.select<SVGGElement>(`#${stableDomId}`);\n    const kind = node.isGroup\n      ? 'boundary'\n      : ACTOR_SHAPES[node.shape]\n        ? 'actor'\n        : node.shape === 'note'\n          ? 'note'\n          : node.shape === 'usecaseJsonTable'\n            ? 'json'\n            : 'usecase';\n    const accessibleName = accessibleNames.nodes.get(node.id) ?? node.id;\n    element\n      .attr('data-usecase-id', node.id)\n      .attr('data-usecase-kind', kind)\n      .attr('role', 'img')\n      .attr('aria-label', accessibleName);\n    if (\n      !node.isGroup &&\n      (node.shape === 'usecaseEllipse' || node.shape === 'rect') &&\n      'hasFoldedStereotype' in node &&\n      node.hasFoldedStereotype === true\n    ) {\n      const root = element.node();\n      const htmlLabel = root?.querySelector('.nodeLabel');\n      const container = htmlLabel?.querySelector('p') ?? htmlLabel;\n      const firstLabelNode = container?.firstChild;\n      if (container && firstLabelNode?.nodeType === 3) {\n        const stereotype = container.ownerDocument.createElement('span');\n        stereotype.className = 'usecase-stereotype';\n        container.insertBefore(stereotype, firstLabelNode);\n        stereotype.appendChild(firstLabelNode);\n      } else {\n        root\n          ?.querySelector('.label tspan tspan, .label tspan')\n          ?.classList.add('usecase-stereotype');\n      }\n    }\n  }\n\n  // Index the edges by id so the paths are matched in a single pass instead of\n  // re-scanning every path for each edge.\n  const edgesById = new Map(data.edges.map((edge) => [edge.id, edge]));\n  svg.selectAll<SVGPathElement, unknown>('path[data-et=\"edge\"]').each(function () {\n    const edge = edgesById.get(this.getAttribute('data-id') ?? '');\n    if (!edge) {\n      return;\n    }\n    const path = select(this);\n    path\n      .attr('id', usecaseDomId(data.diagramId, edge.id))\n      .attr('data-usecase-id', edge.id)\n      .attr('data-usecase-kind', edge.internal ? 'note-connector' : 'relationship');\n    if (edge.internal) {\n      path.attr('aria-hidden', 'true');\n    } else {\n      path.attr('role', 'img').attr('aria-label', accessibleNames.edges.get(edge.id) ?? edge.id);\n    }\n  });\n};\n\n/**\n * Publishes the configured use-case fonts on the diagram root as the CSS custom properties that\n * `styles.ts` reads through `var(--mermaid-usecase-*, <fallback>)`.\n *\n * This has to be applied twice. The labels are measured while `render` runs, and the measured\n * width is frozen onto each label `foreignObject`; the fonts therefore have to be in force by\n * then. `setupViewPortForSVG` then runs `configureSvgSize`, which assigns the whole `style`\n * attribute (`max-width: \u2026`) and so wipes the custom properties again. Without the second call\n * the finished diagram repaints every label in the fallback font \u2014 a different typeface from the\n * one it was measured in \u2014 and the wider glyphs spill past the fixed `foreignObject` width, where\n * they are clipped at the trailing edge.\n */\nconst applyUsecaseFonts = (svg: SVG, data: UsecaseLayoutData): void => {\n  svg\n    .style('--mermaid-usecase-actor-font-size', `${data.actorFontSize}px`)\n    .style('--mermaid-usecase-actor-font-family', data.actorFontFamily)\n    .style('--mermaid-usecase-actor-font-weight', data.actorFontWeight)\n    .style('--mermaid-usecase-font-size', `${data.usecaseFontSize}px`)\n    .style('--mermaid-usecase-font-family', data.usecaseFontFamily)\n    .style('--mermaid-usecase-font-weight', data.usecaseFontWeight);\n};\n\n/**\n * Main draw function using unified rendering system\n */\nconst draw: DrawDefinition = async (_text, id, _version, diag) => {\n  log.info('Drawing usecase diagram (unified)', id);\n  const { layout } = getConfig();\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  const usecaseDb = diag.db as UsecaseDB;\n  const data4Layout = usecaseDb.getData();\n  const accessibleLabels = new Map(\n    data4Layout.nodes.map((node) => [\n      node.id,\n      getAccessibleLabel(node.label ?? node.id, node.labelType),\n    ])\n  );\n  const accessibleNames: UsecaseAccessibleNames = {\n    nodes: new Map(\n      data4Layout.nodes.map((node) => [\n        node.id,\n        node.isGroup\n          ? getUsecaseBoundaryAccessibleName(node)\n          : getUsecaseNodeAccessibleName(\n              node.shape === 'note'\n                ? { ...node, noteTargetLabel: accessibleLabels.get(node.noteTarget ?? '') }\n                : node\n            ),\n      ])\n    ),\n    edges: new Map(\n      data4Layout.edges.map((edge) => [\n        edge.id,\n        getUsecaseEdgeAccessibleName({\n          ...edge,\n          sourceLabel: accessibleLabels.get(edge.source) ?? edge.sourceLabel,\n          targetLabel: accessibleLabels.get(edge.target) ?? edge.targetLabel,\n        }),\n      ])\n    ),\n  };\n  const svg = getDiagramElement(id, data4Layout.config.securityLevel);\n\n  data4Layout.layoutAlgorithm = getRegisteredLayoutAlgorithm(layout);\n  prepareUsecaseLayoutData(data4Layout, id);\n\n  // Set before `render` so the labels are measured in the fonts they will be painted in.\n  applyUsecaseFonts(svg, data4Layout);\n\n  await render(data4Layout, svg);\n  annotateUsecaseElements(svg, data4Layout, accessibleNames);\n\n  const padding = data4Layout.diagramPadding;\n  utils.insertTitle(\n    svg,\n    'usecaseDiagramTitleText',\n    0, // Default title top margin\n    usecaseDb.getDiagramTitle?.() ?? ''\n  );\n  setupViewPortForSVG(svg, padding, 'usecaseDiagram', data4Layout.useMaxWidth);\n  // Restore the fonts that `setupViewPortForSVG` just dropped from the `style` attribute.\n  applyUsecaseFonts(svg, data4Layout);\n};\n\nexport const renderer = { draw };\n", "import * as configApi from '../../config.js';\nimport type { DiagramStylesProvider } from '../../diagram-api/types.js';\nimport { hasPalette, isColorTheme, paletteSlotCount, safeLook } from '../common/colorThemeGate.js';\n\ninterface UsecaseStyleOptions {\n  actorBkg?: string;\n  actorBorder?: string;\n  actorTextColor?: string;\n  clusterBkg: string;\n  clusterBorder: string;\n  edgeLabelBackground: string;\n  fontFamily: string;\n  lineColor: string;\n  mainBkg: string;\n  nodeBorder?: string;\n  noteBkgColor: string;\n  noteBorderColor: string;\n  noteTextColor: string;\n  primaryColor: string;\n  primaryTextColor: string;\n  titleColor?: string;\n  theme?: string;\n  look?: string;\n  borderColorArray?: string[];\n  bkgColorArray?: string[];\n  usecaseActorBkg?: string;\n  usecaseActorBorder?: string;\n  usecaseBkg?: string;\n  usecaseBorder?: string;\n  usecaseBoundaryBkg?: string;\n  usecaseBoundaryBorder?: string;\n  usecaseIncludeLine?: string;\n  usecaseExtendLine?: string;\n}\n\n/**\n * One colour per kind of element, rather than a slot per element.\n *\n * These are the values the `role` scheme paints with, and they are the default because\n * colour that tracks *type* survives editing: inserting a use case in the middle of a\n * diagram leaves every other element's colour alone, so diffs, documentation screenshots\n * and visual baselines stay stable. In a use case diagram the shape already encodes the\n * type -- stick figure, ellipse, frame -- so rotating hue across ellipses would add a\n * second encoding that carries no information, and a fixed set of tokens can be tuned for\n * contrast once per theme instead of being a per-instance lottery.\n *\n * Every fallback ends at the value the stylesheet used before these tokens existed, so a\n * theme that sets none of them renders exactly as it did. A user `themeVariables` override\n * lands on the options object whether or not the active theme declares the token.\n */\nconst roleColors = (options: UsecaseStyleOptions) => ({\n  actorBkg: options.usecaseActorBkg ?? options.actorBkg ?? options.mainBkg,\n  actorBorder: options.usecaseActorBorder ?? options.actorBorder ?? options.primaryColor,\n  bkg: options.usecaseBkg ?? options.mainBkg,\n  border: options.usecaseBorder ?? options.nodeBorder ?? options.primaryColor,\n  boundaryBkg: options.usecaseBoundaryBkg ?? options.clusterBkg,\n  boundaryBorder: options.usecaseBoundaryBorder ?? options.clusterBorder,\n  includeLine: options.usecaseIncludeLine ?? options.lineColor,\n  extendLine: options.usecaseExtendLine ?? options.lineColor,\n});\n\n/**\n * Cycling per-item colour under the `redux-color` / `redux-dark-color` themes. Actors, use\n * cases and system boundaries all take a slot from one cycle assigned in `usecaseDb`;\n * notes and JSON tables are never stamped, so they keep the theme's fixed colours.\n *\n * Every selector here is scoped to a `usecase-` class rather than a bare `.node`. `usecaseDb`\n * hands a slot only to the three roles above, and the shapes stamp only what it assigned, so\n * a note or JSON table carries no `data-color-id` to match -- the scoping keeps these rules\n * narrow rather than being what makes them miss.\n *\n * Nothing is `!important`: the shapes put user `classDef` / `style` declarations in an\n * inline `style` attribute, which has to keep winning over the theme palette.\n */\nconst genColor: DiagramStylesProvider = (options) => {\n  const { theme, bkgColorArray, borderColorArray } = options;\n  // Both halves of the gate: a colour theme *and* a non-empty palette. An empty palette is\n  // reachable through a `themeVariables` override, and would otherwise leave every slot\n  // emitting `stroke: undefined`.\n  if (!isColorTheme(theme, borderColorArray)) {\n    return '';\n  }\n  // System boundaries take a palette slot under both schemes; actors and use cases only\n  // under `rotate`. Read from `getConfig()` rather than `options`, which carries theme\n  // variables and not the per-diagram config; `requirement` reads its palette the same way.\n  const rotate = configApi.getConfig().usecase?.colorScheme === 'rotate';\n  // `look` is validated before it reaches the selector -- see `safeLook`.\n  const look = safeLook(options.look);\n  // Every rule below is scoped to `[data-look=\"${look}\"]`, and one look applies to a whole\n  // diagram, so this flag decides the rules for exactly the nodes they can match.\n  const isHandDrawn = look === 'handDrawn';\n  const hasBkgColors = hasPalette(bkgColorArray);\n  let sections = '';\n\n  // One rule per slot that can actually be stamped. `stampColorSlot` assigns\n  // `colorIndex % borderColorArray.length`, so deriving the bound from the same length is\n  // what keeps the emitted rules and the stamped ids from disagreeing.\n  for (let i = 0; i < paletteSlotCount(borderColorArray); i++) {\n    const borderColor = borderColorArray[i];\n    // The background palette is a separate array that may be shorter, so it still wraps --\n    // guarded by `hasBkgColors`, since `i % 0` is NaN and `[][NaN]` is `undefined`.\n    // `redux-dark-color` is the live no-background case: it colours outlines only.\n    const fill = hasBkgColors ? `fill: ${bkgColorArray[i % bkgColorArray.length]};` : '';\n    const slot = `[data-look=\"${look}\"][data-color-id=\"color-${i}\"]`;\n\n    /* System boundaries, in both schemes. A boundary is a container, and numbering the\n       containers is the one place a counter carries information rather than noise: the slot\n       says which group a thing belongs to, and it stays put as long as the boundary order\n       does. Same reasoning, and the same declaration-index numbering, as flowchart\n       subgraphs.\n\n       Descends into the handDrawn paths as flowchart does, which collapses a handDrawn\n       boundary into a solid hachure block -- a handDrawn flowchart subgraph under these\n       themes already renders that way, and diverging here would be the odder result. */\n    sections += `\n\n    & ${slot}.system-boundary rect.boundary-body,\n    & ${slot}.system-boundary rect.boundary-tab,\n    & ${slot}.system-boundary .boundary-body path,\n    & ${slot}.system-boundary .boundary-tab path {\n      stroke: ${borderColor};\n      ${fill}\n    }\n    `;\n\n    if (!rotate) {\n      continue;\n    }\n\n    sections += `\n\n    /* Use case bodies -- \\`.usecase-element\\` covers the ellipse form, the \\`[Rect]\\` form and\n       the business variant.\n\n       Element selectors only, never a bare \\`path\\`. Under the handDrawn look roughjs draws\n       the body as a *pair* of paths, an outline stroked in the border colour and a hachure\n       fill stroked in the background colour, with no class to tell them apart. Stroking\n       both repaints the fill lines as border colour and the shape collapses into a solid\n       block -- which is what \\`.usecase-element path\\` did. So handDrawn bodies keep the\n       theme's uniform colours, exactly as handDrawn flowchart nodes do. */\n    & ${slot}.usecase-element ellipse,\n    & ${slot}.usecase-element rect {\n      stroke: ${borderColor};\n      ${fill}\n    }\n\n    /* The business marker is a single classed path, so it can be reached safely by name --\n       without it the marker keeps the uniform border beside a palette-coloured body. No\n       \\`fill\\`: the marker is drawn with \\`fill=\"none\"\\` and has to stay that way. */\n    & ${slot}.usecase-element .usecase-business-marker {\n      stroke: ${borderColor};\n    }\n\n    /* Actor glyphs, mirroring the uniform rule further down. The fill goes on the glyph\n       group, never on its children, so the hollow variant's own \\`fill=\"none\"\\` keeps\n       winning and a hollow actor stays hollow. Same reason as above for not descending\n       into the handDrawn paths. */\n    & ${slot}.usecase-actor .usecase-actor-shape,\n    & ${slot}.usecase-actor .usecase-actor-hollow,\n    & ${slot}.usecase-actor .usecase-actor-awesome,\n    & ${slot}.usecase-actor .usecase-actor-icon {\n      stroke: ${borderColor};\n      ${fill}\n    }\n${\n  isHandDrawn\n    ? ''\n    : `\n    /* The group rule above reaches the glyph by inheritance, which the neo look breaks: it\n       ships a \\`[data-look=\"neo\"].node path { stroke }\\` rule that hits the glyph's own paths,\n       and a value set directly on the child always beats one inherited from the parent,\n       whatever the parent rule's specificity. So name the children too.\n\n       Emitted for every look *except* handDrawn, where roughjs draws the glyph as an\n       outline path plus a hachure fill path stroked in the fill colour, indistinguishable\n       in CSS -- stroking both turns a hollow actor into a solid disc. Deliberately no\n       \\`fill\\` either way, so the hollow variant's own \\`fill=\"none\"\\` keeps winning. */\n    & ${slot}.usecase-actor .usecase-actor-glyph path,\n    & ${slot}.usecase-actor .usecase-actor-glyph circle {\n      stroke: ${borderColor};\n    }\n`\n}\n    `;\n  }\n  return sections;\n};\n\nconst getStyles: DiagramStylesProvider = (options: UsecaseStyleOptions) => {\n  const role = roleColors(options);\n  // Under handDrawn the glyph is a roughjs outline path plus a hachure fill path stroked in\n  // the fill colour, with nothing in CSS to tell them apart -- so the descendant rule below\n  // is emitted for every other look only. See `genColor` for the same split.\n  const isHandDrawn = safeLook(options.look) === 'handDrawn';\n  return `\n  ${genColor(options)}\n  & .usecase-actor {\n    color: ${options.actorTextColor ?? options.primaryTextColor};\n  }\n\n  & .usecase-actor-shape,\n  & .usecase-actor-hollow,\n  & .usecase-actor-awesome,\n  & .usecase-actor-icon {\n    fill: ${role.actorBkg};\n    stroke: ${role.actorBorder};\n    stroke-width: 2px;\n  }\n${\n  isHandDrawn\n    ? ''\n    : `\n  /* The rule above colours the glyph group and lets its children inherit, which the neo\n     look breaks: it ships a \\`[data-look=\"neo\"].node path { stroke }\\` rule that lands on\n     the glyph's own paths, and a value set directly on a child always beats one inherited\n     from its parent, whatever the parent rule's specificity. Since neo is the default look,\n     without this every actor renders in the node border colour rather than the actor\n     colour the rule above asks for.\n\n     \\`.node\\` is in the selector to outrank that neo rule rather than tie with it: both\n     would otherwise be one attribute plus one class plus one element, leaving the winner to\n     depend on which stylesheet is concatenated last.\n\n     Stroke only: the hollow variant's own \\`fill=\"none\"\\` has to keep winning. */\n  & .node.usecase-actor .usecase-actor-glyph path,\n  & .node.usecase-actor .usecase-actor-glyph circle {\n    stroke: ${role.actorBorder};\n  }\n`\n}\n  & .usecase-actor .nodeLabel,\n  & .actor-label {\n    color: ${options.actorTextColor ?? options.primaryTextColor};\n    fill: ${options.actorTextColor ?? options.primaryTextColor};\n    font-family: var(--mermaid-usecase-actor-font-family, ${options.fontFamily});\n    font-size: var(--mermaid-usecase-actor-font-size, 14px);\n    font-weight: var(--mermaid-usecase-actor-font-weight, normal);\n  }\n\n  & .usecase-element ellipse,\n  & .usecase-element rect,\n  & .usecase-business ellipse,\n  & .usecase-business rect {\n    fill: ${role.bkg};\n    stroke: ${role.border};\n    stroke-width: 2px;\n  }\n${\n  isHandDrawn\n    ? ''\n    : `\n  /* The same interception the actor glyph hits, one element down: neo ships\n     \\`[data-look=\"neo\"].node rect { stroke: nodeBorder }\\`, which outranks the plain\n     \\`.usecase-element rect\\` above, so a use case written in the \\`[Rect]\\` form kept the node\n     border colour while its ellipse siblings took the role colour. An \\`<ellipse>\\` has no\n     equivalent neo rule and is already correct; restating it here costs nothing and means\n     the two forms cannot drift apart again.\n\n     Qualified with \\`[data-look]\\` *and* \\`.node\\` to land strictly above that rule rather than\n     tie with it -- on a tie the later stylesheet would win, which is how neo took this in\n     the first place. Skipped under handDrawn, where roughjs draws paths and neither element\n     exists. */\n  & [data-look=\"${safeLook(options.look)}\"].node.usecase-element ellipse,\n  & [data-look=\"${safeLook(options.look)}\"].node.usecase-element rect {\n    fill: ${role.bkg};\n    stroke: ${role.border};\n  }\n\n  /* The business marker is a \\`<path>\\`, so it loses to \\`[data-look=\"neo\"].node path\\` the same\n     way. No \\`fill\\`: the marker is drawn with \\`fill=\"none\"\\` and has to stay that way. */\n  & [data-look=\"${safeLook(options.look)}\"].node.usecase-element .usecase-business-marker {\n    stroke: ${role.border};\n  }\n`\n}\n  & .usecase-element .nodeLabel,\n  & .usecase-label {\n    color: ${options.primaryTextColor};\n    fill: ${options.primaryTextColor};\n    font-family: var(--mermaid-usecase-font-family, ${options.fontFamily});\n    font-size: var(--mermaid-usecase-font-size, 12px);\n    font-weight: var(--mermaid-usecase-font-weight, normal);\n  }\n\n  & .usecase-stereotype,\n  & .usecase-business-marker {\n    color: ${options.primaryTextColor};\n    fill: ${options.primaryTextColor};\n    stroke: ${role.border};\n  }\n\n  & .system-boundary rect.boundary-body,\n  & .system-boundary rect.boundary-tab,\n  & .system-boundary-package-tab {\n    fill: ${role.boundaryBkg};\n    stroke: ${role.boundaryBorder};\n    stroke-width: 1px;\n  }\n\n  & .system-boundary-title text {\n    fill: ${options.titleColor ?? options.primaryTextColor};\n  }\n\n  /* Only the span, never the <p> inside it: the renderer puts a user-supplied\n     'color' on the span, and that has to stay inheritable by its children. */\n  & .system-boundary-title span {\n    color: ${options.titleColor ?? options.primaryTextColor};\n  }\n\n  & .usecase-note {\n    fill: ${options.noteBkgColor};\n    stroke: ${options.noteBorderColor};\n    color: ${options.noteTextColor};\n  }\n\n  & .usecase-note .nodeLabel {\n    color: ${options.noteTextColor};\n    fill: ${options.noteTextColor};\n  }\n\n  & .usecase-json-table,\n  & .usecase-json-table rect,\n  & .usecase-json-cell {\n    fill: ${options.mainBkg};\n    stroke: ${options.nodeBorder ?? options.primaryColor};\n  }\n\n  & .usecase-json-title,\n  & .usecase-json-key,\n  & .usecase-json-value {\n    color: ${options.primaryTextColor};\n    fill: ${options.primaryTextColor};\n  }\n\n  & .relationship {\n    fill: none;\n    stroke: ${options.lineColor};\n  }\n\n  & .relationship-include,\n  & .relationship-extend,\n  & .relationship-note {\n    stroke-dasharray: 3;\n  }\n\n  /* Include and extend are both dashed, which is a weak distinction at small sizes. The\n     tokens default to \\`lineColor\\`, so a theme that does not set them is unchanged. */\n  & .relationship-include {\n    stroke: ${role.includeLine};\n  }\n\n  & .relationship-extend {\n    stroke: ${role.extendLine};\n  }\n\n  & .relationship.edge-animation-fast,\n  & .relationship.edge-animation-slow {\n    stroke-linecap: round;\n  }\n\n  & .edgeLabel,\n  & .edgeLabel p {\n    background-color: ${options.edgeLabelBackground};\n  }\n\n  & .labelBkg {\n    background-color: ${options.edgeLabelBackground};\n    padding: 0 2px;\n  }\n\n  & .edgeLabel .label rect {\n    fill: ${options.edgeLabelBackground};\n  }\n\n  & .relationship-label,\n  & .edgeLabel {\n    color: ${options.primaryTextColor};\n    fill: ${options.primaryTextColor};\n    font-family: ${options.fontFamily};\n    font-size: 10px;\n    font-weight: normal;\n  }\n\n  & .marker,\n  & .marker.point,\n  & .marker.circle,\n  & .marker.cross {\n    fill: ${options.lineColor};\n    stroke: ${options.lineColor};\n  }\n\n  & .marker.extension {\n    fill: ${options.mainBkg};\n    stroke: ${options.lineColor};\n  }\n`;\n};\n\nexport default getStyles;\n", "import type { DiagramDefinition } from '../../diagram-api/types.js';\nimport { parser } from './parser/usecase.chevrotain.js';\nimport { db } from './usecaseDb.js';\nimport { renderer } from './usecaseRenderer.js';\nimport styles from './styles.js';\n\nexport const diagram: DiagramDefinition = {\n  parser,\n  db,\n  renderer,\n  styles,\n};\n"],
  "mappings": "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",
  "names": ["getConfig", "clear", "classNames", "Lexer", "Lexer", "db", "state", "label", "actorNode", "stereotype", "getConfig"]
}