{"version":3,"file":"rm-ng-star-rating.mjs","sources":["../../projects/rm-ng-star-rating/src/lib/rm-ng-star-rating.component.ts","../../projects/rm-ng-star-rating/src/lib/rm-ng-star-rating.component.html","../../projects/rm-ng-star-rating/src/public-api.ts","../../projects/rm-ng-star-rating/src/rm-ng-star-rating.ts"],"sourcesContent":["import {\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  HostBinding,\r\n  Input,\r\n  OnInit,\r\n  Output,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n    selector: 'rm-ng-star-rating',\r\n    imports: [CommonModule],\r\n    templateUrl: './rm-ng-star-rating.component.html',\r\n    styleUrls: ['./rm-ng-star-rating.component.css']\r\n})\r\nexport class RmNgStarRatingComponent implements OnInit {\r\n  // @Output() ratingUpdated: EventEmitter<number> = new EventEmitter();\r\n  // @Input() @HostBinding('style.--star-color') color: string = 'gold';\r\n  // @Input() @HostBinding('style.--star-empty-color') emptyColor: string =\r\n  //   'lightgray';\r\n  // @Input() @HostBinding('style.--star-size') size: string = '40px';\r\n  // @Input() rating: number = 0;\r\n  // @Input() starCount: number = 5;\r\n  // @Input() readOnly: boolean = false;\r\n  // // it is for showing pointing ratiing\r\n  // // @Input() decimalRatting: boolean = false;\r\n  // // @ViewChild('tooltip', {static: false}) tooltip!: ElementRef;\r\n\r\n  // hovered: number = 0;\r\n  // hoveredRating: number = 0;\r\n  // starsArray: any[] = [];\r\n\r\n  // ngOnInit(): void {\r\n  //   this.starsArray = Array.from({ length: this.starCount });\r\n  // }\r\n\r\n  // onMouseEnter(index: number, event: MouseEvent): void {\r\n  //   if (!this.readOnly) {\r\n  //     this.hovered = index;\r\n  //     this.hoveredRating = index;\r\n  //     // it is for showing pointing ratiing\r\n  //     // this.hoveredRating = this.calculateRating(index, event);\r\n  //     // const tooltipElement = this.tooltip.nativeElement as HTMLElement;\r\n  //     // tooltipElement.style.display = 'block';\r\n  //     // this.positionTooltip(event);\r\n  //   }\r\n  // }\r\n\r\n  // onMouseLeave(): void {\r\n  //   if (!this.readOnly) {\r\n  //     this.hovered = 0;\r\n  //     this.hoveredRating = 0;\r\n  //     // const tooltipElement = this.tooltip.nativeElement as HTMLElement;\r\n  //     // tooltipElement.style.display = 'none';\r\n  //   }\r\n  // }\r\n\r\n  // onClick(index: number): void {\r\n  //   if (!this.readOnly) {\r\n  //     this.rating = index;\r\n  //     // it is for showing pointing ratiing\r\n  //     // this.rating = this.calculateRating(index);\r\n  //     this.ratingUpdated.emit(this.rating);\r\n  //   }\r\n  // }\r\n\r\n  // getStarClass(index: number): string {\r\n  //   return this.hovered >= index || this.rating >= index\r\n  //     ? 'star-filled'\r\n  //     : 'star-empty';\r\n  // }\r\n\r\n  // it is for showing pointing ratiing\r\n  // getStarClass(index: number): string {\r\n  //   if (this.hovered >= index || this.rating >= index) {\r\n  //     const fullStars = Math.floor(this.rating);\r\n  //     const fractionalPart = this.rating - fullStars;\r\n  //     if (index === fullStars + 1 && fractionalPart > 0) {\r\n  //       return 'star-half-filled';\r\n  //     }\r\n  //     return 'star-filled';\r\n  //   }\r\n  //   return 'star-empty';\r\n  // }\r\n\r\n  // calculateRating(index: number, event?: MouseEvent): number {\r\n  //   if (event) {\r\n  //     const starWidth = (event.target as HTMLElement).offsetWidth;\r\n  //     const offsetX =\r\n  //       event.clientX -\r\n  //       (event.target as HTMLElement).getBoundingClientRect().left;\r\n  //     const fraction = Math.min(1, Math.max(0, offsetX / starWidth));\r\n  //     return index - 1 + fraction;\r\n  //   }\r\n  //   return index;\r\n  // }\r\n\r\n  // positionTooltip(event: MouseEvent): void {\r\n  //   const tooltipElement = this.tooltip.nativeElement as HTMLElement;\r\n  //   const xOffset = -10; // Distance from the star to the tooltip\r\n  //   const yOffset = -30; // Position above the star\r\n  //\r\n  //   tooltipElement.style.left = `${event.clientX + xOffset}px`;\r\n  //   tooltipElement.style.top = `${event.clientY + yOffset}px`;\r\n  // }\r\n\r\n  @Output() ratingUpdated: EventEmitter<number> = new EventEmitter();\r\n  @Input() @HostBinding('style.--star-color') color: string = 'gold';\r\n  @Input() @HostBinding('style.--star-empty-color') emptyColor: string = 'lightgray';\r\n  @Input() @HostBinding('style.--star-size') size: string = '40px';\r\n  @Input() rating: number = 0;\r\n  @Input() starCount: number = 5;\r\n  @Input() readOnly: boolean = false;\r\n  @Input() allowHalf: boolean = true; // NEW: enable half-star support\r\n\r\n  hovered: number = 0;\r\n  hoveredRating: number = 0;\r\n  starsArray: any[] = [];\r\n\r\n  ngOnInit(): void {\r\n    this.starsArray = Array.from({ length: this.starCount });\r\n  }\r\n\r\n  onMouseEnter(index: number, event: MouseEvent): void {\r\n    if (!this.readOnly) {\r\n      if (this.allowHalf) {\r\n        this.hoveredRating = this.calculateRating(index, event);\r\n      } else {\r\n        this.hoveredRating = index;\r\n      }\r\n      this.hovered = index;\r\n    }\r\n  }\r\n\r\n  onMouseLeave(): void {\r\n    if (!this.readOnly) {\r\n      this.hovered = 0;\r\n      this.hoveredRating = 0;\r\n    }\r\n  }\r\n\r\n  onClick(index: number, event?: MouseEvent): void {\r\n    if (!this.readOnly) {\r\n      if (this.allowHalf && event) {\r\n        this.rating = this.calculateRating(index, event);\r\n      } else {\r\n        this.rating = index;\r\n      }\r\n      this.ratingUpdated.emit(this.rating);\r\n    }\r\n  }\r\n\r\n  getStarClass(index: number): string {\r\n    const value = this.hoveredRating || this.rating;\r\n    if (value >= index) {\r\n      return 'star-filled';\r\n    } else if (this.allowHalf && value + 0.5 >= index) {\r\n      // If value is within half, show half-filled\r\n      return 'star-half-filled';\r\n    } else {\r\n      return 'star-empty';\r\n    }\r\n  }\r\n\r\n  calculateRating(index: number, event?: MouseEvent): number {\r\n    if (event) {\r\n      const starElement = event.target as HTMLElement;\r\n      const { left, width } = starElement.getBoundingClientRect();\r\n      const x = event.clientX - left;\r\n      if (x < width / 2) {\r\n        return index - 0.5;\r\n      } else {\r\n        return index;\r\n      }\r\n    }\r\n    return index;\r\n  }\r\n  \r\n}\r\n","<!--<div class=\"star-rating\" [ngStyle]=\"{'font-size.px': size}\">-->\r\n<!--  <span *ngFor=\"let star of [].constructor(starCount); let i = index\"-->\r\n<!--        class=\"star\"-->\r\n<!--        [ngClass]=\"getStarClass(i + 1)\"-->\r\n<!--        (mouseenter)=\"onMouseEnter(i + 1)\"-->\r\n<!--        (mouseleave)=\"onMouseLeave()\"-->\r\n<!--        (click)=\"onClick(i + 1)\">-->\r\n<!--     ★-->\r\n<!--  </span>-->\r\n<!--</div>-->\r\n\r\n<!--<div class=\"star-rating-container\">-->\r\n<!--  <div class=\"star-rating\" [ngStyle]=\"{'font-size.px': size}\">-->\r\n<!--    <span *ngFor=\"let star of starsArray; let i = index\"-->\r\n<!--          class=\"star-wrapper\"-->\r\n<!--          (mouseenter)=\"onMouseEnter(i + 1, $event)\"-->\r\n<!--          (mouseleave)=\"onMouseLeave()\">-->\r\n<!--      <span class=\"star\"-->\r\n<!--            [ngClass]=\"getStarClass(i + 1)\"-->\r\n<!--            (click)=\"onClick(i + 1)\">-->\r\n<!--        ★-->\r\n<!--      </span>-->\r\n<!--      &lt;!&ndash; Tooltip displayed above the star &ndash;&gt;-->\r\n<!--      <div class=\"tooltip\" #tooltip>-->\r\n<!--        {{ hoveredRating }}-->\r\n<!--      </div>-->\r\n<!--    </span>-->\r\n<!--  </div>-->\r\n<!--</div>-->\r\n\r\n<div class=\"star-rating-container\">\r\n  <!-- <div class=\"star-rating\" [ngStyle]=\"{ 'font-size.px': size }\">\r\n    <span\r\n      *ngFor=\"let star of starsArray; let i = index\"\r\n      class=\"star-wrapper\"\r\n      (mouseenter)=\"onMouseEnter(i + 1, $event)\"\r\n      (mouseleave)=\"onMouseLeave()\"\r\n    >\r\n      <span\r\n        class=\"star\"\r\n        [ngClass]=\"getStarClass(i + 1)\"\r\n        (click)=\"onClick(i + 1)\"\r\n      >\r\n        ★\r\n      </span>\r\n    </span>\r\n  </div> -->\r\n  <!-- Tooltip element -->\r\n  <!--  <div class=\"tooltip\" #tooltip>-->\r\n  <!--    {{ hoveredRating }}-->\r\n  <!--  </div>-->\r\n\r\n\r\n    <div class=\"star-rating\" [ngStyle]=\"{ 'font-size.px': size }\">\r\n    <span\r\n      *ngFor=\"let star of starsArray; let i = index\"\r\n      class=\"star-wrapper\"\r\n      (mouseenter)=\"onMouseEnter(i + 1, $event)\"\r\n      (mousemove)=\"allowHalf ? onMouseEnter(i + 1, $event) : null\"\r\n      (mouseleave)=\"onMouseLeave()\"\r\n    >\r\n      <span\r\n        class=\"star\"\r\n        [ngClass]=\"getStarClass(i + 1)\"\r\n        (click)=\"onClick(i + 1, $event)\"\r\n      >\r\n        ★\r\n      </span>\r\n    </span>\r\n  </div>\r\n  \r\n</div>\r\n","/*\r\n * Public API Surface of rm-ng-star-rating\r\n */\r\n\r\nexport * from './lib/rm-ng-star-rating.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}