UNPKG

@obliczeniowo/elementary

Version:
1 lines 12.4 kB
{"version":3,"file":"obliczeniowo-elementary-pages-linear-tree.mjs","sources":["../../../../projects/components/pages-linear-tree/components/pages-linear-tree/pages-linear-tree.component.ts","../../../../projects/components/pages-linear-tree/components/pages-linear-tree/pages-linear-tree.component.html","../../../../projects/components/pages-linear-tree/pages-linear-tree.module.ts","../../../../projects/components/pages-linear-tree/obliczeniowo-elementary-pages-linear-tree.ts"],"sourcesContent":["import {\n Component,\n effect,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n input,\n Output,\n Renderer2,\n} from '@angular/core';\nimport {\n PageCategory,\n PageItem,\n} from '@obliczeniowo/elementary/pages-circle-tree';\nimport { Point2D } from '@obliczeniowo/elementary/classes';\nimport { DrawingSvgInterface } from '@obliczeniowo/elementary/drawing';\n\n@Component({\n selector: 'obl-pages-linear-tree',\n templateUrl: './pages-linear-tree.component.html',\n styleUrls: ['./pages-linear-tree.component.scss'],\n standalone: false\n})\nexport class PagesLinearTreeComponent {\n /** items to draw */\n items = input([], {\n transform: (value: PageItem[]) => structuredClone(value),\n });\n\n @Output() onClicked = new EventEmitter<PageItem>();\n\n /** drawing interface */\n protected drawing!: DrawingSvgInterface;\n\n /** found under mouse item */\n protected item: PageItem | undefined;\n\n /** prepared points to redraw diagram */\n protected points: Point2D[] = [];\n\n /** width */\n protected graphSize: number = 200;\n\n /** its width of diagram */\n protected dGraphSize: number = 200;\n\n /** size of svg view box */\n protected size: number = 500;\n\n /** categories */\n protected categories: PageCategory[] = [];\n\n protected k = 5;\n\n @HostBinding('style.height.px') get height() {\n return (this.items().length || 0) * this.k;\n }\n\n constructor(protected elementRef: ElementRef<HTMLElement>, protected renderer: Renderer2) {\n effect(() => {\n this.items();\n this.calcPoints();\n this.draw();\n })\n }\n\n ngAfterViewInit() {\n this.drawing = new DrawingSvgInterface(\n this.elementRef.nativeElement.querySelector('svg') as SVGSVGElement, this.renderer\n );\n\n setTimeout(() => this.draw());\n }\n\n @HostListener('mousemove', ['$event'])\n move(event: any) {\n if (this.drawing && this.items().length) {\n const box = this.drawing.svgContainer.getBoundingClientRect();\n\n const pt = new Point2D(event.x - box.left, event.y - box.top);\n\n const index = Math.floor((1 / this.k) * pt.y);\n\n this.item = this.items()[index];\n\n this.draw();\n }\n }\n\n @HostListener('click', ['$event'])\n clicked() {\n if (this.item) {\n this.onClicked.emit(structuredClone(this.item));\n }\n }\n\n protected calcPoints() {\n if (this.items) {\n const max = this.getMax();\n\n const k = this.dGraphSize / (max || 1);\n\n this.points = [];\n\n this.items().forEach((item, y) => {\n const x = k * item.value;\n const pos = new Point2D(x, y * this.k);\n item.data = {\n ...item.data,\n pos,\n };\n this.points.push(pos);\n });\n }\n\n this.calcCategories();\n }\n\n protected calcCategories() {\n this.categories = [];\n\n const items = this.items();\n\n for (let i = 1; i < items.length; i++) {\n if (i === 1) {\n const { rootName, parentName } = items[0];\n this.categories.push({\n parentName,\n rootName,\n pos: new Point2D(0, 0),\n endPos: new Point2D(this.dGraphSize, 0),\n pChanged: true,\n });\n } else if (\n items[i].rootName !== items[i - 1].rootName ||\n items[i].parentName !== items[i - 1].parentName\n ) {\n const { rootName, parentName } = items[i];\n const pChanged = items[i].rootName !== items[i - 1].rootName;\n this.categories.push({\n rootName,\n parentName,\n pos: new Point2D(0, i * this.k),\n endPos: new Point2D(\n this.dGraphSize * (pChanged ? 1 : 0.8),\n i * this.k\n ),\n pChanged,\n });\n }\n }\n }\n\n protected draw() {\n if (!this.drawing) {\n return;\n }\n\n this.drawing.clear();\n this.drawing.drawPolyline(this.points, 2, '#ffffff', {\n svgOnly: { classes: ['diagram'] },\n });\n\n this.categories.forEach((category) => {\n this.drawing.drawLine(\n category.pos,\n category.endPos,\n category.pChanged ? 0.6 : 0.3,\n '#969696',\n {\n svgOnly: {\n classes: [\n 'categories',\n ...(category.pChanged ? ['root'] : ['parent']),\n ],\n },\n }\n );\n });\n\n if (this.item) {\n this.drawing.drawLine(\n new Point2D(0, this.item.data.pos.y),\n this.item.data.pos.add(new Point2D(this.dGraphSize, 0)),\n 2.5,\n '#ffffff',\n {\n svgOnly: {\n classes: ['current'],\n },\n }\n );\n }\n }\n\n protected getMax() {\n let max = 0;\n\n this.items().forEach((item) => {\n if (max < item.value) {\n max = item.value;\n }\n });\n\n return max;\n }\n}\n","<svg\n [attr.width]=\"dGraphSize\"\n [attr.viewBox]=\"'0 0 ' + dGraphSize + ' ' + items().length * k\"\n></svg>\n\n@for (category of categories; track $index) {\n @if (!$index || categories[$index - 1].pos.y - category.pos.y < -40) {\n <div\n class=\"category\"\n [style.left.px]=\"dGraphSize + 5\"\n [style.top.px]=\"category.endPos.y\"\n >\n {{ category.rootName }} &rarr; {{ category.parentName }}\n </div>\n }\n}\n\n@if (item) {\n <div\n class=\"category selected\"\n [style.left.px]=\"dGraphSize\"\n [style.top.px]=\"item.data.pos.y - 15\"\n >\n {{ item.rootName }} &rarr; {{ item.parentName }} &rarr; {{ item.name }}\n </div>\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { PagesLinearTreeComponent } from './components/pages-linear-tree/pages-linear-tree.component';\n\n@NgModule({\n declarations: [\n PagesLinearTreeComponent\n ],\n imports: [\n CommonModule,\n ],\n exports: [\n PagesLinearTreeComponent\n ]\n})\nexport class PagesLinearTreeModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}