2026-05-31 13:54:31 +02:00

221 lines
5.9 KiB
JavaScript

import {
ImperativeState
} from "./chunk-IALYP65X.mjs";
import {
populateCommonDb
} from "./chunk-6ZKBGPIT.mjs";
import {
parse
} from "./chunk-2ENXBMWA.mjs";
import "./chunk-HQDACWF7.mjs";
import "./chunk-CYW2HGLJ.mjs";
import "./chunk-CT5Q72BK.mjs";
import "./chunk-3O5MS6M4.mjs";
import "./chunk-D6UAH5RW.mjs";
import "./chunk-LJRZYMMA.mjs";
import "./chunk-NZTEHIZO.mjs";
import "./chunk-WM6EUEOH.mjs";
import "./chunk-D6MTONMS.mjs";
import {
selectSvgElement
} from "./chunk-PUIB63ON.mjs";
import {
cleanAndMerge
} from "./chunk-BSZA5ISF.mjs";
import "./chunk-7TFACZ55.mjs";
import {
clear,
configureSvgSize,
defaultConfig_default,
getAccDescription,
getAccTitle,
getConfig,
getDiagramTitle,
setAccDescription,
setAccTitle,
setDiagramTitle
} from "./chunk-Q52JI7PB.mjs";
import {
log
} from "./chunk-V7P66DNM.mjs";
import "./chunk-BBDM4ZFP.mjs";
import "./chunk-NW2N4LI3.mjs";
import {
__name
} from "./chunk-PTVI3W5X.mjs";
// src/diagrams/treeView/db.ts
var state = new ImperativeState(() => ({
cnt: 1,
stack: [
{
id: 0,
level: -1,
name: "/",
children: []
}
]
}));
var clear2 = /* @__PURE__ */ __name(() => {
state.reset();
clear();
}, "clear");
var getRoot = /* @__PURE__ */ __name(() => {
return state.records.stack[0];
}, "getRoot");
var getCount = /* @__PURE__ */ __name(() => state.records.cnt, "getCount");
var defaultConfig = defaultConfig_default.treeView;
var getConfig2 = /* @__PURE__ */ __name(() => {
return cleanAndMerge(defaultConfig, getConfig().treeView);
}, "getConfig");
var addNode = /* @__PURE__ */ __name((level, name) => {
while (level <= state.records.stack[state.records.stack.length - 1].level) {
state.records.stack.pop();
}
const node = {
id: state.records.cnt++,
level,
name,
children: []
};
state.records.stack[state.records.stack.length - 1].children.push(node);
state.records.stack.push(node);
}, "addNode");
var db = {
clear: clear2,
addNode,
getRoot,
getCount,
getConfig: getConfig2,
getAccTitle,
getAccDescription,
getDiagramTitle,
setAccDescription,
setAccTitle,
setDiagramTitle
};
var db_default = db;
// src/diagrams/treeView/parser.ts
var populate = /* @__PURE__ */ __name((ast) => {
populateCommonDb(ast, db_default);
ast.nodes.map((node) => db_default.addNode(node.indent ? parseInt(node.indent) : 0, node.name));
}, "populate");
var parser = {
parse: /* @__PURE__ */ __name(async (input) => {
const ast = await parse("treeView", input);
log.debug(ast);
populate(ast);
}, "parse")
};
// src/diagrams/treeView/renderer.ts
var positionLabel = /* @__PURE__ */ __name((x, y, node, domElem, config) => {
const label = domElem.append("text").text(node.name).attr("dominant-baseline", "middle").attr("class", "treeView-node-label");
const { height: labelHeight, width: labelWidth } = label.node().getBBox();
const height = labelHeight + config.paddingY * 2;
const width = labelWidth + config.paddingX * 2;
label.attr("x", x + config.paddingX);
label.attr("y", y + height / 2);
node.BBox = {
x,
y,
width,
height
};
}, "positionLabel");
var positionLine = /* @__PURE__ */ __name((domElem, x1, y1, x2, y2, lineThickness) => {
return domElem.append("line").attr("x1", x1).attr("y1", y1).attr("x2", x2).attr("y2", y2).attr("stroke-width", lineThickness).attr("class", "treeView-node-line");
}, "positionLine");
var drawTree = /* @__PURE__ */ __name((elem, root, config) => {
let totalHeight = 0;
let totalWidth = 0;
const drawNode = /* @__PURE__ */ __name((elem2, node, config2, depth) => {
const indent = depth * (config2.rowIndent + config2.paddingX);
positionLabel(indent, totalHeight, node, elem2, config2);
const { height, width } = node.BBox;
positionLine(
elem2,
indent - config2.rowIndent,
totalHeight + height / 2,
indent,
totalHeight + height / 2,
config2.lineThickness
);
totalWidth = Math.max(totalWidth, indent + width);
totalHeight += height;
}, "drawNode");
const processNode = /* @__PURE__ */ __name((node, depth = 0) => {
drawNode(elem, node, config, depth);
node.children.forEach((child) => {
processNode(child, depth + 1);
});
const { x, y, height } = node.BBox;
if (node.children.length) {
const { y: endY, height: endHeight } = node.children[node.children.length - 1].BBox;
positionLine(
elem,
x + config.paddingX,
y + height,
x + config.paddingX,
endY + endHeight / 2 + config.lineThickness / 2,
config.lineThickness
);
}
}, "processNode");
processNode(root);
return { totalHeight, totalWidth };
}, "drawTree");
var draw = /* @__PURE__ */ __name((text, id, _ver, diagObj) => {
log.debug("Rendering treeView diagram\n" + text);
const db2 = diagObj.db;
const root = db2.getRoot();
const config = db2.getConfig();
const svg = selectSvgElement(id);
const treeElem = svg.append("g");
treeElem.attr("class", "tree-view");
const { totalHeight, totalWidth } = drawTree(treeElem, root, config);
svg.attr("viewBox", `-${config.lineThickness / 2} 0 ${totalWidth} ${totalHeight}`);
configureSvgSize(svg, totalHeight, totalWidth, config.useMaxWidth);
}, "draw");
var renderer = {
draw
};
var renderer_default = renderer;
// src/diagrams/treeView/styles.ts
var defaultTreeViewDiagramStyles = {
labelFontSize: "16px",
labelColor: "black",
lineColor: "black"
};
var styles = /* @__PURE__ */ __name(({
treeView
}) => {
const { labelFontSize, labelColor, lineColor } = cleanAndMerge(
defaultTreeViewDiagramStyles,
treeView
);
return `
.treeView-node-label {
font-size: ${labelFontSize};
fill: ${labelColor};
}
.treeView-node-line {
stroke: ${lineColor};
}
`;
}, "styles");
var styles_default = styles;
// src/diagrams/treeView/diagram.ts
var diagram = {
db: db_default,
renderer: renderer_default,
parser,
styles: styles_default
};
export {
diagram
};