{"version":3,"file":"acorex-components-rate-picker.mjs","sources":["../../../../packages/components/rate-picker/src/lib/calculatePercentage.ts","../../../../packages/components/rate-picker/src/lib/rate-picker.component.ts","../../../../packages/components/rate-picker/src/lib/rate-picker.component.html","../../../../packages/components/rate-picker/src/lib/rate-picker.module.ts","../../../../packages/components/rate-picker/src/acorex-components-rate-picker.ts"],"sourcesContent":["/**\n * Calculates the horizontal position of a pointer event (mouse or touch) as a percentage\n * of the target element's width.\n *\n * @param event - The mouse or touch event to get the pointer position from.\n * @returns The percentage of the event's position relative to the target element's width,\n *          or -1 if the event is invalid.\n *\n * @remarks\n * - For `MouseEvent`, it uses the `clientX` property.\n * - For `TouchEvent`, it uses the `clientX` of the first touch point.\n * - Returns `-1` if the event is neither a valid `MouseEvent` nor a `TouchEvent`.\n *\n * @example\n * ```typescript\n * document.addEventListener('click', function(event) {\n *   const percentage = getPointerPercentage(event);\n *   console.log(`Click position: ${percentage.toFixed(2)}% of the element's width`);\n * });\n *\n * document.addEventListener('touchstart', function(event) {\n *   const percentage = getPointerPercentage(event);\n *   console.log(`Touch position: ${percentage.toFixed(2)}% of the element's width`);\n * });\n * ```\n */\nexport function getPointerPercentage(event: MouseEvent | TouchEvent): number {\n  let clientX: number;\n\n  if (event instanceof MouseEvent) {\n    clientX = event.clientX; // Mouse event uses clientX\n  } else if (event instanceof TouchEvent && event.touches.length > 0) {\n    clientX = event.touches[0].clientX; // Touch event uses the first touch's clientX\n  } else {\n    return -1; // Return -1 for invalid events\n  }\n\n  // Use currentTarget to get the bounding box of the element the event listener is attached to\n  const rect = (event.currentTarget as HTMLElement).getBoundingClientRect();\n  const clickX = clientX - rect.left; // Calculate X position relative to the element\n  const divWidth = rect.width; // Get the width from the bounding box\n  const percentage = (clickX / divWidth) * 100; // Calculate percentage\n\n  return percentage;\n}\n","import { AXComponent, AXStyleColorType, AXValuableComponent, MXValueComponent } from '@acorex/cdk/common';\nimport {\n  Component,\n  computed,\n  effect,\n  ElementRef,\n  forwardRef,\n  HostBinding,\n  inject,\n  input,\n  Renderer2,\n  signal,\n  viewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { getPointerPercentage } from './calculatePercentage';\n\n/**\n * @description\n * The `AXRatePickerComponent` provides a customizable rating picker.\n * The component allows users to select a rating between 0 and the defined maximum.\n * It supports transitions, dynamic value changes, and hover states.\n *\n * @example\n * <ax-rate-picker [max]=\"5\" [readonly]=\"false\" [disabled]=\"false\"></ax-rate-picker>\n */\n@Component({\n  selector: 'ax-rate-picker',\n  templateUrl: './rate-picker.component.html',\n  styleUrls: ['./rate-picker.component.css'],\n  encapsulation: ViewEncapsulation.None,\n\n  inputs: ['readonly', 'disabled'],\n  providers: [\n    { provide: AXValuableComponent, useExisting: AXRatePickerComponent },\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => AXRatePickerComponent),\n      multi: true,\n    },\n    { provide: AXComponent, useExisting: AXRatePickerComponent },\n  ],\n})\nexport class AXRatePickerComponent extends MXValueComponent<number> {\n  /**\n   * @description\n   * The icon to be used for each rating point.\n   * @default 'fa-star'\n   */\n  readonly iconName = input('fa-star');\n\n  readonly color = input<AXStyleColorType>('warning');\n\n  /**\n   * @description\n   * Maximum value for the rating.\n   * Defines how many rating points are available.\n   * @default 5\n   */\n  readonly max = input(5);\n\n  /**\n   * @description\n   * Defines the step increment between rating values.\n   * The rating value will be rounded to the nearest multiple of this step.\n   * @default 0.01\n   */\n  readonly step = input(0.01);\n\n  /**\n   * @description\n   * Whether the rating should have a transition effect when changing values.\n   * @default true\n   */\n  readonly hasTransition = input(true);\n\n  /**\n   * @description\n   * The percentage of the current rating value relative to the maximum rating.\n   */\n  protected ratePercentage = computed(() => Math.round((this.currentValue() / this.max()) * 10000) / 100);\n\n  /**\n   * @description\n   * The current rating value as a signal.\n   */\n  private currentValue = signal(this.max());\n\n  /**\n   * @description\n   * State for tracking hover status and previous value.\n   */\n  private prevState: { ishover: boolean; previousValue?: number } = {\n    ishover: false,\n    previousValue: undefined,\n  };\n\n  /**\n   * @description\n   * Reference to the container element.\n   */\n  containerEl = viewChild.required<ElementRef>('c');\n\n  /**\n   * @description\n   * Reference to the rating element.\n   */\n  ratingEl = viewChild.required<ElementRef>('r');\n\n  /**\n   * @description\n   * Renderer for manipulating styles.\n   */\n  renderer = inject(Renderer2);\n\n  /**\n   * @description\n   * Array of rating values from 1 to `max`.\n   */\n  protected rates = computed(() =>\n    Array(this.max())\n      .fill(0)\n      .map((_, index) => index + 1),\n  );\n\n  /**\n   * @description\n   * Initializes the component and sets up value change subscription.\n   */\n  constructor() {\n    super();\n    effect(() => {\n      if (!this.hasTransition()) {\n        this.renderer.removeStyle(this.ratingEl().nativeElement, 'transition');\n      }\n      return this.hasTransition();\n    });\n    this.onValueChanged.subscribe((val: { value }) => {\n      if (val.value < 0) {\n        this.currentValue.set(0);\n        console.warn('ax-rate-picker: value cant be negative!');\n      } else if (val.value > this.max()) {\n        this.currentValue.set(this.max());\n        console.warn('ax-rate-picker: value cant be more than max!');\n      } else {\n        this.currentValue.set(val.value);\n      }\n    });\n  }\n\n  /**\n   * @description\n   * Calculates and updates the rating based on the mouse or touch event.\n   *\n   * @param event - The mouse or touch event triggering the rating calculation.\n   */\n  protected calculateRate(event: MouseEvent | TouchEvent): void {\n    if (this.hasTransition()) {\n      this.renderer.removeStyle(this.ratingEl().nativeElement, 'transition');\n    }\n    event.preventDefault();\n    if (!this.readonly && !this.disabled) {\n      const pointerPercentage = getPointerPercentage(event);\n      if (pointerPercentage === -1) {\n        return console.warn('Only support touch and click events.');\n      }\n      const value = this.roundToStep(pointerPercentage);\n      const decimals = this.countDecimals(this.step());\n      if (this.prevState.ishover === true) {\n        this.currentValue.set(value);\n      } else {\n        this.commitValue(Number(value.toFixed(decimals)));\n        this.mouseEnter();\n      }\n    }\n  }\n\n  /**\n   * @description\n   * Rounds the rating value to the nearest step.\n   *\n   * @param percentage - The calculated percentage from pointer event.\n   * @returns The rounded rating value.\n   */\n  private roundToStep(percentage: number): number {\n    const value = (percentage / 100) * this.max();\n    const value2 = Math.round(value / (this.step() || 0.01)) * this.step();\n    return value2;\n  }\n\n  /**\n   * @description\n   * Handles mouse enter events to start tracking mouse movements for rating.\n   */\n  protected mouseEnter() {\n    this.prevState = {\n      ishover: true,\n      previousValue: this.value,\n    };\n    if (this.hasTransition()) {\n      this.renderer.setStyle(this.ratingEl().nativeElement, 'opacity', '80%');\n    }\n    const moveListener = (moveEvent: MouseEvent | TouchEvent) => this.calculateRate(moveEvent);\n    const endListener = () => this.onEnd(moveListener, endListener);\n    const container = this.containerEl().nativeElement;\n    container.addEventListener('mousemove', moveListener);\n    container.addEventListener('mouseup', endListener);\n    container.addEventListener('mouseleave', endListener);\n  }\n\n  /**\n   * @description\n   * Handles mouse leave events to reset styles.\n   */\n  protected mouseLeave() {\n    if (this.hasTransition()) {\n      this.renderer.removeStyle(this.ratingEl().nativeElement, 'opacity');\n    }\n  }\n\n  /**\n   * @description\n   * Cleans up event listeners and restores the previous rating value.\n   *\n   * @param moveListener - The function to remove for mouse move events.\n   * @param endListener - The function to remove for mouse end events.\n   */\n  private onEnd(moveListener: (event: MouseEvent | TouchEvent) => void, endListener: () => void): void {\n    if (this.hasTransition()) {\n      this.renderer.setStyle(\n        this.ratingEl().nativeElement,\n        'transition',\n        `width ${this.max() * 50 + 250}ms cubic-bezier(0.29, 0.72, 0.68, 0.85)`,\n      );\n      this.renderer.removeStyle(this.ratingEl().nativeElement, 'opacity');\n    }\n    this.currentValue.set(this.prevState.previousValue);\n    this.prevState = {\n      ishover: false,\n      previousValue: undefined,\n    };\n    const container = this.containerEl().nativeElement;\n    container.removeEventListener('mousemove', moveListener);\n    container.removeEventListener('mouseup', endListener);\n    container.removeEventListener('mouseleave', endListener);\n  }\n\n  private countDecimals(number: number): number {\n    if (Math.floor(number) === number) return 0;\n    return number.toString().split('.')[1].length || 0;\n  }\n\n  /**\n   * @ignore\n   */\n  @HostBinding('class')\n  private get __hostClass(): string[] {\n    return [\n      `ax-${this.color()}`,\n      `${this.disabled ? 'ax-state-disabled' : ''}`,\n      `${this.readonly ? 'ax-state-readonly' : ''}`,\n      `${!this.readonly && !this.disabled ? 'ax-active' : ''}`,\n    ];\n  }\n}\n","<div\n  #c\n  class=\"ax-rate-picker-container\"\n  (click)=\"calculateRate($event)\"\n  (touchstart)=\"calculateRate($event)\"\n  (mouseenter)=\"mouseEnter()\"\n  (mouseleave)=\"mouseLeave()\"\n>\n  <div #r class=\"ax-rate-picker-rating\" [style.width.%]=\"ratePercentage()\">\n    <div class=\"ax-rate-picker-icons ax-rp-active\">\n      @for (rate of rates(); track rate) {\n        <i class=\"ax-rate-picker-icon fa-solid\" [class]=\"iconName()\" [class.pointer]=\"!this.readonly\"></i>\n      }\n    </div>\n  </div>\n  <div class=\"ax-rate-picker-icons ax-rp-inactive\">\n    @for (rate of rates(); track rate) {\n      <i class=\"ax-rate-picker-icon fa-solid\" [class]=\"iconName()\"></i>\n    }\n  </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AXRatePickerComponent } from './rate-picker.component';\n\n@NgModule({\n  imports: [CommonModule, AXRatePickerComponent],\n  exports: [AXRatePickerComponent],\n})\nexport class AXRatePickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}