{"version":3,"file":"obliczeniowo-elementary-circle-progress-stepper.mjs","sources":["../../../../projects/components/circle-progress-stepper/components/circle-progress-stepper/circle-progress-stepper.component.ts","../../../../projects/components/circle-progress-stepper/components/circle-progress-stepper/circle-progress-stepper.component.html","../../../../projects/components/circle-progress-stepper/circle-progress-stepper.module.ts","../../../../projects/components/circle-progress-stepper/obliczeniowo-elementary-circle-progress-stepper.ts"],"sourcesContent":["import { DrawingSvgInterface, TextAlign } from '@obliczeniowo/elementary/drawing';\nimport { Component, ViewChild, ElementRef, input, effect, Renderer2 } from '@angular/core';\nimport { ProgressStep } from '@obliczeniowo/elementary/stepper';\nimport { Point2D } from '@obliczeniowo/elementary/classes';\n\n@Component({\n    selector: 'obl-circle-progress-stepper',\n    templateUrl: './circle-progress-stepper.component.html',\n    styleUrls: ['./circle-progress-stepper.component.scss'],\n    standalone: false\n})\nexport class CircleProgressStepperComponent {\n  /**\n   * Steps state objects to display\n   */\n  steps = input<ProgressStep[]>([]);\n\n  @ViewChild('svg') svg!: ElementRef<SVGSVGElement>;\n\n  readonly size = 22;\n\n  protected _ray!: number;\n\n  protected _dAngle!: number;\n\n  protected dc!: DrawingSvgInterface;\n\n  constructor(protected renderer: Renderer2) {\n    effect(() => {\n      const steps = this.steps();\n      if (steps) {\n        this._ray = Math.max(steps.length && this.size / Math.sin(Math.PI / steps.length), 100);\n        this._dAngle = 360 / steps.length;\n        this.draw();\n      }\n    })\n  }\n\n  ngAfterViewInit(): void {\n    this.dc = new DrawingSvgInterface(this.svg.nativeElement, this.renderer);\n    this.draw();\n  }\n\n  draw(): void {\n    if (this.dc) {\n      this.dc.clear();\n\n      const dAngleRad = this.dAngle() * Math.PI / 180;\n      const angle = Math.asin((this._ray * Math.sin(dAngleRad / 2) - this.size * 0.75) / this._ray) * 2;\n      const offset = (dAngleRad - angle) / 2;\n\n      let sum = 0;\n      const steps = this.steps();\n\n      const first = steps.find(step => step.status === 'progress' || step.status === 'failure') ||\n        [...steps].reverse().find(step => step.status === 'done');\n\n      if (first) {\n        this.dc.setFontSize(20);\n        this.dc.setTextAlign(TextAlign.LEFT);\n\n        this.dc.drawText(\n          `${first.name}: ${first.progress.toFixed()}%`,\n          new Point2D(\n            50,\n            this._ray + this.size + 40\n          ),\n          'var(--default-text-color)'\n        );\n      }\n\n      steps.forEach((step, index) => {\n        this.dc.drawArch(\n          new Point2D(this._ray + this.size, this._ray + this.size),\n          this._ray,\n          this._ray,\n          Math.PI * 1.5 + offset + dAngleRad * index,\n          angle + Math.PI * 1.5 + offset + dAngleRad * index,\n          8,\n          'var(--default-border-color)'\n        );\n        this.dc.drawArch(\n          new Point2D(this._ray + this.size, this._ray + this.size),\n          this._ray,\n          this._ray,\n          Math.PI * 1.5 + offset + dAngleRad * index,\n          angle * step.progress / 100 + Math.PI * 1.5 + offset + dAngleRad * index,\n          6,\n          step.status === 'failure' ? 'var(--obl-default-error-color)' : 'var(--obl-primary)'\n        );\n\n        sum += step.progress / steps.length;\n      });\n      this.dc.setFontSize(50);\n      this.dc.setTextAlign(TextAlign.RIGHT);\n      this.dc.drawText(\n        `${sum.toFixed()}%`,\n        new Point2D(this._ray * 2 + this.size - 30,\n          this._ray + this.size\n        ),\n        'var(--default-text-color)'\n      );\n    }\n  }\n\n  ray(): number {\n    return this._ray;\n  }\n\n  dAngle(): number {\n    return this._dAngle;\n  }\n}\n","<div\n  [style.width.px]=\"(ray() + size) * 2\"\n  [style.height.px]=\"(ray() + size) * 2\"\n>\n  <svg\n    [attr.width]=\"(ray() + size) * 2\"\n    [attr.height]=\"(ray() + size) * 2\"\n    [attr.viewBox]=\"'0 0 ' + ((ray() + size) * 2) + ' ' + ((ray() + size) * 2)\"\n    #svg\n  ></svg>\n  @for (step of steps(); track step.name) {\n    <obl-pie-progress\n      [display]=\"false\"\n      [value]=\"step.progress\"\n      [status]=\"step.status\"\n      [size]=\"size\"\n      [style.transform]=\"\n        'translate(-11px, -11px)' +\n        'rotate(' +\n        ((dAngle() * $index) + 90) +\n        'deg)' +\n        'translateX(' +\n        -ray() +\n        'px)' +\n        'rotate(' +\n        ((-dAngle() * $index) - 90) +\n        'deg)'\n      \"\n    ></obl-pie-progress>\n  }\n</div>\n","import { PieProgressModule } from '@obliczeniowo/elementary/pie-progress';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CircleProgressStepperComponent } from './components/circle-progress-stepper/circle-progress-stepper.component';\n\n@NgModule({\n  declarations: [\n    CircleProgressStepperComponent\n  ],\n  imports: [\n    CommonModule,\n    PieProgressModule\n  ],\n  exports: [\n    CircleProgressStepperComponent\n  ]\n})\nexport class CircleProgressStepperModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}