UNPKG

@obliczeniowo/elementary

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