UNPKG

ngx-bootstrap

Version:
1 lines 10.2 kB
{"version":3,"file":"ngx-bootstrap-rating.mjs","sources":["../../../../src/rating/rating.config.ts","../../../../src/rating/rating.component.ts","../../../../src/rating/rating.component.html","../../../../src/rating/rating.module.ts","../../../../src/rating/ngx-bootstrap-rating.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n/** Default values provider for rating */\n@Injectable({\n providedIn: 'root'\n})\nexport class RatingConfig {\n /** aria label for rating */\n ariaLabel = 'rating';\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n forwardRef,\n HostListener,\n OnInit,\n Provider,\n TemplateRef,\n input,\n output\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { RatingResults } from './models';\nimport { RatingConfig } from './rating.config';\nimport { NgTemplateOutlet } from '@angular/common';\n\nexport const RATING_CONTROL_VALUE_ACCESSOR: Provider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RatingComponent),\n multi: true\n};\n\n@Component({\n selector: 'rating',\n templateUrl: './rating.component.html',\n providers: [RATING_CONTROL_VALUE_ACCESSOR],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [NgTemplateOutlet]\n})\nexport class RatingComponent implements ControlValueAccessor, OnInit {\n /** number of icons */\n max = input<number>(5);\n /** if true will not react on any user events */\n readonly = input<boolean>(false);\n /** array of icons titles, default: ([\"one\", \"two\", \"three\", \"four\", \"five\"]) */\n titles = input<string[]>([]);\n /** custom template for icons */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n customTemplate = input<TemplateRef<any> | undefined>();\n /** fired when icon selected, $event:number equals to selected rating */\n onHover = output<number>();\n /** fired when icon selected, $event:number equals to previous rating value */\n onLeave = output<number>();\n\n onChange = Function.prototype;\n onTouched = Function.prototype;\n /** aria label for rating */\n ariaLabel = 'rating';\n range: RatingResults[] = [];\n value = 0;\n protected preValue?: number;\n\n constructor(private changeDetection: ChangeDetectorRef, config: RatingConfig) {\n Object.assign(this, config);\n }\n\n @HostListener('keydown', ['$event'])\n onKeydown(event: KeyboardEvent): void {\n if ([37, 38, 39, 40].indexOf(event.which) === -1) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n const sign = event.which === 38 || event.which === 39 ? 1 : -1;\n this.rate(this.value + sign);\n }\n\n ngOnInit(): void {\n const maxValue = this.max() || 5;\n const titlesValue = this.titles();\n const titlesArray =\n typeof titlesValue !== 'undefined' && titlesValue.length > 0\n ? titlesValue\n : [];\n this.range = this.buildTemplateObjects(maxValue, titlesArray);\n }\n\n // model -> view\n writeValue(value: number): void {\n if (value % 1 !== value) {\n this.value = Math.round(value);\n this.preValue = value;\n this.changeDetection.markForCheck();\n\n return;\n }\n\n this.preValue = value;\n this.value = value;\n this.changeDetection.markForCheck();\n }\n\n enter(value: number): void {\n if (!this.readonly()) {\n this.value = value;\n this.changeDetection.markForCheck();\n this.onHover.emit(value);\n }\n }\n\n reset(): void {\n if (typeof this.preValue === 'number') {\n this.value = Math.round(this.preValue);\n this.changeDetection.markForCheck();\n this.onLeave.emit(this.value);\n }\n }\n\n registerOnChange(fn: (_: number) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n rate(value: number): void {\n if (!this.readonly() && this.range\n && value >= 0 && value <= this.range.length) {\n this.writeValue(value);\n this.onChange(value);\n }\n }\n\n protected buildTemplateObjects(max: number, titles: string[]): RatingResults[] {\n const result: RatingResults[] = [];\n\n for (let i = 0; i < max; i++) {\n result.push({\n index: i,\n title: titles[i] || i + 1\n });\n }\n\n return result;\n }\n}\n","<span (mouseleave)=\"reset()\" (keydown)=\"onKeydown($event)\" tabindex=\"0\"\n role=\"slider\" aria-valuemin=\"0\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-valuemax]=\"range.length\"\n [attr.aria-valuenow]=\"value\">\n <ng-template #star let-value=\"value\" let-index=\"index\">{{ index < value ? '&#9733;' : '&#9734;' }}</ng-template>\n @for (r of range; track r; let index = $index) {\n <span class=\"sr-only visually-hidden\">({{ index < value ? '*' : ' ' }})</span>\n <span class=\"bs-rating-star\"\n (mouseenter)=\"enter(index + 1)\"\n (click)=\"rate(index + 1)\"\n [title]=\"r.title\"\n [style.cursor]=\"readonly() ? 'default' : 'pointer'\"\n [class.active]=\"index < value\">\n <ng-template [ngTemplateOutlet]=\"customTemplate() || star\"\n [ngTemplateOutletContext]=\"{index: index, value: value}\">\n </ng-template>\n </span>\n }\n</span>\n","import { NgModule } from '@angular/core';\n\nimport { RatingComponent } from './rating.component';\n\n@NgModule({\n imports: [RatingComponent],\n exports: [RatingComponent]\n})\nexport class RatingModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.RatingConfig"],"mappings":"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"}