{"version":3,"file":"obliczeniowo-elementary-circle-tree-categories-relations.mjs","sources":["../../../../projects/components/circle-tree-categories-relations/components/category-item/category-item.component.ts","../../../../projects/components/circle-tree-categories-relations/components/category-item/category-item.component.html","../../../../projects/components/circle-tree-categories-relations/components/category-relation-group/category-relation-group.component.ts","../../../../projects/components/circle-tree-categories-relations/components/category-relation-group/category-relation-group.component.html","../../../../projects/components/circle-tree-categories-relations/components/circle-categories-tree-relations/circle-categories-tree-relations.component.ts","../../../../projects/components/circle-tree-categories-relations/components/circle-categories-tree-relations/circle-categories-tree-relations.component.html","../../../../projects/components/circle-tree-categories-relations/circle-tree-categories-relations.module.ts","../../../../projects/components/circle-tree-categories-relations/obliczeniowo-elementary-circle-tree-categories-relations.ts"],"sourcesContent":["import { Component, EventEmitter, Output, HostListener, input, effect } from '@angular/core';\r\nimport { ItemModel } from '@obliczeniowo/elementary/circle-categories-tree';\r\nimport { ElementaryMath } from '@obliczeniowo/elementary/math';\r\nimport { IPoint2D } from '@obliczeniowo/elementary/classes';\r\nimport { DirectionalConnectorComponent } from '@obliczeniowo/elementary/connectors';\r\nimport { MenuComponent, MenuItem } from '@obliczeniowo/elementary/menu';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n    selector: 'g[obl-category-item]',\r\n    templateUrl: './category-item.component.html',\r\n    styleUrls: ['./category-item.component.scss'],\r\n    standalone: false\r\n})\r\nexport class CategoryItemComponent {\r\n  //\r\n  ray = input.required<number>();\r\n  //\r\n  angle = input.required<number>();\r\n  //\r\n  textLength = input<number>(100);\r\n  //\r\n  item = input.required<ItemModel>();\r\n  //\r\n  connectors = input<DirectionalConnectorComponent[]>([]);\r\n  //\r\n  menu = input<MenuComponent>();\r\n\r\n  //\r\n  @Output() clicked = new EventEmitter<ItemModel>();\r\n  //\r\n  @Output() over = new EventEmitter<{ item: ItemModel; pos: IPoint2D; angle: number }>();\r\n  //\r\n  @Output() leave = new EventEmitter<undefined>();\r\n  /** */\r\n  @Output() remove = new EventEmitter<ItemModel>();\r\n\r\n  protected reverse!: boolean;\r\n\r\n  protected filtered?: DirectionalConnectorComponent[];\r\n\r\n  protected menuItems: MenuItem[] = [\r\n    {\r\n      id: 1,\r\n      text: 'Delete',\r\n      command: 'delete',\r\n    }\r\n  ];\r\n\r\n  protected subscription?: Subscription;\r\n\r\n  @HostListener('mouseover') mouseOver() {\r\n    this.filtered?.forEach(connector => {\r\n      connector.highlight = true;\r\n      connector.changes.detectChanges();\r\n    })\r\n    this.over.emit({\r\n      item: this.item(),\r\n      pos: this.position(),\r\n      angle: this.angle()\r\n    })\r\n    const menu = this.menu();\r\n    if (menu && this.filtered?.length) {\r\n      menu.items = this.menuItems;\r\n    }\r\n  }\r\n\r\n  @HostListener('mouseleave') mouseLeave() {\r\n    this.filtered?.forEach(connector => {\r\n      connector.highlight = false;\r\n      connector.changes.detectChanges();\r\n    })\r\n    this.leave.emit();\r\n    const menu = this.menu();\r\n    if (menu && !menu?.opened) {\r\n      menu.items = [];\r\n    }\r\n  }\r\n\r\n  constructor() {\r\n    effect(() => {\r\n      this.ray();\r\n      this.angle();\r\n      if (!this.connectors) {\r\n        return;\r\n      }\r\n      this.filtered = this.connectors().filter(connector => connector.startName === this.item().name || connector.endName === this.item().name);\r\n      if (this.filtered.length) {\r\n        const position: IPoint2D = this.position();\r\n\r\n        this.filtered.forEach(connector => {\r\n          if (connector.endName === this.item().name) {\r\n            connector.end = position;\r\n            connector.endAngle = ElementaryMath.degreesToRadians(this.angle());\r\n          } else {\r\n            connector.start = position;\r\n            connector.startAngle = ElementaryMath.degreesToRadians(this.angle()) + Math.PI;\r\n          }\r\n\r\n          if (connector.endAngle !== undefined && connector.startAngle !== undefined) {\r\n            let dAngle = ElementaryMath.fmod(Math.abs(connector.startAngle - connector.endAngle), Math.PI * 2);\r\n            dAngle = (dAngle < Math.PI ? dAngle : 2 * Math.PI - dAngle);\r\n            connector.k = (1 - dAngle / (Math.PI)) * 6.5 + 1.5;\r\n            connector.changes.detectChanges();\r\n          }\r\n        })\r\n      }\r\n    })\r\n\r\n    effect(() => {\r\n      this.reverse = this.angle() > 90 && this.angle() < 270;\r\n    })\r\n\r\n    effect(() => {\r\n      if (this.subscription && !this.subscription.closed) {\r\n        this.subscription.unsubscribe();\r\n      }\r\n      const menu = this.menu();\r\n      if (menu) {\r\n        this.subscription = menu.command.subscribe(command => {\r\n          if (menu?.items !== this.menuItems) {\r\n            return;\r\n          }\r\n          switch (command) {\r\n            case 'delete':\r\n              this.remove.emit(this.item());\r\n              break;\r\n          }\r\n          menu.items = [];\r\n        })\r\n      }\r\n    })\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    if (this.subscription && !this.subscription.closed) {\r\n      this.subscription.unsubscribe();\r\n    }\r\n  }\r\n\r\n  position(): IPoint2D {\r\n    return {\r\n      x: this.ray() + Math.cos(ElementaryMath.degreesToRadians(this.angle())) * (this.r - 10),\r\n      y: this.ray() + Math.sin(ElementaryMath.degreesToRadians(this.angle())) * (this.r - 10)\r\n    }\r\n  }\r\n\r\n  get r() {\r\n    return this.ray() - this.textLength();\r\n  }\r\n}\r\n","<svg:g\r\n  [attr.transform]=\"\r\n    'translate(' +\r\n    ray() +\r\n    ',' +\r\n    ray() +\r\n    ') rotate(' +\r\n    angle() +\r\n    ') translate(' +\r\n    r +\r\n    ', ' +\r\n    (reverse ? -2 : 5) +\r\n    ')' +\r\n    (reverse ? ' rotate(180)' : '')\r\n  \"\r\n>\r\n  <svg:circle\r\n    [attr.cx]=\"reverse ? 10 : -10\"\r\n    [attr.cy]=\"reverse ? -2 : -5\"\r\n    r=\"2\"\r\n  ></svg:circle>\r\n  <svg:text [attr.text-anchor]=\"reverse ? 'end' : 'start'\">\r\n    {{ item().name }}\r\n  </svg:text>\r\n</svg:g>\r\n","import { Component, EventEmitter, input, Output } from '@angular/core';\r\n\r\nimport { GroupClass, ItemModel } from '@obliczeniowo/elementary/circle-categories-tree';\r\nimport { IPoint2D } from '@obliczeniowo/elementary/classes';\r\nimport { DirectionalConnectorComponent } from '@obliczeniowo/elementary/connectors';\r\nimport { ElementaryMath } from '@obliczeniowo/elementary/math';\r\nimport { MenuComponent } from '@obliczeniowo/elementary/menu';\r\n\r\n@Component({\r\n    selector: 'g[obl-category-relation-group]',\r\n    templateUrl: './category-relation-group.component.html',\r\n    styleUrls: ['./category-relation-group.component.scss'],\r\n    standalone: false\r\n})\r\nexport class CategoryRelationGroupComponent {\r\n  // Group class as required\r\n  group = input.required<GroupClass>();\r\n  // Ray of circle\r\n  ray = input<number>(400);\r\n  // max text length\r\n  textLength = input<number>(100);\r\n  //\r\n  connectors = input<DirectionalConnectorComponent[]>([]);\r\n  /** */\r\n  menu = input<MenuComponent>();\r\n  /** */\r\n  @Output() remove = new EventEmitter<ItemModel>();\r\n\r\n  // emit when user click on item leaf or leaf (category) name\r\n  @Output() clicked = new EventEmitter<ItemModel>();\r\n  //\r\n  @Output() over = new EventEmitter<{ item: ItemModel; pos: IPoint2D; angle: number }>();\r\n  //\r\n  @Output() leave = new EventEmitter<undefined>();\r\n\r\n  get r() {\r\n    return this.ray() - this.textLength();\r\n  }\r\n\r\n  endAngle(index: number) {\r\n    return ElementaryMath.degreesToRadians(this.group().dAngle * (index + this.group().offset));\r\n  }\r\n\r\n  startAngle() {\r\n    return ElementaryMath.degreesToRadians(this.group().dAngle * (this.group().items.length / 2 + this.group().offset));\r\n  }\r\n\r\n  end(index: number) {\r\n    const angle = this.endAngle(index);\r\n\r\n    return {\r\n      x: this.ray() + (this.r - 10) * Math.cos(angle),\r\n      y: this.ray() + (this.r - 10) * Math.sin(angle)\r\n    };\r\n  }\r\n}\r\n","@for (item of group().items; track item) {\r\n  <svg:g\r\n    (click)=\"clicked.emit(item)\"\r\n  >\r\n    <svg:g\r\n      obl-category-item\r\n      [angle]=\"group().dAngle * ($index + group().offset) + group().dCategoryOffset\"\r\n      [item]=\"item\"\r\n      [ray]=\"ray()\"\r\n      [connectors]=\"connectors()\"\r\n      [menu]=\"menu()\"\r\n      (clicked)=\"clicked.emit($event)\"\r\n      (over)=\"over.emit($event)\"\r\n      (leave)=\"leave.emit($event)\"\r\n      (remove)=\"remove.emit($event)\"\r\n    ></svg:g>\r\n  </svg:g>\r\n}\r\n","import { Component, EventEmitter, HostBinding, Input, Output, QueryList, SimpleChanges, ViewChildren, ElementRef, HostListener, input } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors } from '@angular/forms';\r\nimport { GroupClass, GroupModel, ItemModel } from '@obliczeniowo/elementary/circle-categories-tree';\r\nimport { IPoint2D, Point2D } from '@obliczeniowo/elementary/classes';\r\n\r\nimport { Connector, DirectionalConnectorComponent } from '@obliczeniowo/elementary/connectors';\r\nimport { ElementaryMath } from '@obliczeniowo/elementary/math';\r\nimport { MenuComponent, MenuItem } from '@obliczeniowo/elementary/menu';\r\n\r\n@Component({\r\n    selector: 'obl-circle-categories-tree-relations',\r\n    templateUrl: './circle-categories-tree-relations.component.html',\r\n    styleUrls: ['./circle-categories-tree-relations.component.scss'],\r\n    providers: [\r\n        {\r\n            provide: NG_VALUE_ACCESSOR,\r\n            multi: true,\r\n            useExisting: CircleCategoriesTreeRelationsComponent\r\n        },\r\n        {\r\n            provide: NG_VALIDATORS,\r\n            multi: true,\r\n            useExisting: CircleCategoriesTreeRelationsComponent\r\n        }\r\n    ],\r\n    standalone: false\r\n})\r\nexport class CircleCategoriesTreeRelationsComponent implements ControlValueAccessor {\r\n  @Input() connectors: Connector[] = [];\r\n\r\n  // Grouping model table\r\n  @Input() groups: GroupModel[] = [];\r\n\r\n  //\r\n  @HostBinding('class.disabled')\r\n  @Input() disabled?: boolean;\r\n\r\n  //\r\n  menu = input<MenuComponent>();\r\n\r\n  // emit when user click on specific item\r\n  @Output() itemClicked = new EventEmitter<{ item: ItemModel; connectors: Connector[] }>();\r\n  //\r\n  @Output() connectorClicked = new EventEmitter<{ left?: ItemModel; right?: ItemModel }>();\r\n  //\r\n  @Output() connectorsChange = new EventEmitter<Connector[]>();\r\n\r\n  protected total: number = 0;\r\n\r\n  // converted/prepared groups to display\r\n  protected groupsClasses: GroupClass[] = [];\r\n  //\r\n  protected newConnector?: Connector;\r\n\r\n  @ViewChildren(DirectionalConnectorComponent) set relations(relation: QueryList<DirectionalConnectorComponent>) {\r\n    setTimeout(() => this.relationsChanged = relation.toArray())\r\n  };\r\n\r\n  protected relationsChanged: DirectionalConnectorComponent[] = [];\r\n\r\n  protected mouse?: IPoint2D;\r\n  protected angle?: number;\r\n\r\n  protected menuItems: MenuItem[] = [\r\n    {\r\n      id: 1,\r\n      text: 'Delete',\r\n      command: 'delete',\r\n    }\r\n  ]\r\n\r\n  constructor(protected element: ElementRef<HTMLElement>) { }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes.groups && this.groups) {\r\n      this.prepareGroups();\r\n    }\r\n  }\r\n\r\n  @HostListener('mousemove', ['$event'])\r\n  protected move(event: MouseEvent) {\r\n    if (this.newConnector) {\r\n      const rect = this.element.nativeElement.getBoundingClientRect();\r\n      const k = 800 / rect.width;\r\n\r\n      const mouse = new Point2D((event.x - rect.left) * k, (event.y - rect.top) * k);\r\n\r\n      if (mouse.subtract(new Point2D(400, 400)).sickLength() > 300 * 300) {\r\n        return;\r\n      }\r\n      this.mouse = { x: (event.x - rect.left) * k, y: (event.y - rect.top) * k };\r\n\r\n      if (this.mouse.x !== 400 && this.mouse.y !== 400) {\r\n        this.angle = Math.atan2(this.mouse.y - 400, this.mouse.x - 400);\r\n      }\r\n    }\r\n  }\r\n\r\n  @HostListener('mouseover') mouseOver() {\r\n    const menu = this.menu();\r\n    if (menu) {\r\n      menu.items = this.menuItems;\r\n      menu.target = this.element.nativeElement;\r\n    }\r\n  }\r\n\r\n  @HostListener('click', ['$event'])\r\n  protected clicked(event: MouseEvent) {\r\n    if (this.newConnector && this.mouse) {\r\n      this.newConnector = undefined;\r\n      this.angle = undefined;\r\n      this.mouse = undefined;\r\n    }\r\n  }\r\n\r\n  protected remove(item: ItemModel) {\r\n    this.connectors = this.connectors.filter(connector => connector.left !== item.name && connector.right !== item.name);\r\n    this.connectorsChange.emit(this.connectors);\r\n  }\r\n\r\n  protected onItemClicked(item: ItemModel) {\r\n    if (this.newConnector && !this.disabled) {\r\n      if (item.name === this.newConnector.left ||\r\n        this.connectors.find(\r\n          connector => connector.left === this.newConnector?.left && connector.right === item.name || connector.right === this.newConnector?.left && connector.left === item.name)) {\r\n        return;\r\n      }\r\n      this.newConnector.right = item.name;\r\n      this.connectors.push(this.newConnector);\r\n      this.connectorsChange.emit(this.connectors);\r\n      this.newConnector = undefined;\r\n      this.update();\r\n    } else {\r\n      this.mouse = undefined;\r\n      this.angle = undefined;\r\n      this.newConnector = {\r\n        left: item.name,\r\n        right: undefined\r\n      }\r\n    }\r\n    this.itemClicked.emit({\r\n      item,\r\n      connectors: this.connectors.filter(connector => connector.left === item.name || connector.right === item.name)\r\n    })\r\n  }\r\n\r\n  protected update() {\r\n    if (this.onChange) {\r\n      this.onChange({ groups: this.groups, connectors: this.connectors });\r\n    } else {\r\n      this.writeValue({ groups: this.groups, connectors: this.connectors });\r\n    }\r\n  }\r\n\r\n  protected onConnectorClicked(connector: Connector) {\r\n    if (!this.disabled) {\r\n      this.connectors = this.connectors.filter(con => con.left !== connector.left || con.right !== connector.right);\r\n      this.update();\r\n    }\r\n\r\n    this.connectorClicked.emit({\r\n      left: this.groupsClasses\r\n        .map(group => group.items)\r\n        .reduce((p, c) => (p = [...p, ...c], p), [])\r\n        .find(item => item.name === connector.left),\r\n      right: this.groupsClasses\r\n        .map(group => group.items)\r\n        .reduce((p, c) => (p = [...p, ...c], p), [])\r\n        .find(item => item.name === connector.right)\r\n    })\r\n  }\r\n\r\n  protected removeConnector(connector: Connector) {\r\n    this.connectors = this.connectors.filter(con => con !== connector);\r\n    this.connectorsChange.emit(this.connectors);\r\n  }\r\n\r\n  protected over(data: any) {\r\n    if (this.newConnector) {\r\n      this.newConnector = { ...this.newConnector, right: data.item.name };\r\n      this.mouse = data.pos;\r\n      this.angle = ElementaryMath.degreesToRadians(data.angle);\r\n    }\r\n  }\r\n\r\n  protected prepareGroups() {\r\n    this.total = this.groups.map(group => group.items.length).reduce((p, c) => (p += c, p), 0);\r\n    const dCategoryAngle = 1.5;\r\n    const dAngle = (360 - dCategoryAngle * this.groups.length) / (this.total || 1);\r\n    let offset = 0;\r\n\r\n    this.groupsClasses = this.groups.map((group, index) => {\r\n      const current = offset;\r\n      offset += group.items.length;\r\n      return new GroupClass(group, dAngle, current, dCategoryAngle * index);\r\n    });\r\n  }\r\n\r\n  onChange: any;\r\n\r\n  onTouched = () => { };\r\n\r\n  writeValue(value: {\r\n    groups: GroupModel[],\r\n    connectors: Connector[]\r\n  }): void {\r\n    Object.assign(this, value);\r\n\r\n    if (this.groups) {\r\n      this.prepareGroups();\r\n    }\r\n  }\r\n\r\n  registerOnChange(onChange: any): void {\r\n    this.onChange = onChange;\r\n  }\r\n\r\n  registerOnTouched(onTouched: any): void {\r\n    this.onTouched = onTouched;\r\n  }\r\n\r\n  setDisabledState?(isDisabled: boolean): void {\r\n    this.disabled = isDisabled;\r\n  }\r\n\r\n  validate(control: any): ValidationErrors | null {\r\n    return null;\r\n  }\r\n}\r\n","<svg viewBox=\"0 0 800 800\">\r\n  @for (connector of connectors; track $index) {\r\n    <g\r\n      obl-directional-connector\r\n      [startName]=\"connector.left\"\r\n      [endName]=\"connector.right\"\r\n      [menu]=\"menuRef\"\r\n      (click)=\"onConnectorClicked(connector)\"\r\n      (remove)=\"removeConnector(connector)\"\r\n    ></g>\r\n  }\r\n\r\n  @for (group of groupsClasses; track $index) {\r\n    <g\r\n      obl-category-relation-group\r\n      [group]=\"group\"\r\n      [connectors]=\"relationsChanged\"\r\n      [menu]=\"menuRef\"\r\n      (clicked)=\"onItemClicked($event)\"\r\n      (over)=\"over($event)\"\r\n      (remove)=\"remove($event)\"\r\n    ></g>\r\n  }\r\n\r\n  @if (newConnector) {\r\n    <g\r\n      obl-directional-connector\r\n      class=\"created\"\r\n      [startName]=\"newConnector.left\"\r\n      [endName]=\"newConnector.right\"\r\n      [end]=\"mouse\"\r\n      [endAngle]=\"angle\"\r\n      [color]=\"'#5fbcd3'\"\r\n    ></g>\r\n  }\r\n</svg>\r\n\r\n<obl-menu #menuRef [target]=\"element.nativeElement\"></obl-menu>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { CircleCategoriesTreeRelationsComponent } from './components/circle-categories-tree-relations/circle-categories-tree-relations.component';\r\nimport { CategoryRelationGroupComponent } from './components/category-relation-group/category-relation-group.component';\r\nimport { CategoryItemComponent } from './components/category-item/category-item.component';\r\nimport { ConnectorsModule } from '@obliczeniowo/elementary/connectors';\r\nimport { MenuModule } from '@obliczeniowo/elementary/menu';\r\n\r\n@NgModule({\r\n  declarations: [\r\n    CircleCategoriesTreeRelationsComponent,\r\n    CategoryRelationGroupComponent,\r\n    CategoryItemComponent\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    ConnectorsModule,\r\n    MenuModule\r\n  ],\r\n  exports: [\r\n    CircleCategoriesTreeRelationsComponent\r\n  ]\r\n})\r\nexport class CircleTreeCategoriesRelationsModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.CategoryItemComponent","i3.CategoryRelationGroupComponent"],"mappings":"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"}