{"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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"}