{
  "version": 3,
  "sources": ["../../../src/diagrams/treeView/db.ts", "../../../src/diagrams/treeView/parser.ts", "../../../src/diagrams/treeView/renderer.ts", "../../../src/diagrams/treeView/styles.ts", "../../../src/diagrams/treeView/diagram.ts"],
  "sourcesContent": ["import type { TreeViewDiagramConfig } from '../../config.type.js';\nimport type { TreeViewDB, Node } from './types.js';\nimport { getConfig as getCommonConfig } from '../../config.js';\nimport DEFAULT_CONFIG from '../../defaultConfig.js';\nimport {\n  clear as commonClear,\n  getAccDescription,\n  getAccTitle,\n  getDiagramTitle,\n  setAccDescription,\n  setAccTitle,\n  setDiagramTitle,\n} from '../common/commonDb.js';\nimport { cleanAndMerge } from '../../utils.js';\nimport { ImperativeState } from '../../utils/imperativeState.js';\n\ninterface TreeViewState {\n  cnt: number;\n  stack: Node[];\n}\n\nconst state = new ImperativeState<TreeViewState>(() => ({\n  cnt: 1,\n  stack: [\n    {\n      id: 0,\n      level: -1,\n      name: '/',\n      children: [],\n    },\n  ],\n}));\n\nconst clear = () => {\n  state.reset();\n  commonClear();\n};\n\nconst getRoot = () => {\n  return state.records.stack[0];\n};\n\nconst getCount = () => state.records.cnt;\n\nconst defaultConfig: Required<TreeViewDiagramConfig> = DEFAULT_CONFIG.treeView;\n\nconst getConfig = (): Required<TreeViewDiagramConfig> => {\n  return cleanAndMerge(defaultConfig, getCommonConfig().treeView);\n};\n\nconst addNode = (level: number, name: string) => {\n  while (level <= state.records.stack[state.records.stack.length - 1].level) {\n    state.records.stack.pop();\n  }\n  const node = {\n    id: state.records.cnt++,\n    level,\n    name,\n    children: [],\n  };\n  state.records.stack[state.records.stack.length - 1].children.push(node);\n  state.records.stack.push(node);\n};\n\nconst db: TreeViewDB = {\n  clear,\n  addNode,\n  getRoot,\n  getCount,\n  getConfig,\n  getAccTitle,\n  getAccDescription,\n  getDiagramTitle,\n  setAccDescription,\n  setAccTitle,\n  setDiagramTitle,\n};\n\nexport default db;\n", "import type { ParserDefinition } from '../../diagram-api/types.js';\nimport { log } from '../../logger.js';\nimport { populateCommonDb } from '../common/populateCommonDb.js';\nimport db from './db.js';\nimport { parse, type TreeView } from '@mermaid-js/parser';\n\nconst populate = (ast: TreeView) => {\n  populateCommonDb(ast, db);\n  ast.nodes.map((node) => db.addNode(node.indent ? parseInt(node.indent) : 0, node.name));\n};\n\nexport const parser: ParserDefinition = {\n  parse: async (input: string): Promise<void> => {\n    const ast = await parse('treeView', input);\n    log.debug(ast);\n    populate(ast);\n  },\n};\n", "import type { DiagramRenderer, DrawDefinition } from '../../diagram-api/types.js';\nimport { log } from '../../logger.js';\nimport { selectSvgElement } from '../../rendering-util/selectSvgElement.js';\nimport type { D3SVGElement, TreeViewDB } from './types.js';\nimport { configureSvgSize } from '../../setupGraphViewbox.js';\nimport type { TreeViewDiagramConfig } from '../../config.type.js';\nimport type { Node } from './types.js';\n\nconst positionLabel = (\n  x: number,\n  y: number,\n  node: Node,\n  domElem: D3SVGElement<SVGGElement>,\n  config: Required<TreeViewDiagramConfig>\n) => {\n  const label = domElem\n    .append('text')\n    .text(node.name)\n    .attr('dominant-baseline', 'middle')\n    .attr('class', 'treeView-node-label');\n  const { height: labelHeight, width: labelWidth } = label.node()!.getBBox();\n  const height = labelHeight + config.paddingY * 2;\n  const width = labelWidth + config.paddingX * 2;\n  label.attr('x', x + config.paddingX);\n  label.attr('y', y + height / 2);\n  node.BBox = {\n    x,\n    y,\n    width,\n    height,\n  };\n};\n\nconst positionLine = (\n  domElem: D3SVGElement<SVGGElement>,\n  x1: number,\n  y1: number,\n  x2: number,\n  y2: number,\n  lineThickness: number\n) => {\n  return domElem\n    .append('line')\n    .attr('x1', x1)\n    .attr('y1', y1)\n    .attr('x2', x2)\n    .attr('y2', y2)\n    .attr('stroke-width', lineThickness)\n    .attr('class', 'treeView-node-line');\n};\n\nconst drawTree = (\n  elem: D3SVGElement<SVGGElement>,\n  root: Node,\n  config: Required<TreeViewDiagramConfig>\n) => {\n  let totalHeight = 0;\n  let totalWidth = 0;\n  const drawNode = (\n    elem: D3SVGElement<SVGGElement>,\n    node: Node,\n    config: Required<TreeViewDiagramConfig>,\n    depth: number\n  ) => {\n    const indent = depth * (config.rowIndent + config.paddingX);\n    positionLabel(indent, totalHeight, node, elem, config);\n    const { height, width } = node.BBox!;\n    positionLine(\n      elem,\n      indent - config.rowIndent,\n      totalHeight + height / 2,\n      indent,\n      totalHeight + height / 2,\n      config.lineThickness\n    );\n\n    totalWidth = Math.max(totalWidth, indent + width);\n    totalHeight += height;\n  };\n\n  const processNode = (node: Node, depth = 0) => {\n    drawNode(elem, node, config, depth);\n    node.children.forEach((child) => {\n      processNode(child, depth + 1);\n    });\n    const { x, y, height } = node.BBox!;\n    if (node.children.length) {\n      const { y: endY, height: endHeight } = node.children[node.children.length - 1].BBox!;\n      positionLine(\n        elem,\n        x + config.paddingX,\n        y + height,\n        x + config.paddingX,\n        endY + endHeight / 2 + config.lineThickness / 2,\n        config.lineThickness\n      );\n    }\n  };\n\n  processNode(root);\n  return { totalHeight, totalWidth };\n};\n\nconst draw: DrawDefinition = (text, id, _ver, diagObj) => {\n  log.debug('Rendering treeView diagram\\n' + text);\n\n  const db = diagObj.db as TreeViewDB;\n  const root = db.getRoot();\n  const config = db.getConfig();\n\n  const svg = selectSvgElement(id);\n  const treeElem = svg.append('g');\n  treeElem.attr('class', 'tree-view');\n\n  const { totalHeight, totalWidth } = drawTree(treeElem, root, config);\n  /* -${config.lineThickness/2} is required for a line with x coordinate = 0\n     as there is overflow to the left due to the line being centered */\n  svg.attr('viewBox', `-${config.lineThickness / 2} 0 ${totalWidth} ${totalHeight}`);\n  configureSvgSize(svg, totalHeight, totalWidth, config.useMaxWidth);\n};\n\nconst renderer: DiagramRenderer = {\n  draw,\n};\n\nexport default renderer;\n", "import type { DiagramStylesProvider } from '../../diagram-api/types.js';\nimport { cleanAndMerge } from '../../utils.js';\nimport type { TreeViewDiagramStyles } from './types.js';\n\nconst defaultTreeViewDiagramStyles: Required<TreeViewDiagramStyles> = {\n  labelFontSize: '16px',\n  labelColor: 'black',\n  lineColor: 'black',\n};\n\nconst styles: DiagramStylesProvider = ({\n  treeView,\n}: {\n  treeView?: TreeViewDiagramStyles;\n}): string => {\n  const { labelFontSize, labelColor, lineColor } = cleanAndMerge(\n    defaultTreeViewDiagramStyles,\n    treeView\n  );\n  return `\n    .treeView-node-label {\n        font-size: ${labelFontSize};\n        fill: ${labelColor};\n    }\n    .treeView-node-line {\n        stroke: ${lineColor};\n    }\n    `;\n};\n\nexport default styles;\n", "import type { DiagramDefinition } from '../../diagram-api/types.js';\nimport { parser } from './parser.js';\nimport db from './db.js';\nimport renderer from './renderer.js';\nimport styles from './styles.js';\n\nexport const diagram: DiagramDefinition = {\n  db,\n  renderer,\n  parser,\n  styles,\n};\n"],
  "mappings": "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",
  "names": ["state", "ImperativeState", "clear", "__name", "getRoot", "getCount", "defaultConfig", "defaultConfig_default", "getConfig", "cleanAndMerge", "addNode", "level", "name", "node", "db", "getAccTitle", "getAccDescription", "getDiagramTitle", "setAccDescription", "setAccTitle", "setDiagramTitle", "db_default", "populate", "__name", "ast", "populateCommonDb", "db_default", "node", "parser", "input", "parse", "log", "positionLabel", "__name", "x", "y", "node", "domElem", "config", "label", "labelHeight", "labelWidth", "height", "width", "positionLine", "x1", "y1", "x2", "y2", "lineThickness", "drawTree", "elem", "root", "totalHeight", "totalWidth", "drawNode", "depth", "indent", "processNode", "child", "endY", "endHeight", "draw", "text", "id", "_ver", "diagObj", "log", "db", "svg", "selectSvgElement", "treeElem", "configureSvgSize", "renderer", "renderer_default", "defaultTreeViewDiagramStyles", "styles", "__name", "treeView", "labelFontSize", "labelColor", "lineColor", "cleanAndMerge", "styles_default", "diagram", "db_default", "renderer_default", "parser", "styles_default"]
}
