{"version":3,"file":"ngx-bar-rating.mjs","sources":["../../../projects/ngx-bar-rating/src/lib/custom-rating.ts","../../../projects/ngx-bar-rating/src/lib/bar-rating.model.ts","../../../projects/ngx-bar-rating/src/lib/bar-rating.ts","../../../projects/ngx-bar-rating/src/lib/bar-rating.html","../../../projects/ngx-bar-rating/src/lib/bar-rating-effect.ts","../../../projects/ngx-bar-rating/src/lib/bar-rating.module.ts","../../../projects/ngx-bar-rating/src/ngx-bar-rating.ts"],"sourcesContent":["import { Directive, inject, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n  selector: '[ratingActive]'\r\n})\r\nexport class ActiveRating {\r\n  template: TemplateRef<any> = inject(TemplateRef);\r\n}\r\n\r\n@Directive({\r\n  selector: '[ratingInactive]'\r\n})\r\nexport class InactiveRating {\r\n  template: TemplateRef<any> = inject(TemplateRef);\r\n}\r\n\r\n@Directive({\r\n  selector: '[ratingFraction]'\r\n})\r\nexport class FractionRating {\r\n  template: TemplateRef<any> = inject(TemplateRef);\r\n}\r\n","import { InjectionToken, Provider } from '@angular/core';\r\n\r\nexport interface BarRatingOptions {\r\n  theme?: string;\r\n  maxValue?: number;\r\n  showText?: boolean;\r\n  readonly?: boolean;\r\n}\r\n\r\nconst defaultOptions: BarRatingOptions = {\r\n  theme: 'default',\r\n  maxValue: 5,\r\n  showText: false,\r\n  readonly: false\r\n};\r\n\r\nexport const BAR_RATING_OPTIONS: InjectionToken<BarRatingOptions> = new InjectionToken<BarRatingOptions>('BAR_RATING_OPTIONS', {\r\n  providedIn: 'root',\r\n  factory: (): BarRatingOptions => defaultOptions\r\n});\r\n\r\nexport function provideBarRatingOptions(options: BarRatingOptions): Provider {\r\n  return {\r\n    provide: BAR_RATING_OPTIONS,\r\n    useValue: { ...defaultOptions, ...options }\r\n  };\r\n}\r\n","import {\r\n  Component,\r\n  inject,\r\n  signal,\r\n  output,\r\n  computed,\r\n  forwardRef,\r\n  numberAttribute,\r\n  booleanAttribute,\r\n  input,\r\n  model,\r\n  contentChild,\r\n  Signal,\r\n  Provider,\r\n  InputSignal,\r\n  ModelSignal,\r\n  WritableSignal,\r\n  OutputEmitterRef,\r\n  ChangeDetectionStrategy,\r\n  InputSignalWithTransform\r\n} from '@angular/core';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { ControlValueAccessor, Validator, NG_VALIDATORS, NG_VALUE_ACCESSOR, UntypedFormControl } from '@angular/forms';\r\nimport { ActiveRating, FractionRating, InactiveRating } from './custom-rating';\r\nimport { BAR_RATING_OPTIONS, BarRatingOptions } from './bar-rating.model';\r\n\r\n/** This allows support [(ngModel)] and ngControl. */\r\nconst RATING_VALUE_ACCESSOR: Provider = {\r\n  provide: NG_VALUE_ACCESSOR,\r\n  useExisting: forwardRef(() => BarRating),\r\n  multi: true\r\n};\r\n\r\n/** This allows control required validation. */\r\nconst RATING_VALUE_VALIDATOR: Provider = {\r\n  provide: NG_VALIDATORS,\r\n  useExisting: forwardRef(() => BarRating),\r\n  multi: true,\r\n};\r\n\r\nenum BarRatingUnitStateEnum {\r\n  active = 'active',\r\n  inactive = 'inactive',\r\n  selected = 'selected',\r\n  fraction = 'fraction'\r\n}\r\n\r\ntype BarRatingUnitState = `${ BarRatingUnitStateEnum }`;\r\n\r\n@Component({\r\n  selector: 'bar-rating',\r\n  templateUrl: './bar-rating.html',\r\n  styleUrl: './bar-rating.scss',\r\n  providers: [RATING_VALUE_ACCESSOR, RATING_VALUE_VALIDATOR],\r\n  imports: [NgTemplateOutlet],\r\n  changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class BarRating implements ControlValueAccessor, Validator {\r\n\r\n  readonly defaultOptions: BarRatingOptions = inject(BAR_RATING_OPTIONS);\r\n\r\n  onChange: OnChangeFn<number> = () => {\r\n  };\r\n\r\n  onTouched: OnTouchedFn = () => {\r\n  };\r\n\r\n  readonly UNITS: typeof BarRatingUnitStateEnum = BarRatingUnitStateEnum;\r\n\r\n  disabled: boolean;\r\n\r\n  /** Current rating. Can be a decimal value like 3.14 */\r\n  rate: ModelSignal<number> = model<number>();\r\n\r\n  /** Maximal rating that can be given using this widget. */\r\n  max: InputSignalWithTransform<number, number | string> = input<number, string | number>(this.defaultOptions.maxValue, {\r\n    transform: numberAttribute\r\n  });\r\n\r\n  /** A flag indicating if rating can be updated. */\r\n  readonly: InputSignalWithTransform<boolean, string | boolean> = input<boolean, string | boolean>(this.defaultOptions.readonly, {\r\n    transform: booleanAttribute,\r\n    alias: 'readonly'\r\n  });\r\n\r\n  /** Set the theme */\r\n  theme: InputSignal<string> = input<string>(this.defaultOptions.theme);\r\n\r\n  /** Show rating title */\r\n  showText: InputSignalWithTransform<boolean, string | boolean> = input<boolean, string | boolean>(this.defaultOptions.showText, {\r\n    transform: booleanAttribute\r\n  });\r\n\r\n  /** Replace rate value with a title */\r\n  titles: InputSignal<string[]> = input<string[]>([]);\r\n\r\n  /** A flag indicating if rating is required for form validation. */\r\n  required: InputSignalWithTransform<boolean, string | boolean> = input<boolean, string | boolean>(false, { transform: booleanAttribute });\r\n\r\n  tabIndex: InputSignalWithTransform<number, number | string> = input<number, string | number>(0, { transform: numberAttribute });\r\n\r\n  hoveredIndex: WritableSignal<number> = signal(null);\r\n\r\n  contexts: Signal<BarRatingUnitState[]> = computed(() => {\r\n    const length: number = this.max();\r\n    const currentRate: number = this.rate();\r\n    const hovered: number = this.hoveredIndex();\r\n\r\n    return Array.from({ length }, (_: unknown, i: number) => {\r\n      if (hovered) {\r\n        return i + 1 <= hovered ? BarRatingUnitStateEnum.active : BarRatingUnitStateEnum.inactive;\r\n      }\r\n      if (i + 1 <= currentRate) {\r\n        return BarRatingUnitStateEnum.selected;\r\n      }\r\n      if ((i + 1 === Math.round(currentRate) && currentRate % 1) >= 0.5) {\r\n        return BarRatingUnitStateEnum.fraction;\r\n      }\r\n      return BarRatingUnitStateEnum.inactive;\r\n    });\r\n  });\r\n\r\n  ratingText: Signal<string | number> = computed(() => {\r\n    const value: string | number = this.hoveredIndex() || this.rate();\r\n    return this.titles()[value] || value;\r\n  });\r\n\r\n  /**\r\n   * A stream that forwards a bar rating click since clicks are not propagated\r\n   */\r\n  barClick: OutputEmitterRef<number> = output<number>();\r\n\r\n  customActiveRating: Signal<ActiveRating> = contentChild(ActiveRating);\r\n  customInActiveRating: Signal<InactiveRating> = contentChild(InactiveRating);\r\n  customFractionRating: Signal<FractionRating> = contentChild(FractionRating);\r\n\r\n  updateRating(value: number): void {\r\n    this.rate.set(value);\r\n    this.onChange(value);\r\n  }\r\n\r\n  /**\r\n   * This is the initial value set to the component\r\n   */\r\n  writeValue(value: number): void {\r\n    if (value !== null) {\r\n      this.rate.set(value);\r\n    }\r\n  }\r\n\r\n  validate(c: UntypedFormControl): { required: boolean } | null {\r\n    return (this.required() && !c.value) ? { required: true } : null;\r\n  }\r\n\r\n  registerOnChange(fn: OnChangeFn<number>): void {\r\n    this.onChange = fn;\r\n  }\r\n\r\n  registerOnTouched(fn: () => OnTouchedFn): void {\r\n    this.onTouched = fn;\r\n  }\r\n\r\n  setDisabledState(isDisabled: boolean): void {\r\n    this.disabled = isDisabled;\r\n  }\r\n\r\n  handleKeydown(event: KeyboardEvent): void {\r\n    if (this.readonly() || this.disabled) return;\r\n\r\n    const currentRating: number = this.rate();\r\n    let newRating: number = currentRating;\r\n\r\n    switch (event.key) {\r\n      case 'ArrowRight':\r\n        newRating = Math.min(currentRating + 1, this.max()); // Increase rating\r\n        event.preventDefault();\r\n        break;\r\n      case 'ArrowLeft':\r\n        newRating = Math.max(currentRating - 1, 1); // Decrease rating\r\n        event.preventDefault();\r\n        break;\r\n      case 'Enter':\r\n      case ' ':\r\n        // Select the current rating (handled in click logic)\r\n        event.preventDefault();\r\n        break;\r\n      default:\r\n        return; // Ignore other keys\r\n    }\r\n\r\n    if (newRating !== currentRating) {\r\n      this.updateRating(newRating);\r\n      this.barClick.emit(newRating);\r\n      this.hoveredIndex.set(newRating);\r\n    }\r\n  }\r\n\r\n  handleClick(event: MouseEvent): void {\r\n    if (this.readonly() || this.disabled) return;\r\n\r\n    const target = event.target as HTMLElement;\r\n    const unitElement = target.closest('.br-unit') as HTMLElement;\r\n    const value: string = unitElement?.getAttribute('data-value');\r\n\r\n    if (value) {\r\n      const rating: number = parseInt(value, 10);\r\n      this.updateRating(rating);\r\n      this.barClick.emit(rating);\r\n    }\r\n  }\r\n}\r\n\r\ntype OnChangeFn<T> = (value: T) => void;\r\ntype OnTouchedFn = () => void;\r\n","<div class=\"br br-{{ customInActiveRating() ? '' : theme() }}\"\r\n     [class.br-readonly]=\"readonly()\"\r\n     [class.br-disabled]=\"disabled\"\r\n     role=\"button\"\r\n     [attr.tabindex]=\"disabled || readonly() ? -1 : tabIndex()\"\r\n     (focusout)=\"onTouched()\"\r\n     (click)=\"handleClick($event)\"\r\n     (keydown)=\"handleKeydown($event)\">\r\n\r\n  <div class=\"br-units\"\r\n       (mouseleave)=\"hoveredIndex.set(0)\">\r\n    @for (unit of contexts(); let i = $index; track i) {\r\n      @let value = i + 1;\r\n      <div class=\"br-unit\"\r\n           [attr.data-value]=\"value\"\r\n           (mouseenter)=\"hoveredIndex.set(value)\">\r\n        @switch (unit) {\r\n          @case (UNITS.fraction) {\r\n            <ng-template [ngTemplateOutlet]=\"customFractionRating()?.template || fractionTemplate\"/>\r\n          }\r\n          @case (UNITS.inactive) {\r\n            <ng-template [ngTemplateOutlet]=\"customInActiveRating()?.template || inactiveTemplate\"/>\r\n          }\r\n          @default {\r\n            <ng-template [ngTemplateOutlet]=\"customActiveRating()?.template || activeTemplate\"/>\r\n          }\r\n        }\r\n      </div>\r\n    }\r\n  </div>\r\n\r\n  @if (showText()) {\r\n    <div class=\"br-text\">{{ ratingText() }}</div>\r\n  }\r\n</div>\r\n\r\n<ng-template #fractionTemplate>\r\n  <div class=\"br-unit-inner br-fraction\"></div>\r\n</ng-template>\r\n\r\n<ng-template #activeTemplate>\r\n  <div class=\"br-unit-inner br-active\"></div>\r\n</ng-template>\r\n\r\n<ng-template #inactiveTemplate>\r\n  <div class=\"br-unit-inner br-inactive\"></div>\r\n</ng-template>\r\n","import { Directive, inject, } from '@angular/core';\r\nimport { BarRating } from './bar-rating';\r\n\r\n@Directive({\r\n  selector: 'bar-rating[effect]',\r\n})\r\nexport class BarRatingEffect {\r\n\r\n  private barRating: BarRating = inject(BarRating, {\r\n    host: true,\r\n    self: true\r\n  });\r\n\r\n  constructor() {\r\n    // Save the original handleClick method\r\n    const originalHandleClick = this.barRating.handleClick.bind(this.barRating);\r\n\r\n    // Override the handleClick method\r\n    this.barRating.handleClick = (event: MouseEvent) => {\r\n      // Call the original handleClick logic\r\n      originalHandleClick(event);\r\n\r\n      // Add custom effect logic\r\n      this.handleClickWithEffect(event);\r\n    };\r\n  }\r\n\r\n  handleClickWithEffect(event: MouseEvent): void {\r\n    const target = event.target as HTMLElement;\r\n    const unitElement = target.closest('.br-unit') as HTMLElement;\r\n\r\n    const clone = unitElement.cloneNode(true) as HTMLElement;\r\n    const rect: DOMRect = unitElement.getBoundingClientRect();\r\n    const parentRect: DOMRect = (event.currentTarget as HTMLElement).getBoundingClientRect();\r\n\r\n    clone.classList.add('br-unit-clone');\r\n    clone.style.left = `${ rect.left - parentRect.left }px`;\r\n    clone.style.top = `${ rect.top - parentRect.top }px`;\r\n    clone.style.width = `${ rect.width }px`;\r\n    clone.style.height = `${ rect.height }px`;\r\n\r\n    const parentElement = event.currentTarget as HTMLElement;\r\n    parentElement.appendChild(clone);\r\n\r\n    clone.addEventListener('animationend', () => {\r\n      parentElement.removeChild(clone);\r\n    });\r\n  }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { BarRating } from './bar-rating';\r\nimport { ActiveRating, InactiveRating, FractionRating } from './custom-rating';\r\nimport { BarRatingEffect } from './bar-rating-effect';\r\n\r\n@NgModule({\r\n  imports: [\r\n    BarRating,\r\n    BarRatingEffect,\r\n    ActiveRating,\r\n    InactiveRating,\r\n    FractionRating\r\n  ],\r\n  exports: [\r\n    BarRating,\r\n    BarRatingEffect,\r\n    ActiveRating,\r\n    InactiveRating,\r\n    FractionRating\r\n  ]\r\n})\r\nexport class BarRatingModule {\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}