{"version":3,"file":"obliczeniowo-elementary-flat-pie-diagram.mjs","sources":["../../../../projects/components/flat-pie-diagram/classes/flat-pie-diagram.ts","../../../../projects/components/flat-pie-diagram/components/flat-pie-diagram/flat-pie-diagram.component.ts","../../../../projects/components/flat-pie-diagram/components/flat-pie-diagram/flat-pie-diagram.component.html","../../../../projects/components/flat-pie-diagram/flat-pie-diagram.module.ts","../../../../projects/components/flat-pie-diagram/obliczeniowo-elementary-flat-pie-diagram.ts"],"sourcesContent":["import { ColorHSV, Point2D } from '@obliczeniowo/elementary/classes';\nimport { DrawingContextInterface, TextAlign, Rect } from '@obliczeniowo/elementary/drawing';\nimport { ElementaryMath } from '@obliczeniowo/elementary/math';\nimport { keys } from '@obliczeniowo/elementary/objects';\n\nimport { PieColorsFu, PieColors, ValueKeyFormat } from '../types/types';\n\nexport class FlatPieDiagram {\n  dc!: DrawingContextInterface;\n\n  areaRect!: Rect;\n\n  keyValues: { [key: string]: number; } = {};\n\n  dr = 0;\n  ray = 100;\n\n  valueKeyFormat: ValueKeyFormat =\n    (index: number, value: number, sum: number, key: string) => `${value} (${(value / sum * 100).toFixed(2)}%)`\n\n  colors: PieColorsFu = (index: number, value: number, max: { min: number, max: number }, count: number) => ({\n    fill: ColorHSV.createColorHSV(\n      ((360 / count) * 2 * index) / 2,\n      0.5,\n      255\n    ).convertToRGB().getHexColorBase,\n    stroke: ColorHSV.createColorHSV(\n      ((360 / count) * 2 * index) / 2,\n      0.35,\n      255\n    ).convertToRGB().getHexColorBase,\n    line: ColorHSV.createColorHSV(\n      ((360 / count) * 2 * index) / 2,\n      0.35,\n      150\n    ).convertToRGB().getHexColorBase,\n    text: ColorHSV.createColorHSV(\n      ((360 / count) * 2 * index) / 2,\n      0.65,\n      200\n    ).convertToRGB().getHexColorBase\n  })\n\n  constructor(dc: DrawingContextInterface, area: Rect) {\n    this.dc = dc;\n    this.areaRect = area;\n  }\n\n  sum(): number {\n    let sum = 0;\n\n    keys(this.keyValues).forEach((key) => sum += this.keyValues[key]);\n\n    return sum;\n  }\n\n  minMax(): { min: number, max: number } {\n    const minMax = { min: 0, max: 0 };\n    return keys(this.keyValues).reduce(\n      (prev, curr) => (\n        prev = prev\n          ? {\n            min: Math.min(prev.min, this.keyValues[curr]), max: Math.max(prev.max, this.keyValues[curr])\n          }\n          : {\n            min: this.keyValues[curr],\n            max: this.keyValues[curr]\n          },\n        prev\n      ),\n      minMax\n    );\n  }\n\n  draw(dc: DrawingContextInterface = this.dc): void {\n    dc.clear();\n\n    const sum = this.sum();\n    let start = 0;\n    let da = 0;\n    const center = new Point2D(this.areaRect.width / 2, this.areaRect.height / 2);\n    this.ray = Math.min(this.areaRect.width, this.areaRect.height) / 3;\n\n    const minMax = this.minMax();\n\n    const length = keys(this.keyValues).length;\n\n    if (sum) {\n      const options: {\n        start: number,\n        da: number,\n        right: boolean,\n        bottom: boolean,\n        index: number,\n        colors: PieColors\n      }[] = [];\n      let leftTopIndex = 0;\n      let rightTopIndex = 0;\n      let leftBottomIndex = 0;\n      let rightBottomIndex = 0;\n\n      const dk = ElementaryMath.degreesToRadians(10);\n\n      keys(this.keyValues).forEach((key, oIndex) => {\n        da = this.keyValues[key] / sum * Math.PI * 2;\n        const right = start + da / 2 < Math.PI / 2 || start + da / 2 > 3 * Math.PI / 2;\n        const bottom = start + da / 2 < Math.PI;\n\n        let index = 0;\n        if (da < dk) {\n          if (!right && !bottom) {\n            leftTopIndex += 1;\n            index = leftTopIndex;\n          } else if (right && !bottom) {\n            rightTopIndex += 1;\n            index = rightTopIndex;\n          } else if (!right && bottom) {\n            leftBottomIndex += 1;\n            index = leftBottomIndex;\n          } else if (right && bottom) {\n            rightBottomIndex += 1;\n            index = rightBottomIndex;\n          }\n        }\n        options.push(\n          {\n            start,\n            da,\n            right,\n            bottom,\n            index,\n            colors: this.colors(oIndex, this.keyValues[key], minMax, length)\n          }\n        );\n        start += da;\n      });\n\n      start = 0;\n\n      keys(this.keyValues).forEach((key, index) => {\n        da = this.keyValues[key] / sum * Math.PI * 2;\n        const rotatedPoint = center.add(new Point2D(this.dr, 0).rotate(start + da / 2));\n        dc.drawPie(\n          rotatedPoint,\n          this.ray,\n          this.ray,\n          start,\n          start + da > Math.PI * 2 ? Math.PI * 2 : start + da,\n          1,\n          options[index].colors.stroke,\n          options[index].colors.fill\n        );\n        start += da;\n      });\n\n      start = 0;\n\n      keys(this.keyValues).forEach((key, index) => {\n        da = this.keyValues[key] / sum * Math.PI * 2;\n        const text = this.valueKeyFormat(index, this.keyValues[key], sum, key);\n        const startPoint = center.add(new Point2D(this.dr + this.ray * 0.9).rotate(start + da / 2));\n\n        dc.setFontSize(8);\n\n        if (da < dk) {\n          let dy = 0;\n          const angle = options[index];\n          if (!angle.right && !angle.bottom) {\n            dy = leftTopIndex * 12;\n          } else if (angle.right && !angle.bottom) {\n            dy = (angle.index * 2 - 1) * 12;\n          } else if (!angle.right && angle.bottom) {\n            dy = (angle.index * 2 - 1) * 12;\n          } else if (angle.right && angle.bottom) {\n            dy = rightBottomIndex * 12;\n          }\n          dy = this.ray - dy;\n          const end = center.add(\n            new Point2D(\n              options[index].right ? (this.ray * 1.2) : -this.ray * 1.2,\n              options[index].bottom ? options[index].index * 12 + dy : -options[index].index * 12 - dy\n            )\n          );\n          dc.drawLine(\n            startPoint,\n            end,\n            1,\n            options[index].colors.line\n          )\n            .setTextAlign(angle.right && TextAlign.LEFT || TextAlign.RIGHT)\n            .drawText(\n              text,\n              end.add(new Point2D(angle.right && 2 || -2, 2)),\n              options[index].colors.text,\n              0\n            );\n        } else {\n          const textAngle = -180 / Math.PI * (start + da / 2);\n          dc.setTextAlign(options[index].right ? TextAlign.RIGHT : TextAlign.LEFT)\n            .drawText(\n              text,\n              startPoint,\n              options[index].colors.text,\n              textAngle < -90 && textAngle > -270 ? textAngle + 180 : textAngle\n            );\n        }\n        start += da;\n      });\n    }\n  }\n}\n","import { AfterViewInit, Component, ElementRef, Input, Renderer2, ViewChild } from '@angular/core';\n\nimport { DrawingPdfInterface } from '@obliczeniowo/elementary/drawing-pdf';\nimport { DrawingSvgInterface, Rect } from '@obliczeniowo/elementary/drawing';\nimport { Point2D } from '@obliczeniowo/elementary/classes';\n\nimport { PieColorsFu } from './../../types/types';\nimport { FlatPieDiagram } from '../../classes/flat-pie-diagram';\nimport { ValueKeyFormat } from '../../types/types';\n\n@Component({\n    selector: 'obl-flat-pie-diagram',\n    templateUrl: './flat-pie-diagram.component.html',\n    styleUrls: ['./flat-pie-diagram.component.scss'],\n    standalone: false\n})\nexport class FlatPieDiagramComponent implements AfterViewInit {\n  drawing!: FlatPieDiagram;\n\n  readonly width = 800;\n  readonly height = 528;\n\n  private pData: { [key: string]: number } = {};\n\n  public get data(): { [key: string]: number } {\n    return this.pData;\n  }\n\n  @Input()\n  public set data(value: { [key: string]: number }) {\n    this.pData = value;\n\n    if (this.drawing) {\n      this.drawing.keyValues = this.pData;\n      this.drawing.draw();\n    }\n  }\n\n  @ViewChild('diagram') svg!: ElementRef<SVGSVGElement>;\n\n  protected _colors: PieColorsFu | undefined;\n\n  protected _valueKeyFormat: ValueKeyFormat =\n    (index: number, value: number, sum: number, key: string) => `${value} (${(value / sum * 100).toFixed(2)}%)`\n\n  @Input()\n  set valueKeyFormat(valueKeyFormat: ValueKeyFormat | undefined) {\n    if (valueKeyFormat) {\n      this._valueKeyFormat = valueKeyFormat;\n      if (this.drawing) {\n        this.drawing.valueKeyFormat = valueKeyFormat;\n        this.drawing.draw();\n      }\n    }\n  }\n\n  @Input()\n  set colors(colors: PieColorsFu | undefined) {\n    if (colors) {\n      this._colors = colors;\n      if (this.drawing) {\n        this.drawing.colors = colors;\n        this.drawing.draw();\n      }\n    }\n  }\n\n  constructor(protected renderer: Renderer2) {}\n\n  ngAfterViewInit(): void {\n    this.drawing = new FlatPieDiagram(\n      new DrawingSvgInterface(this.svg.nativeElement, this.renderer),\n      new Rect(\n        new Point2D(0, 0),\n        new Point2D(this.width, this.height)\n      )\n    );\n\n    this.drawing.keyValues = this.pData;\n    if (this._valueKeyFormat) {\n      this.drawing.valueKeyFormat = this._valueKeyFormat;\n    }\n    if (this._colors) {\n      this.drawing.colors = this._colors;\n    }\n    this.drawing.draw();\n  }\n\n  pdf(): void {\n    const dc = new DrawingPdfInterface(this.drawing.areaRect);\n    this.drawing.draw(dc);\n    dc.save('flat-pie-diagram');\n  }\n}\n","<div class=\"svgContainer\">\n  <svg #diagram [attr.viewBox]=\"'0 0 ' + width + ' ' + height\"></svg>\n\n  <button class=\"pdf-button\" oblButton icon=\"file\" (click)=\"pdf()\">\n  </button>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FlatPieDiagramComponent } from './components/flat-pie-diagram/flat-pie-diagram.component';\nimport { ButtonsModule } from '@obliczeniowo/elementary/buttons';\n\n@NgModule({\n  declarations: [\n    FlatPieDiagramComponent\n  ],\n  imports: [\n    CommonModule,\n    ButtonsModule\n  ],\n  exports: [\n    FlatPieDiagramComponent\n  ]\n})\nexport class FlatPieDiagramModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}