{
  "version": 3,
  "sources": ["../../../src/diagrams/cynefin/cynefinDb.ts", "../../../src/diagrams/cynefin/cynefinParser.ts", "../../../src/diagrams/cynefin/cynefinBoundaries.ts", "../../../src/diagrams/cynefin/cynefinRenderer.ts", "../../../src/diagrams/cynefin/styles.ts", "../../../src/diagrams/cynefin/cynefinDiagram.ts"],
  "sourcesContent": ["import type { DomainBlock, Transition } from '@mermaid-js/parser';\nimport { getConfig as commonGetConfig } from '../../config.js';\nimport type { CynefinDiagramConfig } from '../../config.type.js';\nimport DEFAULT_CONFIG from '../../defaultConfig.js';\nimport { log } from '../../logger.js';\nimport { cleanAndMerge } from '../../utils.js';\nimport {\n  clear as commonClear,\n  getAccDescription,\n  getAccTitle,\n  getDiagramTitle,\n  setAccDescription,\n  setAccTitle,\n  setDiagramTitle,\n} from '../common/commonDb.js';\nimport type { CynefinDB, CynefinDomain, CynefinTransition, DomainName } from './types.js';\n\ninterface CynefinData {\n  domains: Map<DomainName, CynefinDomain>;\n  transitions: CynefinTransition[];\n}\n\nconst createDefaultData = (): CynefinData => ({\n  domains: new Map(),\n  transitions: [],\n});\n\nlet data: CynefinData = createDefaultData();\n\nconst getDomains = (): Map<DomainName, CynefinDomain> => data.domains;\n\nconst getTransitions = (): CynefinTransition[] => data.transitions;\n\nconst setDomains = (blocks: DomainBlock[]) => {\n  if (!blocks) {\n    return;\n  }\n  for (const block of blocks) {\n    const domainName = block.domain as DomainName;\n    const items = (block.items ?? []).map((item) => ({\n      label: item.label,\n    }));\n    data.domains.set(domainName, {\n      name: domainName,\n      items,\n    });\n  }\n};\n\nconst setTransitions = (transitions: Transition[]) => {\n  if (!transitions) {\n    return;\n  }\n  data.transitions = transitions\n    .filter((t) => {\n      if (t.from === t.to) {\n        log.warn(\n          `Cynefin: self-loop transition on domain \"${t.from}\" is not meaningful and will be skipped.`\n        );\n        return false;\n      }\n      return true;\n    })\n    .map((t) => ({\n      from: t.from as DomainName,\n      to: t.to as DomainName,\n      label: t.label || undefined,\n    }));\n};\n\nconst getConfig = (): Required<CynefinDiagramConfig> => {\n  return cleanAndMerge({\n    ...DEFAULT_CONFIG.cynefin,\n    ...commonGetConfig().cynefin,\n  });\n};\n\nconst clear = () => {\n  commonClear();\n  data = createDefaultData();\n};\n\nexport const db: CynefinDB = {\n  getDomains,\n  getTransitions,\n  setDomains,\n  setTransitions,\n  getConfig,\n  clear,\n  setAccTitle,\n  getAccTitle,\n  setDiagramTitle,\n  getDiagramTitle,\n  getAccDescription,\n  setAccDescription,\n};\n", "import type { Cynefin } from '@mermaid-js/parser';\nimport { parse } from '@mermaid-js/parser';\nimport type { ParserDefinition } from '../../diagram-api/types.js';\nimport { log } from '../../logger.js';\nimport { populateCommonDb } from '../common/populateCommonDb.js';\nimport { db } from './cynefinDb.js';\n\nconst populate = (ast: Cynefin) => {\n  populateCommonDb(ast, db);\n  db.setDomains(ast.domains);\n  db.setTransitions(ast.transitions);\n};\n\nexport const parser: ParserDefinition = {\n  parse: async (input: string): Promise<void> => {\n    const ast: Cynefin = await parse('cynefin', input);\n    log.debug(ast);\n    populate(ast);\n  },\n};\n", "/**\n * Deterministic pseudo-random number generator (mulberry32).\n * Returns a function that produces values in [0, 1).\n */\nexport function seededRandom(seed: number): number {\n  let t = (seed + 0x6d2b79f5) | 0;\n  t = Math.imul(t ^ (t >>> 15), t | 1);\n  t ^= t + Math.imul(t ^ (t >>> 7), t | 61);\n  return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n}\n\n/**\n * Simple string hash for seeding the PRNG.\n */\nexport function hashString(str: string): number {\n  let hash = 0;\n  for (let i = 0; i < str.length; i++) {\n    const ch = str.charCodeAt(i);\n    hash = (hash << 5) - hash + ch;\n    hash |= 0;\n  }\n  return hash;\n}\n\n/**\n * Resolve the boundary-waviness seed. A non-zero configured seed takes\n * precedence so renders are reproducible (visual regression tests). When the\n * configured seed is 0 or absent we fall back to hashing the SVG element id,\n * which gives each rendered diagram its own waviness pattern at the cost of\n * being unstable across renders.\n */\nexport function resolveSeed(configuredSeed: number | undefined, id: string): number {\n  if (\n    typeof configuredSeed === 'number' &&\n    Number.isFinite(configuredSeed) &&\n    configuredSeed !== 0\n  ) {\n    return configuredSeed;\n  }\n  return hashString(id);\n}\n\n/**\n * Generate a vertical wavy line (the \"fold\") through the center of the diagram.\n * Uses cubic bezier segments with alternating control point offsets.\n * @param width - diagram width\n * @param height - diagram height\n * @param seed - deterministic seed for variation\n * @param amplitudeOverride - optional amplitude in pixels; falls back to 1.5% of width\n * @returns SVG path d attribute string\n */\nexport function generateFoldPath(\n  width: number,\n  height: number,\n  seed: number,\n  amplitudeOverride?: number\n): string {\n  const cx = width / 2;\n  const amplitude = amplitudeOverride ?? width * 0.015;\n  const segments = 7;\n  const segHeight = height / segments;\n  const points: { x: number; y: number }[] = [];\n\n  for (let i = 0; i <= segments; i++) {\n    const jitter = seededRandom(seed + i * 17) * amplitude * 2 - amplitude;\n    points.push({ x: cx + jitter, y: i * segHeight });\n  }\n\n  let d = `M${points[0].x},${points[0].y}`;\n  for (let i = 0; i < points.length - 1; i++) {\n    const p0 = points[i];\n    const p1 = points[i + 1];\n    const midY = (p0.y + p1.y) / 2;\n    const dir = i % 2 === 0 ? 1 : -1;\n    const offset = amplitude * 1.5 * dir * seededRandom(seed + i * 31 + 7);\n    const cp1x = p0.x + offset;\n    const cp1y = midY;\n    const cp2x = p1.x - offset;\n    const cp2y = midY;\n    d += ` C${cp1x},${cp1y} ${cp2x},${cp2y} ${p1.x},${p1.y}`;\n  }\n\n  return d;\n}\n\n/**\n * Generate a horizontal wavy line through the center of the diagram.\n * @param width - diagram width\n * @param height - diagram height\n * @param seed - deterministic seed for variation\n * @param amplitudeOverride - optional amplitude in pixels; falls back to 1.5% of height\n * @returns SVG path d attribute string\n */\nexport function generateHorizontalBoundary(\n  width: number,\n  height: number,\n  seed: number,\n  amplitudeOverride?: number\n): string {\n  const cy = height / 2;\n  const amplitude = amplitudeOverride ?? height * 0.015;\n  const segments = 7;\n  const segWidth = width / segments;\n  const points: { x: number; y: number }[] = [];\n\n  for (let i = 0; i <= segments; i++) {\n    const jitter = seededRandom(seed + i * 23) * amplitude * 2 - amplitude;\n    points.push({ x: i * segWidth, y: cy + jitter });\n  }\n\n  let d = `M${points[0].x},${points[0].y}`;\n  for (let i = 0; i < points.length - 1; i++) {\n    const p0 = points[i];\n    const p1 = points[i + 1];\n    const midX = (p0.x + p1.x) / 2;\n    const dir = i % 2 === 0 ? 1 : -1;\n    const offset = amplitude * 1.5 * dir * seededRandom(seed + i * 37 + 11);\n    const cp1x = midX;\n    const cp1y = p0.y + offset;\n    const cp2x = midX;\n    const cp2y = p1.y - offset;\n    d += ` C${cp1x},${cp1y} ${cp2x},${cp2y} ${p1.x},${p1.y}`;\n  }\n\n  return d;\n}\n\n/**\n * Generate the \"cliff\" path between Clear (bottom-right) and Chaotic (bottom-left).\n * This is a thicker, more abrupt boundary near the bottom center.\n * @param width - diagram width\n * @param height - diagram height\n * @returns SVG path d attribute string\n */\nexport function generateCliffPath(width: number, height: number): string {\n  const cx = width / 2;\n  const topY = height * 0.5;\n  const bottomY = height;\n  const amplitude = width * 0.03;\n\n  // A steep S-curve from the center downward\n  return [\n    `M${cx},${topY}`,\n    `C${cx + amplitude},${topY + (bottomY - topY) * 0.2}`,\n    `${cx - amplitude * 1.5},${topY + (bottomY - topY) * 0.55}`,\n    `${cx + amplitude * 0.5},${topY + (bottomY - topY) * 0.75}`,\n    `C${cx - amplitude},${topY + (bottomY - topY) * 0.85}`,\n    `${cx + amplitude * 0.3},${topY + (bottomY - topY) * 0.95}`,\n    `${cx},${bottomY}`,\n  ].join(' ');\n}\n\n/**\n * Generate an ellipse SVG path for the confusion/disorder region at the center.\n * @param cx - center x\n * @param cy - center y\n * @param rx - horizontal radius\n * @param ry - vertical radius\n * @returns SVG path d attribute string for an ellipse\n */\nexport function generateConfusionPath(cx: number, cy: number, rx: number, ry: number): string {\n  // Draw an ellipse using two arc commands\n  return [\n    `M${cx - rx},${cy}`,\n    `A${rx},${ry} 0 1,1 ${cx + rx},${cy}`,\n    `A${rx},${ry} 0 1,1 ${cx - rx},${cy}`,\n    'Z',\n  ].join(' ');\n}\n", "import type { Diagram } from '../../Diagram.js';\nimport type { DiagramRenderer, DrawDefinition, SVG } from '../../diagram-api/types.js';\nimport { selectSvgElement } from '../../rendering-util/selectSvgElement.js';\nimport { configureSvgSize } from '../../setupGraphViewbox.js';\nimport { log } from '../../logger.js';\nimport { getConfig as getConfigAPI } from '../../config.js';\nimport { getThemeVariables } from '../../themes/theme-default.js';\nimport { cleanAndMerge } from '../../utils.js';\nimport type { CynefinDB, CynefinDomain, CynefinTransition, DomainName } from './types.js';\nimport {\n  generateFoldPath,\n  generateHorizontalBoundary,\n  generateCliffPath,\n  generateConfusionPath,\n  resolveSeed,\n} from './cynefinBoundaries.js';\n\ninterface DomainMeta {\n  model: string;\n  practice: string;\n}\n\nconst DOMAIN_META: Record<DomainName, DomainMeta> = {\n  complex: { model: 'Probe \\u2192 Sense \\u2192 Respond', practice: 'Emergent Practices' },\n  complicated: { model: 'Sense \\u2192 Analyse \\u2192 Respond', practice: 'Good Practices' },\n  clear: { model: 'Sense \\u2192 Categorise \\u2192 Respond', practice: 'Best Practices' },\n  chaotic: { model: 'Act \\u2192 Sense \\u2192 Respond', practice: 'Novel Practices' },\n  confusion: { model: '', practice: 'Disorder' },\n};\n\ninterface DomainLayout {\n  cx: number;\n  cy: number;\n  x: number;\n  y: number;\n  w: number;\n  h: number;\n}\n\nconst getDomainLayouts = (width: number, height: number): Record<DomainName, DomainLayout> => {\n  const hw = width / 2;\n  const hh = height / 2;\n  return {\n    complex: { cx: hw / 2, cy: hh / 2, x: 0, y: 0, w: hw, h: hh },\n    complicated: { cx: hw + hw / 2, cy: hh / 2, x: hw, y: 0, w: hw, h: hh },\n    chaotic: { cx: hw / 2, cy: hh + hh / 2, x: 0, y: hh, w: hw, h: hh },\n    clear: { cx: hw + hw / 2, cy: hh + hh / 2, x: hw, y: hh, w: hw, h: hh },\n    confusion: { cx: hw, cy: hh, x: hw * 0.7, y: hh * 0.7, w: hw * 0.6, h: hh * 0.6 },\n  };\n};\n\ninterface CynefinDomainColors {\n  complexBg: string;\n  complicatedBg: string;\n  chaoticBg: string;\n  clearBg: string;\n  confusionBg: string;\n}\n\n/** Resolve only the domain background colors from the cynefin theme block. */\nconst getCynefinDomainColors = (): CynefinDomainColors => {\n  const defaultThemeVariables = getThemeVariables();\n  const currentConfig = getConfigAPI();\n  const themeVariables = cleanAndMerge(defaultThemeVariables, currentConfig.themeVariables);\n  return themeVariables.cynefin as CynefinDomainColors;\n};\n\n/** Maximum items rendered inside the confusion ellipse before overflow badge is shown. */\nconst MAX_CONFUSION_ITEMS = 3;\n\nconst draw: DrawDefinition = (_text, id, _version, diagram: Diagram) => {\n  const db = diagram.db as CynefinDB;\n  const domains = db.getDomains();\n  const transitions = db.getTransitions();\n  const title = db.getDiagramTitle();\n  const accTitle = db.getAccTitle();\n  const accDescription = db.getAccDescription();\n  const config = db.getConfig();\n  const domainColors = getCynefinDomainColors();\n\n  log.debug('Rendering Cynefin diagram');\n\n  const width = config.width;\n  const height = config.height;\n  const padding = config.padding;\n  const showDomainDescriptions = config.showDomainDescriptions;\n  const boundaryAmplitude = config.boundaryAmplitude;\n  const totalWidth = width + padding * 2;\n  const totalHeight = height + padding * 2;\n\n  const domainBg: Record<DomainName, string> = {\n    complex: domainColors.complexBg,\n    complicated: domainColors.complicatedBg,\n    clear: domainColors.clearBg,\n    chaotic: domainColors.chaoticBg,\n    confusion: domainColors.confusionBg,\n  };\n\n  const svg: SVG = selectSvgElement(id);\n\n  configureSvgSize(svg, totalHeight, totalWidth, config.useMaxWidth ?? true);\n  svg.attr('viewBox', `0 0 ${totalWidth} ${totalHeight}`);\n\n  // Accessibility: use <title> element (W3C recommendation for SVG)\n  if (accTitle) {\n    svg.append('title').text(accTitle);\n  }\n  if (accDescription) {\n    svg.append('desc').text(accDescription);\n  }\n\n  const root = svg.append('g').attr('transform', `translate(${padding}, ${padding})`);\n\n  const layouts = getDomainLayouts(width, height);\n  const seed = resolveSeed(config.seed, id);\n\n  // 1. Domain background rectangles\n  const bgGroup = root.append('g').attr('class', 'cynefin-backgrounds');\n  const quadrantDomains: DomainName[] = ['complex', 'complicated', 'chaotic', 'clear'];\n  for (const domainName of quadrantDomains) {\n    const layout = layouts[domainName];\n    bgGroup\n      .append('rect')\n      .attr('class', 'cynefinDomain')\n      .attr('x', layout.x)\n      .attr('y', layout.y)\n      .attr('width', layout.w)\n      .attr('height', layout.h)\n      .attr('fill', domainBg[domainName])\n      .attr('fill-opacity', 0.4)\n      .attr('stroke', 'none');\n  }\n\n  // 2. Wavy boundaries \u2014 stroke handled by .cynefinBoundary CSS class\n  const boundaryGroup = root.append('g').attr('class', 'cynefin-boundaries');\n\n  boundaryGroup\n    .append('path')\n    .attr('class', 'cynefinBoundary')\n    .attr('d', generateFoldPath(width, height, seed, boundaryAmplitude))\n    .attr('fill', 'none');\n\n  boundaryGroup\n    .append('path')\n    .attr('class', 'cynefinBoundary')\n    .attr('d', generateHorizontalBoundary(width, height, seed + 100, boundaryAmplitude))\n    .attr('fill', 'none');\n\n  // 3. The cliff (thicker, between Clear and Chaotic) \u2014 stroke handled by .cynefinCliff CSS class\n  boundaryGroup\n    .append('path')\n    .attr('class', 'cynefinCliff')\n    .attr('d', generateCliffPath(width, height))\n    .attr('fill', 'none');\n\n  // 4. Confusion ellipse (center overlay) \u2014 stroke handled by .cynefinConfusion CSS class\n  // Using width*0.15 and height*0.15 gives enough room for up to ~3 item badges\n  const confusionRx = width * 0.15;\n  const confusionRy = height * 0.15;\n  root\n    .append('path')\n    .attr('class', 'cynefinConfusion')\n    .attr('d', generateConfusionPath(width / 2, height / 2, confusionRx, confusionRy))\n    .attr('fill', domainBg.confusion)\n    .attr('fill-opacity', 0.5);\n\n  // 5. Domain name labels \u2014 text styling handled by .cynefinDomainLabel CSS class\n  const labelGroup = root.append('g').attr('class', 'cynefin-labels');\n  for (const domainName of quadrantDomains) {\n    const layout = layouts[domainName];\n    labelGroup\n      .append('text')\n      .attr('class', 'cynefinDomainLabel')\n      .attr('x', layout.cx)\n      .attr('y', showDomainDescriptions ? layout.cy - 30 : layout.cy)\n      .attr('text-anchor', 'middle')\n      .attr('dominant-baseline', 'middle')\n      .text(domainName.charAt(0).toUpperCase() + domainName.slice(1));\n  }\n\n  // Confusion label\n  labelGroup\n    .append('text')\n    .attr('class', 'cynefinDomainLabel')\n    .attr('x', width / 2)\n    .attr('y', showDomainDescriptions ? height / 2 - 10 : height / 2)\n    .attr('text-anchor', 'middle')\n    .attr('dominant-baseline', 'middle')\n    .text('Confusion');\n\n  // 6. Domain description subtitles \u2014 text styling handled by .cynefinSubtitle CSS class\n  if (showDomainDescriptions) {\n    const subtitleGroup = root.append('g').attr('class', 'cynefin-subtitles');\n    for (const domainName of quadrantDomains) {\n      const layout = layouts[domainName];\n      const meta = DOMAIN_META[domainName];\n\n      subtitleGroup\n        .append('text')\n        .attr('class', 'cynefinSubtitle')\n        .attr('x', layout.cx)\n        .attr('y', layout.cy - 10)\n        .attr('text-anchor', 'middle')\n        .attr('dominant-baseline', 'middle')\n        .text(meta.model);\n\n      subtitleGroup\n        .append('text')\n        .attr('class', 'cynefinSubtitle')\n        .attr('x', layout.cx)\n        .attr('y', layout.cy + 5)\n        .attr('text-anchor', 'middle')\n        .attr('dominant-baseline', 'middle')\n        .text(meta.practice);\n    }\n\n    // Confusion subtitle\n    subtitleGroup\n      .append('text')\n      .attr('class', 'cynefinSubtitle')\n      .attr('x', width / 2)\n      .attr('y', height / 2 + 8)\n      .attr('text-anchor', 'middle')\n      .attr('dominant-baseline', 'middle')\n      .text(DOMAIN_META.confusion.practice);\n  }\n\n  // 7. Items as text badges within each domain\n  const itemGroup = root.append('g').attr('class', 'cynefin-items');\n  const itemHeight = 26;\n  const itemPaddingX = 10;\n\n  const allDomains: DomainName[] = ['complex', 'complicated', 'chaotic', 'clear', 'confusion'];\n  for (const domainName of allDomains) {\n    const domain: CynefinDomain | undefined = domains.get(domainName);\n    if (!domain || domain.items.length === 0) {\n      continue;\n    }\n\n    const layout = layouts[domainName];\n    const isConfusion = domainName === 'confusion';\n\n    // For confusion: cap items and center the block around the ellipse center.\n    // For quadrant domains: start below the label/subtitle area.\n    let itemsToRender = domain.items;\n    let overflowCount = 0;\n    if (isConfusion && domain.items.length > MAX_CONFUSION_ITEMS) {\n      overflowCount = domain.items.length - MAX_CONFUSION_ITEMS;\n      itemsToRender = domain.items.slice(0, MAX_CONFUSION_ITEMS);\n    }\n\n    let startY: number;\n    if (isConfusion) {\n      // Center the item block below the label within the ellipse\n      const labelOffset = showDomainDescriptions ? 22 : 14;\n      startY = layout.cy + labelOffset;\n    } else {\n      startY = layout.cy + (showDomainDescriptions ? 25 : 15);\n    }\n\n    // Render item badges using getBBox() for accurate width measurement\n    [...itemsToRender].forEach((item, idx) => {\n      const itemY = startY + idx * (itemHeight + 4);\n      const g = itemGroup.append('g');\n\n      // Append text first to measure actual rendered width\n      const textEl = g\n        .append('text')\n        .attr('class', 'cynefinItemText')\n        .attr('x', 0)\n        .attr('y', itemHeight / 2)\n        .attr('text-anchor', 'middle')\n        .attr('dominant-baseline', 'central')\n        .text(item.label);\n\n      // Measure rendered text width; fall back to character-count heuristic if unavailable\n      let measuredWidth = item.label.length * 7;\n      const textNode = textEl.node();\n      if (textNode && typeof textNode.getBBox === 'function') {\n        const bbox = textNode.getBBox();\n        if (bbox.width > 0) {\n          measuredWidth = bbox.width;\n        }\n      }\n\n      const badgeWidth = measuredWidth + itemPaddingX * 2;\n      const itemX = layout.cx - badgeWidth / 2;\n\n      g.attr('transform', `translate(${itemX}, ${itemY})`);\n\n      // Insert rect behind the text, sized to measured badge width\n      g.insert('rect', 'text')\n        .attr('class', 'cynefinItem')\n        .attr('x', 0)\n        .attr('y', 0)\n        .attr('width', badgeWidth)\n        .attr('height', itemHeight)\n        .attr('rx', 4)\n        .attr('ry', 4)\n        .attr('fill', domainBg[domainName])\n        .attr('fill-opacity', 0.95);\n\n      // Centre text within badge\n      textEl.attr('x', badgeWidth / 2).attr('y', itemHeight / 2);\n    });\n\n    // Overflow badge: \"+N more\" when confusion has more items than MAX_CONFUSION_ITEMS\n    if (overflowCount > 0) {\n      const overflowY = startY + itemsToRender.length * (itemHeight + 4);\n      const overflowLabel = `+${overflowCount} more`;\n      const g = itemGroup.append('g');\n\n      const textEl = g\n        .append('text')\n        .attr('class', 'cynefinItemText')\n        .attr('x', 0)\n        .attr('y', itemHeight / 2)\n        .attr('text-anchor', 'middle')\n        .attr('dominant-baseline', 'central')\n        .text(overflowLabel);\n\n      let measuredWidth = overflowLabel.length * 7;\n      const textNode = textEl.node();\n      if (textNode && typeof textNode.getBBox === 'function') {\n        const bbox = textNode.getBBox();\n        if (bbox.width > 0) {\n          measuredWidth = bbox.width;\n        }\n      }\n\n      const badgeWidth = measuredWidth + itemPaddingX * 2;\n      const itemX = layout.cx - badgeWidth / 2;\n\n      g.attr('transform', `translate(${itemX}, ${overflowY})`);\n\n      g.insert('rect', 'text')\n        .attr('class', 'cynefinItemOverflow')\n        .attr('x', 0)\n        .attr('y', 0)\n        .attr('width', badgeWidth)\n        .attr('height', itemHeight)\n        .attr('rx', 4)\n        .attr('ry', 4)\n        .attr('fill', domainBg[domainName])\n        .attr('fill-opacity', 0.6);\n\n      textEl.attr('x', badgeWidth / 2).attr('y', itemHeight / 2);\n    }\n  }\n\n  // 8. Transition arrows between domain centers\n  if (transitions.length > 0) {\n    const defs = svg.select('defs').empty() ? svg.append('defs') : svg.select('defs');\n    const markerId = `cynefin-arrow-${id}`;\n\n    defs\n      .append('marker')\n      .attr('id', markerId)\n      .attr('viewBox', '0 0 10 10')\n      .attr('refX', 9)\n      .attr('refY', 5)\n      .attr('markerWidth', 6)\n      .attr('markerHeight', 6)\n      .attr('orient', 'auto-start-reverse')\n      .append('path')\n      .attr('d', 'M 0 0 L 10 5 L 0 10 z')\n      .attr('class', 'cynefinArrowHead');\n\n    const arrowGroup = root.append('g').attr('class', 'cynefin-arrows');\n\n    transitions.forEach((transition: CynefinTransition) => {\n      const fromLayout = layouts[transition.from];\n      const toLayout = layouts[transition.to];\n      if (!fromLayout || !toLayout) {\n        return;\n      }\n\n      // Self-loops are filtered at the DB level; guard here handles any edge case\n      if (transition.from === transition.to) {\n        log.warn(`Cynefin renderer: skipping self-loop on domain \"${transition.from}\"`);\n        return;\n      }\n\n      // All math in root-local (unpadded) coordinates to match the <g> transform.\n      const x1 = fromLayout.cx;\n      const y1 = fromLayout.cy;\n      const x2 = toLayout.cx;\n      const y2 = toLayout.cy;\n\n      // Quadratic bezier with perpendicular offset\n      const mx = (x1 + x2) / 2;\n      const my = (y1 + y2) / 2;\n      const dx = x2 - x1;\n      const dy = y2 - y1;\n      const len = Math.sqrt(dx * dx + dy * dy);\n      const offsetAmount = len * 0.15;\n      const nx = -dy / len;\n      const ny = dx / len;\n      const cpx = mx + nx * offsetAmount;\n      const cpy = my + ny * offsetAmount;\n\n      arrowGroup\n        .append('path')\n        .attr('class', 'cynefinArrowLine')\n        .attr('d', `M${x1},${y1} Q${cpx},${cpy} ${x2},${y2}`)\n        .attr('fill', 'none')\n        .attr('marker-end', `url(#${markerId})`);\n\n      // Optional label \u2014 text styling handled by .cynefinArrowLabel CSS class\n      if (transition.label) {\n        arrowGroup\n          .append('text')\n          .attr('class', 'cynefinArrowLabel')\n          .attr('x', cpx)\n          .attr('y', cpy - 6)\n          .attr('text-anchor', 'middle')\n          .attr('dominant-baseline', 'auto')\n          .text(transition.label);\n      }\n    });\n  }\n\n  // Title \u2014 text styling handled by .cynefinTitle CSS class\n  if (title) {\n    root\n      .append('text')\n      .attr('class', 'cynefinTitle')\n      .attr('x', width / 2)\n      .attr('y', -padding / 2)\n      .attr('text-anchor', 'middle')\n      .attr('dominant-baseline', 'middle')\n      .text(title);\n  }\n};\n\nexport const renderer: DiagramRenderer = { draw };\n", "import type { DiagramStylesProvider } from '../../diagram-api/types.js';\nimport { cleanAndMerge } from '../../utils.js';\nimport { getThemeVariables } from '../../themes/theme-default.js';\nimport { getConfig as getConfigAPI } from '../../config.js';\n\n/**\n * Resolve the cynefin-specific theme block from the current mermaid theme.\n * All presentation values (colors, font sizes, stroke widths) are sourced from\n * here rather than duplicated as inline SVG attributes in the renderer.\n */\nconst getCynefinTheme = () => {\n  const defaultThemeVariables = getThemeVariables();\n  const currentConfig = getConfigAPI();\n  const themeVariables = cleanAndMerge(defaultThemeVariables, currentConfig.themeVariables);\n  return themeVariables.cynefin as {\n    domainFontSize: number;\n    itemFontSize: number;\n    boundaryColor: string;\n    boundaryWidth: number;\n    cliffColor: string;\n    cliffWidth: number;\n    arrowColor: string;\n    arrowWidth: number;\n    textColor: string;\n    labelColor: string;\n  };\n};\n\nexport const styles: DiagramStylesProvider = () => {\n  const t = getCynefinTheme();\n  return `\n\t.cynefinDomain {\n\t\tstroke: none;\n\t}\n\t.cynefinDomainLabel {\n\t\tfont-size: ${t.domainFontSize}px;\n\t\tfont-weight: bold;\n\t\tfill: ${t.labelColor};\n\t}\n\t.cynefinSubtitle {\n\t\tfont-size: ${t.itemFontSize - 1}px;\n\t\tfill: ${t.textColor};\n\t\tfont-style: italic;\n\t}\n\t.cynefinItem {\n\t\tfill-opacity: 0.95;\n\t\tstroke: ${t.boundaryColor};\n\t\tstroke-width: 1;\n\t}\n\t.cynefinItemText {\n\t\tfont-size: ${t.itemFontSize}px;\n\t\tfill: ${t.textColor};\n\t}\n\t.cynefinItemOverflow {\n\t\tfill-opacity: 0.6;\n\t\tstroke: ${t.boundaryColor};\n\t\tstroke-width: 1;\n\t\tstroke-dasharray: 3 2;\n\t}\n\t.cynefinBoundary {\n\t\tstroke: ${t.boundaryColor};\n\t\tstroke-width: ${t.boundaryWidth};\n\t\tstroke-dasharray: 6 3;\n\t}\n\t.cynefinCliff {\n\t\tstroke: ${t.cliffColor};\n\t\tstroke-width: ${t.cliffWidth};\n\t}\n\t.cynefinConfusion {\n\t\tstroke: ${t.boundaryColor};\n\t\tstroke-width: 1.5;\n\t\tstroke-dasharray: 4 2;\n\t}\n\t.cynefinArrowLine {\n\t\tstroke: ${t.arrowColor};\n\t\tstroke-width: ${t.arrowWidth};\n\t\tfill: none;\n\t}\n\t.cynefinArrowHead {\n\t\tfill: ${t.arrowColor};\n\t\tstroke: none;\n\t}\n\t.cynefinArrowLabel {\n\t\tfont-size: ${t.itemFontSize - 1}px;\n\t\tfill: ${t.textColor};\n\t}\n\t.cynefinTitle {\n\t\tfont-size: ${t.domainFontSize + 2}px;\n\t\tfont-weight: bold;\n\t\tfill: ${t.labelColor};\n\t}\n\t`;\n};\n\nexport default styles;\n", "import type { DiagramDefinition } from '../../diagram-api/types.js';\nimport { parser } from './cynefinParser.js';\nimport { db } from './cynefinDb.js';\nimport { renderer } from './cynefinRenderer.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", "diagram", "db"]
}
