{"version":3,"file":"ngx-svg-graphics.mjs","sources":["../../../projects/svg-graphics/src/lib/models/dragger.ts","../../../projects/svg-graphics/src/lib/utils/position-helper.ts","../../../projects/svg-graphics/src/lib/services/svg-access.service.ts","../../../projects/svg-graphics/src/lib/components/draggable/draggable.component.ts","../../../projects/svg-graphics/src/lib/components/draggable/draggable.component.svg","../../../projects/svg-graphics/src/lib/utils/path-layouter.ts","../../../projects/svg-graphics/src/lib/services/arrow-style-configuration.service.ts","../../../projects/svg-graphics/src/lib/components/arrows/arrow-between-points/arrow-between-points.component.ts","../../../projects/svg-graphics/src/lib/components/arrows/arrow-between-points/arrow-between-points.component.svg","../../../projects/svg-graphics/src/lib/components/arrows/arrow-between-boxes/arrow-between-boxes.component.ts","../../../projects/svg-graphics/src/lib/components/arrows/arrow-between-boxes/arrow-between-boxes.component.svg","../../../projects/svg-graphics/src/lib/components/arrows/arrow-between-elems/arrow-between-elems.component.ts","../../../projects/svg-graphics/src/lib/components/arrows/arrow-between-elems/arrow-between-elems.component.svg","../../../projects/svg-graphics/src/lib/utils/text-distributor.ts","../../../projects/svg-graphics/src/lib/components/text-area-svg/text-area-svg.component.ts","../../../projects/svg-graphics/src/lib/components/text-area-svg/text-area-svg.component.svg","../../../projects/svg-graphics/src/public-api.ts","../../../projects/svg-graphics/src/ngx-svg-graphics.ts"],"sourcesContent":["import {Positionable} from './positionable';\n\nexport class Dragger<T extends Positionable> {\n  elem: T;\n\n  dragActive = false;\n  wasReallyDragged = false;\n  dragStartX: number = 0;\n  dragStartY: number = 0;\n\n  constructor(private element: T) {\n    this.elem = element;\n  }\n\n  startDrag(event: MouseEvent) {\n    console.log('startDrag');\n    this.dragActive = true;\n    this.dragStartX = event.clientX;\n    this.dragStartY = event.clientY;\n  }\n\n  // returns true in the case of a real drag event, false otherwise\n  drag(event: MouseEvent): boolean {\n    if (this.dragActive) {\n      this.wasReallyDragged = true;\n      event.preventDefault();\n      const dragX = event.clientX;\n      this.elem.position.x+= (dragX - this.dragStartX);\n      this.dragStartX = dragX;\n      const dragY = event.clientY;\n      this.elem.position.y+= (dragY - this.dragStartY);\n      this.dragStartY = dragY;\n      return true;\n    }\n    return false;\n  }\n\n  endDrag(event: MouseEvent) {\n    console.log('endDrag');\n    this.dragActive = false;\n    // todo was working for click vs drag, not now setTimeout(() => {this.dragActive = false;}, 50);\n    event.preventDefault();\n  }\n\n  //returns true if the click should be treated as click, false if it was from drag\n  clickElem(event: MouseEvent): boolean {\n    if (this.wasReallyDragged) {\n      this.wasReallyDragged = false;\n      return false;\n    } else {\n      event.preventDefault();\n      return true;\n    }\n  }\n\n\n}\n","import {Point} from \"@angular/cdk/drag-drop\";\nimport {BoundingBox} from \"../models/bounding-box\";\n\nexport class PositionHelper {\n\n  static absolutePosition(elem: SVGGraphicsElement): BoundingBox {\n    let relativePosition: DOMRect = elem.getBBox();\n    let translationMatrix: DOMMatrix = elem.getCTM()!;\n    let x = relativePosition.x;\n    let y = relativePosition.y;\n    let x_abs = translationMatrix.a*x+translationMatrix.c*y+translationMatrix.e;\n    let y_abs = translationMatrix.b*x+translationMatrix.d*y+translationMatrix.f;\n    return {x: x_abs, y: y_abs, w: relativePosition.width, h: relativePosition.height}\n  }\n\n  static makeRelativeToElem(p: Point, elem: SVGGraphicsElement): void {\n    this.matrixTransform(p, elem.getCTM()!.inverse())\n  }\n\n  static matrixTransform(p: Point, translationMatrix: DOMMatrix): void {\n    let x = p.x;\n    let y = p.y;\n    let x_trans = translationMatrix.a*x+translationMatrix.c*y+translationMatrix.e;\n    let y_trans = translationMatrix.b*x+translationMatrix.d*y+translationMatrix.f;\n    p.x = x_trans\n    p.y = y_trans\n  }\n\n  static newBoundingBox(x: number = 0, y: number = 0, width: number = 5, height: number = 5): BoundingBox {\n    return {x: x, y: y, w: width, h: height};\n  }\n}\n","import { Injectable } from '@angular/core';\nimport {BehaviorSubject, Observable} from \"rxjs\";\nimport {BoundingBox} from \"../models/bounding-box\";\nimport {PositionHelper} from \"../utils/position-helper\";\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class SVGAccessService {\n\n  positionChange: BehaviorSubject<string> = new BehaviorSubject<string>('');\n\n  constructor() { }\n\n  notifyPositionChange(id: string) {\n    this.positionChange.next(id);\n  }\n\n  listenToPositionChange(): Observable<string> {\n    return this.positionChange.asObservable()\n  }\n\n  getElemById(id: string): SVGGraphicsElement | undefined {\n    let elem = document.getElementById(id)\n    return elem as unknown as SVGGraphicsElement\n  }\n\n  getRelativePosition(id: string, node: SVGGraphicsElement): BoundingBox | undefined {\n    let elem = this.getElemById(id)\n    if (elem) {\n      let abs = PositionHelper.absolutePosition(elem)\n      PositionHelper.makeRelativeToElem(abs, node)\n      return abs;\n    }\n    return undefined\n  }\n}\n","import {AfterViewInit, Component, EventEmitter, Output} from '@angular/core';\nimport {SVGAccessService} from '../../services/svg-access.service';\nimport { Draggable } from '../../models/positionable';\nimport {Dragger} from \"../../models/dragger\";\n\n@Component({\n  imports: [],\n  selector: '[draggable]',\n  templateUrl: './draggable.component.svg',\n  styleUrl: './draggable.component.css'\n})\nexport abstract class DraggableComponent<T extends Draggable> implements AfterViewInit {\n\n  @Output() chooseElem = new EventEmitter<T>();\n  //the caller must initialize both required elements (elem and elementDragger) either in the constructor\n  // (or if they are inputs) in the ngOnInit life cycle hook\n  elem!: T;\n  elemDragger!: Dragger<T>;\n\n  protected constructor(\n    protected svgAccessService: SVGAccessService\n  ) {}\n\n\n  ngAfterViewInit() {\n    this.svgAccessService.notifyPositionChange(this.elem.gId)\n  }\n\n  startDrag(event: MouseEvent) {\n    this.elemDragger.startDrag(event);\n  }\n\n  drag(event: MouseEvent) {\n    if (this.elemDragger.drag(event)) {\n      this.svgAccessService.notifyPositionChange(this.elem.gId)\n    }\n  }\n\n  endDrag(event: MouseEvent) {\n    this.elemDragger.endDrag(event);\n  }\n\n  clickElem(event: MouseEvent) {\n    if (this.elemDragger.clickElem(event)) {\n      this.chooseElem.emit(this.elem);\n    }\n  }\n\n}\n","<svg:g>\n  <g [attr.id]=\"elem.gId\"\n     (mousedown)=\"startDrag($event)\"\n     (mousemove)=\"drag($event)\"\n     (mouseup)=\"endDrag($event)\"\n     (mouseleave)=\"endDrag($event)\"\n     (click)=\"clickElem($event)\">\n  </g>\n</svg:g>\n","import {BoundingBox} from \"../models/bounding-box\";\nimport {Point} from \"@angular/cdk/drag-drop\";\n\nexport class PathLayouter {\n\n  static bestPoints(p1: BoundingBox, p2: BoundingBox) {\n    //assumption is that both boxes do not intersect\n    //since we only deal with bounding boxes, all relevant lines are parallel/orthogonal\n\n    let xPoints = this.getPointsInOneDimension(p1.x, p1.w, p2.x, p2.w)\n    let yPoints = this.getPointsInOneDimension(p1.y, p1.h, p2.y, p2.h)\n    let result1: Point = {x: xPoints[0], y: yPoints[0]}\n    let result2: Point = {x: xPoints[1], y: yPoints[1]}\n    return [result1, result2];\n  }\n\n  // assumes that x1 is smaller than x2\n  //works for width (careful with height, y axis is wrong way)\n  static determineOverlapX(x1: number, w1: number, x2: number, w2: number): number[] {\n    let x1right = x1+w1\n    if (x1right >= x2) {\n      //find end of overlap\n      let x2right = x2+w2\n      let end = Math.min(x1right, x2right)\n      //overlap interval is [x2, end]\n      let middle = (x2+end)/2\n      return [middle, middle]\n    } else return [x1right, x2]\n  }\n\n\n  static getPointsInOneDimension(x1: number, w1: number, x2: number, w2: number): number[] {\n    //determine overlap (and then middle of it) or closest points in one dimension\n    if (x1 < x2) {\n      return this.determineOverlapX(x1, w1, x2, w2)\n    } else {\n      return this.determineOverlapX(x2, w2, x1, w1).reverse()\n    }\n  }\n\n}\n","import { Injectable } from '@angular/core';\nimport {ArrowStyleConfiguration} from \"../models/arrow-style-configuration\";\n\n/*****\n default implementation\n You can extend this base case with an own service implementation.\n Make sure to configure DI to use your service instead of this one\n In 20205, the way to do so is to declare it as provider in app.config.ts or app.component.ts\n providers: [{ provide: ArrowStyleConfigurationService, useClass: YourServiceImplementation }],\n See https://angular.dev/guide/di/dependency-injection-providers\n ***/\n@Injectable({\n  providedIn: 'root'\n})\nexport class ArrowStyleConfigurationService {\n\n  constructor() { }\n\n  styleArrow(arrowType?: string): ArrowStyleConfiguration {\n    return {\n      color: 'black',\n      dashed: [0]\n    };\n  }\n}\n","import {Component, Input, OnChanges} from '@angular/core';\nimport {NgIf} from \"@angular/common\";\nimport {ArrowStyleConfigurationService} from \"../../../services/arrow-style-configuration.service\";\nimport {ArrowStyleConfiguration} from \"../../../models/arrow-style-configuration\";\nimport {v4 as uuidv4} from \"uuid\";\n\n@Component({\n  selector: '[arrow-between-points]',\n  imports: [\n    NgIf\n  ],\n  templateUrl: './arrow-between-points.component.svg',\n  styleUrl: './arrow-between-points.component.css'\n})\nexport class ArrowBetweenPointsComponent implements OnChanges {\n\n  @Input() startX!: number;\n  @Input() startY!: number;\n  @Input() endX!: number;\n  @Input() endY!: number;\n  @Input() text?: string;\n  @Input() style?: string;\n\n  @Input() arrowType?: string;\n\n  arrowStyleConfiguration: ArrowStyleConfiguration;\n  id = uuidv4();\n\n  constructor(\n      private arrowStyleConfigService: ArrowStyleConfigurationService,) {\n\n    this.arrowStyleConfiguration = this.arrowStyleConfigService.styleArrow()\n  }\n\n  ngOnChanges() {\n    this.arrowStyleConfiguration = this.arrowStyleConfigService.styleArrow(this.arrowType)\n  }\n\n}\n","<svg:g>\n    <path [attr.id]=\"id+'-path'\"\n          [attr.d]=\"'M '+startX+','+startY+' L '+endX+','+endY\"\n          [attr.stroke]=\"arrowStyleConfiguration.color\"\n          [attr.stroke-dasharray]=\"arrowStyleConfiguration.dashed\"\n          [attr.marker-start]='\"url(#\"+arrowStyleConfiguration.startPointer+\")\"'\n          [attr.marker-end]='\"url(#\"+arrowStyleConfiguration.endPointer+\")\"'\n          style=\"{{style}}\">\n    </path>\n    <text *ngIf=\"text\">\n        <textPath [attr.href]=\"'#'+id+'-path'\">\n            {{text}}\n        </textPath>\n    </text>\n</svg:g>","import { AfterViewInit, ChangeDetectorRef, Component, Input, OnChanges,} from '@angular/core';\nimport { Point } from \"@angular/cdk/drag-drop\";\nimport {v4 as uuidv4} from \"uuid\";\nimport {BoundingBox} from \"../../../models/bounding-box\";\nimport {PathLayouter} from \"../../../utils/path-layouter\";\nimport {ArrowBetweenPointsComponent} from \"../arrow-between-points/arrow-between-points.component\";\n\n@Component({\n    selector: '[arrow-between-boxes]',\n    templateUrl: './arrow-between-boxes.component.svg',\n    styleUrl: './arrow-between-boxes.component.css',\n    standalone: true,\n  imports: [ArrowBetweenPointsComponent]\n})\nexport class ArrowBetweenBoxesComponent implements OnChanges, AfterViewInit {\n  @Input() start!: BoundingBox;\n  @Input() end!: BoundingBox;\n  @Input() arrowType?: string;\n  @Input() text?: string;\n  @Input() style?: string;\n\n\n  x1: number = 0;\n  y1: number = 0;\n  x2: number = 5;\n  y2: number = 5;\n\n  id = uuidv4();\n\n  positioned= false;\n\n  constructor(\n    private cdr: ChangeDetectorRef,\n    ) {}\n\n  ngAfterViewInit() {\n    this.computePositions()\n    this.positioned = true;\n    this.cdr.detectChanges();\n  }\n\n  ngOnChanges() {\n    if(this.positioned) {\n      this.computePositions()\n    }\n  }\n\n\n  private computePositions() {\n    let res = PathLayouter.bestPoints(this.start, this.end);\n    this.applyBestPoints(res)\n  }\n\n  private applyBestPoints(res: Point[]) {\n    this.x1 = res[0].x;\n    this.y1 = res[0].y;\n    this.x2 = res[1].x;\n    this.y2 = res[1].y;\n  }\n\n}\n","<svg:g>\n  <g arrow-between-points\n     [startX]=\"x1\"\n     [startY]=\"y1\"\n     [endX]=\"x2\"\n     [endY]=\"y2\"\n     [text]=\"text\"\n     [arrowType]=\"arrowType\"\n     [style]=\"style\"\n  >\n  </g>\n</svg:g>\n","import {\n  AfterViewInit,\n  ChangeDetectorRef,\n  Component, ElementRef,\n  Input, OnChanges, OnDestroy,\n  OnInit, SimpleChanges,\n  ViewChild\n} from '@angular/core';\nimport {Observable, Subscription} from \"rxjs\";\nimport { NgIf } from '@angular/common';\nimport {BoundingBox} from \"../../../models/bounding-box\";\nimport {ArrowBetweenBoxesComponent} from \"../arrow-between-boxes/arrow-between-boxes.component\";\nimport {SVGAccessService} from \"../../../services/svg-access.service\";\n\n@Component({\n    selector: '[arrowElems]',\n    templateUrl: './arrow-between-elems.component.svg',\n    styleUrl: './arrow-between-elems.component.css',\n    standalone: true,\n    imports: [NgIf, ArrowBetweenBoxesComponent]\n})\nexport class ArrowBetweenElemsComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy {\n\n  @Input() startGID!: string;\n  @Input() startSuffix!: string;\n  @Input() endGID!: string;\n  @Input() endSuffix!: string;\n  @Input() arrowType?: string;\n\n  @Input() breaks: BoundingBox[] = [];\n  @Input() text?: string;\n  @Input() style?: string; //todo move into ArrowStyleConfig?\n\n  startId!: string;\n  endId!: string;\n\n  start?: BoundingBox;\n  end?: BoundingBox;\n\n  positioned= false;\n  @ViewChild('arrow') node!: ElementRef<SVGGraphicsElement>;\n\n  changeNotifier: Observable<string>;\n  changeSubscription: Subscription;\n\n  //idea: compute the two input positions as relative to the current elem\n  constructor(\n    private svgAccessService: SVGAccessService,\n    private cdr: ChangeDetectorRef) {\n    this.changeNotifier = this.svgAccessService.listenToPositionChange()\n    this.changeSubscription = this.changeNotifier.subscribe(nextString => {\n      if (nextString == this.startGID || nextString == this.endGID) {\n        setTimeout(() => {\n          this.computePositionsByIds()\n          this.cdr.detectChanges()\n        }, 0)\n      }\n    })\n  }\n\n  ngOnInit() {\n    this.startId = this.startGID+this.startSuffix;\n    this.endId = this.endGID+this.endSuffix;\n  }\n\n  ngOnChanges(_: SimpleChanges) {\n    this.startId = this.startGID+this.startSuffix;\n    this.endId = this.endGID+this.endSuffix;\n    this.computePositionsByIds()\n    this.cdr.detectChanges()\n  }\n\n  ngAfterViewInit() {\n    this.positioned = true;\n    this.computePositionsByIds()\n    this.cdr.detectChanges()\n  }\n\n  private computePositionsByIds() {\n    if (this.node?.nativeElement){\n      let rel = this.node.nativeElement as SVGGraphicsElement\n      let startOpt = this.svgAccessService.getRelativePosition(this.startId, rel)\n      if (startOpt) {\n        this.start = startOpt\n      }\n      let endOpt = this.svgAccessService.getRelativePosition(this.endId, rel)\n      if (endOpt) {\n        this.end = endOpt\n      }\n    } else console.log('No native element yet')\n  }\n\n  ngOnDestroy() {\n    this.changeSubscription.unsubscribe();\n  }\n\n}\n","<svg:g #arrow>\n  <g arrow-between-boxes *ngIf=\"start && end\"\n       [start]=\"start\"\n       [end]=\"end\"\n       [arrowType]=\"arrowType\"\n       [text]=\"text\"\n       [style]=\"style\">\n  </g>\n></svg:g>\n","export class TextDistributor {\n\n  private static determineHowManyChars(w: number): number {\n    return Math.floor(w/7.6)\n  }\n\n  private static determineLines(h: number): number {\n    return Math.floor(h/20)\n  }\n\n  // idea: distribute words over lines,\n  // if a single word is too long for a line, cut it early enough to have three dots afterwards\n  // if you need to indicate that there is more text after the last complete word, also use three dots, but after a break\n  static distributeText(text: string, w: number, h: number): string[] {\n    let distributedText: string[] = [];\n\n    let broken = text?.split(' ')\n    let maxLines = this.determineLines(h)\n    if (maxLines <= 0) {\n      console.error('Text area too low for text ' + text)\n      distributedText = ['...']\n    }\n    for (let i = 0; i < maxLines; i++) {\n      if (broken.length > 0) {\n        distributedText[i] = this.takeNextLine(broken, w)\n      }\n    }\n    // now deal with last line: here we need special care for adding ... if necessary\n    if (broken.length > 0) {\n      // we need to indicate that there is more text - this could be the 4 signs to many...\n      distributedText[maxLines - 1] +=' ...'\n    }\n    return distributedText.filter(w => w != '')\n  }\n\n  // if a single word is too long for a line, cut it early enough to have three dots afterwards\n  static limitSingleWord(word: string, w: number): string {\n    let maxSize = this.determineHowManyChars(w)\n    if (word.length > maxSize) {\n      let ending = '...'\n      // care for far too short width:\n      if (maxSize <= 3) {\n        return ending.substring(0, maxSize)\n      } else {\n        return word.substring(0, maxSize-3)+'...'\n      }\n    } else {\n      return word\n    }\n  }\n\n  // adapts input words array in place by removing all those that are taken into the result\n  static takeNextLine(words: string[], w: number): string {\n    if (words?.length > 0) {\n      let res = this.limitSingleWord(words[0], w)\n      let i = 1;\n      let maxSize = this.determineHowManyChars(w)\n      let testRes = res + ' ' + words[i]\n      while (testRes.length <= maxSize && i < words.length-1) {\n        res = testRes\n        i++\n        testRes = res + ' ' + words[i]\n      }\n      words.splice(0, i)\n      return res;\n    } else return ''\n  }\n}\n","import {\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  Output,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NgFor, NgIf } from '@angular/common';\nimport {TextDistributor} from \"../../utils/text-distributor\";\n\n@Component({\n    selector: '[text-area-svg]',\n    templateUrl: './text-area-svg.component.svg',\n    styleUrl: './text-area-svg.component.css',\n    imports: [NgFor, NgIf, FormsModule]\n})\nexport class TextAreaSvgComponent implements OnChanges {\n  /*\n  a fixed size svg. If the text exceeds the possible size, we will do a ... for now\n   */\n\n  @Input() text!: string\n  @Input() x!: number\n  @Input() y!: number\n  @Input() w!: number\n  @Input() h!: number\n  @Input() singleEdit: boolean = false\n  @Output() textChange = new EventEmitter<string>();\n  //only with singleEdit since that opens an overlay where one can change the text in place\n\n  distributedText: string[] = []\n  isActive: boolean = false;\n\n\n  ngOnChanges() {\n    this.distributeText();\n  }\n\n  handleClick() {\n    if(this.singleEdit) {\n      this.isActive = true\n    }\n  }\n\n  leaveTextInput() {\n    this.textChange.emit(this.text)\n    this.isActive = false;\n  }\n\n  distributeText(){\n    this.distributedText = TextDistributor.distributeText(\n      this.text, this.w, this.h\n    )\n  }\n\n}\n","<svg:text [attr.x]=\"x\" [attr.y]=\"y\" [attr.width]=\"w\" [attr.height]=\"h\" dy=\"0\" [attr.style]=\"\" (click)=\"handleClick()\">\n  <tspan dy=\"1.2em\" [attr.x]=\"x\" *ngFor=\"let line of distributedText\">{{line}}</tspan>\n</svg:text>\n<svg:foreignObject  *ngIf=\"isActive\" [attr.x]=\"x\" [attr.y]=\"y\" [attr.width]=\"w\" [attr.height]=\"h\">\n  <input id=\"text-area\" type=\"text\" [(ngModel)]=\"this.text\" (focusout)=\"leaveTextInput()\"/>\n</svg:foreignObject>\n","/*\n * Public API Surface of arrows\n */\n\nexport * from './lib/models/dragger'\nexport * from './lib/components/draggable/draggable.component';\nexport * from './lib/components/arrows/arrow-between-elems/arrow-between-elems.component';\nexport * from './lib/components/arrows/arrow-between-boxes/arrow-between-boxes.component';\nexport * from './lib/components/arrows/arrow-between-points/arrow-between-points.component';\nexport * from './lib/components/text-area-svg/text-area-svg.component';\nexport * from './lib/services/arrow-style-configuration.service';\nexport * from './lib/services/svg-access.service';\nexport * from './lib/utils/position-helper';\nexport * from './lib/utils/path-layouter';\nexport * from './lib/utils/text-distributor';\n\nexport type {BoundingBox} from './lib/models/bounding-box';\nexport type {ArrowStyleConfiguration} from './lib/models/arrow-style-configuration';\nexport type {Identifiable} from './lib/models/identifiable'; //gId: string - soft connection to Referencable\nexport type {Positionable, Draggable} from './lib/models/positionable';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.SVGAccessService","uuidv4","i1.ArrowStyleConfigurationService"],"mappings":"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"}