{"version":3,"file":"joaopedrofortes-angular-rating.mjs","sources":["../../../../projects/jpedrofortes/angular-rating-lib/src/lib/angular-rating-lib.service.ts","../../../../projects/jpedrofortes/angular-rating-lib/src/lib/angular-rating-lib.component.ts","../../../../projects/jpedrofortes/angular-rating-lib/src/lib/angular-rating-lib.component.html","../../../../projects/jpedrofortes/angular-rating-lib/src/public-api.ts","../../../../projects/jpedrofortes/angular-rating-lib/src/joaopedrofortes-angular-rating.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class AngularRatingLibService {\r\n\r\n  constructor() { }\r\n\r\n  generateRandomString(length: number): string {\r\n    const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\r\n    let result = '';\r\n    const charactersLength = characters.length;\r\n    \r\n    for (let i = 0; i < length; i++) {\r\n      const randomIndex = Math.floor(Math.random() * charactersLength);\r\n      result += characters.charAt(randomIndex);\r\n    }\r\n    \r\n    return result;\r\n  }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { AfterContentChecked, AfterContentInit, ChangeDetectorRef, Component, EventEmitter, Input, OnDestroy, OnInit, Output, QueryList, ViewChildren } from '@angular/core';\r\nimport { FormsModule, NgModel } from '@angular/forms';\r\nimport { AngularRatingLibService } from './angular-rating-lib.service';\r\n\r\ntype Type = 'star' | 'heart';\r\ntype Limit = 5 | 10;\r\n\r\n@Component({\r\n  selector: 'app-rating',\r\n  standalone: true,\r\n  imports: [FormsModule, CommonModule],\r\n  templateUrl: \"./angular-rating-lib.component.html\",\r\n  styleUrls: ['./angular-rating-lib.component.css']\r\n})\r\nexport class AngularRatingLibComponent implements OnInit, OnDestroy, AfterContentChecked {\r\n\r\n\r\n  private _length: Limit = 5;\r\n\r\n  counterLength: number[] = [];\r\n  readonly ID_COUNTER: string = 'icounter';\r\n\r\n  @Input()\r\n  id: string = this.angularRatingLibService.generateRandomString(5);\r\n\r\n  @Input()\r\n  type: Type = 'star'\r\n\r\n  @Input()\r\n  value: number = 0;\r\n\r\n  @Input()\r\n  hexColor: string = '';\r\n\r\n  @Input()\r\n  set length(length: Limit) {\r\n    this._length = length;\r\n  }\r\n\r\n  @Output()\r\n  valueChange: EventEmitter<number> = new EventEmitter();\r\n\r\n\r\n  @ViewChildren('check') checkboxes: QueryList<any> | undefined;\r\n\r\n  constructor(\r\n    private angularRatingLibService: AngularRatingLibService,\r\n    public cdr: ChangeDetectorRef) {\r\n\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.counterLength = Array.from({ length: this._length }, (_, i) => i + 1)\r\n  }\r\n\r\n\r\n  ngAfterContentChecked(): void {\r\n    if (this.value > 0 && this.checkboxes != undefined) {\r\n      const idCheck = this.ID_COUNTER + this.id + \"-\" + (this.value - 1);\r\n      const check = this.checkboxes?.find(check => check.nativeElement.id === idCheck);\r\n      if (check) {\r\n        check.nativeElement.checked = true;\r\n      }\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n\r\n  }\r\n\r\n  uncheckCheckboxes(except?: any) {\r\n    this.checkboxes?.forEach(checkbox => {\r\n      if (checkbox.nativeElement.id !== except?.id) checkbox.nativeElement.checked = false;\r\n    });\r\n  }\r\n\r\n  setValue(index: number, value: any) {\r\n    if (value.checked === false) {\r\n      this.value = 0;\r\n    } else {\r\n      this.value = index + 1;\r\n    }\r\n\r\n    this.uncheckCheckboxes(value);\r\n    if (value) {\r\n      this.valueChange.emit(this.value);\r\n    };\r\n\r\n    this.cdr.detectChanges();\r\n  }\r\n\r\n  createStyleFromType(index: number) {\r\n    const canFill = index < this.value;\r\n    const styles = {\r\n      ['star']: {\r\n        fill: this.hexColor || 'yellow'\r\n      },\r\n      ['heart']: {\r\n        fill: this.hexColor || 'red'\r\n      }\r\n    }\r\n\r\n    return canFill ? styles[this.type] : undefined\r\n  }\r\n\r\n  style(index: number) {\r\n    return this.createStyleFromType(index);\r\n  }\r\n}\r\n","<div class=\"d-flex w-100 wrap\">\r\n    <label class=\"d-flex w-100\">\r\n        <ng-content select=\"[label]\"></ng-content>\r\n    </label>\r\n\r\n    <div class=\"counter-group d-flex w-100 div-svg\">\r\n        @if (type === 'star') {\r\n            <ng-container [ngTemplateOutlet]=\"renderStar\"></ng-container>\r\n        }@else {\r\n            <ng-container [ngTemplateOutlet]=\"renderHeart\"></ng-container>\r\n        }\r\n    </div>\r\n</div>\r\n\r\n<ng-template #renderStar>\r\n    @for (counter of counterLength; track $index; let index=$index) {\r\n        <input type=\"checkbox\" \r\n            name=\"{{ID_COUNTER}}{{id}}\" \r\n            id=\"{{ID_COUNTER}}{{id}}-{{index}}\" \r\n            #check (change)=\"setValue(index, check)\"\r\n        />\r\n        <label for=\"{{ID_COUNTER}}{{id}}-{{index}}\" class=\"d-flex\">\r\n                <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\" fill=\"#CDCDCD\">\r\n                    <path [ngStyle]=\"style(index)\"\r\n                        d=\"m233-120 65-281L80-590l288-25 112-265 112 265 288 25-218 189 65 281-247-149-247 149Z\" />\r\n                </svg>\r\n        </label>\r\n    }\r\n</ng-template>\r\n\r\n<ng-template #renderHeart>\r\n    @for (counter of counterLength; track $index; let index=$index) {\r\n        <input \r\n            type=\"checkbox\" \r\n            name=\"{{ID_COUNTER}}{{id}}\" \r\n            id=\"{{ID_COUNTER}}{{id}}-{{index}}\"\r\n            #check (change)=\"setValue(index, check)\" \r\n            />\r\n        <label for=\"{{ID_COUNTER}}{{id}}-{{index}}\">\r\n\r\n            <svg xmlns=\"http://www.w3.(org/2000/svg\" viewBox=\"0 -960 960 960\" fill=\"#CDCDCD\">\r\n                <path [ngStyle]=\"style(index)\"\r\n                    d=\"m480-120-58-52q-101-91-167-157T150-447.5Q111-500 95.5-544T80-634q0-94 63-157t157-63q52 0 99 22t81 62q34-40 81-62t99-22q94 0 157 63t63 157q0 46-15.5 90T810-447.5Q771-395 705-329T538-172l-58 52Z\" />\r\n            </svg>\r\n\r\n        </label>\r\n    }\r\n</ng-template>","/*\r\n * Public API Surface of angular-rating-lib\r\n */\r\n\r\nexport * from './lib/angular-rating-lib.service';\r\nexport * from './lib/angular-rating-lib.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AngularRatingLibService"],"mappings":"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"}