{"version":3,"file":"obliczeniowo-elementary-hex-button.mjs","sources":["../../../../projects/components/hex-button/components/hex-button/hex-button.component.ts","../../../../projects/components/hex-button/components/hex-button/hex-button.component.html","../../../../projects/components/hex-button/components/hex-extended-button/hex-extended-button.component.ts","../../../../projects/components/hex-button/components/hex-extended-button/hex-extended-button.component.html","../../../../projects/components/hex-button/hex-button.module.ts","../../../../projects/components/hex-button/obliczeniowo-elementary-hex-button.ts"],"sourcesContent":["import { Component, ElementRef, HostBinding, HostListener, Input, EventEmitter, Output, input, effect } from '@angular/core';\r\n\r\nimport { IconResourceService } from '@obliczeniowo/elementary/icons';\r\n\r\n@Component({\r\n    selector: 'g[obl-hex-button]',\r\n    templateUrl: './hex-button.component.html',\r\n    styleUrls: ['./hex-button.component.scss'],\r\n    standalone: false\r\n})\r\nexport class HexButtonComponent {\r\n  /** x pos can be css style like calc(50% + 10px) */\r\n  x = input<string>('0');\r\n  /** y pos can be css style like calc(50% + 10px) */\r\n  y = input<string>('0');\r\n  /** icon name */\r\n  icon = input<string>();\r\n  /** */\r\n  scale = input<number>(1);\r\n  /** */\r\n  @HostBinding('class.disabled')\r\n  @Input() disabled?: boolean;\r\n\r\n  @Output() click: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n  @HostListener('mouseenter') mouseOver() {\r\n    this.hover = true;\r\n  }\r\n\r\n  @HostListener('mouseleave') mouseLeave() {\r\n    this.hover = false;\r\n  }\r\n\r\n  @HostBinding('style.transform') get transform(): string {\r\n    return `translate(${this.x()}, ${this.y()}) scale(${this.scale()})`;\r\n  };\r\n\r\n  @HostBinding('class.hover')\r\n  protected hover = false;\r\n\r\n  clicked() {\r\n    if (!this.disabled) {\r\n      this.click.emit();\r\n    }\r\n  }\r\n\r\n  protected _ray: number = 24;\r\n  protected offset: number = 4;\r\n  protected _iconSvg!: SVGSVGElement | undefined;\r\n  protected _iconWidth: number = 0;\r\n\r\n  get iconWidth(): number {\r\n    return this._iconWidth;\r\n  }\r\n\r\n  readonly k: number = 0.5;\r\n\r\n  iconScale = 1;\r\n\r\n  get ray(): number {\r\n    return this._ray;\r\n  }\r\n\r\n  protected _outside: string = '';\r\n\r\n  get outside(): string {\r\n    return this._outside;\r\n  }\r\n\r\n  protected _inside: string = '';\r\n\r\n  get inside(): string {\r\n    return this._inside;\r\n  }\r\n\r\n  constructor(\r\n    protected icons: IconResourceService,\r\n    protected elementRef: ElementRef<HTMLElement>\r\n  ) {\r\n    this.recalc();\r\n\r\n    effect(() => {\r\n      const iconName = this.icon();\r\n      if (iconName) {\r\n        this.icons.getIcon(iconName).subscribe(iconSvg => {\r\n          this._iconSvg = iconSvg;\r\n          const icon = this.elementRef.nativeElement.querySelector('g.icon');\r\n          if (icon && this._iconSvg) {\r\n            while (icon.firstChild) {\r\n              icon.removeChild(icon.firstChild);\r\n            }\r\n\r\n            icon.innerHTML = this._iconSvg.innerHTML;\r\n\r\n            const viewBox = (this._iconSvg.getAttribute('viewBox') || '').split(' ').map(v => +v)\r\n            if (viewBox.length) {\r\n              this._iconWidth = viewBox[2] - viewBox[0];\r\n              this.iconScale = this.k * 2 * this.ray / (this._iconWidth || 1);\r\n            }\r\n          }\r\n        });\r\n      }\r\n    })\r\n  }\r\n\r\n  protected recalc() {\r\n    const n = 6\r\n    const offset = Math.PI / n;\r\n    const points = (ray: number) => new Array(n).fill(0).map((_, index: number) => {\r\n      const angle = index * Math.PI / (n / 2) + offset;\r\n      return [\r\n        ray * Math.sin(angle),\r\n        ray * Math.cos(angle)\r\n      ].join(',')\r\n    }).join(' ');\r\n    this._outside = points(this.ray);\r\n    this._inside = points(this.ray - this.offset);\r\n  }\r\n}\r\n","<svg:polygon\r\n  [attr.points]=\"outside\"\r\n  class=\"clickable\"\r\n  (click)=\"clicked()\"\r\n></svg:polygon>\r\n\r\n<svg:polygon\r\n  [attr.points]=\"inside\"\r\n  class=\"clickable\"\r\n></svg:polygon>\r\n\r\n<svg:g\r\n  class=\"icon clickable\"\r\n  [style.transform]=\"\r\n    'translate(' +\r\n    (-ray * k) +\r\n    'px, ' +\r\n    (-ray * k) +\r\n    'px)'\r\n    + 'scale(' +\r\n    iconScale +\r\n    ')'\r\n  \"\r\n></svg:g>\r\n","import { Component, Input, SimpleChanges, ChangeDetectorRef, HostBinding } from '@angular/core';\r\nimport { Point2D } from '@obliczeniowo/elementary/classes';\r\n\r\nexport interface HexButtonElement<T extends { [key: string]: any } = {}> {\r\n  icon: string;\r\n  data?: T;\r\n  clicked: () => void;\r\n  pos?: Point2D;\r\n  animation?: number;\r\n  disabled?: boolean;\r\n}\r\n\r\n@Component({\r\n    selector: 'obl-hex-extended-button',\r\n    templateUrl: './hex-extended-button.component.html',\r\n    styleUrls: ['./hex-extended-button.component.scss'],\r\n    standalone: false\r\n})\r\nexport class HexExtendedButtonComponent {\r\n  protected opened = false;\r\n\r\n  readonly ray: number = 24;\r\n\r\n  @Input() elements: HexButtonElement[] = [];\r\n\r\n  translate = 'translate(50%, 50%)';\r\n\r\n  private _width: number = 0;\r\n\r\n  public get width(): number {\r\n    return this.opened && this._width || this.ray * 2;\r\n  }\r\n\r\n  private _height: number = 0;\r\n\r\n  public get height(): number {\r\n    return this.opened && this._height || this.ray * 2;\r\n  }\r\n\r\n  @HostBinding('style.width.px') animatedWidth = this.ray * 2;\r\n  @HostBinding('style.height.px') animatedHeight = this.ray * 2;\r\n\r\n  readonly h = Math.sqrt(3) / 2;\r\n\r\n  readonly rayTranslate = new Point2D(0, this.h * 2);\r\n  readonly move = new Point2D(1.5, -this.h);\r\n\r\n  protected time: any;\r\n\r\n  constructor(protected change: ChangeDetectorRef) { }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes.elements) {\r\n      this.recalc();\r\n    }\r\n  }\r\n\r\n  ngnDestroy() {\r\n    if (this.time) {\r\n      clearInterval(this.time);\r\n    }\r\n  }\r\n\r\n  clicked(element: HexButtonElement) {\r\n    if (!element.disabled) {\r\n      this.toggleOpen();\r\n      element.clicked();\r\n    }\r\n  }\r\n\r\n  protected levelCount(level: number): number {\r\n    return level === 0 && 1 || level * 6;\r\n  }\r\n\r\n  toggleOpen() {\r\n    if (this.time) {\r\n      clearInterval(this.time);\r\n    }\r\n\r\n    this.elements.forEach(e => e.animation = this.opened && 1 || 0);\r\n\r\n    this.opened = !this.opened;\r\n    this.animated();\r\n  }\r\n\r\n  maxRounds(elements: HexButtonElement[] = this.elements || []): number {\r\n    let sum = 1;\r\n    let countRound = 0;\r\n\r\n    while (sum < elements.length + 1) {\r\n      sum += this.levelCount(countRound);\r\n      countRound++;\r\n    }\r\n\r\n    return countRound;\r\n  }\r\n\r\n  protected recalc() {\r\n    const maxRounds = this.maxRounds();\r\n\r\n    if (maxRounds === 0) {\r\n      return;\r\n    }\r\n\r\n    const bray = this.ray + 3;\r\n\r\n    this._width = (1.5 * (maxRounds - 1) + 1) * bray * 2 + 6;\r\n    this._height = (this.h * (maxRounds - 1) * 2 + this.h) * bray * 2 + 6;\r\n    let index = 0;\r\n    for (let dRay = 1; dRay < maxRounds; dRay++) {\r\n      for (let dAngle = 0; dAngle < 6; dAngle++) {\r\n        const angle = Math.PI / 3 * dAngle;\r\n        const ray = this.rayTranslate.multiply(bray * dRay).rotate(-angle);\r\n        for (let dMove = 0; dMove < dRay; dMove++) {\r\n          const move = this.move.multiply(bray * dMove).rotate(-angle);\r\n          if (index < this.elements.length) {\r\n            const t = ray.add(move);\r\n            t.x = Math.floor(t.x);\r\n            t.y = Math.floor(t.y);\r\n            this.elements[index].pos = t;\r\n            this.elements[index].animation = this.opened && 1 || 0;\r\n            index++;\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  protected animated() {\r\n    if (!this.elements.length) {\r\n      return;\r\n    }\r\n\r\n    this.time = setInterval(() => {\r\n      const t = this.elements.findIndex(e => (e?.animation || 0) < 1);\r\n      if (t > -1) {\r\n        for (let i = t; i < this.elements.length; i++) {\r\n          const element = this.elements[i];\r\n          const zero = !this.elements[i].animation;\r\n          element.animation = Math.min((element?.animation || 0) + 0.08, 1);\r\n          if (zero) {\r\n            break;\r\n          }\r\n        }\r\n\r\n        const rounds = this.maxRounds(this.elements.filter(e => e.animation) || []);\r\n\r\n        const bray = this.ray + 3;\r\n\r\n        this.animatedWidth = Math.min(this.animatedWidth + this.ray * 0.5, (1.5 * (rounds - 1) + 1) * bray * 2 + 6);\r\n        this.animatedHeight = Math.min(this.animatedHeight + this.ray * 0.5, (this.h * (rounds - 1) * 2 + this.h) * bray * 2 + 6);\r\n      } else if (this.animatedWidth > this.ray * 2 && !this.opened) {\r\n        this.animatedWidth = Math.max(this.animatedWidth * 0.9, this.ray * 2);\r\n        this.animatedHeight = Math.max(this.animatedHeight * 0.9, this.ray * 2);\r\n      } else {\r\n        clearInterval(this.time);\r\n        this.time = undefined;\r\n      }\r\n      this.change.detectChanges();\r\n    }, 10)\r\n  }\r\n}\r\n","<svg\r\n  [attr.width]=\"width\"\r\n  [attr.height]=\"height\"\r\n  [attr.viewBox]=\"'0 0 ' + width + ' ' + height\"\r\n  [style.minWidth.px]=\"width\"\r\n  [style.minHeight.px]=\"height\"\r\n>\r\n  @if (!opened) {\r\n    <g\r\n      obl-hex-button\r\n      [icon]=\"'add'\"\r\n      x=\"50%\"\r\n      y=\"50%\"\r\n      (click)=\"toggleOpen()\"\r\n    ></g>\r\n  }\r\n\r\n  @if (opened) {\r\n    <g\r\n      obl-hex-button\r\n      [icon]=\"'subtract'\"\r\n      x=\"50%\"\r\n      y=\"50%\"\r\n      (click)=\"toggleOpen()\"\r\n      class=\"central\"\r\n    ></g>\r\n  }\r\n\r\n  @if (opened) {\r\n    @for (element of elements; track $index) {\r\n      <g>\r\n        <g\r\n          obl-hex-button\r\n          [icon]=\"element.icon\"\r\n          [x]=\"'calc(50% + ' + (element?.pos?.x || 0) + 'px)'\"\r\n          [y]=\"'calc(50% + ' + (element?.pos?.y || 0) + 'px)'\"\r\n          [scale]=\"element.animation || 0\"\r\n          [disabled]=\"element.disabled\"\r\n          (click)=\"clicked(element)\"\r\n        ></g>\r\n      </g>\r\n    }\r\n  }\r\n</svg>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { HexButtonComponent } from './components/hex-button/hex-button.component';\r\nimport { HexExtendedButtonComponent } from './components/hex-extended-button/hex-extended-button.component';\r\n\r\n@NgModule({\r\n  declarations: [\r\n    HexButtonComponent,\r\n    HexExtendedButtonComponent\r\n  ],\r\n  imports: [\r\n    CommonModule\r\n  ],\r\n  exports: [\r\n    HexExtendedButtonComponent\r\n  ]\r\n})\r\nexport class HexButtonModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.HexButtonComponent"],"mappings":"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"}