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