{
  "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": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqBA,IAAM,QAAQ,IAAI,gBAA+B,OAAO;AAAA,EACtD,KAAK;AAAA,EACL,OAAO;AAAA,IACL;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,UAAU,CAAC;AAAA,IACb;AAAA,EACF;AACF,EAAE;AAEF,IAAMA,SAAQ,6BAAM;AAClB,QAAM,MAAM;AACZ,QAAY;AACd,GAHc;AAKd,IAAM,UAAU,6BAAM;AACpB,SAAO,MAAM,QAAQ,MAAM,CAAC;AAC9B,GAFgB;AAIhB,IAAM,WAAW,6BAAM,MAAM,QAAQ,KAApB;AAEjB,IAAM,gBAAiD,sBAAe;AAEtE,IAAMC,aAAY,6BAAuC;AACvD,SAAO,cAAc,eAAe,UAAgB,EAAE,QAAQ;AAChE,GAFkB;AAIlB,IAAM,UAAU,wBAAC,OAAe,SAAiB;AAC/C,SAAO,SAAS,MAAM,QAAQ,MAAM,MAAM,QAAQ,MAAM,SAAS,CAAC,EAAE,OAAO;AACzE,UAAM,QAAQ,MAAM,IAAI;AAAA,EAC1B;AACA,QAAM,OAAO;AAAA,IACX,IAAI,MAAM,QAAQ;AAAA,IAClB;AAAA,IACA;AAAA,IACA,UAAU,CAAC;AAAA,EACb;AACA,QAAM,QAAQ,MAAM,MAAM,QAAQ,MAAM,SAAS,CAAC,EAAE,SAAS,KAAK,IAAI;AACtE,QAAM,QAAQ,MAAM,KAAK,IAAI;AAC/B,GAZgB;AAchB,IAAM,KAAiB;AAAA,EACrB,OAAAD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAO,aAAQ;;;AC1Ef,SAAS,aAA4B;AAErC,IAAM,WAAW,wBAAC,QAAkB;AAClC,mBAAiB,KAAK,UAAE;AACxB,MAAI,MAAM,IAAI,CAAC,SAAS,WAAG,QAAQ,KAAK,SAAS,SAAS,KAAK,MAAM,IAAI,GAAG,KAAK,IAAI,CAAC;AACxF,GAHiB;AAKV,IAAM,SAA2B;AAAA,EACtC,OAAO,8BAAO,UAAiC;AAC7C,UAAM,MAAM,MAAM,MAAM,YAAY,KAAK;AACzC,QAAI,MAAM,GAAG;AACb,aAAS,GAAG;AAAA,EACd,GAJO;AAKT;;;ACTA,IAAM,gBAAgB,wBACpB,GACA,GACA,MACA,SACA,WACG;AACH,QAAM,QAAQ,QACX,OAAO,MAAM,EACb,KAAK,KAAK,IAAI,EACd,KAAK,qBAAqB,QAAQ,EAClC,KAAK,SAAS,qBAAqB;AACtC,QAAM,EAAE,QAAQ,aAAa,OAAO,WAAW,IAAI,MAAM,KAAK,EAAG,QAAQ;AACzE,QAAM,SAAS,cAAc,OAAO,WAAW;AAC/C,QAAM,QAAQ,aAAa,OAAO,WAAW;AAC7C,QAAM,KAAK,KAAK,IAAI,OAAO,QAAQ;AACnC,QAAM,KAAK,KAAK,IAAI,SAAS,CAAC;AAC9B,OAAK,OAAO;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF,GAvBsB;AAyBtB,IAAM,eAAe,wBACnB,SACA,IACA,IACA,IACA,IACA,kBACG;AACH,SAAO,QACJ,OAAO,MAAM,EACb,KAAK,MAAM,EAAE,EACb,KAAK,MAAM,EAAE,EACb,KAAK,MAAM,EAAE,EACb,KAAK,MAAM,EAAE,EACb,KAAK,gBAAgB,aAAa,EAClC,KAAK,SAAS,oBAAoB;AACvC,GAhBqB;AAkBrB,IAAM,WAAW,wBACf,MACA,MACA,WACG;AACH,MAAI,cAAc;AAClB,MAAI,aAAa;AACjB,QAAM,WAAW,wBACfC,OACA,MACAC,SACA,UACG;AACH,UAAM,SAAS,SAASA,QAAO,YAAYA,QAAO;AAClD,kBAAc,QAAQ,aAAa,MAAMD,OAAMC,OAAM;AACrD,UAAM,EAAE,QAAQ,MAAM,IAAI,KAAK;AAC/B;AAAA,MACED;AAAA,MACA,SAASC,QAAO;AAAA,MAChB,cAAc,SAAS;AAAA,MACvB;AAAA,MACA,cAAc,SAAS;AAAA,MACvBA,QAAO;AAAA,IACT;AAEA,iBAAa,KAAK,IAAI,YAAY,SAAS,KAAK;AAChD,mBAAe;AAAA,EACjB,GApBiB;AAsBjB,QAAM,cAAc,wBAAC,MAAY,QAAQ,MAAM;AAC7C,aAAS,MAAM,MAAM,QAAQ,KAAK;AAClC,SAAK,SAAS,QAAQ,CAAC,UAAU;AAC/B,kBAAY,OAAO,QAAQ,CAAC;AAAA,IAC9B,CAAC;AACD,UAAM,EAAE,GAAG,GAAG,OAAO,IAAI,KAAK;AAC9B,QAAI,KAAK,SAAS,QAAQ;AACxB,YAAM,EAAE,GAAG,MAAM,QAAQ,UAAU,IAAI,KAAK,SAAS,KAAK,SAAS,SAAS,CAAC,EAAE;AAC/E;AAAA,QACE;AAAA,QACA,IAAI,OAAO;AAAA,QACX,IAAI;AAAA,QACJ,IAAI,OAAO;AAAA,QACX,OAAO,YAAY,IAAI,OAAO,gBAAgB;AAAA,QAC9C,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF,GAjBoB;AAmBpB,cAAY,IAAI;AAChB,SAAO,EAAE,aAAa,WAAW;AACnC,GAlDiB;AAoDjB,IAAM,OAAuB,wBAAC,MAAM,IAAI,MAAM,YAAY;AACxD,MAAI,MAAM,iCAAiC,IAAI;AAE/C,QAAMC,MAAK,QAAQ;AACnB,QAAM,OAAOA,IAAG,QAAQ;AACxB,QAAM,SAASA,IAAG,UAAU;AAE5B,QAAM,MAAM,iBAAiB,EAAE;AAC/B,QAAM,WAAW,IAAI,OAAO,GAAG;AAC/B,WAAS,KAAK,SAAS,WAAW;AAElC,QAAM,EAAE,aAAa,WAAW,IAAI,SAAS,UAAU,MAAM,MAAM;AAGnE,MAAI,KAAK,WAAW,IAAI,OAAO,gBAAgB,CAAC,MAAM,UAAU,IAAI,WAAW,EAAE;AACjF,mBAAiB,KAAK,aAAa,YAAY,OAAO,WAAW;AACnE,GAhB6B;AAkB7B,IAAM,WAA4B;AAAA,EAChC;AACF;AAEA,IAAO,mBAAQ;;;ACzHf,IAAM,+BAAgE;AAAA,EACpE,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,WAAW;AACb;AAEA,IAAM,SAAgC,wBAAC;AAAA,EACrC;AACF,MAEc;AACZ,QAAM,EAAE,eAAe,YAAY,UAAU,IAAI;AAAA,IAC/C;AAAA,IACA;AAAA,EACF;AACA,SAAO;AAAA;AAAA,qBAEY,aAAa;AAAA,gBAClB,UAAU;AAAA;AAAA;AAAA,kBAGR,SAAS;AAAA;AAAA;AAG3B,GAlBsC;AAoBtC,IAAO,iBAAQ;;;ACxBR,IAAM,UAA6B;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;",
  "names": ["clear", "getConfig", "elem", "config", "db"]
}
