{"version":3,"file":"sebgroup-green-angular-src-v-angular-input-mask.mjs","sources":["../../../../libs/angular/src/v-angular/input-mask/input-mask-format.pipe.ts","../../../../libs/angular/src/v-angular/input-mask/config.ts","../../../../libs/angular/src/v-angular/input-mask/input-mask.directive.ts","../../../../libs/angular/src/v-angular/input-mask/input-mask.module.ts","../../../../libs/angular/src/v-angular/input-mask/constants.ts","../../../../libs/angular/src/v-angular/input-mask/sebgroup-green-angular-src-v-angular-input-mask.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core'\nimport _Inputmask from 'inputmask'\n\nimport type Inputmask from 'inputmask'\n\nimport type { InputmaskOptions } from './input-mask.types'\n\nconst InputmaskStatic =\n  (_Inputmask as unknown as { default?: Inputmask.Static }).default ||\n  _Inputmask\n\n@Pipe({\n    name: 'nggvInputMaskFormat',\n    standalone: false\n})\nexport class InputMaskFormatPipe implements PipeTransform {\n  transform<T = any>(value: any, options: InputmaskOptions<T>): any {\n    if (!value) return value\n    return InputmaskStatic.format(value, options)\n  }\n}\n","import { InjectionToken } from '@angular/core'\n\nexport class InputMaskConfig {\n  isAsync = false\n  inputSelector = 'input'\n}\n\nexport const INPUT_MASK_CONFIG = new InjectionToken<InputMaskConfig>(\n  'InputMaskConfig',\n)\n","import { isPlatformServer } from '@angular/common'\nimport {\n  AfterViewInit,\n  Directive,\n  ElementRef,\n  HostListener,\n  Inject,\n  Input,\n  NgZone,\n  OnDestroy,\n  OnInit,\n  Optional,\n  PLATFORM_ID,\n  Renderer2,\n  Self,\n} from '@angular/core'\nimport {\n  AbstractControl,\n  ControlValueAccessor,\n  NgControl,\n  Validator,\n} from '@angular/forms'\nimport _Inputmask from 'inputmask'\n\nimport type Inputmask from 'inputmask'\n\nimport { INPUT_MASK_CONFIG, InputMaskConfig } from './config'\n\nimport type { InputmaskOptions } from './input-mask.types'\n\nconst InputmaskConstructor =\n  (_Inputmask as unknown as { default?: Inputmask.Static }).default ||\n  _Inputmask\n\n@Directive({\n    selector: '[nggvInputMask]',\n    standalone: false\n})\nexport class NggvInputMaskDirective<T = any>\n  implements OnInit, AfterViewInit, OnDestroy, ControlValueAccessor, Validator\n{\n  /** Input settings of directive */\n  @Input() nggvInputMask: InputmaskOptions<T> = {}\n\n  inputMaskPlugin: Inputmask.Instance | undefined\n  nativeInputElement: HTMLInputElement | undefined\n  defaultInputMaskConfig = new InputMaskConfig()\n\n  private mutationObserver: MutationObserver | undefined\n\n  constructor(\n    @Optional() @Self() public ngControl: NgControl,\n    @Inject(INPUT_MASK_CONFIG) config: InputMaskConfig,\n    @Inject(PLATFORM_ID) private platformId: string,\n    private elementRef: ElementRef<HTMLInputElement | any>,\n    private renderer: Renderer2,\n    private ngZone: NgZone,\n  ) {\n    if (this.ngControl) {\n      this.ngControl.valueAccessor = this\n    }\n    this.setNativeInputElement(config)\n  }\n\n  @HostListener('input', ['$event.target.value'])\n  onInput = (_: any) => {\n    // Empty method\n  }\n\n  @HostListener('blur', ['$event.target.value'])\n  onTouched = (_: any) => {\n    // Empty method\n  }\n\n  @HostListener('keyup', ['$event'])\n  onKeyUp(event: KeyboardEvent) {\n    // Trigger \"onInput\" when pressing delete or backspace, when input is focused\n    if (['Delete', 'Backspace'].includes(event.key)) {\n      this.elementRef.nativeElement.dispatchEvent(\n        new Event('input', {\n          bubbles: true,\n          cancelable: true,\n        }),\n      )\n    }\n  }\n\n  ngOnInit() {\n    if (this.control) {\n      this.control.setValidators(\n        this.control.validator\n          ? [this.control.validator, this.validate]\n          : [this.validate],\n      )\n\n      this.control.updateValueAndValidity()\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.inputMaskPlugin?.remove()\n    this.mutationObserver?.disconnect()\n  }\n\n  initInputMask() {\n    if (\n      isPlatformServer(this.platformId) ||\n      !this.nativeInputElement ||\n      !Object.keys(this.nggvInputMask ?? {}).length\n    ) {\n      return\n    }\n\n    this.inputMaskPlugin = this.ngZone.runOutsideAngular(() =>\n      new InputmaskConstructor(this.inputMaskOptions).mask(\n        this.nativeInputElement as HTMLInputElement,\n      ),\n    )\n\n    if (this.control) {\n      setTimeout(() => {\n        this.control!.updateValueAndValidity()\n      })\n    }\n  }\n\n  ngAfterViewInit() {\n    this.initInputMask()\n  }\n\n  get inputMaskOptions(): Inputmask.Options {\n    const { parser, ...options } = this.nggvInputMask\n    return options\n  }\n\n  writeValue(value: string): void {\n    if (this.nativeInputElement) {\n      this.renderer.setProperty(this.nativeInputElement, 'value', value ?? '')\n    }\n  }\n\n  registerOnChange(fn: (_: T | null) => void): void {\n    // Use injected parser from settings to modify value\n    // of users desire\n    this.onInput = (value) => {\n      const parser = this.nggvInputMask?.parser\n      const newValue = parser && value ? parser(value) : value\n      fn(newValue)\n    }\n  }\n\n  registerOnTouched(fn: any): void {\n    this.onTouched = fn\n  }\n\n  validate = (control: AbstractControl): { [key: string]: any } | null =>\n    !control.value || !this.inputMaskPlugin || this.inputMaskPlugin.isValid()\n      ? null\n      : { invalidformat: true }\n\n  setDisabledState(disabled: boolean): void {\n    if (this.nativeInputElement) {\n      this.renderer.setProperty(this.nativeInputElement, 'disabled', disabled)\n    }\n  }\n\n  private get control(): AbstractControl | null | undefined {\n    return this.ngControl?.control\n  }\n\n  private setNativeInputElement(config: InputMaskConfig) {\n    if (this.elementRef.nativeElement.tagName === 'INPUT') {\n      this.nativeInputElement = this.elementRef.nativeElement\n    } else {\n      this.defaultInputMaskConfig = {\n        ...this.defaultInputMaskConfig,\n        ...config,\n      }\n      if (this.defaultInputMaskConfig.isAsync) {\n        // Create an observer instance linked to the callback function\n        this.mutationObserver = new MutationObserver((mutationsList) => {\n          for (const mutation of mutationsList) {\n            if (mutation.type === 'childList') {\n              const nativeInputElement =\n                this.elementRef.nativeElement.querySelector(\n                  this.defaultInputMaskConfig.inputSelector,\n                )\n              if (nativeInputElement) {\n                this.nativeInputElement = nativeInputElement\n                this.mutationObserver?.disconnect()\n                this.initInputMask()\n              }\n            }\n          }\n        })\n\n        // Start observing the target node for configured mutations\n        this.mutationObserver.observe(this.elementRef.nativeElement, {\n          childList: true,\n          subtree: true,\n        })\n      } else {\n        this.nativeInputElement = this.elementRef.nativeElement.querySelector(\n          this.defaultInputMaskConfig.inputSelector,\n        )\n      }\n    }\n  }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core'\n\nimport { INPUT_MASK_CONFIG, InputMaskConfig } from './config'\nimport { InputMaskFormatPipe } from './input-mask-format.pipe'\nimport { NggvInputMaskDirective } from './input-mask.directive'\n\n@NgModule({\n  declarations: [NggvInputMaskDirective, InputMaskFormatPipe],\n  exports: [NggvInputMaskDirective, InputMaskFormatPipe],\n  providers: [\n    {\n      provide: INPUT_MASK_CONFIG,\n      useClass: InputMaskConfig,\n    },\n  ],\n})\nexport class NggvInputMaskModule {\n  static forRoot(\n    config?: Partial<InputMaskConfig>,\n  ): ModuleWithProviders<NggvInputMaskModule> {\n    return {\n      ngModule: NggvInputMaskModule,\n      providers: [{ provide: INPUT_MASK_CONFIG, useValue: config }],\n    }\n  }\n}\n","import { InputmaskOptions } from './input-mask.types'\n\nexport const createMask = <T>(\n  options: string | InputmaskOptions<T>,\n): InputmaskOptions<T> =>\n  typeof options === 'string' ? { mask: options } : options\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}