{"version":3,"file":"ngspot-ng-superclass.mjs","sources":["../../../../../packages/ng-superclass/package/src/lib/subscribe-sink.ts","../../../../../packages/ng-superclass/package/src/lib/directive-superclass.ts","../../../../../packages/ng-superclass/package/src/lib/sync-controls/extract-control-changes.ts","../../../../../packages/ng-superclass/package/src/lib/sync-controls/sync-outer-and-inner-controls.ts","../../../../../packages/ng-superclass/package/src/lib/utils.ts","../../../../../packages/ng-superclass/package/src/lib/form-component-superclass.ts","../../../../../packages/ng-superclass/package/src/lib/tests/counter.component.ts","../../../../../packages/ng-superclass/package/src/lib/tests/counter.harness.ts","../../../../../packages/ng-superclass/package/src/lib/tests/full-name-form-group.component.ts","../../../../../packages/ng-superclass/package/src/lib/tests/full-name.harness.ts","../../../../../packages/ng-superclass/package/src/lib/tests/local-date.component.ts","../../../../../packages/ng-superclass/package/src/lib/tests/local-date.harness.ts","../../../../../packages/ng-superclass/package/src/lib/tests/one-input.component.ts","../../../../../packages/ng-superclass/package/src/lib/tests/nested.component.ts","../../../../../packages/ng-superclass/package/src/lib/tests/one-input.harness.ts","../../../../../packages/ng-superclass/package/src/lib/tests/two-inputs.harness.ts","../../../../../packages/ng-superclass/package/src/lib/tests/nested.harness.ts","../../../../../packages/ng-superclass/package/src/lib/tests/two-inputs-template-driven.component.ts","../../../../../packages/ng-superclass/package/src/index.ts","../../../../../packages/ng-superclass/package/src/ngspot-ng-superclass.ts"],"sourcesContent":["import { Injectable, OnDestroy } from '@angular/core';\r\n\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n/**\r\n * Extend this when need to handle subscriptions clean up or side-effects\r\n *\r\n * ```ts\r\n * @Component({\r\n *   selector: \"app-color-text\",\r\n *   template: `<span (click)=\"performMyAction('run')\">{{ color }}</span>`,\r\n *   changeDetection: ChangeDetectionStrategy.OnPush,\r\n * })\r\n * class ColorTextComponent extends SubscribeSink {\r\n *   @Input() color: string;\r\n *\r\n *   color$ = this.getInput$(\"color\");\r\n *\r\n *   constructor() {\r\n *     super();\r\n *\r\n *     const someOtherObservable$ = this.color$.pipe(...);\r\n *\r\n *     // no need to worry about unsubscribing. It'll be done automatically\r\n *     this.subscribeTo(someOtherObservable$);\r\n *   }\r\n *\r\n *   performMyAction = this.createEffect((action$) =>\r\n *     action$.pipe(\r\n *       switchMap((action) => api.post(action))\r\n *     )\r\n *   );\r\n * }\r\n */\r\n@Injectable()\r\nexport class SubscribeSink implements OnDestroy {\r\n  private destroy$$ = new Subject<boolean>();\r\n  destroy$ = this.destroy$$.asObservable();\r\n\r\n  createEffect<T>(factoryFn: (source: Observable<T>) => Observable<unknown>) {\r\n    return createEffectFn(factoryFn)(this.destroy$);\r\n  }\r\n\r\n  subscribeTo<T>(source: Observable<T>) {\r\n    source.pipe(takeUntil(this.destroy$)).subscribe();\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.destroy$$.next(true);\r\n  }\r\n}\r\n\r\nexport function createEffectFn<T>(\r\n  factoryFn: (source: Observable<T>) => Observable<unknown>\r\n) {\r\n  return function (destroyed$: Observable<boolean>) {\r\n    const subject = new Subject<T>();\r\n\r\n    factoryFn(subject.asObservable()).pipe(takeUntil(destroyed$)).subscribe();\r\n\r\n    return function (value: T) {\r\n      subject.next(value);\r\n    };\r\n  };\r\n}\r\n","import { Directive, OnChanges, SimpleChanges } from '@angular/core';\r\n\r\nimport {\r\n  asapScheduler,\r\n  BehaviorSubject,\r\n  merge,\r\n  Observable,\r\n  of,\r\n  Subject,\r\n} from 'rxjs';\r\nimport { delay, distinctUntilChanged, filter, map } from 'rxjs/operators';\r\n\r\nimport { SubscribeSink } from './subscribe-sink';\r\n\r\n/**\r\n * Extend this when creating a directive (including a component, which is a kind of directive) to gain access to the helpers demonstrated below.\r\n *\r\n * ```ts\r\n * @Component({\r\n *   selector: \"app-color-text\",\r\n *   template: `\r\n *     <span [style.background]=\"color\">{{ color }}</span>\r\n *   `,\r\n *   changeDetection: ChangeDetectionStrategy.OnPush,\r\n * })\r\n *  class ColorTextComponent extends DirectiveSuperclass {\r\n *   @Input() color: string;\r\n *\r\n *   color$ = this.getInput$(\"color\");\r\n * }\r\n * ```\r\n */\r\n// maybe this won't need the fake selector after https://github.com/angular/angular/issues/36427\r\n@Directive({ selector: '[ngsDirectiveSuperclass]' })\r\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\r\nexport abstract class DirectiveSuperclass\r\n  extends SubscribeSink\r\n  implements OnChanges\r\n{\r\n  /**\r\n   *  Emits the set of `@Input()` property names that change during each call to `ngOnChanges()`.\r\n   */\r\n  inputChanges$ = new Subject<Set<keyof this>>();\r\n\r\n  private onChangesRan$$ = new BehaviorSubject(false);\r\n\r\n  onChangesRan$ = this.onChangesRan$$.asObservable().pipe(\r\n    filter((x) => x),\r\n    distinctUntilChanged()\r\n  );\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    this.inputChanges$.next(\r\n      new Set(Object.getOwnPropertyNames(changes) as Array<keyof this>)\r\n    );\r\n    this.onChangesRan$$.next(true);\r\n  }\r\n\r\n  /**\r\n   * @return an observable of the values for one of this directive's `@Input()` properties\r\n   */\r\n  getInput$<K extends keyof this>(key: K): Observable<this[K]> {\r\n    // Should emit:\r\n    //   - immediately if ngOnChanges was already called\r\n    //   - on the first call to ngOnChanges\r\n    //   - after a delay if ngOnChanges is never called (when nothing is bound to the directive)\r\n    //   - when the value actually changes\r\n    return merge(\r\n      this.onChangesRan$,\r\n      this.inputChanges$,\r\n      of(0).pipe(delay(0, asapScheduler))\r\n    ).pipe(\r\n      map(() => this[key]),\r\n      distinctUntilChanged()\r\n    );\r\n  }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { AbstractControl } from '@angular/forms';\r\n\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { distinctUntilChanged } from 'rxjs/operators';\r\n\r\nimport { ArgumentsType, MethodNames, TypeOfClassMethod } from '../typings';\r\n\r\nexport type AbstractControlMethods =\r\n  | 'markAsTouched'\r\n  | 'markAsUntouched'\r\n  | 'markAsDirty'\r\n  | 'markAsPristine';\r\nexport type EmitValue = boolean;\r\nexport type Methods = Partial<Record<AbstractControlMethods, EmitValue>>;\r\n\r\n/**\r\n * Patches the method to first execute the provided function and then\r\n * the original functionality\r\n * @param obj Object with the method of interest\r\n * @param methodName Method name to patch\r\n * @param fn Function to execute before the original functionality\r\n */\r\nexport function patchObjectMethodWith<T, K extends MethodNames<T>>(\r\n  obj: T,\r\n  methodName: K,\r\n  fn: TypeOfClassMethod<T, K>\r\n) {\r\n  const originalFn = (obj[methodName] as any).bind(obj) as TypeOfClassMethod<\r\n    T,\r\n    K\r\n  >;\r\n\r\n  function updatedFn(...args: [ArgumentsType<T[K]>]) {\r\n    (fn as any)(...args);\r\n    (originalFn as any)(...args);\r\n  }\r\n\r\n  obj[methodName] = updatedFn as unknown as T[K];\r\n}\r\n\r\n/**\r\n * Extract a touched changed observable from an abstract control\r\n * @param control AbstractControl\r\n *\r\n * @usage\r\n * ```\r\n * const formControl = new FormControl();\r\n * const touchedChanged$ = extractTouchedChanges(formControl);\r\n * ```\r\n */\r\nexport function extractTouchedChanges(\r\n  control: AbstractControl\r\n): Observable<boolean> {\r\n  const methods: Methods = {\r\n    markAsTouched: true,\r\n    markAsUntouched: false,\r\n  };\r\n  return extractMethodsIntoObservable(control, methods).pipe(\r\n    distinctUntilChanged()\r\n  );\r\n}\r\n\r\n/**\r\n * Extract a dirty changed observable from an abstract control\r\n * @param control AbstractControl\r\n *\r\n * @usage\r\n * ```\r\n * const formControl = new FormControl();\r\n * const dirtyChanged$ = extractDirtyChanges(formControl);\r\n * ```\r\n */\r\nexport function extractDirtyChanges(\r\n  control: AbstractControl\r\n): Observable<boolean> {\r\n  const methods: Methods = {\r\n    markAsDirty: true,\r\n    markAsPristine: false,\r\n  };\r\n  return extractMethodsIntoObservable(control, methods).pipe(\r\n    distinctUntilChanged()\r\n  );\r\n}\r\n\r\nfunction extractMethodsIntoObservable(\r\n  control: AbstractControl,\r\n  methods: Methods\r\n) {\r\n  const changes$ = new Subject<EmitValue>();\r\n\r\n  Object.keys(methods).forEach((methodName) => {\r\n    const emitValue = methods[methodName as keyof Methods];\r\n\r\n    patchObjectMethodWith(\r\n      control,\r\n      methodName as MethodNames<AbstractControl>,\r\n      () => {\r\n        changes$.next(emitValue as boolean);\r\n      }\r\n    );\r\n  });\r\n\r\n  return changes$.asObservable();\r\n}\r\n","import { ChangeDetectorRef } from '@angular/core';\r\nimport { AbstractControl, NgControl } from '@angular/forms';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { map, startWith, takeUntil, tap } from 'rxjs/operators';\r\n\r\nimport {\r\n  extractDirtyChanges,\r\n  extractTouchedChanges,\r\n  patchObjectMethodWith,\r\n} from './extract-control-changes';\r\n\r\n/**\r\n * Syncs the outer and inner controls for validity, errors, dirty, and touched states.\r\n * Used in components that implement ControlValueAccessor\r\n */\r\nexport function syncOuterAndInnerControls(\r\n  ngControl: NgControl,\r\n  innerControls: AbstractControl[],\r\n  changeDetectorRef: ChangeDetectorRef,\r\n  destroy$: Observable<boolean>\r\n) {\r\n  if (!ngControl?.control) {\r\n    return;\r\n  }\r\n\r\n  syncOuterToInnerErrors(ngControl, innerControls, changeDetectorRef, destroy$);\r\n  syncOuterAndInnerTouched(\r\n    ngControl,\r\n    innerControls,\r\n    changeDetectorRef,\r\n    destroy$\r\n  );\r\n  syncOuterAndInnerDirty(ngControl, innerControls, changeDetectorRef, destroy$);\r\n}\r\n\r\nexport function syncOuterToInnerErrors(\r\n  ngControl: NgControl,\r\n  innerControls: AbstractControl[],\r\n  changeDetectorRef: ChangeDetectorRef,\r\n  destroy$: Observable<boolean>\r\n) {\r\n  if (!ngControl || !ngControl.statusChanges) {\r\n    return;\r\n  }\r\n\r\n  ngControl.statusChanges\r\n    .pipe(\r\n      startWith(ngControl.status),\r\n      map(() => ngControl.errors),\r\n      tap((errors) => {\r\n        for (let i = 0; i < innerControls.length; i++) {\r\n          const control = innerControls[i];\r\n          control.setErrors(errors, { emitEvent: false });\r\n        }\r\n        changeDetectorRef.detectChanges();\r\n      }),\r\n      takeUntil(destroy$)\r\n    )\r\n    .subscribe();\r\n}\r\n\r\nexport function syncOuterAndInnerTouched(\r\n  ngControl: NgControl,\r\n  innerControls: AbstractControl[],\r\n  changeDetectorRef: ChangeDetectorRef,\r\n  destroy$: Observable<boolean>\r\n) {\r\n  if (!ngControl.control) {\r\n    return;\r\n  }\r\n\r\n  const outerControl = ngControl.control;\r\n\r\n  const touched$ = extractTouchedChanges(outerControl);\r\n\r\n  touched$\r\n    .pipe(\r\n      startWith(outerControl.touched),\r\n      tap((isTouched) => {\r\n        for (let i = 0; i < innerControls.length; i++) {\r\n          const control = innerControls[i];\r\n          if (isTouched) {\r\n            control.markAsTouched({ onlySelf: true });\r\n          } else {\r\n            control.markAsUntouched({ onlySelf: true });\r\n          }\r\n        }\r\n        changeDetectorRef.detectChanges();\r\n      }),\r\n      takeUntil(destroy$)\r\n    )\r\n    .subscribe();\r\n\r\n  // inner to outer\r\n  for (let i = 0; i < innerControls.length; i++) {\r\n    const control = innerControls[i];\r\n\r\n    patchObjectMethodWith(control, 'markAsTouched', (args) => {\r\n      if (!args?.onlySelf) {\r\n        outerControl.markAsTouched();\r\n      }\r\n    });\r\n  }\r\n}\r\n\r\nexport function syncOuterAndInnerDirty(\r\n  ngControl: NgControl,\r\n  innerControls: AbstractControl[],\r\n  changeDetectorRef: ChangeDetectorRef,\r\n  destroy$: Observable<boolean>\r\n) {\r\n  if (!ngControl.control) {\r\n    return;\r\n  }\r\n\r\n  const outerControl = ngControl.control;\r\n\r\n  const dirty$ = extractDirtyChanges(outerControl);\r\n\r\n  dirty$\r\n    .pipe(\r\n      startWith(outerControl.dirty),\r\n      tap((isDirty) => {\r\n        for (let i = 0; i < innerControls.length; i++) {\r\n          const control = innerControls[i];\r\n          if (isDirty) {\r\n            control.markAsDirty({ onlySelf: true });\r\n          } else {\r\n            control.markAsPristine({ onlySelf: true });\r\n          }\r\n        }\r\n        changeDetectorRef.detectChanges();\r\n      }),\r\n      takeUntil(destroy$)\r\n    )\r\n    .subscribe();\r\n\r\n  // inner to outer\r\n  for (let i = 0; i < innerControls.length; i++) {\r\n    const control = innerControls[i];\r\n\r\n    patchObjectMethodWith(control, 'markAsDirty', (args) => {\r\n      if (!args?.onlySelf) {\r\n        outerControl.markAsDirty();\r\n      }\r\n    });\r\n  }\r\n}\r\n","import { Provider, Type } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\nimport {\r\n  defer,\r\n  filter,\r\n  Observable,\r\n  OperatorFunction,\r\n  pipe,\r\n  startWith,\r\n} from 'rxjs';\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-empty-function\r\nexport function noop() {}\r\n\r\n/**\r\n * Use in the `providers` of a component that implements `ControlValueAccessor` to reduce some boilerplate.\r\n *\r\n * ```ts\r\n * @Component({ providers: [provideValueAccessor(MyFormControl)] }\r\n * class MyFormControl extends BaseFormControl {\r\n *   // ...\r\n * }\r\n * ```\r\n */\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport function provideValueAccessor(type: Type<any>): Provider {\r\n  return {\r\n    provide: NG_VALUE_ACCESSOR,\r\n    useExisting: type,\r\n    multi: true,\r\n  };\r\n}\r\n\r\n/**\r\n * @usage\r\n * ```\r\n * source$.pipe(filterOutNullish())\r\n * ```\r\n */\r\nexport function filterOutNullish<T>(): OperatorFunction<\r\n  T | null | undefined,\r\n  T\r\n> {\r\n  return pipe(filter((x): x is T => x != null));\r\n}\r\n\r\nexport function conditionalStartWith<T>(\r\n  condition: () => boolean,\r\n  cb: () => T\r\n): OperatorFunction<unknown, T> {\r\n  return function (source: Observable<any>) {\r\n    return defer(() => {\r\n      return condition() ? source.pipe(startWith(cb())) : source;\r\n    });\r\n  };\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable @typescript-eslint/no-empty-function */\r\n/* eslint-disable @angular-eslint/directive-class-suffix */\r\nimport { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\r\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport {\r\n  ChangeDetectorRef,\r\n  Directive,\r\n  ElementRef,\r\n  HostBinding,\r\n  inject,\r\n  Input,\r\n  OnChanges,\r\n  OnDestroy,\r\n} from '@angular/core';\r\nimport {\r\n  AbstractControl,\r\n  ControlValueAccessor,\r\n  FormArray,\r\n  FormControlDirective,\r\n  FormControlName,\r\n  FormGroup,\r\n  NgControl,\r\n  NgModel,\r\n  ValidationErrors,\r\n  ValidatorFn,\r\n} from '@angular/forms';\r\n\r\nimport {\r\n  BehaviorSubject,\r\n  merge,\r\n  Observable,\r\n  of,\r\n  ReplaySubject,\r\n  Subject,\r\n} from 'rxjs';\r\nimport {\r\n  filter,\r\n  map,\r\n  shareReplay,\r\n  startWith,\r\n  switchMap,\r\n  tap,\r\n} from 'rxjs/operators';\r\n\r\nimport { DirectiveSuperclass } from './directive-superclass';\r\nimport { syncOuterAndInnerControls } from './sync-controls/sync-outer-and-inner-controls';\r\nimport { conditionalStartWith, filterOutNullish } from './utils';\r\n\r\nlet nextId = 1;\r\n\r\n/**\r\n * Extend this when creating a form control to reduce some boilerplate.\r\n *\r\n * When you simply need to use the same control that you're binding to via ngModel or formControl\r\n * on the inside of your custom component, then simply bind the inside control to `ngControl.control`:\r\n * ```ts\r\n * @Component({\r\n *   selector: 'app-one-input',\r\n *   template: `\r\n *     <input [formControl]=\"ngControl.control\" />\r\n *   `,\r\n * })\r\n * export class OneInputComponent extends FormComponentSuperclass<string> {}\r\n * ```\r\n *\r\n * If you have some custom component logic that requires its own state management,\r\n * use viewModel as the internal state\r\n * ```ts\r\n * @Component({\r\n *   selector: 'app-counter',\r\n *   template: `\r\n *     <button (click)=\"increment()\" (blur)=\"onTouched()\">\r\n *       {{ viewModel.value }}\r\n *     </button>\r\n *   `,\r\n * })\r\n * export class CounterComponent extends FormComponentSuperclass<number> {\r\n *   viewModel = new FormControl(0);\r\n *\r\n *   increment() {\r\n *     this.viewModel.setValue(this.viewModel.value + 1);\r\n *   }\r\n * }\r\n * ```\r\n *\r\n * Example when you need to transform the value used outside of the component to the\r\n * structure representing internal viewModel:\r\n * ```ts\r\n * @Component({\r\n *   selector: 'app-local-date',\r\n *   template: `\r\n *     <input [formControl]=\"viewModel\" type=\"datetime-local\" />\r\n *   `,\r\n * })\r\n * export class LocalDateComponent extends FormComponentSuperclass<Date, string> {\r\n *   viewModel = new FormControl();\r\n *\r\n *   outerToInner(incomingValues$: Observable<Date>): Observable<string> {\r\n *     return incomingValues$.pipe(\r\n *       map((date) => {\r\n *         if (!date) {\r\n *           return ''; // happens during initialization\r\n *         }\r\n *         return date.toISOString().substr(0, 16);\r\n *       })\r\n *     );\r\n *   }\r\n *\r\n *   innerToOuter(outgoingValues$: Observable<string>): Observable<Date> {\r\n *     return outgoingValues$.pipe(\r\n *       map((inner) => {\r\n *         if (!inner) {\r\n *           return (null as unknown) as Date;\r\n *         }\r\n *         return new Date(inner + 'Z');\r\n *       })\r\n *     );\r\n *   }\r\n * }\r\n * ```\r\n */\r\n@Directive()\r\nexport abstract class FormComponentSuperclass<OuterType, InnerType = OuterType>\r\n  extends DirectiveSuperclass\r\n  implements ControlValueAccessor, OnChanges, OnDestroy\r\n{\r\n  /**\r\n   * A reference to the outer control. Use ngControl.control inside of the template\r\n   * if you want to simply forward the outer control.\r\n   */\r\n  ngControl: FormControlDirective | FormControlName | NgModel;\r\n\r\n  /**\r\n   * Tracks internal control value (view-model).\r\n   */\r\n  protected viewModel?:\r\n    | AbstractControl<InnerType>\r\n    | FormGroup<{ [K in keyof InnerType]: any }>\r\n    | FormArray<any>;\r\n\r\n  /**\r\n   * Resolved viewModel.\r\n   *\r\n   * Since `viewModel` is set in the class that extends from this class,\r\n   * the `this.viewModel` is undefined at the time the observable expression\r\n   * is defined. That's why we use the trick of `of(null).pipe(map(() => ...))`.\r\n   * This way `this.viewModel` is defined when observable is subscribed to.\r\n   */\r\n  private viewModel$ = of(null).pipe(\r\n    map(() => this.viewModel as AbstractControl<InnerType>),\r\n    filterOutNullish()\r\n  );\r\n\r\n  private viewModelValueChanges$ = this.viewModel$.pipe(\r\n    switchMap((viewModel) => viewModel.valueChanges)\r\n  );\r\n\r\n  /**\r\n   * Stream of values that are either set on the outer control\r\n   * or set via the value property\r\n   */\r\n  private incomingValues$$ = new ReplaySubject<OuterType>(1);\r\n\r\n  protected hostEl = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\r\n\r\n  protected focusMonitor = inject(FocusMonitor);\r\n\r\n  protected changeDetectorRef = inject(ChangeDetectorRef);\r\n\r\n  protected focusMonitor$: Observable<FocusOrigin>;\r\n\r\n  /**\r\n   * Built-in validator reference\r\n   */\r\n  private validator: ValidatorFn | undefined;\r\n\r\n  private disabled$$ = new BehaviorSubject<boolean>(false);\r\n  disabled$ = this.disabled$$.asObservable();\r\n\r\n  @HostBinding()\r\n  id = `super-comp-${nextId++}`;\r\n\r\n  stateChanges = new Subject<void>();\r\n\r\n  get value() {\r\n    return this._value;\r\n  }\r\n  set value(val: OuterType) {\r\n    if (val !== this._value) {\r\n      this.incomingValues$$.next(val);\r\n    }\r\n  }\r\n  private _value: OuterType;\r\n\r\n  @Input()\r\n  get disabled(): boolean {\r\n    return this.disabled$$.getValue();\r\n  }\r\n  set disabled(value: boolean | string) {\r\n    this.disabled$$.next(coerceBooleanProperty(value));\r\n    this.stateChanges.next();\r\n  }\r\n\r\n  private _focused: boolean;\r\n  get focused() {\r\n    return this._focused;\r\n  }\r\n  set focused(val: boolean) {\r\n    this._focused = val;\r\n  }\r\n\r\n  /**\r\n   * Stream that takes all incoming values, optionally applies user-provided\r\n   * transformation, and commits the value to the inner form control\r\n   */\r\n  private outerToInner$ = of(null).pipe(\r\n    switchMap(() => this.incomingValues$$),\r\n    tap((value) => {\r\n      this._value = value;\r\n      // workaround for an edge case where if template-driven binding is\r\n      // used for the outer control, typing in the inner control does not\r\n      // reflect on the outer control\r\n      if (this.ngControl instanceof NgModel) {\r\n        this.ngControl.control.setValue(value, {\r\n          emitEvent: false,\r\n          onlySelf: true,\r\n        });\r\n      }\r\n    }),\r\n    switchMap((val) => {\r\n      return of(val).pipe((s) => this.outerToInner(s));\r\n    }),\r\n    tap((value) => {\r\n      this.viewModel?.setValue(value as any, { emitEvent: false });\r\n      this.viewModel?.updateValueAndValidity({ emitEvent: false });\r\n      this.stateChanges.next();\r\n      this.changeDetectorRef.detectChanges();\r\n    }),\r\n    shareReplay(1)\r\n  );\r\n\r\n  /**\r\n   * Stream that listens to values as user types in the input, optionally applies\r\n   * user-provided transformation, and emits the result to the outer form control\r\n   */\r\n  private innerToOuter$ = this.viewModelValueChanges$.pipe(\r\n    switchMap((val) => {\r\n      return of(val).pipe((s) => this.innerToOuter(s));\r\n    }),\r\n    filter((value) => !this.ngControl || this.ngControl.value !== value),\r\n    tap((value) => {\r\n      this.emitOutgoingValue(value);\r\n    }),\r\n    shareReplay(1)\r\n  );\r\n\r\n  latestValue$ = merge(\r\n    of<null>(null),\r\n    this.incomingValues$$,\r\n    this.innerToOuter$\r\n  );\r\n\r\n  innerControlValues$: Observable<InnerType> = this.viewModel$.pipe(\r\n    switchMap((viewModel) =>\r\n      viewModel.valueChanges.pipe(startWith(viewModel.value))\r\n    )\r\n  );\r\n\r\n  constructor() {\r\n    super();\r\n    this.provideValueAccessor();\r\n    this.monitorFocus();\r\n\r\n    void Promise.resolve().then(() => {\r\n      if (this.ngControl) {\r\n        this.subscribeTo(\r\n          this.ngControl.control.valueChanges.pipe(\r\n            conditionalStartWith(\r\n              () => !(this.ngControl instanceof NgModel),\r\n              () => this.ngControl.control.value\r\n            ),\r\n            filter((val) => val !== this._value),\r\n            tap(this.incomingValues$$)\r\n          )\r\n        );\r\n      }\r\n      this.subscribeTo(this.outerToInner$);\r\n      this.subscribeTo(this.innerToOuter$);\r\n      this.setupValidator();\r\n      this.syncOuterAndInnerControls();\r\n    });\r\n\r\n    const markAsDirty$ = this.viewModel$.pipe(\r\n      switchMap((viewModel) =>\r\n        viewModel.valueChanges.pipe(tap(() => viewModel.markAsDirty()))\r\n      )\r\n    );\r\n    this.subscribeTo(markAsDirty$);\r\n  }\r\n\r\n  override ngOnChanges(changes: any) {\r\n    // need to call detectChanges for an edge-case where switching between\r\n    // two child custom control components with built-in validation results\r\n    // in a different error for the outer control. Without calling detectChanges\r\n    // ExpressionChangedAfterItHasBeenCheckedError is thrown.\r\n    // ATTENTION! I could not come up with a unit-test for this. Modify with\r\n    // manual thorough testing.\r\n    this.changeDetectorRef.detectChanges();\r\n    super.ngOnChanges(changes);\r\n  }\r\n\r\n  override ngOnDestroy() {\r\n    this.stateChanges.complete();\r\n    this.focusMonitor.stopMonitoring(this.hostEl);\r\n    if (this.validator && this.ngControl) {\r\n      this.ngControl.control.removeValidators(this.validator);\r\n    }\r\n    super.ngOnDestroy();\r\n  }\r\n\r\n  /**\r\n   * Implement this method in the consuming component for built-in validation.\r\n   * @param control The control being validated\r\n   */\r\n  validate?(control: AbstractControl<OuterType>): ValidationErrors | null;\r\n\r\n  // these three are a part of ControlValueAccessor interface\r\n  // we do not implement them so that we can use either the forwarded\r\n  // ngModel.control or the viewModel in the template\r\n  writeValue() {}\r\n  registerOnChange() {}\r\n  registerOnTouched() {}\r\n\r\n  /** Call this to \"commit\" a control visit, traditionally done e.g. on blur. */\r\n  onTouched() {\r\n    this.viewModel?.markAsTouched();\r\n  }\r\n\r\n  /** Called as angular propagates disabled changes to this `ControlValueAccessor`. You normally do not need to use it. */\r\n  setDisabledState(isDisabled: boolean): void {\r\n    this.disabled$$.next(isDisabled);\r\n    this.changeDetectorRef.markForCheck();\r\n  }\r\n\r\n  /**\r\n   * Override this to modify a value coming from the outside to the format needed within this component.\r\n   * Example:\r\n   * ```ts\r\n   * return values$.pipe(map(val => val.toString()));\r\n   * ```\r\n   * @param values$ Stream of values set from the outside\r\n   * @returns Stream of transformed values that conform to the type of inner control\r\n   */\r\n  protected outerToInner = (\r\n    values$: Observable<OuterType>\r\n  ): Observable<InnerType> => {\r\n    return values$ as unknown as Observable<InnerType>;\r\n  };\r\n\r\n  /**\r\n   * Override this to modify a value coming from within this component to the format expected on the outside.\r\n   * Example:\r\n   * ```ts\r\n   * return values$.pipe(map(val => parseInt(val)));\r\n   * ```\r\n   * @param values$ Stream of inner formControl.valueChanges\r\n   * @returns Stream of transformed values that conform to the type of outer control\r\n   */\r\n  protected innerToOuter = (\r\n    values$: Observable<InnerType>\r\n  ): Observable<OuterType> => {\r\n    return values$ as unknown as Observable<OuterType>;\r\n  };\r\n\r\n  /**\r\n   * Call this to emit a new value when it changes.\r\n   */\r\n  private emitOutgoingValue(value: OuterType) {\r\n    this._value = value;\r\n    if (!this.ngControl?.control) {\r\n      return;\r\n    }\r\n    this.ngControl.control.setValue(value);\r\n    this.ngControl.control.markAsDirty();\r\n    this.stateChanges.next();\r\n  }\r\n\r\n  /**\r\n   * Sets the instance of this component as the valueAccessor. Since this is\r\n   * done here, there's no need to do that on the component that extends this class.\r\n   * https://github.com/angular/components/blob/master/guides/creating-a-custom-form-field-control.md#ngcontrol\r\n   */\r\n  private provideValueAccessor() {\r\n    const ngControl = inject(NgControl, { optional: true, self: true });\r\n\r\n    if (\r\n      ngControl != null &&\r\n      (ngControl instanceof FormControlDirective ||\r\n        ngControl instanceof FormControlName ||\r\n        ngControl instanceof NgModel)\r\n    ) {\r\n      // Setting the value accessor directly (instead of using\r\n      // the providers) to avoid running into a circular import.\r\n      this.ngControl = ngControl;\r\n      this.ngControl.valueAccessor = this;\r\n    }\r\n  }\r\n\r\n  private setupValidator() {\r\n    if (this.validate && this.ngControl) {\r\n      this.validator = this.validate.bind(this);\r\n      this.ngControl.control.addValidators(this.validator);\r\n      this.ngControl.control.updateValueAndValidity({\r\n        emitEvent: false,\r\n        onlySelf: true,\r\n      });\r\n    }\r\n  }\r\n\r\n  private monitorFocus() {\r\n    this.focusMonitor$ = this.focusMonitor.monitor(this.hostEl, true).pipe(\r\n      tap((origin) => {\r\n        const changed = this._focused !== !!origin;\r\n        this._focused = !!origin;\r\n        if (changed) {\r\n          this.stateChanges.next();\r\n        }\r\n      })\r\n    );\r\n\r\n    this.subscribeTo(this.focusMonitor$);\r\n  }\r\n\r\n  /**\r\n   * Syncs touched and dirty states between inner controls and the forwarded ngControl\r\n   * @param innerControls controls that need to be synced\r\n   */\r\n  private syncOuterAndInnerControls() {\r\n    // The ngControl.control and ngControl.statusChanges used by\r\n    // the following methods are resolved on the next tick. So this function is\r\n    // called from withing the Promise.resolve().\r\n    if (this.ngControl && this.viewModel) {\r\n      syncOuterAndInnerControls(\r\n        this.ngControl,\r\n        [this.viewModel],\r\n        this.changeDetectorRef,\r\n        this.destroy$\r\n      );\r\n    }\r\n  }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component } from '@angular/core';\r\nimport { AbstractControl, FormControl } from '@angular/forms';\r\n\r\nimport { FormComponentSuperclass } from '../form-component-superclass';\r\n\r\n@Component({\r\n  selector: 'ngs-counter',\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n  template: `\r\n    <button [ngClass]=\"{ disabled }\" (click)=\"increment()\" (blur)=\"onTouched()\">\r\n      {{ viewModel.value }}\r\n    </button>\r\n  `,\r\n})\r\nexport class CounterComponent extends FormComponentSuperclass<number> {\r\n  override viewModel = new FormControl(0, { nonNullable: true });\r\n\r\n  increment() {\r\n    if (!this.disabled) {\r\n      this.viewModel.setValue(this.viewModel.value + 1);\r\n    }\r\n  }\r\n\r\n  override validate(control: AbstractControl) {\r\n    if (control.value > 10) {\r\n      return { tooMany: true };\r\n    }\r\n    return null;\r\n  }\r\n}\r\n","import { ComponentHarness } from '@angular/cdk/testing';\r\n\r\nexport class CounterHarness extends ComponentHarness {\r\n  static hostSelector = 'ngs-counter';\r\n\r\n  buttonEl = this.locatorFor('button');\r\n\r\n  async value() {\r\n    const buttonEl = await this.buttonEl();\r\n    return await buttonEl.text();\r\n  }\r\n\r\n  async increment() {\r\n    const buttonEl = await this.buttonEl();\r\n    await buttonEl.click();\r\n  }\r\n\r\n  async visitButton() {\r\n    const buttonEl = await this.buttonEl();\r\n    await buttonEl.focus();\r\n    await buttonEl.blur();\r\n  }\r\n\r\n  async isHostMarkedAs(state: 'touched' | 'dirty' | 'valid' | 'invalid') {\r\n    const host = await this.host();\r\n    return await host.hasClass(`ng-${state}`);\r\n  }\r\n}\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport {\r\n  AbstractControl,\r\n  FormControl,\r\n  FormGroup,\r\n  ReactiveFormsModule,\r\n  ValidatorFn,\r\n} from '@angular/forms';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { FormComponentSuperclass } from '../form-component-superclass';\r\n\r\ntype OuterType = string | undefined;\r\ntype InnerType = {\r\n  firstName: string;\r\n  lastName: string;\r\n};\r\n\r\n@Component({\r\n  selector: 'ngs-full-name',\r\n  standalone: true,\r\n  imports: [ReactiveFormsModule],\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  template: `\r\n    <form [formGroup]=\"viewModel\">\r\n      <input\r\n        formControlName=\"firstName\"\r\n        name=\"firstName\"\r\n        placeholder=\"First name\"\r\n      />\r\n      &nbsp;\r\n      <input\r\n        formControlName=\"lastName\"\r\n        name=\"lastName\"\r\n        placeholder=\"Last name\"\r\n      />\r\n    </form>\r\n  `,\r\n})\r\nexport class FullNameReactiveComponent extends FormComponentSuperclass<\r\n  OuterType,\r\n  InnerType\r\n> {\r\n  override viewModel = new FormGroup(\r\n    {\r\n      firstName: new FormControl('', { nonNullable: true }),\r\n      lastName: new FormControl('', { nonNullable: true }),\r\n    },\r\n    { validators: FirstAndLastNameValidator() }\r\n  );\r\n\r\n  override outerToInner = (fullName$: Observable<OuterType>) =>\r\n    fullName$.pipe(\r\n      map((fullName) => {\r\n        const [firstName, lastName] = (fullName ?? '').split(' ');\r\n        const inner: InnerType = {\r\n          firstName: firstName ?? '',\r\n          lastName: lastName ?? '',\r\n        };\r\n        return inner;\r\n      })\r\n    );\r\n\r\n  override innerToOuter = (innerValues$: Observable<InnerType>) =>\r\n    innerValues$.pipe(\r\n      map(({ firstName, lastName }) => {\r\n        let result = '';\r\n        if (firstName) {\r\n          result += firstName;\r\n        }\r\n        if (lastName) {\r\n          result += ` ${lastName}`;\r\n        }\r\n        return result;\r\n      })\r\n    );\r\n\r\n  override validate(control: AbstractControl<OuterType>) {\r\n    if (!control.value) {\r\n      return null;\r\n    }\r\n    return this.viewModel.errors;\r\n  }\r\n}\r\n\r\nconst allowedNames: InnerType[] = [\r\n  { firstName: 'Bob', lastName: 'Swagger' },\r\n  { firstName: 'Jack', lastName: 'Reacher' },\r\n];\r\n\r\nfunction FirstAndLastNameValidator(): ValidatorFn {\r\n  return (control: AbstractControl<InnerType>) => {\r\n    const error = isFirstAndLastNameValid(control.value)\r\n      ? null\r\n      : {\r\n          notAllowedName: {\r\n            actual: control.value,\r\n            allowed: allowedNames,\r\n          },\r\n        };\r\n    return error;\r\n  };\r\n}\r\n\r\nfunction isFirstAndLastNameValid({ firstName, lastName }: InnerType): boolean {\r\n  return allowedNames.some(\r\n    (allowed) =>\r\n      allowed.firstName === firstName && allowed.lastName === lastName\r\n  );\r\n}\r\n","import { CustomFormControlHarness } from '@ngspot/ng-superclass/testing';\r\n\r\nexport class FullNameHarness extends CustomFormControlHarness<string> {\r\n  static hostSelector = 'ngs-full-name';\r\n\r\n  firstNameEl = this.locatorFor('input[name=\"firstName\"]');\r\n  lastNameEl = this.locatorFor('input[name=\"lastName\"]');\r\n\r\n  async value() {\r\n    const firstNameEl = await this.firstNameEl();\r\n    const lastNameEl = await this.lastNameEl();\r\n    const firstName = await firstNameEl.getProperty<string>('value');\r\n    const lastName = await lastNameEl.getProperty<string>('value');\r\n    let result = '';\r\n    if (firstName) {\r\n      result += firstName;\r\n    }\r\n    if (lastName) {\r\n      result += ` ${lastName}`;\r\n    }\r\n    return result;\r\n  }\r\n\r\n  async setValue(fullName: string) {\r\n    const firstNameEl = await this.firstNameEl();\r\n    const lastNameEl = await this.lastNameEl();\r\n\r\n    await firstNameEl.clear();\r\n    await lastNameEl.clear();\r\n    // We don't want to send keys for the value if the value is an empty\r\n    // string in order to clear the value. Sending keys with an empty string\r\n    // still results in unnecessary focus events.\r\n    if (fullName) {\r\n      const [firstName, lastName] = fullName.split(' ');\r\n\r\n      if (firstName) {\r\n        await firstNameEl.sendKeys(firstName);\r\n      }\r\n      if (lastName) {\r\n        await lastNameEl.sendKeys(lastName);\r\n      }\r\n    }\r\n  }\r\n\r\n  async touch() {\r\n    const inputEl = await this.firstNameEl();\r\n    await inputEl.focus();\r\n    await inputEl.blur();\r\n  }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport {\r\n  AbstractControl,\r\n  FormControl,\r\n  ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { FormComponentSuperclass } from '../form-component-superclass';\r\n\r\n@Component({\r\n  selector: 'ngs-local-date',\r\n  standalone: true,\r\n  imports: [ReactiveFormsModule],\r\n  template: ` <input type=\"datetime-local\" [formControl]=\"viewModel\" /> `,\r\n})\r\nexport class LocalDateComponent extends FormComponentSuperclass<Date, string> {\r\n  override viewModel = new FormControl<string>('', { nonNullable: true });\r\n\r\n  override outerToInner = (incomingValues$: Observable<Date>) =>\r\n    incomingValues$.pipe(\r\n      map((date) => {\r\n        if (!date) {\r\n          return ''; // happens during initialization\r\n        }\r\n        return date.toISOString().substring(0, 16);\r\n      })\r\n    );\r\n\r\n  override innerToOuter = (outgoingValues$: Observable<string>) =>\r\n    outgoingValues$.pipe(\r\n      map((inner) => {\r\n        if (!inner) {\r\n          return null as unknown as Date;\r\n        }\r\n        return new Date(inner + 'Z');\r\n      })\r\n    );\r\n\r\n  override validate(control: AbstractControl) {\r\n    const val = control.value;\r\n    if (val instanceof Date) {\r\n      if (val.getDate() === 16) {\r\n        return { wrong: true };\r\n      }\r\n    }\r\n    return null;\r\n  }\r\n}\r\n","import { CustomFormControlHarness } from '@ngspot/ng-superclass/testing';\r\n\r\nexport class LocalDateHarness extends CustomFormControlHarness<string> {\r\n  static hostSelector = 'ngs-local-date';\r\n\r\n  inputEl = this.locatorFor('input');\r\n\r\n  // eslint-disable-next-line @typescript-eslint/require-await\r\n  async setValue() {\r\n    // input of type datetime-local does not support typing via sending keys to it.\r\n    throw new Error('Use `spectator.component.viewModel.setValue()` instead');\r\n  }\r\n\r\n  async value() {\r\n    const inputEl = await this.inputEl();\r\n    const value = await inputEl.getProperty('value');\r\n    return value as string;\r\n  }\r\n\r\n  async touch() {\r\n    const inputEl = await this.inputEl();\r\n    await inputEl.focus();\r\n    await inputEl.blur();\r\n  }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { AbstractControl, ReactiveFormsModule } from '@angular/forms';\r\n\r\nimport { FormComponentSuperclass } from '../form-component-superclass';\r\n\r\ntype OuterType = string | undefined;\r\n\r\n@Component({\r\n  selector: 'ngs-one-input',\r\n  standalone: true,\r\n  imports: [ReactiveFormsModule],\r\n  template: `<input [formControl]=\"ngControl.control\" />`,\r\n})\r\nexport class OneInputComponent extends FormComponentSuperclass<OuterType> {\r\n  override validate(control: AbstractControl<OuterType>) {\r\n    if ((control.value?.length ?? 0) < 5) {\r\n      return { minlength: 5 };\r\n    }\r\n    return null;\r\n  }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\n\r\nimport { FormComponentSuperclass } from '../form-component-superclass';\r\n\r\nimport { FullNameReactiveComponent } from './full-name-form-group.component';\r\nimport { OneInputComponent } from './one-input.component';\r\n\r\n@Component({\r\n  selector: 'ngs-nested',\r\n  standalone: true,\r\n  imports: [\r\n    CommonModule,\r\n    ReactiveFormsModule,\r\n    OneInputComponent,\r\n    FullNameReactiveComponent,\r\n  ],\r\n  template: `\r\n    <ng-container *ngIf=\"variant === 1; else variantTwo\">\r\n      <ngs-one-input [formControl]=\"ngControl.control\"></ngs-one-input>\r\n    </ng-container>\r\n\r\n    <ng-template #variantTwo>\r\n      <ngs-full-name [formControl]=\"ngControl.control\"></ngs-full-name>\r\n    </ng-template>\r\n  `,\r\n})\r\nexport class NestedComponent extends FormComponentSuperclass<string> {\r\n  @Input()\r\n  variant: 1 | 2 = 1;\r\n}\r\n","import { CustomFormControlHarness } from '@ngspot/ng-superclass/testing';\r\n\r\nexport class OneInputHarness extends CustomFormControlHarness<string> {\r\n  static hostSelector = 'ngs-one-input';\r\n\r\n  inputEl = this.locatorFor('input');\r\n\r\n  async value() {\r\n    const inputEl = await this.inputEl();\r\n    const value = await inputEl.getProperty('value');\r\n    return value as string;\r\n  }\r\n\r\n  async setValue(newValue: string) {\r\n    const inputEl = await this.inputEl();\r\n    await inputEl.clear();\r\n    // We don't want to send keys for the value if the value is an empty\r\n    // string in order to clear the value. Sending keys with an empty string\r\n    // still results in unnecessary focus events.\r\n    if (newValue) {\r\n      await inputEl.sendKeys(newValue);\r\n    }\r\n  }\r\n\r\n  async touch() {\r\n    const inputEl = await this.inputEl();\r\n    await inputEl.focus();\r\n    await inputEl.blur();\r\n  }\r\n}\r\n","import { CustomFormControlHarness } from '@ngspot/ng-superclass/testing';\r\n\r\nexport class TwoInputsHarness extends CustomFormControlHarness<string> {\r\n  static hostSelector = 'ngs-two-inputs';\r\n\r\n  input1El = this.locatorFor('input[name=\"inp1\"]');\r\n  input2El = this.locatorFor('input[name=\"inp2\"]');\r\n\r\n  async value() {\r\n    const input1El = await this.input1El();\r\n    const input2El = await this.input2El();\r\n    const val1 = (await input1El.getProperty('value')) as string;\r\n    const val2 = (await input2El.getProperty('value')) as string;\r\n    return val1 + val2;\r\n  }\r\n\r\n  async setValue(newValue: string) {\r\n    const input1El = await this.input1El();\r\n    const input2El = await this.input2El();\r\n\r\n    await input1El.clear();\r\n    await input2El.clear();\r\n    // We don't want to send keys for the value if the value is an empty\r\n    // string in order to clear the value. Sending keys with an empty string\r\n    // still results in unnecessary focus events.\r\n    if (newValue) {\r\n      const val1 = newValue.substring(0, 3);\r\n      const val2 = newValue.substring(3, newValue.length);\r\n      if (val1) {\r\n        await input1El.sendKeys(val1);\r\n      }\r\n      if (val2) {\r\n        await input2El.sendKeys(val2);\r\n      }\r\n    }\r\n  }\r\n\r\n  async touch() {\r\n    const inputEl = await this.input1El();\r\n    await inputEl.focus();\r\n    await inputEl.blur();\r\n  }\r\n}\r\n","import { ComponentHarness } from '@angular/cdk/testing';\r\n\r\nimport { OneInputHarness } from './one-input.harness';\r\nimport { TwoInputsHarness } from './two-inputs.harness';\r\n\r\nexport class NestedHarness extends ComponentHarness {\r\n  static hostSelector = 'ngs-nested';\r\n\r\n  oneInput = this.locatorForOptional(OneInputHarness);\r\n  twoInputs = this.locatorForOptional(TwoInputsHarness);\r\n\r\n  async value() {\r\n    const oneInput = await this.oneInput();\r\n    if (oneInput) {\r\n      return await oneInput.value();\r\n    }\r\n\r\n    const twoInputs = await this.twoInputs();\r\n    if (twoInputs) {\r\n      return await twoInputs.value();\r\n    }\r\n\r\n    throw new Error('No inputs');\r\n  }\r\n\r\n  async setValue(value: string) {\r\n    const oneInput = await this.oneInput();\r\n    if (oneInput) {\r\n      await oneInput.setValue(value);\r\n    }\r\n\r\n    const twoInputs = await this.twoInputs();\r\n    if (twoInputs) {\r\n      await twoInputs.setValue(value);\r\n    }\r\n  }\r\n\r\n  async touch() {\r\n    const oneInput = await this.oneInput();\r\n    if (oneInput) {\r\n      await oneInput.touch();\r\n    }\r\n\r\n    const twoInputs = await this.twoInputs();\r\n    if (twoInputs) {\r\n      await twoInputs.touch();\r\n    }\r\n  }\r\n\r\n  async isHostMarkedAs(state: 'touched' | 'dirty' | 'valid' | 'invalid') {\r\n    const host = await this.host();\r\n    return await host.hasClass(`ng-${state}`);\r\n  }\r\n}\r\n","import {\r\n  AfterViewInit,\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport {\r\n  AbstractControl,\r\n  FormControl,\r\n  FormsModule,\r\n  NgModel,\r\n} from '@angular/forms';\r\n\r\nimport { merge, Observable } from 'rxjs';\r\nimport { map, tap } from 'rxjs/operators';\r\n\r\nimport { FormComponentSuperclass } from '../form-component-superclass';\r\n\r\ntype OuterType = string | null;\r\ntype InnerType = {\r\n  val1: string;\r\n  val2: string;\r\n};\r\n\r\n@Component({\r\n  selector: 'ngs-two-inputs',\r\n  standalone: true,\r\n  imports: [FormsModule],\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  template: `\r\n    <div>\r\n      <input\r\n        #input1=\"ngModel\"\r\n        name=\"inp1\"\r\n        (blur)=\"onTouched()\"\r\n        (keyup)=\"updateViewModel()\"\r\n        [(ngModel)]=\"val1\"\r\n      />\r\n      <input\r\n        #input2=\"ngModel\"\r\n        name=\"inp2\"\r\n        (blur)=\"onTouched()\"\r\n        (keyup)=\"updateViewModel()\"\r\n        [(ngModel)]=\"val2\"\r\n      />\r\n    </div>\r\n  `,\r\n})\r\nexport class TwoInputsTemplateDrivenComponent extends FormComponentSuperclass<\r\n  OuterType,\r\n  InnerType\r\n> {\r\n  @ViewChild('input1') input1: NgModel;\r\n  @ViewChild('input2') input2: NgModel;\r\n\r\n  val1 = '';\r\n  val2 = '';\r\n\r\n  override viewModel = new FormControl<InnerType>(\r\n    { val1: '', val2: '' },\r\n    { nonNullable: true }\r\n  );\r\n\r\n  override outerToInner = (outerValues$: Observable<OuterType>) =>\r\n    outerValues$.pipe(\r\n      map((outer) => {\r\n        const inner: InnerType = {\r\n          val1: outer?.substring(0, 3) ?? '',\r\n          val2: outer?.substring(3, outer.length) ?? '',\r\n        };\r\n        this.val1 = inner.val1;\r\n        this.val2 = inner.val2;\r\n        return inner;\r\n      })\r\n    );\r\n\r\n  override innerToOuter = (innerValues$: Observable<InnerType>) =>\r\n    innerValues$.pipe(\r\n      map((inner) => {\r\n        return inner.val1 + inner.val2;\r\n      })\r\n    );\r\n\r\n  override validate(control: AbstractControl) {\r\n    if (control.value?.length < 3) {\r\n      return { minLength: 3 };\r\n    }\r\n    return null;\r\n  }\r\n\r\n  updateViewModel() {\r\n    this.viewModel.setValue({\r\n      val1: this.input1.control.value,\r\n      val2: this.input2.control.value,\r\n    });\r\n  }\r\n}\r\n","// import * as tests from './lib/tests';\r\n\r\nexport * from './lib/directive-superclass';\r\nexport * from './lib/form-component-superclass';\r\nexport * from './lib/subscribe-sink';\r\nexport * from './lib/sync-controls/extract-control-changes';\r\nexport * from './lib/sync-controls/sync-outer-and-inner-controls';\r\nexport * from './lib/tests';\r\nexport * from './lib/typings';\r\n// export { tests };\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["filter","startWith","i1","i2"],"mappings":"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"}