ngx-form-signal 1.18.1 → 2.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/esm2022/lib/deep-form-signal.mjs +41 -0
  2. package/esm2022/lib/form-signal.mjs +22 -22
  3. package/esm2022/lib/helpers/form-controls-signal.mjs +109 -0
  4. package/esm2022/lib/helpers/form-dirty-signal.mjs +24 -25
  5. package/esm2022/lib/helpers/form-error-signal.mjs +25 -9
  6. package/esm2022/lib/helpers/form-snapshot-signal.mjs +1 -7
  7. package/esm2022/lib/helpers/form-status-signal.mjs +37 -26
  8. package/esm2022/lib/helpers/form-touched-signal.mjs +23 -26
  9. package/esm2022/lib/helpers/form-value-signal.mjs +28 -23
  10. package/esm2022/lib/helpers/handle-stream-signal.mjs +18 -0
  11. package/esm2022/lib/types/deep-form-signal-type.mjs +2 -0
  12. package/esm2022/lib/types/form-signal-options.mjs +2 -3
  13. package/esm2022/lib/types/form-signal-type.mjs +2 -2
  14. package/esm2022/public-api.mjs +3 -2
  15. package/fesm2022/ngx-form-signal.mjs +300 -129
  16. package/fesm2022/ngx-form-signal.mjs.map +1 -1
  17. package/lib/deep-form-signal.d.ts +10 -0
  18. package/lib/form-signal.d.ts +6 -4
  19. package/lib/helpers/form-controls-signal.d.ts +7 -0
  20. package/lib/helpers/form-dirty-signal.d.ts +3 -5
  21. package/lib/helpers/form-error-signal.d.ts +3 -4
  22. package/lib/helpers/form-snapshot-signal.d.ts +2 -1
  23. package/lib/helpers/form-status-signal.d.ts +2 -5
  24. package/lib/helpers/form-touched-signal.d.ts +3 -5
  25. package/lib/helpers/form-value-signal.d.ts +4 -6
  26. package/lib/helpers/handle-stream-signal.d.ts +8 -0
  27. package/lib/types/deep-form-signal-type.d.ts +16 -0
  28. package/lib/types/form-signal-options.d.ts +11 -14
  29. package/lib/types/form-signal-type.d.ts +14 -21
  30. package/package.json +7 -5
  31. package/public-api.d.ts +2 -1
  32. package/esm2022/lib/types/form-type.mjs +0 -2
  33. package/lib/types/form-type.d.ts +0 -7
@@ -0,0 +1,41 @@
1
+ import { assertInInjectionContext, inject, Injector, isSignal, signal, untracked } from '@angular/core';
2
+ import { formSignal } from './form-signal';
3
+ import { buildFormControlsSignal } from './helpers/form-controls-signal';
4
+ import { buildDefaultFormSignalOptions } from './types/form-signal-options';
5
+ /**
6
+ * Takes a reactive form control and subscribes to various events to pull out
7
+ * form states and store them into signals.
8
+ *
9
+ * Creates a formSignal for each nested control inside children groups and arrays.
10
+ * These are made accessible over an additional `controls` property.
11
+ */
12
+ export function deepFormSignal(form, options = buildDefaultFormSignalOptions()) {
13
+ if (!options.injector) {
14
+ assertInInjectionContext(() => { });
15
+ options.injector = inject(Injector);
16
+ }
17
+ const formAsSignal = (isSignal(form) ? form : signal(form).asReadonly());
18
+ const root = formSignal(formAsSignal, options);
19
+ const controls$ = buildFormControlsSignal(formAsSignal, options);
20
+ const controlProxy = new Proxy(controls$, {
21
+ get(_target, prop, receiver) {
22
+ const snapshot = untracked(() => _target());
23
+ if (!snapshot)
24
+ return null;
25
+ if (Array.isArray(snapshot))
26
+ return snapshot[prop];
27
+ return snapshot?.[prop];
28
+ },
29
+ apply(_target, _thisArg, _args) {
30
+ return _target() ?? null;
31
+ },
32
+ });
33
+ Object.defineProperty(root, 'controls', {
34
+ get: () => {
35
+ const snapshot = untracked(() => controls$());
36
+ return snapshot ? controlProxy : null;
37
+ },
38
+ });
39
+ return root;
40
+ }
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcC1mb3JtLXNpZ25hbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1mb3JtLXNpZ25hbC9zcmMvbGliL2RlZXAtZm9ybS1zaWduYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFaEgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV6RSxPQUFPLEVBQUUsNkJBQTZCLEVBQXNDLE1BQU0sNkJBQTZCLENBQUM7QUFFaEg7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FDM0IsSUFBTyxFQUNQLFVBQTZCLDZCQUE2QixFQUFFO0lBRTVELElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDckIsd0JBQXdCLENBQUMsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkMsT0FBTyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELE1BQU0sWUFBWSxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBbUMsQ0FBQztJQUUzRyxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRS9DLE1BQU0sU0FBUyxHQUFHLHVCQUF1QixDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNqRSxNQUFNLFlBQVksR0FBRyxJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUU7UUFDdkMsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUTtZQUN4QixNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsUUFBUTtnQkFBRSxPQUFPLElBQUksQ0FBQztZQUUzQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO2dCQUFFLE9BQU8sUUFBUSxDQUFDLElBQXlCLENBQUMsQ0FBQztZQUN4RSxPQUFPLFFBQVEsRUFBRSxDQUFDLElBQWMsQ0FBQyxDQUFDO1FBQ3JDLENBQUM7UUFDRCxLQUFLLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLO1lBQzNCLE9BQU8sT0FBTyxFQUFFLElBQUksSUFBSSxDQUFDO1FBQzVCLENBQUM7S0FDSCxDQUFDLENBQUM7SUFFSCxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7UUFDckMsR0FBRyxFQUFFLEdBQUcsRUFBRTtZQUNQLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLE9BQU8sUUFBUSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN6QyxDQUFDO0tBQ0gsQ0FBQyxDQUFDO0lBRUgsT0FBTyxJQUF5QixDQUFDO0FBQ3BDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQsIGluamVjdCwgSW5qZWN0b3IsIGlzU2lnbmFsLCBTaWduYWwsIHNpZ25hbCwgdW50cmFja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgZm9ybVNpZ25hbCB9IGZyb20gJy4vZm9ybS1zaWduYWwnO1xyXG5pbXBvcnQgeyBidWlsZEZvcm1Db250cm9sc1NpZ25hbCB9IGZyb20gJy4vaGVscGVycy9mb3JtLWNvbnRyb2xzLXNpZ25hbCc7XHJcbmltcG9ydCB7IERlZXBGb3JtU2lnbmFsIH0gZnJvbSAnLi90eXBlcy9kZWVwLWZvcm0tc2lnbmFsLXR5cGUnO1xyXG5pbXBvcnQgeyBidWlsZERlZmF1bHRGb3JtU2lnbmFsT3B0aW9ucywgRm9ybVNpZ25hbElucHV0LCBGb3JtU2lnbmFsT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMvZm9ybS1zaWduYWwtb3B0aW9ucyc7XHJcblxyXG4vKipcclxuICogVGFrZXMgYSByZWFjdGl2ZSBmb3JtIGNvbnRyb2wgYW5kIHN1YnNjcmliZXMgdG8gdmFyaW91cyBldmVudHMgdG8gcHVsbCBvdXRcclxuICogZm9ybSBzdGF0ZXMgYW5kIHN0b3JlIHRoZW0gaW50byBzaWduYWxzLlxyXG4gKlxyXG4gKiBDcmVhdGVzIGEgZm9ybVNpZ25hbCBmb3IgZWFjaCBuZXN0ZWQgY29udHJvbCBpbnNpZGUgY2hpbGRyZW4gZ3JvdXBzIGFuZCBhcnJheXMuXHJcbiAqIFRoZXNlIGFyZSBtYWRlIGFjY2Vzc2libGUgb3ZlciBhbiBhZGRpdGlvbmFsIGBjb250cm9sc2AgcHJvcGVydHkuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZGVlcEZvcm1TaWduYWw8VCBleHRlbmRzIEZvcm1TaWduYWxJbnB1dD4oXHJcbiAgIGZvcm06IFQsXHJcbiAgIG9wdGlvbnM6IEZvcm1TaWduYWxPcHRpb25zID0gYnVpbGREZWZhdWx0Rm9ybVNpZ25hbE9wdGlvbnMoKVxyXG4pOiBEZWVwRm9ybVNpZ25hbDxUPiB7XHJcbiAgIGlmICghb3B0aW9ucy5pbmplY3Rvcikge1xyXG4gICAgICBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQoKCkgPT4ge30pO1xyXG4gICAgICBvcHRpb25zLmluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcclxuICAgfVxyXG5cclxuICAgY29uc3QgZm9ybUFzU2lnbmFsID0gKGlzU2lnbmFsKGZvcm0pID8gZm9ybSA6IHNpZ25hbChmb3JtKS5hc1JlYWRvbmx5KCkpIGFzIFNpZ25hbDxBYnN0cmFjdENvbnRyb2wgfCBudWxsPjtcclxuXHJcbiAgIGNvbnN0IHJvb3QgPSBmb3JtU2lnbmFsKGZvcm1Bc1NpZ25hbCwgb3B0aW9ucyk7XHJcblxyXG4gICBjb25zdCBjb250cm9scyQgPSBidWlsZEZvcm1Db250cm9sc1NpZ25hbChmb3JtQXNTaWduYWwsIG9wdGlvbnMpO1xyXG4gICBjb25zdCBjb250cm9sUHJveHkgPSBuZXcgUHJveHkoY29udHJvbHMkLCB7XHJcbiAgICAgIGdldChfdGFyZ2V0LCBwcm9wLCByZWNlaXZlcikge1xyXG4gICAgICAgICBjb25zdCBzbmFwc2hvdCA9IHVudHJhY2tlZCgoKSA9PiBfdGFyZ2V0KCkpO1xyXG4gICAgICAgICBpZiAoIXNuYXBzaG90KSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNuYXBzaG90KSkgcmV0dXJuIHNuYXBzaG90W3Byb3AgYXMgdW5rbm93biBhcyBudW1iZXJdO1xyXG4gICAgICAgICByZXR1cm4gc25hcHNob3Q/Lltwcm9wIGFzIHN0cmluZ107XHJcbiAgICAgIH0sXHJcbiAgICAgIGFwcGx5KF90YXJnZXQsIF90aGlzQXJnLCBfYXJncykge1xyXG4gICAgICAgICByZXR1cm4gX3RhcmdldCgpID8/IG51bGw7XHJcbiAgICAgIH0sXHJcbiAgIH0pO1xyXG5cclxuICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJvb3QsICdjb250cm9scycsIHtcclxuICAgICAgZ2V0OiAoKSA9PiB7XHJcbiAgICAgICAgIGNvbnN0IHNuYXBzaG90ID0gdW50cmFja2VkKCgpID0+IGNvbnRyb2xzJCgpKTtcclxuICAgICAgICAgcmV0dXJuIHNuYXBzaG90ID8gY29udHJvbFByb3h5IDogbnVsbDtcclxuICAgICAgfSxcclxuICAgfSk7XHJcblxyXG4gICByZXR1cm4gcm9vdCBhcyBEZWVwRm9ybVNpZ25hbDxUPjtcclxufVxyXG4iXX0=
@@ -1,4 +1,4 @@
1
- import { assertInInjectionContext, isSignal, signal, } from '@angular/core';
1
+ import { assertInInjectionContext, inject, Injector, isSignal, signal } from '@angular/core';
2
2
  import { buildFormDirtySignal } from './helpers/form-dirty-signal';
3
3
  import { buildFormErrorSignal } from './helpers/form-error-signal';
4
4
  import { buildFormSnapshotSignal } from './helpers/form-snapshot-signal';
@@ -6,23 +6,29 @@ import { buildFormStatusSignal } from './helpers/form-status-signal';
6
6
  import { buildFormTouchedSignal } from './helpers/form-touched-signal';
7
7
  import { buildFormValueSignal } from './helpers/form-value-signal';
8
8
  import { buildDefaultFormSignalOptions, } from './types/form-signal-options';
9
+ import { FORM_SIGNAL_FORM_TOKEN } from './types/form-signal-type';
10
+ /**
11
+ * Takes a reactive form control and subscribes to various events to pull out
12
+ * form states and store them into signals.
13
+ */
9
14
  export function formSignal(form, options = buildDefaultFormSignalOptions()) {
10
- const formAsSignal = isSignal(form) ? form : signal(form);
11
15
  if (!options.injector) {
12
16
  assertInInjectionContext(() => { });
17
+ options.injector = inject(Injector);
13
18
  }
14
- const { value$, rawValue$, valueChangeSubscription$ } = buildFormValueSignal(formAsSignal, options);
15
- const { status$, valid$, invalid$, pending$, disabled$, enabled$, statusChangeSubscription$, } = buildFormStatusSignal(formAsSignal, options);
16
- const { touched$, untouched$, touchedChangeSubscription$ } = buildFormTouchedSignal(formAsSignal, options);
17
- const { dirty$, pristine$, dirtyChangeSubscription$ } = buildFormDirtySignal(formAsSignal, options);
18
- const errors$ = buildFormErrorSignal(formAsSignal, value$, status$, options);
19
+ const formAsSignal = (isSignal(form) ? form : signal(form).asReadonly());
20
+ const { value$, rawValue$ } = buildFormValueSignal(formAsSignal, options);
21
+ const { status$, valid$, invalid$, pending$, disabled$, enabled$ } = buildFormStatusSignal(formAsSignal, options);
22
+ const { touched$, untouched$ } = buildFormTouchedSignal(formAsSignal, options);
23
+ const { dirty$, pristine$ } = buildFormDirtySignal(formAsSignal, options);
24
+ const errors$ = buildFormErrorSignal(formAsSignal, options);
19
25
  const formSignals = {
20
- status: status$.asReadonly(),
21
- value: value$.asReadonly(),
22
- rawValue: rawValue$.asReadonly(),
23
- touched: touched$.asReadonly(),
26
+ status: status$,
27
+ value: value$,
28
+ rawValue: rawValue$,
29
+ touched: touched$,
24
30
  untouched: untouched$,
25
- dirty: dirty$.asReadonly(),
31
+ dirty: dirty$,
26
32
  pristine: pristine$,
27
33
  valid: valid$,
28
34
  invalid: invalid$,
@@ -30,16 +36,10 @@ export function formSignal(form, options = buildDefaultFormSignalOptions()) {
30
36
  disabled: disabled$,
31
37
  enabled: enabled$,
32
38
  errors: errors$,
33
- subscriptions: {
34
- valueChangeSubscription: valueChangeSubscription$.asReadonly(),
35
- statusChangeSubscription: statusChangeSubscription$.asReadonly(),
36
- touchedChangeSubscription: touchedChangeSubscription$.asReadonly(),
37
- dirtyChangeSubscription: dirtyChangeSubscription$.asReadonly(),
38
- },
39
+ [FORM_SIGNAL_FORM_TOKEN]: formAsSignal,
39
40
  };
40
41
  const snapshot$ = buildFormSnapshotSignal(formSignals);
41
- const formSignalObj = (() => snapshot$());
42
- Object.setPrototypeOf(formSignalObj, formSignals);
43
- return formSignalObj;
42
+ Object.setPrototypeOf(snapshot$, formSignals);
43
+ return snapshot$;
44
44
  }
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1zaWduYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZm9ybS1zaWduYWwvc3JjL2xpYi9mb3JtLXNpZ25hbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0osd0JBQXdCLEVBQ3hCLFFBQVEsRUFFUixNQUFNLEdBQ1IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDekUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDckUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbkUsT0FBTyxFQUNKLDZCQUE2QixHQUUvQixNQUFNLDZCQUE2QixDQUFDO0FBSXJDLE1BQU0sVUFBVSxVQUFVLENBQ3ZCLElBQStELEVBQy9ELFVBQTZCLDZCQUE2QixFQUFLO0lBRS9ELE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNyQix3QkFBd0IsQ0FBQyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBQ0QsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsd0JBQXdCLEVBQUUsR0FDbEQsb0JBQW9CLENBQUksWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2xELE1BQU0sRUFDSCxPQUFPLEVBQ1AsTUFBTSxFQUNOLFFBQVEsRUFDUixRQUFRLEVBQ1IsU0FBUyxFQUNULFFBQVEsRUFDUix5QkFBeUIsR0FDM0IsR0FBRyxxQkFBcUIsQ0FBSSxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDcEQsTUFBTSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsMEJBQTBCLEVBQUUsR0FDdkQsc0JBQXNCLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2pELE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLHdCQUF3QixFQUFFLEdBQUcsb0JBQW9CLENBQ3pFLFlBQVksRUFDWixPQUFPLENBQ1QsQ0FBQztJQUNGLE1BQU0sT0FBTyxHQUFHLG9CQUFvQixDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRTdFLE1BQU0sV0FBVyxHQUF1QjtRQUNyQyxNQUFNLEVBQUUsT0FBTyxDQUFDLFVBQVUsRUFBRTtRQUM1QixLQUFLLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRTtRQUMxQixRQUFRLEVBQUUsU0FBUyxDQUFDLFVBQVUsRUFBRTtRQUNoQyxPQUFPLEVBQUUsUUFBUSxDQUFDLFVBQVUsRUFBRTtRQUM5QixTQUFTLEVBQUUsVUFBVTtRQUNyQixLQUFLLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRTtRQUMxQixRQUFRLEVBQUUsU0FBUztRQUNuQixLQUFLLEVBQUUsTUFBTTtRQUNiLE9BQU8sRUFBRSxRQUFRO1FBQ2pCLE9BQU8sRUFBRSxRQUFRO1FBQ2pCLFFBQVEsRUFBRSxTQUFTO1FBQ25CLE9BQU8sRUFBRSxRQUFRO1FBQ2pCLE1BQU0sRUFBRSxPQUFPO1FBQ2YsYUFBYSxFQUFFO1lBQ1osdUJBQXVCLEVBQUUsd0JBQXdCLENBQUMsVUFBVSxFQUFFO1lBQzlELHdCQUF3QixFQUFFLHlCQUF5QixDQUFDLFVBQVUsRUFBRTtZQUNoRSx5QkFBeUIsRUFBRSwwQkFBMEIsQ0FBQyxVQUFVLEVBQUU7WUFDbEUsdUJBQXVCLEVBQUUsd0JBQXdCLENBQUMsVUFBVSxFQUFFO1NBQ2hFO0tBQ0gsQ0FBQztJQUVGLE1BQU0sU0FBUyxHQUFHLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sYUFBYSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQWtCLENBQUM7SUFFM0QsTUFBTSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFFbEQsT0FBTyxhQUFhLENBQUM7QUFDeEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dCxcclxuICAgaXNTaWduYWwsXHJcbiAgIFNpZ25hbCxcclxuICAgc2lnbmFsLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBidWlsZEZvcm1EaXJ0eVNpZ25hbCB9IGZyb20gJy4vaGVscGVycy9mb3JtLWRpcnR5LXNpZ25hbCc7XHJcbmltcG9ydCB7IGJ1aWxkRm9ybUVycm9yU2lnbmFsIH0gZnJvbSAnLi9oZWxwZXJzL2Zvcm0tZXJyb3Itc2lnbmFsJztcclxuaW1wb3J0IHsgYnVpbGRGb3JtU25hcHNob3RTaWduYWwgfSBmcm9tICcuL2hlbHBlcnMvZm9ybS1zbmFwc2hvdC1zaWduYWwnO1xyXG5pbXBvcnQgeyBidWlsZEZvcm1TdGF0dXNTaWduYWwgfSBmcm9tICcuL2hlbHBlcnMvZm9ybS1zdGF0dXMtc2lnbmFsJztcclxuaW1wb3J0IHsgYnVpbGRGb3JtVG91Y2hlZFNpZ25hbCB9IGZyb20gJy4vaGVscGVycy9mb3JtLXRvdWNoZWQtc2lnbmFsJztcclxuaW1wb3J0IHsgYnVpbGRGb3JtVmFsdWVTaWduYWwgfSBmcm9tICcuL2hlbHBlcnMvZm9ybS12YWx1ZS1zaWduYWwnO1xyXG5pbXBvcnQge1xyXG4gICBidWlsZERlZmF1bHRGb3JtU2lnbmFsT3B0aW9ucyxcclxuICAgRm9ybVNpZ25hbE9wdGlvbnMsXHJcbn0gZnJvbSAnLi90eXBlcy9mb3JtLXNpZ25hbC1vcHRpb25zJztcclxuaW1wb3J0IHsgRm9ybVNpZ25hbCwgRm9ybVNpZ25hbFN0YXRlIH0gZnJvbSAnLi90eXBlcy9mb3JtLXNpZ25hbC10eXBlJztcclxuaW1wb3J0IHsgT3B0aW9uYWxGb3JtRnJvbVR5cGUgfSBmcm9tICcuL3R5cGVzL2Zvcm0tdHlwZSc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZm9ybVNpZ25hbDxUID0gYW55PihcclxuICAgZm9ybTogU2lnbmFsPE9wdGlvbmFsRm9ybUZyb21UeXBlPFQ+PiB8IE9wdGlvbmFsRm9ybUZyb21UeXBlPFQ+LFxyXG4gICBvcHRpb25zOiBGb3JtU2lnbmFsT3B0aW9ucyA9IGJ1aWxkRGVmYXVsdEZvcm1TaWduYWxPcHRpb25zPFQ+KClcclxuKTogRm9ybVNpZ25hbDxUPiB7XHJcbiAgIGNvbnN0IGZvcm1Bc1NpZ25hbCA9IGlzU2lnbmFsKGZvcm0pID8gZm9ybSA6IHNpZ25hbChmb3JtKTtcclxuICAgaWYgKCFvcHRpb25zLmluamVjdG9yKSB7XHJcbiAgICAgIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dCgoKSA9PiB7fSk7XHJcbiAgIH1cclxuICAgY29uc3QgeyB2YWx1ZSQsIHJhd1ZhbHVlJCwgdmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24kIH0gPVxyXG4gICAgICBidWlsZEZvcm1WYWx1ZVNpZ25hbDxUPihmb3JtQXNTaWduYWwsIG9wdGlvbnMpO1xyXG4gICBjb25zdCB7XHJcbiAgICAgIHN0YXR1cyQsXHJcbiAgICAgIHZhbGlkJCxcclxuICAgICAgaW52YWxpZCQsXHJcbiAgICAgIHBlbmRpbmckLFxyXG4gICAgICBkaXNhYmxlZCQsXHJcbiAgICAgIGVuYWJsZWQkLFxyXG4gICAgICBzdGF0dXNDaGFuZ2VTdWJzY3JpcHRpb24kLFxyXG4gICB9ID0gYnVpbGRGb3JtU3RhdHVzU2lnbmFsPFQ+KGZvcm1Bc1NpZ25hbCwgb3B0aW9ucyk7XHJcbiAgIGNvbnN0IHsgdG91Y2hlZCQsIHVudG91Y2hlZCQsIHRvdWNoZWRDaGFuZ2VTdWJzY3JpcHRpb24kIH0gPVxyXG4gICAgICBidWlsZEZvcm1Ub3VjaGVkU2lnbmFsKGZvcm1Bc1NpZ25hbCwgb3B0aW9ucyk7XHJcbiAgIGNvbnN0IHsgZGlydHkkLCBwcmlzdGluZSQsIGRpcnR5Q2hhbmdlU3Vic2NyaXB0aW9uJCB9ID0gYnVpbGRGb3JtRGlydHlTaWduYWwoXHJcbiAgICAgIGZvcm1Bc1NpZ25hbCxcclxuICAgICAgb3B0aW9uc1xyXG4gICApO1xyXG4gICBjb25zdCBlcnJvcnMkID0gYnVpbGRGb3JtRXJyb3JTaWduYWwoZm9ybUFzU2lnbmFsLCB2YWx1ZSQsIHN0YXR1cyQsIG9wdGlvbnMpO1xyXG5cclxuICAgY29uc3QgZm9ybVNpZ25hbHM6IEZvcm1TaWduYWxTdGF0ZTxUPiA9IHtcclxuICAgICAgc3RhdHVzOiBzdGF0dXMkLmFzUmVhZG9ubHkoKSxcclxuICAgICAgdmFsdWU6IHZhbHVlJC5hc1JlYWRvbmx5KCksXHJcbiAgICAgIHJhd1ZhbHVlOiByYXdWYWx1ZSQuYXNSZWFkb25seSgpLFxyXG4gICAgICB0b3VjaGVkOiB0b3VjaGVkJC5hc1JlYWRvbmx5KCksXHJcbiAgICAgIHVudG91Y2hlZDogdW50b3VjaGVkJCxcclxuICAgICAgZGlydHk6IGRpcnR5JC5hc1JlYWRvbmx5KCksXHJcbiAgICAgIHByaXN0aW5lOiBwcmlzdGluZSQsXHJcbiAgICAgIHZhbGlkOiB2YWxpZCQsXHJcbiAgICAgIGludmFsaWQ6IGludmFsaWQkLFxyXG4gICAgICBwZW5kaW5nOiBwZW5kaW5nJCxcclxuICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkJCxcclxuICAgICAgZW5hYmxlZDogZW5hYmxlZCQsXHJcbiAgICAgIGVycm9yczogZXJyb3JzJCxcclxuICAgICAgc3Vic2NyaXB0aW9uczoge1xyXG4gICAgICAgICB2YWx1ZUNoYW5nZVN1YnNjcmlwdGlvbjogdmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24kLmFzUmVhZG9ubHkoKSxcclxuICAgICAgICAgc3RhdHVzQ2hhbmdlU3Vic2NyaXB0aW9uOiBzdGF0dXNDaGFuZ2VTdWJzY3JpcHRpb24kLmFzUmVhZG9ubHkoKSxcclxuICAgICAgICAgdG91Y2hlZENoYW5nZVN1YnNjcmlwdGlvbjogdG91Y2hlZENoYW5nZVN1YnNjcmlwdGlvbiQuYXNSZWFkb25seSgpLFxyXG4gICAgICAgICBkaXJ0eUNoYW5nZVN1YnNjcmlwdGlvbjogZGlydHlDaGFuZ2VTdWJzY3JpcHRpb24kLmFzUmVhZG9ubHkoKSxcclxuICAgICAgfSxcclxuICAgfTtcclxuXHJcbiAgIGNvbnN0IHNuYXBzaG90JCA9IGJ1aWxkRm9ybVNuYXBzaG90U2lnbmFsKGZvcm1TaWduYWxzKTtcclxuICAgY29uc3QgZm9ybVNpZ25hbE9iaiA9ICgoKSA9PiBzbmFwc2hvdCQoKSkgYXMgRm9ybVNpZ25hbDxUPjtcclxuXHJcbiAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihmb3JtU2lnbmFsT2JqLCBmb3JtU2lnbmFscyk7XHJcblxyXG4gICByZXR1cm4gZm9ybVNpZ25hbE9iajtcclxufVxyXG4iXX0=
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1zaWduYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZm9ybS1zaWduYWwvc3JjL2xpYi9mb3JtLXNpZ25hbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ25FLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ25FLE9BQU8sRUFDSiw2QkFBNkIsR0FJL0IsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsc0JBQXNCLEVBQStCLE1BQU0sMEJBQTBCLENBQUM7QUFFL0Y7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FDdkIsSUFBTyxFQUNQLFVBQTZCLDZCQUE2QixFQUFFO0lBRTVELElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDckIsd0JBQXdCLENBQUMsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkMsT0FBTyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELE1BQU0sWUFBWSxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FFOUQsQ0FBQztJQUVWLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsb0JBQW9CLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxHQUFHLHFCQUFxQixDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNsSCxNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxHQUFHLHNCQUFzQixDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMvRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLG9CQUFvQixDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMxRSxNQUFNLE9BQU8sR0FBRyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFNUQsTUFBTSxXQUFXLEdBQW9EO1FBQ2xFLE1BQU0sRUFBRSxPQUFPO1FBQ2YsS0FBSyxFQUFFLE1BQU07UUFDYixRQUFRLEVBQUUsU0FBUztRQUNuQixPQUFPLEVBQUUsUUFBUTtRQUNqQixTQUFTLEVBQUUsVUFBVTtRQUNyQixLQUFLLEVBQUUsTUFBTTtRQUNiLFFBQVEsRUFBRSxTQUFTO1FBQ25CLEtBQUssRUFBRSxNQUFNO1FBQ2IsT0FBTyxFQUFFLFFBQVE7UUFDakIsT0FBTyxFQUFFLFFBQVE7UUFDakIsUUFBUSxFQUFFLFNBQVM7UUFDbkIsT0FBTyxFQUFFLFFBQVE7UUFDakIsTUFBTSxFQUFFLE9BQU87UUFDZixDQUFDLHNCQUFzQixDQUFDLEVBQUUsWUFBWTtLQUN4QyxDQUFDO0lBRUYsTUFBTSxTQUFTLEdBQUcsdUJBQXVCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdkQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFFOUMsT0FBTyxTQUF1RCxDQUFDO0FBQ2xFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQsIGluamVjdCwgSW5qZWN0b3IsIGlzU2lnbmFsLCBTaWduYWwsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBidWlsZEZvcm1EaXJ0eVNpZ25hbCB9IGZyb20gJy4vaGVscGVycy9mb3JtLWRpcnR5LXNpZ25hbCc7XHJcbmltcG9ydCB7IGJ1aWxkRm9ybUVycm9yU2lnbmFsIH0gZnJvbSAnLi9oZWxwZXJzL2Zvcm0tZXJyb3Itc2lnbmFsJztcclxuaW1wb3J0IHsgYnVpbGRGb3JtU25hcHNob3RTaWduYWwgfSBmcm9tICcuL2hlbHBlcnMvZm9ybS1zbmFwc2hvdC1zaWduYWwnO1xyXG5pbXBvcnQgeyBidWlsZEZvcm1TdGF0dXNTaWduYWwgfSBmcm9tICcuL2hlbHBlcnMvZm9ybS1zdGF0dXMtc2lnbmFsJztcclxuaW1wb3J0IHsgYnVpbGRGb3JtVG91Y2hlZFNpZ25hbCB9IGZyb20gJy4vaGVscGVycy9mb3JtLXRvdWNoZWQtc2lnbmFsJztcclxuaW1wb3J0IHsgYnVpbGRGb3JtVmFsdWVTaWduYWwgfSBmcm9tICcuL2hlbHBlcnMvZm9ybS12YWx1ZS1zaWduYWwnO1xyXG5pbXBvcnQge1xyXG4gICBidWlsZERlZmF1bHRGb3JtU2lnbmFsT3B0aW9ucyxcclxuICAgRm9ybVNpZ25hbEZvcm0sXHJcbiAgIEZvcm1TaWduYWxJbnB1dCxcclxuICAgRm9ybVNpZ25hbE9wdGlvbnMsXHJcbn0gZnJvbSAnLi90eXBlcy9mb3JtLXNpZ25hbC1vcHRpb25zJztcclxuaW1wb3J0IHsgRk9STV9TSUdOQUxfRk9STV9UT0tFTiwgRm9ybVNpZ25hbCwgRm9ybVNpZ25hbFN0YXRlIH0gZnJvbSAnLi90eXBlcy9mb3JtLXNpZ25hbC10eXBlJztcclxuXHJcbi8qKlxyXG4gKiBUYWtlcyBhIHJlYWN0aXZlIGZvcm0gY29udHJvbCBhbmQgc3Vic2NyaWJlcyB0byB2YXJpb3VzIGV2ZW50cyB0byBwdWxsIG91dFxyXG4gKiBmb3JtIHN0YXRlcyBhbmQgc3RvcmUgdGhlbSBpbnRvIHNpZ25hbHMuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZm9ybVNpZ25hbDxUIGV4dGVuZHMgRm9ybVNpZ25hbElucHV0PihcclxuICAgZm9ybTogVCxcclxuICAgb3B0aW9uczogRm9ybVNpZ25hbE9wdGlvbnMgPSBidWlsZERlZmF1bHRGb3JtU2lnbmFsT3B0aW9ucygpXHJcbik6IEZvcm1TaWduYWw8Tm9uTnVsbGFibGU8Rm9ybVNpZ25hbEZvcm08VD4+PiB7XHJcbiAgIGlmICghb3B0aW9ucy5pbmplY3Rvcikge1xyXG4gICAgICBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQoKCkgPT4ge30pO1xyXG4gICAgICBvcHRpb25zLmluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcclxuICAgfVxyXG5cclxuICAgY29uc3QgZm9ybUFzU2lnbmFsID0gKGlzU2lnbmFsKGZvcm0pID8gZm9ybSA6IHNpZ25hbChmb3JtKS5hc1JlYWRvbmx5KCkpIGFzIFNpZ25hbDxOb25OdWxsYWJsZTxcclxuICAgICAgRm9ybVNpZ25hbEZvcm08VD5cclxuICAgPiB8IG51bGw+O1xyXG5cclxuICAgY29uc3QgeyB2YWx1ZSQsIHJhd1ZhbHVlJCB9ID0gYnVpbGRGb3JtVmFsdWVTaWduYWwoZm9ybUFzU2lnbmFsLCBvcHRpb25zKTtcclxuICAgY29uc3QgeyBzdGF0dXMkLCB2YWxpZCQsIGludmFsaWQkLCBwZW5kaW5nJCwgZGlzYWJsZWQkLCBlbmFibGVkJCB9ID0gYnVpbGRGb3JtU3RhdHVzU2lnbmFsKGZvcm1Bc1NpZ25hbCwgb3B0aW9ucyk7XHJcbiAgIGNvbnN0IHsgdG91Y2hlZCQsIHVudG91Y2hlZCQgfSA9IGJ1aWxkRm9ybVRvdWNoZWRTaWduYWwoZm9ybUFzU2lnbmFsLCBvcHRpb25zKTtcclxuICAgY29uc3QgeyBkaXJ0eSQsIHByaXN0aW5lJCB9ID0gYnVpbGRGb3JtRGlydHlTaWduYWwoZm9ybUFzU2lnbmFsLCBvcHRpb25zKTtcclxuICAgY29uc3QgZXJyb3JzJCA9IGJ1aWxkRm9ybUVycm9yU2lnbmFsKGZvcm1Bc1NpZ25hbCwgb3B0aW9ucyk7XHJcblxyXG4gICBjb25zdCBmb3JtU2lnbmFsczogRm9ybVNpZ25hbFN0YXRlPE5vbk51bGxhYmxlPEZvcm1TaWduYWxGb3JtPFQ+Pj4gPSB7XHJcbiAgICAgIHN0YXR1czogc3RhdHVzJCxcclxuICAgICAgdmFsdWU6IHZhbHVlJCxcclxuICAgICAgcmF3VmFsdWU6IHJhd1ZhbHVlJCxcclxuICAgICAgdG91Y2hlZDogdG91Y2hlZCQsXHJcbiAgICAgIHVudG91Y2hlZDogdW50b3VjaGVkJCxcclxuICAgICAgZGlydHk6IGRpcnR5JCxcclxuICAgICAgcHJpc3RpbmU6IHByaXN0aW5lJCxcclxuICAgICAgdmFsaWQ6IHZhbGlkJCxcclxuICAgICAgaW52YWxpZDogaW52YWxpZCQsXHJcbiAgICAgIHBlbmRpbmc6IHBlbmRpbmckLFxyXG4gICAgICBkaXNhYmxlZDogZGlzYWJsZWQkLFxyXG4gICAgICBlbmFibGVkOiBlbmFibGVkJCxcclxuICAgICAgZXJyb3JzOiBlcnJvcnMkLFxyXG4gICAgICBbRk9STV9TSUdOQUxfRk9STV9UT0tFTl06IGZvcm1Bc1NpZ25hbCxcclxuICAgfTtcclxuXHJcbiAgIGNvbnN0IHNuYXBzaG90JCA9IGJ1aWxkRm9ybVNuYXBzaG90U2lnbmFsKGZvcm1TaWduYWxzKTtcclxuICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHNuYXBzaG90JCwgZm9ybVNpZ25hbHMpO1xyXG5cclxuICAgcmV0dXJuIHNuYXBzaG90JCBhcyBGb3JtU2lnbmFsPE5vbk51bGxhYmxlPEZvcm1TaWduYWxGb3JtPFQ+Pj47XHJcbn1cclxuIl19
@@ -0,0 +1,109 @@
1
+ import { computed, untracked } from '@angular/core';
2
+ import { deepFormSignal } from '../deep-form-signal';
3
+ import { formSignal } from '../form-signal';
4
+ function buildEagerFormControlsSignal(formAsSignal, options) {
5
+ const eagerRoot = formSignal(formAsSignal, {
6
+ ...options,
7
+ eagerNotify: true,
8
+ });
9
+ const eagerValueStatus$ = computed(() => ({
10
+ value: eagerRoot.value(),
11
+ rawValue: eagerRoot.rawValue(),
12
+ status: eagerRoot.status(),
13
+ }), { equal: () => false });
14
+ const controls$ = computed(() => {
15
+ const form = formAsSignal();
16
+ // Recompute controls on status or value change in event of
17
+ // dynamically added/removed controls
18
+ const _ = eagerValueStatus$();
19
+ return untracked(() => {
20
+ if (form && 'controls' in form) {
21
+ return form.controls;
22
+ }
23
+ return null;
24
+ });
25
+ }, { equal: () => false });
26
+ return controls$;
27
+ }
28
+ function extractFormInstances(formSignalsContainer) {
29
+ if (formSignalsContainer === null)
30
+ return [];
31
+ if (Array.isArray(formSignalsContainer))
32
+ return [...formSignalsContainer];
33
+ return Object.keys(formSignalsContainer).map((key) => formSignalsContainer[key]);
34
+ }
35
+ function buildFlattenedControlsSignal(eagerControls$) {
36
+ const flattenedControls$ = computed(() => {
37
+ const controls = eagerControls$();
38
+ return extractFormInstances(controls);
39
+ }, {
40
+ equal: (a, b) => {
41
+ const someANotInB = a.some((aItem) => !b.some((bItem) => bItem === aItem));
42
+ const someBNotInA = b.some((bItem) => !a.some((aItem) => aItem === bItem));
43
+ return !someANotInB && !someBNotInA;
44
+ },
45
+ });
46
+ return flattenedControls$;
47
+ }
48
+ function buildDeepSignalsForControls(flattenedControls$, options) {
49
+ // Using side effect in computed to prevent using effect in reactive context errors
50
+ // https://v20.angular.dev/errors/NG0602
51
+ let lastTrackedControls = [];
52
+ const controlsWithDeepSignals$ = computed(() => {
53
+ const flattenedControls = flattenedControls$();
54
+ return untracked(() => {
55
+ const newTrackedControls = [];
56
+ for (const c of flattenedControls) {
57
+ const match = lastTrackedControls.find((tc) => tc.control === c);
58
+ if (match) {
59
+ newTrackedControls.push(match);
60
+ }
61
+ else {
62
+ newTrackedControls.push({
63
+ control: c,
64
+ deepFormSignal: deepFormSignal(c, options),
65
+ });
66
+ }
67
+ }
68
+ lastTrackedControls = newTrackedControls;
69
+ return lastTrackedControls;
70
+ });
71
+ });
72
+ return controlsWithDeepSignals$;
73
+ }
74
+ function mapDeepSignalsBackToControlSchema(controlsWithDeepSignals$, formAsSignal) {
75
+ const controls$ = computed(() => {
76
+ const form = formAsSignal();
77
+ if (!form || !('controls' in form))
78
+ return null;
79
+ const controls = form.controls;
80
+ if (!controls)
81
+ return null;
82
+ const deepSignals = controlsWithDeepSignals$();
83
+ if (Array.isArray(controls)) {
84
+ return controls.reduce((acc, c) => {
85
+ const match = deepSignals.find((tc) => tc.control === c)?.deepFormSignal;
86
+ if (match) {
87
+ acc.push(match);
88
+ }
89
+ return acc;
90
+ }, []);
91
+ }
92
+ return Object.keys(controls).reduce((acc, cKey) => {
93
+ const match = deepSignals.find((tc) => tc.control === controls[cKey]);
94
+ if (match && match.deepFormSignal) {
95
+ return { ...acc, [cKey]: match.deepFormSignal };
96
+ }
97
+ return acc;
98
+ }, {});
99
+ });
100
+ return controls$;
101
+ }
102
+ export function buildFormControlsSignal(formAsSignal, options) {
103
+ const eagerControls$ = buildEagerFormControlsSignal(formAsSignal, options);
104
+ const flattenedControls$ = buildFlattenedControlsSignal(eagerControls$);
105
+ const controlsWithDeepSignals$ = buildDeepSignalsForControls(flattenedControls$, options);
106
+ const controls$ = mapDeepSignalsBackToControlSchema(controlsWithDeepSignals$, formAsSignal);
107
+ return controls$;
108
+ }
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jb250cm9scy1zaWduYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZm9ybS1zaWduYWwvc3JjL2xpYi9oZWxwZXJzL2Zvcm0tY29udHJvbHMtc2lnbmFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFXNUMsU0FBUyw0QkFBNEIsQ0FDbEMsWUFBOEIsRUFDOUIsT0FBMEI7SUFFMUIsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLFlBQVksRUFBRTtRQUN4QyxHQUFHLE9BQU87UUFDVixXQUFXLEVBQUUsSUFBSTtLQUNuQixDQUFDLENBQUM7SUFFSCxNQUFNLGlCQUFpQixHQUFHLFFBQVEsQ0FDL0IsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNKLEtBQUssRUFBRSxTQUFTLENBQUMsS0FBSyxFQUFFO1FBQ3hCLFFBQVEsRUFBRSxTQUFTLENBQUMsUUFBUSxFQUFFO1FBQzlCLE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTSxFQUFFO0tBQzVCLENBQUMsRUFDRixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FDeEIsQ0FBQztJQUVGLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FDdkIsR0FBRyxFQUFFO1FBQ0YsTUFBTSxJQUFJLEdBQUcsWUFBWSxFQUFFLENBQUM7UUFFNUIsMkRBQTJEO1FBQzNELHFDQUFxQztRQUNyQyxNQUFNLENBQUMsR0FBRyxpQkFBaUIsRUFBRSxDQUFDO1FBRTlCLE9BQU8sU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNuQixJQUFJLElBQUksSUFBSSxVQUFVLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQzlCLE9BQU8sSUFBSSxDQUFDLFFBQW9CLENBQUM7WUFDcEMsQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDLEVBQ0QsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQ3hCLENBQUM7SUFDRixPQUFPLFNBQVMsQ0FBQztBQUNwQixDQUFDO0FBRUQsU0FBUyxvQkFBb0IsQ0FBQyxvQkFBOEI7SUFDekQsSUFBSSxvQkFBb0IsS0FBSyxJQUFJO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDN0MsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDO1FBQUUsT0FBTyxDQUFDLEdBQUcsb0JBQW9CLENBQUMsQ0FBQztJQUMxRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDcEYsQ0FBQztBQUVELFNBQVMsNEJBQTRCLENBQUMsY0FBZ0M7SUFDbkUsTUFBTSxrQkFBa0IsR0FBRyxRQUFRLENBQ2hDLEdBQUcsRUFBRTtRQUNGLE1BQU0sUUFBUSxHQUFHLGNBQWMsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDekMsQ0FBQyxFQUNEO1FBQ0csS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2IsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQztZQUMzRSxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzNFLE9BQU8sQ0FBQyxXQUFXLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDdkMsQ0FBQztLQUNILENBQ0gsQ0FBQztJQUNGLE9BQU8sa0JBQWtCLENBQUM7QUFDN0IsQ0FBQztBQUVELFNBQVMsMkJBQTJCLENBQ2pDLGtCQUF1RCxFQUN2RCxPQUEwQjtJQUUxQixtRkFBbUY7SUFDbkYsd0NBQXdDO0lBQ3hDLElBQUksbUJBQW1CLEdBR2pCLEVBQUUsQ0FBQztJQUNULE1BQU0sd0JBQXdCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUM1QyxNQUFNLGlCQUFpQixHQUFHLGtCQUFrQixFQUFFLENBQUM7UUFDL0MsT0FBTyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ25CLE1BQU0sa0JBQWtCLEdBR2xCLEVBQUUsQ0FBQztZQUNULEtBQUssTUFBTSxDQUFDLElBQUksaUJBQWlCLEVBQUUsQ0FBQztnQkFDakMsTUFBTSxLQUFLLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNqRSxJQUFJLEtBQUssRUFBRSxDQUFDO29CQUNULGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbEMsQ0FBQztxQkFBTSxDQUFDO29CQUNMLGtCQUFrQixDQUFDLElBQUksQ0FBQzt3QkFDckIsT0FBTyxFQUFFLENBQUM7d0JBQ1YsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDO3FCQUM1QyxDQUFDLENBQUM7Z0JBQ04sQ0FBQztZQUNKLENBQUM7WUFDRCxtQkFBbUIsR0FBRyxrQkFBa0IsQ0FBQztZQUN6QyxPQUFPLG1CQUFtQixDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLHdCQUF3QixDQUFDO0FBQ25DLENBQUM7QUFFRCxTQUFTLGlDQUFpQyxDQUN2Qyx3QkFLQyxFQUNELFlBQThCO0lBRTlCLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDN0IsTUFBTSxJQUFJLEdBQUcsWUFBWSxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRWhELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFvQixDQUFDO1FBQzNDLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFM0IsTUFBTSxXQUFXLEdBQUcsd0JBQXdCLEVBQUUsQ0FBQztRQUUvQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUMzQixPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQ25CLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNSLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDO2dCQUN6RSxJQUFJLEtBQUssRUFBRSxDQUFDO29CQUNULEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25CLENBQUM7Z0JBQ0QsT0FBTyxHQUFHLENBQUM7WUFDZCxDQUFDLEVBQ0QsRUFBaUQsQ0FDbkQsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUNoQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUNYLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEtBQUssUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDdEUsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUNqQyxPQUFPLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDbkQsQ0FBQztZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2QsQ0FBQyxFQUNELEVBRUMsQ0FDSCxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLFNBQVMsQ0FBQztBQUNwQixDQUFDO0FBRUQsTUFBTSxVQUFVLHVCQUF1QixDQUNwQyxZQUE4QixFQUM5QixPQUEwQjtJQUUxQixNQUFNLGNBQWMsR0FBRyw0QkFBNEIsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDM0UsTUFBTSxrQkFBa0IsR0FBRyw0QkFBNEIsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN4RSxNQUFNLHdCQUF3QixHQUFHLDJCQUEyQixDQUFDLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzFGLE1BQU0sU0FBUyxHQUFHLGlDQUFpQyxDQUFDLHdCQUF3QixFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQzVGLE9BQU8sU0FBUyxDQUFDO0FBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wdXRlZCwgU2lnbmFsLCB1bnRyYWNrZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBkZWVwRm9ybVNpZ25hbCB9IGZyb20gJy4uL2RlZXAtZm9ybS1zaWduYWwnO1xyXG5pbXBvcnQgeyBmb3JtU2lnbmFsIH0gZnJvbSAnLi4vZm9ybS1zaWduYWwnO1xyXG5pbXBvcnQgeyBEZWVwRm9ybVNpZ25hbCB9IGZyb20gJy4uL3R5cGVzL2RlZXAtZm9ybS1zaWduYWwtdHlwZSc7XHJcbmltcG9ydCB7IEZvcm1TaWduYWxPcHRpb25zIH0gZnJvbSAnLi4vdHlwZXMvZm9ybS1zaWduYWwtb3B0aW9ucyc7XHJcblxyXG50eXBlIENvbnRyb2xzID1cclxuICAgfCB7XHJcbiAgICAgICAgW2tleTogc3RyaW5nXTogQWJzdHJhY3RDb250cm9sO1xyXG4gICAgIH1cclxuICAgfCBBYnN0cmFjdENvbnRyb2xbXVxyXG4gICB8IG51bGw7XHJcblxyXG5mdW5jdGlvbiBidWlsZEVhZ2VyRm9ybUNvbnRyb2xzU2lnbmFsPFQgZXh0ZW5kcyBBYnN0cmFjdENvbnRyb2w8YW55Pj4oXHJcbiAgIGZvcm1Bc1NpZ25hbDogU2lnbmFsPFQgfCBudWxsPixcclxuICAgb3B0aW9uczogRm9ybVNpZ25hbE9wdGlvbnNcclxuKSB7XHJcbiAgIGNvbnN0IGVhZ2VyUm9vdCA9IGZvcm1TaWduYWwoZm9ybUFzU2lnbmFsLCB7XHJcbiAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICAgIGVhZ2VyTm90aWZ5OiB0cnVlLFxyXG4gICB9KTtcclxuXHJcbiAgIGNvbnN0IGVhZ2VyVmFsdWVTdGF0dXMkID0gY29tcHV0ZWQoXHJcbiAgICAgICgpID0+ICh7XHJcbiAgICAgICAgIHZhbHVlOiBlYWdlclJvb3QudmFsdWUoKSxcclxuICAgICAgICAgcmF3VmFsdWU6IGVhZ2VyUm9vdC5yYXdWYWx1ZSgpLFxyXG4gICAgICAgICBzdGF0dXM6IGVhZ2VyUm9vdC5zdGF0dXMoKSxcclxuICAgICAgfSksXHJcbiAgICAgIHsgZXF1YWw6ICgpID0+IGZhbHNlIH1cclxuICAgKTtcclxuXHJcbiAgIGNvbnN0IGNvbnRyb2xzJCA9IGNvbXB1dGVkKFxyXG4gICAgICAoKSA9PiB7XHJcbiAgICAgICAgIGNvbnN0IGZvcm0gPSBmb3JtQXNTaWduYWwoKTtcclxuXHJcbiAgICAgICAgIC8vIFJlY29tcHV0ZSBjb250cm9scyBvbiBzdGF0dXMgb3IgdmFsdWUgY2hhbmdlIGluIGV2ZW50IG9mXHJcbiAgICAgICAgIC8vIGR5bmFtaWNhbGx5IGFkZGVkL3JlbW92ZWQgY29udHJvbHNcclxuICAgICAgICAgY29uc3QgXyA9IGVhZ2VyVmFsdWVTdGF0dXMkKCk7XHJcblxyXG4gICAgICAgICByZXR1cm4gdW50cmFja2VkKCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKGZvcm0gJiYgJ2NvbnRyb2xzJyBpbiBmb3JtKSB7XHJcbiAgICAgICAgICAgICAgIHJldHVybiBmb3JtLmNvbnRyb2xzIGFzIENvbnRyb2xzO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIHsgZXF1YWw6ICgpID0+IGZhbHNlIH1cclxuICAgKTtcclxuICAgcmV0dXJuIGNvbnRyb2xzJDtcclxufVxyXG5cclxuZnVuY3Rpb24gZXh0cmFjdEZvcm1JbnN0YW5jZXMoZm9ybVNpZ25hbHNDb250YWluZXI6IENvbnRyb2xzKTogQWJzdHJhY3RDb250cm9sW10ge1xyXG4gICBpZiAoZm9ybVNpZ25hbHNDb250YWluZXIgPT09IG51bGwpIHJldHVybiBbXTtcclxuICAgaWYgKEFycmF5LmlzQXJyYXkoZm9ybVNpZ25hbHNDb250YWluZXIpKSByZXR1cm4gWy4uLmZvcm1TaWduYWxzQ29udGFpbmVyXTtcclxuICAgcmV0dXJuIE9iamVjdC5rZXlzKGZvcm1TaWduYWxzQ29udGFpbmVyKS5tYXAoKGtleSkgPT4gZm9ybVNpZ25hbHNDb250YWluZXJba2V5XSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGJ1aWxkRmxhdHRlbmVkQ29udHJvbHNTaWduYWwoZWFnZXJDb250cm9scyQ6IFNpZ25hbDxDb250cm9scz4pIHtcclxuICAgY29uc3QgZmxhdHRlbmVkQ29udHJvbHMkID0gY29tcHV0ZWQoXHJcbiAgICAgICgpID0+IHtcclxuICAgICAgICAgY29uc3QgY29udHJvbHMgPSBlYWdlckNvbnRyb2xzJCgpO1xyXG4gICAgICAgICByZXR1cm4gZXh0cmFjdEZvcm1JbnN0YW5jZXMoY29udHJvbHMpO1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgIGVxdWFsOiAoYSwgYikgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzb21lQU5vdEluQiA9IGEuc29tZSgoYUl0ZW0pID0+ICFiLnNvbWUoKGJJdGVtKSA9PiBiSXRlbSA9PT0gYUl0ZW0pKTtcclxuICAgICAgICAgICAgY29uc3Qgc29tZUJOb3RJbkEgPSBiLnNvbWUoKGJJdGVtKSA9PiAhYS5zb21lKChhSXRlbSkgPT4gYUl0ZW0gPT09IGJJdGVtKSk7XHJcbiAgICAgICAgICAgIHJldHVybiAhc29tZUFOb3RJbkIgJiYgIXNvbWVCTm90SW5BO1xyXG4gICAgICAgICB9LFxyXG4gICAgICB9XHJcbiAgICk7XHJcbiAgIHJldHVybiBmbGF0dGVuZWRDb250cm9scyQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGJ1aWxkRGVlcFNpZ25hbHNGb3JDb250cm9scyhcclxuICAgZmxhdHRlbmVkQ29udHJvbHMkOiBTaWduYWw8QWJzdHJhY3RDb250cm9sPGFueSwgYW55PltdPixcclxuICAgb3B0aW9uczogRm9ybVNpZ25hbE9wdGlvbnNcclxuKSB7XHJcbiAgIC8vIFVzaW5nIHNpZGUgZWZmZWN0IGluIGNvbXB1dGVkIHRvIHByZXZlbnQgdXNpbmcgZWZmZWN0IGluIHJlYWN0aXZlIGNvbnRleHQgZXJyb3JzXHJcbiAgIC8vIGh0dHBzOi8vdjIwLmFuZ3VsYXIuZGV2L2Vycm9ycy9ORzA2MDJcclxuICAgbGV0IGxhc3RUcmFja2VkQ29udHJvbHM6IHtcclxuICAgICAgY29udHJvbDogQWJzdHJhY3RDb250cm9sPGFueSwgYW55PjtcclxuICAgICAgZGVlcEZvcm1TaWduYWw6IERlZXBGb3JtU2lnbmFsPGFueT47XHJcbiAgIH1bXSA9IFtdO1xyXG4gICBjb25zdCBjb250cm9sc1dpdGhEZWVwU2lnbmFscyQgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGZsYXR0ZW5lZENvbnRyb2xzID0gZmxhdHRlbmVkQ29udHJvbHMkKCk7XHJcbiAgICAgIHJldHVybiB1bnRyYWNrZWQoKCkgPT4ge1xyXG4gICAgICAgICBjb25zdCBuZXdUcmFja2VkQ29udHJvbHM6IHtcclxuICAgICAgICAgICAgY29udHJvbDogQWJzdHJhY3RDb250cm9sPGFueSwgYW55PjtcclxuICAgICAgICAgICAgZGVlcEZvcm1TaWduYWw6IERlZXBGb3JtU2lnbmFsPGFueT47XHJcbiAgICAgICAgIH1bXSA9IFtdO1xyXG4gICAgICAgICBmb3IgKGNvbnN0IGMgb2YgZmxhdHRlbmVkQ29udHJvbHMpIHtcclxuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBsYXN0VHJhY2tlZENvbnRyb2xzLmZpbmQoKHRjKSA9PiB0Yy5jb250cm9sID09PSBjKTtcclxuICAgICAgICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgICAgICAgIG5ld1RyYWNrZWRDb250cm9scy5wdXNoKG1hdGNoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgbmV3VHJhY2tlZENvbnRyb2xzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICBjb250cm9sOiBjLFxyXG4gICAgICAgICAgICAgICAgICBkZWVwRm9ybVNpZ25hbDogZGVlcEZvcm1TaWduYWwoYywgb3B0aW9ucyksXHJcbiAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgbGFzdFRyYWNrZWRDb250cm9scyA9IG5ld1RyYWNrZWRDb250cm9scztcclxuICAgICAgICAgcmV0dXJuIGxhc3RUcmFja2VkQ29udHJvbHM7XHJcbiAgICAgIH0pO1xyXG4gICB9KTtcclxuICAgcmV0dXJuIGNvbnRyb2xzV2l0aERlZXBTaWduYWxzJDtcclxufVxyXG5cclxuZnVuY3Rpb24gbWFwRGVlcFNpZ25hbHNCYWNrVG9Db250cm9sU2NoZW1hPFQgZXh0ZW5kcyBBYnN0cmFjdENvbnRyb2w8YW55Pj4oXHJcbiAgIGNvbnRyb2xzV2l0aERlZXBTaWduYWxzJDogU2lnbmFsPFxyXG4gICAgICB7XHJcbiAgICAgICAgIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDxhbnksIGFueT47XHJcbiAgICAgICAgIGRlZXBGb3JtU2lnbmFsOiBEZWVwRm9ybVNpZ25hbDxhbnk+O1xyXG4gICAgICB9W11cclxuICAgPixcclxuICAgZm9ybUFzU2lnbmFsOiBTaWduYWw8VCB8IG51bGw+XHJcbikge1xyXG4gICBjb25zdCBjb250cm9scyQgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGZvcm0gPSBmb3JtQXNTaWduYWwoKTtcclxuICAgICAgaWYgKCFmb3JtIHx8ICEoJ2NvbnRyb2xzJyBpbiBmb3JtKSkgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgICBjb25zdCBjb250cm9scyA9IGZvcm0uY29udHJvbHMgYXMgQ29udHJvbHM7XHJcbiAgICAgIGlmICghY29udHJvbHMpIHJldHVybiBudWxsO1xyXG5cclxuICAgICAgY29uc3QgZGVlcFNpZ25hbHMgPSBjb250cm9sc1dpdGhEZWVwU2lnbmFscyQoKTtcclxuXHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbnRyb2xzKSkge1xyXG4gICAgICAgICByZXR1cm4gY29udHJvbHMucmVkdWNlKFxyXG4gICAgICAgICAgICAoYWNjLCBjKSA9PiB7XHJcbiAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gZGVlcFNpZ25hbHMuZmluZCgodGMpID0+IHRjLmNvbnRyb2wgPT09IGMpPy5kZWVwRm9ybVNpZ25hbDtcclxuICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgICAgICAgICAgIGFjYy5wdXNoKG1hdGNoKTtcclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICByZXR1cm4gYWNjO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBbXSBhcyBEZWVwRm9ybVNpZ25hbDwodHlwZW9mIGNvbnRyb2xzKVtudW1iZXJdPltdXHJcbiAgICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGNvbnRyb2xzKS5yZWR1Y2UoXHJcbiAgICAgICAgIChhY2MsIGNLZXkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBkZWVwU2lnbmFscy5maW5kKCh0YykgPT4gdGMuY29udHJvbCA9PT0gY29udHJvbHNbY0tleV0pO1xyXG4gICAgICAgICAgICBpZiAobWF0Y2ggJiYgbWF0Y2guZGVlcEZvcm1TaWduYWwpIHtcclxuICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYWNjLCBbY0tleV06IG1hdGNoLmRlZXBGb3JtU2lnbmFsIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgICAgfSxcclxuICAgICAgICAge30gYXMge1xyXG4gICAgICAgICAgICBbeCBpbiBrZXlvZiB0eXBlb2YgY29udHJvbHNdOiBEZWVwRm9ybVNpZ25hbDwodHlwZW9mIGNvbnRyb2xzKVt4XT47XHJcbiAgICAgICAgIH1cclxuICAgICAgKTtcclxuICAgfSk7XHJcblxyXG4gICByZXR1cm4gY29udHJvbHMkO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRGb3JtQ29udHJvbHNTaWduYWw8VCBleHRlbmRzIEFic3RyYWN0Q29udHJvbDxhbnk+PihcclxuICAgZm9ybUFzU2lnbmFsOiBTaWduYWw8VCB8IG51bGw+LFxyXG4gICBvcHRpb25zOiBGb3JtU2lnbmFsT3B0aW9uc1xyXG4pIHtcclxuICAgY29uc3QgZWFnZXJDb250cm9scyQgPSBidWlsZEVhZ2VyRm9ybUNvbnRyb2xzU2lnbmFsKGZvcm1Bc1NpZ25hbCwgb3B0aW9ucyk7XHJcbiAgIGNvbnN0IGZsYXR0ZW5lZENvbnRyb2xzJCA9IGJ1aWxkRmxhdHRlbmVkQ29udHJvbHNTaWduYWwoZWFnZXJDb250cm9scyQpO1xyXG4gICBjb25zdCBjb250cm9sc1dpdGhEZWVwU2lnbmFscyQgPSBidWlsZERlZXBTaWduYWxzRm9yQ29udHJvbHMoZmxhdHRlbmVkQ29udHJvbHMkLCBvcHRpb25zKTtcclxuICAgY29uc3QgY29udHJvbHMkID0gbWFwRGVlcFNpZ25hbHNCYWNrVG9Db250cm9sU2NoZW1hKGNvbnRyb2xzV2l0aERlZXBTaWduYWxzJCwgZm9ybUFzU2lnbmFsKTtcclxuICAgcmV0dXJuIGNvbnRyb2xzJDtcclxufVxyXG4iXX0=
@@ -1,30 +1,29 @@
1
- import { computed, effect, signal, untracked } from '@angular/core';
1
+ import { computed, signal } from '@angular/core';
2
2
  import { PristineChangeEvent } from '@angular/forms';
3
- import { filter } from 'rxjs';
3
+ import { filter, map, of } from 'rxjs';
4
+ import { handleStreamSignal } from './handle-stream-signal';
4
5
  export function buildFormDirtySignal(formAsSignal, options) {
5
- const dirty$ = signal(!!formAsSignal()?.dirty, {
6
- equal: options.equalityFns?.dirtyEquality,
6
+ let initDirty = false;
7
+ try {
8
+ // Attempt read of formAsSignal in try catch
9
+ // to prevent input.required errors
10
+ initDirty = formAsSignal()?.dirty ?? false;
11
+ }
12
+ catch { }
13
+ const dirty$ = signal(initDirty, {
14
+ equal: options.eagerNotify ? () => false : undefined,
7
15
  });
8
- const dirtyChangeSubscription$ = signal(null);
9
- const formDirtyChangeEffect = effect((onCleanup) => {
16
+ const pristine$ = computed(() => !dirty$(), {
17
+ equal: options.eagerNotify ? () => false : undefined,
18
+ });
19
+ const formStream$ = computed(() => {
10
20
  const form = formAsSignal();
11
- untracked(() => {
12
- const setDirty = () => {
13
- untracked(() => {
14
- dirty$.set(!!form?.dirty);
15
- });
16
- };
17
- dirtyChangeSubscription$()?.unsubscribe();
18
- dirtyChangeSubscription$.set(form?.events
19
- .pipe(filter((e) => e instanceof PristineChangeEvent))
20
- .subscribe((e) => {
21
- setDirty();
22
- }) ?? null);
23
- setDirty();
24
- });
25
- onCleanup(() => untracked(() => dirtyChangeSubscription$())?.unsubscribe());
26
- }, { injector: options.injector });
27
- const pristine$ = computed(() => !dirty$());
28
- return { dirty$, pristine$, dirtyChangeSubscription$ };
21
+ const dirtyStream = form?.events.pipe(filter((e) => e instanceof PristineChangeEvent), map(() => !!form.dirty));
22
+ return { form, stream: dirtyStream ? dirtyStream : of(false) };
23
+ });
24
+ handleStreamSignal(formStream$, (form) => {
25
+ dirty$.set(!!form?.dirty);
26
+ }, options);
27
+ return { dirty$: dirty$.asReadonly(), pristine$ };
29
28
  }
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1kaXJ0eS1zaWduYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZm9ybS1zaWduYWwvc3JjL2xpYi9oZWxwZXJzL2Zvcm0tZGlydHktc2lnbmFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLE1BQU0sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFJNUMsTUFBTSxVQUFVLG9CQUFvQixDQUNqQyxZQUErQyxFQUMvQyxPQUEwQjtJQUUxQixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQVUsQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRTtRQUNyRCxLQUFLLEVBQUUsT0FBTyxDQUFDLFdBQVcsRUFBRSxhQUFhO0tBQzNDLENBQUMsQ0FBQztJQUNILE1BQU0sd0JBQXdCLEdBQUcsTUFBTSxDQUFzQixJQUFJLENBQUMsQ0FBQztJQUVuRSxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FDakMsQ0FBQyxTQUFtQixFQUFFLEVBQUU7UUFDckIsTUFBTSxJQUFJLEdBQUcsWUFBWSxFQUFFLENBQUM7UUFDNUIsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNaLE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRTtnQkFDbkIsU0FBUyxDQUFDLEdBQUcsRUFBRTtvQkFDWixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQzdCLENBQUMsQ0FBQyxDQUFDO1lBQ04sQ0FBQyxDQUFDO1lBRUYsd0JBQXdCLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQztZQUMxQyx3QkFBd0IsQ0FBQyxHQUFHLENBQ3pCLElBQUksRUFBRSxNQUFNO2lCQUNSLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsWUFBWSxtQkFBbUIsQ0FBQyxDQUFDO2lCQUNyRCxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDZCxRQUFRLEVBQUUsQ0FBQztZQUNkLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FDZixDQUFDO1lBQ0YsUUFBUSxFQUFFLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FBQztRQUNILFNBQVMsQ0FDTixHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUNsRSxDQUFDO0lBQ0wsQ0FBQyxFQUNELEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FDaEMsQ0FBQztJQUVGLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFFNUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsd0JBQXdCLEVBQUUsQ0FBQztBQUMxRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQsIGVmZmVjdCwgU2lnbmFsLCBzaWduYWwsIHVudHJhY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQcmlzdGluZUNoYW5nZUV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBGb3JtU2lnbmFsT3B0aW9ucyB9IGZyb20gJy4uL3R5cGVzL2Zvcm0tc2lnbmFsLW9wdGlvbnMnO1xyXG5pbXBvcnQgeyBPcHRpb25hbEZvcm1Gcm9tVHlwZSB9IGZyb20gJy4uL3R5cGVzL2Zvcm0tdHlwZSc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRGb3JtRGlydHlTaWduYWwoXHJcbiAgIGZvcm1Bc1NpZ25hbDogU2lnbmFsPE9wdGlvbmFsRm9ybUZyb21UeXBlPGFueT4+LFxyXG4gICBvcHRpb25zOiBGb3JtU2lnbmFsT3B0aW9uc1xyXG4pIHtcclxuICAgY29uc3QgZGlydHkkID0gc2lnbmFsPGJvb2xlYW4+KCEhZm9ybUFzU2lnbmFsKCk/LmRpcnR5LCB7XHJcbiAgICAgIGVxdWFsOiBvcHRpb25zLmVxdWFsaXR5Rm5zPy5kaXJ0eUVxdWFsaXR5LFxyXG4gICB9KTtcclxuICAgY29uc3QgZGlydHlDaGFuZ2VTdWJzY3JpcHRpb24kID0gc2lnbmFsPFN1YnNjcmlwdGlvbiB8IG51bGw+KG51bGwpO1xyXG5cclxuICAgY29uc3QgZm9ybURpcnR5Q2hhbmdlRWZmZWN0ID0gZWZmZWN0KFxyXG4gICAgICAob25DbGVhbnVwOiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICAgICBjb25zdCBmb3JtID0gZm9ybUFzU2lnbmFsKCk7XHJcbiAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNldERpcnR5ID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICB1bnRyYWNrZWQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBkaXJ0eSQuc2V0KCEhZm9ybT8uZGlydHkpO1xyXG4gICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGRpcnR5Q2hhbmdlU3Vic2NyaXB0aW9uJCgpPy51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICBkaXJ0eUNoYW5nZVN1YnNjcmlwdGlvbiQuc2V0KFxyXG4gICAgICAgICAgICAgICBmb3JtPy5ldmVudHNcclxuICAgICAgICAgICAgICAgICAgLnBpcGUoZmlsdGVyKChlKSA9PiBlIGluc3RhbmNlb2YgUHJpc3RpbmVDaGFuZ2VFdmVudCkpXHJcbiAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgc2V0RGlydHkoKTtcclxuICAgICAgICAgICAgICAgICAgfSkgPz8gbnVsbFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBzZXREaXJ0eSgpO1xyXG4gICAgICAgICB9KTtcclxuICAgICAgICAgb25DbGVhbnVwKFxyXG4gICAgICAgICAgICAoKSA9PiB1bnRyYWNrZWQoKCkgPT4gZGlydHlDaGFuZ2VTdWJzY3JpcHRpb24kKCkpPy51bnN1YnNjcmliZSgpXHJcbiAgICAgICAgICk7XHJcbiAgICAgIH0sXHJcbiAgICAgIHsgaW5qZWN0b3I6IG9wdGlvbnMuaW5qZWN0b3IgfVxyXG4gICApO1xyXG5cclxuICAgY29uc3QgcHJpc3RpbmUkID0gY29tcHV0ZWQoKCkgPT4gIWRpcnR5JCgpKTtcclxuXHJcbiAgIHJldHVybiB7IGRpcnR5JCwgcHJpc3RpbmUkLCBkaXJ0eUNoYW5nZVN1YnNjcmlwdGlvbiQgfTtcclxufVxyXG4iXX0=
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1kaXJ0eS1zaWduYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZm9ybS1zaWduYWwvc3JjL2xpYi9oZWxwZXJzL2Zvcm0tZGlydHktc2lnbmFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBbUIsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFNUQsTUFBTSxVQUFVLG9CQUFvQixDQUNqQyxZQUE4QixFQUM5QixPQUEwQjtJQUUxQixJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDdEIsSUFBSSxDQUFDO1FBQ0YsNENBQTRDO1FBQzVDLG1DQUFtQztRQUNuQyxTQUFTLEdBQUcsWUFBWSxFQUFFLEVBQUUsS0FBSyxJQUFJLEtBQUssQ0FBQztJQUM5QyxDQUFDO0lBQUMsTUFBTSxDQUFDLENBQUEsQ0FBQztJQUVWLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBVSxTQUFTLEVBQUU7UUFDdkMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUztLQUN0RCxDQUFDLENBQUM7SUFDSCxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtRQUN6QyxLQUFLLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTO0tBQ3RELENBQUMsQ0FBQztJQUVILE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FHekIsR0FBRyxFQUFFO1FBQ0wsTUFBTSxJQUFJLEdBQUcsWUFBWSxFQUFFLENBQUM7UUFDNUIsTUFBTSxXQUFXLEdBQUcsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxZQUFZLG1CQUFtQixDQUFDLEVBQy9DLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUN6QixDQUFDO1FBQ0YsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0lBQ2xFLENBQUMsQ0FBQyxDQUFDO0lBRUgsa0JBQWtCLENBQ2YsV0FBVyxFQUNYLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDTixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQyxFQUNELE9BQU8sQ0FDVCxDQUFDO0lBRUYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUM7QUFDckQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbXB1dGVkLCBzaWduYWwsIFNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFByaXN0aW5lQ2hhbmdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBGb3JtU2lnbmFsT3B0aW9ucyB9IGZyb20gJy4uL3R5cGVzL2Zvcm0tc2lnbmFsLW9wdGlvbnMnO1xyXG5pbXBvcnQgeyBoYW5kbGVTdHJlYW1TaWduYWwgfSBmcm9tICcuL2hhbmRsZS1zdHJlYW0tc2lnbmFsJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBidWlsZEZvcm1EaXJ0eVNpZ25hbDxUIGV4dGVuZHMgQWJzdHJhY3RDb250cm9sPGFueT4+KFxyXG4gICBmb3JtQXNTaWduYWw6IFNpZ25hbDxUIHwgbnVsbD4sXHJcbiAgIG9wdGlvbnM6IEZvcm1TaWduYWxPcHRpb25zXHJcbikge1xyXG4gICBsZXQgaW5pdERpcnR5ID0gZmFsc2U7XHJcbiAgIHRyeSB7XHJcbiAgICAgIC8vIEF0dGVtcHQgcmVhZCBvZiBmb3JtQXNTaWduYWwgaW4gdHJ5IGNhdGNoXHJcbiAgICAgIC8vIHRvIHByZXZlbnQgaW5wdXQucmVxdWlyZWQgZXJyb3JzXHJcbiAgICAgIGluaXREaXJ0eSA9IGZvcm1Bc1NpZ25hbCgpPy5kaXJ0eSA/PyBmYWxzZTtcclxuICAgfSBjYXRjaCB7fVxyXG5cclxuICAgY29uc3QgZGlydHkkID0gc2lnbmFsPGJvb2xlYW4+KGluaXREaXJ0eSwge1xyXG4gICAgICBlcXVhbDogb3B0aW9ucy5lYWdlck5vdGlmeSA/ICgpID0+IGZhbHNlIDogdW5kZWZpbmVkLFxyXG4gICB9KTtcclxuICAgY29uc3QgcHJpc3RpbmUkID0gY29tcHV0ZWQoKCkgPT4gIWRpcnR5JCgpLCB7XHJcbiAgICAgIGVxdWFsOiBvcHRpb25zLmVhZ2VyTm90aWZ5ID8gKCkgPT4gZmFsc2UgOiB1bmRlZmluZWQsXHJcbiAgIH0pO1xyXG5cclxuICAgY29uc3QgZm9ybVN0cmVhbSQgPSBjb21wdXRlZDx7XHJcbiAgICAgIGZvcm06IFQgfCBudWxsO1xyXG4gICAgICBzdHJlYW06IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcbiAgIH0+KCgpID0+IHtcclxuICAgICAgY29uc3QgZm9ybSA9IGZvcm1Bc1NpZ25hbCgpO1xyXG4gICAgICBjb25zdCBkaXJ0eVN0cmVhbSA9IGZvcm0/LmV2ZW50cy5waXBlKFxyXG4gICAgICAgICBmaWx0ZXIoKGUpID0+IGUgaW5zdGFuY2VvZiBQcmlzdGluZUNoYW5nZUV2ZW50KSxcclxuICAgICAgICAgbWFwKCgpID0+ICEhZm9ybS5kaXJ0eSlcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIHsgZm9ybSwgc3RyZWFtOiBkaXJ0eVN0cmVhbSA/IGRpcnR5U3RyZWFtIDogb2YoZmFsc2UpIH07XHJcbiAgIH0pO1xyXG5cclxuICAgaGFuZGxlU3RyZWFtU2lnbmFsKFxyXG4gICAgICBmb3JtU3RyZWFtJCxcclxuICAgICAgKGZvcm0pID0+IHtcclxuICAgICAgICAgZGlydHkkLnNldCghIWZvcm0/LmRpcnR5KTtcclxuICAgICAgfSxcclxuICAgICAgb3B0aW9uc1xyXG4gICApO1xyXG5cclxuICAgcmV0dXJuIHsgZGlydHkkOiBkaXJ0eSQuYXNSZWFkb25seSgpLCBwcmlzdGluZSQgfTtcclxufVxyXG4iXX0=
@@ -1,10 +1,26 @@
1
- import { computed, isSignal, signal, } from '@angular/core';
2
- export function buildFormErrorSignal(form, valueSignal, statusSignal, options) {
3
- const formAsSignal = isSignal(form) ? form : signal(form);
4
- return computed(() => {
5
- const v = valueSignal();
6
- const s = statusSignal();
7
- return formAsSignal()?.errors ?? null;
8
- }, { equal: options.equalityFns?.errorsEquality });
1
+ import { computed, signal } from '@angular/core';
2
+ import { StatusChangeEvent, ValueChangeEvent } from '@angular/forms';
3
+ import { filter, map, of } from 'rxjs';
4
+ import { handleStreamSignal } from './handle-stream-signal';
5
+ export function buildFormErrorSignal(formAsSignal, options) {
6
+ let initErrors = null;
7
+ try {
8
+ // Attempt read of formAsSignal in try catch
9
+ // to prevent input.required errors
10
+ initErrors = formAsSignal()?.errors ?? null;
11
+ }
12
+ catch { }
13
+ const error$ = signal(initErrors, {
14
+ equal: options.eagerNotify ? () => false : undefined,
15
+ });
16
+ const formStream$ = computed(() => {
17
+ const form = formAsSignal();
18
+ const errorStream = form?.events.pipe(filter((e) => e instanceof StatusChangeEvent || e instanceof ValueChangeEvent), map(() => form.errors));
19
+ return { form, stream: errorStream ? errorStream : of(null) };
20
+ });
21
+ handleStreamSignal(formStream$, (form) => {
22
+ error$.set(form?.errors ?? null);
23
+ }, options);
24
+ return error$.asReadonly();
9
25
  }
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1lcnJvci1zaWduYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZm9ybS1zaWduYWwvc3JjL2xpYi9oZWxwZXJzL2Zvcm0tZXJyb3Itc2lnbmFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHSixRQUFRLEVBQ1IsUUFBUSxFQUNSLE1BQU0sR0FDUixNQUFNLGVBQWUsQ0FBQztBQUt2QixNQUFNLFVBQVUsb0JBQW9CLENBQ2pDLElBQStELEVBQy9ELFdBQTRELEVBQzVELFlBQXNELEVBQ3RELE9BQTZCO0lBRTdCLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFMUQsT0FBTyxRQUFRLENBQ1osR0FBRyxFQUFFO1FBQ0YsTUFBTSxDQUFDLEdBQUcsV0FBVyxFQUFFLENBQUM7UUFDeEIsTUFBTSxDQUFDLEdBQUcsWUFBWSxFQUFFLENBQUM7UUFDekIsT0FBTyxZQUFZLEVBQUUsRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDO0lBQ3pDLENBQUMsRUFDRCxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFLGNBQWMsRUFBRSxDQUNoRCxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgIFNpZ25hbCxcclxuICAgV3JpdGFibGVTaWduYWwsXHJcbiAgIGNvbXB1dGVkLFxyXG4gICBpc1NpZ25hbCxcclxuICAgc2lnbmFsLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbFN0YXR1cyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRm9ybVNpZ25hbE9wdGlvbnMgfSBmcm9tICcuLi90eXBlcy9mb3JtLXNpZ25hbC1vcHRpb25zJztcclxuaW1wb3J0IHsgRm9ybUZyb21UeXBlLCBPcHRpb25hbEZvcm1Gcm9tVHlwZSB9IGZyb20gJy4uL3R5cGVzL2Zvcm0tdHlwZSc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRGb3JtRXJyb3JTaWduYWw8VCA9IGFueT4oXHJcbiAgIGZvcm06IFNpZ25hbDxPcHRpb25hbEZvcm1Gcm9tVHlwZTxUPj4gfCBPcHRpb25hbEZvcm1Gcm9tVHlwZTxUPixcclxuICAgdmFsdWVTaWduYWw6IFdyaXRhYmxlU2lnbmFsPEZvcm1Gcm9tVHlwZTxUPlsndmFsdWUnXSB8IG51bGw+LFxyXG4gICBzdGF0dXNTaWduYWw6IFdyaXRhYmxlU2lnbmFsPEZvcm1Db250cm9sU3RhdHVzIHwgbnVsbD4sXHJcbiAgIG9wdGlvbnM6IEZvcm1TaWduYWxPcHRpb25zPFQ+XHJcbikge1xyXG4gICBjb25zdCBmb3JtQXNTaWduYWwgPSBpc1NpZ25hbChmb3JtKSA/IGZvcm0gOiBzaWduYWwoZm9ybSk7XHJcblxyXG4gICByZXR1cm4gY29tcHV0ZWQoXHJcbiAgICAgICgpID0+IHtcclxuICAgICAgICAgY29uc3QgdiA9IHZhbHVlU2lnbmFsKCk7XHJcbiAgICAgICAgIGNvbnN0IHMgPSBzdGF0dXNTaWduYWwoKTtcclxuICAgICAgICAgcmV0dXJuIGZvcm1Bc1NpZ25hbCgpPy5lcnJvcnMgPz8gbnVsbDtcclxuICAgICAgfSxcclxuICAgICAgeyBlcXVhbDogb3B0aW9ucy5lcXVhbGl0eUZucz8uZXJyb3JzRXF1YWxpdHkgfVxyXG4gICApO1xyXG59XHJcbiJdfQ==
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1lcnJvci1zaWduYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZm9ybS1zaWduYWwvc3JjL2xpYi9oZWxwZXJzL2Zvcm0tZXJyb3Itc2lnbmFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBbUIsaUJBQWlCLEVBQW9CLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEcsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTVELE1BQU0sVUFBVSxvQkFBb0IsQ0FDakMsWUFBOEIsRUFDOUIsT0FBMEI7SUFFMUIsSUFBSSxVQUFVLEdBQTRCLElBQUksQ0FBQztJQUMvQyxJQUFJLENBQUM7UUFDRiw0Q0FBNEM7UUFDNUMsbUNBQW1DO1FBQ25DLFVBQVUsR0FBRyxZQUFZLEVBQUUsRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDO0lBQy9DLENBQUM7SUFBQyxNQUFNLENBQUMsQ0FBQSxDQUFDO0lBRVYsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUEwQixVQUFVLEVBQUU7UUFDeEQsS0FBSyxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUztLQUN0RCxDQUFDLENBQUM7SUFFSCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBR3pCLEdBQUcsRUFBRTtRQUNMLE1BQU0sSUFBSSxHQUFHLFlBQVksRUFBRSxDQUFDO1FBQzVCLE1BQU0sV0FBVyxHQUFHLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsWUFBWSxpQkFBaUIsSUFBSSxDQUFDLFlBQVksZ0JBQWdCLENBQUMsRUFDOUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FDeEIsQ0FBQztRQUNGLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNqRSxDQUFDLENBQUMsQ0FBQztJQUVILGtCQUFrQixDQUNmLFdBQVcsRUFDWCxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ04sTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxJQUFJLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUMsRUFDRCxPQUFPLENBQ1QsQ0FBQztJQUVGLE9BQU8sTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQzlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wdXRlZCwgU2lnbmFsLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBTdGF0dXNDaGFuZ2VFdmVudCwgVmFsaWRhdGlvbkVycm9ycywgVmFsdWVDaGFuZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEZvcm1TaWduYWxPcHRpb25zIH0gZnJvbSAnLi4vdHlwZXMvZm9ybS1zaWduYWwtb3B0aW9ucyc7XHJcbmltcG9ydCB7IGhhbmRsZVN0cmVhbVNpZ25hbCB9IGZyb20gJy4vaGFuZGxlLXN0cmVhbS1zaWduYWwnO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkRm9ybUVycm9yU2lnbmFsPFQgZXh0ZW5kcyBBYnN0cmFjdENvbnRyb2w8YW55Pj4oXHJcbiAgIGZvcm1Bc1NpZ25hbDogU2lnbmFsPFQgfCBudWxsPixcclxuICAgb3B0aW9uczogRm9ybVNpZ25hbE9wdGlvbnNcclxuKSB7XHJcbiAgIGxldCBpbml0RXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9IG51bGw7XHJcbiAgIHRyeSB7XHJcbiAgICAgIC8vIEF0dGVtcHQgcmVhZCBvZiBmb3JtQXNTaWduYWwgaW4gdHJ5IGNhdGNoXHJcbiAgICAgIC8vIHRvIHByZXZlbnQgaW5wdXQucmVxdWlyZWQgZXJyb3JzXHJcbiAgICAgIGluaXRFcnJvcnMgPSBmb3JtQXNTaWduYWwoKT8uZXJyb3JzID8/IG51bGw7XHJcbiAgIH0gY2F0Y2gge31cclxuXHJcbiAgIGNvbnN0IGVycm9yJCA9IHNpZ25hbDxWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbD4oaW5pdEVycm9ycywge1xyXG4gICAgICBlcXVhbDogb3B0aW9ucy5lYWdlck5vdGlmeSA/ICgpID0+IGZhbHNlIDogdW5kZWZpbmVkLFxyXG4gICB9KTtcclxuXHJcbiAgIGNvbnN0IGZvcm1TdHJlYW0kID0gY29tcHV0ZWQ8e1xyXG4gICAgICBmb3JtOiBUIHwgbnVsbDtcclxuICAgICAgc3RyZWFtOiBPYnNlcnZhYmxlPGFueT47XHJcbiAgIH0+KCgpID0+IHtcclxuICAgICAgY29uc3QgZm9ybSA9IGZvcm1Bc1NpZ25hbCgpO1xyXG4gICAgICBjb25zdCBlcnJvclN0cmVhbSA9IGZvcm0/LmV2ZW50cy5waXBlKFxyXG4gICAgICAgICBmaWx0ZXIoKGUpID0+IGUgaW5zdGFuY2VvZiBTdGF0dXNDaGFuZ2VFdmVudCB8fCBlIGluc3RhbmNlb2YgVmFsdWVDaGFuZ2VFdmVudCksXHJcbiAgICAgICAgIG1hcCgoKSA9PiBmb3JtLmVycm9ycylcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIHsgZm9ybSwgc3RyZWFtOiBlcnJvclN0cmVhbSA/IGVycm9yU3RyZWFtIDogb2YobnVsbCkgfTtcclxuICAgfSk7XHJcblxyXG4gICBoYW5kbGVTdHJlYW1TaWduYWwoXHJcbiAgICAgIGZvcm1TdHJlYW0kLFxyXG4gICAgICAoZm9ybSkgPT4ge1xyXG4gICAgICAgICBlcnJvciQuc2V0KGZvcm0/LmVycm9ycyA/PyBudWxsKTtcclxuICAgICAgfSxcclxuICAgICAgb3B0aW9uc1xyXG4gICApO1xyXG5cclxuICAgcmV0dXJuIGVycm9yJC5hc1JlYWRvbmx5KCk7XHJcbn1cclxuIl19
@@ -15,13 +15,7 @@ export function buildFormSnapshotSignal(formSignalState) {
15
15
  disabled: formSignalState.disabled(),
16
16
  enabled: formSignalState.enabled(),
17
17
  errors: formSignalState.errors(),
18
- subscriptions: {
19
- valueChangeSubscription: formSignalState.subscriptions.valueChangeSubscription(),
20
- statusChangeSubscription: formSignalState.subscriptions.statusChangeSubscription(),
21
- touchedChangeSubscription: formSignalState.subscriptions.touchedChangeSubscription(),
22
- dirtyChangeSubscription: formSignalState.subscriptions.dirtyChangeSubscription(),
23
- },
24
18
  };
25
19
  });
26
20
  }
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1zbmFwc2hvdC1zaWduYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZm9ybS1zaWduYWwvc3JjL2xpYi9oZWxwZXJzL2Zvcm0tc25hcHNob3Qtc2lnbmFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFNekMsTUFBTSxVQUFVLHVCQUF1QixDQUNwQyxlQUFtQztJQUVuQyxPQUFPLFFBQVEsQ0FBNkIsR0FBRyxFQUFFO1FBQzlDLE9BQU87WUFDSixNQUFNLEVBQUUsZUFBZSxDQUFDLE1BQU0sRUFBRTtZQUNoQyxLQUFLLEVBQUUsZUFBZSxDQUFDLEtBQUssRUFBRTtZQUM5QixRQUFRLEVBQUUsZUFBZSxDQUFDLFFBQVEsRUFBRTtZQUNwQyxPQUFPLEVBQUUsZUFBZSxDQUFDLE9BQU8sRUFBRTtZQUNsQyxTQUFTLEVBQUUsZUFBZSxDQUFDLFNBQVMsRUFBRTtZQUN0QyxLQUFLLEVBQUUsZUFBZSxDQUFDLEtBQUssRUFBRTtZQUM5QixRQUFRLEVBQUUsZUFBZSxDQUFDLFFBQVEsRUFBRTtZQUNwQyxLQUFLLEVBQUUsZUFBZSxDQUFDLEtBQUssRUFBRTtZQUM5QixPQUFPLEVBQUUsZUFBZSxDQUFDLE9BQU8sRUFBRTtZQUNsQyxPQUFPLEVBQUUsZUFBZSxDQUFDLE9BQU8sRUFBRTtZQUNsQyxRQUFRLEVBQUUsZUFBZSxDQUFDLFFBQVEsRUFBRTtZQUNwQyxPQUFPLEVBQUUsZUFBZSxDQUFDLE9BQU8sRUFBRTtZQUNsQyxNQUFNLEVBQUUsZUFBZSxDQUFDLE1BQU0sRUFBRTtZQUNoQyxhQUFhLEVBQUU7Z0JBQ1osdUJBQXVCLEVBQ3BCLGVBQWUsQ0FBQyxhQUFhLENBQUMsdUJBQXVCLEVBQUU7Z0JBQzFELHdCQUF3QixFQUNyQixlQUFlLENBQUMsYUFBYSxDQUFDLHdCQUF3QixFQUFFO2dCQUMzRCx5QkFBeUIsRUFDdEIsZUFBZSxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsRUFBRTtnQkFDNUQsdUJBQXVCLEVBQ3BCLGVBQWUsQ0FBQyxhQUFhLENBQUMsdUJBQXVCLEVBQUU7YUFDNUQ7U0FDSCxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICAgRm9ybVNpZ25hbFN0YXRlLFxyXG4gICBGb3JtU25hcHNob3RTaWduYWxTdGF0ZSxcclxufSBmcm9tICcuLi90eXBlcy9mb3JtLXNpZ25hbC10eXBlJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBidWlsZEZvcm1TbmFwc2hvdFNpZ25hbDxUID0gYW55PihcclxuICAgZm9ybVNpZ25hbFN0YXRlOiBGb3JtU2lnbmFsU3RhdGU8VD5cclxuKSB7XHJcbiAgIHJldHVybiBjb21wdXRlZDxGb3JtU25hcHNob3RTaWduYWxTdGF0ZTxUPj4oKCkgPT4ge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgICBzdGF0dXM6IGZvcm1TaWduYWxTdGF0ZS5zdGF0dXMoKSxcclxuICAgICAgICAgdmFsdWU6IGZvcm1TaWduYWxTdGF0ZS52YWx1ZSgpLFxyXG4gICAgICAgICByYXdWYWx1ZTogZm9ybVNpZ25hbFN0YXRlLnJhd1ZhbHVlKCksXHJcbiAgICAgICAgIHRvdWNoZWQ6IGZvcm1TaWduYWxTdGF0ZS50b3VjaGVkKCksXHJcbiAgICAgICAgIHVudG91Y2hlZDogZm9ybVNpZ25hbFN0YXRlLnVudG91Y2hlZCgpLFxyXG4gICAgICAgICBkaXJ0eTogZm9ybVNpZ25hbFN0YXRlLmRpcnR5KCksXHJcbiAgICAgICAgIHByaXN0aW5lOiBmb3JtU2lnbmFsU3RhdGUucHJpc3RpbmUoKSxcclxuICAgICAgICAgdmFsaWQ6IGZvcm1TaWduYWxTdGF0ZS52YWxpZCgpLFxyXG4gICAgICAgICBpbnZhbGlkOiBmb3JtU2lnbmFsU3RhdGUuaW52YWxpZCgpLFxyXG4gICAgICAgICBwZW5kaW5nOiBmb3JtU2lnbmFsU3RhdGUucGVuZGluZygpLFxyXG4gICAgICAgICBkaXNhYmxlZDogZm9ybVNpZ25hbFN0YXRlLmRpc2FibGVkKCksXHJcbiAgICAgICAgIGVuYWJsZWQ6IGZvcm1TaWduYWxTdGF0ZS5lbmFibGVkKCksXHJcbiAgICAgICAgIGVycm9yczogZm9ybVNpZ25hbFN0YXRlLmVycm9ycygpLFxyXG4gICAgICAgICBzdWJzY3JpcHRpb25zOiB7XHJcbiAgICAgICAgICAgIHZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uOlxyXG4gICAgICAgICAgICAgICBmb3JtU2lnbmFsU3RhdGUuc3Vic2NyaXB0aW9ucy52YWx1ZUNoYW5nZVN1YnNjcmlwdGlvbigpLFxyXG4gICAgICAgICAgICBzdGF0dXNDaGFuZ2VTdWJzY3JpcHRpb246XHJcbiAgICAgICAgICAgICAgIGZvcm1TaWduYWxTdGF0ZS5zdWJzY3JpcHRpb25zLnN0YXR1c0NoYW5nZVN1YnNjcmlwdGlvbigpLFxyXG4gICAgICAgICAgICB0b3VjaGVkQ2hhbmdlU3Vic2NyaXB0aW9uOlxyXG4gICAgICAgICAgICAgICBmb3JtU2lnbmFsU3RhdGUuc3Vic2NyaXB0aW9ucy50b3VjaGVkQ2hhbmdlU3Vic2NyaXB0aW9uKCksXHJcbiAgICAgICAgICAgIGRpcnR5Q2hhbmdlU3Vic2NyaXB0aW9uOlxyXG4gICAgICAgICAgICAgICBmb3JtU2lnbmFsU3RhdGUuc3Vic2NyaXB0aW9ucy5kaXJ0eUNoYW5nZVN1YnNjcmlwdGlvbigpLFxyXG4gICAgICAgICB9LFxyXG4gICAgICB9O1xyXG4gICB9KTtcclxufVxyXG4iXX0=
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1zbmFwc2hvdC1zaWduYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZm9ybS1zaWduYWwvc3JjL2xpYi9oZWxwZXJzL2Zvcm0tc25hcHNob3Qtc2lnbmFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJekMsTUFBTSxVQUFVLHVCQUF1QixDQUFpQyxlQUFtQztJQUN4RyxPQUFPLFFBQVEsQ0FBNkIsR0FBRyxFQUFFO1FBQzlDLE9BQU87WUFDSixNQUFNLEVBQUUsZUFBZSxDQUFDLE1BQU0sRUFBRTtZQUNoQyxLQUFLLEVBQUUsZUFBZSxDQUFDLEtBQUssRUFBRTtZQUM5QixRQUFRLEVBQUUsZUFBZSxDQUFDLFFBQVEsRUFBRTtZQUNwQyxPQUFPLEVBQUUsZUFBZSxDQUFDLE9BQU8sRUFBRTtZQUNsQyxTQUFTLEVBQUUsZUFBZSxDQUFDLFNBQVMsRUFBRTtZQUN0QyxLQUFLLEVBQUUsZUFBZSxDQUFDLEtBQUssRUFBRTtZQUM5QixRQUFRLEVBQUUsZUFBZSxDQUFDLFFBQVEsRUFBRTtZQUNwQyxLQUFLLEVBQUUsZUFBZSxDQUFDLEtBQUssRUFBRTtZQUM5QixPQUFPLEVBQUUsZUFBZSxDQUFDLE9BQU8sRUFBRTtZQUNsQyxPQUFPLEVBQUUsZUFBZSxDQUFDLE9BQU8sRUFBRTtZQUNsQyxRQUFRLEVBQUUsZUFBZSxDQUFDLFFBQVEsRUFBRTtZQUNwQyxPQUFPLEVBQUUsZUFBZSxDQUFDLE9BQU8sRUFBRTtZQUNsQyxNQUFNLEVBQUUsZUFBZSxDQUFDLE1BQU0sRUFBRTtTQUNsQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBGb3JtU2lnbmFsU3RhdGUsIEZvcm1TbmFwc2hvdFNpZ25hbFN0YXRlIH0gZnJvbSAnLi4vdHlwZXMvZm9ybS1zaWduYWwtdHlwZSc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRGb3JtU25hcHNob3RTaWduYWw8VCBleHRlbmRzIEFic3RyYWN0Q29udHJvbDxhbnk+Pihmb3JtU2lnbmFsU3RhdGU6IEZvcm1TaWduYWxTdGF0ZTxUPikge1xyXG4gICByZXR1cm4gY29tcHV0ZWQ8Rm9ybVNuYXBzaG90U2lnbmFsU3RhdGU8VD4+KCgpID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgc3RhdHVzOiBmb3JtU2lnbmFsU3RhdGUuc3RhdHVzKCksXHJcbiAgICAgICAgIHZhbHVlOiBmb3JtU2lnbmFsU3RhdGUudmFsdWUoKSxcclxuICAgICAgICAgcmF3VmFsdWU6IGZvcm1TaWduYWxTdGF0ZS5yYXdWYWx1ZSgpLFxyXG4gICAgICAgICB0b3VjaGVkOiBmb3JtU2lnbmFsU3RhdGUudG91Y2hlZCgpLFxyXG4gICAgICAgICB1bnRvdWNoZWQ6IGZvcm1TaWduYWxTdGF0ZS51bnRvdWNoZWQoKSxcclxuICAgICAgICAgZGlydHk6IGZvcm1TaWduYWxTdGF0ZS5kaXJ0eSgpLFxyXG4gICAgICAgICBwcmlzdGluZTogZm9ybVNpZ25hbFN0YXRlLnByaXN0aW5lKCksXHJcbiAgICAgICAgIHZhbGlkOiBmb3JtU2lnbmFsU3RhdGUudmFsaWQoKSxcclxuICAgICAgICAgaW52YWxpZDogZm9ybVNpZ25hbFN0YXRlLmludmFsaWQoKSxcclxuICAgICAgICAgcGVuZGluZzogZm9ybVNpZ25hbFN0YXRlLnBlbmRpbmcoKSxcclxuICAgICAgICAgZGlzYWJsZWQ6IGZvcm1TaWduYWxTdGF0ZS5kaXNhYmxlZCgpLFxyXG4gICAgICAgICBlbmFibGVkOiBmb3JtU2lnbmFsU3RhdGUuZW5hYmxlZCgpLFxyXG4gICAgICAgICBlcnJvcnM6IGZvcm1TaWduYWxTdGF0ZS5lcnJvcnMoKSxcclxuICAgICAgfTtcclxuICAgfSk7XHJcbn1cclxuIl19
@@ -1,29 +1,41 @@
1
- import { computed, effect, signal, untracked } from '@angular/core';
1
+ import { computed, signal } from '@angular/core';
2
+ import { StatusChangeEvent } from '@angular/forms';
3
+ import { filter, map, of } from 'rxjs';
4
+ import { handleStreamSignal } from './handle-stream-signal';
2
5
  export function buildFormStatusSignal(formAsSignal, options) {
3
- const equal = options.equalityFns?.statusEquality ?? (() => false);
4
- const status$ = signal(formAsSignal()?.status ?? null, { equal });
5
- const statusChangeSubscription$ = signal(null);
6
- const formStatusChangeEffect = effect((onCleanup) => {
6
+ let initStatus = null;
7
+ try {
8
+ // Attempt read of formAsSignal in try catch
9
+ // to prevent input.required errors
10
+ initStatus = formAsSignal()?.status ?? null;
11
+ }
12
+ catch { }
13
+ const status$ = signal(initStatus, {
14
+ equal: options.eagerNotify ? () => false : undefined,
15
+ });
16
+ const valid$ = computed(() => status$() === 'VALID', {
17
+ equal: options.eagerNotify ? () => false : undefined,
18
+ });
19
+ const invalid$ = computed(() => status$() === 'INVALID', {
20
+ equal: options.eagerNotify ? () => false : undefined,
21
+ });
22
+ const pending$ = computed(() => status$() == 'PENDING', {
23
+ equal: options.eagerNotify ? () => false : undefined,
24
+ });
25
+ const disabled$ = computed(() => status$() === 'DISABLED', {
26
+ equal: options.eagerNotify ? () => false : undefined,
27
+ });
28
+ const enabled$ = computed(() => !disabled$(), {
29
+ equal: options.eagerNotify ? () => false : undefined,
30
+ });
31
+ const formStream$ = computed(() => {
7
32
  const form = formAsSignal();
8
- untracked(() => {
9
- const setStatus = () => {
10
- untracked(() => {
11
- status$.set(form?.status ?? null);
12
- });
13
- };
14
- statusChangeSubscription$()?.unsubscribe();
15
- statusChangeSubscription$.set(form?.statusChanges.subscribe(() => {
16
- setStatus();
17
- }) ?? null);
18
- setStatus();
19
- });
20
- onCleanup(() => untracked(() => statusChangeSubscription$())?.unsubscribe());
21
- }, { injector: options.injector });
22
- const valid$ = computed(() => status$() === 'VALID');
23
- const invalid$ = computed(() => status$() === 'INVALID');
24
- const pending$ = computed(() => status$() == 'PENDING');
25
- const disabled$ = computed(() => status$() === 'DISABLED');
26
- const enabled$ = computed(() => status$() !== 'DISABLED');
33
+ const statusStream = form?.events.pipe(filter((e) => e instanceof StatusChangeEvent), map(() => form.status));
34
+ return { form, stream: statusStream ? statusStream : of(null) };
35
+ });
36
+ handleStreamSignal(formStream$, (form) => {
37
+ status$.set(form?.status ?? null);
38
+ }, options);
27
39
  return {
28
40
  status$,
29
41
  valid$,
@@ -31,7 +43,6 @@ export function buildFormStatusSignal(formAsSignal, options) {
31
43
  pending$,
32
44
  disabled$,
33
45
  enabled$,
34
- statusChangeSubscription$,
35
46
  };
36
47
  }
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1zdGF0dXMtc2lnbmFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWZvcm0tc2lnbmFsL3NyYy9saWIvaGVscGVycy9mb3JtLXN0YXR1cy1zaWduYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU01RSxNQUFNLFVBQVUscUJBQXFCLENBQ2xDLFlBQTZDLEVBQzdDLE9BQTZCO0lBRTdCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsY0FBYyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkUsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUNuQixZQUFZLEVBQUUsRUFBRSxNQUFNLElBQUksSUFBSSxFQUM5QixFQUFFLEtBQUssRUFBRSxDQUNYLENBQUM7SUFDRixNQUFNLHlCQUF5QixHQUFHLE1BQU0sQ0FBc0IsSUFBSSxDQUFDLENBQUM7SUFDcEUsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLENBQ2xDLENBQUMsU0FBbUIsRUFBRSxFQUFFO1FBQ3JCLE1BQU0sSUFBSSxHQUFHLFlBQVksRUFBRSxDQUFDO1FBQzVCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDWixNQUFNLFNBQVMsR0FBRyxHQUFHLEVBQUU7Z0JBQ3BCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7b0JBQ1osT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxJQUFJLElBQUksQ0FBQyxDQUFDO2dCQUNyQyxDQUFDLENBQUMsQ0FBQztZQUNOLENBQUMsQ0FBQztZQUVGLHlCQUF5QixFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUM7WUFDM0MseUJBQXlCLENBQUMsR0FBRyxDQUMxQixJQUFJLEVBQUUsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2hDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUNaLENBQUM7WUFDRixTQUFTLEVBQUUsQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDO1FBQ0gsU0FBUyxDQUNOLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQ25FLENBQUM7SUFDTCxDQUFDLEVBQ0QsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUNoQyxDQUFDO0lBRUYsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDO0lBQ3JELE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxTQUFTLENBQUMsQ0FBQztJQUN6RCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksU0FBUyxDQUFDLENBQUM7SUFDeEQsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLFVBQVUsQ0FBQyxDQUFDO0lBQzNELE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxVQUFVLENBQUMsQ0FBQztJQUUxRCxPQUFPO1FBQ0osT0FBTztRQUNQLE1BQU07UUFDTixRQUFRO1FBQ1IsUUFBUTtRQUNSLFNBQVM7UUFDVCxRQUFRO1FBQ1IseUJBQXlCO0tBQzNCLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQsIGVmZmVjdCwgU2lnbmFsLCBzaWduYWwsIHVudHJhY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbFN0YXR1cyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEZvcm1TaWduYWxPcHRpb25zIH0gZnJvbSAnLi4vdHlwZXMvZm9ybS1zaWduYWwtb3B0aW9ucyc7XHJcbmltcG9ydCB7IE9wdGlvbmFsRm9ybUZyb21UeXBlIH0gZnJvbSAnLi4vdHlwZXMvZm9ybS10eXBlJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBidWlsZEZvcm1TdGF0dXNTaWduYWw8VCA9IGFueT4oXHJcbiAgIGZvcm1Bc1NpZ25hbDogU2lnbmFsPE9wdGlvbmFsRm9ybUZyb21UeXBlPFQ+PixcclxuICAgb3B0aW9uczogRm9ybVNpZ25hbE9wdGlvbnM8VD5cclxuKSB7XHJcbiAgIGNvbnN0IGVxdWFsID0gb3B0aW9ucy5lcXVhbGl0eUZucz8uc3RhdHVzRXF1YWxpdHkgPz8gKCgpID0+IGZhbHNlKTtcclxuICAgY29uc3Qgc3RhdHVzJCA9IHNpZ25hbDxGb3JtQ29udHJvbFN0YXR1cyB8IG51bGw+KFxyXG4gICAgICBmb3JtQXNTaWduYWwoKT8uc3RhdHVzID8/IG51bGwsXHJcbiAgICAgIHsgZXF1YWwgfVxyXG4gICApO1xyXG4gICBjb25zdCBzdGF0dXNDaGFuZ2VTdWJzY3JpcHRpb24kID0gc2lnbmFsPFN1YnNjcmlwdGlvbiB8IG51bGw+KG51bGwpO1xyXG4gICBjb25zdCBmb3JtU3RhdHVzQ2hhbmdlRWZmZWN0ID0gZWZmZWN0KFxyXG4gICAgICAob25DbGVhbnVwOiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICAgICBjb25zdCBmb3JtID0gZm9ybUFzU2lnbmFsKCk7XHJcbiAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNldFN0YXR1cyA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgc3RhdHVzJC5zZXQoZm9ybT8uc3RhdHVzID8/IG51bGwpO1xyXG4gICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHN0YXR1c0NoYW5nZVN1YnNjcmlwdGlvbiQoKT8udW5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgc3RhdHVzQ2hhbmdlU3Vic2NyaXB0aW9uJC5zZXQoXHJcbiAgICAgICAgICAgICAgIGZvcm0/LnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgc2V0U3RhdHVzKCk7XHJcbiAgICAgICAgICAgICAgIH0pID8/IG51bGxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgc2V0U3RhdHVzKCk7XHJcbiAgICAgICAgIH0pO1xyXG4gICAgICAgICBvbkNsZWFudXAoXHJcbiAgICAgICAgICAgICgpID0+IHVudHJhY2tlZCgoKSA9PiBzdGF0dXNDaGFuZ2VTdWJzY3JpcHRpb24kKCkpPy51bnN1YnNjcmliZSgpXHJcbiAgICAgICAgICk7XHJcbiAgICAgIH0sXHJcbiAgICAgIHsgaW5qZWN0b3I6IG9wdGlvbnMuaW5qZWN0b3IgfVxyXG4gICApO1xyXG5cclxuICAgY29uc3QgdmFsaWQkID0gY29tcHV0ZWQoKCkgPT4gc3RhdHVzJCgpID09PSAnVkFMSUQnKTtcclxuICAgY29uc3QgaW52YWxpZCQgPSBjb21wdXRlZCgoKSA9PiBzdGF0dXMkKCkgPT09ICdJTlZBTElEJyk7XHJcbiAgIGNvbnN0IHBlbmRpbmckID0gY29tcHV0ZWQoKCkgPT4gc3RhdHVzJCgpID09ICdQRU5ESU5HJyk7XHJcbiAgIGNvbnN0IGRpc2FibGVkJCA9IGNvbXB1dGVkKCgpID0+IHN0YXR1cyQoKSA9PT0gJ0RJU0FCTEVEJyk7XHJcbiAgIGNvbnN0IGVuYWJsZWQkID0gY29tcHV0ZWQoKCkgPT4gc3RhdHVzJCgpICE9PSAnRElTQUJMRUQnKTtcclxuXHJcbiAgIHJldHVybiB7XHJcbiAgICAgIHN0YXR1cyQsXHJcbiAgICAgIHZhbGlkJCxcclxuICAgICAgaW52YWxpZCQsXHJcbiAgICAgIHBlbmRpbmckLFxyXG4gICAgICBkaXNhYmxlZCQsXHJcbiAgICAgIGVuYWJsZWQkLFxyXG4gICAgICBzdGF0dXNDaGFuZ2VTdWJzY3JpcHRpb24kLFxyXG4gICB9O1xyXG59XHJcbiJdfQ==
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1zdGF0dXMtc2lnbmFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWZvcm0tc2lnbmFsL3NyYy9saWIvaGVscGVycy9mb3JtLXN0YXR1cy1zaWduYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFzQyxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1RCxNQUFNLFVBQVUscUJBQXFCLENBQ2xDLFlBQThCLEVBQzlCLE9BQTBCO0lBRTFCLElBQUksVUFBVSxHQUE2QixJQUFJLENBQUM7SUFDaEQsSUFBSSxDQUFDO1FBQ0YsNENBQTRDO1FBQzVDLG1DQUFtQztRQUNuQyxVQUFVLEdBQUcsWUFBWSxFQUFFLEVBQUUsTUFBTSxJQUFJLElBQUksQ0FBQztJQUMvQyxDQUFDO0lBQUMsTUFBTSxDQUFDLENBQUEsQ0FBQztJQUVWLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBMkIsVUFBVSxFQUFFO1FBQzFELEtBQUssRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVM7S0FDdEQsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLE9BQU8sRUFBRTtRQUNsRCxLQUFLLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTO0tBQ3RELENBQUMsQ0FBQztJQUNILE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxTQUFTLEVBQUU7UUFDdEQsS0FBSyxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUztLQUN0RCxDQUFDLENBQUM7SUFDSCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksU0FBUyxFQUFFO1FBQ3JELEtBQUssRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVM7S0FDdEQsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBRTtRQUN4RCxLQUFLLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTO0tBQ3RELENBQUMsQ0FBQztJQUNILE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1FBQzNDLEtBQUssRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVM7S0FDdEQsQ0FBQyxDQUFDO0lBRUgsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUd6QixHQUFHLEVBQUU7UUFDTCxNQUFNLElBQUksR0FBRyxZQUFZLEVBQUUsQ0FBQztRQUM1QixNQUFNLFlBQVksR0FBRyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FDbkMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFlBQVksaUJBQWlCLENBQUMsRUFDN0MsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FDeEIsQ0FBQztRQUNGLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNuRSxDQUFDLENBQUMsQ0FBQztJQUVILGtCQUFrQixDQUNmLFdBQVcsRUFDWCxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxJQUFJLElBQUksQ0FBQyxDQUFDO0lBQ3JDLENBQUMsRUFDRCxPQUFPLENBQ1QsQ0FBQztJQUVGLE9BQU87UUFDSixPQUFPO1FBQ1AsTUFBTTtRQUNOLFFBQVE7UUFDUixRQUFRO1FBQ1IsU0FBUztRQUNULFFBQVE7S0FDVixDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbXB1dGVkLCBzaWduYWwsIFNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Db250cm9sU3RhdHVzLCBTdGF0dXNDaGFuZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEZvcm1TaWduYWxPcHRpb25zIH0gZnJvbSAnLi4vdHlwZXMvZm9ybS1zaWduYWwtb3B0aW9ucyc7XHJcbmltcG9ydCB7IGhhbmRsZVN0cmVhbVNpZ25hbCB9IGZyb20gJy4vaGFuZGxlLXN0cmVhbS1zaWduYWwnO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkRm9ybVN0YXR1c1NpZ25hbDxUIGV4dGVuZHMgQWJzdHJhY3RDb250cm9sPGFueT4+KFxyXG4gICBmb3JtQXNTaWduYWw6IFNpZ25hbDxUIHwgbnVsbD4sXHJcbiAgIG9wdGlvbnM6IEZvcm1TaWduYWxPcHRpb25zXHJcbikge1xyXG4gICBsZXQgaW5pdFN0YXR1czogRm9ybUNvbnRyb2xTdGF0dXMgfCBudWxsID0gbnVsbDtcclxuICAgdHJ5IHtcclxuICAgICAgLy8gQXR0ZW1wdCByZWFkIG9mIGZvcm1Bc1NpZ25hbCBpbiB0cnkgY2F0Y2hcclxuICAgICAgLy8gdG8gcHJldmVudCBpbnB1dC5yZXF1aXJlZCBlcnJvcnNcclxuICAgICAgaW5pdFN0YXR1cyA9IGZvcm1Bc1NpZ25hbCgpPy5zdGF0dXMgPz8gbnVsbDtcclxuICAgfSBjYXRjaCB7fVxyXG5cclxuICAgY29uc3Qgc3RhdHVzJCA9IHNpZ25hbDxGb3JtQ29udHJvbFN0YXR1cyB8IG51bGw+KGluaXRTdGF0dXMsIHtcclxuICAgICAgZXF1YWw6IG9wdGlvbnMuZWFnZXJOb3RpZnkgPyAoKSA9PiBmYWxzZSA6IHVuZGVmaW5lZCxcclxuICAgfSk7XHJcbiAgIGNvbnN0IHZhbGlkJCA9IGNvbXB1dGVkKCgpID0+IHN0YXR1cyQoKSA9PT0gJ1ZBTElEJywge1xyXG4gICAgICBlcXVhbDogb3B0aW9ucy5lYWdlck5vdGlmeSA/ICgpID0+IGZhbHNlIDogdW5kZWZpbmVkLFxyXG4gICB9KTtcclxuICAgY29uc3QgaW52YWxpZCQgPSBjb21wdXRlZCgoKSA9PiBzdGF0dXMkKCkgPT09ICdJTlZBTElEJywge1xyXG4gICAgICBlcXVhbDogb3B0aW9ucy5lYWdlck5vdGlmeSA/ICgpID0+IGZhbHNlIDogdW5kZWZpbmVkLFxyXG4gICB9KTtcclxuICAgY29uc3QgcGVuZGluZyQgPSBjb21wdXRlZCgoKSA9PiBzdGF0dXMkKCkgPT0gJ1BFTkRJTkcnLCB7XHJcbiAgICAgIGVxdWFsOiBvcHRpb25zLmVhZ2VyTm90aWZ5ID8gKCkgPT4gZmFsc2UgOiB1bmRlZmluZWQsXHJcbiAgIH0pO1xyXG4gICBjb25zdCBkaXNhYmxlZCQgPSBjb21wdXRlZCgoKSA9PiBzdGF0dXMkKCkgPT09ICdESVNBQkxFRCcsIHtcclxuICAgICAgZXF1YWw6IG9wdGlvbnMuZWFnZXJOb3RpZnkgPyAoKSA9PiBmYWxzZSA6IHVuZGVmaW5lZCxcclxuICAgfSk7XHJcbiAgIGNvbnN0IGVuYWJsZWQkID0gY29tcHV0ZWQoKCkgPT4gIWRpc2FibGVkJCgpLCB7XHJcbiAgICAgIGVxdWFsOiBvcHRpb25zLmVhZ2VyTm90aWZ5ID8gKCkgPT4gZmFsc2UgOiB1bmRlZmluZWQsXHJcbiAgIH0pO1xyXG5cclxuICAgY29uc3QgZm9ybVN0cmVhbSQgPSBjb21wdXRlZDx7XHJcbiAgICAgIGZvcm06IFQgfCBudWxsO1xyXG4gICAgICBzdHJlYW06IE9ic2VydmFibGU8Rm9ybUNvbnRyb2xTdGF0dXMgfCBudWxsPjtcclxuICAgfT4oKCkgPT4ge1xyXG4gICAgICBjb25zdCBmb3JtID0gZm9ybUFzU2lnbmFsKCk7XHJcbiAgICAgIGNvbnN0IHN0YXR1c1N0cmVhbSA9IGZvcm0/LmV2ZW50cy5waXBlKFxyXG4gICAgICAgICBmaWx0ZXIoKGUpID0+IGUgaW5zdGFuY2VvZiBTdGF0dXNDaGFuZ2VFdmVudCksXHJcbiAgICAgICAgIG1hcCgoKSA9PiBmb3JtLnN0YXR1cylcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIHsgZm9ybSwgc3RyZWFtOiBzdGF0dXNTdHJlYW0gPyBzdGF0dXNTdHJlYW0gOiBvZihudWxsKSB9O1xyXG4gICB9KTtcclxuXHJcbiAgIGhhbmRsZVN0cmVhbVNpZ25hbChcclxuICAgICAgZm9ybVN0cmVhbSQsXHJcbiAgICAgIChmb3JtKSA9PiB7XHJcbiAgICAgICAgIHN0YXR1cyQuc2V0KGZvcm0/LnN0YXR1cyA/PyBudWxsKTtcclxuICAgICAgfSxcclxuICAgICAgb3B0aW9uc1xyXG4gICApO1xyXG5cclxuICAgcmV0dXJuIHtcclxuICAgICAgc3RhdHVzJCxcclxuICAgICAgdmFsaWQkLFxyXG4gICAgICBpbnZhbGlkJCxcclxuICAgICAgcGVuZGluZyQsXHJcbiAgICAgIGRpc2FibGVkJCxcclxuICAgICAgZW5hYmxlZCQsXHJcbiAgIH07XHJcbn1cclxuIl19
@@ -1,32 +1,29 @@
1
- import { computed, effect, signal, untracked } from '@angular/core';
1
+ import { computed, signal } from '@angular/core';
2
2
  import { TouchedChangeEvent } from '@angular/forms';
3
- import { filter } from 'rxjs';
3
+ import { filter, map, of } from 'rxjs';
4
+ import { handleStreamSignal } from './handle-stream-signal';
4
5
  export function buildFormTouchedSignal(formAsSignal, options) {
5
- const touched$ = signal(!!formAsSignal()?.touched, {
6
- equal: options.equalityFns?.touchedEquality,
6
+ let initTouched = false;
7
+ try {
8
+ // Attempt read of formAsSignal in try catch
9
+ // to prevent input.required errors
10
+ initTouched = formAsSignal()?.touched ?? false;
11
+ }
12
+ catch { }
13
+ const touched$ = signal(initTouched, {
14
+ equal: options.eagerNotify ? () => false : undefined,
7
15
  });
8
- const touchedChangeSubscription$ = signal(null);
9
- const formTouchedChangeEffect = effect((onCleanup) => {
10
- const form = formAsSignal();
11
- untracked(() => {
12
- const setTouched = () => {
13
- untracked(() => {
14
- touched$.set(!!form?.touched);
15
- });
16
- };
17
- touchedChangeSubscription$()?.unsubscribe();
18
- touchedChangeSubscription$.set(form?.events
19
- .pipe(filter((e) => e instanceof TouchedChangeEvent))
20
- .subscribe((e) => {
21
- setTouched();
22
- }) ?? null);
23
- setTouched();
24
- });
25
- onCleanup(() => untracked(() => touchedChangeSubscription$())?.unsubscribe());
26
- }, { injector: options.injector });
27
16
  const untouched$ = computed(() => !touched$(), {
28
- equal: options.equalityFns?.touchedEquality,
17
+ equal: options.eagerNotify ? () => false : undefined,
18
+ });
19
+ const formStream$ = computed(() => {
20
+ const form = formAsSignal();
21
+ const touchedStream = form?.events.pipe(filter((e) => e instanceof TouchedChangeEvent), map(() => !!form.touched));
22
+ return { form, stream: touchedStream ? touchedStream : of(false) };
29
23
  });
30
- return { touched$, untouched$, touchedChangeSubscription$ };
24
+ handleStreamSignal(formStream$, (form) => {
25
+ touched$.set(!!form?.touched);
26
+ }, options);
27
+ return { touched$: touched$.asReadonly(), untouched$ };
31
28
  }
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS10b3VjaGVkLXNpZ25hbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1mb3JtLXNpZ25hbC9zcmMvbGliL2hlbHBlcnMvZm9ybS10b3VjaGVkLXNpZ25hbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxNQUFNLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBSTVDLE1BQU0sVUFBVSxzQkFBc0IsQ0FDbkMsWUFBK0MsRUFDL0MsT0FBMEI7SUFFMUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFVLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxPQUFPLEVBQUU7UUFDekQsS0FBSyxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUUsZUFBZTtLQUM3QyxDQUFDLENBQUM7SUFDSCxNQUFNLDBCQUEwQixHQUFHLE1BQU0sQ0FBc0IsSUFBSSxDQUFDLENBQUM7SUFFckUsTUFBTSx1QkFBdUIsR0FBRyxNQUFNLENBQ25DLENBQUMsU0FBbUIsRUFBRSxFQUFFO1FBQ3JCLE1BQU0sSUFBSSxHQUFHLFlBQVksRUFBRSxDQUFDO1FBQzVCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDWixNQUFNLFVBQVUsR0FBRyxHQUFHLEVBQUU7Z0JBQ3JCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7b0JBQ1osUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUNqQyxDQUFDLENBQUMsQ0FBQztZQUNOLENBQUMsQ0FBQztZQUVGLDBCQUEwQixFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUM7WUFDNUMsMEJBQTBCLENBQUMsR0FBRyxDQUMzQixJQUFJLEVBQUUsTUFBTTtpQkFDUixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFlBQVksa0JBQWtCLENBQUMsQ0FBQztpQkFDcEQsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2QsVUFBVSxFQUFFLENBQUM7WUFDaEIsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUNmLENBQUM7WUFDRixVQUFVLEVBQUUsQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztRQUNILFNBQVMsQ0FDTixHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUNwRSxDQUFDO0lBQ0wsQ0FBQyxFQUNELEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FDaEMsQ0FBQztJQUVGLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1FBQzVDLEtBQUssRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFLGVBQWU7S0FDN0MsQ0FBQyxDQUFDO0lBRUgsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsMEJBQTBCLEVBQUUsQ0FBQztBQUMvRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQsIGVmZmVjdCwgU2lnbmFsLCBzaWduYWwsIHVudHJhY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUb3VjaGVkQ2hhbmdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IGZpbHRlciwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEZvcm1TaWduYWxPcHRpb25zIH0gZnJvbSAnLi4vdHlwZXMvZm9ybS1zaWduYWwtb3B0aW9ucyc7XHJcbmltcG9ydCB7IE9wdGlvbmFsRm9ybUZyb21UeXBlIH0gZnJvbSAnLi4vdHlwZXMvZm9ybS10eXBlJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBidWlsZEZvcm1Ub3VjaGVkU2lnbmFsKFxyXG4gICBmb3JtQXNTaWduYWw6IFNpZ25hbDxPcHRpb25hbEZvcm1Gcm9tVHlwZTxhbnk+PixcclxuICAgb3B0aW9uczogRm9ybVNpZ25hbE9wdGlvbnNcclxuKSB7XHJcbiAgIGNvbnN0IHRvdWNoZWQkID0gc2lnbmFsPGJvb2xlYW4+KCEhZm9ybUFzU2lnbmFsKCk/LnRvdWNoZWQsIHtcclxuICAgICAgZXF1YWw6IG9wdGlvbnMuZXF1YWxpdHlGbnM/LnRvdWNoZWRFcXVhbGl0eSxcclxuICAgfSk7XHJcbiAgIGNvbnN0IHRvdWNoZWRDaGFuZ2VTdWJzY3JpcHRpb24kID0gc2lnbmFsPFN1YnNjcmlwdGlvbiB8IG51bGw+KG51bGwpO1xyXG5cclxuICAgY29uc3QgZm9ybVRvdWNoZWRDaGFuZ2VFZmZlY3QgPSBlZmZlY3QoXHJcbiAgICAgIChvbkNsZWFudXA6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgICAgIGNvbnN0IGZvcm0gPSBmb3JtQXNTaWduYWwoKTtcclxuICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc2V0VG91Y2hlZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgdG91Y2hlZCQuc2V0KCEhZm9ybT8udG91Y2hlZCk7XHJcbiAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdG91Y2hlZENoYW5nZVN1YnNjcmlwdGlvbiQoKT8udW5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgdG91Y2hlZENoYW5nZVN1YnNjcmlwdGlvbiQuc2V0KFxyXG4gICAgICAgICAgICAgICBmb3JtPy5ldmVudHNcclxuICAgICAgICAgICAgICAgICAgLnBpcGUoZmlsdGVyKChlKSA9PiBlIGluc3RhbmNlb2YgVG91Y2hlZENoYW5nZUV2ZW50KSlcclxuICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICBzZXRUb3VjaGVkKCk7XHJcbiAgICAgICAgICAgICAgICAgIH0pID8/IG51bGxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgc2V0VG91Y2hlZCgpO1xyXG4gICAgICAgICB9KTtcclxuICAgICAgICAgb25DbGVhbnVwKFxyXG4gICAgICAgICAgICAoKSA9PiB1bnRyYWNrZWQoKCkgPT4gdG91Y2hlZENoYW5nZVN1YnNjcmlwdGlvbiQoKSk/LnVuc3Vic2NyaWJlKClcclxuICAgICAgICAgKTtcclxuICAgICAgfSxcclxuICAgICAgeyBpbmplY3Rvcjogb3B0aW9ucy5pbmplY3RvciB9XHJcbiAgICk7XHJcblxyXG4gICBjb25zdCB1bnRvdWNoZWQkID0gY29tcHV0ZWQoKCkgPT4gIXRvdWNoZWQkKCksIHtcclxuICAgICAgZXF1YWw6IG9wdGlvbnMuZXF1YWxpdHlGbnM/LnRvdWNoZWRFcXVhbGl0eSxcclxuICAgfSk7XHJcblxyXG4gICByZXR1cm4geyB0b3VjaGVkJCwgdW50b3VjaGVkJCwgdG91Y2hlZENoYW5nZVN1YnNjcmlwdGlvbiQgfTtcclxufVxyXG4iXX0=
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS10b3VjaGVkLXNpZ25hbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1mb3JtLXNpZ25hbC9zcmMvbGliL2hlbHBlcnMvZm9ybS10b3VjaGVkLXNpZ25hbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQW1CLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckUsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTVELE1BQU0sVUFBVSxzQkFBc0IsQ0FDbkMsWUFBOEIsRUFDOUIsT0FBMEI7SUFFMUIsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLElBQUksQ0FBQztRQUNGLDRDQUE0QztRQUM1QyxtQ0FBbUM7UUFDbkMsV0FBVyxHQUFHLFlBQVksRUFBRSxFQUFFLE9BQU8sSUFBSSxLQUFLLENBQUM7SUFDbEQsQ0FBQztJQUFDLE1BQU0sQ0FBQyxDQUFBLENBQUM7SUFFVixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQVUsV0FBVyxFQUFFO1FBQzNDLEtBQUssRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVM7S0FDdEQsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7UUFDNUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUztLQUN0RCxDQUFDLENBQUM7SUFFSCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBR3pCLEdBQUcsRUFBRTtRQUNMLE1BQU0sSUFBSSxHQUFHLFlBQVksRUFBRSxDQUFDO1FBQzVCLE1BQU0sYUFBYSxHQUFHLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUNwQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsWUFBWSxrQkFBa0IsQ0FBQyxFQUM5QyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FDM0IsQ0FBQztRQUNGLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztJQUN0RSxDQUFDLENBQUMsQ0FBQztJQUVILGtCQUFrQixDQUNmLFdBQVcsRUFDWCxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ04sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2pDLENBQUMsRUFDRCxPQUFPLENBQ1QsQ0FBQztJQUVGLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLFVBQVUsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQzFELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wdXRlZCwgc2lnbmFsLCBTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBUb3VjaGVkQ2hhbmdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBGb3JtU2lnbmFsT3B0aW9ucyB9IGZyb20gJy4uL3R5cGVzL2Zvcm0tc2lnbmFsLW9wdGlvbnMnO1xyXG5pbXBvcnQgeyBoYW5kbGVTdHJlYW1TaWduYWwgfSBmcm9tICcuL2hhbmRsZS1zdHJlYW0tc2lnbmFsJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBidWlsZEZvcm1Ub3VjaGVkU2lnbmFsPFQgZXh0ZW5kcyBBYnN0cmFjdENvbnRyb2w8YW55Pj4oXHJcbiAgIGZvcm1Bc1NpZ25hbDogU2lnbmFsPFQgfCBudWxsPixcclxuICAgb3B0aW9uczogRm9ybVNpZ25hbE9wdGlvbnNcclxuKSB7XHJcbiAgIGxldCBpbml0VG91Y2hlZCA9IGZhbHNlO1xyXG4gICB0cnkge1xyXG4gICAgICAvLyBBdHRlbXB0IHJlYWQgb2YgZm9ybUFzU2lnbmFsIGluIHRyeSBjYXRjaFxyXG4gICAgICAvLyB0byBwcmV2ZW50IGlucHV0LnJlcXVpcmVkIGVycm9yc1xyXG4gICAgICBpbml0VG91Y2hlZCA9IGZvcm1Bc1NpZ25hbCgpPy50b3VjaGVkID8/IGZhbHNlO1xyXG4gICB9IGNhdGNoIHt9XHJcblxyXG4gICBjb25zdCB0b3VjaGVkJCA9IHNpZ25hbDxib29sZWFuPihpbml0VG91Y2hlZCwge1xyXG4gICAgICBlcXVhbDogb3B0aW9ucy5lYWdlck5vdGlmeSA/ICgpID0+IGZhbHNlIDogdW5kZWZpbmVkLFxyXG4gICB9KTtcclxuICAgY29uc3QgdW50b3VjaGVkJCA9IGNvbXB1dGVkKCgpID0+ICF0b3VjaGVkJCgpLCB7XHJcbiAgICAgIGVxdWFsOiBvcHRpb25zLmVhZ2VyTm90aWZ5ID8gKCkgPT4gZmFsc2UgOiB1bmRlZmluZWQsXHJcbiAgIH0pO1xyXG5cclxuICAgY29uc3QgZm9ybVN0cmVhbSQgPSBjb21wdXRlZDx7XHJcbiAgICAgIGZvcm06IFQgfCBudWxsO1xyXG4gICAgICBzdHJlYW06IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcbiAgIH0+KCgpID0+IHtcclxuICAgICAgY29uc3QgZm9ybSA9IGZvcm1Bc1NpZ25hbCgpO1xyXG4gICAgICBjb25zdCB0b3VjaGVkU3RyZWFtID0gZm9ybT8uZXZlbnRzLnBpcGUoXHJcbiAgICAgICAgIGZpbHRlcigoZSkgPT4gZSBpbnN0YW5jZW9mIFRvdWNoZWRDaGFuZ2VFdmVudCksXHJcbiAgICAgICAgIG1hcCgoKSA9PiAhIWZvcm0udG91Y2hlZClcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIHsgZm9ybSwgc3RyZWFtOiB0b3VjaGVkU3RyZWFtID8gdG91Y2hlZFN0cmVhbSA6IG9mKGZhbHNlKSB9O1xyXG4gICB9KTtcclxuXHJcbiAgIGhhbmRsZVN0cmVhbVNpZ25hbChcclxuICAgICAgZm9ybVN0cmVhbSQsXHJcbiAgICAgIChmb3JtKSA9PiB7XHJcbiAgICAgICAgIHRvdWNoZWQkLnNldCghIWZvcm0/LnRvdWNoZWQpO1xyXG4gICAgICB9LFxyXG4gICAgICBvcHRpb25zXHJcbiAgICk7XHJcblxyXG4gICByZXR1cm4geyB0b3VjaGVkJDogdG91Y2hlZCQuYXNSZWFkb25seSgpLCB1bnRvdWNoZWQkIH07XHJcbn1cclxuIl19