{"version":3,"file":"obliczeniowo-elementary-chess.mjs","sources":["../../../../projects/components/chess/enums/enums.ts","../../../../projects/components/chess/components/chess-field/chess-field.component.ts","../../../../projects/components/chess/components/chess-field/chess-field.component.html","../../../../projects/components/chess/classes/chess.ts","../../../../projects/components/chess/components/chess-pawn/chess-pawn.component.ts","../../../../projects/components/chess/components/chess-pawn/chess-pawn.component.html","../../../../projects/components/chess/classes/address.ts","../../../../projects/components/chess/classes/piece.ts","../../../../projects/components/chess/classes/chess-abstract-model.ts","../../../../projects/components/chess/components/chess/chess.component.ts","../../../../projects/components/chess/components/chess/chess.component.html","../../../../projects/components/chess/chess.module.ts","../../../../projects/components/chess/obliczeniowo-elementary-chess.ts"],"sourcesContent":["export enum ChessEnum {\r\n    whiteKing = '♔',\r\n    whiteQueen = '♕',\r\n    whiteRook = '♖',\r\n    whiteBishop = '♗',\r\n    whiteKnight = '♘',\r\n    whitePawn = '♙',\r\n\r\n    blackKing = '♚',\r\n    blackQueen = '♛',\r\n    blackRook = '♜',\r\n    blackBishop = '♝',\r\n    blackKnight = '♞',\r\n    blackPawn = '♟',\r\n\r\n    nonePiece = ''\r\n}\r\n\r\nexport enum ChessColor {\r\n    white,\r\n    black\r\n}\r\n","import { Component, HostBinding, Input } from '@angular/core';\r\nimport { ChessEnum } from '../../enums/enums';\r\n\r\n@Component({\r\n    selector: 'obl-chess-field',\r\n    templateUrl: './chess-field.component.html',\r\n    styleUrls: ['./chess-field.component.scss'],\r\n    standalone: false\r\n})\r\nexport class ChessFieldComponent {\r\n  ChessEnum = ChessEnum;\r\n\r\n  @Input() row!: number;\r\n  @Input() column!: string;\r\n\r\n  @HostBinding('class.chess-field') chessField = true;\r\n\r\n  @HostBinding('class.white-field') get whiteField(): boolean {\r\n    return this.row !== undefined && this.column !== undefined && this.isWhite;\r\n  }\r\n\r\n  @HostBinding('class.black-field') get blackField(): boolean {\r\n    return this.row !== undefined && this.column !== undefined && this.isBlack;\r\n  }\r\n\r\n  get columnIndex(): number {\r\n    return this.column.charCodeAt(0) - 'a'.charCodeAt(0) + 1;\r\n  }\r\n\r\n  get isBlack(): boolean {\r\n    return ((this.row) + (this.columnIndex) % 2) % 2 === 0;\r\n  }\r\n\r\n  get isWhite(): boolean {\r\n    return !this.isBlack;\r\n  }\r\n}\r\n","<ng-content></ng-content>\r\n","import { ChessEnum } from './../enums/enums';\r\n\r\nexport class Chess {\r\n  static isWhite(piece: ChessEnum | undefined): boolean {\r\n    switch (piece) {\r\n      case ChessEnum.whiteBishop:\r\n      case ChessEnum.whiteQueen:\r\n      case ChessEnum.whiteRook:\r\n      case ChessEnum.whiteKnight:\r\n      case ChessEnum.whitePawn:\r\n      case ChessEnum.whiteKing:\r\n        return true;\r\n      default:\r\n        return false;\r\n    }\r\n  }\r\n\r\n  static isBlack(piece: ChessEnum | undefined): boolean {\r\n    return !Chess.isWhite(piece) && piece !== ChessEnum.nonePiece;\r\n  }\r\n}\r\n","import { AfterViewInit, Component, ElementRef, Input, OnDestroy } from '@angular/core';\r\nimport { ChessEnum } from '../../enums/enums';\r\nimport { Chess } from '../../classes/chess';\r\n\r\n@Component({\r\n    selector: 'obl-chess-pawn',\r\n    templateUrl: './chess-pawn.component.html',\r\n    styleUrls: ['./chess-pawn.component.scss'],\r\n    standalone: false\r\n})\r\nexport class ChessPawnComponent implements OnDestroy, AfterViewInit {\r\n  @Input() row!: number;\r\n  @Input() column!: string;\r\n\r\n  @Input() pawnType!: ChessEnum;\r\n\r\n  dragstart = (event: any) => {\r\n    event.dataTransfer.setData('text/plain', null);\r\n  }\r\n\r\n  constructor(private readonly elementRef: ElementRef<HTMLElement>) {}\r\n\r\n  ngAfterViewInit(): void {\r\n    this.elementRef.nativeElement.setAttribute('draggable', 'true');\r\n    this.elementRef.nativeElement.addEventListener('dragstart', this.dragstart, false);\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.elementRef.nativeElement.removeEventListener('dragstart', this.dragstart);\r\n  }\r\n\r\n  isBlack(): boolean {\r\n    return Chess.isBlack(this.pawnType);\r\n  }\r\n}\r\n","<div\r\n  [class]=\"'pawn-field ' + column + row\"\r\n  (dragstart)=\"dragstart($event)\"\r\n  draggable=\"true\"\r\n>\r\n  {{ pawnType }}\r\n</div>\r\n","export type ChessColumn = 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'h';\r\nexport type ChessRow = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\r\n\r\nexport const columns: ChessColumn[] = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'];\r\nexport const rows: ChessRow[] = [1, 2, 3, 4, 5, 6, 7, 8];\r\n\r\nexport class Address {\r\n  column!: ChessColumn;\r\n  row!: ChessRow;\r\n\r\n  constructor(address: string) {\r\n    if (address.length === 2) {\r\n      if (columns.includes(address.charAt(0) as ChessColumn)) {\r\n        this.column = address.charAt(0) as ChessColumn;\r\n      } else {\r\n        throw new Error(`This column not exist ${address.charAt(0)}`);\r\n      }\r\n      const row = parseInt(address.charAt(1), 10);\r\n      if (rows.includes(row as ChessRow)) {\r\n        this.row = row as ChessRow;\r\n      } else {\r\n        throw new Error(`This row not exist: ${row}`);\r\n      }\r\n    }\r\n  }\r\n\r\n  offset(row: number, column: number): Address | undefined {\r\n    const columnIndex = columns.findIndex(columnI => columnI === this.column) + column;\r\n\r\n    if (columnIndex < 0 || columnIndex > 7) {\r\n      return undefined;\r\n    }\r\n\r\n    const rowPos = row + this.row;\r\n\r\n    if (rowPos > 8 || rowPos < 1) {\r\n      return undefined;\r\n    }\r\n\r\n    return new Address(columns[columnIndex] + rowPos);\r\n  }\r\n\r\n  toString(): string {\r\n    return `${this.column}${this.row}`;\r\n  }\r\n}\r\n","import { Address } from './address';\r\nimport { QueryList } from '@angular/core';\r\nimport { ChessPawnComponent } from '../components/chess-pawn/chess-pawn.component';\r\nimport { ChessEnum } from './../enums/enums';\r\nimport { Chess } from './chess';\r\n\r\nexport type ChessPiece = ChessEnum.whiteKing |\r\n  ChessEnum.whiteQueen |\r\n  ChessEnum.whiteRook |\r\n  ChessEnum.whiteBishop |\r\n  ChessEnum.whiteKnight |\r\n  ChessEnum.whitePawn |\r\n  ChessEnum.blackKing |\r\n  ChessEnum.blackQueen |\r\n  ChessEnum.blackRook |\r\n  ChessEnum.blackBishop |\r\n  ChessEnum.blackKnight |\r\n  ChessEnum.blackPawn;\r\n\r\nexport abstract class AbstractPiece {\r\n  protected _type!: ChessPiece;\r\n  public get type(): ChessPiece {\r\n    return this._type;\r\n  }\r\n\r\n  protected _address!: Address | undefined;\r\n  public get address(): Address | undefined {\r\n    return this._address;\r\n  }\r\n\r\n  constructor(type: ChessPiece, address: Address | undefined) {\r\n    this._type = type;\r\n    this._address = address;\r\n  }\r\n\r\n  abstract moveFieldsList(chessPieces: QueryList<ChessPawnComponent>): string[];\r\n\r\n  protected isEmpty(address: Address | undefined, chessPieces: QueryList<ChessPawnComponent>): boolean {\r\n    return address !== undefined &&\r\n      chessPieces.find(\r\n        piece => piece.column === address.column && piece.row === address.row\r\n      )?.pawnType === ChessEnum.nonePiece;\r\n  }\r\n\r\n  protected isOppositePiece(address: Address | undefined, chessPieces: QueryList<ChessPawnComponent>): boolean {\r\n    if (address) {\r\n      if (Chess.isWhite(this._type)) {\r\n        return Chess.isBlack(chessPieces.find(piece => piece.column === address.column && piece.row === address.row)?.pawnType);\r\n      } else {\r\n        return Chess.isWhite(chessPieces.find(piece => piece.column === address.column && piece.row === address.row)?.pawnType);\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n}\r\n\r\nexport class Pawn extends AbstractPiece {\r\n  moveFieldsList(chessPieces: QueryList<ChessPawnComponent>): string[] {\r\n    if (!this.address) {\r\n      return [];\r\n    }\r\n\r\n    const fields: string[] = [];\r\n    const vector: [number, number] = Chess.isWhite(this._type) ? [1, 0] : [-1, 0];\r\n    const start: number = Chess.isWhite(this._type) ? 2 : 7;\r\n\r\n    const oneFieldUp = this.address.offset(vector[0], vector[1]);\r\n    if (this.isEmpty(oneFieldUp, chessPieces) && oneFieldUp) {\r\n      fields.push(oneFieldUp.toString());\r\n      const twoFieldUp = this.address.offset(vector[0] * 2, vector[1]);\r\n      if (this.address.row === start) {\r\n        if (this.isEmpty(twoFieldUp, chessPieces) && twoFieldUp) {\r\n          fields.push(twoFieldUp.toString());\r\n        }\r\n      }\r\n    }\r\n\r\n    const leftField = this.address.offset(vector[0], -1);\r\n    const rightField = this.address.offset(vector[0], 1);\r\n\r\n    if (leftField && this.isOppositePiece(leftField, chessPieces)) {\r\n      fields.push(leftField.toString());\r\n    }\r\n\r\n    if (rightField && this.isOppositePiece(rightField, chessPieces)) {\r\n      fields.push(rightField.toString());\r\n    }\r\n\r\n    return fields;\r\n  }\r\n}\r\n\r\nexport class Knight extends AbstractPiece {\r\n  moveFieldsList(chessPieces: QueryList<ChessPawnComponent>): string[] {\r\n    if (!this.address) {\r\n      return [];\r\n    }\r\n\r\n    const fields: string[] = [];\r\n\r\n    const offsets: [number, number][] = [\r\n      [2, -1],\r\n      [2, 1],\r\n      [1, 2],\r\n      [-1, 2],\r\n      [-2, 1],\r\n      [-2, -1],\r\n      [-1, -2],\r\n      [1, -2]\r\n    ];\r\n\r\n    offsets.forEach(\r\n      offset => {\r\n        const field = this.address?.offset(offset[0], offset[1]);\r\n        // eslint-disable-next-line @typescript-eslint/prefer-optional-chain\r\n        if (field && (this.isEmpty(field, chessPieces) || this.isOppositePiece(field, chessPieces))) {\r\n          fields.push(field.toString());\r\n        }\r\n      }\r\n    );\r\n\r\n    return fields;\r\n  }\r\n}\r\n\r\nexport class Bishop extends AbstractPiece {\r\n  moveFieldsList(chessPieces: QueryList<ChessPawnComponent>): string[] {\r\n    if (!this.address) {\r\n      return [];\r\n    }\r\n\r\n    const fields: string[] = [];\r\n\r\n    const offsets: [number, number][] = [\r\n      [1, -1],\r\n      [1, 1],\r\n      [-1, 1],\r\n      [-1, -1]\r\n    ];\r\n\r\n    offsets.forEach(\r\n      offset => {\r\n        for (let k = 1; k < 9; k++) {\r\n          const field = this.address?.offset(offset[0] * k, offset[1] * k);\r\n          const empty = this.isEmpty(field, chessPieces);\r\n          if (field && (empty || this.isOppositePiece(field, chessPieces))) {\r\n            fields.push(field.toString());\r\n          }\r\n          if (!empty || !field) {\r\n            break;\r\n          }\r\n        }\r\n      }\r\n    );\r\n\r\n    return fields;\r\n  }\r\n}\r\n\r\nexport class Rook extends AbstractPiece {\r\n  moveFieldsList(chessPieces: QueryList<ChessPawnComponent>): string[] {\r\n    if (!this.address) {\r\n      return [];\r\n    }\r\n\r\n    const fields: string[] = [];\r\n\r\n    const offsets: [number, number][] = [\r\n      [1, 0],\r\n      [-1, 0],\r\n      [0, 1],\r\n      [0, -1]\r\n    ];\r\n\r\n    offsets.forEach(\r\n      offset => {\r\n        for (let k = 1; k < 9; k++) {\r\n          const field = this.address?.offset(offset[0] * k, offset[1] * k);\r\n          const empty = this.isEmpty(field, chessPieces);\r\n          // eslint-disable-next-line @typescript-eslint/prefer-optional-chain\r\n          if (field && (empty || this.isOppositePiece(field, chessPieces))) {\r\n            fields.push(field.toString());\r\n          }\r\n          if (!empty || !field) {\r\n            break;\r\n          }\r\n        }\r\n      }\r\n    );\r\n\r\n    return fields;\r\n  }\r\n}\r\n\r\nexport class Queen extends AbstractPiece {\r\n  moveFieldsList(chessPieces: QueryList<ChessPawnComponent>): string[] {\r\n    if (!this.address) {\r\n      return [];\r\n    }\r\n\r\n    const fields: string[] = [];\r\n\r\n    const offsets: [number, number][] = [\r\n      [1, -1],\r\n      [1, 0],\r\n      [1, 1],\r\n      [0, 1],\r\n      [0, -1],\r\n      [-1, 1],\r\n      [-1, 0],\r\n      [-1, -1]\r\n    ];\r\n\r\n    offsets.forEach(\r\n      offset => {\r\n        for (let k = 1; k < 9; k++) {\r\n          const field = this.address?.offset(offset[0] * k, offset[1] * k);\r\n          const empty = this.isEmpty(field, chessPieces);\r\n          if (field && (empty || this.isOppositePiece(field, chessPieces))) {\r\n            fields.push(field.toString());\r\n          }\r\n          if (!empty || !field) {\r\n            break;\r\n          }\r\n        }\r\n      }\r\n    );\r\n\r\n    return fields;\r\n  }\r\n}\r\n\r\nexport class King extends AbstractPiece {\r\n  moveFieldsList(chessPieces: QueryList<ChessPawnComponent>): string[] {\r\n    if (!this.address) {\r\n      return [];\r\n    }\r\n\r\n    const fields: string[] = [];\r\n\r\n    const offsets: [number, number][] = [\r\n      [1, -1],\r\n      [1, 0],\r\n      [1, 1],\r\n      [0, 1],\r\n      [0, -1],\r\n      [-1, 1],\r\n      [-1, 0],\r\n      [-1, -1]\r\n    ];\r\n\r\n    offsets.forEach(\r\n      offset => {\r\n        const field = this.address?.offset(offset[0], offset[1]);\r\n        // eslint-disable-next-line @typescript-eslint/prefer-optional-chain\r\n        if (field && (this.isEmpty(field, chessPieces) || this.isOppositePiece(field, chessPieces))) {\r\n          fields.push(field.toString());\r\n        }\r\n      }\r\n    );\r\n\r\n    return fields;\r\n  }\r\n}\r\n\r\nexport class AbstractPieceFactory {\r\n  static getPiece(type: ChessPiece, address: Address | undefined): AbstractPiece | undefined {\r\n    switch (type) {\r\n      case ChessEnum.blackBishop:\r\n      case ChessEnum.whiteBishop:\r\n        return new Bishop(type, address);\r\n      case ChessEnum.whiteKing:\r\n      case ChessEnum.blackKing:\r\n        return new King(type, address);\r\n      case ChessEnum.whitePawn:\r\n      case ChessEnum.blackPawn:\r\n        return new Pawn(type, address);\r\n      case ChessEnum.whiteQueen:\r\n      case ChessEnum.blackQueen:\r\n        return new Queen(type, address);\r\n      case ChessEnum.whiteRook:\r\n      case ChessEnum.blackRook:\r\n        return new Rook(type, address);\r\n      case ChessEnum.whiteKnight:\r\n      case ChessEnum.blackKnight:\r\n        return new Knight(type, address);\r\n    }\r\n    return undefined;\r\n  }\r\n}\r\n","import { ChessColor } from './../enums/enums';\r\nimport { QueryList } from '@angular/core';\r\nimport { ChessPawnComponent } from '../components/chess-pawn/chess-pawn.component';\r\nimport { ChessEnum } from '../enums/enums';\r\nimport { Address } from './address';\r\nimport { AbstractPiece, AbstractPieceFactory } from './piece';\r\nimport { Chess } from './chess';\r\n\r\nexport interface AddressPiece {\r\n  address: string | undefined;\r\n  piece: ChessEnum;\r\n  chessPieces: QueryList<ChessPawnComponent>;\r\n}\r\n\r\nexport abstract class ChessAbstractModel {\r\n  stopSetOnDrop = false;\r\n  display: { add: boolean } = {\r\n    add: true\r\n  };\r\n\r\n  /**\r\n   * Triggered on dragged\r\n   * @param dragged describe dragged field\r\n   */\r\n  abstract onDragged(dragged: AddressPiece): void;\r\n\r\n  /**\r\n   * Triggered on drop\r\n   * @param dropped Describe dropped field\r\n   * @returns true when dropped is done, false when dropped fail\r\n   */\r\n  abstract onDropped(dropped: AddressPiece): boolean;\r\n}\r\n\r\nexport class ChessDragAndDropModel extends ChessAbstractModel {\r\n  onDragged(dragged: AddressPiece): void {\r\n  }\r\n\r\n  onDropped(dropped: AddressPiece): boolean {\r\n    return true;\r\n  }\r\n}\r\n\r\nexport class ChessPieceMoveModel extends ChessAbstractModel {\r\n  protected draggedPiece: AbstractPiece | undefined;\r\n\r\n  constructor() {\r\n    super();\r\n\r\n    this.stopSetOnDrop = true;\r\n    this.display = {\r\n      add: false\r\n    };\r\n  }\r\n\r\n  onDragged(dragged: AddressPiece): void {\r\n    if (dragged.piece !== ChessEnum.nonePiece) {\r\n      this.draggedPiece = AbstractPieceFactory.getPiece(\r\n        dragged.piece,\r\n        dragged.address && new Address(dragged.address) || undefined\r\n      );\r\n    } else {\r\n      this.draggedPiece = undefined;\r\n    }\r\n  }\r\n\r\n  onDropped(dropped: AddressPiece): boolean {\r\n    if (this.draggedPiece) {\r\n      const list = this.draggedPiece.moveFieldsList(dropped.chessPieces);\r\n\r\n      const droppedField = dropped.chessPieces.find(piece => piece.column + piece.row === dropped.address);\r\n      const draggedToField = dropped.chessPieces.find(\r\n        piece => piece.column + piece.row === (this.draggedPiece?.address?.toString()));\r\n      if (dropped.address && droppedField) {\r\n        if (this.draggedPiece.address) {\r\n          if (list.includes(dropped.address)) {\r\n            droppedField.pawnType = this.pawnPromote(this.draggedPiece.type, new Address(dropped.address));\r\n            if (draggedToField) {\r\n              draggedToField.pawnType = ChessEnum.nonePiece;\r\n            }\r\n            return true;\r\n          }\r\n        } else {\r\n          droppedField.pawnType = this.draggedPiece.type;\r\n          return true;\r\n        }\r\n      } else if (draggedToField) {\r\n        draggedToField.pawnType = this.draggedPiece.type;\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n\r\n  protected pawnPromote(type: ChessEnum, address: Address): ChessEnum {\r\n    if (type === ChessEnum.whitePawn && address.row === 8) {\r\n      return ChessEnum.whiteQueen;\r\n    }\r\n    if (type === ChessEnum.blackPawn && address.row === 1) {\r\n      return ChessEnum.blackQueen;\r\n    }\r\n\r\n    return type;\r\n  }\r\n}\r\n\r\nexport class PlayChessModel extends ChessPieceMoveModel {\r\n  protected moveTurn: ChessColor = ChessColor.white;\r\n\r\n  onDragged(dragged: AddressPiece): void {\r\n    if (\r\n      this.moveTurn === ChessColor.white && Chess.isBlack(dragged.piece) ||\r\n      this.moveTurn === ChessColor.black && Chess.isWhite(dragged.piece)\r\n    ) {\r\n      return;\r\n    }\r\n    super.onDragged(dragged);\r\n  }\r\n\r\n  onDropped(dropped: AddressPiece): boolean {\r\n    if (super.onDropped(dropped)) {\r\n      this.moveTurn = this.moveTurn === ChessColor.black ? ChessColor.white : ChessColor.black;\r\n      this.draggedPiece = undefined;\r\n      return true;\r\n    }\r\n    this.draggedPiece = undefined;\r\n    return false;\r\n  }\r\n}\r\n","import { ChessDragAndDropModel } from './../../classes/chess-abstract-model';\r\nimport { AfterViewInit, Component, ElementRef, Input, OnDestroy, QueryList, ViewChildren } from '@angular/core';\r\nimport { ChessColumn, ChessRow, columns, rows } from '../../classes/address';\r\nimport { ChessAbstractModel } from '../../classes/chess-abstract-model';\r\nimport { ChessEnum } from '../../enums/enums';\r\nimport { ChessPawnComponent } from '../chess-pawn/chess-pawn.component';\r\n\r\n@Component({\r\n    selector: 'obl-chess',\r\n    templateUrl: './chess.component.html',\r\n    styleUrls: ['./chess.component.scss'],\r\n    standalone: false\r\n})\r\nexport class ChessComponent implements AfterViewInit, OnDestroy {\r\n  ChessEnum = ChessEnum;\r\n\r\n  dragged!: HTMLElement;\r\n\r\n  @ViewChildren(ChessPawnComponent) chessPieces!: QueryList<ChessPawnComponent>;\r\n\r\n  @Input() chessPawnsMap: Map<string, ChessEnum> = new Map<string, ChessEnum>();\r\n  @Input() chessModel: ChessAbstractModel = new ChessDragAndDropModel();\r\n\r\n  public get stopSetOnDrop(): boolean {\r\n    return this.chessModel.stopSetOnDrop;\r\n  }\r\n\r\n  private _reverse = false;\r\n  public get reverse(): boolean {\r\n    return this._reverse;\r\n  }\r\n\r\n  @Input()\r\n  public set reverse(value) {\r\n    this._reverse = value;\r\n    if (value) {\r\n      this.rows = rows.reverse();\r\n      this.columns = columns.reverse();\r\n    } else {\r\n      this.rows = rows;\r\n      this.columns = columns;\r\n    }\r\n  }\r\n\r\n  private readonly chessPawnsMapComponent: Map<string, ChessPawnComponent> = new Map<string, ChessPawnComponent>();\r\n\r\n  rows: ChessRow[] = rows.reverse();\r\n  columns: ChessColumn[] = columns;\r\n\r\n  private get hostHtml(): HTMLElement {\r\n    return this.elementRef.nativeElement;\r\n  }\r\n\r\n  dragstart = (event: any) => {\r\n    this.dragged = event.target;\r\n    event.target.style.opacity = 0.5;\r\n    this.chessModel.onDragged(\r\n      {\r\n        address: Array.from(this.dragged.classList).filter(className => className.length === 2)[0],\r\n        piece: this.dragged.innerText as any,\r\n        chessPieces: this.chessPieces\r\n      }\r\n    );\r\n  }\r\n\r\n  dragend = (event: any) => {\r\n    event.target.style.opacity = '';\r\n  }\r\n\r\n  drag = (event: any) => {\r\n  }\r\n\r\n  dragover = (event: any) => {\r\n    event.preventDefault();\r\n  }\r\n\r\n  dragenter = (event: any) => {\r\n    if (event.target.className === 'dropzone') {\r\n      event.target.style.background = 'purple';\r\n    }\r\n  }\r\n\r\n  dragleave = (event: any) => {\r\n    if (event.target.className === 'dropzone') {\r\n      event.target.style.background = '';\r\n    }\r\n  }\r\n\r\n  drop = (event: any) => {\r\n    event.preventDefault();\r\n    const target: HTMLElement = event.target.classList.contains('pawn-field') ? event.target.parentElement : event.target;\r\n    if (target) {\r\n      const pawn: ChessPawnComponent | undefined = this.chessPawnsMapComponent.get(target.className);\r\n      // get name of class that is an address of field\r\n      const name = Array.from(this.dragged.classList).filter(className => className.length === 2)[0];\r\n      const pawnFrom: ChessPawnComponent | undefined = this.chessPawnsMapComponent.get(name);\r\n      if (!this.stopSetOnDrop) {\r\n        if (pawnFrom) {\r\n          pawnFrom.pawnType = ChessEnum.nonePiece;\r\n        }\r\n        if (pawn && (this.dragged.innerText as ChessEnum) !== ChessEnum.nonePiece) {\r\n          pawn.pawnType = this.dragged.innerText as ChessEnum;\r\n        }\r\n      }\r\n      this.chessModel.onDropped(\r\n        {\r\n          address: target.className,\r\n          piece: this.dragged.innerText as any,\r\n          chessPieces: this.chessPieces\r\n        }\r\n      );\r\n    }\r\n  }\r\n\r\n  constructor(private readonly elementRef: ElementRef<HTMLElement>) { }\r\n\r\n  ngAfterViewInit(): void {\r\n    this.chessPieces.forEach((pawn: any) => {\r\n      if (pawn.column && pawn.row) {\r\n        this.chessPawnsMapComponent.set(pawn.column + pawn.row, pawn);\r\n      }\r\n    });\r\n\r\n    this.hostHtml.addEventListener('drag', this.drag, false);\r\n\r\n    this.hostHtml.addEventListener('dragstart', this.dragstart, false);\r\n    this.hostHtml.addEventListener('dragend', this.dragend, false);\r\n    this.hostHtml.addEventListener('dragover', this.dragover, false);\r\n    this.hostHtml.addEventListener('dragenter', this.dragenter, false);\r\n    this.hostHtml.addEventListener('dragleave', this.dragleave, false);\r\n    this.hostHtml.addEventListener('drop', this.drop, false);\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.hostHtml.removeEventListener('drag', this.drag);\r\n    this.hostHtml.removeEventListener('dragstart', this.dragstart);\r\n    this.hostHtml.removeEventListener('dragend', this.dragend);\r\n    this.hostHtml.removeEventListener('dragover', this.dragover);\r\n    this.hostHtml.removeEventListener('dragenter', this.dragenter);\r\n    this.hostHtml.removeEventListener('dragleave', this.dragleave);\r\n    this.hostHtml.removeEventListener('drop', this.drop);\r\n  }\r\n\r\n  setChessPawn(column: string, row: number, pawn: ChessEnum): void {\r\n    this.chessPawnsMap.set(column + row, pawn);\r\n  }\r\n\r\n  moveChessPawn(startColumn: string, startRow: number, endColumn: string, endRow: number): void {\r\n    const chessPawn: ChessEnum = this.getChessPawn(startColumn + startRow);\r\n    if (chessPawn === ChessEnum.nonePiece) {\r\n      return;\r\n    }\r\n    this.setChessPawn(endColumn, endRow, chessPawn);\r\n  }\r\n\r\n  getChessPawn(address: string): ChessEnum {\r\n    const pawn: ChessEnum = this.chessPawnsMap.get(address) as ChessEnum;\r\n    return pawn || ChessEnum.nonePiece;\r\n  }\r\n}\r\n","<div class=\"columns-header\">\r\n  @for (column of columns; track column) {\r\n    <div class=\"column-header\">{{ column }}</div>\r\n  }\r\n</div>\r\n\r\n<div class=\"pawns-and-board\">\r\n  @if (chessModel.display.add) {\r\n    <div class=\"white-pawns\">\r\n      <obl-chess-pawn [pawnType]=\"ChessEnum.whiteKing\"></obl-chess-pawn>\r\n      <obl-chess-pawn [pawnType]=\"ChessEnum.whiteQueen\"></obl-chess-pawn>\r\n      <obl-chess-pawn [pawnType]=\"ChessEnum.whiteRook\"></obl-chess-pawn>\r\n      <obl-chess-pawn [pawnType]=\"ChessEnum.whiteBishop\"></obl-chess-pawn>\r\n      <obl-chess-pawn [pawnType]=\"ChessEnum.whiteKnight\"></obl-chess-pawn>\r\n      <obl-chess-pawn [pawnType]=\"ChessEnum.whitePawn\"></obl-chess-pawn>\r\n    </div>\r\n  }\r\n\r\n  <div>\r\n    @for (row of rows; track $index) {\r\n      <div class=\"row-fields\">\r\n        <div class=\"row-header\">\r\n          <div>{{ row }}</div>\r\n        </div>\r\n\r\n        @for (column of columns; track $index) {\r\n          <obl-chess-field\r\n            class=\"dropzone\"\r\n            [row]=\"row\"\r\n            [column]=\"column\"\r\n            [id]=\"column + row\"\r\n          >\r\n            <obl-chess-pawn\r\n              [ngClass]=\"column + row\"\r\n              [row]=\"row\"\r\n              [column]=\"column\"\r\n              [pawnType]=\"getChessPawn(column + row)\"\r\n              draggable=\"true\"\r\n            >\r\n            </obl-chess-pawn>\r\n          </obl-chess-field>\r\n        }\r\n\r\n        <div class=\"row-header\">\r\n          <div>{{ row }}</div>\r\n        </div>\r\n      </div>\r\n    }\r\n  </div>\r\n\r\n  @if (chessModel.display.add) {\r\n    <div class=\"black-pawns\">\r\n      <obl-chess-pawn [pawnType]=\"ChessEnum.blackKing\"></obl-chess-pawn>\r\n      <obl-chess-pawn [pawnType]=\"ChessEnum.blackQueen\"></obl-chess-pawn>\r\n      <obl-chess-pawn [pawnType]=\"ChessEnum.blackRook\"></obl-chess-pawn>\r\n      <obl-chess-pawn [pawnType]=\"ChessEnum.blackBishop\"></obl-chess-pawn>\r\n      <obl-chess-pawn [pawnType]=\"ChessEnum.blackKnight\"></obl-chess-pawn>\r\n      <obl-chess-pawn [pawnType]=\"ChessEnum.blackPawn\"></obl-chess-pawn>\r\n    </div>\r\n  }\r\n</div>\r\n\r\n<div class=\"columns-header\">\r\n  @for (column of columns; track column) {\r\n    <div class=\"column-header\">{{ column }}</div>\r\n  }\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChessFieldComponent } from './components/chess-field/chess-field.component';\r\nimport { ChessPawnComponent } from './components/chess-pawn/chess-pawn.component';\r\nimport { ChessComponent } from './components/chess/chess.component';\r\n\r\n@NgModule({\r\n  declarations: [\r\n    ChessComponent,\r\n    ChessFieldComponent,\r\n    ChessPawnComponent\r\n  ],\r\n  imports: [\r\n    CommonModule\r\n  ],\r\n  exports: [\r\n    ChessComponent,\r\n    ChessFieldComponent,\r\n    ChessPawnComponent\r\n  ]\r\n})\r\nexport class ChessModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.ChessFieldComponent","i3.ChessPawnComponent"],"mappings":"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"}