{"version":3,"file":"berglund-rx.mjs","sources":["../../../projects/rx/src/subjects/subject-util.ts","../../../projects/rx/src/connect/user-input.ts","../../../projects/rx/src/connect/connect-util.ts","../../../projects/rx/src/connect/form/connect-form.ts","../../../projects/rx/src/connect/form/connected-form-control.ts","../../../projects/rx/src/components/directive-connect/connect-form-control-value.directive.ts","../../../projects/rx/src/components/directive-connect/connect.module.ts","../../../projects/rx/src/operators/action-array-reducer.ts","../../../projects/rx/src/observables/array-reducer.ts","../../../projects/rx/src/observables/eager-unflatten.ts","../../../projects/rx/src/observables/from-callback.ts","../../../projects/rx/src/observables/from-focus-enter.ts","../../../projects/rx/src/observables/from-focus-leave.ts","../../../projects/rx/src/observables/from-mouse-stationary.ts","../../../projects/rx/src/observables/merge-with.ts","../../../projects/rx/src/observables/triggered-unflatten.ts","../../../projects/rx/src/operators/pluck-length.ts","../../../projects/rx/src/operators/has-length.ts","../../../projects/rx/src/operators/safe-unflatten.ts","../../../projects/rx/src/operators/share-replay-until.ts","../../../projects/rx/src/operators/wait-for.ts","../../../projects/rx/src/berglund-rx.ts"],"sourcesContent":["import { EMPTY, isObservable, Observable, Subject } from 'rxjs';\r\n\r\n/** Subscribes a Subject to an Observable, omitting the complete-handler. */\r\nexport function subscribeSubject<T, C extends Subject<T>>(\r\n  subject: C,\r\n  source: Observable<T> | T = EMPTY\r\n): void {\r\n  if (isObservable(source)) {\r\n    source.subscribe({\r\n      next(value) {\r\n        subject.next(value);\r\n      },\r\n      error(value: unknown) {\r\n        subject.error(value);\r\n      },\r\n    });\r\n  } else {\r\n    subject.next(source);\r\n  }\r\n}\r\n","import { ValidationErrors, ValidatorFn } from '@angular/forms';\nimport {\n  BehaviorSubject,\n  EMPTY,\n  Observable,\n  ReplaySubject,\n  Subject,\n} from 'rxjs';\nimport { subscribeSubject } from '../subjects/subject-util';\n\nexport class UserErrorSubject<T> extends BehaviorSubject<T> {}\nexport class UserValueSubject<T> extends ReplaySubject<T> {}\nexport class UserTriggerSubject<T> extends Subject<T> {}\n\nexport function userValue<T>(\n  value: Observable<T> | T = EMPTY\n): UserValueSubject<T> {\n  const subject = new UserValueSubject<T>(1);\n  subscribeSubject(subject, value);\n\n  return subject;\n}\n\nexport function userTrigger<T = any>(): UserTriggerSubject<T> {\n  return new UserTriggerSubject<T>();\n}\n\nexport function userError(): UserValueSubject<ValidationErrors | null> {\n  return userValue<ValidationErrors | null>();\n}\n\nexport interface UserInputOptions {\n  validators?: ValidatorFn[];\n\n  /** Whether to emit values despite failing validation. */\n  emitInvalid?: boolean;\n}\n","import { filter, isObservable, Observable, takeUntil } from 'rxjs';\r\nimport { Connectable } from './connect-model';\r\nimport { UserTriggerSubject, UserValueSubject } from './user-input';\r\n\r\nexport function connect<T>(\r\n  connectable: Connectable<T>,\r\n  valueChanges: Observable<T>,\r\n  destroyed$: Observable<any>,\r\n  writeValue?: (value: T | null) => void\r\n): void {\r\n  let isUserInput = false;\r\n\r\n  if (\r\n    connectable instanceof UserValueSubject ||\r\n    connectable instanceof UserTriggerSubject\r\n  ) {\r\n    valueChanges.pipe(takeUntil(destroyed$)).subscribe((value) => {\r\n      isUserInput = true;\r\n      connectable.next(value);\r\n      isUserInput = false;\r\n    });\r\n  }\r\n\r\n  if (!writeValue) {\r\n    return;\r\n  }\r\n\r\n  if (!isObservable(connectable)) {\r\n    writeValue(connectable);\r\n    return;\r\n  }\r\n\r\n  connectable\r\n    .pipe(\r\n      filter(() => !isUserInput),\r\n      takeUntil(destroyed$)\r\n    )\r\n    .subscribe((value) => writeValue(value));\r\n}\r\n\r\nexport function getConnectableValue<T>(connectable: Connectable<T>): T | null {\r\n  return isObservable(connectable) ? null : connectable ?? null;\r\n}\r\n","import { FormControl, FormGroup } from '@angular/forms';\r\nimport { EMPTY, Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { Connectable } from '../connect-model';\r\nimport { connect } from '../connect-util';\r\n\r\n/** Connects the value of a FormControl with a Connectable. */\r\nexport function connectFormValue<T>(\r\n  connectable: Connectable<T>,\r\n  form: FormControl | FormGroup,\r\n  destroyed$: Observable<any> = EMPTY\r\n): void {\r\n  connect(connectable, form.valueChanges, destroyed$, (value) => {\r\n    form.setValue(value, { emitEvent: false });\r\n  });\r\n}\r\n\r\n/** Connects the errors of a FormControl with a Connectable. */\r\nexport function connectFormError<T>(\r\n  connectable: Connectable<T>,\r\n  form: FormControl | FormGroup,\r\n  destroyed$: Observable<any> = EMPTY\r\n): void {\r\n  connect(\r\n    connectable,\r\n    form.statusChanges.pipe(map(() => form.errors)),\r\n    destroyed$,\r\n    (value) => form.setErrors(value, { emitEvent: false })\r\n  );\r\n}\r\n","import {\r\n  AbstractControlOptions,\r\n  AsyncValidatorFn,\r\n  FormControl,\r\n  ValidatorFn,\r\n} from '@angular/forms';\r\nimport { isObservable } from 'rxjs';\r\nimport { connectFormValue } from '.';\r\nimport { Connectable } from '../connect-model';\r\nimport { getConnectableValue } from '../connect-util';\r\n\r\nexport class ConnectedFormControl extends FormControl {\r\n  constructor(\r\n    connectable?: Connectable,\r\n    validatorOrOpts?:\r\n      | ValidatorFn\r\n      | ValidatorFn[]\r\n      | AbstractControlOptions\r\n      | null,\r\n    asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null\r\n  ) {\r\n    super(getConnectableValue(connectable), validatorOrOpts, asyncValidator);\r\n\r\n    if (isObservable(connectable)) {\r\n      connectFormValue(connectable, this);\r\n    }\r\n  }\r\n}\r\n","import { Directive, Host, Input, Optional } from '@angular/core';\nimport {\n  FormControl,\n  FormControlDirective,\n  FormControlName,\n  FormGroup,\n  FormGroupDirective,\n} from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { Connectable, connectFormValue } from '../../connect';\n\n/** Connects a FormControl to a Subject. */\n@Directive({\n  selector: '[connectFormControlValue]',\n})\nexport class BergConnectFormControlValueDirective<T = any> {\n  /** Connectable to connect with FormControl. */\n  @Input('connectForm')\n  set connectable(connectable: Connectable<T>) {\n    connectFormValue(connectable, this.formControl, this.destroySub);\n  }\n\n  get formControl(): FormControl | FormGroup {\n    return (\n      this.formControlDirective?.form ??\n      this.formGroupDirective?.form ??\n      this.formControlName?.control\n    );\n  }\n\n  private destroySub = new Subject<void>();\n\n  constructor(\n    @Optional() @Host() private formControlDirective: FormControlDirective,\n    @Optional() @Host() private formGroupDirective: FormGroupDirective,\n    @Optional() @Host() private formControlName: FormControlName\n  ) {}\n\n  ngOnDestroy(): void {\n    this.destroySub.next();\n    this.destroySub.complete();\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { BergConnectFormControlValueDirective } from './connect-form-control-value.directive';\n\nconst API = [BergConnectFormControlValueDirective];\n\n@NgModule({\n  declarations: API,\n  exports: API,\n  imports: [CommonModule],\n})\nexport class BergConnectModule {}\n","import { OperatorFunction } from 'rxjs';\r\nimport { scan, shareReplay } from 'rxjs/operators';\r\n\r\n/** Reduces an array from a stream of `ReducerAction`. */\r\nexport function actionArrayReducer<T>(): OperatorFunction<\r\n  ReducerAction<T>,\r\n  T[]\r\n> {\r\n  return (source$) =>\r\n    source$.pipe(\r\n      scan((acc, curr) => {\r\n        switch (curr.action) {\r\n          case 'add':\r\n            return [...acc, curr.value];\r\n          case 'clear':\r\n            return [];\r\n          case 'push':\r\n            return acc;\r\n          case 'remove':\r\n            return acc.filter((a) => a !== curr.value);\r\n          case 'update':\r\n            return acc.map((a) => (a === curr.oldValue ? curr.newValue : a));\r\n          default:\r\n            return acc;\r\n        }\r\n      }, [] as T[]),\r\n      shareReplay({ bufferSize: 1, refCount: true })\r\n    );\r\n}\r\n\r\nexport interface AddAction<T> {\r\n  action: 'add';\r\n  value: T;\r\n}\r\n\r\nexport interface ClearAction {\r\n  action: 'clear';\r\n}\r\n\r\nexport interface PushAction {\r\n  action: 'push';\r\n}\r\n\r\nexport interface RemoveAction<T> {\r\n  action: 'remove';\r\n  value: T;\r\n}\r\n\r\nexport interface UpdateAction<T> {\r\n  action: 'update';\r\n  newValue: T;\r\n  oldValue: T;\r\n}\r\n\r\nexport type ReducerAction<T> =\r\n  | AddAction<T>\r\n  | ClearAction\r\n  | PushAction\r\n  | RemoveAction<T>\r\n  | UpdateAction<T>;\r\n","import { EMPTY, merge, Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport {\r\n  actionArrayReducer,\r\n  ReducerAction,\r\n  UpdateAction,\r\n} from '../operators/action-array-reducer';\r\n\r\nexport type UpdateValue<T> = { oldValue: T; newValue: T };\r\n\r\n/** Reduces an array from sources that add, clear, remove or update that array.  */\r\nexport function arrayReducer<T>(observables: {\r\n  add?: Observable<T>;\r\n  clear?: Observable<any>;\r\n  push?: Observable<any>;\r\n  remove?: Observable<T>;\r\n  update?: Observable<UpdateValue<T>>;\r\n}): Observable<T[]> {\r\n  const {\r\n    add = EMPTY,\r\n    clear = EMPTY,\r\n    push = EMPTY,\r\n    remove = EMPTY,\r\n    update = EMPTY,\r\n  } = observables;\r\n\r\n  return merge(\r\n    add.pipe(map<T, ReducerAction<T>>((value) => ({ value, action: 'add' }))),\r\n    clear.pipe(map<T, ReducerAction<T>>(() => ({ action: 'clear' }))),\r\n    push.pipe(map<T, ReducerAction<T>>(() => ({ action: 'push' }))),\r\n    remove.pipe(\r\n      map<T, ReducerAction<T>>((value) => ({ value, action: 'remove' }))\r\n    ),\r\n    update.pipe(\r\n      map<UpdateValue<T>, UpdateAction<T>>((value) => ({\r\n        ...value,\r\n        action: 'update',\r\n      }))\r\n    )\r\n  ).pipe(actionArrayReducer());\r\n}\r\n","import { combineLatest, Observable } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\n\n/** Unflattens observables to call an API eagerly, using `combineLatest`. */\nexport function eagerUnflatten<T, K1>(\n  api: (a: K1) => Observable<T>,\n  unflattener: typeof switchMap,\n  a: Observable<K1>\n): Observable<T>;\nexport function eagerUnflatten<T, K1, K2>(\n  api: (a: K1, b: K2) => Observable<T>,\n  unflattener: typeof switchMap,\n  a: Observable<K1>,\n  b: Observable<K2>\n): Observable<T>;\nexport function eagerUnflatten<T, K1, K2, K3>(\n  api: (a: K1, b: K2, c: K3) => Observable<T>,\n  unflattener: typeof switchMap,\n  a: Observable<K1>,\n  b: Observable<K2>,\n  c: Observable<K3>\n): Observable<T>;\nexport function eagerUnflatten<T, K1, K2, K3, K4>(\n  api: (a: K1, b: K2, c: K3, d: K4) => Observable<T>,\n  unflattener: typeof switchMap,\n  a: Observable<K1>,\n  b: Observable<K2>,\n  c: Observable<K3>,\n  d: Observable<K4>\n): Observable<T>;\nexport function eagerUnflatten<T, K1, K2, K3, K4, K5>(\n  api: (a: K1, b: K2, c: K3, d: K4, e: K5) => Observable<T>,\n  unflattener: typeof switchMap,\n  a: Observable<K1>,\n  b: Observable<K2>,\n  c: Observable<K3>,\n  d: Observable<K4>,\n  e: Observable<K5>\n): Observable<T>;\nexport function eagerUnflatten<T>(\n  api: (...args: Observable<any>[]) => Observable<T>,\n  unflattener = switchMap,\n  ...args: Observable<any>[]\n): Observable<T> {\n  return combineLatest(args).pipe(unflattener((args) => api(...args)));\n}\n","import { Observable } from 'rxjs';\n\nexport function fromCallback<T = any>(\n  registerCallback: (callback: (value: T) => void) => void\n): Observable<T> {\n  return new Observable((observer) => {\n    registerCallback((value) => observer.next(value));\n  });\n}\n","import { fromEvent, merge, Observable } from 'rxjs';\r\nimport { filter, throttleTime } from 'rxjs/operators';\r\n\r\n/** Triggers when focus enters an element. Does not trigger if the element already has focus within. */\r\nexport function fromFocusEnter(elem: HTMLElement): Observable<FocusEvent> {\r\n  const focusin$ = fromEvent<FocusEvent>(elem, 'focusin');\r\n  const focusout$ = fromEvent<FocusEvent>(elem, 'focusout');\r\n\r\n  return merge(focusin$, focusout$).pipe(\r\n    throttleTime(0),\r\n    filter((event) => event.type === 'focusin')\r\n  );\r\n}\r\n","import { fromEvent, merge, Observable } from 'rxjs';\r\nimport { debounceTime, filter } from 'rxjs/operators';\r\n\r\n/** Triggers when focus leaves an element. */\r\nexport function fromFocusLeave(elem: HTMLElement): Observable<FocusEvent> {\r\n  const focusin$ = fromEvent<FocusEvent>(elem, 'focusin');\r\n  const focusout$ = fromEvent<FocusEvent>(elem, 'focusout');\r\n\r\n  return merge(focusin$, focusout$).pipe(\r\n    debounceTime(0),\r\n    filter((event) => event.type === 'focusout')\r\n  );\r\n}\r\n","import { fromEvent, merge, Observable } from 'rxjs';\r\nimport { debounceTime, map, switchMap, take, takeUntil } from 'rxjs/operators';\r\n\r\n/** Triggers when a mouse pointer becomes stationary over an element. */\r\nexport function mouseStationary(\r\n  element: HTMLElement,\r\n  debounce = 250\r\n): Observable<MouseEvent> {\r\n  const mousemove$ = fromEvent<MouseEvent>(element, 'mousemove');\r\n  const mouseleave$ = fromEvent<MouseEvent>(element, 'mouseleave');\r\n  const mouseenter$ = fromEvent<MouseEvent>(element, 'mouseenter');\r\n  const click$ = fromEvent<MouseEvent>(element, 'click');\r\n\r\n  return mouseenter$.pipe(\r\n    switchMap((mouseenterEvent) => {\r\n      return mousemove$.pipe(\r\n        debounceTime(debounce),\r\n        map(() => mouseenterEvent),\r\n        take(1),\r\n        takeUntil(merge(mouseleave$, click$))\r\n      );\r\n    })\r\n  );\r\n}\r\n","import { combineLatest, Observable } from 'rxjs';\nimport { map, startWith } from 'rxjs/operators';\n\n/** Merges any number of observable emissions using a merger-function. */\nexport function mergeWith<T>(\n  merger: (values: T[]) => T,\n  ...observables: Observable<T>[]\n): Observable<T> {\n  return combineLatest(\n    observables.map((observable) => observable.pipe(startWith(null)))\n  ).pipe(\n    map((emissions) => {\n      return merger(\n        emissions.filter((emission): emission is T => emission !== null)\n      );\n    })\n  );\n}\n","import { Observable } from 'rxjs';\nimport { filter, map, switchMap, withLatestFrom } from 'rxjs/operators';\n\n/** Unflattens observables to call an API lazily, using `withLatestFrom` and a trigger observable. */\nexport function triggeredUnflatten<T, O1>(\n  trigger: Observable<any>,\n  api: (a: O1) => Observable<T>,\n  unflattener: typeof switchMap,\n  a: Observable<O1>\n): Observable<T>;\nexport function triggeredUnflatten<T, O1, O2>(\n  trigger: Observable<any>,\n  api: (a: O1, b: O2) => Observable<T>,\n  unflattener: typeof switchMap,\n  a: Observable<O1>,\n  b: Observable<O2>\n): Observable<T>;\nexport function triggeredUnflatten<T, O1, O2, O3>(\n  trigger: Observable<any>,\n  api: (a: O1, b: O2, c: O3) => Observable<T>,\n  unflattener: typeof switchMap,\n  a: Observable<O1>,\n  b: Observable<O2>,\n  c: Observable<O3>\n): Observable<T>;\nexport function triggeredUnflatten<T, O1, O2, O3, O4>(\n  trigger: Observable<any>,\n  api: (a: O1, b: O2, c: O3, d: O4) => Observable<T>,\n  unflattener: typeof switchMap,\n  a: Observable<O1>,\n  b: Observable<O2>,\n  c: Observable<O3>,\n  d: Observable<O4>\n): Observable<T>;\nexport function triggeredUnflatten<T, O1, O2, O3, O4, O5>(\n  trigger: Observable<any>,\n  api: (a: O1, b: O2, c: O3, d: O4, e: O5) => Observable<T>,\n  unflattener: typeof switchMap,\n  a: Observable<O1>,\n  b: Observable<O2>,\n  c: Observable<O3>,\n  d: Observable<O4>,\n  e: Observable<O5>\n): Observable<T>;\nexport function triggeredUnflatten<T>(\n  trigger: Observable<any>,\n  api: (...args: Observable<any>[]) => Observable<T>,\n  unflattener = switchMap,\n  ...args: Observable<any>[]\n): Observable<T> {\n  return trigger.pipe(\n    withLatestFrom(...args),\n    filter(Array.isArray),\n    map((values) => values.filter((_, index) => index !== 0)),\n    unflattener((args) => api(...args))\n  );\n}\n","import { OperatorFunction } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n/** Plucks the length of a value. */\nexport function pluckLength(): OperatorFunction<any, number> {\n  return (observable) =>\n    observable.pipe(\n      map((value) => {\n        if (Array.isArray(value) || typeof value === 'string') {\n          return value.length;\n        }\n\n        if (value instanceof Map || value instanceof Set) {\n          return value.size;\n        }\n\n        if (typeof value === 'object' && value !== null) {\n          return Object.values(value).length;\n        }\n\n        return 0;\n      })\n    );\n}\n","import { OperatorFunction } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { pluckLength } from './pluck-length';\n\n/** Checks whether a value has a length. */\nexport function hasLength(): OperatorFunction<any, boolean> {\n  return (observable) =>\n    observable.pipe(\n      pluckLength(),\n      map((length) => length > 0)\n    );\n}\n","import { isObservable, Observable, of, OperatorFunction } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\n\n/** Unflattens an observable if it is an observable. */\nexport function safeUnflatten<T>(\n  unflattener = switchMap\n): OperatorFunction<T | Observable<T>, T> {\n  return (source: Observable<T | Observable<T>>) => {\n    return source.pipe(\n      unflattener((value) => (isObservable(value) ? value : of(value)))\n    );\n  };\n}\n","import { MonoTypeOperatorFunction, Observable } from 'rxjs';\nimport { shareReplay, takeUntil } from 'rxjs/operators';\n\n/** A memory safe version of `shareReplay` that adds an upstream `takeUntil`. */\nexport function shareReplayUntil<T>(\n  takeUntil$: Observable<void>,\n  shareReplayOperator: MonoTypeOperatorFunction<T> = shareReplay({\n    bufferSize: 1,\n    refCount: true,\n  })\n): MonoTypeOperatorFunction<T> {\n  return (source$): Observable<T> => {\n    return source$.pipe(shareReplayOperator, takeUntil(takeUntil$));\n  };\n}\n","import { MonoTypeOperatorFunction, Observable } from 'rxjs';\r\nimport { map, switchMap, take } from 'rxjs/operators';\r\n\r\n/** Holds on to a value until another Observable has emitted. */\r\nexport function waitFor<T>(\r\n  waitFor$: Observable<any>\r\n): MonoTypeOperatorFunction<T> {\r\n  return (source$: Observable<T>) =>\r\n    source$.pipe(\r\n      switchMap((value) => {\r\n        return waitFor$.pipe(\r\n          take(1),\r\n          map(() => value)\r\n        );\r\n      })\r\n    );\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["filter","takeUntil"],"mappings":"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"}