{ "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(() => ({\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 = DEFAULT_CONFIG.treeView;\n\nconst getConfig = (): Required => {\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 => {\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,\n config: Required\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,\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,\n root: Node,\n config: Required\n) => {\n let totalHeight = 0;\n let totalWidth = 0;\n const drawNode = (\n elem: D3SVGElement,\n node: Node,\n config: Required,\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 = {\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": ["clear", "getConfig", "elem", "config", "db"] }