UNPKG

@obliczeniowo/elementary

Version:
1 lines 57.5 kB
{"version":3,"file":"obliczeniowo-elementary-post-diagram.mjs","sources":["../../../../projects/components/post-diagram/diagram/diagramClass/svg-group.ts","../../../../projects/components/post-diagram/diagram/diagramClass/SvgRect.ts","../../../../projects/components/post-diagram/diagram/diagramClass/SvgPolygon.ts","../../../../projects/components/post-diagram/diagram/diagramClass/Style.ts","../../../../projects/components/post-diagram/diagram/diagramClass/SvgPost.ts","../../../../projects/components/post-diagram/diagram/diagramClass/SvgText.ts","../../../../projects/components/post-diagram/diagram/diagramClass/TransformationClass.ts","../../../../projects/components/post-diagram/diagram/diagramClass/PostDiagramValue.ts","../../../../projects/components/post-diagram/diagram/diagramClass/SvgPolyline.ts","../../../../projects/components/post-diagram/diagram/diagramClass/PostDiagram.ts","../../../../projects/components/post-diagram/diagram/post-diagram.component.ts","../../../../projects/components/post-diagram/diagram/post-diagram.component.html","../../../../projects/components/post-diagram/post-diagram.module.ts","../../../../projects/components/post-diagram/obliczeniowo-elementary-post-diagram.ts"],"sourcesContent":["import { ns } from '@obliczeniowo/elementary/svg';\nimport { Style } from './Style';\n\nexport class SvgGroup {\n  id = '';\n  svgGroupContainer: SVGGElement;\n\n  constructor(id?: string, style?: Style | string) {\n    this.id = id || '';\n    this.svgGroupContainer = document.createElementNS(ns, 'g');\n    if (style) {\n      this.svgGroupContainer.setAttribute('style', style.toString());\n    }\n  }\n\n  append(child: any): void {\n    this.svgGroupContainer.appendChild(child);\n  }\n\n  clear(): void {\n    while (this.svgGroupContainer.firstChild) {\n      this.svgGroupContainer.removeChild(this.svgGroupContainer.firstChild);\n    }\n  }\n}\n","import { SvgGroup } from './svg-group';\nimport { Style } from './Style';\nimport { ns } from '@obliczeniowo/elementary/svg';\n\nexport class SvgRect {\n  svg: SVGRectElement;\n\n  constructor(\n    x: number,\n    y: number,\n    width: number,\n    height: number,\n    id: string,\n    svgContainer: SVGElement | SvgGroup,\n    style?: Style | string\n  ) {\n    this.svg = document.createElementNS(ns, 'rect');\n    this.svg.setAttribute('id', id);\n    if (style) {\n      this.svg.setAttribute('style', style.toString());\n    }\n    this.svg.setAttribute('x', x.toString());\n    this.svg.setAttribute('y', y.toString());\n    this.svg.setAttribute('width', width.toString());\n    this.svg.setAttribute('height', height.toString());\n\n    svgContainer.append(this.svg);\n  }\n\n  setX(x: string | number): void {\n    this.svg.setAttribute('x', x.toString());\n  }\n\n  setY(y: string | number): void {\n    this.svg.setAttribute('y', y.toString());\n  }\n\n  setWidth(width: string | number): void {\n    this.svg.setAttribute('width', width.toString());\n  }\n\n  setHeight(height: string | number): void {\n    this.svg.setAttribute('height', height.toString());\n  }\n}\n","import { SvgGroup } from './svg-group';\nimport { Style } from './Style';\nimport { ns } from '@obliczeniowo/elementary/svg';\nimport { Point2D } from '@obliczeniowo/elementary/classes';\n\nexport class SvgPolygon {\n  svg: SVGPolygonElement;\n\n  points: Point2D[] = [];\n\n  constructor(id: string, style: Style, svgContainer: SVGElement | SvgGroup) {\n    this.svg = document.createElementNS(ns, 'polygon');\n\n    this.svg.setAttribute('id', id);\n    this.svg.setAttribute('style', style.toString());\n    this.svg.setAttribute('points', '');\n\n    svgContainer.append(this.svg);\n  }\n\n  addPoint(x: number, y: number): void {\n    this.points.push(new Point2D(x, y));\n\n    let strPoints = '';\n\n    this.points.forEach((point: Point2D) => {\n      strPoints += point.toString();\n    });\n\n    this.svg.setAttribute('points', strPoints);\n  }\n\n  clearPoints(): void {\n    this.points = [];\n\n    this.svg.setAttribute('points', '');\n  }\n}\n","import { keys } from '@obliczeniowo/elementary/objects';\n\nexport class Style {\n  styles: any;\n\n  toString(): string {\n    let styleTxt = '';\n\n    keys(this.styles).forEach((key) => {\n      styleTxt += key + ':' + this.styles[key].toString() + ';';\n    });\n\n    return styleTxt;\n  }\n\n  constructor(styleObject: any) {\n    this.styles = styleObject;\n  }\n}\n","import { SvgGroup } from './svg-group';\nimport { SvgRect } from './SvgRect';\nimport { SvgPolygon } from './SvgPolygon';\nimport { Style } from './Style';\nimport { ColorRGB } from '@obliczeniowo/elementary/classes';\n\nexport class SvgPost {\n  x: number;\n  y: number;\n  width: number;\n  height: number;\n  private faceColor: ColorRGB;\n  private rightColor: ColorRGB;\n  private topColor: ColorRGB;\n  private strokeColor: ColorRGB;\n\n  private readonly face: SvgRect;\n  private readonly right: SvgPolygon;\n\n  top: SvgPolygon;\n\n  constructor(\n    x: number,\n    y: number,\n    width: number,\n    height: number,\n    id: string,\n    color: ColorRGB,\n    postGroup: SvgGroup\n  ) {\n    this.x = x;\n    this.y = y;\n    this.width = width;\n    this.height = height;\n\n    this.faceColor = color;\n    this.rightColor = new ColorRGB(\n      color.red - 40,\n      color.green - 40,\n      color.blue - 40\n    );\n    this.topColor = new ColorRGB(\n      color.red + 40,\n      color.green + 40,\n      color.blue + 40\n    );\n    this.strokeColor = new ColorRGB(\n      color.red - 100,\n      color.green - 100,\n      color.blue - 100\n    );\n\n    this.face = new SvgRect(\n      x,\n      y - height,\n      width,\n      height,\n      id + '_face',\n      postGroup,\n      new Style({\n        fill: this.faceColor,\n        stroke: this.strokeColor,\n        'stroke-linejoin': 'round',\n      }),\n    );\n\n    this.right = new SvgPolygon(\n      id + '_right',\n      new Style({\n        fill: this.rightColor,\n        stroke: this.strokeColor,\n        'stroke-linejoin': 'round',\n      }),\n      postGroup\n    );\n\n    this.top = new SvgPolygon(\n      id + '_top',\n      new Style({\n        fill: this.topColor,\n        stroke: this.strokeColor,\n        'stroke-linejoin': 'round',\n      }),\n      postGroup\n    );\n\n    this.refresh();\n  }\n\n  refresh(): void {\n    this.face.setWidth(this.width);\n    this.face.setHeight(this.height);\n\n    this.face.setX(this.x);\n    this.face.setY(this.y - this.height);\n\n    this.right.clearPoints();\n\n    this.right.addPoint(this.x + this.width, this.y - this.height);\n    this.right.addPoint(\n      this.x + 1.5 * this.width,\n      this.y - 0.5 * this.width - this.height\n    );\n    this.right.addPoint(this.x + 1.5 * this.width, this.y - 0.5 * this.width);\n    this.right.addPoint(this.x + this.width, this.y);\n\n    this.top.clearPoints();\n\n    this.top.addPoint(this.x, this.y - this.height);\n    this.top.addPoint(this.x + this.width, this.y - this.height);\n    this.top.addPoint(\n      this.x + 1.5 * this.width,\n      this.y - 0.5 * this.width - this.height\n    );\n    this.top.addPoint(\n      this.x + 0.5 * this.width,\n      this.y - 0.5 * this.width - this.height\n    );\n  }\n\n  setWidth(width: number, refresh = false): void {\n    this.width = width;\n    if (refresh) {\n      this.refresh();\n    }\n  }\n\n  setHeight(height: number, refresh = false): void {\n    this.height = height;\n    if (refresh) {\n      this.refresh();\n    }\n  }\n\n  setColor(color: ColorRGB): void {\n    this.faceColor = color;\n    this.rightColor = new ColorRGB(\n      color.red - 40,\n      color.green - 40,\n      color.blue - 40\n    );\n    this.topColor = new ColorRGB(\n      color.red + 40,\n      color.green + 40,\n      color.blue + 40\n    );\n    this.strokeColor = new ColorRGB(\n      color.red - 100,\n      color.green - 100,\n      color.blue - 100\n    );\n\n    this.face.svg.style.fill = this.faceColor.toString();\n    this.face.svg.style.stroke = this.strokeColor.toString();\n    this.right.svg.style.fill = this.rightColor.toString();\n    this.right.svg.style.stroke = this.strokeColor.toString();\n    this.top.svg.style.fill = this.topColor.toString();\n    this.top.svg.style.stroke = this.strokeColor.toString();\n  }\n}\n","import { SvgGroup } from './svg-group';\nimport { Rotate } from './TransformationClass';\nimport { Style } from './Style';\nimport { ns } from '@obliczeniowo/elementary/svg';\n\nexport class SvgText {\n  svg: SVGTextElement;\n\n  rotate: Rotate;\n\n  setText(text: string): void {\n    this.svg.innerHTML = text;\n  }\n\n  constructor(\n    x: number,\n    y: number,\n    text: string,\n    style: Style,\n    id: string,\n    rotate: Rotate,\n    svgContainer: SVGElement | SvgGroup\n  ) {\n    this.svg = document.createElementNS(ns, 'text');\n\n    this.rotate = rotate;\n    this.svg.setAttribute('transform', rotate.toString());\n\n    this.svg.setAttribute('x', x.toString());\n    this.svg.setAttribute('y', y.toString());\n    this.svg.setAttribute('style', style.toString());\n    this.svg.setAttribute('id', id);\n\n    svgContainer.append(this.svg);\n    this.setText(text);\n  }\n\n  show(display: boolean): void {\n    if (display) {\n      this.svg.style.display = 'inherit';\n    } else {\n      this.svg.style.display = 'none';\n    }\n  }\n\n  private set _transform(transform: string | null) {\n    this.svg.setAttribute('transform', transform as string);\n  }\n\n  public get transform(): string | null {\n    return this.svg.getAttribute('transform');\n  }\n\n  setX(x: number): void {\n    if (this.rotate?.rotatePoint) {\n      this.rotate.rotatePoint.x = x;\n      this._transform = this.rotate.toString();\n    }\n    this.svg.setAttribute('x', x.toString());\n  }\n\n  setY(y: number): void {\n    if (this.rotate?.rotatePoint) {\n      this.rotate.rotatePoint.y = y;\n      this._transform = this.rotate.toString();\n    }\n    this.svg.setAttribute('y', y.toString());\n  }\n}\n","import { Point2D } from '@obliczeniowo/elementary/classes';\n\nexport abstract class Transform {\n  abstract toString(): string;\n}\n\nexport class Rotate extends Transform {\n  rotatePoint: Point2D | null = null;\n\n  angle: number;\n\n  constructor(angle: number, rotatePoint: Point2D | null = null) {\n    super();\n\n    this.rotatePoint = rotatePoint;\n    this.angle = angle;\n  }\n\n  toString(): string {\n    return (\n      'rotate(' +\n      this.angle.toString() +\n      (this.rotatePoint ? ',' + this.rotatePoint.toString() : '') +\n      ')'\n    );\n  }\n}\n","import { ColorRGB, Point2D } from '@obliczeniowo/elementary/classes';\n\nimport { SvgPost } from './SvgPost';\nimport { SvgText } from './SvgText';\nimport { Style } from './Style';\nimport { Rotate } from './TransformationClass';\nimport { SvgGroup } from './svg-group';\n\nexport class PostDiagramValue {\n  key: string;\n\n  private readonly postsGroup: SvgGroup;\n  private readonly valuesGroup: SvgGroup;\n  private readonly keysGroup: SvgGroup;\n\n  diagramValue: number;\n\n  private readonly svgPost: SvgPost;\n  valueText: SvgText;\n  keyText: SvgText;\n\n  private readonly legendContainer;\n\n  private readonly legendKey: HTMLElement;\n\n  set setColor(color: any) {\n    this.svgPost.setColor(color);\n    (this.legendKey.querySelector('div') as HTMLElement).style.backgroundColor =\n      color.toString();\n  }\n\n  constructor(\n    key: string,\n    diagramValue: number,\n    postsGroup: SvgGroup,\n    valuesGroup: SvgGroup,\n    keysGroup: SvgGroup,\n    legendContainer: HTMLElement\n  ) {\n    this.key = key;\n    this.diagramValue = Math.abs(diagramValue);\n\n    this.postsGroup = postsGroup;\n    this.valuesGroup = valuesGroup;\n    this.keysGroup = keysGroup;\n\n    this.legendContainer = legendContainer;\n\n    this.svgPost = new SvgPost(\n      0,\n      0,\n      10,\n      this.diagramValue,\n      this.key.replace(/ /g, ''),\n      new ColorRGB(250, 0, 0),\n      this.postsGroup\n    );\n\n    this.valueText = new SvgText(\n      0,\n      10,\n      this.diagramValue.toString(),\n      new Style(\n        {\n          fill: 'var(--default-text-color)',\n          'text-anchor': 'middle'\n        }\n      ),\n      'Value_' + this.key.replace(/ /g, ''),\n      new Rotate(0),\n      this.valuesGroup\n    );\n\n    this.keyText = new SvgText(\n      100,\n      100,\n      key,\n      new Style({\n        fill: 'var(--default-text-color)',\n        'text-anchor': 'end',\n      }),\n      'Key_' + this.key.replace(/ /g, ''),\n      new Rotate(-90, new Point2D(100, 100)),\n      this.keysGroup\n    );\n\n    const legendKey: HTMLElement = document.createElement('DIV');\n\n    legendKey.setAttribute('class', 'legend_key_' + this.key.replace(/ /g, ''));\n    legendKey.style.backgroundColor = new ColorRGB(0, 0, 0).toString();\n\n    legendKey.style.width = '20px';\n    legendKey.style.height = '20px';\n    legendKey.style.display = 'inline-flex';\n\n    const legendText: HTMLElement = document.createElement('DIV');\n\n    legendText.innerHTML = key + ' = ' + this.getValue();\n    legendText.style.display = 'inline-flex';\n    legendText.style.marginLeft = '10px';\n\n    this.legendKey = document.createElement('DIV');\n\n    this.legendKey.appendChild(legendKey);\n    this.legendKey.appendChild(legendText);\n\n    this.legendKey.style.verticalAlign = 'middle';\n\n    this.legendContainer.appendChild(this.legendKey);\n  }\n\n  setPost(x: number, y: number, width: number, k: number): void {\n    this.svgPost.x = x;\n    this.svgPost.y = y;\n    this.svgPost.setWidth(width);\n    this.svgPost.setHeight(this.diagramValue * k);\n    this.svgPost.refresh();\n  }\n\n  getValue(): number {\n    return this.diagramValue;\n  }\n\n  setValue(value: number, k: number): void {\n    this.diagramValue = value;\n    this.valueText.setText(this.diagramValue.toString());\n    this.svgPost.setHeight(value * k);\n    this.svgPost.refresh();\n  }\n\n  toString(): string {\n    return this.key + ';' + this.diagramValue.toString();\n  }\n}\n","import { SvgGroup } from './svg-group';\nimport { Style } from './Style';\nimport { ns } from '@obliczeniowo/elementary/svg';\nimport { Point2D } from '@obliczeniowo/elementary/classes';\n\nexport class SvgPolyline {\n  svg: SVGPolylineElement;\n\n  points: Point2D[] = [];\n\n  constructor(\n    id: string,\n    style: Style,\n    svgContainer: SVGElement | SvgGroup,\n    type = 'beforeend'\n  ) {\n    this.svg = document.createElementNS(ns, 'polyline');\n\n    this.svg.setAttribute('id', id);\n    this.svg.setAttribute('style', style.toString());\n    this.svg.setAttribute('points', '');\n\n    svgContainer.append(this.svg);\n  }\n\n  addPoint(x: number, y: number): void {\n    this.points.push(new Point2D(x, y));\n\n    let strPoints = '';\n\n    this.points.forEach((point: Point2D) => {\n      strPoints += point.toString();\n    });\n\n    this.svg.setAttribute('points', strPoints);\n  }\n\n  clearPoints(): void {\n    this.points = [];\n\n    this.svg.setAttribute('points', '');\n  }\n}\n","import { ElementaryMath } from '@obliczeniowo/elementary/math';\nimport { Point2D, ColorRGB, ColorHSV } from '@obliczeniowo/elementary/classes';\nimport { keys } from '@obliczeniowo/elementary/objects';\n\nimport { SvgGroup } from './svg-group';\nimport { PostDiagramValue } from './PostDiagramValue';\nimport { Rotate } from './TransformationClass';\nimport { Style } from './Style';\nimport { SvgText } from './SvgText';\nimport { SvgPolyline } from './SvgPolyline';\nimport { SvgPolygon } from './SvgPolygon';\n\nexport interface ScaleValue {\n  line: SvgPolyline;\n  value: SvgText;\n}\n\nexport class SvgPostDiagram {\n  values: PostDiagramValue[] = [];\n  svgContainer: SVGSVGElement;\n\n  legendContainer: HTMLElement;\n\n  private readonly postsGroup: SvgGroup = new SvgGroup();\n  private readonly valuesGroup: SvgGroup = new SvgGroup();\n  private readonly keysGroup: SvgGroup = new SvgGroup();\n  private readonly greedGroup: SvgGroup = new SvgGroup();\n\n  // tslint:disable-next-line: variable-name\n  private _displayPostKeys = true;\n\n  // tslint:disable-next-line: variable-name\n  private _diagramHeight: number;\n\n  dy = 30;\n\n  diagramWidth: number;\n\n  diagramPos: Point2D;\n\n  base!: SvgPolygon;\n\n  leftScalePlain!: SvgPolygon;\n  backScalePlain!: SvgPolygon;\n\n  scaleLines: ScaleValue[] = [];\n  scaleBase!: SvgText;\n\n  private displayText = true;\n\n  private valuesColor: ColorRGB | null = null;\n  private readonly scaleColor: ColorRGB | string | null = 'var(--post-diagram-scale-line-color)';\n\n  id;\n\n  // tslint:disable-next-line: variable-name\n  private _colorFunction = (\n    index: number,\n    dataLength: number,\n    value: number,\n    max: number\n  ): ColorRGB => {\n    return ColorHSV.createColorHSV(\n      ((360 / dataLength) * 2 * index) / 2,\n      0.5,\n      255\n    ).convertToRGB();\n  }\n\n  set colorFunction(\n    colorFunction: (\n      index: number,\n      dataLength: number,\n      value: number,\n      max: number\n    ) => ColorRGB\n  ) {\n    if (colorFunction) {\n      this._colorFunction = colorFunction;\n\n      const dataLength = this.values.length;\n      const max = this.getMax();\n\n      this.values.forEach((value: PostDiagramValue, index: number) => {\n        value.setColor = this._colorFunction(\n          index,\n          dataLength,\n          value.getValue(),\n          max\n        );\n      });\n    }\n  }\n\n  constructor(\n    id: string,\n    data: any,\n    svgContainer: SVGSVGElement,\n    legendContainer: HTMLElement\n  ) {\n    this.id = id;\n\n    this.values = [];\n\n    this.svgContainer = svgContainer;\n\n    this.legendContainer = legendContainer;\n\n    this.legendContainer.style.maxHeight =\n      svgContainer.getAttribute('height') + 'px';\n\n    this._diagramHeight =\n      +(this.svgContainer.getAttribute('height') as string) - 80;\n\n    this.diagramWidth =\n      +(this.svgContainer.getAttribute('width') as string) - 100;\n\n    this.diagramPos = new Point2D(90, this.diagramHeight + this.dy);\n\n    this.setDiagramValues(data);\n  }\n\n  get diagramHeight(): number {\n    return (\n      this._diagramHeight -\n      (this.values.length ? this.postWidth * 0.5 : 0) -\n      this.dy\n    );\n  }\n\n  displayPostKeys(display: boolean): void {\n    this._displayPostKeys = display;\n    this.values.forEach((postValue: PostDiagramValue) => {\n      postValue.keyText.show(display);\n    });\n\n    this._diagramHeight =\n      +(this.svgContainer.getAttribute('height') as string) -\n      (display ? 80 : 30);\n    this.diagramPos.y = this.diagramHeight + this.dy;\n\n    this.greedGroup.clear();\n\n    this.refresh();\n  }\n\n  getMax(): number {\n    let max = 0;\n    this.values.forEach((value) => {\n      if (max < value.getValue()) {\n        max = value.getValue();\n      }\n    });\n    return max !== 0 ? max : 1;\n  }\n\n  setValueColor(valuesColor: ColorRGB): void {\n    this.valuesColor = valuesColor;\n    this.values.forEach((value) => {\n      value.setColor(valuesColor);\n    });\n  }\n\n  private clearHtml(html: HTMLElement): void {\n    while (html.firstChild) {\n      html.removeChild(html.firstChild);\n    }\n  }\n\n  setDiagramValues(data: { [key: string]: number }): void {\n    this.clearHtml(this.svgContainer as unknown as HTMLElement);\n    this.clearHtml(this.legendContainer);\n\n    this.postsGroup.clear();\n    this.valuesGroup.clear();\n    this.keysGroup.clear();\n    this.greedGroup.clear();\n\n    this.values = [];\n\n    this.base = new SvgPolygon(\n      this.id + 'base',\n      new Style({\n        fill: new ColorRGB(150, 150, 150),\n        stroke: new ColorRGB(50, 50, 50),\n      }),\n      this.svgContainer\n    );\n\n    this.leftScalePlain = new SvgPolygon(\n      this.id + 'leftScalePlain',\n      new Style({\n        fill: 'none',\n        stroke: this.scaleColor,\n      }),\n      this.svgContainer\n    );\n\n    this.backScalePlain = new SvgPolygon(\n      this.id + 'backScalePlain',\n      new Style({\n        fill: 'none',\n        stroke: this.scaleColor,\n      }),\n      this.svgContainer\n    );\n\n    this.svgContainer.appendChild(this.greedGroup.svgGroupContainer);\n    this.svgContainer.appendChild(this.postsGroup.svgGroupContainer);\n    this.svgContainer.appendChild(this.valuesGroup.svgGroupContainer);\n    this.svgContainer.appendChild(this.keysGroup.svgGroupContainer);\n\n    let post: PostDiagramValue;\n\n    const valuesKeys: string[] = keys(data);\n\n    const dataLength: number = valuesKeys.length;\n\n    let max = 0;\n\n    valuesKeys.forEach((element) => {\n      const value: number = data[element];\n      max = value > max ? value : max;\n    });\n\n    valuesKeys.forEach((key: string, index: number) => {\n      if (ElementaryMath.isNumeric(data[key])) {\n        post = new PostDiagramValue(\n          key,\n          data[key],\n          this.postsGroup,\n          this.valuesGroup,\n          this.keysGroup,\n          this.legendContainer\n        );\n\n        post.setColor =\n          this.valuesColor === null\n            ? this._colorFunction(index, dataLength, data[key], max)\n            : this.scaleColor;\n\n        post.keyText.show(this._displayPostKeys);\n\n        this.values.push(post);\n      } else {\n        console.error('non numeric value ' + data[key]);\n      }\n    });\n\n    this.refresh();\n  }\n\n  get postWidth(): number {\n    return this.diagramWidth / (2 * this.values.length);\n  }\n\n  private _refreshBase(): void {\n    this.base.clearPoints();\n\n    this.base.addPoint(this.diagramPos.x, this.diagramPos.y);\n\n    this.base.addPoint(\n      this.diagramPos.x + this.postWidth * 0.5,\n      this.diagramPos.y - this.postWidth * 0.5\n    );\n\n    this.base.addPoint(\n      this.diagramPos.x + this.diagramWidth,\n      this.diagramPos.y - this.postWidth * 0.5\n    );\n\n    this.base.addPoint(\n      this.diagramPos.x + this.diagramWidth - this.postWidth * 0.5,\n      this.diagramPos.y\n    );\n  }\n\n  private _refreshLeftScalePlain(): void {\n    this.leftScalePlain.clearPoints();\n\n    this.leftScalePlain.addPoint(this.diagramPos.x, this.diagramPos.y);\n\n    this.leftScalePlain.addPoint(\n      this.diagramPos.x + this.postWidth * 0.5,\n      this.diagramPos.y - this.postWidth * 0.5\n    );\n\n    this.leftScalePlain.addPoint(\n      this.diagramPos.x + this.postWidth * 0.5,\n      this.diagramPos.y - this.postWidth * 0.5 - this.diagramHeight\n    );\n\n    this.leftScalePlain.addPoint(\n      this.diagramPos.x,\n      this.diagramPos.y - this.diagramHeight\n    );\n  }\n\n  private _refreshBackScalePlain(): void {\n    this.backScalePlain.clearPoints();\n\n    this.backScalePlain.addPoint(\n      this.diagramPos.x + this.postWidth * 0.5,\n      this.diagramPos.y - this.postWidth * 0.5\n    );\n\n    this.backScalePlain.addPoint(\n      this.diagramPos.x + this.postWidth * 0.5,\n      this.diagramPos.y - this.postWidth * 0.5 - this.diagramHeight\n    );\n\n    this.backScalePlain.addPoint(\n      this.diagramPos.x + this.diagramWidth,\n      this.diagramPos.y - this.postWidth * 0.5 - this.diagramHeight\n    );\n\n    this.backScalePlain.addPoint(\n      this.diagramPos.x + this.diagramWidth,\n      this.diagramPos.y - this.postWidth * 0.5\n    );\n  }\n\n  private _refreshScale(k: number): void {\n    const max: number = this.getMax();\n\n    let baseUnit: number = Math.pow(10, Math.ceil(Math.log10(max))) / 10;\n\n    const basePow = 1 - Math.ceil(Math.log10(max));\n    const baseLog = Math.pow(10, basePow);\n\n    if (Math.floor(max / baseUnit) === 5) {\n      baseUnit = baseUnit / 2;\n    } else if (Math.floor(max / baseUnit) === 4) {\n      baseUnit = baseUnit / 2.5;\n    } else if (Math.floor(max / baseUnit) === 3) {\n      baseUnit = baseUnit / 4;\n    } else if (Math.floor(max / baseUnit) === 2) {\n      baseUnit = baseUnit / 5;\n    } else if (Math.floor(max / baseUnit) < 2) {\n      baseUnit = Math.pow(10, Math.ceil(Math.log10(max))) / 50;\n    }\n\n    this.scaleLines = [];\n\n    this.scaleBase = new SvgText(\n      this.diagramPos.x - 10,\n      this.diagramPos.y + 30,\n      basePow !== 0 ? '&times;e' + -basePow : '',\n      new Style({\n        fill: 'var(--default-text-color)',\n        'text-anchor': 'end',\n      }),\n      this.id + 'basePow',\n      new Rotate(0),\n      this.greedGroup\n    );\n\n    for (let index = 0; index <= max; index += baseUnit) {\n      const scaleLine = new SvgPolyline(\n        this.id + 'scaleLine' + index,\n        new Style({\n          fill: 'none',\n          stroke: this.scaleColor,\n        }),\n        this.greedGroup,\n        'afterbegin'\n      );\n\n      scaleLine.addPoint(this.diagramPos.x, this.diagramPos.y - index * k);\n\n      scaleLine.addPoint(\n        this.diagramPos.x + this.postWidth * 0.5,\n        this.diagramPos.y - this.postWidth * 0.5 - index * k\n      );\n\n      scaleLine.addPoint(\n        this.diagramPos.x + this.diagramWidth,\n        this.diagramPos.y - this.postWidth * 0.5 - index * k\n      );\n\n      const value: SvgText = new SvgText(\n        this.diagramPos.x - 10,\n        this.diagramPos.y - index * k,\n        (index * baseLog).toFixed(2).toString(),\n        new Style({\n          fill: 'var(--default-text-color)',\n          'text-anchor': 'end',\n        }),\n        this.id + 'scaleValue' + index,\n        new Rotate(0),\n        this.greedGroup\n      );\n\n      this.scaleLines.push({ line: scaleLine, value });\n    }\n  }\n\n  refresh(): void {\n    const k = this.diagramHeight / this.getMax();\n\n    this._refreshScale(k);\n\n    this._refreshBase();\n\n    this._refreshLeftScalePlain();\n\n    this._refreshBackScalePlain();\n\n    this.values.forEach((value, i) => {\n      value.setPost(\n        this.diagramPos.x + i * this.postWidth * 2 + this.postWidth / 4,\n        this.diagramPos.y,\n        this.postWidth,\n        k\n      );\n      if (this.displayText === true) {\n        value.valueText.svg.style.display = 'initial';\n      } else {\n        value.valueText.svg.style.display = 'none';\n      }\n\n      value.valueText.setX(\n        this.diagramPos.x + i * this.postWidth * 2 + 0.75 * this.postWidth\n      );\n      value.valueText.setY(\n        this.diagramPos.y - value.getValue() * k - this.postWidth * 0.5 - 5\n      );\n\n      value.keyText.setX(\n        this.diagramPos.x + i * this.postWidth * 2 + 0.75 * this.postWidth\n      );\n      value.keyText.setY(this.diagramPos.y + 10);\n    });\n  }\n\n  toString(): string {\n    let data = '';\n    this.values.forEach((value) => {\n      data += value.toString() + ';';\n    });\n    return data.slice(0, -1);\n  }\n\n  setDisplayValue(value: boolean): void {\n    this.displayText = value;\n\n    this.values.forEach((diagramValue: PostDiagramValue) => {\n      if (this.displayText === true) {\n        diagramValue.valueText.svg.style.display = 'initial';\n      } else {\n        diagramValue.valueText.svg.style.display = 'none';\n      }\n    });\n  }\n\n  setValue(value: number, index: number): void {\n    if (index < this.values.length) {\n      let max = this.getMax();\n      max = max < value ? value : max;\n      const k = value / max;\n      this.values[index].setValue(value, k);\n    }\n  }\n}\n","import { ColorHSV, ColorRGB } from '@obliczeniowo/elementary/classes';\nimport {\n  Component,\n  Input,\n  AfterViewInit,\n  ViewChild,\n  ElementRef,\n} from '@angular/core';\n\nimport { SvgPostDiagram } from './diagramClass/PostDiagram';\n\n@Component({\n    selector: 'obl-post-diagram',\n    templateUrl: './post-diagram.component.html',\n    styleUrls: ['./post-diagram.component.scss'],\n    standalone: false\n})\nexport class PostDiagramComponent implements AfterViewInit {\n  @Input() yLabel = '';\n\n  @Input() xLabel = '';\n\n  @Input() diagramTitle = '';\n\n  // tslint:disable-next-line: variable-name\n  private _diagramData: { [key: string]: number } = {};\n\n  @ViewChild('svgContainer') svgContainer!: ElementRef;\n  @ViewChild('diagramLegend') diagramLegend!: ElementRef;\n\n  @Input()\n  set diagramData(diagramData: { [key: string]: number }) {\n    this._diagramData = diagramData;\n    if (this.svgDiagram) {\n      this.svgDiagram.setDiagramValues(this._diagramData);\n    }\n  }\n\n  svgDiagram!: SvgPostDiagram;\n\n  // tslint:disable-next-line: variable-name\n  private _colorFunctionRef = (\n    index: number,\n    dataLength: number,\n    value: number,\n    max: number\n  ): ColorRGB => {\n    return ColorHSV.createColorHSV(\n      ((360 / dataLength) * 2 * index) / 2,\n      0.5,\n      255\n    ).convertToRGB();\n  }\n\n  @Input()\n  set colorFunction(\n    colorFunctionRef: (\n      index: number,\n      dataLength: number,\n      value: number,\n      max: number\n    ) => ColorRGB\n  ) {\n    this._colorFunctionRef = colorFunctionRef;\n    if (this.svgDiagram) {\n      this.svgDiagram.colorFunction = this._colorFunctionRef;\n    }\n  }\n\n  ngAfterViewInit(): void {\n    setTimeout(() => {\n      this.svgDiagram = new SvgPostDiagram(\n        'myDiagram',\n        this._diagramData,\n        this.svgContainer.nativeElement,\n        this.diagramLegend.nativeElement\n      );\n\n      this.svgDiagram.colorFunction = this._colorFunctionRef;\n    }, 0);\n  }\n}\n","<div>\n  <div class=\"diagram\">\n    @if (yLabel !== '') {\n      <div class=\"yLabel\">\n        <div\n          class=\"rotate\"\n          [style.minWidth.px]=\"svgDiagram ? svgDiagram.diagramHeight : 0\"\n        >\n          {{ yLabel }}\n        </div>\n      </div>\n    }\n\n    <div>\n      @if (svgDiagram && diagramTitle !== '') {\n        <h1>\n          {{ diagramTitle }}\n        </h1>\n      }\n      <svg #svgContainer width=\"800\" height=\"400\"></svg>\n      <div class=\"xLabel-container\">\n        @if (svgDiagram && xLabel !== '') {\n          <div\n            [style.width.px]=\"svgDiagram.diagramWidth\"\n            class=\"xLabel\"\n          >\n            {{ xLabel }}\n          </div>\n        }\n      </div>\n    </div>\n  </div>\n</div>\n<div #diagramLegend class=\"legend\"></div>\n","import { PostDiagramComponent } from './diagram/post-diagram.component';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n  declarations: [PostDiagramComponent],\n  imports: [CommonModule],\n  providers: [],\n  exports: [PostDiagramComponent],\n})\nexport class PostDiagramModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}