{"version":3,"file":"cty-mobile-ui-count-down.mjs","sources":["../../../packages/components/count-down/count-down.ts","../../../packages/components/count-down/count-down.html","../../../packages/components/count-down/module.ts","../../../packages/components/count-down/cty-mobile-ui-count-down.ts"],"sourcesContent":["import {\r\n  Output,\r\n  EventEmitter,\r\n  AfterContentInit,\r\n  Component,\r\n  OnInit,\r\n  Input,\r\n  OnDestroy\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TimeData, TimeDataUnit } from './types';\r\nimport { CTYFormat } from 'cty-mobile-ui/utils';\r\n\r\n@Component({\r\n  selector: 'cty-count-down',\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n  templateUrl: './count-down.html',\r\n  styleUrl: './count-down.scss',\r\n})\r\nexport class CtyCountDown implements OnInit, OnDestroy, AfterContentInit {\r\n  @Input() time: number = 0;\r\n  @Input('auto-start') autoStart: boolean = true;\r\n  @Input() millisecond: boolean = false;\r\n  @Input() unit: boolean = false;\r\n  @Input() format: string = 'HH:mm:ss';\r\n  @Input() timeDataUnit:TimeDataUnit = {\r\n      DD: '天',\r\n      HH: '时',\r\n      mm: '分',\r\n      ss: '秒',\r\n      SSS: '毫秒'\r\n  };\r\n  @Output() ctyChange = new EventEmitter<TimeData>();\r\n  @Output() ctyFinish = new EventEmitter<CtyCountDown>();\r\n  Util = CTYFormat;\r\n  timeoutId: null | number = null;\r\n  SECOND = 1000;\r\n  MINUTE = 60 * this.SECOND;\r\n  HOUR = 60 * this.MINUTE;\r\n  DAY = 24 * this.HOUR;\r\n  counting = false;\r\n  endTime = 0;\r\n  remain = 0;\r\n  timeData:TimeData = {\r\n      DD: 0,\r\n      HH: 0,\r\n      mm: 0,\r\n      ss: 0,\r\n      SSS: 0,\r\n      timestamp: 0\r\n  };\r\n  timeRange: (keyof TimeDataUnit)[] = [];\r\n  formattedTime = '0';\r\n  get isSingle(){\r\n    return !this.format.includes(':');\r\n  }\r\n  constructor() {}\r\n\r\n  ngOnInit() {}\r\n  ngAfterContentInit() {\r\n    this.reset();\r\n  }\r\n  ngOnDestroy() {\r\n    if (this.timeoutId) {\r\n        clearTimeout(this.timeoutId);\r\n        this.timeoutId = null;\r\n    }\r\n  }\r\n  start() {\r\n    if (this.counting) {\r\n      return;\r\n    }\r\n    this.counting = true;\r\n    this.endTime = Date.now() + this.remain;\r\n    this.doCount();\r\n  }\r\n  reset() {\r\n    this.pause();\r\n    this.remain = this.time;\r\n    this.updateTime(this.remain);\r\n\r\n    if (this.autoStart) {\r\n      this.start();\r\n    }\r\n  }\r\n  pause() {\r\n    this.counting = false;\r\n    this.timeoutId && clearTimeout(this.timeoutId);\r\n  }\r\n  getTime(): number {\r\n    return Math.max(this.endTime - Date.now(), 0);\r\n  }\r\n  updateTime(remain: number) {\r\n    this.remain = remain;\r\n    this.timeData = this.parseTimeData(remain);\r\n    this.ctyChange.emit(this.timeData);\r\n    this.formattedTime = this.parseFormat(remain, this.format);\r\n    this.timeRange = this.format.split(':') as (keyof TimeDataUnit)[];\r\n    if (remain === 0) {\r\n      this.pause();\r\n      this.ctyFinish.emit();\r\n    }\r\n  }\r\n  doCount() {\r\n    this.timeoutId = window.setTimeout(() => {\r\n      const time = this.getTime();\r\n      if (this.millisecond) {\r\n        this.updateTime(time);\r\n      } else if (!this.isSameSecond(time, this.remain) || time === 0) {\r\n        this.updateTime(time);\r\n      }\r\n      if (time !== 0) {\r\n        this.doCount();\r\n      }\r\n    }, 33); // 30 帧，因此 1000 / 30 = 33\r\n  }\r\n  parseTimeData(time: number): TimeData {\r\n    const days = Math.floor(time / this.DAY);\r\n    const hours = Math.floor((time % this.DAY) / this.HOUR);\r\n    const minutes = Math.floor((time % this.HOUR) / this.MINUTE);\r\n    const seconds = Math[this.format.includes(':') ? 'floor' : 'ceil'](\r\n      (time % this.MINUTE) / this.SECOND\r\n    );\r\n    const milliseconds = Math.floor(time % this.SECOND);\r\n    return {\r\n      DD: days,\r\n      HH: hours,\r\n      mm: minutes,\r\n      ss: seconds,\r\n      SSS: milliseconds,\r\n      timestamp: time\r\n    };\r\n  }\r\n  isSameSecond(time1: number, time2: number): boolean {\r\n    return Math.floor(time1 / 1000) === Math.floor(time2 / 1000);\r\n  }\r\n  parseFormat(time: number, format: string) {\r\n    const obj = {\r\n      'D+': Math.floor(time / 86400000), // 日\r\n      'H+': Math.floor(time / 3600000), // 小时\r\n      'm+': Math.floor(time / 60000), // 分\r\n      's+': Math[this.format.includes(':') ? 'floor' : 'ceil'](time / 1000), // 秒\r\n      'S+': Math.floor(time % 1000), // 毫秒\r\n    };\r\n    let timeText = format;\r\n    Object.keys(obj).forEach((prop) => {\r\n      if (new RegExp(`(${prop})`).test(timeText)) {\r\n        timeText = timeText.replace(RegExp.$1, (match, offset, source) => {\r\n          const v = `${(obj as any)[prop]}`;\r\n          let digit = v;\r\n          if (match.length > 1) {\r\n            digit = (match.replace(new RegExp(match[0], 'g'), '0') + v).substr(\r\n              v.length\r\n            );\r\n          }\r\n          return digit;\r\n        });\r\n      }\r\n    });\r\n    return timeText;\r\n  }\r\n}\r\n","<div class=\"cty-count-down\">\r\n    <ng-container *ngIf=\"!isSingle\">\r\n      <div\r\n          *ngFor=\"let item of timeRange; let idx = index\"\r\n          class=\"cty-count-down__item\"\r\n      >\r\n          <span class=\"cty-count-down__label\">\r\n              {{ Util.pad(timeData[item],2) || timeData[item] }}\r\n          </span>\r\n          <span\r\n              *ngIf=\"unit || idx !== timeRange.length-1\"\r\n              class=\"cty-count-down__unit\"\r\n          >\r\n              {{ unit? timeDataUnit[item] : ':'}}\r\n          </span>\r\n      </div>\r\n    </ng-container>\r\n    <div *ngIf=\"isSingle\" class=\"cty-count-down__item\">\r\n        <span class=\"cty-count-down__label\"> {{ formattedTime }} </span>\r\n    </div>\r\n    <ng-content></ng-content>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { CtyCountDown } from './count-down';\r\n@NgModule({\r\n  imports: [CommonModule, CtyCountDown],\r\n  exports: [CtyCountDown],\r\n})\r\nexport class CtyCountDownModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}