{"version":3,"file":"obliczeniowo-elementary-bowling-pins.mjs","sources":["../../../../projects/components/bowling-pins/components/bowling-pins/bowling-pins.component.ts","../../../../projects/components/bowling-pins/components/bowling-pins/bowling-pins.component.html","../../../../projects/components/bowling-pins/components/bowling-round/bowling-round.component.ts","../../../../projects/components/bowling-pins/components/bowling-round/bowling-round.component.html","../../../../projects/components/bowling-pins/classes/rounds.model.ts","../../../../projects/components/bowling-pins/components/bowling-score/bowling-score.component.ts","../../../../projects/components/bowling-pins/components/bowling-score/bowling-score.component.html","../../../../projects/components/bowling-pins/bowling-pins.module.ts","../../../../projects/components/bowling-pins/obliczeniowo-elementary-bowling-pins.ts"],"sourcesContent":["import {\r\n  Component,\r\n  effect,\r\n  EventEmitter,\r\n  HostBinding,\r\n  input,\r\n  Input,\r\n  model,\r\n  Output,\r\n  SimpleChanges,\r\n} from '@angular/core';\r\n\r\nconst clearPins = [true, true, true, true, true, true, true, true, true, true];\r\nconst clearBlocked = [\r\n  false,\r\n  false,\r\n  false,\r\n  false,\r\n  false,\r\n  false,\r\n  false,\r\n  false,\r\n  false,\r\n  false,\r\n];\r\n\r\n@Component({\r\n    selector: 'obl-bowling-pins',\r\n    templateUrl: './bowling-pins.component.html',\r\n    styleUrl: './bowling-pins.component.scss',\r\n    standalone: false\r\n})\r\nexport class BowlingPinsComponent {\r\n  protected styles: { [style: string]: string | number } = {};\r\n\r\n  pins = model<boolean[]>([...clearPins]);\r\n  @Input() blocked: boolean[] = [...clearBlocked];\r\n\r\n  size = input<number>(20);\r\n\r\n  translations = input<{ [en: string]: string }>({});\r\n\r\n  displayPoints = input<boolean>(true);\r\n  displayReverse = input<boolean>(true);\r\n  displayCancel = input<boolean>(true);\r\n\r\n  @HostBinding('class.disabled')\r\n  @Input()\r\n  disabled?: boolean;\r\n\r\n  @Output() changed = new EventEmitter<number>();\r\n\r\n  constructor() {\r\n    effect(() => {\r\n      this.pins();\r\n      const counted = this.count();\r\n      if (this.counted !== counted) {\r\n        this.counted = counted;\r\n        this.changed.emit(counted);\r\n      }\r\n    });\r\n\r\n    effect(() => {\r\n      const size = this.size();\r\n      this.styles = {\r\n        'margin.px': size / 2,\r\n        'width.px': size,\r\n        'height.px': size,\r\n      };\r\n      return size;\r\n    });\r\n  }\r\n\r\n  counted = 0;\r\n\r\n  switch(index: number) {\r\n    this.pins()[index] = !this.pins()[index];\r\n    this.counted = this.count();\r\n    this.pins.set([...this.pins()]);\r\n    this.changed.emit(this.counted);\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes.blocked) {\r\n      this.blocked.forEach((b, index) => {\r\n        if (b) {\r\n          this.pins()[index] = true;\r\n        }\r\n      });\r\n      const counted = this.count();\r\n      if (this.counted !== counted) {\r\n        this.counted = counted;\r\n        this.changed.emit(counted);\r\n      }\r\n    }\r\n  }\r\n\r\n  count() {\r\n    return this.pins().reduce((p, c) => p + ((!c && 1) || 0), 0);\r\n  }\r\n\r\n  reset() {\r\n    this.pins.set([...clearPins]);\r\n    this.counted = 0;\r\n    this.changed.emit(0);\r\n  }\r\n\r\n  protected reverse() {\r\n    this.pins().forEach((b, index) => {\r\n      if (!this.blocked[index]) {\r\n        this.pins()[index] = !b;\r\n      }\r\n    });\r\n    this.counted = this.count();\r\n    this.pins.set([...this.pins()]);\r\n    this.changed.emit(this.counted);\r\n  }\r\n\r\n  protected clear() {\r\n    this.pins().forEach((b, index) => {\r\n      if (!this.blocked[index]) {\r\n        this.pins()[index] = true;\r\n      }\r\n    });\r\n    this.counted = this.count();\r\n    this.changed.emit(this.counted);\r\n  }\r\n\r\n  protected onKeyUp(event: KeyboardEvent, index: number) {\r\n    if (event.key === ' ' || event.key === 'Enter') {\r\n      this.onClicked(index);\r\n    }\r\n  }\r\n\r\n  protected onClicked(index: number) {\r\n    if (!this.disabled) {\r\n      this.blocked[index] === false && this.switch(index);\r\n    }\r\n  }\r\n}\r\n","<div class=\"row\">\r\n  @for (i of [9, 8, 7, 6]; track i) {\r\n    <div tabindex=0 [class.hit]=\"!pins()[i]\" [class.blocked]=\"blocked[i]\"\r\n      [ngStyle]=\"styles\" (click)=\"onClicked(i)\" (keyup)=\"onKeyUp($event, i)\"></div>\r\n  }\r\n</div>\r\n\r\n<div class=\"row\">\r\n  @for (i of [5, 4, 3]; track i) {\r\n    <div tabindex=0 [class.hit]=\"!pins()[i]\" [class.blocked]=\"blocked[i]\"\r\n      [ngStyle]=\"styles\" (click)=\"onClicked(i)\" (keyup)=\"onKeyUp($event, i)\"></div>\r\n  }\r\n</div>\r\n\r\n<div class=\"row\">\r\n  @for (i of [2, 1]; track i) {\r\n    <div tabindex=0 [class.hit]=\"!pins()[i]\" [class.blocked]=\"blocked[i]\" [ngStyle]=\"styles\"\r\n      (click)=\"onClicked(i)\" (keyup)=\"onKeyUp($event, i)\"></div>\r\n  }\r\n</div>\r\n\r\n<div class=\"row\">\r\n  <div [class.hit]=\"!pins()[0]\" tabindex=0 [class.blocked]=\"blocked[0]\" (click)=\"onClicked(0)\" [ngStyle]=\"styles\"\r\n    (keyup)=\"onKeyUp($event, 0)\">\r\n  </div>\r\n</div>\r\n<div class=\"bottom\">\r\n  @if (displayPoints()) {\r\n    <div class=\"row\">{{ counted }} / 10</div>\r\n  }\r\n\r\n  @if (displayReverse() || displayCancel()) {\r\n    <div class=\"row\">\r\n      @if(displayReverse()) {\r\n        <button oblButton icon=\"list\" [title]=\"'Reverse' | oblTranslation : translations()\"\r\n          [disabled]=\"disabled\" (click)=\"reverse()\"></button>\r\n      }\r\n      @if(displayCancel()) {\r\n        <button oblButton icon=\"cancel\" [title]=\"'Clear' | oblTranslation : translations()\"\r\n          [disabled]=\"disabled\" (click)=\"clear()\"></button>\r\n      }\r\n    </div>\r\n  }\r\n</div>","import { Component, Output, EventEmitter, ViewChild, input, model } from '@angular/core';\r\nimport { BowlingPinsComponent } from '../bowling-pins/bowling-pins.component';\r\n\r\nconst clearPins = [true, true, true, true, true, true, true, true, true, true];\r\n\r\nexport interface BowlingRoundScores {\r\n  first: number;\r\n  second: number;\r\n}\r\n\r\nexport interface BowlingRoundPins {\r\n  first: boolean[];\r\n  second: boolean[];\r\n}\r\n@Component({\r\n    selector: 'obl-bowling-round',\r\n    templateUrl: './bowling-round.component.html',\r\n    styleUrl: './bowling-round.component.scss',\r\n    standalone: false\r\n})\r\nexport class BowlingRoundComponent {\r\n  @ViewChild('first') first!: BowlingPinsComponent;\r\n  @ViewChild('second') second!: BowlingPinsComponent;\r\n\r\n  current = input.required<number>();\r\n\r\n  pins = model<BowlingRoundPins>({ first: [...clearPins], second: [...clearPins] });\r\n\r\n  translations = input<{ [en: string]: string }>({});\r\n\r\n  @Output() changed = new EventEmitter<BowlingRoundScores>();\r\n\r\n  scores: BowlingRoundScores = { first: 0, second: 0 };\r\n\r\n  reverse(bowling: boolean[]) {\r\n    return bowling.map(b => !b);\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    this.pins().first = this.first.pins();\r\n    this.pins().second = this.second.pins();\r\n  }\r\n\r\n  onChanged(witch: 'first' | 'second', score: number) {\r\n    this.scores[witch] = score;\r\n    this.changed.emit({ ...this.scores });\r\n    this.pins.set({ first: [...this.first.pins()], second: [...this.second.pins()] });\r\n  }\r\n\r\n  reset() {\r\n    this.first.reset();\r\n    this.second.reset();\r\n  }\r\n}\r\n","<div class=\"form\">\r\n  <div>\r\n    <p>{{ 'First round' | oblTranslation : translations() }}</p>\r\n    <obl-bowling-pins [pins]=\"pins().first\" (changed)=\"onChanged('first', $event)\" [translations]=\"translations()\"\r\n      #first></obl-bowling-pins>\r\n  </div>\r\n  <div>\r\n    <p>{{ 'Second round' | oblTranslation : translations() }}</p>\r\n    <obl-bowling-pins [pins]=\"pins().second\" [blocked]=\"reverse(first.pins())\" [disabled]=\"current() > 9\"\r\n      [translations]=\"translations()\" (changed)=\"onChanged('second', $event)\" #second></obl-bowling-pins>\r\n  </div>\r\n</div>","export interface ScoreModel {\r\n  first?: number;\r\n  second?: number;\r\n  firstPins?: boolean[];\r\n  secondPins?: boolean[];\r\n}\r\n\r\nexport class RoundsModel {\r\n  protected _list: ScoreModel[] = [];\r\n  protected current = 0;\r\n\r\n  set list(list: ScoreModel[]) {\r\n    if (list.length < 10) {\r\n      return;\r\n    }\r\n    this._list = list;\r\n    this.current = this.list.findIndex(i => i.first === undefined && i.second === undefined);\r\n\r\n    if (this.current === -1) {\r\n      this.current = list.length;\r\n    }\r\n    this.calculate();\r\n  }\r\n\r\n  get list() {\r\n    return this._list;\r\n  }\r\n\r\n  counted: number[] = [];\r\n  totalScore: number = 0;\r\n\r\n  constructor() {\r\n    this.setEmpty();\r\n  }\r\n\r\n  getCurrent() {\r\n    return this.current;\r\n  }\r\n\r\n  setEmpty() {\r\n    this._list = new Array(10).fill(0).map(() => ({}));\r\n    this.current = 0;\r\n    this.counted = [];\r\n    this.totalScore = 0;\r\n  }\r\n\r\n  add(score: ScoreModel) {\r\n    const { current } = this;\r\n\r\n    if (current < this.max()) {\r\n      this._list[this.current] = { ...score };\r\n      this.current++;\r\n      if (this.current === 10 && this.max() === 11 && this.list.length === 10) {\r\n        this.list.push({});\r\n      } else if (this.current === 11 && this.max() === 12 && this.list.length === 11) {\r\n        this.list.push({});\r\n      }\r\n    }\r\n\r\n    this.calculate();\r\n  }\r\n\r\n  protected max() {\r\n    if (this.resultType(9) === 'Strike') {\r\n      if (this.resultType(10) === 'Strike') {\r\n        return 12;\r\n      }\r\n      return 11;\r\n    }\r\n    return 10;\r\n  }\r\n\r\n  protected calculate() {\r\n    this.counted = [];\r\n    this.totalScore = 0;\r\n    for (let i = 0; i < 10; i++) {\r\n      this.counted.push(this.count(i));\r\n    }\r\n    this.totalScore = this.total();\r\n  }\r\n\r\n  protected total() {\r\n    return this.list.reduce((p, _, index) => p + (index < 10 ? this.count(index) : 0), 0);\r\n  }\r\n\r\n  protected count(index: number) {\r\n    let sum = this.sum(index);\r\n    const result = this.resultType(index);\r\n\r\n    if (result === 'Strike') {\r\n      sum += this.sum(index + 1);\r\n      if (this.resultType(index + 1) === 'Strike') {\r\n        sum += this.sum(index + 2);\r\n      }\r\n    } else if (result === 'Spare') {\r\n      sum += this.sum(index + 1);\r\n    }\r\n    return sum;\r\n  }\r\n\r\n  /** only to use inside of class as helper */\r\n  protected sum(index: number) {\r\n    const score = this.list[index];\r\n\r\n    if (score) {\r\n      return (score.first || 0) + (score.second || 0);\r\n    }\r\n    return 0;\r\n  }\r\n\r\n  /** checking type to calculate */\r\n  resultType(index: number): 'Strike' | 'Spare' | 'Open' | undefined {\r\n    const score = this.list[index];\r\n\r\n    if (score) {\r\n      if (score.first === 10) {\r\n        return 'Strike';\r\n      } else if ((score.first || 0) + (score.second || 0) === 10) {\r\n        return 'Spare';\r\n      } else {\r\n        return 'Open';\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n}\r\n","import { Component, effect, input, model } from '@angular/core';\r\n\r\nimport { RoundsModel, ScoreModel } from '../../classes/rounds.model';\r\nimport { BowlingRoundComponent } from '../bowling-round/bowling-round.component';\r\n\r\n@Component({\r\n    selector: 'obl-bowling-score',\r\n    templateUrl: './bowling-score.component.html',\r\n    styleUrl: './bowling-score.component.scss',\r\n    standalone: false\r\n})\r\nexport class BowlingScoreComponent {\r\n  protected scores = new RoundsModel();\r\n\r\n  scoring = model<ScoreModel[]>([]);\r\n\r\n  editMode = input<boolean>(true);\r\n\r\n  translations = input<{ [en: string]: string }>({});\r\n\r\n  constructor() {\r\n    effect(() => {\r\n      this.scores.list = this.scoring();\r\n    })\r\n  }\r\n\r\n  add(round: BowlingRoundComponent) {\r\n    this.scores.add({\r\n      ...round.scores,\r\n      firstPins: [...round.pins().first],\r\n      secondPins: [...round.pins().second],\r\n    });\r\n\r\n    this.scoring.set(this.scores.list);\r\n\r\n    round.reset();\r\n  }\r\n\r\n  reset(round: BowlingRoundComponent) {\r\n    this.scores.setEmpty();\r\n    this.scoring.set(this.scores.list);\r\n    round.reset();\r\n  }\r\n}\r\n","<div>\r\n  <table>\r\n    <thead>\r\n      <tr>\r\n        <td>Frame</td>\r\n        @for (score of scores.list; track score) {\r\n          <td colspan=\"2\">\r\n            {{ $index + 1 }}\r\n          </td>\r\n        }\r\n        <td>Total score</td>\r\n      </tr>\r\n    </thead>\r\n    <tbody>\r\n      <tr>\r\n        <td>Scores</td>\r\n        @for (score of scores.list; track $index) {\r\n          <td>\r\n            @if (score.firstPins) {\r\n              <obl-bowling-pins\r\n                [size]=\"3\"\r\n                [pins]=\"score.firstPins\"\r\n                [disabled]=\"true\"\r\n                [displayCancel]=\"false\"\r\n                [displayPoints]=\"false\"\r\n                [displayReverse]=\"false\"\r\n              ></obl-bowling-pins>\r\n            } @else {\r\n              {{ score.first }}\r\n            }\r\n          </td>\r\n          <td>\r\n            @if (score.secondPins) {\r\n              <obl-bowling-pins\r\n                [size]=\"3\"\r\n                [pins]=\"score.secondPins\"\r\n                [disabled]=\"true\"\r\n                [displayCancel]=\"false\"\r\n                [displayPoints]=\"false\"\r\n                [displayReverse]=\"false\"\r\n              ></obl-bowling-pins>\r\n            } @else {\r\n              {{ score.second }}\r\n            }\r\n          </td>\r\n        }\r\n      </tr>\r\n      <tr>\r\n        <td>Running total:</td>\r\n        @for (score of scores.list; track score) {\r\n          <td colspan=\"2\">\r\n            {{ scores.counted[$index] }}\r\n          </td>\r\n        }\r\n        <td>\r\n          {{ scores.totalScore }}\r\n        </td>\r\n      </tr>\r\n    </tbody>\r\n  </table>\r\n</div>\r\n\r\n@if (editMode()) {\r\n  <p>Click on pin to mark it as hit</p>\r\n  <obl-bowling-round [current]=\"scores.getCurrent()\" #round></obl-bowling-round>\r\n  <div class=\"row\">\r\n    <button oblButton (click)=\"add(round)\">\r\n      {{ 'Add' | oblTranslation : translations() }}\r\n    </button>\r\n    <button oblButton (click)=\"reset(round)\">\r\n      {{ 'Reset' | oblTranslation : translations() }}\r\n    </button>\r\n  </div>\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { BowlingPinsComponent } from './components/bowling-pins/bowling-pins.component';\r\nimport { ButtonsModule } from '@obliczeniowo/elementary/buttons';\r\nimport { TextPipesModule } from '@obliczeniowo/elementary/text-pipes';\r\nimport { BowlingRoundComponent } from './components/bowling-round/bowling-round.component';\r\nimport { BowlingScoreComponent } from './components/bowling-score/bowling-score.component';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    BowlingPinsComponent,\r\n    BowlingRoundComponent,\r\n    BowlingScoreComponent\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    ButtonsModule,\r\n    TextPipesModule,\r\n    TextPipesModule\r\n  ],\r\n  exports: [\r\n    BowlingPinsComponent,\r\n    BowlingRoundComponent,\r\n    BowlingScoreComponent\r\n  ]\r\n})\r\nexport class BowlingPinsModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["clearPins","i1.BowlingPinsComponent","i2","i1","i2.BowlingPinsComponent","i3.BowlingRoundComponent","i4"],"mappings":"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"}