{"version":3,"file":"usitsdasdesign-dds-ng-core-common-behaviors.mjs","sources":["../../src/app/dds/core/common-behaviors/destroy.ts","../../src/app/dds/core/common-behaviors/i18n.ts","../../src/app/dds/core/common-behaviors/responsiveness.ts","../../src/app/dds/core/common-behaviors/form-accessor.ts","../../src/app/dds/core/common-behaviors/error-state.ts","../../src/app/dds/core/common-behaviors/usitsdasdesign-dds-ng-core-common-behaviors.ts"],"sourcesContent":["import { OnDestroy } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { Constructor } from './constructor';\n\nexport interface IDestroy {\n  destroy: Subject<void>;\n  ngOnDestroy(): void;\n}\n\nexport type DestroyCtor = Constructor<IDestroy>;\n\nexport function DestroyMixin<T extends Constructor<any>>(Base: T = class {} as any): DestroyCtor & T {\n  return class extends Base implements OnDestroy {\n    public destroy = new Subject<void>();\n\n    constructor(...args: any[]) {\n      super(...args);\n    }\n\n    public ngOnDestroy(): void {\n      this.destroy.next();\n      this.destroy.complete();\n    }\n  };\n}\n","import { OnInit } from '@angular/core';\nimport { I18nService, ITranslation } from '@usitsdasdesign/dds-ng/shared/i18n';\nimport { takeUntil } from 'rxjs/operators';\nimport { Constructor } from './constructor';\nimport { IDestroy } from './destroy';\n\nexport interface II18n extends IDestroy {\n  i18n: I18nService;\n  ngOnInit(): void;\n}\n\nexport type I18nCtor = Constructor<II18n>;\n\nexport function I18nMixin<T extends Constructor<any>>(Base: T = class { } as any): I18nCtor & T {\n  return class extends Base implements OnInit {\n    constructor(...args: any[]) {\n      super(...args);\n    }\n\n    public ngOnInit(): void {\n      if (super.ngOnInit) super.ngOnInit();\n\n      this.getI18n();\n    }\n\n    /**\n     * Retrieves the internationalization (i18n) translations and sets the i18n texts.\n     */\n    public getI18n(): void {\n      this.i18n\n        .getTranslationObs()\n        .pipe(takeUntil(this.destroy))\n        .subscribe((data: ITranslation) => this.setI18nTexts(data));\n    }\n\n    public setI18nTexts(translation: ITranslation): void { }\n  };\n}\n","import { ChangeDetectorRef, OnInit } from '@angular/core';\nimport { Devices, Size } from '@usitsdasdesign/dds-ng/shared';\nimport { ResizeHandlerService } from '@usitsdasdesign/dds-ng/shared/resize-handler';\nimport { takeUntil } from 'rxjs/operators';\nimport { Constructor } from './constructor';\nimport { IDestroy } from './destroy';\n\nexport interface IResponsiveness extends IDestroy {\n  size: Size | string | undefined;\n  isResponsive: boolean | undefined;\n  smallDevice: boolean;\n  _size: Size | string;\n  resizeService: ResizeHandlerService;\n  cdr: ChangeDetectorRef;\n  ngOnInit(): void;\n}\n\nexport type ResponsivenessCtor = Constructor<IResponsiveness>;\n\nexport function ResponsivenessMixin<T extends Constructor<any>>(Base: T = class { } as any): ResponsivenessCtor & T {\n  return class extends Base implements OnInit {\n    // Indicates if the device is small (not a desktop)\n    public smallDevice: boolean;\n    // Stores the initial size or a string representation of it\n    public _size: Size | string;\n\n    // Constructor that calls the parent class constructor\n    constructor(...args: any[]) {\n      super(...args);\n    }\n\n    // Angular lifecycle hook that is called after the component's view has been initialized\n    public ngOnInit(): void {\n      // Call the parent class's ngOnInit if it exists\n      if (super.ngOnInit) super.ngOnInit();\n\n      // Initialize _size with the current size\n      this._size = this.size;\n\n      // Check the responsiveness of the current device\n      this.checkResponsiveness();\n    }\n\n    // Checks if the component should respond to device size changes\n    public checkResponsiveness(): void {\n      if (this.isResponsive) {\n        // Check the current device size\n        this.checkDevice(this.resizeService.getDevice());\n        // Subscribe to device size changes and update the component accordingly\n        this.resizeService.device$.pipe(takeUntil(this.destroy)).subscribe((currentDevice: Devices) => this.checkDevice(currentDevice));\n      }\n    }\n\n    // Updates the component based on the current device size\n    public checkDevice(device: Devices): void {\n      // Set the size based on whether the device is a desktop or not\n      this.size = device === Devices.desktop ? this._size : Size.lg;\n      // Update the smallDevice flag based on the device type\n      this.smallDevice = device !== Devices.desktop;\n      // Trigger change detection to update the view\n      this.cdr.detectChanges();\n    }\n  };\n}\n","import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { forwardRef, StaticProvider, Component } from '@angular/core';\nimport { Constructor } from './constructor';\n\nexport interface IFormAccessor extends ControlValueAccessor {\n  writeValue(value: any): void;\n  onModelTouched: () => void;\n  onModelChange: (_: unknown) => void;\n  setDisabledState(_: boolean): void;\n}\n\nexport type FormAccessorCtor = Constructor<IFormAccessor>;\n\nexport function FormAccessorMixin<T extends Constructor<any>>(Base: T = class {} as any): FormAccessorCtor & T {\n  return class extends Base implements ControlValueAccessor {\n    public onModelTouched: () => void = () => {};\n    public onModelChange: (_: unknown) => void = () => {};\n    public setDisabledState(_: boolean): void {}\n    public writeValue(): void {}\n\n    constructor(...args: any[]) {\n      super(...args);\n    }\n\n    public registerOnChange(fn: (_: unknown) => void): void {\n      this.onModelChange = fn;\n    }\n\n    public registerOnTouched(fn: () => void): void {\n      this.onModelTouched = fn;\n    }\n  };\n}\n\nexport function valueAccessor(components: Component): StaticProvider {\n  return {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => components),\n    multi: true,\n  };\n}\n","import { ChangeDetectorRef, DoCheck, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport { FormControl, FormGroupDirective, NgControl, NgForm } from '@angular/forms';\nimport { ErrorState } from '@usitsdasdesign/dds-ng/shared';\nimport { Subject } from 'rxjs';\nimport { Constructor } from './constructor';\n\nexport interface IErrorState {\n  errorState: string | ErrorState | undefined;\n  ngControl: NgControl;\n  parentFormGroup: FormGroupDirective;\n  parentForm: NgForm;\n  isError: boolean | undefined;\n  isError$: Subject<boolean>;\n  _isError: boolean;\n  _isFormControlRequired: boolean;\n  cdr: ChangeDetectorRef;\n  ngOnInit(): void;\n  ngOnChanges(changes: SimpleChanges): void;\n  ngDoCheck(): void;\n  writeValue(value: any): void;\n  checkError(): void;\n  updateFormErrorState(errorState: string | ErrorState): void;\n  isErrorStateDefault(control: FormControl | null): boolean;\n  isErrorStateOnFocus(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean;\n}\n\nexport type ErrorStateCtor = Constructor<IErrorState>;\n\nexport function ErrorStateMixin<T extends Constructor<any>>(Base: T = class { } as any): ErrorStateCtor & T {\n  return class extends Base implements OnInit, OnChanges, DoCheck {\n    // Indicates if there is an error\n    public _isError: boolean;\n    // Indicates if the form control is required\n    public _isFormControlRequired = false;\n    // Subject to emit error state changes\n    public isError$ = new Subject<boolean>();\n\n    constructor(...args: any[]) {\n      super(...args);\n    }\n\n    // Lifecycle hook to perform custom change detection\n    public ngDoCheck(): void {\n      if (super.ngDoCheck) super.ngDoCheck();\n\n      if (this.ngControl) {\n        this.updateFormErrorState(this.errorState);\n      }\n    }\n\n    // Lifecycle hook to initialize the component\n    public ngOnInit(): void {\n      if (super.ngOnInit) super.ngOnInit();\n\n      if (this.errorState === ErrorState.default) this.checkError();\n    }\n\n    // Lifecycle hook to handle changes\n    public ngOnChanges(changes: SimpleChanges): void {\n      if (changes.isError && !changes.isError.firstChange) this.checkError();\n    }\n\n    // Method to write value and check for errors\n    public writeValue(): void {\n      if (this.errorState === ErrorState.default) this.checkError();\n    }\n\n    // Method to update the form error state\n    public updateFormErrorState(errorState: string | ErrorState): void {\n      const oldState = this._isError;\n      const parent = this.parentFormGroup || this.parentForm;\n      const control = this.ngControl ? (this.ngControl.control as FormControl) : null;\n      let newState: boolean;\n\n      this._isFormControlRequired = !!control?.errors?.required;\n\n      if (errorState === ErrorState.focusOut) {\n        newState = this.isErrorStateOnFocus(control, parent);\n      } else {\n        newState = this.isErrorStateDefault(control);\n      }\n\n      if (newState !== oldState) {\n        this._isError = newState;\n        this.isError$.next(newState);\n        this.cdr.detectChanges();\n      }\n    }\n\n    // Method to check for errors and update the state\n    public checkError(): void {\n      if (this.isError !== undefined) {\n        this._isError = this.isError;\n        this.isError$.next(this.isError);\n      }\n\n      this.cdr.detectChanges();\n    }\n\n    // Method to determine if the control is in error state by default\n    public isErrorStateDefault(control: FormControl | null): boolean {\n      return !!(control && control.invalid);\n    }\n\n    // Method to determine if the control is in error state when focused\n    public isErrorStateOnFocus(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {\n      const isSubmitted = form && form.submitted;\n      return !!(control && control.invalid && (control.dirty || control.touched || isSubmitted));\n    }\n  };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}