{"version":3,"file":"skyux-autonumeric.mjs","sources":["../../../../../libs/components/autonumeric/src/lib/modules/autonumeric/autonumeric-options-provider.ts","../../../../../libs/components/autonumeric/src/lib/modules/autonumeric/autonumeric.directive.ts","../../../../../libs/components/autonumeric/src/lib/modules/autonumeric/autonumeric.module.ts","../../../../../libs/components/autonumeric/src/skyux-autonumeric.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\nimport { SkyAutonumericOptions } from './autonumeric-options';\n\n/**\n * Provides options to the underlying [AutoNumeric library](https://github.com/autoNumeric/autoNumeric).\n * This can set global options on multiple input fields.\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class SkyAutonumericOptionsProvider {\n  /**\n   * The value for a settings object to pass to the AutoNumeric library.\n   * This overrides any default options specified by the `skyAutonumeric` attribute.\n   */\n  public getConfig(): SkyAutonumericOptions {\n    return {};\n  }\n}\n","import {\n  ChangeDetectorRef,\n  Directive,\n  ElementRef,\n  HostListener,\n  Input,\n  OnDestroy,\n  OnInit,\n  Renderer2,\n  forwardRef,\n} from '@angular/core';\nimport {\n  AbstractControl,\n  ControlValueAccessor,\n  NG_VALIDATORS,\n  NG_VALUE_ACCESSOR,\n  ValidationErrors,\n  Validator,\n} from '@angular/forms';\n\nimport AutoNumeric from 'autonumeric';\nimport { Subject, fromEvent } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyAutonumericOptions } from './autonumeric-options';\nimport { SkyAutonumericOptionsProvider } from './autonumeric-options-provider';\n\nconst SKY_AUTONUMERIC_VALUE_ACCESSOR = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => SkyAutonumericDirective),\n  multi: true,\n};\n\nconst SKY_AUTONUMERIC_VALIDATOR = {\n  provide: NG_VALIDATORS,\n  useExisting: forwardRef(() => SkyAutonumericDirective),\n  multi: true,\n};\n\n/**\n * Wraps the [autoNumeric utility](https://github.com/autoNumeric/autoNumeric) to format\n * any type of number, including currency.\n */\n@Directive({\n  selector: 'input[skyAutonumeric]',\n  providers: [SKY_AUTONUMERIC_VALUE_ACCESSOR, SKY_AUTONUMERIC_VALIDATOR],\n})\nexport class SkyAutonumericDirective\n  implements OnInit, OnDestroy, ControlValueAccessor, Validator\n{\n  /**\n   * Assigns the name of a property from `SkyAutonumericOptionsProvider`.\n   */\n  @Input()\n  public set skyAutonumeric(value: SkyAutonumericOptions | undefined) {\n    this.#autonumericOptions = this.#mergeOptions(value);\n    this.#updateAutonumericInstance();\n  }\n\n  /**\n   * @internal\n   */\n  @Input()\n  public skyAutonumericFormChangesUnformatted: boolean | undefined = false;\n\n  #autonumericInstance: AutoNumeric;\n  #autonumericOptions: SkyAutonumericOptions | undefined;\n  #control: AbstractControl | undefined;\n  #isFirstChange = true;\n  #isWritingValue = false;\n  #value: number | undefined;\n\n  #ngUnsubscribe = new Subject<void>();\n\n  #elementRef: ElementRef;\n  #globalConfig: SkyAutonumericOptionsProvider;\n  #renderer: Renderer2;\n  #changeDetector: ChangeDetectorRef;\n\n  constructor(\n    elementRef: ElementRef,\n    globalConfig: SkyAutonumericOptionsProvider,\n    renderer: Renderer2,\n    changeDetector: ChangeDetectorRef,\n  ) {\n    this.#elementRef = elementRef;\n    this.#globalConfig = globalConfig;\n    this.#renderer = renderer;\n    this.#changeDetector = changeDetector;\n\n    this.#autonumericInstance = new AutoNumeric(elementRef.nativeElement);\n  }\n\n  public ngOnInit(): void {\n    // Ensure that we set the global config even if no local config has been given.\n    if (!this.#autonumericOptions) {\n      this.#autonumericOptions = this.#globalConfig.getConfig();\n    }\n    this.#updateAutonumericInstance();\n\n    fromEvent(this.#elementRef.nativeElement, 'input')\n      .pipe(takeUntil(this.#ngUnsubscribe))\n      .subscribe(() => {\n        this.#handleValueChange();\n\n        /* istanbul ignore else */\n        if (this.#control && !this.#control.dirty) {\n          this.#control.markAsDirty();\n        }\n\n        this.#changeDetector.markForCheck();\n      });\n\n    // On Android browsers, the native `input` event fires before AutoNumeric's\n    // `autoNumeric:rawValueModified` event (on other browsers, the order is reversed).\n    // To support Android without breaking existing behavior, we listen to both events.\n    // See: https://github.com/autoNumeric/autoNumeric/issues/781\n    fromEvent(this.#elementRef.nativeElement, 'autoNumeric:rawValueModified')\n      .pipe(takeUntil(this.#ngUnsubscribe))\n      .subscribe(() => {\n        // Prevent processing during programmatic changes via writeValue().\n        if (!this.#isWritingValue) {\n          this.#handleValueChange();\n        }\n      });\n  }\n\n  public ngOnDestroy(): void {\n    this.#autonumericInstance.remove();\n    this.#ngUnsubscribe.next();\n    this.#ngUnsubscribe.complete();\n  }\n\n  /**\n   * Implemented as part of ControlValueAccessor.\n   */\n  public setDisabledState(value: boolean): void {\n    this.#renderer.setProperty(\n      this.#elementRef.nativeElement,\n      'disabled',\n      value,\n    );\n  }\n\n  public writeValue(value: number | undefined): void {\n    this.#isWritingValue = true;\n\n    if (this.#value !== value) {\n      this.#value = value;\n      this.#onChange(value);\n\n      // Mark the control as \"pristine\" if it is initialized with a value.\n      if (this.#isFirstChange && this.#control && this.#value !== null) {\n        this.#isFirstChange = false;\n        this.#control.markAsPristine();\n      }\n    }\n\n    if (typeof value === 'number') {\n      if (this.skyAutonumericFormChangesUnformatted) {\n        this.#autonumericInstance.setUnformatted(value.toString());\n      } else {\n        this.#autonumericInstance.set(value.toString());\n      }\n    } else {\n      this.#autonumericInstance.clear();\n    }\n\n    this.#isWritingValue = false;\n  }\n\n  public validate(control: AbstractControl): ValidationErrors | null {\n    const noErrors = null;\n\n    if (!this.#control) {\n      this.#control = control;\n    }\n\n    if (control.value === null || control.value === undefined) {\n      return noErrors;\n    }\n\n    if (typeof control.value !== 'number') {\n      return {\n        notTypeOfNumber: { value: control.value },\n      };\n    }\n\n    return noErrors;\n  }\n\n  public registerOnChange(fn: (value: number | undefined) => void): void {\n    this.#onChange = fn;\n  }\n\n  public registerOnTouched(fn: () => void): void {\n    this.#onTouched = fn;\n  }\n\n  @HostListener('blur')\n  public onBlur(): void {\n    this.#onTouched();\n  }\n\n  #handleValueChange(): void {\n    const numericValue = this.#getNumericValue();\n\n    if (this.#value !== numericValue) {\n      this.#value = numericValue;\n      this.#onChange(numericValue);\n    }\n  }\n\n  #getNumericValue(): number | undefined {\n    const inputValue = this.#getInputValue();\n    const numericValue = this.#autonumericInstance.getNumber();\n    return inputValue &&\n      !this.#isInputValueTheCurrencySymbol(inputValue) &&\n      typeof numericValue === 'number'\n      ? numericValue\n      : undefined;\n  }\n\n  /**\n   * Due to AutoNumeric's hover logic - when AutoNumeric has a currency symbol, the value\n   * that we get back on empty fields will be the currency symbol.\n   * The following logic ensures that we don't accidentally set\n   * a form value when the only input was the programmatically-added currency symbol.\n   */\n  #isInputValueTheCurrencySymbol(inputValue: string): boolean {\n    /* istanbul ignore next */\n    const currencySymbol = (\n      (this.#autonumericOptions as AutoNumeric.Options)?.currencySymbol ?? ''\n    ).trim();\n    return !!currencySymbol && inputValue === currencySymbol;\n  }\n\n  #getInputValue(): string {\n    return this.#elementRef.nativeElement.value;\n  }\n\n  #updateAutonumericInstance(): void {\n    this.#autonumericInstance.update(\n      this.#autonumericOptions as AutoNumeric.Options,\n    );\n  }\n\n  #mergeOptions(\n    value: SkyAutonumericOptions | undefined,\n  ): SkyAutonumericOptions {\n    const globalOptions: SkyAutonumericOptions = this.#globalConfig.getConfig();\n\n    let newOptions: SkyAutonumericOptions | undefined;\n    if (typeof value === 'string') {\n      const predefinedOptions = AutoNumeric.getPredefinedOptions();\n      newOptions = predefinedOptions[\n        value as keyof AutoNumeric.Options\n      ] as AutoNumeric.Options;\n    } else {\n      newOptions = value;\n    }\n\n    return Object.assign({}, globalOptions, newOptions);\n  }\n\n  // istanbul ignore next\n  // eslint-disable-next-line @typescript-eslint/no-empty-function , @typescript-eslint/no-unused-vars\n  #onChange = (_: number | undefined): void => {};\n  // istanbul ignore next\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  #onTouched = (): void => {};\n}\n","import { NgModule } from '@angular/core';\n\nimport { SkyAutonumericDirective } from './autonumeric.directive';\n\n@NgModule({\n  imports: [SkyAutonumericDirective],\n  exports: [SkyAutonumericDirective],\n})\nexport class SkyAutonumericModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.SkyAutonumericOptionsProvider"],"mappings":"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"}