{
  "version": 3,
  "sources": ["../../../src/diagrams/treemap/db.ts", "../../../src/diagrams/treemap/utils.ts", "../../../src/diagrams/treemap/parser.ts", "../../../src/diagrams/treemap/renderer.ts", "../../../src/diagrams/treemap/styles.ts", "../../../src/diagrams/treemap/diagram.ts"],
  "sourcesContent": ["import type { DiagramDB } from '../../diagram-api/types.js';\nimport type { DiagramStyleClassDef } from '../../diagram-api/types.js';\nimport type { TreemapDiagramConfig, TreemapNode } from './types.js';\nimport DEFAULT_CONFIG from '../../defaultConfig.js';\nimport { getConfig as commonGetConfig } from '../../config.js';\nimport { cleanAndMerge } from '../../utils.js';\nimport { isLabelStyle } from '../../rendering-util/rendering-elements/shapes/handDrawnShapeStyles.js';\nimport {\n  clear as commonClear,\n  getAccDescription,\n  getAccTitle,\n  getDiagramTitle,\n  setAccDescription,\n  setAccTitle,\n  setDiagramTitle,\n} from '../common/commonDb.js';\nexport class TreeMapDB implements DiagramDB {\n  private nodes: TreemapNode[] = [];\n  private levels: Map<TreemapNode, number> = new Map<TreemapNode, number>();\n  private outerNodes: TreemapNode[] = [];\n  private classes: Map<string, DiagramStyleClassDef> = new Map<string, DiagramStyleClassDef>();\n  private root?: TreemapNode;\n\n  public getNodes() {\n    return this.nodes;\n  }\n\n  public getConfig() {\n    const defaultConfig = DEFAULT_CONFIG as unknown as { treemap: Required<TreemapDiagramConfig> };\n    const userConfig = commonGetConfig() as unknown as { treemap?: Partial<TreemapDiagramConfig> };\n    return cleanAndMerge({\n      ...defaultConfig.treemap,\n      ...(userConfig.treemap ?? {}),\n    }) as Required<TreemapDiagramConfig>;\n  }\n\n  public addNode(node: TreemapNode, level: number) {\n    this.nodes.push(node);\n    this.levels.set(node, level);\n    if (level === 0) {\n      this.outerNodes.push(node);\n      this.root ??= node;\n    }\n  }\n\n  public getRoot() {\n    return { name: '', children: this.outerNodes };\n  }\n\n  public addClass(id: string, _style: string) {\n    const styleClass = this.classes.get(id) ?? { id, styles: [], textStyles: [] };\n    const styles = _style.replace(/\\\\,/g, '\u00A7\u00A7\u00A7').replace(/,/g, ';').replace(/\u00A7\u00A7\u00A7/g, ',').split(';');\n    if (styles) {\n      styles.forEach((s) => {\n        if (isLabelStyle(s)) {\n          if (styleClass?.textStyles) {\n            styleClass.textStyles.push(s);\n          } else {\n            styleClass.textStyles = [s];\n          }\n        }\n        if (styleClass?.styles) {\n          styleClass.styles.push(s);\n        } else {\n          styleClass.styles = [s];\n        }\n      });\n    }\n    this.classes.set(id, styleClass);\n  }\n\n  public getClasses() {\n    return this.classes;\n  }\n\n  public getStylesForClass(classSelector: string): string[] {\n    return this.classes.get(classSelector)?.styles ?? [];\n  }\n\n  public clear() {\n    commonClear();\n    this.nodes = [];\n    this.levels = new Map();\n    this.outerNodes = [];\n    this.classes = new Map();\n    this.root = undefined;\n  }\n\n  public setAccTitle = setAccTitle;\n  public getAccTitle = getAccTitle;\n  public setDiagramTitle = setDiagramTitle;\n  public getDiagramTitle = getDiagramTitle;\n  public getAccDescription = getAccDescription;\n  public setAccDescription = setAccDescription;\n}\n", "import type { TreemapNode } from './types.js';\n\n/**\n * Converts a flat array of treemap items into a hierarchical structure\n * @param items - Array of flat treemap items with level, name, type, and optional value\n * @returns A hierarchical tree structure\n */\nexport function buildHierarchy(\n  items: {\n    level: number;\n    name: string;\n    type: string;\n    value?: number;\n    classSelector?: string;\n    cssCompiledStyles?: string;\n  }[]\n): TreemapNode[] {\n  if (!items.length) {\n    return [];\n  }\n\n  const root: TreemapNode[] = [];\n  const stack: { node: TreemapNode; level: number }[] = [];\n\n  items.forEach((item) => {\n    const node: TreemapNode = {\n      name: item.name,\n      children: item.type === 'Leaf' ? undefined : [],\n    };\n    node.classSelector = item?.classSelector;\n    if (item?.cssCompiledStyles) {\n      node.cssCompiledStyles = [item.cssCompiledStyles];\n    }\n\n    if (item.type === 'Leaf' && item.value !== undefined) {\n      node.value = item.value;\n    }\n\n    // Find the right parent for this node\n    while (stack.length > 0 && stack[stack.length - 1].level >= item.level) {\n      stack.pop();\n    }\n\n    if (stack.length === 0) {\n      // This is a root node\n      root.push(node);\n    } else {\n      // Add as child to the parent\n      const parent = stack[stack.length - 1].node;\n      if (parent.children) {\n        parent.children.push(node);\n      } else {\n        parent.children = [node];\n      }\n    }\n\n    // Only add to stack if it can have children\n    if (item.type !== 'Leaf') {\n      stack.push({ node, level: item.level });\n    }\n  });\n\n  return root;\n}\n", "import { 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 type { TreemapNode, TreemapAst, TreemapDB } from './types.js';\nimport { buildHierarchy } from './utils.js';\nimport { TreeMapDB } from './db.js';\n\n/**\n * Populates the database with data from the Treemap AST\n * @param ast - The Treemap AST\n */\nconst populate = (ast: TreemapAst, db: TreemapDB) => {\n  // We need to bypass the type checking for populateCommonDb\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  populateCommonDb(ast as any, db);\n\n  const items: {\n    level: number;\n    name: string;\n    type: string;\n    value?: number;\n    classSelector?: string;\n    cssCompiledStyles?: string;\n  }[] = [];\n\n  // Extract classes and styles from the treemap\n  for (const row of ast.TreemapRows ?? []) {\n    if (row.$type === 'ClassDefStatement') {\n      db.addClass(row.className ?? '', row.styleText ?? '');\n    }\n  }\n\n  // Extract data from each row in the treemap\n  for (const row of ast.TreemapRows ?? []) {\n    const item = row.item;\n\n    if (!item) {\n      continue;\n    }\n\n    const level = row.indent ? parseInt(row.indent) : 0;\n    const name = getItemName(item);\n\n    // Get styles as a string if they exist\n    const styles = item.classSelector ? db.getStylesForClass(item.classSelector) : [];\n    const cssCompiledStyles = styles.length > 0 ? styles.join(';') : undefined;\n\n    const itemData = {\n      level,\n      name,\n      type: item.$type,\n      value: item.value,\n      classSelector: item.classSelector,\n      cssCompiledStyles,\n    };\n\n    items.push(itemData);\n  }\n\n  // Convert flat structure to hierarchical\n  const hierarchyNodes = buildHierarchy(items);\n\n  // Add all nodes to the database\n  const addNodesRecursively = (nodes: TreemapNode[], level: number) => {\n    for (const node of nodes) {\n      db.addNode(node, level);\n      if (node.children && node.children.length > 0) {\n        addNodesRecursively(node.children, level + 1);\n      }\n    }\n  };\n\n  addNodesRecursively(hierarchyNodes, 0);\n};\n\n/**\n * Gets the name of a treemap item\n * @param item - The treemap item\n * @returns The name of the item\n */\nconst getItemName = (item: { name?: string | number }): string => {\n  return item.name ? String(item.name) : '';\n};\n\nexport const parser: ParserDefinition = {\n  // @ts-expect-error - TreeMapDB is not assignable to DiagramDB\n  parser: { yy: undefined },\n  parse: async (text: string): Promise<void> => {\n    try {\n      // Use a generic parse that accepts any diagram type\n\n      const parseFunc = parse as (diagramType: string, text: string) => Promise<TreemapAst>;\n      const ast = await parseFunc('treemap', text);\n      log.debug('Treemap AST:', ast);\n      const db = parser.parser?.yy;\n      if (!(db instanceof TreeMapDB)) {\n        throw new Error(\n          'parser.parser?.yy was not a TreemapDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.'\n        );\n      }\n      populate(ast, db);\n    } catch (error) {\n      log.error('Error parsing treemap:', error);\n      throw error;\n    }\n  },\n};\n", "import type { Diagram } from '../../Diagram.js';\nimport type {\n  DiagramRenderer,\n  DiagramStyleClassDef,\n  DrawDefinition,\n} from '../../diagram-api/types.js';\nimport { selectSvgElement } from '../../rendering-util/selectSvgElement.js';\nimport { setupViewPortForSVG } from '../../rendering-util/setupViewPortForSVG.js';\nimport { configureSvgSize } from '../../setupGraphViewbox.js';\nimport type { TreemapDB, TreemapNode } from './types.js';\nimport { scaleOrdinal, treemap, hierarchy, format, select } from 'd3';\nimport { styles2String } from '../../rendering-util/rendering-elements/shapes/handDrawnShapeStyles.js';\nimport { getConfig } from '../../config.js';\nimport { log } from '../../logger.js';\nimport type { Node } from '../../rendering-util/types.js';\n\nconst DEFAULT_INNER_PADDING = 10; // Default for inner padding between cells/sections\nconst SECTION_INNER_PADDING = 10; // Default for inner padding between cells/sections\nconst SECTION_HEADER_HEIGHT = 25;\n\n/**\n * Draws the treemap diagram\n */\nconst draw: DrawDefinition = (_text, id, _version, diagram: Diagram) => {\n  const treemapDb = diagram.db as TreemapDB;\n  const config = treemapDb.getConfig();\n  const treemapInnerPadding = config.padding ?? DEFAULT_INNER_PADDING;\n  const title = treemapDb.getDiagramTitle();\n  const root = treemapDb.getRoot();\n  const { themeVariables } = getConfig();\n  if (!root) {\n    return;\n  }\n\n  // Define dimensions\n  const titleHeight = title ? 30 : 0;\n\n  const svg = selectSvgElement(id);\n  // Use config dimensions or defaults\n  const width = config.nodeWidth ? config.nodeWidth * SECTION_INNER_PADDING : 960;\n  const height = config.nodeHeight ? config.nodeHeight * SECTION_INNER_PADDING : 500;\n\n  const svgWidth = width;\n  const svgHeight = height + titleHeight;\n\n  // Set the SVG size\n  svg.attr('viewBox', `0 0 ${svgWidth} ${svgHeight}`);\n  configureSvgSize(svg, svgHeight, svgWidth, config.useMaxWidth);\n\n  // Format for displaying values\n  let valueFormat;\n  try {\n    // Handle special format patterns\n    const formatStr = config.valueFormat || ',';\n\n    // Handle special cases that aren't directly supported by D3 format\n    if (formatStr === '$0,0') {\n      // Currency with thousands separator\n      valueFormat = (value: number) => '$' + format(',')(value);\n    } else if (formatStr.startsWith('$') && formatStr.includes(',')) {\n      // Other dollar formats with commas\n      const precision = /\\.\\d+/.exec(formatStr);\n      const precisionStr = precision ? precision[0] : '';\n      valueFormat = (value: number) => '$' + format(',' + precisionStr)(value);\n    } else if (formatStr.startsWith('$')) {\n      // Simple dollar sign prefix\n      const restOfFormat = formatStr.substring(1);\n      valueFormat = (value: number) => '$' + format(restOfFormat || '')(value);\n    } else {\n      // Standard D3 format\n      valueFormat = format(formatStr);\n    }\n  } catch (error) {\n    log.error('Error creating format function:', error);\n    // Fallback to default format\n    valueFormat = format(',');\n  }\n\n  // Create color scale\n  const colorScale = scaleOrdinal<string>().range([\n    'transparent',\n    themeVariables.cScale0,\n    themeVariables.cScale1,\n    themeVariables.cScale2,\n    themeVariables.cScale3,\n    themeVariables.cScale4,\n    themeVariables.cScale5,\n    themeVariables.cScale6,\n    themeVariables.cScale7,\n    themeVariables.cScale8,\n    themeVariables.cScale9,\n    themeVariables.cScale10,\n    themeVariables.cScale11,\n  ]);\n  const colorScalePeer = scaleOrdinal<string>().range([\n    'transparent',\n    themeVariables.cScalePeer0,\n    themeVariables.cScalePeer1,\n    themeVariables.cScalePeer2,\n    themeVariables.cScalePeer3,\n    themeVariables.cScalePeer4,\n    themeVariables.cScalePeer5,\n    themeVariables.cScalePeer6,\n    themeVariables.cScalePeer7,\n    themeVariables.cScalePeer8,\n    themeVariables.cScalePeer9,\n    themeVariables.cScalePeer10,\n    themeVariables.cScalePeer11,\n  ]);\n  const colorScaleLabel = scaleOrdinal<string>().range([\n    themeVariables.cScaleLabel0,\n    themeVariables.cScaleLabel1,\n    themeVariables.cScaleLabel2,\n    themeVariables.cScaleLabel3,\n    themeVariables.cScaleLabel4,\n    themeVariables.cScaleLabel5,\n    themeVariables.cScaleLabel6,\n    themeVariables.cScaleLabel7,\n    themeVariables.cScaleLabel8,\n    themeVariables.cScaleLabel9,\n    themeVariables.cScaleLabel10,\n    themeVariables.cScaleLabel11,\n  ]);\n\n  // Draw the title if it exists\n  if (title) {\n    svg\n      .append('text')\n      .attr('x', svgWidth / 2)\n      .attr('y', titleHeight / 2)\n      .attr('class', 'treemapTitle')\n      .attr('text-anchor', 'middle')\n      .attr('dominant-baseline', 'middle')\n      .text(title);\n  }\n\n  // Create a main container for the treemap, translated below the title\n  const g = svg\n    .append('g')\n    .attr('transform', `translate(0, ${titleHeight})`)\n    .attr('class', 'treemapContainer');\n\n  // Create the hierarchical structure\n  const hierarchyRoot = hierarchy<TreemapNode>(root)\n    .sum((d) => d.value ?? 0)\n    .sort((a, b) => (b.value ?? 0) - (a.value ?? 0));\n\n  // Create treemap layout\n  const treemapLayout = treemap<TreemapNode>()\n    .size([width, height])\n    .paddingTop((d) =>\n      d.children && d.children.length > 0 ? SECTION_HEADER_HEIGHT + SECTION_INNER_PADDING : 0\n    )\n    .paddingInner(treemapInnerPadding)\n    .paddingLeft((d) => (d.children && d.children.length > 0 ? SECTION_INNER_PADDING : 0))\n    .paddingRight((d) => (d.children && d.children.length > 0 ? SECTION_INNER_PADDING : 0))\n    .paddingBottom((d) => (d.children && d.children.length > 0 ? SECTION_INNER_PADDING : 0))\n    .round(true);\n\n  // Apply the treemap layout to the hierarchy\n  const treemapData = treemapLayout(hierarchyRoot);\n\n  // Draw section nodes (branches - nodes with children)\n  const branchNodes = treemapData.descendants().filter((d) => d.children && d.children.length > 0);\n  const sections = g\n    .selectAll('.treemapSection')\n    .data(branchNodes)\n    .enter()\n    .append('g')\n    .attr('class', 'treemapSection')\n    .attr('transform', (d) => `translate(${d.x0},${d.y0})`);\n\n  // Add section header background\n  sections\n    .append('rect')\n    .attr('width', (d) => d.x1 - d.x0)\n    .attr('height', SECTION_HEADER_HEIGHT)\n    .attr('class', 'treemapSectionHeader')\n    .attr('fill', 'none')\n    .attr('fill-opacity', 0.6)\n    .attr('stroke-width', 0.6)\n    .attr('style', (d) => {\n      // Hide the label for the root section\n      if (d.depth === 0) {\n        return 'display: none;';\n      }\n      return '';\n    });\n\n  // Add clip paths for section headers to prevent text overflow\n  sections\n    .append('clipPath')\n    .attr('id', (_d, i) => `clip-section-${id}-${i}`)\n    .append('rect')\n    .attr('width', (d) => Math.max(0, d.x1 - d.x0 - 12)) // 6px padding on each side\n    .attr('height', SECTION_HEADER_HEIGHT);\n\n  sections\n    .append('rect')\n    .attr('width', (d) => d.x1 - d.x0)\n    .attr('height', (d) => d.y1 - d.y0)\n    .attr('class', (_d, i) => {\n      return `treemapSection section${i}`;\n    })\n    .attr('fill', (d) => colorScale(d.data.name))\n    .attr('fill-opacity', 0.6)\n    .attr('stroke', (d) => colorScalePeer(d.data.name))\n    .attr('stroke-width', 2.0)\n    .attr('stroke-opacity', 0.4)\n    .attr('style', (d) => {\n      // Hide the label for the root section\n      if (d.depth === 0) {\n        return 'display: none;';\n      }\n      const styles = styles2String({ cssCompiledStyles: d.data.cssCompiledStyles } as Node);\n      return styles.nodeStyles + ';' + styles.borderStyles.join(';');\n    });\n  // Add section labels\n  sections\n    .append('text')\n    .attr('class', 'treemapSectionLabel')\n    .attr('x', 6) // Keep original left padding\n    .attr('y', SECTION_HEADER_HEIGHT / 2)\n    .attr('dominant-baseline', 'middle')\n    .text((d) => (d.depth === 0 ? '' : d.data.name)) // Skip label for root section\n    .attr('font-weight', 'bold')\n    .attr('style', (d) => {\n      // Hide the label for the root section\n      if (d.depth === 0) {\n        return 'display: none;';\n      }\n      const labelStyles =\n        'dominant-baseline: middle; font-size: 12px; fill:' +\n        colorScaleLabel(d.data.name) +\n        '; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;';\n      const styles = styles2String({ cssCompiledStyles: d.data.cssCompiledStyles } as Node);\n      return labelStyles + styles.labelStyles.replace('color:', 'fill:');\n    })\n    .each(function (d) {\n      // Skip processing for root section\n      if (d.depth === 0) {\n        return;\n      }\n      const self = select(this);\n      const originalText = d.data.name;\n      self.text(originalText);\n      const totalHeaderWidth = d.x1 - d.x0;\n      const labelXPosition = 6;\n      let spaceForTextContent;\n      if (config.showValues !== false && d.value) {\n        const valueEndsAtXRelative = totalHeaderWidth - 10;\n        const estimatedValueTextActualWidth = 30;\n        const gapBetweenLabelAndValue = 10;\n        const labelMustEndBeforeX =\n          valueEndsAtXRelative - estimatedValueTextActualWidth - gapBetweenLabelAndValue;\n        spaceForTextContent = labelMustEndBeforeX - labelXPosition;\n      } else {\n        const labelOwnRightPadding = 6;\n        spaceForTextContent = totalHeaderWidth - labelXPosition - labelOwnRightPadding;\n      }\n      const minimumWidthToDisplay = 15;\n      const actualAvailableWidth = Math.max(minimumWidthToDisplay, spaceForTextContent);\n      const textNode = self.node()!;\n      const currentTextContentLength = textNode.getComputedTextLength();\n      if (currentTextContentLength > actualAvailableWidth) {\n        const ellipsis = '...';\n        let currentTruncatedText = originalText;\n        while (currentTruncatedText.length > 0) {\n          currentTruncatedText = originalText.substring(0, currentTruncatedText.length - 1);\n          if (currentTruncatedText.length === 0) {\n            self.text(ellipsis);\n            if (textNode.getComputedTextLength() > actualAvailableWidth) {\n              self.text('');\n            }\n            break;\n          }\n          self.text(currentTruncatedText + ellipsis);\n          if (textNode.getComputedTextLength() <= actualAvailableWidth) {\n            break;\n          }\n        }\n      }\n    });\n\n  // Add section values if enabled\n  if (config.showValues !== false) {\n    sections\n      .append('text')\n      .attr('class', 'treemapSectionValue')\n      .attr('x', (d) => d.x1 - d.x0 - 10)\n      .attr('y', SECTION_HEADER_HEIGHT / 2)\n      .attr('text-anchor', 'end')\n      .attr('dominant-baseline', 'middle')\n      .text((d) => (d.value ? valueFormat(d.value) : ''))\n      .attr('font-style', 'italic')\n      .attr('style', (d) => {\n        // Hide the value for the root section\n        if (d.depth === 0) {\n          return 'display: none;';\n        }\n        const labelStyles =\n          'text-anchor: end; dominant-baseline: middle; font-size: 10px; fill:' +\n          colorScaleLabel(d.data.name) +\n          '; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;';\n        const styles = styles2String({ cssCompiledStyles: d.data.cssCompiledStyles } as Node);\n        return labelStyles + styles.labelStyles.replace('color:', 'fill:');\n      });\n  }\n\n  // Draw the leaf nodes\n  const leafNodes = treemapData.leaves();\n  const cell = g\n    .selectAll('.treemapLeafGroup')\n    .data(leafNodes)\n    .enter()\n    .append('g')\n    .attr('class', (d, i) => {\n      return `treemapNode treemapLeafGroup leaf${i}${d.data.classSelector ? ` ${d.data.classSelector}` : ''}x`;\n    })\n    .attr('transform', (d) => `translate(${d.x0},${d.y0})`);\n\n  // Add rectangle for each leaf node\n  cell\n    .append('rect')\n    .attr('width', (d) => d.x1 - d.x0)\n    .attr('height', (d) => d.y1 - d.y0)\n    .attr('class', 'treemapLeaf')\n    .attr('fill', (d) => {\n      // Leaves inherit color from their immediate parent section's name.\n      // If a leaf is the root itself (no parent), it uses its own name.\n      return d.parent ? colorScale(d.parent.data.name) : colorScale(d.data.name);\n    })\n    .attr('style', (d) => {\n      const styles = styles2String({ cssCompiledStyles: d.data.cssCompiledStyles } as Node);\n      return styles.nodeStyles;\n    })\n    .attr('fill-opacity', 0.3)\n    .attr('stroke', (d) => {\n      // Leaves inherit color from their immediate parent section's name.\n      // If a leaf is the root itself (no parent), it uses its own name.\n      return d.parent ? colorScale(d.parent.data.name) : colorScale(d.data.name);\n    })\n    .attr('stroke-width', 3.0);\n\n  // Add clip paths to prevent text from extending outside nodes\n  cell\n    .append('clipPath')\n    .attr('id', (_d, i) => `clip-${id}-${i}`)\n    .append('rect')\n    .attr('width', (d) => Math.max(0, d.x1 - d.x0 - 4))\n    .attr('height', (d) => Math.max(0, d.y1 - d.y0 - 4));\n\n  // Add node labels with clipping\n  const leafLabels = cell\n    .append('text')\n    .attr('class', 'treemapLabel')\n    .attr('x', (d) => (d.x1 - d.x0) / 2)\n    .attr('y', (d) => (d.y1 - d.y0) / 2)\n    // .style('fill', (d) => colorScaleLabel(d.data.name))\n    .attr('style', (d) => {\n      const labelStyles =\n        'text-anchor: middle; dominant-baseline: middle; font-size: 38px;fill:' +\n        colorScaleLabel(d.data.name) +\n        ';';\n      const styles = styles2String({ cssCompiledStyles: d.data.cssCompiledStyles } as Node);\n      return labelStyles + styles.labelStyles.replace('color:', 'fill:');\n    })\n    .attr('clip-path', (_d, i) => `url(#clip-${id}-${i})`)\n    .text((d) => d.data.name);\n\n  leafLabels.each(function (d) {\n    const self = select(this);\n    const nodeWidth = d.x1 - d.x0;\n    const nodeHeight = d.y1 - d.y0;\n    const textNode = self.node()!;\n\n    const padding = 4;\n    const availableWidth = nodeWidth - 2 * padding;\n    const availableHeight = nodeHeight - 2 * padding;\n\n    if (availableWidth < 10 || availableHeight < 10) {\n      self.style('display', 'none');\n      return;\n    }\n\n    let currentLabelFontSize = parseInt(self.style('font-size'), 10);\n    const minLabelFontSize = 8;\n    const originalValueRelFontSize = 28; // Original font size of value, for max cap\n    const valueScaleFactor = 0.6; // Value font size as a factor of label font size\n    const minValueFontSize = 6;\n    const spacingBetweenLabelAndValue = 2;\n\n    // 1. Adjust label font size to fit width\n    while (\n      textNode.getComputedTextLength() > availableWidth &&\n      currentLabelFontSize > minLabelFontSize\n    ) {\n      currentLabelFontSize--;\n      self.style('font-size', `${currentLabelFontSize}px`);\n    }\n\n    // 2. Adjust both label and prospective value font size to fit combined height\n    let prospectiveValueFontSize = Math.max(\n      minValueFontSize,\n      Math.min(originalValueRelFontSize, Math.round(currentLabelFontSize * valueScaleFactor))\n    );\n    let combinedHeight =\n      currentLabelFontSize + spacingBetweenLabelAndValue + prospectiveValueFontSize;\n\n    while (combinedHeight > availableHeight && currentLabelFontSize > minLabelFontSize) {\n      currentLabelFontSize--;\n      prospectiveValueFontSize = Math.max(\n        minValueFontSize,\n        Math.min(originalValueRelFontSize, Math.round(currentLabelFontSize * valueScaleFactor))\n      );\n      if (\n        prospectiveValueFontSize < minValueFontSize &&\n        currentLabelFontSize === minLabelFontSize\n      ) {\n        break;\n      } // Avoid shrinking label if value is already at min\n      self.style('font-size', `${currentLabelFontSize}px`);\n      combinedHeight =\n        currentLabelFontSize + spacingBetweenLabelAndValue + prospectiveValueFontSize;\n      if (prospectiveValueFontSize <= minValueFontSize && combinedHeight > availableHeight) {\n        // If value is at min and still doesn't fit, label might need to shrink more alone\n        // This might lead to label being too small for its own text, checked next\n      }\n    }\n\n    // Update label font size based on height adjustment\n    self.style('font-size', `${currentLabelFontSize}px`);\n\n    // 3. Final visibility check for the label\n    if (\n      textNode.getComputedTextLength() > availableWidth ||\n      currentLabelFontSize < minLabelFontSize ||\n      availableHeight < currentLabelFontSize\n    ) {\n      self.style('display', 'none');\n      // If label is hidden, value will be hidden by its own .each() loop\n    }\n  });\n\n  // Add node values with clipping\n  if (config.showValues !== false) {\n    const leafValues = cell\n      .append('text')\n      .attr('class', 'treemapValue')\n      .attr('x', (d) => (d.x1 - d.x0) / 2)\n      .attr('y', function (d) {\n        // Y position calculated dynamically in leafValues.each based on final label metrics\n        return (d.y1 - d.y0) / 2; // Placeholder, will be overwritten\n      })\n      .attr('style', (d) => {\n        const labelStyles =\n          'text-anchor: middle; dominant-baseline: hanging; font-size: 28px;fill:' +\n          colorScaleLabel(d.data.name) +\n          ';';\n        const styles = styles2String({ cssCompiledStyles: d.data.cssCompiledStyles } as Node);\n        return labelStyles + styles.labelStyles.replace('color:', 'fill:');\n      })\n\n      .attr('clip-path', (_d, i) => `url(#clip-${id}-${i})`)\n      .text((d) => (d.value ? valueFormat(d.value) : ''));\n\n    leafValues.each(function (d) {\n      const valueTextElement = select(this);\n      const parentCellNode = this.parentNode as SVGGElement | null;\n\n      if (!parentCellNode) {\n        valueTextElement.style('display', 'none');\n        return;\n      }\n\n      const labelElement = select(parentCellNode).select<SVGTextElement>('.treemapLabel');\n\n      if (labelElement.empty() || labelElement.style('display') === 'none') {\n        valueTextElement.style('display', 'none');\n        return;\n      }\n\n      const finalLabelFontSize = parseFloat(labelElement.style('font-size'));\n      const originalValueFontSize = 28; // From initial style setting\n      const valueScaleFactor = 0.6;\n      const minValueFontSize = 6;\n      const spacingBetweenLabelAndValue = 2;\n\n      const actualValueFontSize = Math.max(\n        minValueFontSize,\n        Math.min(originalValueFontSize, Math.round(finalLabelFontSize * valueScaleFactor))\n      );\n      valueTextElement.style('font-size', `${actualValueFontSize}px`);\n\n      const labelCenterY = (d.y1 - d.y0) / 2;\n      const valueTopActualY = labelCenterY + finalLabelFontSize / 2 + spacingBetweenLabelAndValue;\n      valueTextElement.attr('y', valueTopActualY);\n\n      const nodeWidth = d.x1 - d.x0;\n      const nodeTotalHeight = d.y1 - d.y0;\n      const cellBottomPadding = 4;\n      const maxValueBottomY = nodeTotalHeight - cellBottomPadding;\n      const availableWidthForValue = nodeWidth - 2 * 4; // padding for value text\n\n      if (\n        valueTextElement.node()!.getComputedTextLength() > availableWidthForValue ||\n        valueTopActualY + actualValueFontSize > maxValueBottomY ||\n        actualValueFontSize < minValueFontSize\n      ) {\n        valueTextElement.style('display', 'none');\n      } else {\n        valueTextElement.style('display', null);\n      }\n    });\n  }\n  const diagramPadding = config.diagramPadding ?? 8;\n  setupViewPortForSVG(svg, diagramPadding, 'flowchart', config?.useMaxWidth || false);\n};\n\nconst getClasses = function (\n  _text: string,\n  diagramObj: Pick<Diagram, 'db'>\n): Map<string, DiagramStyleClassDef> {\n  return (diagramObj.db as TreemapDB).getClasses();\n};\nexport const renderer: DiagramRenderer = { draw, getClasses };\n", "import type { DiagramStylesProvider } from '../../diagram-api/types.js';\nimport { cleanAndMerge } from '../../utils.js';\nimport type { TreemapStyleOptions } from './types.js';\n\nconst defaultTreemapStyleOptions: TreemapStyleOptions = {\n  sectionStrokeColor: 'black',\n  sectionStrokeWidth: '1',\n  sectionFillColor: '#efefef',\n  leafStrokeColor: 'black',\n  leafStrokeWidth: '1',\n  leafFillColor: '#efefef',\n  labelColor: 'black',\n  labelFontSize: '12px',\n  valueFontSize: '10px',\n  valueColor: 'black',\n  titleColor: 'black',\n  titleFontSize: '14px',\n};\n\nexport const getStyles: DiagramStylesProvider = ({\n  treemap,\n}: { treemap?: TreemapStyleOptions } = {}) => {\n  const options = cleanAndMerge(defaultTreemapStyleOptions, treemap);\n\n  return `\n  .treemapNode.section {\n    stroke: ${options.sectionStrokeColor};\n    stroke-width: ${options.sectionStrokeWidth};\n    fill: ${options.sectionFillColor};\n  }\n  .treemapNode.leaf {\n    stroke: ${options.leafStrokeColor};\n    stroke-width: ${options.leafStrokeWidth};\n    fill: ${options.leafFillColor};\n  }\n  .treemapLabel {\n    fill: ${options.labelColor};\n    font-size: ${options.labelFontSize};\n  }\n  .treemapValue {\n    fill: ${options.valueColor};\n    font-size: ${options.valueFontSize};\n  }\n  .treemapTitle {\n    fill: ${options.titleColor};\n    font-size: ${options.titleFontSize};\n  }\n  `;\n};\n\nexport default getStyles;\n", "import type { DiagramDefinition } from '../../diagram-api/types.js';\nimport { TreeMapDB } from './db.js';\nimport { parser } from './parser.js';\nimport { renderer } from './renderer.js';\nimport styles from './styles.js';\n\nexport const diagram: DiagramDefinition = {\n  parser,\n  get db() {\n    return new TreeMapDB();\n  },\n  renderer,\n  styles,\n};\n"],
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBO,IAAM,YAAN,MAAqC;AAAA,EAArC;AACL,SAAQ,QAAuB,CAAC;AAChC,SAAQ,SAAmC,oBAAI,IAAyB;AACxE,SAAQ,aAA4B,CAAC;AACrC,SAAQ,UAA6C,oBAAI,IAAkC;AAoE3F,SAAO,cAAc;AACrB,SAAO,cAAc;AACrB,SAAO,kBAAkB;AACzB,SAAO,kBAAkB;AACzB,SAAO,oBAAoB;AAC3B,SAAO,oBAAoB;AAAA;AAAA,EA7F7B,OAgB4C;AAAA;AAAA;AAAA,EAOnC,WAAW;AAChB,WAAO,KAAK;AAAA,EACd;AAAA,EAEO,YAAY;AACjB,UAAM,gBAAgB;AACtB,UAAM,aAAa,UAAgB;AACnC,WAAO,cAAc;AAAA,MACnB,GAAG,cAAc;AAAA,MACjB,GAAI,WAAW,WAAW,CAAC;AAAA,IAC7B,CAAC;AAAA,EACH;AAAA,EAEO,QAAQ,MAAmB,OAAe;AAC/C,SAAK,MAAM,KAAK,IAAI;AACpB,SAAK,OAAO,IAAI,MAAM,KAAK;AAC3B,QAAI,UAAU,GAAG;AACf,WAAK,WAAW,KAAK,IAAI;AACzB,WAAK,SAAS;AAAA,IAChB;AAAA,EACF;AAAA,EAEO,UAAU;AACf,WAAO,EAAE,MAAM,IAAI,UAAU,KAAK,WAAW;AAAA,EAC/C;AAAA,EAEO,SAAS,IAAY,QAAgB;AAC1C,UAAM,aAAa,KAAK,QAAQ,IAAI,EAAE,KAAK,EAAE,IAAI,QAAQ,CAAC,GAAG,YAAY,CAAC,EAAE;AAC5E,UAAM,SAAS,OAAO,QAAQ,QAAQ,cAAK,EAAE,QAAQ,MAAM,GAAG,EAAE,QAAQ,QAAQ,GAAG,EAAE,MAAM,GAAG;AAC9F,QAAI,QAAQ;AACV,aAAO,QAAQ,CAAC,MAAM;AACpB,YAAI,aAAa,CAAC,GAAG;AACnB,cAAI,YAAY,YAAY;AAC1B,uBAAW,WAAW,KAAK,CAAC;AAAA,UAC9B,OAAO;AACL,uBAAW,aAAa,CAAC,CAAC;AAAA,UAC5B;AAAA,QACF;AACA,YAAI,YAAY,QAAQ;AACtB,qBAAW,OAAO,KAAK,CAAC;AAAA,QAC1B,OAAO;AACL,qBAAW,SAAS,CAAC,CAAC;AAAA,QACxB;AAAA,MACF,CAAC;AAAA,IACH;AACA,SAAK,QAAQ,IAAI,IAAI,UAAU;AAAA,EACjC;AAAA,EAEO,aAAa;AAClB,WAAO,KAAK;AAAA,EACd;AAAA,EAEO,kBAAkB,eAAiC;AACxD,WAAO,KAAK,QAAQ,IAAI,aAAa,GAAG,UAAU,CAAC;AAAA,EACrD;AAAA,EAEO,QAAQ;AACb,UAAY;AACZ,SAAK,QAAQ,CAAC;AACd,SAAK,SAAS,oBAAI,IAAI;AACtB,SAAK,aAAa,CAAC;AACnB,SAAK,UAAU,oBAAI,IAAI;AACvB,SAAK,OAAO;AAAA,EACd;AAQF;;;ACvFO,SAAS,eACd,OAQe;AACf,MAAI,CAAC,MAAM,QAAQ;AACjB,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,OAAsB,CAAC;AAC7B,QAAM,QAAgD,CAAC;AAEvD,QAAM,QAAQ,CAAC,SAAS;AACtB,UAAM,OAAoB;AAAA,MACxB,MAAM,KAAK;AAAA,MACX,UAAU,KAAK,SAAS,SAAS,SAAY,CAAC;AAAA,IAChD;AACA,SAAK,gBAAgB,MAAM;AAC3B,QAAI,MAAM,mBAAmB;AAC3B,WAAK,oBAAoB,CAAC,KAAK,iBAAiB;AAAA,IAClD;AAEA,QAAI,KAAK,SAAS,UAAU,KAAK,UAAU,QAAW;AACpD,WAAK,QAAQ,KAAK;AAAA,IACpB;AAGA,WAAO,MAAM,SAAS,KAAK,MAAM,MAAM,SAAS,CAAC,EAAE,SAAS,KAAK,OAAO;AACtE,YAAM,IAAI;AAAA,IACZ;AAEA,QAAI,MAAM,WAAW,GAAG;AAEtB,WAAK,KAAK,IAAI;AAAA,IAChB,OAAO;AAEL,YAAM,SAAS,MAAM,MAAM,SAAS,CAAC,EAAE;AACvC,UAAI,OAAO,UAAU;AACnB,eAAO,SAAS,KAAK,IAAI;AAAA,MAC3B,OAAO;AACL,eAAO,WAAW,CAAC,IAAI;AAAA,MACzB;AAAA,IACF;AAGA,QAAI,KAAK,SAAS,QAAQ;AACxB,YAAM,KAAK,EAAE,MAAM,OAAO,KAAK,MAAM,CAAC;AAAA,IACxC;AAAA,EACF,CAAC;AAED,SAAO;AACT;AAxDgB;;;ACKhB,IAAM,WAAW,wBAAC,KAAiB,OAAkB;AAGnD,mBAAiB,KAAY,EAAE;AAE/B,QAAM,QAOA,CAAC;AAGP,aAAW,OAAO,IAAI,eAAe,CAAC,GAAG;AACvC,QAAI,IAAI,UAAU,qBAAqB;AACrC,SAAG,SAAS,IAAI,aAAa,IAAI,IAAI,aAAa,EAAE;AAAA,IACtD;AAAA,EACF;AAGA,aAAW,OAAO,IAAI,eAAe,CAAC,GAAG;AACvC,UAAM,OAAO,IAAI;AAEjB,QAAI,CAAC,MAAM;AACT;AAAA,IACF;AAEA,UAAM,QAAQ,IAAI,SAAS,SAAS,IAAI,MAAM,IAAI;AAClD,UAAM,OAAO,YAAY,IAAI;AAG7B,UAAM,SAAS,KAAK,gBAAgB,GAAG,kBAAkB,KAAK,aAAa,IAAI,CAAC;AAChF,UAAM,oBAAoB,OAAO,SAAS,IAAI,OAAO,KAAK,GAAG,IAAI;AAEjE,UAAM,WAAW;AAAA,MACf;AAAA,MACA;AAAA,MACA,MAAM,KAAK;AAAA,MACX,OAAO,KAAK;AAAA,MACZ,eAAe,KAAK;AAAA,MACpB;AAAA,IACF;AAEA,UAAM,KAAK,QAAQ;AAAA,EACrB;AAGA,QAAM,iBAAiB,eAAe,KAAK;AAG3C,QAAM,sBAAsB,wBAAC,OAAsB,UAAkB;AACnE,eAAW,QAAQ,OAAO;AACxB,SAAG,QAAQ,MAAM,KAAK;AACtB,UAAI,KAAK,YAAY,KAAK,SAAS,SAAS,GAAG;AAC7C,4BAAoB,KAAK,UAAU,QAAQ,CAAC;AAAA,MAC9C;AAAA,IACF;AAAA,EACF,GAP4B;AAS5B,sBAAoB,gBAAgB,CAAC;AACvC,GA9DiB;AAqEjB,IAAM,cAAc,wBAAC,SAA6C;AAChE,SAAO,KAAK,OAAO,OAAO,KAAK,IAAI,IAAI;AACzC,GAFoB;AAIb,IAAM,SAA2B;AAAA;AAAA,EAEtC,QAAQ,EAAE,IAAI,OAAU;AAAA,EACxB,OAAO,8BAAO,SAAgC;AAC5C,QAAI;AAGF,YAAM,YAAY;AAClB,YAAM,MAAM,MAAM,UAAU,WAAW,IAAI;AAC3C,UAAI,MAAM,gBAAgB,GAAG;AAC7B,YAAM,KAAK,OAAO,QAAQ;AAC1B,UAAI,EAAE,cAAc,YAAY;AAC9B,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AACA,eAAS,KAAK,EAAE;AAAA,IAClB,SAAS,OAAO;AACd,UAAI,MAAM,0BAA0B,KAAK;AACzC,YAAM;AAAA,IACR;AAAA,EACF,GAlBO;AAmBT;;;AC3FA,IAAM,wBAAwB;AAC9B,IAAM,wBAAwB;AAC9B,IAAM,wBAAwB;AAK9B,IAAM,OAAuB,wBAAC,OAAO,IAAI,UAAUA,aAAqB;AACtE,QAAM,YAAYA,SAAQ;AAC1B,QAAM,SAAS,UAAU,UAAU;AACnC,QAAM,sBAAsB,OAAO,WAAW;AAC9C,QAAM,QAAQ,UAAU,gBAAgB;AACxC,QAAM,OAAO,UAAU,QAAQ;AAC/B,QAAM,EAAE,eAAe,IAAI,UAAU;AACrC,MAAI,CAAC,MAAM;AACT;AAAA,EACF;AAGA,QAAM,cAAc,QAAQ,KAAK;AAEjC,QAAM,MAAM,iBAAiB,EAAE;AAE/B,QAAM,QAAQ,OAAO,YAAY,OAAO,YAAY,wBAAwB;AAC5E,QAAM,SAAS,OAAO,aAAa,OAAO,aAAa,wBAAwB;AAE/E,QAAM,WAAW;AACjB,QAAM,YAAY,SAAS;AAG3B,MAAI,KAAK,WAAW,OAAO,QAAQ,IAAI,SAAS,EAAE;AAClD,mBAAiB,KAAK,WAAW,UAAU,OAAO,WAAW;AAG7D,MAAI;AACJ,MAAI;AAEF,UAAM,YAAY,OAAO,eAAe;AAGxC,QAAI,cAAc,QAAQ;AAExB,oBAAc,wBAAC,UAAkB,MAAM,OAAO,GAAG,EAAE,KAAK,GAA1C;AAAA,IAChB,WAAW,UAAU,WAAW,GAAG,KAAK,UAAU,SAAS,GAAG,GAAG;AAE/D,YAAM,YAAY,QAAQ,KAAK,SAAS;AACxC,YAAM,eAAe,YAAY,UAAU,CAAC,IAAI;AAChD,oBAAc,wBAAC,UAAkB,MAAM,OAAO,MAAM,YAAY,EAAE,KAAK,GAAzD;AAAA,IAChB,WAAW,UAAU,WAAW,GAAG,GAAG;AAEpC,YAAM,eAAe,UAAU,UAAU,CAAC;AAC1C,oBAAc,wBAAC,UAAkB,MAAM,OAAO,gBAAgB,EAAE,EAAE,KAAK,GAAzD;AAAA,IAChB,OAAO;AAEL,oBAAc,OAAO,SAAS;AAAA,IAChC;AAAA,EACF,SAAS,OAAO;AACd,QAAI,MAAM,mCAAmC,KAAK;AAElD,kBAAc,OAAO,GAAG;AAAA,EAC1B;AAGA,QAAM,aAAa,QAAqB,EAAE,MAAM;AAAA,IAC9C;AAAA,IACA,eAAe;AAAA,IACf,eAAe;AAAA,IACf,eAAe;AAAA,IACf,eAAe;AAAA,IACf,eAAe;AAAA,IACf,eAAe;AAAA,IACf,eAAe;AAAA,IACf,eAAe;AAAA,IACf,eAAe;AAAA,IACf,eAAe;AAAA,IACf,eAAe;AAAA,IACf,eAAe;AAAA,EACjB,CAAC;AACD,QAAM,iBAAiB,QAAqB,EAAE,MAAM;AAAA,IAClD;AAAA,IACA,eAAe;AAAA,IACf,eAAe;AAAA,IACf,eAAe;AAAA,IACf,eAAe;AAAA,IACf,eAAe;AAAA,IACf,eAAe;AAAA,IACf,eAAe;AAAA,IACf,eAAe;AAAA,IACf,eAAe;AAAA,IACf,eAAe;AAAA,IACf,eAAe;AAAA,IACf,eAAe;AAAA,EACjB,CAAC;AACD,QAAM,kBAAkB,QAAqB,EAAE,MAAM;AAAA,IACnD,eAAe;AAAA,IACf,eAAe;AAAA,IACf,eAAe;AAAA,IACf,eAAe;AAAA,IACf,eAAe;AAAA,IACf,eAAe;AAAA,IACf,eAAe;AAAA,IACf,eAAe;AAAA,IACf,eAAe;AAAA,IACf,eAAe;AAAA,IACf,eAAe;AAAA,IACf,eAAe;AAAA,EACjB,CAAC;AAGD,MAAI,OAAO;AACT,QACG,OAAO,MAAM,EACb,KAAK,KAAK,WAAW,CAAC,EACtB,KAAK,KAAK,cAAc,CAAC,EACzB,KAAK,SAAS,cAAc,EAC5B,KAAK,eAAe,QAAQ,EAC5B,KAAK,qBAAqB,QAAQ,EAClC,KAAK,KAAK;AAAA,EACf;AAGA,QAAM,IAAI,IACP,OAAO,GAAG,EACV,KAAK,aAAa,gBAAgB,WAAW,GAAG,EAChD,KAAK,SAAS,kBAAkB;AAGnC,QAAM,gBAAgB,UAAuB,IAAI,EAC9C,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,EACvB,KAAK,CAAC,GAAG,OAAO,EAAE,SAAS,MAAM,EAAE,SAAS,EAAE;AAGjD,QAAM,gBAAgB,gBAAqB,EACxC,KAAK,CAAC,OAAO,MAAM,CAAC,EACpB;AAAA,IAAW,CAAC,MACX,EAAE,YAAY,EAAE,SAAS,SAAS,IAAI,wBAAwB,wBAAwB;AAAA,EACxF,EACC,aAAa,mBAAmB,EAChC,YAAY,CAAC,MAAO,EAAE,YAAY,EAAE,SAAS,SAAS,IAAI,wBAAwB,CAAE,EACpF,aAAa,CAAC,MAAO,EAAE,YAAY,EAAE,SAAS,SAAS,IAAI,wBAAwB,CAAE,EACrF,cAAc,CAAC,MAAO,EAAE,YAAY,EAAE,SAAS,SAAS,IAAI,wBAAwB,CAAE,EACtF,MAAM,IAAI;AAGb,QAAM,cAAc,cAAc,aAAa;AAG/C,QAAM,cAAc,YAAY,YAAY,EAAE,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,SAAS,CAAC;AAC/F,QAAM,WAAW,EACd,UAAU,iBAAiB,EAC3B,KAAK,WAAW,EAChB,MAAM,EACN,OAAO,GAAG,EACV,KAAK,SAAS,gBAAgB,EAC9B,KAAK,aAAa,CAAC,MAAM,aAAa,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG;AAGxD,WACG,OAAO,MAAM,EACb,KAAK,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,EAChC,KAAK,UAAU,qBAAqB,EACpC,KAAK,SAAS,sBAAsB,EACpC,KAAK,QAAQ,MAAM,EACnB,KAAK,gBAAgB,GAAG,EACxB,KAAK,gBAAgB,GAAG,EACxB,KAAK,SAAS,CAAC,MAAM;AAEpB,QAAI,EAAE,UAAU,GAAG;AACjB,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT,CAAC;AAGH,WACG,OAAO,UAAU,EACjB,KAAK,MAAM,CAAC,IAAI,MAAM,gBAAgB,EAAE,IAAI,CAAC,EAAE,EAC/C,OAAO,MAAM,EACb,KAAK,SAAS,CAAC,MAAM,KAAK,IAAI,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAClD,KAAK,UAAU,qBAAqB;AAEvC,WACG,OAAO,MAAM,EACb,KAAK,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,EAChC,KAAK,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,EACjC,KAAK,SAAS,CAAC,IAAI,MAAM;AACxB,WAAO,yBAAyB,CAAC;AAAA,EACnC,CAAC,EACA,KAAK,QAAQ,CAAC,MAAM,WAAW,EAAE,KAAK,IAAI,CAAC,EAC3C,KAAK,gBAAgB,GAAG,EACxB,KAAK,UAAU,CAAC,MAAM,eAAe,EAAE,KAAK,IAAI,CAAC,EACjD,KAAK,gBAAgB,CAAG,EACxB,KAAK,kBAAkB,GAAG,EAC1B,KAAK,SAAS,CAAC,MAAM;AAEpB,QAAI,EAAE,UAAU,GAAG;AACjB,aAAO;AAAA,IACT;AACA,UAAM,SAAS,cAAc,EAAE,mBAAmB,EAAE,KAAK,kBAAkB,CAAS;AACpF,WAAO,OAAO,aAAa,MAAM,OAAO,aAAa,KAAK,GAAG;AAAA,EAC/D,CAAC;AAEH,WACG,OAAO,MAAM,EACb,KAAK,SAAS,qBAAqB,EACnC,KAAK,KAAK,CAAC,EACX,KAAK,KAAK,wBAAwB,CAAC,EACnC,KAAK,qBAAqB,QAAQ,EAClC,KAAK,CAAC,MAAO,EAAE,UAAU,IAAI,KAAK,EAAE,KAAK,IAAK,EAC9C,KAAK,eAAe,MAAM,EAC1B,KAAK,SAAS,CAAC,MAAM;AAEpB,QAAI,EAAE,UAAU,GAAG;AACjB,aAAO;AAAA,IACT;AACA,UAAM,cACJ,sDACA,gBAAgB,EAAE,KAAK,IAAI,IAC3B;AACF,UAAM,SAAS,cAAc,EAAE,mBAAmB,EAAE,KAAK,kBAAkB,CAAS;AACpF,WAAO,cAAc,OAAO,YAAY,QAAQ,UAAU,OAAO;AAAA,EACnE,CAAC,EACA,KAAK,SAAU,GAAG;AAEjB,QAAI,EAAE,UAAU,GAAG;AACjB;AAAA,IACF;AACA,UAAM,OAAO,eAAO,IAAI;AACxB,UAAM,eAAe,EAAE,KAAK;AAC5B,SAAK,KAAK,YAAY;AACtB,UAAM,mBAAmB,EAAE,KAAK,EAAE;AAClC,UAAM,iBAAiB;AACvB,QAAI;AACJ,QAAI,OAAO,eAAe,SAAS,EAAE,OAAO;AAC1C,YAAM,uBAAuB,mBAAmB;AAChD,YAAM,gCAAgC;AACtC,YAAM,0BAA0B;AAChC,YAAM,sBACJ,uBAAuB,gCAAgC;AACzD,4BAAsB,sBAAsB;AAAA,IAC9C,OAAO;AACL,YAAM,uBAAuB;AAC7B,4BAAsB,mBAAmB,iBAAiB;AAAA,IAC5D;AACA,UAAM,wBAAwB;AAC9B,UAAM,uBAAuB,KAAK,IAAI,uBAAuB,mBAAmB;AAChF,UAAM,WAAW,KAAK,KAAK;AAC3B,UAAM,2BAA2B,SAAS,sBAAsB;AAChE,QAAI,2BAA2B,sBAAsB;AACnD,YAAM,WAAW;AACjB,UAAI,uBAAuB;AAC3B,aAAO,qBAAqB,SAAS,GAAG;AACtC,+BAAuB,aAAa,UAAU,GAAG,qBAAqB,SAAS,CAAC;AAChF,YAAI,qBAAqB,WAAW,GAAG;AACrC,eAAK,KAAK,QAAQ;AAClB,cAAI,SAAS,sBAAsB,IAAI,sBAAsB;AAC3D,iBAAK,KAAK,EAAE;AAAA,UACd;AACA;AAAA,QACF;AACA,aAAK,KAAK,uBAAuB,QAAQ;AACzC,YAAI,SAAS,sBAAsB,KAAK,sBAAsB;AAC5D;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAGH,MAAI,OAAO,eAAe,OAAO;AAC/B,aACG,OAAO,MAAM,EACb,KAAK,SAAS,qBAAqB,EACnC,KAAK,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EACjC,KAAK,KAAK,wBAAwB,CAAC,EACnC,KAAK,eAAe,KAAK,EACzB,KAAK,qBAAqB,QAAQ,EAClC,KAAK,CAAC,MAAO,EAAE,QAAQ,YAAY,EAAE,KAAK,IAAI,EAAG,EACjD,KAAK,cAAc,QAAQ,EAC3B,KAAK,SAAS,CAAC,MAAM;AAEpB,UAAI,EAAE,UAAU,GAAG;AACjB,eAAO;AAAA,MACT;AACA,YAAM,cACJ,wEACA,gBAAgB,EAAE,KAAK,IAAI,IAC3B;AACF,YAAM,SAAS,cAAc,EAAE,mBAAmB,EAAE,KAAK,kBAAkB,CAAS;AACpF,aAAO,cAAc,OAAO,YAAY,QAAQ,UAAU,OAAO;AAAA,IACnE,CAAC;AAAA,EACL;AAGA,QAAM,YAAY,YAAY,OAAO;AACrC,QAAM,OAAO,EACV,UAAU,mBAAmB,EAC7B,KAAK,SAAS,EACd,MAAM,EACN,OAAO,GAAG,EACV,KAAK,SAAS,CAAC,GAAG,MAAM;AACvB,WAAO,oCAAoC,CAAC,GAAG,EAAE,KAAK,gBAAgB,IAAI,EAAE,KAAK,aAAa,KAAK,EAAE;AAAA,EACvG,CAAC,EACA,KAAK,aAAa,CAAC,MAAM,aAAa,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG;AAGxD,OACG,OAAO,MAAM,EACb,KAAK,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,EAChC,KAAK,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,EACjC,KAAK,SAAS,aAAa,EAC3B,KAAK,QAAQ,CAAC,MAAM;AAGnB,WAAO,EAAE,SAAS,WAAW,EAAE,OAAO,KAAK,IAAI,IAAI,WAAW,EAAE,KAAK,IAAI;AAAA,EAC3E,CAAC,EACA,KAAK,SAAS,CAAC,MAAM;AACpB,UAAM,SAAS,cAAc,EAAE,mBAAmB,EAAE,KAAK,kBAAkB,CAAS;AACpF,WAAO,OAAO;AAAA,EAChB,CAAC,EACA,KAAK,gBAAgB,GAAG,EACxB,KAAK,UAAU,CAAC,MAAM;AAGrB,WAAO,EAAE,SAAS,WAAW,EAAE,OAAO,KAAK,IAAI,IAAI,WAAW,EAAE,KAAK,IAAI;AAAA,EAC3E,CAAC,EACA,KAAK,gBAAgB,CAAG;AAG3B,OACG,OAAO,UAAU,EACjB,KAAK,MAAM,CAAC,IAAI,MAAM,QAAQ,EAAE,IAAI,CAAC,EAAE,EACvC,OAAO,MAAM,EACb,KAAK,SAAS,CAAC,MAAM,KAAK,IAAI,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,EACjD,KAAK,UAAU,CAAC,MAAM,KAAK,IAAI,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAGrD,QAAM,aAAa,KAChB,OAAO,MAAM,EACb,KAAK,SAAS,cAAc,EAC5B,KAAK,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,EAClC,KAAK,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,EAElC,KAAK,SAAS,CAAC,MAAM;AACpB,UAAM,cACJ,0EACA,gBAAgB,EAAE,KAAK,IAAI,IAC3B;AACF,UAAM,SAAS,cAAc,EAAE,mBAAmB,EAAE,KAAK,kBAAkB,CAAS;AACpF,WAAO,cAAc,OAAO,YAAY,QAAQ,UAAU,OAAO;AAAA,EACnE,CAAC,EACA,KAAK,aAAa,CAAC,IAAI,MAAM,aAAa,EAAE,IAAI,CAAC,GAAG,EACpD,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI;AAE1B,aAAW,KAAK,SAAU,GAAG;AAC3B,UAAM,OAAO,eAAO,IAAI;AACxB,UAAM,YAAY,EAAE,KAAK,EAAE;AAC3B,UAAM,aAAa,EAAE,KAAK,EAAE;AAC5B,UAAM,WAAW,KAAK,KAAK;AAE3B,UAAM,UAAU;AAChB,UAAM,iBAAiB,YAAY,IAAI;AACvC,UAAM,kBAAkB,aAAa,IAAI;AAEzC,QAAI,iBAAiB,MAAM,kBAAkB,IAAI;AAC/C,WAAK,MAAM,WAAW,MAAM;AAC5B;AAAA,IACF;AAEA,QAAI,uBAAuB,SAAS,KAAK,MAAM,WAAW,GAAG,EAAE;AAC/D,UAAM,mBAAmB;AACzB,UAAM,2BAA2B;AACjC,UAAM,mBAAmB;AACzB,UAAM,mBAAmB;AACzB,UAAM,8BAA8B;AAGpC,WACE,SAAS,sBAAsB,IAAI,kBACnC,uBAAuB,kBACvB;AACA;AACA,WAAK,MAAM,aAAa,GAAG,oBAAoB,IAAI;AAAA,IACrD;AAGA,QAAI,2BAA2B,KAAK;AAAA,MAClC;AAAA,MACA,KAAK,IAAI,0BAA0B,KAAK,MAAM,uBAAuB,gBAAgB,CAAC;AAAA,IACxF;AACA,QAAI,iBACF,uBAAuB,8BAA8B;AAEvD,WAAO,iBAAiB,mBAAmB,uBAAuB,kBAAkB;AAClF;AACA,iCAA2B,KAAK;AAAA,QAC9B;AAAA,QACA,KAAK,IAAI,0BAA0B,KAAK,MAAM,uBAAuB,gBAAgB,CAAC;AAAA,MACxF;AACA,UACE,2BAA2B,oBAC3B,yBAAyB,kBACzB;AACA;AAAA,MACF;AACA,WAAK,MAAM,aAAa,GAAG,oBAAoB,IAAI;AACnD,uBACE,uBAAuB,8BAA8B;AACvD,UAAI,4BAA4B,oBAAoB,iBAAiB,iBAAiB;AAAA,MAGtF;AAAA,IACF;AAGA,SAAK,MAAM,aAAa,GAAG,oBAAoB,IAAI;AAGnD,QACE,SAAS,sBAAsB,IAAI,kBACnC,uBAAuB,oBACvB,kBAAkB,sBAClB;AACA,WAAK,MAAM,WAAW,MAAM;AAAA,IAE9B;AAAA,EACF,CAAC;AAGD,MAAI,OAAO,eAAe,OAAO;AAC/B,UAAM,aAAa,KAChB,OAAO,MAAM,EACb,KAAK,SAAS,cAAc,EAC5B,KAAK,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,EAClC,KAAK,KAAK,SAAU,GAAG;AAEtB,cAAQ,EAAE,KAAK,EAAE,MAAM;AAAA,IACzB,CAAC,EACA,KAAK,SAAS,CAAC,MAAM;AACpB,YAAM,cACJ,2EACA,gBAAgB,EAAE,KAAK,IAAI,IAC3B;AACF,YAAM,SAAS,cAAc,EAAE,mBAAmB,EAAE,KAAK,kBAAkB,CAAS;AACpF,aAAO,cAAc,OAAO,YAAY,QAAQ,UAAU,OAAO;AAAA,IACnE,CAAC,EAEA,KAAK,aAAa,CAAC,IAAI,MAAM,aAAa,EAAE,IAAI,CAAC,GAAG,EACpD,KAAK,CAAC,MAAO,EAAE,QAAQ,YAAY,EAAE,KAAK,IAAI,EAAG;AAEpD,eAAW,KAAK,SAAU,GAAG;AAC3B,YAAM,mBAAmB,eAAO,IAAI;AACpC,YAAM,iBAAiB,KAAK;AAE5B,UAAI,CAAC,gBAAgB;AACnB,yBAAiB,MAAM,WAAW,MAAM;AACxC;AAAA,MACF;AAEA,YAAM,eAAe,eAAO,cAAc,EAAE,OAAuB,eAAe;AAElF,UAAI,aAAa,MAAM,KAAK,aAAa,MAAM,SAAS,MAAM,QAAQ;AACpE,yBAAiB,MAAM,WAAW,MAAM;AACxC;AAAA,MACF;AAEA,YAAM,qBAAqB,WAAW,aAAa,MAAM,WAAW,CAAC;AACrE,YAAM,wBAAwB;AAC9B,YAAM,mBAAmB;AACzB,YAAM,mBAAmB;AACzB,YAAM,8BAA8B;AAEpC,YAAM,sBAAsB,KAAK;AAAA,QAC/B;AAAA,QACA,KAAK,IAAI,uBAAuB,KAAK,MAAM,qBAAqB,gBAAgB,CAAC;AAAA,MACnF;AACA,uBAAiB,MAAM,aAAa,GAAG,mBAAmB,IAAI;AAE9D,YAAM,gBAAgB,EAAE,KAAK,EAAE,MAAM;AACrC,YAAM,kBAAkB,eAAe,qBAAqB,IAAI;AAChE,uBAAiB,KAAK,KAAK,eAAe;AAE1C,YAAM,YAAY,EAAE,KAAK,EAAE;AAC3B,YAAM,kBAAkB,EAAE,KAAK,EAAE;AACjC,YAAM,oBAAoB;AAC1B,YAAM,kBAAkB,kBAAkB;AAC1C,YAAM,yBAAyB,YAAY,IAAI;AAE/C,UACE,iBAAiB,KAAK,EAAG,sBAAsB,IAAI,0BACnD,kBAAkB,sBAAsB,mBACxC,sBAAsB,kBACtB;AACA,yBAAiB,MAAM,WAAW,MAAM;AAAA,MAC1C,OAAO;AACL,yBAAiB,MAAM,WAAW,IAAI;AAAA,MACxC;AAAA,IACF,CAAC;AAAA,EACH;AACA,QAAM,iBAAiB,OAAO,kBAAkB;AAChD,sBAAoB,KAAK,gBAAgB,aAAa,QAAQ,eAAe,KAAK;AACpF,GA9e6B;AAgf7B,IAAM,aAAa,gCACjB,OACA,YACmC;AACnC,SAAQ,WAAW,GAAiB,WAAW;AACjD,GALmB;AAMZ,IAAM,WAA4B,EAAE,MAAM,WAAW;;;ACzgB5D,IAAM,6BAAkD;AAAA,EACtD,oBAAoB;AAAA,EACpB,oBAAoB;AAAA,EACpB,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,eAAe;AACjB;AAEO,IAAM,YAAmC,wBAAC;AAAA,EAC/C;AACF,IAAuC,CAAC,MAAM;AAC5C,QAAM,UAAU,cAAc,4BAA4B,OAAO;AAEjE,SAAO;AAAA;AAAA,cAEK,QAAQ,kBAAkB;AAAA,oBACpB,QAAQ,kBAAkB;AAAA,YAClC,QAAQ,gBAAgB;AAAA;AAAA;AAAA,cAGtB,QAAQ,eAAe;AAAA,oBACjB,QAAQ,eAAe;AAAA,YAC/B,QAAQ,aAAa;AAAA;AAAA;AAAA,YAGrB,QAAQ,UAAU;AAAA,iBACb,QAAQ,aAAa;AAAA;AAAA;AAAA,YAG1B,QAAQ,UAAU;AAAA,iBACb,QAAQ,aAAa;AAAA;AAAA;AAAA,YAG1B,QAAQ,UAAU;AAAA,iBACb,QAAQ,aAAa;AAAA;AAAA;AAGtC,GA7BgD;AA+BhD,IAAO,iBAAQ;;;AC5CR,IAAM,UAA6B;AAAA,EACxC;AAAA,EACA,IAAI,KAAK;AACP,WAAO,IAAI,UAAU;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AACF;",
  "names": ["diagram"]
}
