{"version":3,"file":"ng-spinner-wheel.mjs","sources":["../../../projects/ng-spinner-wheel/src/lib/ng-spinner-wheel.service.ts","../../../projects/ng-spinner-wheel/src/lib/ng-spinner-wheel.component.ts","../../../projects/ng-spinner-wheel/src/public-api.ts","../../../projects/ng-spinner-wheel/src/ng-spinner-wheel.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class NgSpinnerWheelService {\r\n\r\n  constructor() { }\r\n\r\n  getRandomColor(): string {\r\n    const letters = '0123456789ABCDEF';\r\n    let color = '#';\r\n    for (let i = 0; i < 6; i++) {\r\n      color += letters[Math.floor(Math.random() * 16)];\r\n    }\r\n    return color;\r\n  }\r\n\r\n\r\n  items: any = [];\r\n\r\n  addItemFoePool(item: any, weight: number): void {\r\n    if (weight > 0) {\r\n      this.items.push({ item, weight });\r\n    } else {\r\n      throw new Error(\"Weight must be greater than 0\");\r\n    }\r\n  }\r\n\r\n  selectRandomItem() {\r\n    const totalWeight = this.items.reduce((sum: number, item: any) => sum + item.weight, 0);\r\n\r\n    if (totalWeight === 0) {\r\n      return null; // No items in the pool\r\n    }\r\n\r\n    let randomValue = Math.random() * totalWeight;\r\n    let accumulatedWeight = 0;\r\n\r\n    for (const { item, weight } of this.items) {\r\n      accumulatedWeight += weight;\r\n      if (randomValue <= accumulatedWeight) {\r\n        return item;\r\n      }\r\n    }\r\n\r\n    return null; // Shouldn't reach here, but just in case\r\n  }\r\n\r\n\r\n\r\n  getTextColor(backgroundHexColor: string): string {\r\n    const hex = backgroundHexColor.replace(/^#/, '');\r\n    const r = parseInt(hex.substring(0, 2), 16) / 255;\r\n    const g = parseInt(hex.substring(2, 4), 16) / 255;\r\n    const b = parseInt(hex.substring(4, 6), 16) / 255;\r\n    const luminance = 0.2126 * r + 0.7152 * g + 0.0722 * b;\r\n    return luminance > 0.5 ? '#000000' : '#FFFFFF';\r\n  }\r\n\r\n}\r\n","import { Component, ElementRef, EventEmitter, Inject, Input, OnChanges, Output, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { NgSpinnerWheelService } from './ng-spinner-wheel.service';\r\n// import { NgSpinnerWheelService } from 'ng-spinner-wheel';\r\n\r\nexport interface MenuItems {\r\n  menuTitle: string;\r\n  Id?: string;\r\n  menuWeight?: number;\r\n  percentage?: number;\r\n  backColor?: string;\r\n  fontSize?: string;\r\n  textColor?: string;\r\n}\r\n\r\n@Component({\r\n  selector: 'lib-ng-spinner-wheel',\r\n  standalone: true,\r\n  imports: [],\r\n  template: `\r\n   <div id=\"wheel\" class=\"ion-text-center\">\r\n      <div style=\"position: relative;\">\r\n        <canvas id=\"canvas\" #canvas [width]=\"width\" [height]=\"width\"></canvas>\r\n\r\n        <div>\r\n          <img [style.height]=\"btnWidth+'px'\" [style.width]=\"btnWidth+'px'\" [style.top]=\"(width/2)-(btnWidth/2)+'px'\"\r\n            [style.left]=\"(width/2)-(btnWidth/2)+'px'\" style=\"position: absolute;\" (click)=\"startSpin()\" src=\"https://i.postimg.cc/hj1XkSfG/spin.png\" />\r\n        </div>\r\n      </div>\r\n    </div>\r\n  `,\r\n  styles: ``\r\n})\r\nexport class NgSpinnerWheelComponent implements OnChanges {\r\n  private ctx!: CanvasRenderingContext2D | null;\r\n  @ViewChild('canvas') canvasEl!: ElementRef;\r\n  @Input(\"allItems\") allItems: MenuItems[] = [];\r\n  @Input(\"btnWidth\") public btnWidth: number = 30;\r\n  @Input(\"width\") public width: number = 260;\r\n  @Output() spinCompleted = new EventEmitter<MenuItems>();\r\n  private center!: number;\r\n  private deg: number = 0;\r\n  private speed: number = 10;\r\n  private isStopped: boolean = false;\r\n  private lock: boolean = false;\r\n  private isSpinning: boolean = false;\r\n  private slowDownRand: number = 0;\r\n  private canvas: any;\r\n  private currentWinner: any;\r\n  private fontSize = 15;\r\n  private forceStop = false;\r\n\r\n  constructor(public util: NgSpinnerWheelService) { }\r\n  async ngAfterViewInit(): Promise<void> {\r\n    this.regenerate();\r\n  }\r\n\r\n  public regenerate() {\r\n    setTimeout(() => {\r\n      this.onInIt2();\r\n      this.loadDataInit();\r\n      this.createSpinner();\r\n    }, 1000);\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes['allItems']) {\r\n      this.regenerate();\r\n    }\r\n  }\r\n\r\n  onInIt2() {\r\n    this.canvas = this.canvasEl.nativeElement;\r\n    this.ctx = this.canvas.getContext('2d');\r\n    this.width = this.canvas.width;\r\n    this.center = this.width / 2;\r\n\r\n  }\r\n\r\n  async loadDataInit() {\r\n    const totalWeight = this.allItems.reduce((sum: number, item: MenuItems) => sum + (item.menuWeight ?? 1), 0);\r\n    await this.allItems.forEach((element: MenuItems) => {\r\n\r\n\r\n      if (!element.menuWeight) element.menuWeight = 1;\r\n\r\n      element.percentage = ((element.menuWeight / totalWeight) * 100)\r\n      if (!element.backColor) {\r\n        element.backColor = this.util.getRandomColor();\r\n      }\r\n      if (!element.textColor) {\r\n        element.textColor = this.util.getTextColor(element.backColor);\r\n      }\r\n\r\n      if (!element.fontSize) {\r\n        element.fontSize = \"15px\";\r\n      }\r\n    });\r\n\r\n    this.allItems = this.shuffleArray(this.allItems);\r\n\r\n    console.log(this.allItems);\r\n  }\r\n\r\n  startSpin() {\r\n    if (this.lock || this.isStopped || this.isSpinning) {\r\n      return;\r\n    }\r\n    const randomNumber = Math.floor(Math.random() * (8501 - 5000) + 5000);\r\n    setTimeout(() => {\r\n      this.stops();\r\n    }, randomNumber);\r\n    this.lock = false;\r\n    this.forceStop = false;\r\n    this.isStopped = false;\r\n    this.isSpinning = true;\r\n    this.spin();\r\n  }\r\n\r\n  spin() {\r\n\r\n\r\n    let spin = () => {\r\n      let slicesData = this.allItems;\r\n      // const color = slicesData.map(slice => slice.color);\r\n      const label = slicesData.map((slice: MenuItems) => slice.menuTitle);\r\n      const slices = label.length;\r\n      // const sliceDeg = 360 / slices;\r\n\r\n      this.deg += this.speed;\r\n      this.deg %= 360;\r\n\r\n      if (this.forceStop) {\r\n        this.lock = false;\r\n        this.isStopped = false;\r\n        this.isSpinning = false;\r\n        this.speed = 0;\r\n        return;\r\n      }\r\n      // Increment speed\r\n      if (!this.isStopped && this.speed < 6) {\r\n        this.speed = this.speed + 1 * 0.1;\r\n      }\r\n\r\n      // Decrement Speed\r\n      if (this.isStopped) {\r\n        if (!this.lock) {\r\n          this.lock = true;\r\n          this.slowDownRand = this.rand(0.990, 0.970);\r\n        }\r\n        this.speed = this.speed > 0.2 ? this.speed *= this.slowDownRand : 0;\r\n      }\r\n\r\n\r\n\r\n      if (this.lock && !this.speed) {\r\n        this.lock = false;\r\n        this.isStopped = false;\r\n        this.isSpinning = false;\r\n\r\n        // Determine winner based on final degree\r\n        const finalDeg = (360 - this.deg + 270) % 360; // 270 is the top pointer\r\n        let angleAccumulator = 0;\r\n        for (let slice of slicesData) {\r\n\r\n          const sliceAngle = (slice.percentage ?? 0) * 3.6;\r\n          if (finalDeg >= angleAccumulator && finalDeg < angleAccumulator + sliceAngle) {\r\n            this.currentWinner = slice;\r\n            break;\r\n          }\r\n          angleAccumulator += sliceAngle;\r\n        }\r\n        this.spinCompleted.emit(this.currentWinner);\r\n        // alert(this.currentWinner?.menu_title || 'No winner found!');\r\n        return;\r\n      }\r\n\r\n      this.ctx?.clearRect(0, 0, this.width, this.width);\r\n      this.currentWinner = null;\r\n      let allTtl = this.deg;\r\n      slicesData.forEach((slice: MenuItems, i: number) => {\r\n        if (this.ctx) {\r\n          this.ctx.beginPath();\r\n          this.ctx.fillStyle = slice.backColor || \"#000000\"\r\n          this.ctx.moveTo(this.center, this.center);\r\n          this.ctx.arc(this.center, this.center, this.width / 2, this.deg2rad(this.deg), this.deg2rad(this.deg + ((slice.percentage ?? 0) * 3.6)));\r\n          this.ctx.lineTo(this.center, this.center);\r\n          this.ctx.fill();\r\n          allTtl += ((slice.percentage ?? 0) * 3.6);\r\n          const drawText_deg = this.deg + ((slice.percentage ?? 0) * 3.6) / 2;\r\n\r\n          // console.log(this.deg,this.deg%360,slice.menu_title);\r\n          if ((allTtl % 360) > 270 && !this.currentWinner) {\r\n            this.currentWinner = slice;\r\n          }\r\n\r\n          this.ctx.save();\r\n          this.ctx.translate(this.center, this.center);\r\n          this.ctx.rotate(this.deg2rad(drawText_deg));\r\n          this.ctx.textAlign = \"right\";\r\n          this.ctx.fillStyle = slice.textColor || \"#000000\";;\r\n          var textvalArr = this.toMultiLine(slice.menuTitle);\r\n          var linespacing = 15;\r\n          var startX = (this.width / 2) - 10;\r\n          var startY = 5;\r\n\r\n          for (var i = 0; i < textvalArr.length; i++) {\r\n            this.ctx.fillText(textvalArr[i], startX, startY, (this.width / 2) - 20);\r\n            startY += linespacing;\r\n          }\r\n\r\n          // this.ctx.font = 'bold ' + this.fontSize + 'px sans-serif';\r\n          // this.ctx.fillText(slice.menu_title, 100, 5);\r\n          this.ctx.restore();\r\n          this.deg += ((slice.percentage ?? 0) * 3.6);\r\n        }\r\n      });\r\n\r\n      window.requestAnimationFrame(() => spin());\r\n    };\r\n    spin();\r\n    //window.requestAnimationFrame(spin);\r\n  }\r\n  stops() {\r\n    if (!this.isSpinning || this.isStopped) {\r\n      return;\r\n    }\r\n    this.isStopped = true;\r\n  }\r\n\r\n  deg2rad(deg: number): number {\r\n    return deg * Math.PI / 180;\r\n  }\r\n\r\n  rand(min: number, max: number): number {\r\n    return Math.random() * (max - min) + min;\r\n  }\r\n\r\n\r\n\r\n  setFontSize() {\r\n    const baseFontSize = this.width / 20; // adjust divisor as needed\r\n\r\n    const itemCount = this.allItems?.length || 0;\r\n\r\n    if (itemCount <= 5) {\r\n      this.fontSize = baseFontSize;\r\n    } else if (itemCount <= 10) {\r\n      this.fontSize = baseFontSize * 0.8;\r\n    } else {\r\n      this.fontSize = baseFontSize * 0.6;\r\n    }\r\n  }\r\n\r\n  createSpinner() {\r\n    this.setFontSize();\r\n    let slicesData = this.allItems;\r\n    const ctx = this.ctx;\r\n    const width = this.width;\r\n    const center = width / 2;\r\n\r\n    if (ctx) {\r\n      ctx.clearRect(0, 0, width, width);\r\n\r\n      const totalDegrees = 360;\r\n      let currentDegrees = 0;\r\n\r\n      slicesData.forEach((slice: MenuItems) => {\r\n        const name = slice.menuTitle;\r\n        // const id = slice.id;\r\n        const degree = (slice.percentage ?? 0) * 3.6;\r\n        // const color = slice.color;\r\n        // const { name, id, degree, color } = {1,1,1,1};\r\n\r\n        ctx.beginPath();\r\n        ctx.fillStyle = slice.backColor || \"#000000\";\r\n        ctx.moveTo(center, center);\r\n        ctx.arc(center, center, width / 2, this.deg2rad(currentDegrees), this.deg2rad(currentDegrees + degree));\r\n        ctx.lineTo(center, center);\r\n        ctx.fill();\r\n\r\n        const drawText_deg = currentDegrees + degree / 2;\r\n        ctx.save();\r\n        ctx.translate(center, center);\r\n        ctx.rotate(this.deg2rad(drawText_deg));\r\n        ctx.textAlign = \"right\";\r\n        ctx.fillStyle = slice.textColor || \"#000000\";;\r\n\r\n        ctx.font = `bold ${slice.fontSize} sans-serif`;\r\n\r\n        var textvalArr = this.toMultiLine(name);\r\n        var linespacing = 15;\r\n        var startX = (this.width / 2) - 5;\r\n        var startY = 5;\r\n\r\n        for (var i = 0; i < textvalArr.length; i++) {\r\n          ctx.fillText(textvalArr[i], startX, startY, (this.width / 2) - 20);\r\n          startY += linespacing;\r\n        }\r\n        ctx.restore();\r\n        currentDegrees += degree;\r\n      });\r\n    }\r\n  }\r\n  toMultiLine(text: string) {\r\n    var textArr = new Array();\r\n    text = text.replace(/\\n\\r?/g, '<br/>');\r\n    textArr = text.split(\"<br/>\");\r\n    return textArr;\r\n  }\r\n\r\n\r\n  shuffleArray<T>(array: T[]): T[] {\r\n    const shuffled = [...array]; // copy to avoid mutating original array\r\n    for (let i = shuffled.length - 1; i > 0; i--) {\r\n      const j = Math.floor(Math.random() * (i + 1));\r\n      [shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]];\r\n    }\r\n    return shuffled;\r\n  }\r\n}\r\n","/*\r\n * Public API Surface of ng-spinner-wheel\r\n */\r\n\r\nexport * from './lib/ng-spinner-wheel.service';\r\nexport * from './lib/ng-spinner-wheel.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.NgSpinnerWheelService"],"mappings":"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"}