UNPKG

@obliczeniowo/elementary

Version:
1 lines 9.71 kB
{"version":3,"file":"obliczeniowo-elementary-pie-group-diagram.mjs","sources":["../../../../projects/components/pie-group-diagram/components/pie-group-diagram/pie-group-diagram.component.ts","../../../../projects/components/pie-group-diagram/components/pie-group-diagram/pie-group-diagram.component.html","../../../../projects/components/pie-group-diagram/pie-group-diagram.module.ts","../../../../projects/components/pie-group-diagram/obliczeniowo-elementary-pie-group-diagram.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unsafe-argument */\r\nimport {\r\n Component,\r\n EventEmitter,\r\n Output,\r\n input,\r\n computed,\r\n} from '@angular/core';\r\nimport { ColorHSV, HtmlColor } from '@obliczeniowo/elementary/classes';\r\nimport { ElementaryMath } from '@obliczeniowo/elementary/math';\r\nimport { keysValues, values } from '@obliczeniowo/elementary/objects';\r\n\r\nexport type KeyValues = { [key: string]: number };\r\nexport type PieGroups = { [groupName: string]: KeyValues };\r\ntype ConfigKeyData = {\r\n start: number,\r\n end: number,\r\n color: HtmlColor,\r\n background: HtmlColor,\r\n value: number,\r\n key: string,\r\n group: string\r\n};\r\n\r\nexport interface PieGroupItem {\r\n group: string;\r\n key: string;\r\n value: number;\r\n}\r\n\r\ninterface Config {\r\n sum: number;\r\n name: string;\r\n class: string;\r\n keyConfig: {\r\n [key: string]: ConfigKeyData\r\n };\r\n}\r\n\r\n@Component({\r\n selector: 'obl-pie-group-diagram',\r\n templateUrl: './pie-group-diagram.component.html',\r\n styleUrl: './pie-group-diagram.component.scss',\r\n standalone: false\r\n})\r\nexport class PieGroupDiagramComponent {\r\n readonly width = 800;\r\n readonly height = 800;\r\n\r\n protected config = computed<Config[]>(() => {\r\n const configs: any[] = [];\r\n const kvg = keysValues(this.data());\r\n kvg.forEach((data, gi) => {\r\n let previousEnd = 0;\r\n const sum = ElementaryMath.sum(values(data[1]));\r\n const kv = keysValues(data[1]);\r\n const length = kv.length;\r\n const config: Config = {\r\n sum,\r\n name: data[0],\r\n class: data[0].replace(/ /g, '-'),\r\n keyConfig: kv\r\n .map((value, i) => {\r\n const prepare = {\r\n start: previousEnd,\r\n end: previousEnd + (value[1] / (sum || 1)) * 360,\r\n background: ColorHSV.createColorHSV(\r\n (360 * i) / length,\r\n 0.8,\r\n 255 - (155 / (kvg.length || 1)) * gi\r\n ).toString(),\r\n color: '#ffffff',\r\n value: value[1],\r\n key: value[0],\r\n group: data[0],\r\n };\r\n\r\n previousEnd = prepare.end;\r\n\r\n return {\r\n [value[0]]: prepare,\r\n };\r\n })\r\n .reduce((p, c) => ({ ...p, ...c }), {}),\r\n };\r\n configs.push(config);\r\n });\r\n return configs;\r\n });\r\n\r\n protected minRay = this.height / 4;\r\n protected selected?: ConfigKeyData;\r\n\r\n display = input<'value' | 'key' | 'none'>('value');\r\n\r\n translations = input<{ [en: string]: string }>({});\r\n\r\n data = input<PieGroups>({});\r\n\r\n @Output() clicked = new EventEmitter<PieGroupItem>();\r\n\r\n get archThick() {\r\n return (this.height / 2 - this.minRay) / (this.config().length || 1);\r\n }\r\n}\r\n","<div class=\"svgContainer\">\r\n <svg [attr.viewBox]=\"'0 0 ' + width + ' ' + height\">\r\n @if (selected) {\r\n <text\r\n class=\"group-title\"\r\n [attr.x]=\"width / 2\"\r\n [attr.y]=\"height / 2 - 25\"\r\n [attr.text-anchor]=\"'middle'\"\r\n >\r\n {{ selected.group }}\r\n </text>\r\n\r\n <text\r\n [attr.x]=\"width / 2\"\r\n [attr.y]=\"height / 2 + 15\"\r\n [attr.text-anchor]=\"'middle'\"\r\n >\r\n {{ 'Key:' | oblTranslation : translations() }}\r\n {{ selected.key | oblTranslation : translations() }}\r\n </text>\r\n <text\r\n [attr.x]=\"width / 2\"\r\n [attr.y]=\"height / 2 + 45\"\r\n [attr.text-anchor]=\"'middle'\"\r\n >\r\n {{ 'Value:' | oblTranslation : translations() }} {{ selected.value }}\r\n </text>\r\n }\r\n\r\n @for (group of config(); track group.name; let index = $index) {\r\n <g [ngClass]=\"[group.class]\">\r\n @for (value of group.keyConfig | keyvalue; track value.key) {\r\n <g\r\n obl-menu-item\r\n [x]=\"width / 2\"\r\n [y]=\"height / 2\"\r\n [ray]=\"(index + 0.5) * archThick + minRay\"\r\n [width]=\"archThick\"\r\n [start]=\"value.value.start\"\r\n [end]=\"value.value.end\"\r\n [background]=\"value.value.background\"\r\n [text]=\"\r\n (display() !== 'none' &&\r\n (display() === 'key'\r\n ? value.key\r\n : value.value.value.toString())) ||\r\n ''\r\n \"\r\n [color]=\"value.value.color\"\r\n [shadow]=\"true\"\r\n (mouseover)=\"selected = value.value\"\r\n (click)=\"\r\n clicked.emit({\r\n group: group.name,\r\n key: value.key,\r\n value: value.value.value\r\n })\r\n \"\r\n ></g>\r\n }\r\n </g>\r\n }\r\n </svg>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { PieGroupDiagramComponent } from './components/pie-group-diagram/pie-group-diagram.component';\r\nimport { CircleMenuModule } from '@obliczeniowo/elementary/circle-menu';\r\nimport { TextPipesModule } from '@obliczeniowo/elementary/text-pipes';\r\n\r\n@NgModule({\r\n declarations: [\r\n PieGroupDiagramComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n CircleMenuModule,\r\n TextPipesModule\r\n ],\r\n exports: [\r\n PieGroupDiagramComponent\r\n ]\r\n})\r\nexport class PieGroupDiagramModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}