UNPKG

@obliczeniowo/elementary

Version:
658 lines (643 loc) 28.1 kB
import { Point2D, ColorRGB, ColorHSV } from '@obliczeniowo/elementary/classes'; import * as i0 from '@angular/core'; import { Input, ViewChild, Component, NgModule } from '@angular/core'; import { ElementaryMath } from '@obliczeniowo/elementary/math'; import { keys } from '@obliczeniowo/elementary/objects'; import { ns } from '@obliczeniowo/elementary/svg'; import { CommonModule } from '@angular/common'; class SvgGroup { id = ''; svgGroupContainer; constructor(id, style) { this.id = id || ''; this.svgGroupContainer = document.createElementNS(ns, 'g'); if (style) { this.svgGroupContainer.setAttribute('style', style.toString()); } } append(child) { this.svgGroupContainer.appendChild(child); } clear() { while (this.svgGroupContainer.firstChild) { this.svgGroupContainer.removeChild(this.svgGroupContainer.firstChild); } } } class SvgRect { svg; constructor(x, y, width, height, id, svgContainer, style) { this.svg = document.createElementNS(ns, 'rect'); this.svg.setAttribute('id', id); if (style) { this.svg.setAttribute('style', style.toString()); } this.svg.setAttribute('x', x.toString()); this.svg.setAttribute('y', y.toString()); this.svg.setAttribute('width', width.toString()); this.svg.setAttribute('height', height.toString()); svgContainer.append(this.svg); } setX(x) { this.svg.setAttribute('x', x.toString()); } setY(y) { this.svg.setAttribute('y', y.toString()); } setWidth(width) { this.svg.setAttribute('width', width.toString()); } setHeight(height) { this.svg.setAttribute('height', height.toString()); } } class SvgPolygon { svg; points = []; constructor(id, style, svgContainer) { this.svg = document.createElementNS(ns, 'polygon'); this.svg.setAttribute('id', id); this.svg.setAttribute('style', style.toString()); this.svg.setAttribute('points', ''); svgContainer.append(this.svg); } addPoint(x, y) { this.points.push(new Point2D(x, y)); let strPoints = ''; this.points.forEach((point) => { strPoints += point.toString(); }); this.svg.setAttribute('points', strPoints); } clearPoints() { this.points = []; this.svg.setAttribute('points', ''); } } class Style { styles; toString() { let styleTxt = ''; keys(this.styles).forEach((key) => { styleTxt += key + ':' + this.styles[key].toString() + ';'; }); return styleTxt; } constructor(styleObject) { this.styles = styleObject; } } class SvgPost { x; y; width; height; faceColor; rightColor; topColor; strokeColor; face; right; top; constructor(x, y, width, height, id, color, postGroup) { this.x = x; this.y = y; this.width = width; this.height = height; this.faceColor = color; this.rightColor = new ColorRGB(color.red - 40, color.green - 40, color.blue - 40); this.topColor = new ColorRGB(color.red + 40, color.green + 40, color.blue + 40); this.strokeColor = new ColorRGB(color.red - 100, color.green - 100, color.blue - 100); this.face = new SvgRect(x, y - height, width, height, id + '_face', postGroup, new Style({ fill: this.faceColor, stroke: this.strokeColor, 'stroke-linejoin': 'round', })); this.right = new SvgPolygon(id + '_right', new Style({ fill: this.rightColor, stroke: this.strokeColor, 'stroke-linejoin': 'round', }), postGroup); this.top = new SvgPolygon(id + '_top', new Style({ fill: this.topColor, stroke: this.strokeColor, 'stroke-linejoin': 'round', }), postGroup); this.refresh(); } refresh() { this.face.setWidth(this.width); this.face.setHeight(this.height); this.face.setX(this.x); this.face.setY(this.y - this.height); this.right.clearPoints(); this.right.addPoint(this.x + this.width, this.y - this.height); this.right.addPoint(this.x + 1.5 * this.width, this.y - 0.5 * this.width - this.height); this.right.addPoint(this.x + 1.5 * this.width, this.y - 0.5 * this.width); this.right.addPoint(this.x + this.width, this.y); this.top.clearPoints(); this.top.addPoint(this.x, this.y - this.height); this.top.addPoint(this.x + this.width, this.y - this.height); this.top.addPoint(this.x + 1.5 * this.width, this.y - 0.5 * this.width - this.height); this.top.addPoint(this.x + 0.5 * this.width, this.y - 0.5 * this.width - this.height); } setWidth(width, refresh = false) { this.width = width; if (refresh) { this.refresh(); } } setHeight(height, refresh = false) { this.height = height; if (refresh) { this.refresh(); } } setColor(color) { this.faceColor = color; this.rightColor = new ColorRGB(color.red - 40, color.green - 40, color.blue - 40); this.topColor = new ColorRGB(color.red + 40, color.green + 40, color.blue + 40); this.strokeColor = new ColorRGB(color.red - 100, color.green - 100, color.blue - 100); this.face.svg.style.fill = this.faceColor.toString(); this.face.svg.style.stroke = this.strokeColor.toString(); this.right.svg.style.fill = this.rightColor.toString(); this.right.svg.style.stroke = this.strokeColor.toString(); this.top.svg.style.fill = this.topColor.toString(); this.top.svg.style.stroke = this.strokeColor.toString(); } } class SvgText { svg; rotate; setText(text) { this.svg.innerHTML = text; } constructor(x, y, text, style, id, rotate, svgContainer) { this.svg = document.createElementNS(ns, 'text'); this.rotate = rotate; this.svg.setAttribute('transform', rotate.toString()); this.svg.setAttribute('x', x.toString()); this.svg.setAttribute('y', y.toString()); this.svg.setAttribute('style', style.toString()); this.svg.setAttribute('id', id); svgContainer.append(this.svg); this.setText(text); } show(display) { if (display) { this.svg.style.display = 'inherit'; } else { this.svg.style.display = 'none'; } } set _transform(transform) { this.svg.setAttribute('transform', transform); } get transform() { return this.svg.getAttribute('transform'); } setX(x) { if (this.rotate?.rotatePoint) { this.rotate.rotatePoint.x = x; this._transform = this.rotate.toString(); } this.svg.setAttribute('x', x.toString()); } setY(y) { if (this.rotate?.rotatePoint) { this.rotate.rotatePoint.y = y; this._transform = this.rotate.toString(); } this.svg.setAttribute('y', y.toString()); } } class Transform { } class Rotate extends Transform { rotatePoint = null; angle; constructor(angle, rotatePoint = null) { super(); this.rotatePoint = rotatePoint; this.angle = angle; } toString() { return ('rotate(' + this.angle.toString() + (this.rotatePoint ? ',' + this.rotatePoint.toString() : '') + ')'); } } class PostDiagramValue { key; postsGroup; valuesGroup; keysGroup; diagramValue; svgPost; valueText; keyText; legendContainer; legendKey; set setColor(color) { this.svgPost.setColor(color); this.legendKey.querySelector('div').style.backgroundColor = color.toString(); } constructor(key, diagramValue, postsGroup, valuesGroup, keysGroup, legendContainer) { this.key = key; this.diagramValue = Math.abs(diagramValue); this.postsGroup = postsGroup; this.valuesGroup = valuesGroup; this.keysGroup = keysGroup; this.legendContainer = legendContainer; this.svgPost = new SvgPost(0, 0, 10, this.diagramValue, this.key.replace(/ /g, ''), new ColorRGB(250, 0, 0), this.postsGroup); this.valueText = new SvgText(0, 10, this.diagramValue.toString(), new Style({ fill: 'var(--default-text-color)', 'text-anchor': 'middle' }), 'Value_' + this.key.replace(/ /g, ''), new Rotate(0), this.valuesGroup); this.keyText = new SvgText(100, 100, key, new Style({ fill: 'var(--default-text-color)', 'text-anchor': 'end', }), 'Key_' + this.key.replace(/ /g, ''), new Rotate(-90, new Point2D(100, 100)), this.keysGroup); const legendKey = document.createElement('DIV'); legendKey.setAttribute('class', 'legend_key_' + this.key.replace(/ /g, '')); legendKey.style.backgroundColor = new ColorRGB(0, 0, 0).toString(); legendKey.style.width = '20px'; legendKey.style.height = '20px'; legendKey.style.display = 'inline-flex'; const legendText = document.createElement('DIV'); legendText.innerHTML = key + ' = ' + this.getValue(); legendText.style.display = 'inline-flex'; legendText.style.marginLeft = '10px'; this.legendKey = document.createElement('DIV'); this.legendKey.appendChild(legendKey); this.legendKey.appendChild(legendText); this.legendKey.style.verticalAlign = 'middle'; this.legendContainer.appendChild(this.legendKey); } setPost(x, y, width, k) { this.svgPost.x = x; this.svgPost.y = y; this.svgPost.setWidth(width); this.svgPost.setHeight(this.diagramValue * k); this.svgPost.refresh(); } getValue() { return this.diagramValue; } setValue(value, k) { this.diagramValue = value; this.valueText.setText(this.diagramValue.toString()); this.svgPost.setHeight(value * k); this.svgPost.refresh(); } toString() { return this.key + ';' + this.diagramValue.toString(); } } class SvgPolyline { svg; points = []; constructor(id, style, svgContainer, type = 'beforeend') { this.svg = document.createElementNS(ns, 'polyline'); this.svg.setAttribute('id', id); this.svg.setAttribute('style', style.toString()); this.svg.setAttribute('points', ''); svgContainer.append(this.svg); } addPoint(x, y) { this.points.push(new Point2D(x, y)); let strPoints = ''; this.points.forEach((point) => { strPoints += point.toString(); }); this.svg.setAttribute('points', strPoints); } clearPoints() { this.points = []; this.svg.setAttribute('points', ''); } } class SvgPostDiagram { values = []; svgContainer; legendContainer; postsGroup = new SvgGroup(); valuesGroup = new SvgGroup(); keysGroup = new SvgGroup(); greedGroup = new SvgGroup(); // tslint:disable-next-line: variable-name _displayPostKeys = true; // tslint:disable-next-line: variable-name _diagramHeight; dy = 30; diagramWidth; diagramPos; base; leftScalePlain; backScalePlain; scaleLines = []; scaleBase; displayText = true; valuesColor = null; scaleColor = 'var(--post-diagram-scale-line-color)'; id; // tslint:disable-next-line: variable-name _colorFunction = (index, dataLength, value, max) => { return ColorHSV.createColorHSV(((360 / dataLength) * 2 * index) / 2, 0.5, 255).convertToRGB(); }; set colorFunction(colorFunction) { if (colorFunction) { this._colorFunction = colorFunction; const dataLength = this.values.length; const max = this.getMax(); this.values.forEach((value, index) => { value.setColor = this._colorFunction(index, dataLength, value.getValue(), max); }); } } constructor(id, data, svgContainer, legendContainer) { this.id = id; this.values = []; this.svgContainer = svgContainer; this.legendContainer = legendContainer; this.legendContainer.style.maxHeight = svgContainer.getAttribute('height') + 'px'; this._diagramHeight = +this.svgContainer.getAttribute('height') - 80; this.diagramWidth = +this.svgContainer.getAttribute('width') - 100; this.diagramPos = new Point2D(90, this.diagramHeight + this.dy); this.setDiagramValues(data); } get diagramHeight() { return (this._diagramHeight - (this.values.length ? this.postWidth * 0.5 : 0) - this.dy); } displayPostKeys(display) { this._displayPostKeys = display; this.values.forEach((postValue) => { postValue.keyText.show(display); }); this._diagramHeight = +this.svgContainer.getAttribute('height') - (display ? 80 : 30); this.diagramPos.y = this.diagramHeight + this.dy; this.greedGroup.clear(); this.refresh(); } getMax() { let max = 0; this.values.forEach((value) => { if (max < value.getValue()) { max = value.getValue(); } }); return max !== 0 ? max : 1; } setValueColor(valuesColor) { this.valuesColor = valuesColor; this.values.forEach((value) => { value.setColor(valuesColor); }); } clearHtml(html) { while (html.firstChild) { html.removeChild(html.firstChild); } } setDiagramValues(data) { this.clearHtml(this.svgContainer); this.clearHtml(this.legendContainer); this.postsGroup.clear(); this.valuesGroup.clear(); this.keysGroup.clear(); this.greedGroup.clear(); this.values = []; this.base = new SvgPolygon(this.id + 'base', new Style({ fill: new ColorRGB(150, 150, 150), stroke: new ColorRGB(50, 50, 50), }), this.svgContainer); this.leftScalePlain = new SvgPolygon(this.id + 'leftScalePlain', new Style({ fill: 'none', stroke: this.scaleColor, }), this.svgContainer); this.backScalePlain = new SvgPolygon(this.id + 'backScalePlain', new Style({ fill: 'none', stroke: this.scaleColor, }), this.svgContainer); this.svgContainer.appendChild(this.greedGroup.svgGroupContainer); this.svgContainer.appendChild(this.postsGroup.svgGroupContainer); this.svgContainer.appendChild(this.valuesGroup.svgGroupContainer); this.svgContainer.appendChild(this.keysGroup.svgGroupContainer); let post; const valuesKeys = keys(data); const dataLength = valuesKeys.length; let max = 0; valuesKeys.forEach((element) => { const value = data[element]; max = value > max ? value : max; }); valuesKeys.forEach((key, index) => { if (ElementaryMath.isNumeric(data[key])) { post = new PostDiagramValue(key, data[key], this.postsGroup, this.valuesGroup, this.keysGroup, this.legendContainer); post.setColor = this.valuesColor === null ? this._colorFunction(index, dataLength, data[key], max) : this.scaleColor; post.keyText.show(this._displayPostKeys); this.values.push(post); } else { console.error('non numeric value ' + data[key]); } }); this.refresh(); } get postWidth() { return this.diagramWidth / (2 * this.values.length); } _refreshBase() { this.base.clearPoints(); this.base.addPoint(this.diagramPos.x, this.diagramPos.y); this.base.addPoint(this.diagramPos.x + this.postWidth * 0.5, this.diagramPos.y - this.postWidth * 0.5); this.base.addPoint(this.diagramPos.x + this.diagramWidth, this.diagramPos.y - this.postWidth * 0.5); this.base.addPoint(this.diagramPos.x + this.diagramWidth - this.postWidth * 0.5, this.diagramPos.y); } _refreshLeftScalePlain() { this.leftScalePlain.clearPoints(); this.leftScalePlain.addPoint(this.diagramPos.x, this.diagramPos.y); this.leftScalePlain.addPoint(this.diagramPos.x + this.postWidth * 0.5, this.diagramPos.y - this.postWidth * 0.5); this.leftScalePlain.addPoint(this.diagramPos.x + this.postWidth * 0.5, this.diagramPos.y - this.postWidth * 0.5 - this.diagramHeight); this.leftScalePlain.addPoint(this.diagramPos.x, this.diagramPos.y - this.diagramHeight); } _refreshBackScalePlain() { this.backScalePlain.clearPoints(); this.backScalePlain.addPoint(this.diagramPos.x + this.postWidth * 0.5, this.diagramPos.y - this.postWidth * 0.5); this.backScalePlain.addPoint(this.diagramPos.x + this.postWidth * 0.5, this.diagramPos.y - this.postWidth * 0.5 - this.diagramHeight); this.backScalePlain.addPoint(this.diagramPos.x + this.diagramWidth, this.diagramPos.y - this.postWidth * 0.5 - this.diagramHeight); this.backScalePlain.addPoint(this.diagramPos.x + this.diagramWidth, this.diagramPos.y - this.postWidth * 0.5); } _refreshScale(k) { const max = this.getMax(); let baseUnit = Math.pow(10, Math.ceil(Math.log10(max))) / 10; const basePow = 1 - Math.ceil(Math.log10(max)); const baseLog = Math.pow(10, basePow); if (Math.floor(max / baseUnit) === 5) { baseUnit = baseUnit / 2; } else if (Math.floor(max / baseUnit) === 4) { baseUnit = baseUnit / 2.5; } else if (Math.floor(max / baseUnit) === 3) { baseUnit = baseUnit / 4; } else if (Math.floor(max / baseUnit) === 2) { baseUnit = baseUnit / 5; } else if (Math.floor(max / baseUnit) < 2) { baseUnit = Math.pow(10, Math.ceil(Math.log10(max))) / 50; } this.scaleLines = []; this.scaleBase = new SvgText(this.diagramPos.x - 10, this.diagramPos.y + 30, basePow !== 0 ? '&times;e' + -basePow : '', new Style({ fill: 'var(--default-text-color)', 'text-anchor': 'end', }), this.id + 'basePow', new Rotate(0), this.greedGroup); for (let index = 0; index <= max; index += baseUnit) { const scaleLine = new SvgPolyline(this.id + 'scaleLine' + index, new Style({ fill: 'none', stroke: this.scaleColor, }), this.greedGroup, 'afterbegin'); scaleLine.addPoint(this.diagramPos.x, this.diagramPos.y - index * k); scaleLine.addPoint(this.diagramPos.x + this.postWidth * 0.5, this.diagramPos.y - this.postWidth * 0.5 - index * k); scaleLine.addPoint(this.diagramPos.x + this.diagramWidth, this.diagramPos.y - this.postWidth * 0.5 - index * k); const value = new SvgText(this.diagramPos.x - 10, this.diagramPos.y - index * k, (index * baseLog).toFixed(2).toString(), new Style({ fill: 'var(--default-text-color)', 'text-anchor': 'end', }), this.id + 'scaleValue' + index, new Rotate(0), this.greedGroup); this.scaleLines.push({ line: scaleLine, value }); } } refresh() { const k = this.diagramHeight / this.getMax(); this._refreshScale(k); this._refreshBase(); this._refreshLeftScalePlain(); this._refreshBackScalePlain(); this.values.forEach((value, i) => { value.setPost(this.diagramPos.x + i * this.postWidth * 2 + this.postWidth / 4, this.diagramPos.y, this.postWidth, k); if (this.displayText === true) { value.valueText.svg.style.display = 'initial'; } else { value.valueText.svg.style.display = 'none'; } value.valueText.setX(this.diagramPos.x + i * this.postWidth * 2 + 0.75 * this.postWidth); value.valueText.setY(this.diagramPos.y - value.getValue() * k - this.postWidth * 0.5 - 5); value.keyText.setX(this.diagramPos.x + i * this.postWidth * 2 + 0.75 * this.postWidth); value.keyText.setY(this.diagramPos.y + 10); }); } toString() { let data = ''; this.values.forEach((value) => { data += value.toString() + ';'; }); return data.slice(0, -1); } setDisplayValue(value) { this.displayText = value; this.values.forEach((diagramValue) => { if (this.displayText === true) { diagramValue.valueText.svg.style.display = 'initial'; } else { diagramValue.valueText.svg.style.display = 'none'; } }); } setValue(value, index) { if (index < this.values.length) { let max = this.getMax(); max = max < value ? value : max; const k = value / max; this.values[index].setValue(value, k); } } } class PostDiagramComponent { yLabel = ''; xLabel = ''; diagramTitle = ''; // tslint:disable-next-line: variable-name _diagramData = {}; svgContainer; diagramLegend; set diagramData(diagramData) { this._diagramData = diagramData; if (this.svgDiagram) { this.svgDiagram.setDiagramValues(this._diagramData); } } svgDiagram; // tslint:disable-next-line: variable-name _colorFunctionRef = (index, dataLength, value, max) => { return ColorHSV.createColorHSV(((360 / dataLength) * 2 * index) / 2, 0.5, 255).convertToRGB(); }; set colorFunction(colorFunctionRef) { this._colorFunctionRef = colorFunctionRef; if (this.svgDiagram) { this.svgDiagram.colorFunction = this._colorFunctionRef; } } ngAfterViewInit() { setTimeout(() => { this.svgDiagram = new SvgPostDiagram('myDiagram', this._diagramData, this.svgContainer.nativeElement, this.diagramLegend.nativeElement); this.svgDiagram.colorFunction = this._colorFunctionRef; }, 0); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: PostDiagramComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.4", type: PostDiagramComponent, isStandalone: false, selector: "obl-post-diagram", inputs: { yLabel: "yLabel", xLabel: "xLabel", diagramTitle: "diagramTitle", diagramData: "diagramData", colorFunction: "colorFunction" }, viewQueries: [{ propertyName: "svgContainer", first: true, predicate: ["svgContainer"], descendants: true }, { propertyName: "diagramLegend", first: true, predicate: ["diagramLegend"], descendants: true }], ngImport: i0, template: "<div>\n <div class=\"diagram\">\n @if (yLabel !== '') {\n <div class=\"yLabel\">\n <div\n class=\"rotate\"\n [style.minWidth.px]=\"svgDiagram ? svgDiagram.diagramHeight : 0\"\n >\n {{ yLabel }}\n </div>\n </div>\n }\n\n <div>\n @if (svgDiagram && diagramTitle !== '') {\n <h1>\n {{ diagramTitle }}\n </h1>\n }\n <svg #svgContainer width=\"800\" height=\"400\"></svg>\n <div class=\"xLabel-container\">\n @if (svgDiagram && xLabel !== '') {\n <div\n [style.width.px]=\"svgDiagram.diagramWidth\"\n class=\"xLabel\"\n >\n {{ xLabel }}\n </div>\n }\n </div>\n </div>\n </div>\n</div>\n<div #diagramLegend class=\"legend\"></div>\n", styles: [".rotate{transform:rotate(-90deg);white-space:pre-line;text-align:center;max-height:40px}.legend{display:flex;flex-direction:column;flex-wrap:wrap}.diagram{display:flex;flex-direction:row;justify-content:center}.diagram .diagram-and-label{display:inline-block}h1{text-align:center}.yLabel{display:flex;justify-content:center;align-items:center;max-width:50px}.xLabel-container{display:flex;justify-content:center;text-align:center}:host{display:flex;justify-content:center;flex-wrap:wrap;align-items:flex-end}\n"] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: PostDiagramComponent, decorators: [{ type: Component, args: [{ selector: 'obl-post-diagram', standalone: false, template: "<div>\n <div class=\"diagram\">\n @if (yLabel !== '') {\n <div class=\"yLabel\">\n <div\n class=\"rotate\"\n [style.minWidth.px]=\"svgDiagram ? svgDiagram.diagramHeight : 0\"\n >\n {{ yLabel }}\n </div>\n </div>\n }\n\n <div>\n @if (svgDiagram && diagramTitle !== '') {\n <h1>\n {{ diagramTitle }}\n </h1>\n }\n <svg #svgContainer width=\"800\" height=\"400\"></svg>\n <div class=\"xLabel-container\">\n @if (svgDiagram && xLabel !== '') {\n <div\n [style.width.px]=\"svgDiagram.diagramWidth\"\n class=\"xLabel\"\n >\n {{ xLabel }}\n </div>\n }\n </div>\n </div>\n </div>\n</div>\n<div #diagramLegend class=\"legend\"></div>\n", styles: [".rotate{transform:rotate(-90deg);white-space:pre-line;text-align:center;max-height:40px}.legend{display:flex;flex-direction:column;flex-wrap:wrap}.diagram{display:flex;flex-direction:row;justify-content:center}.diagram .diagram-and-label{display:inline-block}h1{text-align:center}.yLabel{display:flex;justify-content:center;align-items:center;max-width:50px}.xLabel-container{display:flex;justify-content:center;text-align:center}:host{display:flex;justify-content:center;flex-wrap:wrap;align-items:flex-end}\n"] }] }], propDecorators: { yLabel: [{ type: Input }], xLabel: [{ type: Input }], diagramTitle: [{ type: Input }], svgContainer: [{ type: ViewChild, args: ['svgContainer'] }], diagramLegend: [{ type: ViewChild, args: ['diagramLegend'] }], diagramData: [{ type: Input }], colorFunction: [{ type: Input }] } }); class PostDiagramModule { static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: PostDiagramModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.0.4", ngImport: i0, type: PostDiagramModule, declarations: [PostDiagramComponent], imports: [CommonModule], exports: [PostDiagramComponent] }); static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: PostDiagramModule, imports: [CommonModule] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: PostDiagramModule, decorators: [{ type: NgModule, args: [{ declarations: [PostDiagramComponent], imports: [CommonModule], providers: [], exports: [PostDiagramComponent], }] }] }); /** * Generated bundle index. Do not edit. */ export { PostDiagramComponent, PostDiagramModule, Rotate, Style, SvgGroup, SvgRect, SvgText, Transform }; //# sourceMappingURL=obliczeniowo-elementary-post-diagram.mjs.map