{
  "version": 3,
  "sources": ["../../../src/diagrams/railroad/railroadDb.ts", "../../../src/diagrams/railroad/railroadTypes.ts", "../../../src/diagrams/railroad/styles.ts", "../../../src/diagrams/railroad/railroadRenderer.ts"],
  "sourcesContent": ["import type { ASTNode, RailroadDB, RailroadRule } from './railroadTypes.js';\nimport { getConfig as getGlobalConfig } from '../../diagram-api/diagramAPI.js';\nimport { log } from '../../logger.js';\nimport { clear as commonClear } from '../common/commonDb.js';\nimport { sanitizeText as commonSanitizeText } from '../common/common.js';\n\nlet diagramTitle = '';\nlet accTitle = '';\nlet accDescription = '';\nconst rules: RailroadRule[] = [];\nconst ruleMap = new Map<string, RailroadRule>();\n\nconst sanitizeText = (text: string): string => {\n  return commonSanitizeText(text, getGlobalConfig());\n};\n\nconst sanitizeAstNode = (node: ASTNode): ASTNode => {\n  switch (node.type) {\n    case 'terminal':\n      return { ...node, value: sanitizeText(node.value) };\n    case 'nonterminal':\n      return { ...node, name: sanitizeText(node.name) };\n    case 'sequence':\n      return { ...node, elements: node.elements.map(sanitizeAstNode) };\n    case 'choice':\n      return { ...node, alternatives: node.alternatives.map(sanitizeAstNode) };\n    case 'optional':\n      return { ...node, element: sanitizeAstNode(node.element) };\n    case 'repetition':\n      return {\n        ...node,\n        element: sanitizeAstNode(node.element),\n        separator: node.separator ? sanitizeAstNode(node.separator) : undefined,\n      };\n    case 'special':\n      return { ...node, text: sanitizeText(node.text) };\n  }\n};\n\n/**\n * Clear all diagram state\n */\nconst clear = (): void => {\n  diagramTitle = '';\n  accTitle = '';\n  accDescription = '';\n  rules.length = 0;\n  ruleMap.clear();\n  commonClear();\n  log.debug('[Railroad] Database cleared');\n};\n\n/**\n * Set diagram title\n */\nconst setTitle = (text: string): void => {\n  diagramTitle = sanitizeText(text);\n  log.debug('[Railroad] Title set:', text);\n};\n\n/**\n * Get diagram title\n */\nconst getTitle = (): string => {\n  return diagramTitle;\n};\n\n/**\n * Add a new rule to the diagram\n */\nconst addRule = (rule: RailroadRule): void => {\n  const sanitizedRule: RailroadRule = {\n    ...rule,\n    name: sanitizeText(rule.name),\n    definition: sanitizeAstNode(rule.definition),\n    comment: rule.comment ? sanitizeText(rule.comment) : undefined,\n  };\n\n  log.debug('[Railroad] Adding rule:', sanitizedRule.name);\n\n  // Check for duplicate rule names\n  if (ruleMap.has(sanitizedRule.name)) {\n    log.warn(`[Railroad] Rule '${sanitizedRule.name}' is already defined. Overwriting.`);\n  }\n\n  rules.push(sanitizedRule);\n  ruleMap.set(sanitizedRule.name, sanitizedRule);\n};\n\n/**\n * Get all rules\n */\nconst getRules = (): RailroadRule[] => {\n  return rules;\n};\n\n/**\n * Get a specific rule by name\n */\nconst getRule = (name: string): RailroadRule | undefined => {\n  return ruleMap.get(name);\n};\n\n/**\n * Set accessibility title\n */\nconst setAccTitle = (text: string): void => {\n  accTitle = sanitizeText(text).replace(/^\\s+/g, '');\n  log.debug('[Railroad] Accessibility title set:', text);\n};\n\n/**\n * Get accessibility title\n */\nconst getAccTitle = (): string => {\n  return accTitle;\n};\n\n/**\n * Set accessibility description\n */\nconst setAccDescription = (text: string): void => {\n  accDescription = sanitizeText(text).replace(/\\n\\s+/g, '\\n');\n  log.debug('[Railroad] Accessibility description set:', text);\n};\n\n/**\n * Get accessibility description\n */\nconst getAccDescription = (): string => {\n  return accDescription;\n};\n\nconst setDiagramTitle = setTitle;\nconst getDiagramTitle = getTitle;\n\n/**\n * Export the database object\n */\nexport const db: RailroadDB = {\n  clear,\n  setTitle,\n  getTitle,\n  addRule,\n  getRules,\n  getRule,\n  setAccTitle,\n  getAccTitle,\n  setAccDescription,\n  getAccDescription,\n  setDiagramTitle,\n  getDiagramTitle,\n};\n\nexport default db;\n", "// cspell:ignore nonterminal\nimport type { DiagramDB } from '../../diagram-api/types.js';\n\n/**\n * AST Node types for Railroad diagram expressions\n */\nexport interface TerminalNode {\n  type: 'terminal';\n  value: string;\n}\n\nexport interface NonTerminalNode {\n  type: 'nonterminal';\n  name: string;\n}\n\nexport interface SequenceNode {\n  type: 'sequence';\n  elements: ASTNode[];\n}\n\nexport interface ChoiceNode {\n  type: 'choice';\n  alternatives: ASTNode[];\n}\n\nexport interface OptionalNode {\n  type: 'optional';\n  element: ASTNode;\n}\n\nexport interface RepetitionNode {\n  type: 'repetition';\n  element: ASTNode;\n  min: number; // 0 for *, 1 for +\n  max: number; // Infinity for unlimited\n  separator?: ASTNode; // Optional separator (e.g., comma)\n}\n\nexport interface SpecialNode {\n  type: 'special';\n  text: string;\n}\n\n/**\n * Union type for all AST nodes\n */\nexport type ASTNode =\n  | TerminalNode\n  | NonTerminalNode\n  | SequenceNode\n  | ChoiceNode\n  | OptionalNode\n  | RepetitionNode\n  | SpecialNode;\n\n/**\n * Railroad diagram rule definition\n */\nexport interface RailroadRule {\n  name: string;\n  definition: ASTNode;\n  comment?: string;\n}\n\n/**\n * Configuration for Railroad diagram styling\n */\nexport interface RailroadStyleOptions {\n  // Layout\n  compactMode?: boolean;\n\n  // Spacing\n  padding?: number;\n  verticalSeparation?: number;\n  horizontalSeparation?: number;\n  arcRadius?: number;\n\n  // Typography\n  fontSize?: number;\n  fontFamily?: string;\n\n  // Colors - Terminal\n  terminalFill?: string;\n  terminalStroke?: string;\n  terminalTextColor?: string;\n\n  // Colors - Non-terminal\n  nonTerminalFill?: string;\n  nonTerminalStroke?: string;\n  nonTerminalTextColor?: string;\n\n  // Colors - Lines\n  lineColor?: string;\n  strokeWidth?: number;\n\n  // Colors - Markers\n  markerFill?: string;\n\n  // Colors - Comment\n  commentFill?: string;\n  commentStroke?: string;\n  commentTextColor?: string;\n\n  // Colors - Special\n  specialFill?: string;\n  specialStroke?: string;\n\n  // Other\n  ruleNameColor?: string;\n  showMarkers?: boolean;\n  markerRadius?: number;\n}\n\n/**\n * Railroad diagram configuration (alias for RailroadStyleOptions)\n */\nexport type RailroadDiagramConfig = RailroadStyleOptions;\n\n/**\n * Default configuration\n */\nexport const DEFAULT_RAILROAD_CONFIG: Required<RailroadStyleOptions> = {\n  // Layout\n  compactMode: false,\n\n  // Spacing\n  padding: 10,\n  verticalSeparation: 8,\n  horizontalSeparation: 10,\n  arcRadius: 10,\n\n  // Typography\n  fontSize: 14,\n  fontFamily: 'monospace',\n\n  // Colors - Terminal\n  terminalFill: '#FFFFC0',\n  terminalStroke: '#000000',\n  terminalTextColor: '#000000',\n\n  // Colors - Non-terminal\n  nonTerminalFill: '#FFFFFF',\n  nonTerminalStroke: '#000000',\n  nonTerminalTextColor: '#000000',\n\n  // Colors - Lines\n  lineColor: '#000000',\n  strokeWidth: 2,\n\n  // Colors - Markers\n  markerFill: '#000000',\n\n  // Colors - Comment\n  commentFill: '#E8E8E8',\n  commentStroke: '#888888',\n  commentTextColor: '#666666',\n\n  // Colors - Special\n  specialFill: '#F0E0FF',\n  specialStroke: '#8800CC',\n\n  // Other\n  ruleNameColor: '#000066',\n  showMarkers: true,\n  markerRadius: 5,\n};\n\n/**\n * Diagram dimensions for rendering\n */\nexport interface DiagramDimensions {\n  width: number;\n  height: number;\n  up: number; // Height above center line\n  down: number; // Height below center line\n}\n\n/**\n * Render result containing SVG element and dimensions\n */\nexport interface RenderResult {\n  element: SVGElement;\n  dimensions: DiagramDimensions;\n}\n\n/**\n * Railroad diagram Database interface\n */\nexport interface RailroadDB extends DiagramDB {\n  clear: () => void;\n  setTitle: (title: string) => void;\n  getTitle: () => string;\n  addRule: (rule: RailroadRule) => void;\n  getRules: () => RailroadRule[];\n  getRule: (name: string) => RailroadRule | undefined;\n  setAccTitle: (title: string) => void;\n  getAccTitle: () => string;\n  setAccDescription: (description: string) => void;\n  getAccDescription: () => string;\n  setDiagramTitle: (title: string) => void;\n  getDiagramTitle: () => string;\n}\n", "// cspell:ignore nonterminal\nimport type { DiagramStylesProvider } from '../../diagram-api/types.js';\nimport { getConfig as getConfigAPI } from '../../config.js';\nimport { getThemeVariables } from '../../themes/theme-default.js';\nimport { DEFAULT_RAILROAD_CONFIG, type RailroadStyleOptions } from './railroadTypes.js';\n\ntype ThemeVariables = ReturnType<typeof getThemeVariables>;\n\ntype RailroadStyleInput =\n  | RailroadStyleOptions\n  | ({\n      railroad?: RailroadStyleOptions;\n      svgId?: string;\n      theme?: string;\n      look?: string;\n    } & Partial<ThemeVariables>);\n\nconst COLOR_VALUE_PATTERN =\n  /^#(?:[\\da-f]{3,4}|[\\da-f]{6}|[\\da-f]{8})$|^(?:rgb|rgba|hsl|hsla|hwb|lab|lch|oklab|oklch)\\([\\d\\s%+,./-]+\\)$|^[a-z]+$/i;\nconst FONT_FAMILY_PATTERN = /^[\\w \"',.-]+$/;\nconst RAILROAD_STYLE_OPTION_KEYS = new Set<keyof RailroadStyleOptions>([\n  'compactMode',\n  'padding',\n  'verticalSeparation',\n  'horizontalSeparation',\n  'arcRadius',\n  'fontSize',\n  'fontFamily',\n  'terminalFill',\n  'terminalStroke',\n  'terminalTextColor',\n  'nonTerminalFill',\n  'nonTerminalStroke',\n  'nonTerminalTextColor',\n  'lineColor',\n  'strokeWidth',\n  'markerFill',\n  'commentFill',\n  'commentStroke',\n  'commentTextColor',\n  'specialFill',\n  'specialStroke',\n  'ruleNameColor',\n  'showMarkers',\n  'markerRadius',\n]);\n\nconst isRailroadStyleOptions = (options?: RailroadStyleInput): options is RailroadStyleOptions => {\n  if (!options) {\n    return false;\n  }\n\n  return Object.keys(options).every(\n    (key) => key === 'railroad' || RAILROAD_STYLE_OPTION_KEYS.has(key as keyof RailroadStyleOptions)\n  );\n};\n\nconst extractRailroadOverrides = (options?: RailroadStyleInput): Partial<RailroadStyleOptions> => {\n  if (!options) {\n    return {};\n  }\n\n  if ('railroad' in options && options.railroad) {\n    return options.railroad;\n  }\n\n  return isRailroadStyleOptions(options) ? options : {};\n};\n\nconst extractThemeOverrides = (options?: RailroadStyleInput): Partial<ThemeVariables> => {\n  if (!options || isRailroadStyleOptions(options)) {\n    return {};\n  }\n\n  const {\n    railroad: _railroad,\n    svgId: _svgId,\n    theme: _theme,\n    look: _look,\n    ...themeOverrides\n  } = options;\n  return themeOverrides;\n};\n\nconst sanitizeColorValue = (value: unknown, fallback: string): string => {\n  if (typeof value !== 'string') {\n    return fallback;\n  }\n\n  const normalized = value.trim();\n  return COLOR_VALUE_PATTERN.test(normalized) ? normalized : fallback;\n};\n\nconst sanitizeFontFamilyValue = (value: unknown, fallback: string): string => {\n  if (typeof value !== 'string') {\n    return fallback;\n  }\n\n  const normalized = value.trim();\n  return FONT_FAMILY_PATTERN.test(normalized) ? normalized : fallback;\n};\n\nconst sanitizeNumberValue = (value: unknown, fallback: number): number => {\n  const parsed =\n    typeof value === 'number'\n      ? value\n      : typeof value === 'string'\n        ? Number.parseFloat(value)\n        : Number.NaN;\n\n  return Number.isFinite(parsed) && parsed >= 0 ? parsed : fallback;\n};\n\nconst parseThemeFontSize = (value: unknown): number | undefined => {\n  const parsed =\n    typeof value === 'number'\n      ? value\n      : typeof value === 'string'\n        ? Number.parseFloat(value)\n        : Number.NaN;\n\n  return Number.isFinite(parsed) && parsed > 0 ? parsed : undefined;\n};\n\nconst buildThemeDefaults = (themeVariables: ThemeVariables): Required<RailroadStyleOptions> => {\n  const fontFamily = sanitizeFontFamilyValue(\n    themeVariables.fontFamily,\n    DEFAULT_RAILROAD_CONFIG.fontFamily\n  );\n  const fontSize = parseThemeFontSize(themeVariables.fontSize) ?? DEFAULT_RAILROAD_CONFIG.fontSize;\n\n  return {\n    ...DEFAULT_RAILROAD_CONFIG,\n    fontFamily,\n    fontSize,\n    terminalFill: sanitizeColorValue(\n      themeVariables.secondBkg ?? themeVariables.secondaryColor,\n      DEFAULT_RAILROAD_CONFIG.terminalFill\n    ),\n    terminalStroke: sanitizeColorValue(\n      themeVariables.secondaryBorderColor ?? themeVariables.lineColor,\n      DEFAULT_RAILROAD_CONFIG.terminalStroke\n    ),\n    terminalTextColor: sanitizeColorValue(\n      themeVariables.secondaryTextColor ?? themeVariables.textColor,\n      DEFAULT_RAILROAD_CONFIG.terminalTextColor\n    ),\n    nonTerminalFill: sanitizeColorValue(\n      themeVariables.mainBkg ?? themeVariables.background,\n      DEFAULT_RAILROAD_CONFIG.nonTerminalFill\n    ),\n    nonTerminalStroke: sanitizeColorValue(\n      themeVariables.primaryBorderColor ?? themeVariables.lineColor,\n      DEFAULT_RAILROAD_CONFIG.nonTerminalStroke\n    ),\n    nonTerminalTextColor: sanitizeColorValue(\n      themeVariables.primaryTextColor ?? themeVariables.textColor,\n      DEFAULT_RAILROAD_CONFIG.nonTerminalTextColor\n    ),\n    lineColor: sanitizeColorValue(themeVariables.lineColor, DEFAULT_RAILROAD_CONFIG.lineColor),\n    markerFill: sanitizeColorValue(themeVariables.lineColor, DEFAULT_RAILROAD_CONFIG.markerFill),\n    commentFill: sanitizeColorValue(\n      themeVariables.labelBackground ?? themeVariables.tertiaryColor,\n      DEFAULT_RAILROAD_CONFIG.commentFill\n    ),\n    commentStroke: sanitizeColorValue(\n      themeVariables.tertiaryBorderColor ?? themeVariables.lineColor,\n      DEFAULT_RAILROAD_CONFIG.commentStroke\n    ),\n    commentTextColor: sanitizeColorValue(\n      themeVariables.tertiaryTextColor ?? themeVariables.textColor,\n      DEFAULT_RAILROAD_CONFIG.commentTextColor\n    ),\n    specialFill: sanitizeColorValue(\n      themeVariables.tertiaryColor ?? themeVariables.secondaryColor,\n      DEFAULT_RAILROAD_CONFIG.specialFill\n    ),\n    specialStroke: sanitizeColorValue(\n      themeVariables.tertiaryBorderColor ?? themeVariables.secondaryBorderColor,\n      DEFAULT_RAILROAD_CONFIG.specialStroke\n    ),\n    ruleNameColor: sanitizeColorValue(\n      themeVariables.titleColor ?? themeVariables.textColor,\n      DEFAULT_RAILROAD_CONFIG.ruleNameColor\n    ),\n  };\n};\n\nexport const buildRailroadStyleOptions = (\n  options?: RailroadStyleInput\n): Required<RailroadStyleOptions> => {\n  const currentConfig = getConfigAPI();\n  const themeVariables = {\n    ...getThemeVariables(),\n    ...(currentConfig.themeVariables ?? {}),\n    ...extractThemeOverrides(options),\n  } as ThemeVariables;\n  const themeDefaults = buildThemeDefaults(themeVariables);\n  const railroadOptions = {\n    ...(currentConfig.railroad ?? {}),\n    ...extractRailroadOverrides(options),\n  } as RailroadStyleOptions;\n\n  return {\n    compactMode: railroadOptions.compactMode ?? themeDefaults.compactMode,\n    padding: sanitizeNumberValue(railroadOptions.padding, themeDefaults.padding),\n    verticalSeparation: sanitizeNumberValue(\n      railroadOptions.verticalSeparation,\n      themeDefaults.verticalSeparation\n    ),\n    horizontalSeparation: sanitizeNumberValue(\n      railroadOptions.horizontalSeparation,\n      themeDefaults.horizontalSeparation\n    ),\n    arcRadius: sanitizeNumberValue(railroadOptions.arcRadius, themeDefaults.arcRadius),\n    fontSize: sanitizeNumberValue(railroadOptions.fontSize, themeDefaults.fontSize),\n    fontFamily: sanitizeFontFamilyValue(railroadOptions.fontFamily, themeDefaults.fontFamily),\n    terminalFill: sanitizeColorValue(railroadOptions.terminalFill, themeDefaults.terminalFill),\n    terminalStroke: sanitizeColorValue(\n      railroadOptions.terminalStroke,\n      themeDefaults.terminalStroke\n    ),\n    terminalTextColor: sanitizeColorValue(\n      railroadOptions.terminalTextColor,\n      themeDefaults.terminalTextColor\n    ),\n    nonTerminalFill: sanitizeColorValue(\n      railroadOptions.nonTerminalFill,\n      themeDefaults.nonTerminalFill\n    ),\n    nonTerminalStroke: sanitizeColorValue(\n      railroadOptions.nonTerminalStroke,\n      themeDefaults.nonTerminalStroke\n    ),\n    nonTerminalTextColor: sanitizeColorValue(\n      railroadOptions.nonTerminalTextColor,\n      themeDefaults.nonTerminalTextColor\n    ),\n    lineColor: sanitizeColorValue(railroadOptions.lineColor, themeDefaults.lineColor),\n    strokeWidth: sanitizeNumberValue(railroadOptions.strokeWidth, themeDefaults.strokeWidth),\n    markerFill: sanitizeColorValue(railroadOptions.markerFill, themeDefaults.markerFill),\n    commentFill: sanitizeColorValue(railroadOptions.commentFill, themeDefaults.commentFill),\n    commentStroke: sanitizeColorValue(railroadOptions.commentStroke, themeDefaults.commentStroke),\n    commentTextColor: sanitizeColorValue(\n      railroadOptions.commentTextColor,\n      themeDefaults.commentTextColor\n    ),\n    specialFill: sanitizeColorValue(railroadOptions.specialFill, themeDefaults.specialFill),\n    specialStroke: sanitizeColorValue(railroadOptions.specialStroke, themeDefaults.specialStroke),\n    ruleNameColor: sanitizeColorValue(railroadOptions.ruleNameColor, themeDefaults.ruleNameColor),\n    showMarkers: railroadOptions.showMarkers ?? themeDefaults.showMarkers,\n    markerRadius: sanitizeNumberValue(railroadOptions.markerRadius, themeDefaults.markerRadius),\n  };\n};\n\n/**\n * Generate CSS styles for Railroad diagrams\n */\nexport const getStyles: DiagramStylesProvider = (options?: RailroadStyleInput): string => {\n  const {\n    fontFamily,\n    fontSize,\n    terminalFill,\n    terminalStroke,\n    terminalTextColor,\n    nonTerminalFill,\n    nonTerminalStroke,\n    nonTerminalTextColor,\n    lineColor,\n    strokeWidth,\n    markerFill,\n    commentFill,\n    commentStroke,\n    commentTextColor,\n    specialFill,\n    specialStroke,\n    ruleNameColor,\n  } = buildRailroadStyleOptions(options);\n\n  return `\n  .railroad-diagram {\n    font-family: ${fontFamily};\n    font-size: ${fontSize}px;\n  }\n\n  .railroad-terminal rect {\n    fill: ${terminalFill};\n    stroke: ${terminalStroke};\n    stroke-width: ${strokeWidth}px;\n  }\n\n  .railroad-terminal text {\n    fill: ${terminalTextColor};\n    font-family: ${fontFamily};\n    font-size: ${fontSize}px;\n    text-anchor: middle;\n    dominant-baseline: middle;\n  }\n\n  .railroad-nonterminal rect {\n    fill: ${nonTerminalFill};\n    stroke: ${nonTerminalStroke};\n    stroke-width: ${strokeWidth}px;\n  }\n\n  .railroad-nonterminal text {\n    fill: ${nonTerminalTextColor};\n    font-family: ${fontFamily};\n    font-size: ${fontSize}px;\n    text-anchor: middle;\n    dominant-baseline: middle;\n  }\n\n  .railroad-line {\n    stroke: ${lineColor};\n    stroke-width: ${strokeWidth}px;\n    fill: none;\n  }\n\n  .railroad-start circle,\n  .railroad-end circle {\n    fill: ${markerFill};\n  }\n\n  .railroad-comment ellipse {\n    fill: ${commentFill};\n    stroke: ${commentStroke};\n    stroke-width: ${strokeWidth}px;\n  }\n\n  .railroad-comment text {\n    fill: ${commentTextColor};\n    font-style: italic;\n    font-family: ${fontFamily};\n    font-size: ${fontSize}px;\n    text-anchor: middle;\n    dominant-baseline: middle;\n  }\n\n  .railroad-special rect {\n    fill: ${specialFill};\n    stroke: ${specialStroke};\n    stroke-width: ${strokeWidth}px;\n    stroke-dasharray: 5,3;\n  }\n\n  .railroad-special text {\n    fill: ${nonTerminalTextColor};\n    font-family: ${fontFamily};\n    font-size: ${fontSize}px;\n    text-anchor: middle;\n    dominant-baseline: middle;\n  }\n\n  .railroad-rule-name {\n    font-weight: bold;\n    fill: ${ruleNameColor};\n    font-family: ${fontFamily};\n    font-size: ${fontSize}px;\n  }\n\n  .railroad-group {\n    /* Grouping container, no specific styles */\n  }\n`;\n};\n\nexport default getStyles;\n", "// cspell:ignore nonterminal\nimport type d3 from 'd3';\nimport type { DrawDefinition, SVG } from '../../diagram-api/types.js';\nimport type { ASTNode, RailroadRule, RenderResult } from './railroadTypes.js';\nimport { log } from '../../logger.js';\nimport { getConfig as getConfigAPI } from '../../config.js';\nimport { selectSvgElement } from '../../rendering-util/selectSvgElement.js';\nimport { configureSvgSize } from '../../setupGraphViewbox.js';\nimport { db } from './railroadDb.js';\nimport { buildRailroadStyleOptions } from './styles.js';\n\ntype SVGGroup = d3.Selection<SVGGElement, unknown, Element | null, unknown>;\n\n/**\n * SVG Path builder utility\n */\nclass PathBuilder {\n  private d = '';\n\n  moveTo(x: number, y: number): this {\n    this.d += `M ${x} ${y} `;\n    return this;\n  }\n\n  lineTo(x: number, y: number): this {\n    this.d += `L ${x} ${y} `;\n    return this;\n  }\n\n  horizontalTo(x: number): this {\n    this.d += `H ${x} `;\n    return this;\n  }\n\n  verticalTo(y: number): this {\n    this.d += `V ${y} `;\n    return this;\n  }\n\n  arcTo(\n    rx: number,\n    ry: number,\n    rotation: number,\n    largeArc: boolean,\n    sweep: boolean,\n    x: number,\n    y: number\n  ): this {\n    this.d += `A ${rx} ${ry} ${rotation} ${largeArc ? 1 : 0} ${sweep ? 1 : 0} ${x} ${y} `;\n    return this;\n  }\n\n  build(): string {\n    return this.d.trim();\n  }\n}\n\n/**\n * Railroad diagram renderer\n */\nclass RailroadRenderer {\n  private svg: SVG;\n  private config: ReturnType<typeof buildRailroadStyleOptions>;\n  private textCache = new Map<string, { width: number; height: number }>();\n\n  constructor(svg: SVG, config = buildRailroadStyleOptions()) {\n    this.svg = svg;\n    this.config = config;\n  }\n\n  /**\n   * Measure text dimensions\n   */\n  private measureText(text: string): { width: number; height: number } {\n    if (this.textCache.has(text)) {\n      return this.textCache.get(text)!;\n    }\n\n    // Create temporary text element to measure\n    const tempText = this.svg\n      .append('text')\n      .attr('font-family', this.config.fontFamily)\n      .attr('font-size', this.config.fontSize)\n      .text(text);\n\n    const bbox = tempText.node()!.getBBox();\n    const dimensions = { width: bbox.width, height: bbox.height };\n\n    tempText.remove();\n    this.textCache.set(text, dimensions);\n\n    return dimensions;\n  }\n\n  /**\n   * Render terminal symbol (rounded rectangle)\n   */\n  private renderTerminal(parent: SVG | SVGGroup, value: string): RenderResult {\n    const textDim = this.measureText(value);\n    const width = textDim.width + this.config.padding * 2;\n    const height = textDim.height + this.config.padding * 2;\n\n    const group = parent.append('g').attr('class', 'railroad-terminal');\n\n    // Rounded rectangle\n    group\n      .append('rect')\n      .attr('x', 0)\n      .attr('y', 0)\n      .attr('width', width)\n      .attr('height', height)\n      .attr('rx', 10)\n      .attr('ry', 10);\n\n    // Text\n    group\n      .append('text')\n      .attr('x', width / 2)\n      .attr('y', height / 2)\n      .text(value);\n\n    return {\n      element: group.node()!,\n      dimensions: {\n        width,\n        height,\n        up: height / 2,\n        down: height / 2,\n      },\n    };\n  }\n\n  /**\n   * Render non-terminal symbol (rectangle)\n   */\n  private renderNonTerminal(parent: SVG | SVGGroup, name: string): RenderResult {\n    const textDim = this.measureText(name);\n    const width = textDim.width + this.config.padding * 2;\n    const height = textDim.height + this.config.padding * 2;\n\n    const group = parent.append('g').attr('class', 'railroad-nonterminal');\n\n    // Rectangle\n    group.append('rect').attr('x', 0).attr('y', 0).attr('width', width).attr('height', height);\n\n    // Text\n    group\n      .append('text')\n      .attr('x', width / 2)\n      .attr('y', height / 2)\n      .text(name);\n\n    return {\n      element: group.node()!,\n      dimensions: {\n        width,\n        height,\n        up: height / 2,\n        down: height / 2,\n      },\n    };\n  }\n\n  /**\n   * Render sequence (horizontal concatenation)\n   */\n  private renderSequence(parent: SVG | SVGGroup, elements: ASTNode[]): RenderResult {\n    const rendered = elements.map((e) => this.renderExpression(parent, e));\n\n    let totalWidth = 0;\n    let maxUp = 0;\n    let maxDown = 0;\n\n    for (const r of rendered) {\n      totalWidth += r.dimensions.width;\n      maxUp = Math.max(maxUp, r.dimensions.up);\n      maxDown = Math.max(maxDown, r.dimensions.down);\n    }\n\n    totalWidth += (rendered.length - 1) * this.config.horizontalSeparation;\n\n    const group = parent.append('g').attr('class', 'railroad-sequence');\n    let x = 0;\n\n    for (let i = 0; i < rendered.length; i++) {\n      const r = rendered[i];\n      const y = maxUp - r.dimensions.up;\n\n      // Position element\n      const elem = group.node()!.appendChild(r.element);\n      elem.setAttribute('transform', `translate(${x}, ${y})`);\n\n      // Draw connecting line to next element\n      if (i < rendered.length - 1) {\n        const lineX1 = x + r.dimensions.width;\n        const lineX2 = lineX1 + this.config.horizontalSeparation;\n        const lineY = maxUp;\n\n        group\n          .append('path')\n          .attr('class', 'railroad-line')\n          .attr('d', new PathBuilder().moveTo(lineX1, lineY).lineTo(lineX2, lineY).build());\n      }\n\n      x += r.dimensions.width + this.config.horizontalSeparation;\n    }\n\n    return {\n      element: group.node()!,\n      dimensions: {\n        width: totalWidth,\n        height: maxUp + maxDown,\n        up: maxUp,\n        down: maxDown,\n      },\n    };\n  }\n\n  /**\n   * Render choice (vertical alternatives)\n   */\n  private renderChoice(parent: SVG | SVGGroup, alternatives: ASTNode[]): RenderResult {\n    const rendered = alternatives.map((a) => this.renderExpression(parent, a));\n\n    let maxWidth = 0;\n    let totalHeight = 0;\n\n    for (const r of rendered) {\n      maxWidth = Math.max(maxWidth, r.dimensions.width);\n      totalHeight += r.dimensions.height;\n    }\n\n    totalHeight += (rendered.length - 1) * this.config.verticalSeparation;\n\n    const arcRadius = this.config.arcRadius;\n    const arcWidth = arcRadius * 4;\n    const totalWidth = maxWidth + arcWidth;\n\n    const group = parent.append('g').attr('class', 'railroad-choice');\n    let y = 0;\n    const centerY = totalHeight / 2;\n\n    for (const r of rendered) {\n      const elemY = y;\n      const elemCenterY = elemY + r.dimensions.up;\n\n      // Position element in the center\n      const elemX = arcRadius * 2 + (maxWidth - r.dimensions.width) / 2;\n      const elem = group.node()!.appendChild(r.element);\n      elem.setAttribute('transform', `translate(${elemX}, ${elemY})`);\n\n      // Left arc from center to this alternative\n      const leftPath = new PathBuilder();\n      const isBelowCenter = elemCenterY > centerY;\n      if (elemCenterY === centerY) {\n        leftPath.moveTo(0, centerY).lineTo(elemX, elemCenterY);\n      } else {\n        leftPath\n          .moveTo(0, centerY)\n          .arcTo(\n            arcRadius,\n            arcRadius,\n            0,\n            false,\n            isBelowCenter,\n            arcRadius,\n            centerY + (isBelowCenter ? arcRadius : -arcRadius)\n          )\n          .lineTo(arcRadius, elemCenterY - (isBelowCenter ? arcRadius : -arcRadius))\n          .arcTo(arcRadius, arcRadius, 0, false, !isBelowCenter, arcRadius * 2, elemCenterY)\n          .lineTo(elemX, elemCenterY);\n      }\n\n      group.append('path').attr('class', 'railroad-line').attr('d', leftPath.build());\n\n      // Right arc from this alternative to center\n      const rightPath = new PathBuilder();\n      const rightStart = elemX + r.dimensions.width;\n      const rightLaneX = totalWidth - arcRadius * 2;\n      if (elemCenterY === centerY) {\n        rightPath.moveTo(rightStart, elemCenterY).lineTo(totalWidth, centerY);\n      } else {\n        rightPath\n          .moveTo(rightStart, elemCenterY)\n          .lineTo(rightLaneX, elemCenterY)\n          .arcTo(\n            arcRadius,\n            arcRadius,\n            0,\n            false,\n            !isBelowCenter,\n            totalWidth - arcRadius,\n            elemCenterY + (isBelowCenter ? -arcRadius : arcRadius)\n          )\n          .lineTo(totalWidth - arcRadius, centerY + (isBelowCenter ? arcRadius : -arcRadius))\n          .arcTo(arcRadius, arcRadius, 0, false, isBelowCenter, totalWidth, centerY);\n      }\n\n      group.append('path').attr('class', 'railroad-line').attr('d', rightPath.build());\n\n      y += r.dimensions.height + this.config.verticalSeparation;\n    }\n\n    return {\n      element: group.node()!,\n      dimensions: {\n        width: totalWidth,\n        height: totalHeight,\n        up: centerY,\n        down: totalHeight - centerY,\n      },\n    };\n  }\n\n  /**\n   * Render optional (bypass path above)\n   */\n  private renderOptional(parent: SVG | SVGGroup, element: ASTNode): RenderResult {\n    const inner = this.renderExpression(parent, element);\n    const arcRadius = this.config.arcRadius;\n    const arcHeight = arcRadius * 2;\n    const totalWidth = inner.dimensions.width + arcRadius * 4;\n    const totalHeight = inner.dimensions.height + arcHeight;\n\n    const group = parent.append('g').attr('class', 'railroad-optional');\n\n    // Position main element\n    const elemX = arcRadius * 2;\n    const elemY = arcHeight;\n    const elem = group.node()!.appendChild(inner.element);\n    elem.setAttribute('transform', `translate(${elemX}, ${elemY})`);\n\n    const centerY = elemY + inner.dimensions.up;\n\n    // Lower path (through element)\n    const lowerPath = new PathBuilder().moveTo(0, centerY).lineTo(arcRadius * 2, centerY);\n    group.append('path').attr('class', 'railroad-line').attr('d', lowerPath.build());\n\n    const lowerPath2 = new PathBuilder()\n      .moveTo(elemX + inner.dimensions.width, centerY)\n      .lineTo(totalWidth, centerY);\n    group.append('path').attr('class', 'railroad-line').attr('d', lowerPath2.build());\n\n    // Upper bypass path\n    const bypassPath = new PathBuilder()\n      .moveTo(0, centerY)\n      .arcTo(arcRadius, arcRadius, 0, false, false, arcRadius, centerY - arcRadius)\n      .lineTo(arcRadius, arcRadius)\n      .arcTo(arcRadius, arcRadius, 0, false, true, arcRadius * 2, 0)\n      .lineTo(totalWidth - arcRadius * 2, 0)\n      .arcTo(arcRadius, arcRadius, 0, false, true, totalWidth - arcRadius, arcRadius)\n      .lineTo(totalWidth - arcRadius, centerY - arcRadius)\n      .arcTo(arcRadius, arcRadius, 0, false, false, totalWidth, centerY);\n\n    group.append('path').attr('class', 'railroad-line').attr('d', bypassPath.build());\n\n    return {\n      element: group.node()!,\n      dimensions: {\n        width: totalWidth,\n        height: totalHeight,\n        up: centerY,\n        down: totalHeight - centerY,\n      },\n    };\n  }\n\n  /**\n   * Render repetition (loop back path)\n   */\n  private renderRepetition(parent: SVG | SVGGroup, element: ASTNode, min: number): RenderResult {\n    const inner = this.renderExpression(parent, element);\n    const arcRadius = this.config.arcRadius;\n    const arcHeight = arcRadius * 2;\n    const totalWidth = inner.dimensions.width + arcRadius * 4;\n\n    // For *, add bypass on top; for +, no bypass\n    const hasBypass = min === 0;\n    const totalHeight = inner.dimensions.height + arcHeight + (hasBypass ? arcHeight : 0);\n\n    const group = parent.append('g').attr('class', 'railroad-repetition');\n\n    // Position main element\n    const elemX = arcRadius * 2;\n    const elemY = hasBypass ? arcHeight : 0;\n    const elem = group.node()!.appendChild(inner.element);\n    elem.setAttribute('transform', `translate(${elemX}, ${elemY})`);\n\n    const centerY = elemY + inner.dimensions.up;\n\n    // Forward path\n    group\n      .append('path')\n      .attr('class', 'railroad-line')\n      .attr(\n        'd',\n        new PathBuilder()\n          .moveTo(0, centerY)\n          .lineTo(arcRadius * 2, centerY)\n          .build()\n      );\n\n    group\n      .append('path')\n      .attr('class', 'railroad-line')\n      .attr(\n        'd',\n        new PathBuilder()\n          .moveTo(elemX + inner.dimensions.width, centerY)\n          .lineTo(totalWidth, centerY)\n          .build()\n      );\n\n    // Loop back path (below)\n    const loopY = elemY + inner.dimensions.height + arcRadius;\n    const loopPath = new PathBuilder()\n      .moveTo(elemX + inner.dimensions.width, centerY)\n      .arcTo(\n        arcRadius,\n        arcRadius,\n        0,\n        false,\n        true,\n        elemX + inner.dimensions.width + arcRadius,\n        centerY + arcRadius\n      )\n      .lineTo(elemX + inner.dimensions.width + arcRadius, loopY)\n      .arcTo(\n        arcRadius,\n        arcRadius,\n        0,\n        false,\n        true,\n        elemX + inner.dimensions.width,\n        loopY + arcRadius\n      )\n      .lineTo(arcRadius * 2, loopY + arcRadius)\n      .arcTo(arcRadius, arcRadius, 0, false, true, arcRadius, loopY)\n      .lineTo(arcRadius, centerY + arcRadius)\n      .arcTo(arcRadius, arcRadius, 0, false, true, arcRadius * 2, centerY);\n\n    group.append('path').attr('class', 'railroad-line').attr('d', loopPath.build());\n\n    // Optional bypass path (for *)\n    if (hasBypass) {\n      const bypassPath = new PathBuilder()\n        .moveTo(0, centerY)\n        .arcTo(arcRadius, arcRadius, 0, false, false, arcRadius, centerY - arcRadius)\n        .lineTo(arcRadius, arcRadius)\n        .arcTo(arcRadius, arcRadius, 0, false, true, arcRadius * 2, 0)\n        .lineTo(totalWidth - arcRadius * 2, 0)\n        .arcTo(arcRadius, arcRadius, 0, false, true, totalWidth - arcRadius, arcRadius)\n        .lineTo(totalWidth - arcRadius, centerY - arcRadius)\n        .arcTo(arcRadius, arcRadius, 0, false, false, totalWidth, centerY);\n\n      group.append('path').attr('class', 'railroad-line').attr('d', bypassPath.build());\n    }\n\n    return {\n      element: group.node()!,\n      dimensions: {\n        width: totalWidth,\n        height: totalHeight,\n        up: centerY,\n        down: totalHeight - centerY,\n      },\n    };\n  }\n\n  /**\n   * Render special sequence\n   */\n  private renderSpecial(parent: SVG | SVGGroup, text: string): RenderResult {\n    const textDim = this.measureText('? ' + text + ' ?');\n    const width = textDim.width + this.config.padding * 2;\n    const height = textDim.height + this.config.padding * 2;\n\n    const group = parent.append('g').attr('class', 'railroad-special');\n\n    // Rectangle with dashed border\n    group.append('rect').attr('x', 0).attr('y', 0).attr('width', width).attr('height', height);\n\n    // Text\n    group\n      .append('text')\n      .attr('x', width / 2)\n      .attr('y', height / 2)\n      .text('? ' + text + ' ?');\n\n    return {\n      element: group.node()!,\n      dimensions: {\n        width,\n        height,\n        up: height / 2,\n        down: height / 2,\n      },\n    };\n  }\n\n  /**\n   * Render an expression (recursive)\n   */\n  renderExpression(parent: SVG | SVGGroup, node: ASTNode): RenderResult {\n    switch (node.type) {\n      case 'terminal':\n        return this.renderTerminal(parent, node.value);\n\n      case 'nonterminal':\n        return this.renderNonTerminal(parent, node.name);\n\n      case 'sequence':\n        return this.renderSequence(parent, node.elements);\n\n      case 'choice':\n        return this.renderChoice(parent, node.alternatives);\n\n      case 'optional':\n        return this.renderOptional(parent, node.element);\n\n      case 'repetition':\n        return this.renderRepetition(parent, node.element, node.min);\n\n      case 'special':\n        return this.renderSpecial(parent, node.text);\n\n      default:\n        throw new Error(`Unknown node type: ${(node as any).type}`);\n    }\n  }\n\n  /**\n   * Render a single rule\n   */\n  renderRule(rule: RailroadRule, y: number): { height: number; width: number } {\n    const group = this.svg\n      .append('g')\n      .attr('class', 'railroad-rule')\n      .attr('transform', `translate(0, ${y})`);\n\n    const ruleName = rule.name + ' =';\n    const nameWidth = this.measureText(ruleName).width + 20;\n    const definitionX = nameWidth + 20;\n\n    // Render definition\n    const defGroup: SVGGroup = group.append('g');\n    const result = this.renderExpression(defGroup, rule.definition);\n    const baselineY = Math.max(20, result.dimensions.up);\n    const definitionY = baselineY - result.dimensions.up;\n    defGroup.attr('transform', `translate(${definitionX}, ${definitionY})`);\n\n    const nameGroup = group.append('g').attr('class', 'railroad-rule-name-group');\n    nameGroup\n      .append('text')\n      .attr('class', 'railroad-rule-name')\n      .attr('x', 0)\n      .attr('y', baselineY)\n      .text(ruleName);\n\n    // Start marker\n    const startMarker = group.append('g').attr('class', 'railroad-start');\n    startMarker\n      .append('circle')\n      .attr('cx', nameWidth)\n      .attr('cy', baselineY)\n      .attr('r', this.config.markerRadius);\n\n    // End marker\n    const endMarker = group.append('g').attr('class', 'railroad-end');\n    endMarker\n      .append('circle')\n      .attr('cx', definitionX + result.dimensions.width + 10)\n      .attr('cy', baselineY)\n      .attr('r', this.config.markerRadius);\n\n    // Line from start to definition\n    group\n      .append('path')\n      .attr('class', 'railroad-line')\n      .attr(\n        'd',\n        new PathBuilder()\n          .moveTo(nameWidth + this.config.markerRadius, baselineY)\n          .lineTo(definitionX, baselineY)\n          .build()\n      );\n\n    // Line from definition to end\n    group\n      .append('path')\n      .attr('class', 'railroad-line')\n      .attr(\n        'd',\n        new PathBuilder()\n          .moveTo(definitionX + result.dimensions.width, baselineY)\n          .lineTo(definitionX + result.dimensions.width + 10 - this.config.markerRadius, baselineY)\n          .build()\n      );\n\n    return {\n      height: Math.max(40, definitionY + result.dimensions.height + this.config.padding * 2),\n      width: definitionX + result.dimensions.width + 10 + this.config.markerRadius,\n    };\n  }\n\n  /**\n   * Render all rules\n   */\n  renderDiagram(rules: RailroadRule[]): { width: number; height: number } {\n    let y = this.config.padding;\n    let maxWidth = 0;\n\n    for (const rule of rules) {\n      const result = this.renderRule(rule, y);\n      y += result.height + this.config.verticalSeparation;\n      maxWidth = Math.max(maxWidth, result.width);\n    }\n\n    return {\n      width: maxWidth + this.config.padding * 2,\n      height: y + this.config.padding,\n    };\n  }\n}\n\nconst configureRailroadSvgSize = (\n  svg: SVG,\n  dimensions: { width: number; height: number },\n  useMaxWidth: boolean\n): void => {\n  configureSvgSize(svg, dimensions.height, dimensions.width, useMaxWidth);\n  svg.attr('viewBox', `0 0 ${dimensions.width} ${dimensions.height}`);\n};\n\n/**\n * Main draw function\n */\nconst draw: DrawDefinition = (text, id, _version) => {\n  log.debug('[Railroad] Rendering diagram\\n' + text);\n\n  try {\n    const svg = selectSvgElement(id);\n    svg.attr('class', 'railroad-diagram');\n    const railroadConfig = getConfigAPI().railroad;\n    const useMaxWidth = railroadConfig?.useMaxWidth ?? true;\n\n    const rules = db.getRules();\n    log.debug(`[Railroad] Rendering ${rules.length} rules`);\n\n    if (rules.length === 0) {\n      log.warn('[Railroad] No rules to render');\n      configureRailroadSvgSize(svg, { height: 100, width: 200 }, useMaxWidth);\n      return;\n    }\n\n    const renderer = new RailroadRenderer(svg, buildRailroadStyleOptions());\n    const dimensions = renderer.renderDiagram(rules);\n\n    configureRailroadSvgSize(svg, dimensions, useMaxWidth);\n\n    log.debug('[Railroad] Render complete');\n  } catch (error) {\n    log.error('[Railroad] Render error:', error);\n    throw error;\n  }\n};\n\nexport const renderer = { draw };\nexport default renderer;\n"],
  "mappings": "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",
  "names": ["diagramTitle", "accTitle", "accDescription", "rules", "ruleMap", "sanitizeText", "__name", "text", "getConfig", "sanitizeAstNode", "node", "clear", "log", "setTitle", "getTitle", "addRule", "rule", "sanitizedRule", "getRules", "getRule", "name", "setAccTitle", "getAccTitle", "setAccDescription", "getAccDescription", "setDiagramTitle", "getDiagramTitle", "db", "DEFAULT_RAILROAD_CONFIG", "COLOR_VALUE_PATTERN", "FONT_FAMILY_PATTERN", "RAILROAD_STYLE_OPTION_KEYS", "isRailroadStyleOptions", "__name", "options", "key", "extractRailroadOverrides", "extractThemeOverrides", "_railroad", "_svgId", "_theme", "_look", "themeOverrides", "sanitizeColorValue", "value", "fallback", "normalized", "sanitizeFontFamilyValue", "sanitizeNumberValue", "parsed", "parseThemeFontSize", "buildThemeDefaults", "themeVariables", "fontFamily", "DEFAULT_RAILROAD_CONFIG", "fontSize", "buildRailroadStyleOptions", "currentConfig", "getConfig", "getThemeVariables", "themeDefaults", "railroadOptions", "getStyles", "terminalFill", "terminalStroke", "terminalTextColor", "nonTerminalFill", "nonTerminalStroke", "nonTerminalTextColor", "lineColor", "strokeWidth", "markerFill", "commentFill", "commentStroke", "commentTextColor", "specialFill", "specialStroke", "ruleNameColor", "PathBuilder", "__name", "x", "y", "rx", "ry", "rotation", "largeArc", "sweep", "RailroadRenderer", "svg", "config", "buildRailroadStyleOptions", "text", "tempText", "bbox", "dimensions", "parent", "value", "textDim", "width", "height", "group", "name", "elements", "rendered", "e", "totalWidth", "maxUp", "maxDown", "r", "i", "lineX1", "lineX2", "lineY", "alternatives", "a", "maxWidth", "totalHeight", "arcRadius", "arcWidth", "centerY", "elemY", "elemCenterY", "elemX", "leftPath", "isBelowCenter", "rightPath", "rightStart", "rightLaneX", "element", "inner", "arcHeight", "lowerPath", "lowerPath2", "bypassPath", "min", "hasBypass", "loopY", "loopPath", "node", "rule", "ruleName", "nameWidth", "definitionX", "defGroup", "result", "baselineY", "definitionY", "rules", "configureRailroadSvgSize", "useMaxWidth", "configureSvgSize", "draw", "id", "_version", "log", "selectSvgElement", "getConfig", "db", "error", "renderer"]
}
