{"version":3,"file":"acorex-components-time-duration.mjs","sources":["../../../../packages/components/time-duration/src/lib/time-duration.component.ts","../../../../packages/components/time-duration/src/lib/time-duration.component.html","../../../../packages/components/time-duration/src/lib/time-duration.module.ts","../../../../packages/components/time-duration/src/acorex-components-time-duration.ts"],"sourcesContent":["import {\n  AXComponent,\n  AXFocusableComponent,\n  AXFocusEvent,\n  AXValuableComponent,\n  AXValueChangedEvent,\n  MXInputBaseValueComponent,\n  MXLookComponent,\n} from '@acorex/cdk/common';\nimport { AXInputMaskEvent } from '@acorex/cdk/input-mask';\nimport { AXValidationRuleDirective } from '@acorex/components/form';\nimport { AXTextBoxModule } from '@acorex/components/text-box';\nimport { AXTimeDurationFormatter } from '@acorex/core/date-time';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n  afterNextRender,\n  Component,\n  effect,\n  forwardRef,\n  HostBinding,\n  inject,\n  input,\n  NgZone,\n  signal,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { classes } from 'polytype';\nimport { AXTimeDurationUnit } from './time-duration.type';\n\n@Component({\n  selector: 'ax-time-duration',\n  templateUrl: './time-duration.component.html',\n\n  encapsulation: ViewEncapsulation.None,\n  imports: [AXTextBoxModule, FormsModule, AXValidationRuleDirective],\n  inputs: ['disabled', 'tabIndex', 'readonly', 'look', 'name'],\n  outputs: ['onValueChanged'],\n  providers: [\n    { provide: AXComponent, useExisting: AXTimeDurationComponent },\n    { provide: AXFocusableComponent, useExisting: AXTimeDurationComponent },\n    { provide: AXValuableComponent, useExisting: AXTimeDurationComponent },\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => AXTimeDurationComponent),\n      multi: true,\n    },\n  ],\n})\nexport class AXTimeDurationComponent extends classes(MXInputBaseValueComponent<number>, MXLookComponent) {\n  protected inputValue: string;\n  readonly valueStart = input<AXTimeDurationUnit>('YEAR');\n  readonly valueEnd = input<AXTimeDurationUnit>('MILLISECOND');\n  readonly label = input<boolean>(true);\n  readonly maskDigits = input('00:00:00:00:00:00:00:000');\n  readonly minValue = input<number>(null);\n  readonly maxValue = input<number>(null);\n\n  protected mask = signal(null);\n  protected maskPlaceHolder = signal(null);\n\n  private translationService: AXTranslationService = inject(AXTranslationService);\n  private timeDurationFormatter: AXTimeDurationFormatter = inject(AXTimeDurationFormatter);\n  private ngZone = inject(NgZone);\n\n  private onInputFire = false;\n  private onInternalValueChangedFire = false;\n\n  private YEAR = signal(null);\n  private MONTH = signal(null);\n  private WEEK = signal(null);\n  private DAY = signal(null);\n  private HOUR = signal(null);\n  private MINUTE = signal(null);\n  private SECOND = signal(null);\n  private MILLISECOND = signal(null);\n  private isTranslationInit = signal(false);\n\n  #init = afterNextRender(async () => {\n    await this.initTranslation();\n  });\n\n  #effect = effect(() => {\n    // Depend on label as well\n    void this.label();\n    if (this.valueStart() && this.valueEnd() && this.isTranslationInit()) {\n      this.updateMask();\n    }\n  });\n\n  async initTranslation() {\n    this.YEAR.set((await this.translationService.translateAsync('@acorex:dateTime.units.year')).toLocaleUpperCase());\n    this.MONTH.set((await this.translationService.translateAsync('@acorex:dateTime.units.month')).toLocaleUpperCase());\n    this.WEEK.set((await this.translationService.translateAsync('@acorex:dateTime.units.week')).toLocaleUpperCase());\n    this.DAY.set((await this.translationService.translateAsync('@acorex:dateTime.units.day')).toLocaleUpperCase());\n    this.HOUR.set((await this.translationService.translateAsync('@acorex:dateTime.units.hour')).toLocaleUpperCase());\n    this.MINUTE.set(\n      (await this.translationService.translateAsync('@acorex:dateTime.units.minute')).toLocaleUpperCase(),\n    );\n    this.SECOND.set(\n      (await this.translationService.translateAsync('@acorex:dateTime.units.second')).toLocaleUpperCase(),\n    );\n    this.MILLISECOND.set(\n      (await this.translationService.translateAsync('@acorex:dateTime.units.millisecond')).toLocaleUpperCase(),\n    );\n    this.isTranslationInit.set(true);\n  }\n\n  protected maskChange(e: AXInputMaskEvent) {\n    if (!e.completed) return;\n\n    if (this.minValue() && this.minValue() > this.value) {\n      this.commitValue(this.minValue());\n    }\n\n    if (this.maxValue() && this.maxValue() < this.value) {\n      this.commitValue(this.maxValue());\n    }\n  }\n\n  protected async onInput(event: AXValueChangedEvent<any>) {\n    if (this.disabled) return;\n    if (this.readonly) return;\n    if (!event.isUserInteraction) return;\n    if (this.onInternalValueChangedFire) return;\n    this.onInputFire = true;\n\n    if (!event.value) {\n      this.commitValue(null, true);\n      this.onInputFire = false;\n      return;\n    }\n\n    const milliseconds = this.maskToMilliseconds(event.value);\n\n    this.commitValue(milliseconds, true);\n    this.onInputFire = false;\n  }\n\n  protected override async internalValueChanged(value: number): Promise<void> {\n    if (this.onInputFire) return;\n    this.onInternalValueChangedFire = true;\n\n    const normalizedMask = await this.timeDurationFormatter.millisecondsToMask(\n      value,\n      this.valueStart(),\n      this.valueEnd(),\n      this.label(),\n      this.maskDigits(),\n      true,\n    );\n\n    this.ngZone.run(() => {\n      this.inputValue = normalizedMask;\n      this.cdr.markForCheck();\n    });\n\n    setTimeout(() => {\n      this.onInternalValueChangedFire = false;\n    });\n  }\n\n  private replacePersianLabels(input: string) {\n    const replacements = {\n      [this.YEAR()]: 'YEAR',\n      [this.MONTH()]: 'MONTH',\n      [this.WEEK()]: 'WEEK',\n      [this.DAY()]: 'DAY',\n      [this.HOUR()]: 'HOUR',\n      [this.MINUTE()]: 'MINUTE',\n      [this.SECOND()]: 'SECOND',\n      [this.MILLISECOND()]: 'MILLISECOND',\n    };\n\n    return Object.entries(replacements).reduce((str, [fa, en]) => {\n      return str.replace(`(${fa})`, `(${en})`);\n    }, input);\n  }\n\n  private maskToMilliseconds(maskValue: string): number {\n    const timeUnits = {\n      YEAR: 365 * 24 * 60 * 60 * 1000,\n      MONTH: 30 * 24 * 60 * 60 * 1000,\n      WEEK: 7 * 24 * 60 * 60 * 1000,\n      DAY: 24 * 60 * 60 * 1000,\n      HOUR: 60 * 60 * 1000,\n      MINUTE: 60 * 1000,\n      SECOND: 1000,\n      MILLISECOND: 1,\n    };\n\n    let totalMs = 0;\n\n    if (this.label()) {\n      // Parse labeled format: \"00 (YEAR) : 00 (MONTH) : 00 (DAY)\"\n      const transformedMaskValue = this.replacePersianLabels(maskValue);\n      const regex = /(\\d+)\\s*\\((YEAR|MONTH|WEEK|DAY|HOUR|MINUTE|SECOND|MILLISECOND)\\)/g;\n      let match;\n\n      while ((match = regex.exec(transformedMaskValue)) !== null) {\n        const value = parseInt(match[1], 10);\n        const unit = match[2];\n        if (timeUnits[unit] !== undefined) {\n          totalMs += value * timeUnits[unit];\n        }\n      }\n    } else {\n      // Parse unlabeled format: \"00:00:00\" (colon-separated numbers)\n      const allUnits = ['YEAR', 'MONTH', 'WEEK', 'DAY', 'HOUR', 'MINUTE', 'SECOND', 'MILLISECOND'];\n      const startIndex = allUnits.indexOf(this.valueStart());\n      const endIndex = allUnits.indexOf(this.valueEnd());\n\n      if (startIndex !== -1 && endIndex !== -1 && endIndex >= startIndex) {\n        const selectedUnits = allUnits.slice(startIndex, endIndex + 1);\n        const numbers = maskValue.split(':').map((num) => parseInt(num.trim(), 10));\n\n        for (let i = 0; i < Math.min(numbers.length, selectedUnits.length); i++) {\n          const value = numbers[i];\n          const unit = selectedUnits[i];\n          if (!isNaN(value) && timeUnits[unit] !== undefined) {\n            totalMs += value * timeUnits[unit];\n          }\n        }\n      }\n    }\n\n    return totalMs;\n  }\n\n  private updateMask() {\n    const allUnits = ['YEAR', 'MONTH', 'WEEK', 'DAY', 'HOUR', 'MINUTE', 'SECOND', 'MILLISECOND'];\n    const startIndex = allUnits.indexOf(this.valueStart());\n    const endIndex = allUnits.indexOf(this.valueEnd());\n\n    if (startIndex === -1 || endIndex === -1 || endIndex < startIndex) {\n      this.mask.set(null);\n      return null;\n    }\n\n    const selectedUnits = allUnits.slice(startIndex, endIndex + 1);\n\n    let maskParts: string[];\n\n    const yearDigits = this.maskDigits().split(':')[0];\n    const monthDigits = this.maskDigits().split(':')[1];\n    const weekDigits = this.maskDigits().split(':')[2];\n    const dayDigits = this.maskDigits().split(':')[3];\n    const hourDigits = this.maskDigits().split(':')[4];\n    const minuteDigits = this.maskDigits().split(':')[5];\n    const secondDigits = this.maskDigits().split(':')[6];\n    const millisecondDigits = this.maskDigits().split(':')[7];\n\n    if (this.label()) {\n      // With labels\n      const unitPatterns: Record<string, string> = {\n        YEAR: `${yearDigits} (${this.YEAR()})`,\n        MONTH: `${monthDigits} (${this.MONTH()})`,\n        WEEK: `${weekDigits} (${this.WEEK()})`,\n        DAY: `${dayDigits} (${this.DAY()})`,\n        HOUR: `${hourDigits} (${this.HOUR()})`,\n        MINUTE: `${minuteDigits} (${this.MINUTE()})`,\n        SECOND: `${secondDigits} (${this.SECOND()})`,\n        MILLISECOND: `${millisecondDigits} (${this.MILLISECOND()})`,\n      };\n\n      maskParts = selectedUnits.map((unit) => {\n        return unitPatterns[unit];\n      });\n    } else {\n      // Without labels - just numbers\n      const unitPatterns: Record<string, string> = {\n        YEAR: yearDigits,\n        MONTH: monthDigits,\n        WEEK: weekDigits,\n        DAY: dayDigits,\n        HOUR: hourDigits,\n        MINUTE: minuteDigits,\n        SECOND: secondDigits,\n        MILLISECOND: millisecondDigits,\n      };\n\n      maskParts = selectedUnits.map((unit) => {\n        return unitPatterns[unit];\n      });\n    }\n\n    let result: string;\n\n    if (this.label()) {\n      if (this.translationService.getActiveLang() === 'fa-IR') {\n        result = maskParts.reverse().join(' : ');\n      } else {\n        result = maskParts.join(' : ');\n      }\n    } else {\n      result = maskParts.join(':');\n    }\n\n    const convert = result.replace(/0/g, '#');\n    this.mask.set(convert);\n    this.maskPlaceHolder.set(result);\n  }\n\n  protected focusHandler(e: AXFocusEvent) {\n    this.onFocus.emit(e);\n  }\n\n  protected blurHandler(e: AXFocusEvent) {\n    this.onBlur.emit(e);\n  }\n\n  protected validateFn = async (val: number) => {\n    if (this.minValue() && this.minValue() > val) {\n      const normalizedMaskMin = await this.timeDurationFormatter.millisecondsToMask(\n        this.minValue(),\n        this.valueStart(),\n        this.valueEnd(),\n        true,\n        this.maskDigits(),\n        true,\n      );\n\n      const message = await this.translationService.translateAsync('@acorex:validation.messages.min', {\n        params: { value: normalizedMaskMin },\n      });\n\n      return {\n        rule: 'callback',\n        result: false,\n        message,\n        value: val,\n      };\n    }\n\n    if (this.maxValue() && this.maxValue() < val) {\n      const normalizedMaskMax = await this.timeDurationFormatter.millisecondsToMask(\n        this.maxValue(),\n        this.valueStart(),\n        this.valueEnd(),\n        true,\n        this.maskDigits(),\n        true,\n      );\n\n      const message = await this.translationService.translateAsync('@acorex:validation.messages.max', {\n        params: { value: normalizedMaskMax },\n      });\n\n      return {\n        rule: 'callback',\n        result: false,\n        message,\n        value: val,\n      };\n    }\n\n    return {\n      rule: 'callback',\n      result: true,\n      value: val,\n    };\n  };\n\n  @HostBinding('attr.name')\n  private get __hostName(): string {\n    return this.name;\n  }\n}\n","<ax-text-box\n  [look]=\"look\"\n  [name]=\"name\"\n  [placeholder]=\"maskPlaceHolder()\"\n  [maskPattern]=\"mask()\"\n  [(ngModel)]=\"inputValue\"\n  (onValueChanged)=\"onInput($event)\"\n  class=\"ax-time-duration-text\"\n  [disabled]=\"disabled\"\n  [tabIndex]=\"tabIndex\"\n  [readonly]=\"readonly\"\n  (onFocus)=\"focusHandler($event)\"\n  (onBlur)=\"blurHandler($event)\"\n  (onMaskChanged)=\"maskChange($event)\"\n>\n</ax-text-box>\n<ax-validation-rule rule=\"callback\" [options]=\"{ validate: validateFn }\"></ax-validation-rule>\n","import { NgModule } from '@angular/core';\nimport { AXTimeDurationComponent } from './time-duration.component';\n\nconst COMPONENT = [AXTimeDurationComponent];\n\nconst MODULES = [];\n\n@NgModule({\n  imports: [...MODULES, ...COMPONENT],\n  exports: [...COMPONENT],\n  providers: [],\n})\nexport class AXTimeDurationModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}