{"version":3,"file":"obliczeniowo-elementary-linear-diagram.mjs","sources":["../../../../projects/components/linear-diagram/components/diagram-point-hover/diagram-point-hover.component.ts","../../../../projects/components/linear-diagram/components/diagram-point-hover/diagram-point-hover.component.html","../../../../projects/components/linear-diagram/class/linear-diagram-2-d/elements/y-axis-i.ts","../../../../projects/components/linear-diagram/class/linear-diagram-2-d/linear-diagram-2-d.ts","../../../../projects/components/linear-diagram/components/diagram2d/linear-diagram-2d.component.ts","../../../../projects/components/linear-diagram/components/diagram2d/linear-diagram-2d.component.html","../../../../projects/components/linear-diagram/components/diagram-data-filter/diagram-data-filter.component.ts","../../../../projects/components/linear-diagram/components/diagram-data-filter/diagram-data-filter.component.html","../../../../projects/components/linear-diagram/linear-diagram.module.ts","../../../../projects/components/linear-diagram/obliczeniowo-elementary-linear-diagram.ts"],"sourcesContent":["import { Subject, Subscription } from 'rxjs';\r\nimport { Component, ContentChild, HostBinding, OnDestroy, TemplateRef } from '@angular/core';\r\n\r\n/**\r\n * Create hover over element on obl-linear-diagram-2d element by ng-content\r\n *\r\n * example with own template\r\n *\r\n * <obl-linear-diagram-2d [points]=\"points\">\r\n *   <ng-template #xyTemplate let-x=\"x\" let-y=\"y\">\r\n *    <div class=\"xy-template\">\r\n *      <div>x = {{ x | number: '0.5-5' }}</div>\r\n *      <div>y = {{ y | number: '0.5-5' }}</div>\r\n *    </div>\r\n *  </ng-template>\r\n * </obl-linear-diagram-2d>\r\n */\r\n@Component({\r\n    selector: 'obl-diagram-point-hover',\r\n    templateUrl: './diagram-point-hover.component.html',\r\n    styleUrls: ['./diagram-point-hover.component.scss'],\r\n    standalone: false\r\n})\r\nexport class DiagramPointHoverComponent implements OnDestroy {\r\n  x!: number;\r\n  y!: number;\r\n\r\n  private pOnMouseOver?: Subscription;\r\n  set onMouseOver(value: Subject<SVGGElement> | undefined) {\r\n    if (this.pOnMouseOver && !this.pOnMouseOver.closed) {\r\n      this.pOnMouseOver.unsubscribe();\r\n    }\r\n    if (value) {\r\n      this.pOnMouseOver = value.subscribe(\r\n        (element) => {\r\n          const point = JSON.parse(element.dataset.point as string);\r\n          const pointSvg = JSON.parse(element.dataset.pointSvg as string);\r\n          this.x = point.x;\r\n          this.y = point.y;\r\n          const rect = element.getBoundingClientRect();\r\n          const svgHeight = element.ownerSVGElement?.clientHeight as number;\r\n          const svgWidth = element.ownerSVGElement?.clientWidth as number;\r\n          const viewBox = (element.ownerSVGElement?.getAttribute('viewBox') as string).split(' ').slice(2).map(v => parseFloat(v));\r\n          this.left = pointSvg.x / viewBox[0] * svgWidth + rect.width / 2;\r\n          this.top = pointSvg.y / viewBox[1] * svgHeight + rect.height / 2;\r\n          this.over = '';\r\n        }\r\n      );\r\n    }\r\n  }\r\n\r\n  private pOnMouseOut?: Subscription;\r\n  public set onMouseOut(value: Subject<void> | undefined) {\r\n    if (this.pOnMouseOut && !this.pOnMouseOut.closed) {\r\n      this.pOnMouseOut.unsubscribe();\r\n    }\r\n    if (value) {\r\n      this.pOnMouseOut = value.subscribe(() => {\r\n        this.over = 'none';\r\n      });\r\n    }\r\n  }\r\n\r\n  @HostBinding('style.display') over: '' | 'none' = 'none';\r\n  @HostBinding('style.top.px') top = 0;\r\n  @HostBinding('style.left.px') left = 0;\r\n\r\n  @ContentChild('xyTemplate') xyTemplate!: TemplateRef<any>;\r\n\r\n  ngOnDestroy(): void {\r\n    this.onMouseOut = undefined;\r\n    this.onMouseOver = undefined;\r\n    if (this.pOnMouseOut && !this.pOnMouseOut.closed) {\r\n      this.pOnMouseOut.unsubscribe();\r\n    }\r\n  }\r\n}\r\n","@if (!xyTemplate) {\r\n  <div>\r\n    <p>x: {{ x }}</p>\r\n    <p>y: {{ y }}</p>\r\n  </div>\r\n}\r\n\r\n<ng-container *ngTemplateOutlet=\"xyTemplate; context: { x: x, y: y }\"></ng-container>\r\n\r\n<ng-content></ng-content>","import { DecimalPipe } from '@angular/common';\r\nimport { Point2D } from '@obliczeniowo/elementary/classes';\r\nimport { DrawingContextInterface, Rect, TextAlign } from '@obliczeniowo/elementary/drawing';\r\nimport { AxisOptions, YAxisOptions } from '../linear-diagram-2-d';\r\nimport { MinMax } from '@obliczeniowo/elementary/math';\r\n\r\nexport abstract class YAxisI {\r\n  protected textAlign: TextAlign = TextAlign.RIGHT;\r\n\r\n  /** pipe used for formatting x/y axis text */\r\n  decimalPipe = new DecimalPipe('en-US');\r\n\r\n  /**\r\n   * Function that give you control over format of y axis values\r\n   * this function can be overrided let programmer use whatever he want\r\n   * @param y value on scale to draw\r\n   * @param yK y * pow(10, yK) - power of 10 that provide  number into n.xxxx format\r\n   * @returns formatted string value of y scale\r\n   */\r\n  yFormatter: (y: number, yK: number) => string = (y: number, yK: number) => this.decimalPipe.transform(y * Math.pow(10, yK), '0.3-3') || 'NaN';\r\n\r\n  abstract draw(\r\n    dc: DrawingContextInterface,\r\n    startPoint: Point2D,\r\n    startScale: Point2D,\r\n    dY: number,\r\n    minMax: MinMax,\r\n    yScale: number,\r\n    yK: number,\r\n    diagramArea: Rect,\r\n    yLabel: string,\r\n    yOptions?: AxisOptions\r\n  ): number;\r\n}\r\n\r\nexport class YAxis extends YAxisI {\r\n  draw(\r\n    dc: DrawingContextInterface,\r\n    startPoint: Point2D,\r\n    startScale: Point2D,\r\n    dY: number,\r\n    minMax: MinMax,\r\n    yScale: number,\r\n    yK: number,\r\n    diagramArea: Rect,\r\n    yLabel: string,\r\n    yOptions: YAxisOptions\r\n  ): number {\r\n    dc.group({ name: 'yAxis' });\r\n\r\n    const color = yOptions?.color;\r\n\r\n    this.textAlign = yOptions?.textAlign || this.textAlign;\r\n\r\n    if (this.textAlign !== TextAlign.RIGHT) {\r\n      const m = new Point2D(diagramArea.width, 0);\r\n      startPoint = startPoint.add(m);\r\n      startScale = startScale.add(m);\r\n    }\r\n\r\n    let posy: Point2D = new Point2D(startPoint.x, startScale.y);\r\n\r\n    dc.drawArrow(\r\n      startPoint,\r\n      startPoint.add(\r\n        new Point2D(\r\n          0,\r\n          -diagramArea.height\r\n        )\r\n      ),\r\n      yOptions?.stroke || 1,\r\n      color || '#000000',\r\n      !!yOptions?.arrow\r\n    );\r\n\r\n    dc.setTextAlign(this.textAlign);\r\n\r\n    let lengthYLabel = 0;\r\n    let yText = '';\r\n\r\n    dc.group({ name: 'values' });\r\n\r\n    const dm = new Point2D(\r\n      this.textAlign === TextAlign.RIGHT ? -2 : 4,\r\n      1.5\r\n    );\r\n    const dsc = new Point2D(\r\n      0,\r\n      -dY * yScale\r\n    );\r\n\r\n    for (let y = Math.ceil(minMax.min / dY) * dY; y <= minMax.max; y += dY) {\r\n      yText = this.yFormatter(y, yK);\r\n\r\n      const tw = dc.getTextWidth(yText);\r\n\r\n      lengthYLabel = tw > lengthYLabel ? tw : lengthYLabel;\r\n\r\n      dc.drawText(yText, posy.add(dm), color || '#000000', 0);\r\n\r\n      posy = posy.add(dsc);\r\n    }\r\n\r\n    dc.setTextAlign(TextAlign.LEFT);\r\n\r\n    dc.endGroup();\r\n\r\n    dc.endGroup();\r\n\r\n    if (yLabel) {\r\n      const textWidth = dc.getTextWidth(yLabel);\r\n\r\n      const offset = this.textAlign === TextAlign.RIGHT\r\n        ? new Point2D(diagramArea.x, diagramArea.y + diagramArea.height * 0.5).add(\r\n          new Point2D(\r\n            -lengthYLabel - 10,\r\n            textWidth / 2\r\n          ))\r\n        : new Point2D(diagramArea.x + diagramArea.width, diagramArea.y + diagramArea.height * 0.5).add(\r\n          new Point2D(\r\n            lengthYLabel + 20,\r\n            textWidth / 2\r\n          ));\r\n\r\n      dc.drawText(\r\n        yLabel,\r\n        offset,\r\n        color || '#009900',\r\n        90\r\n      );\r\n    }\r\n\r\n    if (yK) {\r\n      const offset = this.textAlign === TextAlign.RIGHT\r\n        ? new Point2D(\r\n          diagramArea.x,\r\n          diagramArea.y\r\n        ).add(new Point2D(-lengthYLabel - 10, 0))\r\n        : new Point2D(\r\n          diagramArea.x + diagramArea.width,\r\n          diagramArea.y\r\n        ).add(new Point2D(lengthYLabel + 20, 0));\r\n\r\n      dc.setTextAlign(TextAlign.RIGHT);\r\n      dc.drawText(\r\n        `×e${-yK}`,\r\n        offset,\r\n        color || '#009900',\r\n        90\r\n      );\r\n    }\r\n\r\n    return lengthYLabel;\r\n  }\r\n}\r\n","import { ElementaryMath, MinMax } from '@obliczeniowo/elementary/math';\r\nimport { YAxis, YAxisI } from './elements/y-axis-i';\r\nimport {\r\n  DrawingContextInterface,\r\n  LinePattern,\r\n  TextAlign,\r\n  TextBaseline,\r\n  Rect,\r\n} from '@obliczeniowo/elementary/drawing';\r\nimport { DecimalPipe } from '@angular/common';\r\nimport { Subject } from 'rxjs';\r\nimport {\r\n  Point2D,\r\n  ColorType,\r\n  LinearFunction2D,\r\n} from '@obliczeniowo/elementary/classes';\r\nimport { ns } from '@obliczeniowo/elementary/svg';\r\n\r\nexport enum PointType {\r\n  NONE = 'none',\r\n  CIRCLE = 'circle',\r\n  X = 'x',\r\n  STAR = 'star',\r\n}\r\n\r\nexport interface BaseDrawingOptions {\r\n  /** color in format #rrggbb */\r\n  color?: ColorType;\r\n  stroke?: number;\r\n  linePattern?: LinePattern | string;\r\n  drawPoint?: PointType | string;\r\n}\r\n\r\nexport interface AxisOptions extends BaseDrawingOptions {\r\n  arrow?: boolean;\r\n  dp?: number;\r\n  autoIncreaseDecrease?: boolean;\r\n  precision?: number;\r\n  display?: boolean;\r\n}\r\n\r\nexport interface YAxisOptions extends AxisOptions {\r\n  textAlign?: TextAlign;\r\n}\r\n\r\n// tslint:disable-next-line: no-empty-interface\r\nexport interface GridOptions extends BaseDrawingOptions {\r\n  display?: boolean;\r\n}\r\n\r\nexport interface LinearDiagram2DOptions {\r\n  displayCursor?: boolean;\r\n  xAxis?: AxisOptions;\r\n  yAxis?: YAxisOptions;\r\n  greed?: GridOptions;\r\n  set?: BaseDrawingOptions[];\r\n  xMinMax?: MinMax;\r\n  yMinMax?: MinMax;\r\n}\r\n\r\nexport type DrawingPointFu = (\r\n  point: Point2D,\r\n  dc: DrawingContextInterface,\r\n  stroke: number,\r\n  color: ColorType,\r\n  index: number,\r\n  value: number\r\n) => void;\r\n\r\nexport class LinearDiagram2D {\r\n  protected static drawingPoints: Map<string, DrawingPointFu> = new Map<\r\n    string,\r\n    DrawingPointFu\r\n  >();\r\n\r\n  protected options!: LinearDiagram2DOptions;\r\n\r\n  /** min max for x */\r\n  protected xMinMax!: MinMax;\r\n  /** min max for y */\r\n  protected yMinMax!: MinMax;\r\n  /** */\r\n  protected yAxis: YAxisI = new YAxis();\r\n  /** */\r\n  protected xScale!: number;\r\n  /** */\r\n  protected yScale!: number;\r\n\r\n  protected xCursorLine!: SVGPolylineElement;\r\n  protected yCursorLine!: SVGPolylineElement;\r\n  protected xyCursor!: SVGTextElement;\r\n\r\n  selectionRange?: MinMax;\r\n\r\n  /** diagram area rect (area where diagram data will be drawn) */\r\n  diagramArea: Rect;\r\n\r\n  pPoints: Point2D[][] = [[]];\r\n\r\n  /** diagram title text */\r\n  title = '';\r\n\r\n  /** x label description */\r\n  xLabel = '';\r\n  /** y label description */\r\n  yLabel = '';\r\n\r\n  /** legend description table */\r\n  legend: string[] = [];\r\n\r\n  /** pipe used for formatting x/y axis text */\r\n  decimalPipe = new DecimalPipe('en-US');\r\n\r\n  /**  */\r\n  xK = 0;\r\n  /** */\r\n  yK = 0;\r\n\r\n  redraw: Subject<void> = new Subject<void>();\r\n  onPointMouseOver: Subject<SVGGElement> = new Subject<SVGGElement>();\r\n  onPointMouseOut: Subject<void> = new Subject<void>();\r\n\r\n  static registerDrawingPointFu(name: string, fu: DrawingPointFu): boolean {\r\n    if (LinearDiagram2D.drawingPoints.has(name)) {\r\n      return false;\r\n    }\r\n\r\n    LinearDiagram2D.drawingPoints.set(name, fu);\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Function that give you control over format of x axis values\r\n   * this function can be overridden let programmer use whatever he want\r\n   * @param x value on scale to draw\r\n   * @param xK x * pow(10, xK) - power of 10 that provide  number into n.xxxx format\r\n   * @returns formatted string value of x scale\r\n   */\r\n  xFormatter: (x: number, xK: number) => string = (x: number, xK: number) =>\r\n    this.decimalPipe.transform(x * Math.pow(10, xK), '0.2-2') || 'NaN';\r\n\r\n  set yFormatter(fu: (y: number, yK: number) => string) {\r\n    this.yAxis.yFormatter = fu;\r\n  }\r\n\r\n  /**\r\n   * set points vector and recalculate xMinMax & yMinMax values for diagram\r\n   */\r\n  set points(points: Point2D[][]) {\r\n    this.pPoints = points;\r\n\r\n    this.xMinMax = this.getXMinMax();\r\n\r\n    this.xK = -Math.floor(\r\n      Math.log10(\r\n        Math.max(Math.abs(this.xMinMax.max), Math.abs(this.xMinMax.min))\r\n      )\r\n    );\r\n\r\n    this.yMinMax = this.getYMinMax();\r\n\r\n    this.yK = -Math.floor(\r\n      Math.log10(\r\n        Math.max(Math.abs(this.yMinMax.max), Math.abs(this.yMinMax.min))\r\n      )\r\n    );\r\n  }\r\n\r\n  /**\r\n   * @param area diagram area\r\n   * @param points points vectors as table of Point2D\r\n   * @param options options settings for diagram (most of them override default one)\r\n   */\r\n  constructor(\r\n    area: Rect,\r\n    points: Point2D[][],\r\n    options?: LinearDiagram2DOptions\r\n  ) {\r\n    if (!LinearDiagram2D.drawingPoints.has(PointType.CIRCLE)) {\r\n      LinearDiagram2D.drawingPoints.set(\r\n        PointType.CIRCLE,\r\n        (\r\n          point: Point2D,\r\n          dc: DrawingContextInterface,\r\n          stroke: number,\r\n          color: ColorType\r\n        ) => dc.drawCircle(point, 2, stroke, color, 'none')\r\n      );\r\n      LinearDiagram2D.drawingPoints.set(\r\n        PointType.STAR,\r\n        (\r\n          point: Point2D,\r\n          dc: DrawingContextInterface,\r\n          stroke: number,\r\n          color: ColorType\r\n        ) =>\r\n          [0, 1, 2, 3, 4, 5].forEach((i) =>\r\n            dc.drawLine(\r\n              point,\r\n              new Point2D(0, 5)\r\n                .rotate(ElementaryMath.degreesToRadians(60) * i)\r\n                .add(point),\r\n              stroke,\r\n              color\r\n            )\r\n          )\r\n      );\r\n      LinearDiagram2D.drawingPoints.set(\r\n        PointType.X,\r\n        (\r\n          point: Point2D,\r\n          dc: DrawingContextInterface,\r\n          stroke: number,\r\n          color: ColorType\r\n        ) =>\r\n          [0, 1, 2, 3].forEach((i) =>\r\n            dc.drawLine(\r\n              point,\r\n              new Point2D(0, 5)\r\n                .rotate((Math.PI / 2) * i + Math.PI / 4)\r\n                .add(point),\r\n              stroke,\r\n              color\r\n            )\r\n          )\r\n      );\r\n    }\r\n\r\n    this.diagramArea = area;\r\n\r\n    this.options = {\r\n      xAxis: {\r\n        display: true,\r\n        arrow: true,\r\n        color: '#ff0000',\r\n        stroke: 1,\r\n      },\r\n      yAxis: {\r\n        display: true,\r\n        arrow: true,\r\n        color: '#009900',\r\n        stroke: 1,\r\n      },\r\n      greed: {\r\n        display: true,\r\n        color: {\r\n          hex: '#777777',\r\n          html: 'var(--obl-linear-diagram-greed-color)',\r\n        },\r\n        stroke: 0.25,\r\n        linePattern: LinePattern.DASHED,\r\n      },\r\n    };\r\n\r\n    this.setOptions(options);\r\n\r\n    this.points = points;\r\n  }\r\n\r\n  protected normalizeMinMax(min: number, max: number): MinMax {\r\n    if (min === max) {\r\n      if (min && max) {\r\n        if (min > 0) {\r\n          min = 0;\r\n        } else {\r\n          max = 0;\r\n        }\r\n      } else {\r\n        max = 1;\r\n      }\r\n    }\r\n\r\n    return {\r\n      min,\r\n      max,\r\n    };\r\n  }\r\n\r\n  protected filterByRange(): Point2D[][] {\r\n    const { selectionRange } = this;\r\n    const { min, max } = selectionRange || { min: 0, max: 1 };\r\n    const check = (p?: Point2D) => p && p.x >= min && p.x <= max;\r\n\r\n    const between = (p1?: Point2D, p2?: Point2D) =>\r\n      p1 && p1.x < min && p2 && p2.x > max;\r\n\r\n    return selectionRange\r\n      ? this.pPoints.map((points) =>\r\n          points.filter(\r\n            (p, index) =>\r\n              check(p) ||\r\n              check(points[index - 1]) ||\r\n              check(points[index + 1]) ||\r\n              between(p, points[index + 1]) ||\r\n              between(points[index + 1], p) ||\r\n              between(p, points[index - 1]) ||\r\n              between(points[index - 1], p)\r\n          )\r\n        )\r\n      : this.pPoints;\r\n  }\r\n\r\n  /**\r\n   * Get min and max of x axis\r\n   * @returns return min & max for x axis\r\n   */\r\n  public getXMinMax(): MinMax {\r\n    let min!: number;\r\n    let max!: number;\r\n\r\n    const filtered = this.filterByRange();\r\n\r\n    filtered.forEach((points) => {\r\n      points.forEach((point, index) => {\r\n        if (min === undefined || min > point.x) {\r\n          min = point.x;\r\n        }\r\n        if (max === undefined || max < point.x) {\r\n          max = point.x;\r\n        }\r\n      });\r\n    });\r\n\r\n    if (!this.selectionRange) {\r\n      if (\r\n        min === undefined ||\r\n        (this.options?.xMinMax?.min !== undefined &&\r\n          min > this.options?.xMinMax?.min)\r\n      ) {\r\n        min = this.options?.xMinMax?.min || 0;\r\n      }\r\n\r\n      if (\r\n        max === undefined ||\r\n        (this.options?.xMinMax?.max !== undefined &&\r\n          max < this.options?.xMinMax?.max)\r\n      ) {\r\n        max = this.options?.xMinMax?.max || min + 1;\r\n      }\r\n    } else {\r\n      return this.normalizeMinMax(\r\n        this.selectionRange.min,\r\n        this.selectionRange.max\r\n      );\r\n    }\r\n\r\n    return this.normalizeMinMax(min, max);\r\n  }\r\n\r\n  /**\r\n   * Find minimum & maximum for y axis\r\n   * @returns MinMax interface of displayed values\r\n   */\r\n  protected getYMinMax(): MinMax {\r\n    let min!: number;\r\n    let max!: number;\r\n\r\n    const filtered = this.filterByRange();\r\n\r\n    filtered.forEach((points) => {\r\n      const { selectionRange } = this;\r\n\r\n      if (selectionRange && points.length > 1) {\r\n        let fu = LinearFunction2D.fromTwoPoints(points[0], points[1]);\r\n\r\n        if (fu) {\r\n          if (min !== undefined) {\r\n            min = Math.min(fu.yPoint(selectionRange.min), min);\r\n            max = Math.max(min, max);\r\n          } else {\r\n            min = fu.yPoint(selectionRange.min);\r\n            max = min;\r\n          }\r\n        }\r\n\r\n        fu = LinearFunction2D.fromTwoPoints(\r\n          points[points.length - 2],\r\n          points[points.length - 1]\r\n        );\r\n\r\n        if (fu) {\r\n          if (min !== undefined) {\r\n            min = Math.min(fu.yPoint(selectionRange.max), min);\r\n            max = Math.max(fu.yPoint(selectionRange.max), max);\r\n          } else {\r\n            min = fu.yPoint(selectionRange.max);\r\n            max = min;\r\n          }\r\n        }\r\n      }\r\n\r\n      points.forEach((point, index) => {\r\n        if ((index === 0 || index === points.length - 1) && selectionRange) {\r\n          return;\r\n        }\r\n\r\n        if (min === undefined || min > point.y) {\r\n          min = point.y;\r\n        }\r\n        if (max === undefined || max < point.y) {\r\n          max = point.y;\r\n        }\r\n      });\r\n    });\r\n\r\n    if (\r\n      min === undefined ||\r\n      (this.options?.yMinMax?.min !== undefined &&\r\n        min > this.options?.yMinMax?.min)\r\n    ) {\r\n      min = this.options?.yMinMax?.min || 0;\r\n    }\r\n\r\n    if (\r\n      max === undefined ||\r\n      (this.options?.yMinMax?.max !== undefined &&\r\n        max < this.options?.yMinMax?.max)\r\n    ) {\r\n      max = this.options?.yMinMax?.max || min + 1;\r\n    }\r\n\r\n    return this.normalizeMinMax(min, max);\r\n  }\r\n\r\n  /**\r\n   * Convert point diagram pos to SVG pos\r\n   * @param point point to transform\r\n   * @param startPoint diagram start point\r\n   * @param xScale x scale\r\n   * @param yScale y scale\r\n   * @returns Point2D instance\r\n   */\r\n  protected diagramPosToSVG(point: Point2D, startPoint: Point2D): Point2D {\r\n    return new Point2D(\r\n      (point.x - this.xMinMax.min) * this.xScale + startPoint.x,\r\n      -(point.y - this.yMinMax.min) * this.yScale + startPoint.y\r\n    );\r\n  }\r\n\r\n  protected svgPosToDiagram(\r\n    point: Point2D,\r\n    startPoint: Point2D,\r\n    xScale: number,\r\n    yScale: number\r\n  ): Point2D {\r\n    return new Point2D(\r\n      (point.x - startPoint.x) / xScale + this.xMinMax.min,\r\n      (startPoint.y - point.y) / yScale + this.yMinMax.min\r\n    );\r\n  }\r\n\r\n  protected getDAxis(\r\n    range: number,\r\n    autoIncreaseDecrease: boolean,\r\n    dp: number\r\n  ): number {\r\n    if (!dp) {\r\n      dp = range;\r\n    }\r\n    if (autoIncreaseDecrease) {\r\n      while (range / dp > 10) {\r\n        dp *= 2;\r\n      }\r\n\r\n      while (range / dp < 5) {\r\n        dp /= 2;\r\n      }\r\n    }\r\n\r\n    return dp;\r\n  }\r\n\r\n  protected getDx(): number {\r\n    const range = this.xMinMax.max - this.xMinMax.min;\r\n\r\n    return this.getDAxis(\r\n      this.xMinMax.max - this.xMinMax.min,\r\n      !this.options?.xAxis?.autoIncreaseDecrease,\r\n      (this.options.xAxis?.dp && this.options.xAxis.dp) ||\r\n        this.recalcDScale(\r\n          range,\r\n          this.options.xAxis?.precision !== undefined &&\r\n            this.options.xAxis?.precision >= 0\r\n            ? this.options.xAxis.precision\r\n            : 2\r\n        )\r\n    );\r\n  }\r\n\r\n  protected getDy(): number {\r\n    const range = this.yMinMax.max - this.yMinMax.min;\r\n\r\n    return this.getDAxis(\r\n      range,\r\n      !this.options?.yAxis?.autoIncreaseDecrease,\r\n      (this.options.yAxis?.dp && this.options.yAxis.dp) ||\r\n        this.recalcDScale(\r\n          range,\r\n          this.options.yAxis?.precision && this.options.yAxis?.precision >= 0\r\n            ? this.options.yAxis.precision\r\n            : 2\r\n        )\r\n    );\r\n  }\r\n\r\n  protected drawGreed(dc: DrawingContextInterface, startPoint: Point2D): void {\r\n    if (!this.options.greed?.display) {\r\n      return;\r\n    }\r\n\r\n    dc.group({ name: 'greed' }).setLinePattern(this.options.greed?.linePattern);\r\n\r\n    const dx = this.getDx();\r\n    const dy = this.getDy();\r\n\r\n    const startScale: Point2D = this.diagramPosToSVG(\r\n      new Point2D(\r\n        Math.ceil(this.xMinMax.min / dx) * dx,\r\n        Math.ceil(this.yMinMax.min / dy) * dy\r\n      ),\r\n      startPoint\r\n    );\r\n\r\n    const dxy: Point2D = new Point2D(dx * this.xScale, dy * this.yScale);\r\n\r\n    let posX: Point2D = new Point2D(startScale.x, startPoint.y);\r\n\r\n    let posY: Point2D = new Point2D(startPoint.x, startScale.y);\r\n\r\n    while (\r\n      posX.x <=\r\n      posY.x + (this.xMinMax.max - this.xMinMax.min) * this.xScale\r\n    ) {\r\n      dc.drawLine(\r\n        posX,\r\n        new Point2D(\r\n          posX.x,\r\n          posX.y - (this.yMinMax.max - this.yMinMax.min) * this.yScale\r\n        ),\r\n        this.options?.greed?.stroke || 0,\r\n        this.options?.greed?.color || '#000000'\r\n      );\r\n\r\n      posX = posX.add(new Point2D(dxy.x, 0));\r\n    }\r\n\r\n    while (\r\n      posY.y >=\r\n      posX.y - (this.yMinMax.max - this.yMinMax.min) * this.yScale\r\n    ) {\r\n      dc.drawLine(\r\n        posY,\r\n        new Point2D(\r\n          posY.x + (this.xMinMax.max - this.xMinMax.min) * this.xScale,\r\n          posY.y\r\n        ),\r\n        this.options.greed?.stroke || 0,\r\n        this.options.greed?.color || '#000000'\r\n      );\r\n\r\n      posY = posY.add(new Point2D(0, -dxy.y));\r\n    }\r\n\r\n    dc.setLinePattern(LinePattern.NONE).endGroup();\r\n  }\r\n\r\n  /**\r\n   * Calc scale elementary increase value with given precision\r\n   * @param value (max - min)\r\n   * @param precision integer number should be >= 0\r\n   * @returns scale elementary increase value\r\n   */\r\n  protected recalcDScale(value: number, precision: number = 2): number {\r\n    const power = Math.floor(Math.log10(value));\r\n    return +(\r\n      Math.ceil((Math.pow(10, -power + precision) * value) / 10) *\r\n      Math.pow(10, power - precision)\r\n    ).toFixed(precision);\r\n  }\r\n\r\n  protected drawXAxis(\r\n    dc: DrawingContextInterface,\r\n    startPoint: Point2D\r\n  ): number {\r\n    if (!this.options.xAxis?.display) {\r\n      return 0;\r\n    }\r\n\r\n    dc.group({ name: 'xAxis' });\r\n\r\n    const dx = this.getDx();\r\n\r\n    const startScale: Point2D = this.diagramPosToSVG(\r\n      new Point2D(Math.ceil(this.xMinMax.min / dx) * dx, 0),\r\n      startPoint\r\n    );\r\n\r\n    let posX: Point2D = new Point2D(startScale.x, startPoint.y);\r\n\r\n    const bP = this.diagramPosToSVG(\r\n      new Point2D(this.xMinMax.min, this.yMinMax.min),\r\n      startPoint\r\n    );\r\n\r\n    const eP = this.diagramPosToSVG(\r\n      new Point2D(this.xMinMax.max, this.yMinMax.min),\r\n      startPoint\r\n    );\r\n\r\n    dc.drawArrow(\r\n      bP,\r\n      eP,\r\n      this.options.xAxis?.stroke || 0,\r\n      this.options.xAxis?.color || '#000000',\r\n      !!this.options?.xAxis?.arrow\r\n    );\r\n\r\n    let xText = '';\r\n\r\n    let textWidth = 0;\r\n\r\n    dc.group({ name: 'values' });\r\n\r\n    for (\r\n      let x = Math.ceil(this.xMinMax.min / dx) * dx;\r\n      x <= this.xMinMax.max;\r\n      x += dx\r\n    ) {\r\n      xText = this.xFormatter(x, this.xK);\r\n\r\n      textWidth = dc.getTextWidth(xText) + 5;\r\n      dc.drawText(\r\n        xText,\r\n        posX.add(new Point2D(1.5, textWidth)),\r\n        this.options.xAxis?.color || '#000000',\r\n        90\r\n      );\r\n\r\n      posX = posX.add(new Point2D(dx * this.xScale, 0));\r\n    }\r\n\r\n    dc.endGroup().endGroup();\r\n\r\n    return textWidth;\r\n  }\r\n\r\n  protected drawYAxis(\r\n    dc: DrawingContextInterface,\r\n    startPoint: Point2D\r\n  ): number {\r\n    if (!this.options.yAxis?.display) {\r\n      return 0;\r\n    }\r\n    const dy = this.getDy();\r\n\r\n    const startScale: Point2D = this.diagramPosToSVG(\r\n      new Point2D(0, Math.ceil(this.yMinMax.min / dy) * dy),\r\n      startPoint\r\n    );\r\n\r\n    return this.yAxis.draw(\r\n      dc,\r\n      startPoint,\r\n      startScale,\r\n      dy,\r\n      this.yMinMax,\r\n      this.yScale,\r\n      this.yK,\r\n      this.diagramArea,\r\n      this.yLabel,\r\n      this.options.yAxis\r\n    );\r\n  }\r\n\r\n  protected drawLegend(dc: DrawingContextInterface): void {\r\n    if (\r\n      this.legend?.length &&\r\n      this.pPoints &&\r\n      this.legend.length <= this.pPoints.length &&\r\n      this.options?.set?.length\r\n    ) {\r\n      dc.setFontSize(8);\r\n      const maxTextWidth: number = this.legend\r\n        .map((text) => dc.getTextWidth(text))\r\n        .reduce(\r\n          (prev, current) => ((prev = prev < current ? current : prev), prev),\r\n          0\r\n        );\r\n\r\n      const padding = 5;\r\n      const keyHeight = 10;\r\n      const keyWidth = 15;\r\n\r\n      const totalWidth = keyWidth + padding * 3 + maxTextWidth;\r\n      const totalHeight = padding + (keyHeight + padding) * this.legend.length;\r\n\r\n      const pc = new Point2D(\r\n        this.diagramArea.x + this.diagramArea.width - padding - totalWidth,\r\n        this.diagramArea.y + padding\r\n      );\r\n\r\n      dc.group({ name: 'legend' }).drawRect(\r\n        pc.x,\r\n        pc.y,\r\n        totalWidth,\r\n        totalHeight,\r\n        1,\r\n        '#aaaaaa',\r\n        '#ffffff',\r\n        { opacity: 0.6 }\r\n      );\r\n\r\n      this.legend.forEach((text, index) => {\r\n        const pt = new Point2D(\r\n          padding,\r\n          padding + index * (keyHeight + padding) + keyHeight / 2\r\n        ).add(pc);\r\n\r\n        const styles = this.options.set\r\n          ? this.options.set[index % this.options.set.length]\r\n          : {};\r\n\r\n        dc.group({ name: `key-${index + 1}` }).setLinePattern(\r\n          styles.linePattern\r\n        );\r\n        if (styles.linePattern !== LinePattern.DISABLED) {\r\n          dc.drawLine(\r\n            pt,\r\n            pt.add(new Point2D(keyWidth, 0)),\r\n            styles.stroke || 1,\r\n            styles.color || '#000000'\r\n          );\r\n        }\r\n\r\n        dc.setLinePattern(undefined);\r\n        this.getDrawPointFu(styles.drawPoint || PointType.NONE)(\r\n          pt.add(new Point2D(keyWidth / 2, 0)),\r\n          dc,\r\n          styles.stroke || 1,\r\n          styles.color || '#000000',\r\n          0,\r\n          0\r\n        );\r\n\r\n        dc.endGroup()\r\n          .setFontSize(8)\r\n          .setTextAlign(TextAlign.LEFT)\r\n          .drawText(\r\n            text,\r\n            pc.add(\r\n              new Point2D(\r\n                padding * 2 + keyWidth,\r\n                padding + index * (keyHeight + padding) + keyHeight * 0.75\r\n              )\r\n            ),\r\n            '#000000',\r\n            0\r\n          );\r\n      });\r\n\r\n      dc.endGroup();\r\n    }\r\n  }\r\n\r\n  protected drawVectors(\r\n    dc: DrawingContextInterface,\r\n    startPoint: Point2D\r\n  ): void {\r\n    const pos = new Point2D(this.diagramArea.x, this.diagramArea.y - 2);\r\n    const width = this.diagramArea.width;\r\n    const height = this.diagramArea.height + 2;\r\n    dc.group({\r\n      name: 'vectors-tables',\r\n      clipRect: {\r\n        pos,\r\n        width,\r\n        height,\r\n      },\r\n    });\r\n\r\n    this.pPoints.forEach((points, index) => {\r\n      const setIndex =\r\n        (this.options.set && index % this.options.set.length) || 0;\r\n      const stroke = this.options?.set?.[setIndex].stroke || 2;\r\n      const color = this.options?.set?.[setIndex].color || '#000000';\r\n      const linePattern = this.options?.set?.[setIndex].linePattern;\r\n\r\n      dc.setLinePattern(this.options?.set?.[setIndex].linePattern).group({\r\n        name: `vectors-${index + 1}`,\r\n      });\r\n\r\n      points = points.map((point) => this.diagramPosToSVG(point, startPoint));\r\n      points = points.map((point, i) => {\r\n          const prev = points[i + 1];\r\n          const next = points[i - 1];\r\n          if (\r\n            point.isPtInRect(pos.x, pos.y, width, height) || // current in rect\r\n            prev?.isPtInRect(pos.x, pos.y, width, height) || // prev in rect\r\n            next?.isPtInRect(pos.x, pos.y, width, height) || // next in rect\r\n            (prev && prev.x <= pos.x && point.x >= pos.x + width) || // prev outside left and current outside of right\r\n            (next && point.x <= pos.x && next.x >= pos.x + width) // current outside left and next outside of right\r\n          ) {\r\n            return point;\r\n          }\r\n          return undefined;\r\n        })\r\n        .filter(pt => pt) as Point2D[];\r\n\r\n      if (linePattern !== LinePattern.DISABLED) {\r\n        dc.drawPolyline(\r\n          points,\r\n          stroke,\r\n          color\r\n        );\r\n      }\r\n\r\n      if (this.options.set) {\r\n        if (\r\n          this.options.set[setIndex].drawPoint &&\r\n          this.options.set[setIndex].drawPoint !== PointType.NONE\r\n        ) {\r\n          const pointType =\r\n            this.options.set[setIndex].drawPoint || PointType.NONE;\r\n\r\n          if (pointType !== PointType.NONE) {\r\n            const drawPointFu: DrawingPointFu = this.getDrawPointFu(pointType);\r\n\r\n            dc.group({ name: 'points-marks' });\r\n\r\n            points.forEach((point, pIndex) => {\r\n              dc.group({\r\n                data: {\r\n                  point: JSON.stringify(point),\r\n                  pointSvg: JSON.stringify(\r\n                    point\r\n                  ),\r\n                },\r\n                onMouseOver: (g: SVGGElement) => this.onPointMouseOver.next(g),\r\n                onMouseOut: () => this.onPointMouseOut.next(),\r\n              });\r\n\r\n              drawPointFu(\r\n                point,\r\n                dc,\r\n                stroke,\r\n                color,\r\n                pIndex,\r\n                point.y\r\n              );\r\n\r\n              dc.endGroup();\r\n            });\r\n\r\n            dc.endGroup();\r\n          }\r\n        }\r\n      }\r\n\r\n      dc.endGroup();\r\n    });\r\n\r\n    dc.endGroup();\r\n  }\r\n\r\n  draw(dc: DrawingContextInterface): void {\r\n    dc.clear();\r\n\r\n    this.xCursorLine = undefined as any;\r\n    this.yCursorLine = undefined as any;\r\n    this.xyCursor = undefined as any;\r\n\r\n    this.xScale =\r\n      this.diagramArea.width / (this.xMinMax.max - this.xMinMax.min);\r\n    this.yScale =\r\n      this.diagramArea.height / (this.yMinMax.max - this.yMinMax.min);\r\n\r\n    const startPoint: Point2D = new Point2D(\r\n      this.diagramArea.x,\r\n      this.diagramArea.y + this.diagramArea.height\r\n    );\r\n\r\n    dc.setFontSize(10);\r\n\r\n    this.drawGreed(dc, startPoint);\r\n\r\n    this.drawVectors(dc, startPoint);\r\n\r\n    dc.setLinePattern(LinePattern.NONE);\r\n\r\n    dc.setTextAlign(TextAlign.CENTER);\r\n\r\n    dc.setTextBaseline(TextBaseline.ALPHABETIC);\r\n\r\n    if (this.title) {\r\n      dc.setFontSize(30);\r\n      dc.drawText(\r\n        this.title,\r\n        this.diagramPosToSVG(\r\n          new Point2D(\r\n            (this.xMinMax.max + this.xMinMax.min) * 0.5,\r\n            this.yMinMax.max\r\n          ),\r\n          startPoint\r\n        ).add(new Point2D(0, -20)),\r\n        '#ff0000',\r\n        0\r\n      );\r\n      dc.setFontSize(15);\r\n    }\r\n\r\n    dc.setTextBaseline(TextBaseline.ALPHABETIC)\r\n      .setTextAlign(TextAlign.LEFT)\r\n      .setFontSize(10);\r\n\r\n    const lengthXLabel = this.drawXAxis(dc, startPoint);\r\n\r\n    this.drawYAxis(dc, startPoint);\r\n\r\n    dc.setTextAlign(TextAlign.CENTER);\r\n\r\n    if (this.options.xAxis?.display) {\r\n      if (this.xLabel) {\r\n        dc.drawText(\r\n          this.xLabel,\r\n          this.diagramPosToSVG(\r\n            new Point2D(\r\n              (this.xMinMax.max + this.xMinMax.min) * 0.5,\r\n              this.yMinMax.min\r\n            ),\r\n            startPoint\r\n          ).add(new Point2D(0, lengthXLabel + 20)),\r\n          this.options.xAxis?.color || '#000000',\r\n          0\r\n        );\r\n      }\r\n\r\n      if (this.xK) {\r\n        dc.setTextAlign(TextAlign.RIGHT).drawText(\r\n          `×e${-this.xK}`,\r\n          this.diagramPosToSVG(\r\n            new Point2D(this.xMinMax.max, this.yMinMax.min),\r\n            startPoint\r\n          ).add(new Point2D(0, lengthXLabel + 20)),\r\n          this.options.xAxis?.color || '#000000',\r\n          0\r\n        );\r\n      }\r\n    }\r\n\r\n    dc.setTextAlign(TextAlign.LEFT).setTextBaseline(TextBaseline.ALPHABETIC);\r\n\r\n    this.drawLegend(dc);\r\n\r\n    this.redraw.next();\r\n  }\r\n\r\n  setOptions(options: LinearDiagram2DOptions | undefined): void {\r\n    if (!options) {\r\n      options = {};\r\n    }\r\n\r\n    this.options = {\r\n      displayCursor: options.displayCursor,\r\n      xAxis: {\r\n        ...this.options.xAxis,\r\n        ...options?.xAxis,\r\n      },\r\n      yAxis: {\r\n        ...this.options.yAxis,\r\n        ...options?.yAxis,\r\n      },\r\n      xMinMax: {\r\n        ...this.options.xMinMax,\r\n        ...(options?.xMinMax as any),\r\n      },\r\n      yMinMax: {\r\n        ...this.options.xMinMax,\r\n        ...(options?.yMinMax as any),\r\n      },\r\n      greed: {\r\n        ...this.options.greed,\r\n        ...options?.greed,\r\n      },\r\n      set: options?.set ||\r\n        this.options.set || [\r\n          {\r\n            color: '#37abc8',\r\n            stroke: 2,\r\n            linePattern: LinePattern.NONE,\r\n            drawPoint: PointType.NONE,\r\n          },\r\n          {\r\n            color: '#ab37c8',\r\n            stroke: 2,\r\n            linePattern: LinePattern.NONE,\r\n            drawPoint: PointType.NONE,\r\n          },\r\n          {\r\n            color: '#ffc837',\r\n            stroke: 2,\r\n            linePattern: LinePattern.NONE,\r\n            drawPoint: PointType.NONE,\r\n          },\r\n        ],\r\n    };\r\n  }\r\n\r\n  drawCursor(mousePos: Point2D, svg: SVGGElement): void {\r\n    if (\r\n      !this.options?.displayCursor ||\r\n      !mousePos ||\r\n      this.xScale === undefined ||\r\n      this.yScale === undefined\r\n    ) {\r\n      return;\r\n    }\r\n    const legend = svg.querySelector('.legend');\r\n    const vectors = svg.querySelector('.vectors-tables');\r\n    const append = (element: SVGElement, before: Element | null) => {\r\n      if (before) {\r\n        svg.insertBefore(element, before);\r\n      } else {\r\n        svg.appendChild(element);\r\n      }\r\n    };\r\n    if (!this.xCursorLine) {\r\n      this.xCursorLine = document.createElementNS(ns, 'polyline');\r\n      append(this.xCursorLine, vectors || legend);\r\n      this.xCursorLine.style.stroke = '#ff0000';\r\n      this.xCursorLine.style.strokeWidth = '.2';\r\n    }\r\n    if (!this.yCursorLine) {\r\n      this.yCursorLine = document.createElementNS(ns, 'polyline');\r\n      append(this.yCursorLine, vectors || legend);\r\n      this.yCursorLine.style.stroke = '#ff0000';\r\n      this.yCursorLine.style.strokeWidth = '.2';\r\n    }\r\n    if (!this.xyCursor) {\r\n      this.xyCursor = document.createElementNS(ns, 'text');\r\n      append(this.xyCursor, legend);\r\n      this.xyCursor.style.fill = '#ff0000';\r\n      this.xyCursor.style.textAnchor = 'left';\r\n      this.xyCursor.style.fontSize = '8px';\r\n    }\r\n\r\n    if (!this.diagramArea.isPtInRect(mousePos)) {\r\n      this.yCursorLine.style.display = 'none';\r\n      this.xCursorLine.style.display = 'none';\r\n      this.xyCursor.style.display = 'none';\r\n    } else {\r\n      this.yCursorLine.style.display = '';\r\n      this.xCursorLine.style.display = '';\r\n      this.xyCursor.style.display = '';\r\n    }\r\n\r\n    const startPoint: Point2D = new Point2D(\r\n      this.diagramArea.x,\r\n      this.diagramArea.y + this.diagramArea.height\r\n    );\r\n\r\n    const diagramPos = this.svgPosToDiagram(\r\n      mousePos,\r\n      startPoint,\r\n      this.xScale,\r\n      this.yScale\r\n    );\r\n\r\n    this.xyCursor.textContent = `${this.decimalPipe.transform(\r\n      diagramPos.x,\r\n      '0.3-3'\r\n    )}; ${this.decimalPipe.transform(diagramPos.y, '0.3-3')}`;\r\n    this.xyCursor.setAttribute('x', (mousePos.x + 2).toString());\r\n    this.xyCursor.setAttribute('y', (mousePos.y - 2).toString());\r\n\r\n    this.xCursorLine.setAttribute(\r\n      'points',\r\n      `${this.diagramArea.x},${mousePos.y} ${\r\n        this.diagramArea.x + this.diagramArea.width\r\n      },${mousePos.y}`\r\n    );\r\n\r\n    this.yCursorLine.setAttribute(\r\n      'points',\r\n      `${mousePos.x},${this.diagramArea.y} ${mousePos.x},${\r\n        this.diagramArea.y + this.diagramArea.height\r\n      }`\r\n    );\r\n  }\r\n\r\n  svgToDiagram(point: Point2D) {\r\n    const startPoint: Point2D = new Point2D(\r\n      this.diagramArea.x,\r\n      this.diagramArea.y + this.diagramArea.height\r\n    );\r\n\r\n    return this.svgPosToDiagram(point, startPoint, this.xScale, this.yScale);\r\n  }\r\n\r\n  protected getDrawPointFu(pointType: PointType | string): DrawingPointFu {\r\n    const fu = LinearDiagram2D.drawingPoints.get(pointType);\r\n\r\n    // eslint-disable-next-line no-unneeded-ternary\r\n    return fu\r\n      ? fu\r\n      : (\r\n          point: Point2D,\r\n          dc: DrawingContextInterface,\r\n          stroke: number,\r\n          color: ColorType\r\n        ) => {};\r\n  }\r\n}\r\n","import { DiagramPointHoverComponent } from './../diagram-point-hover/diagram-point-hover.component';\r\nimport {\r\n  AfterContentInit,\r\n  AfterViewInit,\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  ContentChild,\r\n  effect,\r\n  ElementRef,\r\n  input,\r\n  Input,\r\n  OnDestroy,\r\n  Renderer2,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport {\r\n  LinearDiagram2D,\r\n  LinearDiagram2DOptions,\r\n} from '../../class/linear-diagram-2-d/linear-diagram-2-d';\r\nimport {\r\n  DrawingContextInterface,\r\n  DrawingSvgInterface,\r\n  Rect,\r\n} from '@obliczeniowo/elementary/drawing';\r\nimport { DrawingPdfInterface } from '@obliczeniowo/elementary/drawing-pdf';\r\nimport { Subscription } from 'rxjs';\r\nimport { Point2D } from '@obliczeniowo/elementary/classes';\r\n\r\n@Component({\r\n    selector: 'obl-linear-diagram-2d',\r\n    templateUrl: './linear-diagram-2d.component.html',\r\n    styleUrls: ['./linear-diagram-2d.component.scss'],\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    standalone: false\r\n})\r\nexport class LinearDiagram2DComponent\r\n  implements OnDestroy, AfterViewInit, AfterContentInit\r\n{\r\n  protected dc!: DrawingSvgInterface;\r\n  protected diagram2d?: LinearDiagram2D;\r\n  protected mousePos: Point2D = new Point2D();\r\n\r\n  protected selectArea?: Rect;\r\n\r\n  readonly width = 800;\r\n  readonly height = 528;\r\n\r\n  @ViewChild('diagram') diagram!: ElementRef<SVGSVGElement>;\r\n\r\n  legend = input<string[]>([]);\r\n  points = input<Point2D[][]>([]);\r\n\r\n  xFormatter = input<(x: number) => string>();\r\n  yFormatter = input<(x: number) => string>();\r\n\r\n  private pOptions!: LinearDiagram2DOptions;\r\n\r\n  public get options(): LinearDiagram2DOptions {\r\n    return this.pOptions;\r\n  }\r\n\r\n  @Input() public set options(value: LinearDiagram2DOptions) {\r\n    this.pOptions = value;\r\n\r\n    if (this.diagram2d && this.dc) {\r\n      this.diagram2d.setOptions(value);\r\n      this.diagram2d.draw(this.dc);\r\n    }\r\n  }\r\n\r\n  protected pLabels: {\r\n    x: string,\r\n    y: string,\r\n    title: string\r\n  } = {\r\n    x: '',\r\n    y: '',\r\n    title: '',\r\n  };\r\n\r\n  @Input() set labels(labels: { x: string; y: string; title: string }) {\r\n    this.pLabels = labels;\r\n\r\n    if (this.diagram2d) {\r\n      this.diagram2d.draw(this.dc);\r\n    }\r\n  }\r\n\r\n  @ContentChild(DiagramPointHoverComponent)\r\n  diagramPointHover!: DiagramPointHoverComponent;\r\n\r\n  protected subscriptions: Subscription[] = [];\r\n\r\n  constructor(protected renderer: Renderer2) {\r\n    effect(() => {\r\n      this.points();\r\n      this.legend();\r\n      this.draw()\r\n    });\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.subscriptions.forEach((subscription) => {\r\n      if (!subscription.closed) {\r\n        subscription.unsubscribe();\r\n      }\r\n    });\r\n  }\r\n\r\n  ngAfterContentInit(): void {\r\n    if (this.diagramPointHover && this.diagram2d) {\r\n      this.diagramPointHover.onMouseOut = this.diagram2d.onPointMouseOut;\r\n      this.diagramPointHover.onMouseOver = this.diagram2d.onPointMouseOver;\r\n    }\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this.draw();\r\n  }\r\n\r\n  pdf(): void {\r\n    const dc: DrawingPdfInterface = new DrawingPdfInterface(\r\n      new Rect(new Point2D(0, 0), new Point2D(800, 600), 20, 20)\r\n    );\r\n\r\n    this.draw(dc);\r\n\r\n    dc.save(\r\n      this.diagram2d?.title.length ? this.diagram2d.title : 'Diagram 2D'\r\n    );\r\n  }\r\n\r\n  draw(dc: DrawingContextInterface = this.dc): void {\r\n    if (!dc) {\r\n      if (!this.diagram) {\r\n        return;\r\n      }\r\n      this.dc = new DrawingSvgInterface(this.diagram.nativeElement, this.renderer);\r\n      dc = this.dc;\r\n    }\r\n\r\n    if (!this.diagram2d) {\r\n      this.diagram2d = new LinearDiagram2D(\r\n        new Rect(new Point2D(120, 50), new Point2D(700, 400)),\r\n        this.points(),\r\n        this.options\r\n      );\r\n      if (this.diagramPointHover) {\r\n        this.diagramPointHover.onMouseOut = this.diagram2d.onPointMouseOut;\r\n        this.diagramPointHover.onMouseOver = this.diagram2d.onPointMouseOver;\r\n      }\r\n    } else {\r\n      this.diagram2d.points = this.points();\r\n    }\r\n\r\n    this.diagram2d.legend = this.legend();\r\n\r\n    this.diagram2d.xLabel = this.pLabels.x;\r\n    this.diagram2d.yLabel = this.pLabels.y;\r\n    this.diagram2d.title = this.pLabels.title;\r\n\r\n    const xFormatter = this.xFormatter();\r\n    if (xFormatter) {\r\n      this.diagram2d.xFormatter = xFormatter;\r\n    }\r\n\r\n    const yFormatter = this.yFormatter();\r\n    if (yFormatter) {\r\n      this.diagram2d.yFormatter = yFormatter;\r\n    }\r\n\r\n    this.diagram2d.draw(dc);\r\n    if (dc instanceof DrawingSvgInterface) {\r\n      this.diagram2d.drawCursor(\r\n        this.mousePos,\r\n        (dc as DrawingSvgInterface).svgContainer\r\n      );\r\n    }\r\n  }\r\n\r\n  move(event: MouseEvent): void {\r\n    const rect = this.diagram.nativeElement.getBoundingClientRect();\r\n    this.mousePos = new Point2D(\r\n      ((event.clientX - rect.left) / rect.width) * this.width,\r\n      ((event.clientY - rect.top) / rect.height) * this.height\r\n    );\r\n\r\n    if (!this.diagram2d) {\r\n      return;\r\n    }\r\n\r\n    this.diagram2d.drawCursor(this.mousePos, this.diagram.nativeElement);\r\n\r\n    const area = this.diagram2d.diagramArea;\r\n\r\n    if (\r\n      event.buttons === 1 &&\r\n      this.mousePos.isPtInRect(area.x, area.y, area.width, area.height)\r\n    ) {\r\n      if (this.selectArea) {\r\n        this.selectArea.width = this.mousePos.x - this.selectArea.x;\r\n      } else {\r\n        const startPoint = new Point2D(\r\n          this.mousePos.x,\r\n          this.diagram2d.diagramArea.y\r\n        );\r\n        const endPoint = new Point2D(\r\n          Math.min(\r\n            this.mousePos.x,\r\n            this.diagram2d.diagramArea.x + this.diagram2d.diagramArea.width\r\n          ),\r\n          this.diagram2d.diagramArea.y + this.diagram2d.diagramArea.height\r\n        );\r\n        this.selectArea = new Rect(startPoint, endPoint);\r\n      }\r\n    }\r\n  }\r\n\r\n  keyup(event: MouseEvent) {\r\n    if (!this.diagram2d) {\r\n      return;\r\n    }\r\n    const { selectArea } = this;\r\n    if (selectArea) {\r\n      const xMin = selectArea.x < selectArea.x + selectArea.width ? selectArea.x : selectArea.x + selectArea.width;\r\n      const xMax = selectArea.x < selectArea.x + selectArea.width ? selectArea.x + selectArea.width : selectArea.x;\r\n      this.diagram2d.selectionRange = {\r\n        min: this.diagram2d.svgToDiagram(\r\n          new Point2D(xMin, selectArea.y)\r\n        ).x,\r\n        max: this.diagram2d.svgToDiagram(\r\n          new Point2D(\r\n            xMax,\r\n            selectArea.y\r\n          )\r\n        ).x,\r\n      };\r\n      this.selectArea = undefined;\r\n      this.draw();\r\n    }\r\n  }\r\n\r\n  left() {\r\n    if (!this.diagram2d) {\r\n      return;\r\n    }\r\n    const { selectionRange } = this.diagram2d;\r\n    if (selectionRange) {\r\n      this.diagram2d.selectionRange = undefined;\r\n      const range = selectionRange.max - selectionRange.min;\r\n      const minMax = this.diagram2d.getXMinMax();\r\n\r\n      selectionRange.min = Math.max(selectionRange.min - range, minMax.min);\r\n      selectionRange.max = selectionRange.min + range;\r\n\r\n      this.diagram2d.selectionRange = selectionRange;\r\n      this.draw();\r\n    }\r\n  }\r\n\r\n  right() {\r\n    if (!this.diagram2d) {\r\n      return;\r\n    }\r\n    const { selectionRange } = this.diagram2d;\r\n    if (selectionRange) {\r\n      this.diagram2d.selectionRange = undefined;\r\n      const range = selectionRange.max - selectionRange.min;\r\n      const minMax = this.diagram2d.getXMinMax();\r\n\r\n      selectionRange.max = Math.min(selectionRange.max + range, minMax.max);\r\n      selectionRange.min = selectionRange.max - range;\r\n\r\n      this.diagram2d.selectionRange = selectionRange;\r\n      this.draw();\r\n    }\r\n  }\r\n}\r\n","<div class=\"svgContainer\">\r\n  <svg\r\n    #diagram\r\n    [attr.viewBox]=\"'0 0 ' + width + ' ' + height\"\r\n    (mousemove)=\"move($event)\"\r\n    (mouseup)=\"keyup($event)\"\r\n  >\r\n    @if (selectArea) {\r\n      <rect\r\n        [attr.x]=\"[selectArea.x, selectArea.x + selectArea.width] | oblMin\"\r\n        [attr.y]=\"selectArea.y\"\r\n        [attr.width]=\"([selectArea.width] | oblAbs)[0]\"\r\n        [attr.height]=\"([selectArea.height] | oblAbs)[0]\"\r\n      ></rect>\r\n    }\r\n    <g class=\"root\"></g>\r\n  </svg>\r\n  <div class=\"buttons\">\r\n    <button class=\"pdf-button\" oblButton icon=\"file\" (click)=\"pdf()\"></button>\r\n    @if (diagram2d?.selectionRange) {\r\n      <button\r\n        oblButton\r\n        icon=\"cancel\"\r\n        (click)=\"diagram2d && diagram2d.selectionRange = undefined; this.draw()\"\r\n      ></button>\r\n      <button oblButton icon=\"left\" (click)=\"left()\"></button>\r\n      <button oblButton icon=\"right\" (click)=\"right()\"></button>\r\n    }\r\n  </div>\r\n  <ng-content></ng-content>\r\n</div>\r\n","/* eslint-disable @typescript-eslint/no-dynamic-delete */\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { Point2D } from '@obliczeniowo/elementary/classes';\r\nimport { OblFileService } from '@obliczeniowo/elementary/files';\r\nimport { ElementaryMath } from '@obliczeniowo/elementary/math';\r\nimport { keysValues } from '@obliczeniowo/elementary/objects';\r\nimport { TranslationPipe } from '@obliczeniowo/elementary/text-pipes';\r\n\r\nexport interface ArrayFilterOption {\r\n  value: number;\r\n  min?: number;\r\n  max?: number;\r\n  step?: number;\r\n}\r\n\r\nexport type ArrayFiltersOptions = { [option: string]: ArrayFilterOption };\r\n\r\nexport interface ArrayFilterModel {\r\n  filter: (data: Point2D[], options: { [option: string]: any }) => Point2D[];\r\n  options: ArrayFiltersOptions;\r\n}\r\n\r\nexport interface ValueDesc {\r\n  value: number;\r\n  min?: number;\r\n  max?: number;\r\n  steep?: number;\r\n}\r\n\r\nexport type FiltersOptions = { [filter: string]: ArrayFiltersOptions };\r\n\r\n@Component({\r\n    selector: 'obl-diagram-data-filter',\r\n    templateUrl: './diagram-data-filter.component.html',\r\n    styleUrl: './diagram-data-filter.component.scss',\r\n    standalone: false\r\n})\r\nexport class DiagramDataFilterComponent {\r\n  protected models: { [name: string]: ArrayFilterModel } = {\r\n    smooth: {\r\n      filter: (\r\n        data: Point2D[],\r\n        options: { [option: string]: any }\r\n      ): Point2D[] => {\r\n        const tolerance = options?.tolerance.value ?? 0.5;\r\n        const sampleSize: number = options?.sampleSize.value ?? 10;\r\n        data.forEach((r, index: number) => {\r\n          const sample = data.slice(index, index + sampleSize).map((d) => d.y);\r\n          const max = Math.max(...sample);\r\n          const min = Math.min(...sample);\r\n          if (max - min < tolerance && sample.length) {\r\n            r.y = ElementaryMath.average(sample);\r\n          }\r\n        });\r\n        return data;\r\n      },\r\n      options: {\r\n        tolerance: { value: 0.5, min: 0, max: 5, step: 0.1 },\r\n        sampleSize: { value: 10, min: 2, max: 25, step: 1 },\r\n      },\r\n    },\r\n    'index-range': {\r\n      filter: (\r\n        data: Point2D[],\r\n        options: { [option: string]: ValueDesc }\r\n      ): Point2D[] => {\r\n        const start = ElementaryMath.minmax(\r\n          options?.start?.value ?? 0,\r\n          0,\r\n          data.length - 1\r\n        );\r\n        const end = ElementaryMath.minmax(\r\n          options?.end?.value ?? data.length,\r\n          0,\r\n          data.length - 1\r\n        );\r\n        return data.slice(start, end);\r\n      },\r\n      options: {\r\n        start: { value: 0 },\r\n        end: { value: 20 },\r\n      },\r\n    },\r\n    'x-range': {\r\n      filter: (\r\n        data: Point2D[],\r\n        options: { [option: string]: ValueDesc }\r\n      ): Point2D[] => {\r\n        const start = options?.start?.value || 0;\r\n        const end = options?.end?.value || data.length;\r\n        return data.filter((v) => v.x >= start && v.x <= end);\r\n      },\r\n      options: {\r\n        start: { value: 0 },\r\n        end: { value: 20 },\r\n      },\r\n    },\r\n    diff: {\r\n      filter: (\r\n        data: Point2D[],\r\n        options: { [option: string]: ValueDesc }\r\n      ): Point2D[] => {\r\n        const points: Point2D[] = [];\r\n        data.forEach((p, index) => {\r\n          if (index < data.length - 1) {\r\n            const pt = data[index + 1].copy();\r\n            pt.y = (pt.y - p.y) / (pt.x - p.x);\r\n            points.push(pt);\r\n          }\r\n        });\r\n        return points;\r\n      },\r\n      options: {},\r\n    },\r\n    'nth-filter': {\r\n      filter: (\r\n        data: Point2D[],\r\n        options: { [option: string]: ValueDesc }\r\n      ): Point2D[] => {\r\n        const nth = options?.nth?.value ?? 1;\r\n        return data.filter((_, index) => index % nth === 0);\r\n      },\r\n      options: {\r\n        nth: { value: 1, min: 1, max: 100, step: 1 },\r\n      },\r\n    },\r\n    multiply: {\r\n      filter: (\r\n        data: Point2D[],\r\n        options: { [option: string]: ValueDesc }\r\n      ): Point2D[] => {\r\n        const k = options?.k?.value ?? 1;\r\n        return data.map((v) => new Point2D(v.x, v.y * k));\r\n      },\r\n      options: {\r\n        k: { value: 1, step: 0 },\r\n      },\r\n    },\r\n    add: {\r\n      filter: (\r\n        data: Point2D[],\r\n        options: { [option: string]: ValueDesc }\r\n      ): Point2D[] => {\r\n        const add = options?.adding?.value ?? 1;\r\n        return data.map((v) => new Point2D(v.x, v.y + add));\r\n      },\r\n      options: {\r\n        adding: { value: 1, step: 0 },\r\n      },\r\n    },\r\n  };\r\n\r\n  protected _filters: FiltersOptions = {};\r\n\r\n  protected selected?: string;\r\n\r\n  protected lastData?: Point2D[];\r\n\r\n  @Input() set filters(filters: FiltersOptions) {\r\n    this._filters = filters;\r\n    keysValues(filters).forEach(\r\n      ([name, value]) => (this.models[name].options = value)\r\n    );\r\n  }\r\n\r\n  get filters(): FiltersOptions {\r\n    return this._filters;\r\n  }\r\n\r\n  @Input() translations: { [en: string]: string } = {};\r\n\r\n  @Output() filtersChanged = new EventEmitter<FiltersOptions>();\r\n\r\n  constructor(\r\n    protected file: OblFileService\r\n  ) {}\r\n\r\n  filtering(data: Point2D[]) {\r\n    this.lastData = data;\r\n    let copy = data.map((d) => d.copy());\r\n    const filters = this.models;\r\n    keysValues(this._filters).forEach(([name, value]) => {\r\n      filters[name] = { ...value, ...filters[name] };\r\n      const filter = filters[name];\r\n      copy = filter.filter(copy, filter);\r\n    });\r\n\r\n    return copy;\r\n  }\r\n\r\n  protected remove(name: string) {\r\n    delete this._filters[name];\r\n    this.selected = undefined;\r\n    this.changed();\r\n  }\r\n\r\n  protected changed() {\r\n    const filters = keysValues(this.models)\r\n      .filter(([name]) => this._filters[name])\r\n      .map(([name, value]) => {\r\n        return { [name]: { ...value.options } };\r\n      })\r\n      .reduce((p, c) => ({ ...p, ...c }), {});\r\n\r\n    this.filtersChanged.emit(filters);\r\n  }\r\n\r\n  protected compare = (f: any, s: any) => {\r\n    return 0;\r\n  };\r\n\r\n  protected download() {\r\n    const translationPipe = new TranslationPipe();\r\n    if (this.lastData) {\r\n      return this.file.saveTextFile(\r\n        JSON.stringify(this.filtering(this.lastData)),\r\n        translationPipe.transform('filtered data', this.translations),\r\n        'application/json'\r\n      );\r\n    }\r\n  }\r\n}\r\n","@if ((filters | keyvalue).length) {\r\n  <fieldset class=\"filters\">\r\n    <legend>{{ 'Chosen' | oblTranslation : translations }}</legend>\r\n    <div class=\"items\">\r\n      @for (filter of filters | keyvalue : compare; track filter.key) {\r\n        <div\r\n          class=\"filter\"\r\n          (click)=\"selected = filter.key\"\r\n        >\r\n          <span>{{ filter.key | oblTranslation : translations }}</span>\r\n          <button oblButton icon=\"cancel\" (click)=\"remove(filter.key)\"></button>\r\n        </div>\r\n      }\r\n    </div>\r\n    <div class=\"buttons\">\r\n      <button oblButton icon=\"save\" (click)=\"download()\"></button>\r\n      <ng-content></ng-content>\r\n    </div>\r\n  </fieldset>\r\n}\r\n\r\n@if ((filters | keyvalue).length !== (models | keyvalue).length) {\r\n  <fieldset class=\"filters\">\r\n    <legend>{{ 'Others' | oblTranslation : translations }}</legend>\r\n    <div class=\"items\">\r\n      @for (filter of models | keyvalue : compare; track filter.key) {\r\n        @if (!filters[filter.key]) {\r\n          <div\r\n            class=\"filter\"\r\n            (click)=\"filters[filter.key] = filter.value.options; changed()\"\r\n          >\r\n            <span>{{ filter.key | oblTranslation : translations }}</span>\r\n          </div>\r\n        }\r\n      }\r\n    </div>\r\n  </fieldset>\r\n}\r\n\r\n@if (selected) {\r\n  <div>\r\n    <div class=\"head\">\r\n      {{ 'Edit filter option of name:' | oblTranslation : translations }}\r\n      {{ selected | oblTranslation : translations }}\r\n    </div>\r\n    @for(filter of models[selected].options | keyvalue : compare; track filter.key) {\r\n      <div class=\"filter-option-control\">\r\n        <obl-input-wrapper [label]=\"filter.key | oblTranslation : translations\">\r\n          <input\r\n            oblInput\r\n            type=\"number\"\r\n            [value]=\"filter.value.value\"\r\n            (change)=\"\r\n              models[selected].options[filter.key].value = input.valueAsNumber;\r\n              changed()\r\n            \"\r\n            [step]=\"filter.value.step\"\r\n            [min]=\"filter.value.min\"\r\n            [max]=\"filter.value.max\"\r\n            #input\r\n          />\r\n        </obl-input-wrapper>\r\n      </div>\r\n    }\r\n  </div>\r\n}","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { ButtonsModule } from '@obliczeniowo/elementary/buttons';\r\nimport { TextPipesModule } from '@obliczeniowo/elementary/text-pipes';\r\nimport { InputModule } from '@obliczeniowo/elementary/input';\r\nimport { AbsPipe, MinPipe } from '@obliczeniowo/elementary/numeric-pipes';\r\n\r\nimport { LinearDiagram2DComponent } from './components/diagram2d/linear-diagram-2d.component';\r\nimport { DiagramPointHoverComponent } from './components/diagram-point-hover/diagram-point-hover.component';\r\nimport { DiagramDataFilterComponent } from './components/diagram-data-filter/diagram-data-filter.component';\r\n\r\n@NgModule({\r\n  declarations: [\r\n    LinearDiagram2DComponent,\r\n    DiagramPointHoverComponent,\r\n    DiagramDataFilterComponent,\r\n  ],\r\n  imports: [CommonModule, ButtonsModule, TextPipesModule, InputModule, AbsPipe, MinPipe],\r\n  exports: [\r\n    LinearDiagram2DComponent,\r\n    DiagramPointHoverComponent,\r\n    DiagramDataFilterComponent,\r\n  ],\r\n})\r\nexport class LinearDiagramModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i4"],"mappings":"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"}