{"version":3,"file":"obliczeniowo-elementary-categories-relations.mjs","sources":["../../../../projects/components/categories-relations/components/relation-item/relation-item.component.ts","../../../../projects/components/categories-relations/components/relation-item/relation-item.component.html","../../../../projects/components/categories-relations/components/categories-relations/categories-relations.component.ts","../../../../projects/components/categories-relations/components/categories-relations/categories-relations.component.html","../../../../projects/components/categories-relations/categories-relations.module.ts","../../../../projects/components/categories-relations/obliczeniowo-elementary-categories-relations.ts"],"sourcesContent":["import { Component, ElementRef, EventEmitter, Output, HostListener, HostBinding, input, effect } from '@angular/core';\nimport { Category } from '@obliczeniowo/elementary/categories';\nimport { RelationConnectorComponent } from '@obliczeniowo/elementary/connectors';\nimport { IPoint2D, Point2D } from '@obliczeniowo/elementary/classes';\nimport { MenuComponent } from '@obliczeniowo/elementary/menu';\nimport { Subscription } from 'rxjs';\n\nexport type RelationSide = 'left' | 'right';\n\nexport interface RelationItemClicked {\n  side: RelationSide;\n  category: Category;\n  pos: IPoint2D;\n}\n\n@Component({\n    selector: 'obl-relation-item',\n    templateUrl: './relation-item.component.html',\n    styleUrls: ['./relation-item.component.scss'],\n    standalone: false\n})\nexport class RelationItemComponent {\n  category = input<Category>({ name: 'unknown' });\n\n  side = input<RelationSide>('left');\n\n  relations = input<RelationConnectorComponent[]>([]);\n\n  menu = input<MenuComponent>();\n\n  disabled = input<boolean>();\n\n  @Output() clicked = new EventEmitter<RelationItemClicked>();\n\n  @Output() remove = new EventEmitter<{ category: Category; side: RelationSide }>();\n\n  @Output() editColor = new EventEmitter<{ category: Category; side: RelationSide }>();\n\n  protected subscription!: Subscription;\n\n  protected haveRelations = false;\n\n  @HostListener('click') onClick() {\n    this.clicked.emit({ side: this.side(), category: this.category(), pos: this.position });\n  }\n\n  @Output() hovered = new EventEmitter<RelationItemComponent>();\n\n  protected menuItems = [\n    {\n      id: 1,\n      text: 'Delete',\n      command: 'delete',\n    },\n    {\n      id: 2,\n      text: 'Set color',\n      command: 'set-color',\n    }\n  ]\n\n  @HostListener('mouseover') onMouseOver() {\n    this.hovered.emit(this);\n\n    const menu = this.menu();\n    if (menu && !this.disabled()) {\n      menu.items = this.haveRelations ? this.menuItems : [];\n    }\n  }\n\n  @HostListener('mouseleave') onMouseLeave() {\n    const menu = this.menu();\n    if (menu && !menu?.opened) {\n      menu.items = [];\n    }\n  }\n\n  @HostBinding('class.left') get isLeft() {\n    return this.side() === 'left';\n  }\n\n  @HostBinding('class.right') get isRight() {\n    return this.side() === 'right';\n  }\n\n  constructor(protected elementRef: ElementRef<HTMLElement>) {\n    effect(() => {\n      this.update();\n    })\n\n    effect(() => {\n      const menu = this.menu();\n      if (this.subscription && !this.subscription?.closed) {\n        this.subscription.unsubscribe();\n      }\n      if (!menu) {\n        return;\n      }\n      this.subscription = menu.command.subscribe((command) => {\n        if (menu?.items !== this.menuItems) {\n          return;\n        }\n        switch (command) {\n          case 'delete':\n            this.remove.emit(\n              {\n                category: this.category(),\n                side: this.side()\n              }\n            )\n            if (menu) {\n              menu.items = [];\n            }\n            this.haveRelations = false;\n            break;\n          case 'set-color':\n            this.editColor.emit({\n              category: this.category(),\n              side: this.side()\n            })\n            break;\n          case 'on-close':\n            menu.items = [];\n            break;\n        }\n      })\n    })\n\n    effect(() => {\n      const disabled = this.disabled();\n      const menu = this.menu();\n      if (!disabled && menu) {\n        menu.items = [];\n      }\n    })\n  }\n\n  ngOnDestroy(): void {\n    if (this.subscription && !this.subscription?.closed) {\n      this.subscription.unsubscribe();\n    }\n  }\n\n  update() {\n    if (this.category() && this.relations()) {\n      setTimeout(() => {\n        const items = this.relations().filter(relation => relation.connector?.[this.side()] === this.category().name);\n\n        const dy = 1;\n\n        this.haveRelations = !!items.length;\n\n        let pos: Point2D = this.position as Point2D;\n        pos = new Point2D(pos.x, pos.y - items.length * dy * 0.5);\n\n        items.forEach((item, index) => {\n          item[this.side()] = pos.add(new Point2D(0, dy * index));\n          item.change.detectChanges();\n        })\n      })\n    }\n  }\n\n  get position() {\n    const rect = this.elementRef.nativeElement.getBoundingClientRect() as DOMRect;\n    const parent = this.elementRef.nativeElement.parentElement?.parentElement?.getBoundingClientRect() as DOMRect;\n\n    const side = this.side() === 'left' ? 'right' : 'left';\n\n    const dx = side === 'right' ? 10 : -10;\n\n    return { x: rect[side] - parent.left + dx, y: rect.top + rect.height / 2 - parent.y };\n  }\n}\n","<div class=\"connection-point\"></div>\n{{ category().name }}\n","import { Component, Input, ElementRef, ViewChildren, QueryList, EventEmitter, ChangeDetectorRef, Output, HostListener, ViewChild, input } from '@angular/core';\nimport { Category } from '@obliczeniowo/elementary/categories';\nimport { RelationItemClicked, RelationItemComponent, RelationSide } from '../relation-item/relation-item.component';\nimport { ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors } from '@angular/forms';\nimport { ColorRGB, IPoint2D } from '@obliczeniowo/elementary/classes';\nimport { Connector, RelationConnectorComponent } from '@obliczeniowo/elementary/connectors';\nimport { MenuComponent } from '@obliczeniowo/elementary/menu';\nimport { DialogWrapperComponent } from '@obliczeniowo/elementary/dialogs';\nimport { ColorComponent } from '@obliczeniowo/elementary/color-picker';\n\n/**\n * Relations item let you create corelation between left items and right one in graphical way and modify them\n *\n * [menu] - add context menu component {@link MenuComponent} from {@link MenuModule}. Do not set menu items, this component\n * will set them up by them self\n * [translations] - set the translations using as key current (default) english text and value as new one (translated) to display\n */\n@Component({\n    selector: 'obl-categories-relations',\n    templateUrl: './categories-relations.component.html',\n    styleUrls: ['./categories-relations.component.scss'],\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            multi: true,\n            useExisting: CategoriesRelationsComponent\n        },\n        {\n            provide: NG_VALIDATORS,\n            multi: true,\n            useExisting: CategoriesRelationsComponent\n        }\n    ],\n    standalone: false\n})\nexport class CategoriesRelationsComponent implements ControlValueAccessor {\n  /**\n   * right side categories\n   */\n  @Input() left: Category[] = [];\n  /**\n   * left side categories\n   */\n  @Input() right: Category[] = [];\n  /**\n   * connectors array to create {@link RelationConnectorComponent}\n   */\n  @Input() connectors: Connector[] = [];\n  /**\n   * [translations] - set the translations using as key current (default) english text and value as new one (translated) to display\n   */\n  translations = input<{ [english: string]: string }>({});\n  // context menu component reference\n  menu = input<MenuComponent>();\n\n  @Output() changed = new EventEmitter<{ left: Category[]; right: Category[]; connectors: Connector[] }>();\n\n  @ViewChild(DialogWrapperComponent) color!: DialogWrapperComponent;\n\n  protected width: number = 0;\n  protected height: number = 0;\n\n  observer = new ResizeObserver(() => {\n    this.width = this.elementRef.nativeElement.clientWidth;\n    this.height = this.elementRef.nativeElement.clientHeight;\n\n    this.items?.forEach(item => item.update())\n  });\n\n  protected highlight?: string;\n\n  protected categoryItemSelected?: RelationItemClicked;\n  protected mousePos?: IPoint2D;\n\n  @ViewChildren(RelationConnectorComponent) set relations(relation: QueryList<RelationConnectorComponent>) {\n    setTimeout(() => this.relationsChanged = relation.toArray())\n  };\n\n  @ViewChildren(RelationItemComponent) items!: QueryList<RelationItemComponent>;\n\n  @ViewChild(ColorComponent) colorPicker!: ColorComponent;\n\n  @HostListener('mouseover') onMouseOver() {\n    const menu = this.menu();\n    if (menu) {\n      menu.target = this.elementRef.nativeElement;\n      menu.translations = this.translations();\n    }\n  }\n\n  @Input() disabled?: boolean;\n\n  protected relationsChanged: RelationConnectorComponent[] = [];\n\n  protected target: any;\n\n  protected connectorsSelected?: Connector[];\n\n  constructor(protected elementRef: ElementRef<HTMLElement>, protected changes: ChangeDetectorRef) {\n  }\n\n  onChange = (value: { left: Category[]; right: Category[]; connectors: Connector[] }) => {\n    this.changed.emit(value);\n  };\n\n  onTouched = () => { };\n\n  onMove(event: MouseEvent) {\n    const rect = this.elementRef.nativeElement.getBoundingClientRect();\n    const mousePos = { x: event.x - rect.x, y: event.y - rect.y }\n    if (this.categoryItemSelected) {\n      if (this.categoryItemSelected.side === 'left') {\n        this.mousePos = { x: Math.max(mousePos.x, this.categoryItemSelected?.pos.x + 50), y: mousePos.y }\n      } else {\n        this.mousePos = { x: Math.min(mousePos.x, this.categoryItemSelected?.pos.x), y: mousePos.y }\n      }\n    }\n  }\n\n  writeValue(obj: { left: Category[]; right: Category[]; connectors: Connector[] }): void {\n    Object.assign(this, obj);\n  }\n\n  registerOnChange(onChange: any): void {\n    this.onChange = onChange;\n  }\n\n  registerOnTouched(onTouched: any): void {\n    this.onTouched = onTouched;\n  }\n\n  setDisabledState?(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n  }\n\n  validate(control: any): ValidationErrors | null {\n    return null;\n  }\n\n  ngOnInit() {\n    this.observer.observe(this.elementRef.nativeElement);\n  }\n\n  ngOnDestroy(): void {\n    this.observer.unobserve(this.elementRef.nativeElement);\n  }\n\n  onHoverOverItem(item: RelationItemComponent) {\n    if (this.categoryItemSelected?.side !== item.side()) {\n      this.mousePos = item.position;\n    } else {\n      const { x, y } = this.categoryItemSelected.pos;\n      this.mousePos = { x: this.categoryItemSelected?.side === 'left' ? x + 50 : x - 50, y };\n    }\n  }\n\n  onRemove(item: { category: Category; side: RelationSide }) {\n    this.connectors = this.connectors.filter(connector => connector[item.side] !== item.category.name);\n    const prepare = { left: this.left, right: this.right, connectors: this.connectors };\n\n    this.changed.emit(prepare);\n\n    if (this.onChange) {\n      this.onChange(prepare);\n    }\n    const menu = this.menu();\n    if (menu) {\n      menu.items = [];\n    }\n  }\n\n  setColor(color: ColorRGB) {\n    this.color.close();\n    if (this.connectorsSelected) {\n      this.connectorsSelected.forEach(item => {\n        item.color = color.getHexColorBase;\n      })\n\n      this.connectors = [...this.connectors];\n      const prepare = { left: this.left, right: this.right, connectors: this.connectors };\n      this.changed.emit(prepare);\n      if (this.onChange) {\n        this.onChange(prepare);\n      }\n    }\n  }\n\n  onEditColor(item: { category: Category; side: RelationSide }) {\n    if (this.disabled) {\n      return;\n    }\n\n    this.color.open({ minWidth: '540px' });\n    this.colorPicker.chosenColor = ColorRGB.fromHtmlColor(item.category?.color || '#ff0000');\n    this.connectorsSelected = this.connectors.filter(connector => connector[item.side] === item.category.name)\n\n    const menu = this.menu();\n    if (menu) {\n      menu.items = [];\n    }\n  }\n\n  onEditColorConnector(connector: Connector) {\n    if (this.disabled) {\n      return;\n    }\n\n    this.connectorsSelected = [connector];\n    this.color.open({ minWidth: '540px' });\n    this.colorPicker.chosenColor = ColorRGB.fromHtmlColor(connector.color || '#ff0000');\n    this.colorPicker.ngAfterViewInit();\n  }\n\n  removeConnector(connector: Connector) {\n    if (this.disabled) {\n      return;\n    }\n    this.connectors = this.connectors.filter(conn => !(conn.left === connector.left && conn.right === connector.right));\n    this.onChange({ left: this.left, right: this.right, connectors: this.connectors });\n    this.changes.detectChanges();\n  }\n\n  addConnector(categoryItem: RelationItemClicked) {\n    if (this.disabled) {\n      return;\n    }\n    if (!this.categoryItemSelected) {\n      this.categoryItemSelected = categoryItem;\n      this.mousePos = { x: this.categoryItemSelected.pos.x + (this.categoryItemSelected.side === 'left' ? 50 : -50), y: this.categoryItemSelected.pos.y };\n    } else {\n      if (this.categoryItemSelected.side === categoryItem.side) {\n        this.categoryItemSelected = undefined;\n        return;\n      }\n      if (this.connectors.find(con =>\n        con?.[categoryItem.side] === categoryItem.category.name &&\n        this.categoryItemSelected &&\n        con?.[this.categoryItemSelected.side] === this.categoryItemSelected.category.name\n      )) {\n        this.categoryItemSelected = undefined;\n        return;\n      }\n      this.connectors = [...this.connectors,\n      {\n        [categoryItem.side]: categoryItem.category.name,\n        [this.categoryItemSelected.side]: this.categoryItemSelected.category.name,\n        color: categoryItem.side === 'left' ? categoryItem.category.color : this.categoryItemSelected.category.color\n      } as any].sort((a: Connector, b: Connector) => {\n        return this.left.findIndex(w => w.name === a.left) * this.left.length - this.left.findIndex(w => w.name === b.left) * this.left.length +\n          this.right.findIndex(w => w.name === a.right) - this.right.findIndex(w => w.name === b.right);\n      });\n\n      this.onChange({ left: this.left, right: this.right, connectors: this.connectors });\n\n      this.categoryItemSelected = undefined;\n    }\n  }\n}\n","<svg\n  [attr.width]=\"width\"\n  [attr.height]=\"height\"\n  (mousemove)=\"onMove($event)\"\n  (click)=\"categoryItemSelected = undefined\"\n>\n  @for(connector of connectors; track $index) {\n    <g\n      obl-relation-connector\n      [connector]=\"connector\"\n      [highlighted]=\"highlight\"\n      [disabled]=\"disabled\"\n      [menu]=\"menu()\"\n      [translations]=\"translations()\"\n      (clicked)=\"removeConnector($event)\"\n      (remove)=\"removeConnector($event)\"\n      (editColor)=\"onEditColorConnector($event)\"\n    ></g>\n  }\n\n  @if (categoryItemSelected) {\n    <g\n      obl-relation-connector\n      class=\"selected\"\n      [left]=\"\n        categoryItemSelected.side === 'left' ? categoryItemSelected.pos : mousePos\n      \"\n      [right]=\"\n        categoryItemSelected.side === 'right'\n          ? categoryItemSelected.pos\n          : mousePos\n      \"\n      [defaultColor]=\"'red'\"\n      (clicked)=\"removeConnector($event)\"\n    ></g>\n  }\n</svg>\n\n<div class=\"left-section\">\n  @for(item of left; track item.name) {\n    <obl-relation-item\n      [category]=\"item\"\n      [relations]=\"relationsChanged\"\n      [disabled]=\"disabled\"\n      [menu]=\"menu()\"\n      (mouseover)=\"highlight = item.name\"\n      (mouseleave)=\"highlight = undefined\"\n      (clicked)=\"addConnector($event)\"\n      (hovered)=\"onHoverOverItem($event)\"\n      (remove)=\"onRemove($event)\"\n      (editColor)=\"onEditColor($event)\"\n    ></obl-relation-item>\n  }\n</div>\n\n<div class=\"right-section\">\n  @for (item of right; track item.name) {\n    <obl-relation-item\n      [category]=\"item\"\n      [relations]=\"relationsChanged\"\n      [side]=\"'right'\"\n      [disabled]=\"disabled\"\n      [menu]=\"menu()\"\n      (mouseover)=\"highlight = item.name\"\n      (mouseleave)=\"highlight = undefined\"\n      (clicked)=\"addConnector($event)\"\n      (hovered)=\"onHoverOverItem($event)\"\n      (remove)=\"onRemove($event)\"\n      (editColor)=\"onEditColor($event)\"\n    ></obl-relation-item>\n  }\n</div>\n\n<obl-dialog-wrapper\n  [header]=\"translations()['Color picker'] || 'Color picker'\"\n  #color\n>\n  <obl-color\n    [translations]=\"{\n      red: translations()['Red'] || 'Red',\n      green: translations()['Green'] || 'Green',\n      blue: translations()['Blue'] || 'Blue',\n      alpha: translations()['Alpha'] || 'Transparent'\n    }\"\n    #colorSet\n  ></obl-color>\n  <div class=\"buttons\">\n    <button oblButton (click)=\"setColor(colorSet.chosenColor)\">\n      {{ translations()['Ok'] || 'Ok' }}\n    </button>\n    <button oblButton (click)=\"color.close()\">\n      {{ translations()['Cancel'] || 'Cancel' }}\n    </button>\n  </div>\n</obl-dialog-wrapper>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RelationItemComponent } from './components/relation-item/relation-item.component';\nimport { CategoriesRelationsComponent } from './components/categories-relations/categories-relations.component';\nimport { ConnectorsModule } from '@obliczeniowo/elementary/connectors';\nimport { MenuModule } from '@obliczeniowo/elementary/menu';\nimport { DialogsModule } from '@obliczeniowo/elementary/dialogs';\nimport { ColorPickerModule } from '@obliczeniowo/elementary/color-picker';\nimport { ButtonsModule } from '@obliczeniowo/elementary/buttons';\n\n\n@NgModule({\n  declarations: [\n    RelationItemComponent,\n    CategoriesRelationsComponent,\n  ],\n  imports: [\n    CommonModule,\n    ConnectorsModule,\n    MenuModule,\n    DialogsModule,\n    ColorPickerModule,\n    ButtonsModule\n  ],\n  exports: [\n    CategoriesRelationsComponent\n  ]\n})\nexport class CategoriesRelationsModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i5.RelationItemComponent"],"mappings":"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"}