ngx-extra 20.1.4 → 20.1.6

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.
@@ -1,10 +1,11 @@
1
1
  import * as i0 from '@angular/core';
2
- import { signal, inject, effect, untracked, Injectable, isDevMode, assertInInjectionContext, Injector, runInInjectionContext, DestroyRef, isSignal, computed } from '@angular/core';
2
+ import { signal, inject, effect, untracked, Injectable, isDevMode, assertInInjectionContext, Injector, runInInjectionContext, DestroyRef, isSignal, computed, linkedSignal, input, ChangeDetectionStrategy, Component } from '@angular/core';
3
3
  import { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';
4
4
  import { Router, ActivatedRoute } from '@angular/router';
5
5
  import LzString from 'lz-string';
6
6
  import { map, filter, Observable, debounceTime } from 'rxjs';
7
7
  import { ValueChangeEvent, PristineChangeEvent, TouchedChangeEvent, StatusChangeEvent } from '@angular/forms';
8
+ import { KeyValuePipe } from '@angular/common';
8
9
 
9
10
  function createSignalChangeNotifier() {
10
11
  const sourceSignal = signal(null, ...(ngDevMode ? [{ debugName: "sourceSignal" }] : []));
@@ -72,10 +73,10 @@ class ReactiveQueryParamGlobalHandler {
72
73
  this.navigationExtras.preserveFragment = preserveFragment;
73
74
  }
74
75
  }
75
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.13", ngImport: i0, type: ReactiveQueryParamGlobalHandler, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
76
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.13", ngImport: i0, type: ReactiveQueryParamGlobalHandler, providedIn: "root" });
76
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ReactiveQueryParamGlobalHandler, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
77
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ReactiveQueryParamGlobalHandler, providedIn: "root" });
77
78
  }
78
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.13", ngImport: i0, type: ReactiveQueryParamGlobalHandler, decorators: [{
79
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ReactiveQueryParamGlobalHandler, decorators: [{
79
80
  type: Injectable,
80
81
  args: [{ providedIn: "root" }]
81
82
  }], ctorParameters: () => [] });
@@ -381,9 +382,96 @@ function slimComponentState() {
381
382
  });
382
383
  }
383
384
 
385
+ function slimLazyEffect(dependency, fn, options) {
386
+ let warm = false;
387
+ return effect((onCleanup) => {
388
+ const dep = dependency();
389
+ untracked(() => {
390
+ if (warm) {
391
+ fn(dep, onCleanup);
392
+ }
393
+ warm = true;
394
+ });
395
+ }, options);
396
+ }
397
+
398
+ function pairwiseSignal(source, options) {
399
+ if (isDevMode() && !options?.injector) {
400
+ assertInInjectionContext(pairwiseSignal);
401
+ }
402
+ const assertedInjector = options?.injector ?? inject(Injector);
403
+ const defaultEqualityFn = (a, b) => JSON.stringify(a.previous) === JSON.stringify(b.current);
404
+ return runInInjectionContext(assertedInjector, () => {
405
+ const pair = linkedSignal(...(ngDevMode ? [{ debugName: "pair", source: source,
406
+ equal: options?.equalityFn ?? defaultEqualityFn,
407
+ computation: (current, previous) => {
408
+ console.log(JSON.stringify(previous) === JSON.stringify(current));
409
+ return {
410
+ current,
411
+ previous: previous?.value.current ?? null
412
+ };
413
+ } }] : [{
414
+ source: source,
415
+ equal: options?.equalityFn ?? defaultEqualityFn,
416
+ computation: (current, previous) => {
417
+ console.log(JSON.stringify(previous) === JSON.stringify(current));
418
+ return {
419
+ current,
420
+ previous: previous?.value.current ?? null
421
+ };
422
+ }
423
+ }]));
424
+ return pair.asReadonly();
425
+ });
426
+ }
427
+
428
+ class ReactiveFormErrorMessageComponent {
429
+ formControlToBind = input.required(...(ngDevMode ? [{ debugName: "formControlToBind" }] : []));
430
+ formControlLabel = input.required(...(ngDevMode ? [{ debugName: "formControlLabel" }] : []));
431
+ cssClass = input("", ...(ngDevMode ? [{ debugName: "cssClass" }] : []));
432
+ customErrors = input(...(ngDevMode ? [undefined, { debugName: "customErrors" }] : []));
433
+ finalErrorsWithCodeAndMessage = computed(() => {
434
+ const label = this.formControlLabel();
435
+ const customKv = this.customErrors() ?? {};
436
+ return {
437
+ required: `${label} is required.`,
438
+ maxlength: `${label} must be smaller.`,
439
+ minlength: `${label} must be bigger.`,
440
+ min: `${label} must be bigger.`,
441
+ max: `${label} must be smaller.`,
442
+ email: `${label} must be a valid email.`,
443
+ pattern: `${label} is not valid.`,
444
+ ...customKv
445
+ };
446
+ }, ...(ngDevMode ? [{ debugName: "finalErrorsWithCodeAndMessage" }] : []));
447
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ReactiveFormErrorMessageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
448
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: ReactiveFormErrorMessageComponent, isStandalone: true, selector: "ngx-reactive-form-error-message", inputs: { formControlToBind: { classPropertyName: "formControlToBind", publicName: "formControlToBind", isSignal: true, isRequired: true, transformFunction: null }, formControlLabel: { classPropertyName: "formControlLabel", publicName: "formControlLabel", isSignal: true, isRequired: true, transformFunction: null }, cssClass: { classPropertyName: "cssClass", publicName: "cssClass", isSignal: true, isRequired: false, transformFunction: null }, customErrors: { classPropertyName: "customErrors", publicName: "customErrors", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
449
+ @for (item of finalErrorsWithCodeAndMessage() | keyvalue; track item.key) {
450
+ @if (formControlToBind().errors?.[item.key]) {
451
+ <small [class]="cssClass()">{{ item.value }}</small>
452
+ }
453
+ }
454
+ `, isInline: true, dependencies: [{ kind: "pipe", type: KeyValuePipe, name: "keyvalue" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
455
+ }
456
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ReactiveFormErrorMessageComponent, decorators: [{
457
+ type: Component,
458
+ args: [{
459
+ selector: "ngx-reactive-form-error-message",
460
+ changeDetection: ChangeDetectionStrategy.OnPush,
461
+ imports: [KeyValuePipe],
462
+ template: `
463
+ @for (item of finalErrorsWithCodeAndMessage() | keyvalue; track item.key) {
464
+ @if (formControlToBind().errors?.[item.key]) {
465
+ <small [class]="cssClass()">{{ item.value }}</small>
466
+ }
467
+ }
468
+ `
469
+ }]
470
+ }], propDecorators: { formControlToBind: [{ type: i0.Input, args: [{ isSignal: true, alias: "formControlToBind", required: true }] }], formControlLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "formControlLabel", required: true }] }], cssClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "cssClass", required: false }] }], customErrors: [{ type: i0.Input, args: [{ isSignal: true, alias: "customErrors", required: false }] }] } });
471
+
384
472
  /**
385
473
  * Generated bundle index. Do not edit.
386
474
  */
387
475
 
388
- export { abstractControlSignal, createSignalChangeNotifier, debouncedSignal, duringDestroy, reactiveQueryParam, rxSubscriber, slimComponentState, throwResourceError };
476
+ export { ReactiveFormErrorMessageComponent, abstractControlSignal, createSignalChangeNotifier, debouncedSignal, duringDestroy, pairwiseSignal, reactiveQueryParam, rxSubscriber, slimComponentState, slimLazyEffect, throwResourceError };
389
477
  //# sourceMappingURL=ngx-extra.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-extra.mjs","sources":["../../../projects/ngx-extra/src/lib/reactive/create-signal-change-notifier.ts","../../../projects/ngx-extra/src/lib/helpers.ts","../../../projects/ngx-extra/src/lib/reactive/reactive-query-param.ts","../../../projects/ngx-extra/src/lib/reactive/debounced-signal.ts","../../../projects/ngx-extra/src/lib/reactive/during-destroy.ts","../../../projects/ngx-extra/src/lib/reactive/rx-subscriber.ts","../../../projects/ngx-extra/src/lib/reactive/throw-resource-error.ts","../../../projects/ngx-extra/src/lib/reactive/abstract-control-signal.ts","../../../projects/ngx-extra/src/lib/misc/slim-component-state.ts","../../../projects/ngx-extra/src/ngx-extra.ts"],"sourcesContent":["import { Signal, signal } from \"@angular/core\";\n\nexport type SignalChangeNotifier = {\n notify: () => void;\n listen: Signal<number | null>;\n};\n\nexport function createSignalChangeNotifier() {\n const sourceSignal = signal<number | null>(null);\n\n return Object.seal({\n notify: () => {\n sourceSignal.update((v) => (v === null ? 1 : v + 1));\n },\n listen: sourceSignal.asReadonly()\n }) satisfies SignalChangeNotifier;\n}\n","export function cleanNullishFromObject(obj?: object): Record<string, any> {\n if (obj === undefined) {\n return {};\n }\n\n return Object.fromEntries(Object.entries(obj).filter(([, v]) => v != null));\n}\n\nexport function hasNullishInObject(obj: object): boolean {\n return Object.values(obj).some((val) => val === null || val === undefined);\n}\n","import {\n DestroyRef,\n Injectable,\n Injector,\n Signal,\n assertInInjectionContext,\n effect,\n inject,\n isDevMode,\n isSignal,\n runInInjectionContext,\n untracked\n} from \"@angular/core\";\nimport { takeUntilDestroyed, toObservable } from \"@angular/core/rxjs-interop\";\nimport { ActivatedRoute, NavigationExtras, Router } from \"@angular/router\";\nimport LzString from \"lz-string\";\nimport { Observable, filter, map } from \"rxjs\";\nimport { createSignalChangeNotifier } from \"./create-signal-change-notifier\";\nimport { cleanNullishFromObject } from \"../helpers\";\n\nexport type SlimNavigationExtras = Pick<\n NavigationExtras,\n | \"queryParamsHandling\"\n | \"onSameUrlNavigation\"\n | \"replaceUrl\"\n | \"skipLocationChange\"\n | \"preserveFragment\"\n>;\n\nexport type ReactiveQueryParamOptions<T> = {\n queryParamKey: string;\n source: Signal<T> | Observable<T>;\n parse?: (rawData: any) => T | null;\n handleInitialSnapshot?: (payload: T) => void;\n handleStream?: (payload: T) => void;\n injector?: Injector;\n routerOptions?: SlimNavigationExtras;\n base64EncodingOptions?: {\n disableEncoding?: boolean;\n disableJsonStringifyWhenNoEncoding?: boolean;\n };\n queryParamOptions?: {\n blackListedValues?: any[];\n preserveStaleOnBlacklistedValue?: boolean;\n };\n};\n\n@Injectable({ providedIn: \"root\" })\nclass ReactiveQueryParamGlobalHandler {\n private router = inject(Router);\n\n private schedulerNotifier = createSignalChangeNotifier();\n private currentKeys: Record<string, string | null> = {};\n private navigationExtras: SlimNavigationExtras = {};\n\n constructor() {\n effect(() => {\n if (!this.schedulerNotifier.listen()) {\n return;\n }\n untracked(() => {\n this.router\n .navigate([], {\n queryParams: this.currentKeys,\n ...this.navigationExtras\n })\n .then(() => {\n this.currentKeys = {};\n this.navigationExtras = {};\n });\n });\n });\n }\n\n scheduleNavigation(key: string, value: string | null, navOptions: SlimNavigationExtras) {\n this.currentKeys[key] = value;\n this.setCurrentNavigationExtras(navOptions);\n this.schedulerNotifier.notify();\n }\n\n private setCurrentNavigationExtras(config: Partial<SlimNavigationExtras> = {}) {\n const {\n queryParamsHandling,\n onSameUrlNavigation,\n replaceUrl,\n skipLocationChange,\n preserveFragment\n } = config;\n\n if (queryParamsHandling || queryParamsHandling === \"\") {\n this.navigationExtras.queryParamsHandling = queryParamsHandling;\n }\n if (onSameUrlNavigation) {\n this.navigationExtras.onSameUrlNavigation = onSameUrlNavigation;\n }\n if (replaceUrl) {\n this.navigationExtras.replaceUrl = replaceUrl;\n }\n if (skipLocationChange) {\n this.navigationExtras.skipLocationChange = skipLocationChange;\n }\n if (preserveFragment) {\n this.navigationExtras.preserveFragment = preserveFragment;\n }\n }\n}\n\nexport function reactiveQueryParam<T>(options: ReactiveQueryParamOptions<T>) {\n if (isDevMode() && !options?.injector) {\n assertInInjectionContext(reactiveQueryParam);\n }\n\n const assertedInjector = options.injector ?? inject(Injector);\n\n const blackList = options.queryParamOptions?.blackListedValues ?? [null, undefined, \"\"];\n\n const useEncoding = !options?.base64EncodingOptions?.disableEncoding;\n\n const useStringifyOnNoEncoding =\n !options?.base64EncodingOptions?.disableJsonStringifyWhenNoEncoding;\n\n const deserialize = (payload: string): T => {\n if (useEncoding) {\n const decoded = LzString.decompressFromEncodedURIComponent(payload);\n return JSON.parse(decoded);\n }\n\n if (!useEncoding && useStringifyOnNoEncoding) {\n return JSON.parse(payload);\n } else {\n try {\n return JSON.parse(payload);\n } catch {\n return payload as T;\n }\n }\n };\n\n const serialize = (value: T | null | undefined): string | null => {\n if (blackList.some((elem) => elem === value)) {\n return null;\n }\n if (useEncoding) {\n return LzString.compressToEncodedURIComponent(JSON.stringify(value));\n }\n\n if (!useEncoding && useStringifyOnNoEncoding) {\n return JSON.stringify(value);\n } else {\n if (typeof value === \"string\") {\n return value;\n } else {\n return JSON.stringify(value);\n }\n }\n };\n\n runInInjectionContext(assertedInjector, () => {\n const globalHandler = inject(ReactiveQueryParamGlobalHandler);\n const route = inject(ActivatedRoute);\n const destroyRef = inject(DestroyRef);\n\n // Handle initial snapshot\n const payloadFromSnapshot = route.snapshot.queryParamMap.get(options.queryParamKey);\n\n if (\n payloadFromSnapshot !== null &&\n payloadFromSnapshot !== \"\" &&\n options.handleInitialSnapshot\n ) {\n const deserialized = deserialize(payloadFromSnapshot);\n if (!options.parse) {\n options.handleInitialSnapshot(deserialized);\n } else {\n try {\n const parsedValue = options.parse(deserialized);\n if (parsedValue !== null) {\n options.handleInitialSnapshot(parsedValue);\n }\n } catch (error) {\n console.error(error);\n }\n }\n }\n\n // Handle query param stream\n route.queryParamMap\n .pipe(\n map((params) => params.get(options.queryParamKey)),\n filter((value) => value !== null),\n filter((value) => value !== \"\"),\n takeUntilDestroyed(destroyRef)\n )\n .subscribe((payloadFromStream) => {\n if (!options.handleStream) {\n return;\n }\n const deserialized = deserialize(payloadFromStream);\n if (!options.parse) {\n options.handleStream(deserialized);\n } else {\n try {\n const parsedValue = options.parse(deserialized);\n if (parsedValue !== null) {\n options.handleStream(parsedValue);\n }\n } catch (error) {\n console.error(error);\n }\n }\n });\n\n // Handle source changes\n let source$: Observable<T>;\n\n if (isSignal(options.source)) {\n source$ = toObservable(options.source);\n } else if (options.source instanceof Observable) {\n source$ = options.source;\n } else {\n throw new Error(\"Invalid source\");\n }\n\n source$.pipe(takeUntilDestroyed(destroyRef)).subscribe((value) => {\n const serializedValue = serialize(value);\n if (serializedValue === null && options?.queryParamOptions?.preserveStaleOnBlacklistedValue) {\n return;\n }\n\n globalHandler.scheduleNavigation(options.queryParamKey, serializedValue, {\n ...cleanNullishFromObject(options?.routerOptions),\n queryParamsHandling: options.routerOptions?.queryParamsHandling ?? \"merge\"\n });\n });\n });\n}\n","import {\n Signal,\n Injector,\n isDevMode,\n assertInInjectionContext,\n inject,\n runInInjectionContext,\n isSignal\n} from \"@angular/core\";\nimport { toSignal, toObservable, takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport { debounceTime } from \"rxjs\";\n\nexport function debouncedSignal<T>(source: Signal<T>, ms: number, injector?: Injector) {\n if (isDevMode() && !injector) {\n assertInInjectionContext(debouncedSignal);\n }\n const assertedInjector = injector ?? inject(Injector);\n\n return runInInjectionContext(assertedInjector, () => {\n if (isSignal(source)) {\n return toSignal(toObservable(source).pipe(debounceTime(ms), takeUntilDestroyed()));\n } else {\n throw new Error(\"Invalid source\");\n }\n });\n}\n","import {\n Injector,\n isDevMode,\n assertInInjectionContext,\n inject,\n runInInjectionContext,\n DestroyRef\n} from \"@angular/core\";\n\nexport function duringDestroy(fn: () => void, injector?: Injector) {\n if (isDevMode() && !injector) {\n assertInInjectionContext(duringDestroy);\n }\n const assertedInjector = injector ?? inject(Injector);\n\n runInInjectionContext(assertedInjector, () => {\n inject(DestroyRef).onDestroy(fn);\n });\n}\n","import {\n assertInInjectionContext,\n inject,\n Injector,\n isDevMode,\n runInInjectionContext\n} from \"@angular/core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport { Observable } from \"rxjs\";\n\nexport type RxSubscriberOptions = {\n injector?: Injector;\n};\n\nexport function rxSubscriber<T>(\n source: Observable<T>,\n next: (payload: T) => void,\n options?: RxSubscriberOptions\n) {\n if (isDevMode() && !options?.injector) {\n assertInInjectionContext(rxSubscriber);\n }\n const assertedInjector = options?.injector ?? inject(Injector);\n\n runInInjectionContext(assertedInjector, () => {\n source.pipe(takeUntilDestroyed()).subscribe((payloadFromStream) => {\n next(payloadFromStream);\n });\n });\n}\n","import { HttpResourceRef } from \"@angular/common/http\";\nimport {\n Injector,\n assertInInjectionContext,\n inject,\n runInInjectionContext,\n effect,\n isDevMode\n} from \"@angular/core\";\n\nexport function throwResourceError<T = any>(resorce: HttpResourceRef<T>, injector?: Injector) {\n if (isDevMode() && !injector) {\n assertInInjectionContext(throwResourceError);\n }\n const assertedInjector = injector ?? inject(Injector);\n runInInjectionContext(assertedInjector, () => {\n effect(() => {\n if (resorce.status() === \"error\") {\n throw resorce.error();\n }\n });\n });\n}\n","import {\n assertInInjectionContext,\n computed,\n inject,\n Injector,\n isDevMode,\n runInInjectionContext,\n signal\n} from \"@angular/core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport {\n AbstractControl,\n FormControlStatus,\n PristineChangeEvent,\n StatusChangeEvent,\n TouchedChangeEvent,\n ValidationErrors,\n ValueChangeEvent\n} from \"@angular/forms\";\n\ntype AbstractControlSignalOptions = {\n injector?: Injector;\n};\n\nexport function abstractControlSignal<T>(\n source: AbstractControl<T>,\n options: AbstractControlSignalOptions = {}\n) {\n if (isDevMode() && !options.injector) {\n assertInInjectionContext(abstractControlSignal);\n }\n const assertedInjector = options.injector ?? inject(Injector);\n\n return runInInjectionContext(assertedInjector, () => {\n const internalState = Object.seal({\n value: signal<T>(source.getRawValue()),\n status: signal<FormControlStatus>(source.status),\n touched: signal<boolean>(source.touched),\n pristine: signal<boolean>(source.pristine),\n errors: signal<ValidationErrors | null>(source.errors)\n });\n\n source.events.pipe(takeUntilDestroyed()).subscribe((newEvent) => {\n if (newEvent instanceof ValueChangeEvent) {\n internalState.value.set(newEvent.value);\n }\n\n if (newEvent instanceof PristineChangeEvent) {\n internalState.pristine.set(newEvent.pristine);\n }\n\n if (newEvent instanceof TouchedChangeEvent) {\n internalState.touched.set(newEvent.touched);\n }\n\n if (newEvent instanceof StatusChangeEvent) {\n internalState.status.set(newEvent.status);\n internalState.errors.set(source.errors);\n }\n });\n\n return Object.seal({\n errors: internalState.errors.asReadonly(),\n value: internalState.value.asReadonly(),\n touched: internalState.touched.asReadonly(),\n untouched: computed(() => {\n return !internalState.touched();\n }),\n pristine: internalState.pristine.asReadonly(),\n dirty: computed(() => {\n return !internalState.pristine();\n }),\n valid: computed(() => {\n return internalState.status() === \"VALID\";\n }),\n invalid: computed(() => {\n return internalState.status() === \"INVALID\";\n }),\n pending: computed(() => {\n return internalState.status() === \"PENDING\";\n }),\n disabled: computed(() => {\n return internalState.status() === \"DISABLED\";\n })\n });\n });\n}\n","import { signal, computed, Signal, WritableSignal } from \"@angular/core\";\r\nimport { ManipulationMode } from \"../types\";\r\n\r\nexport type SlimComponentState = {\r\n isCheckBoxSelectionEnabled: WritableSignal<boolean>;\r\n canSelectRow: WritableSignal<boolean>;\r\n canSelectMultipleItem: WritableSignal<boolean>;\r\n manipulationMode: WritableSignal<ManipulationMode | null>;\r\n title: WritableSignal<string>;\r\n isAnyNetworkOperationRunning: WritableSignal<boolean>;\r\n isDataManipulationUiActive: WritableSignal<boolean>;\r\n manipulationModeLabel: Signal<string>;\r\n titleWithManipulationMode: Signal<string>;\r\n setTitle(newTitle: string): SlimComponentState;\r\n setManipulationMode(mode: ManipulationMode | null): SlimComponentState;\r\n setIsCheckBoxSelectionEnabled(canSelect: boolean): SlimComponentState;\r\n setCanSelectRow(canSelect: boolean): SlimComponentState;\r\n setCanSelectMultipleItem(canSelect: boolean): SlimComponentState;\r\n setIsAnyNetworkOperationRunning(status: boolean): SlimComponentState;\r\n setIsDataManipulationUiActive(status: boolean): SlimComponentState;\r\n resetAll(): SlimComponentState;\r\n};\r\n\r\nexport function slimComponentState(): SlimComponentState {\r\n const isCheckBoxSelectionEnabled = signal<boolean>(false);\r\n const canSelectRow = signal<boolean>(false);\r\n const canSelectMultipleItem = signal<boolean>(false);\r\n const manipulationMode = signal<ManipulationMode | null>(null);\r\n const title = signal<string>(\"\");\r\n const isAnyNetworkOperationRunning = signal<boolean>(false);\r\n const isDataManipulationUiActive = signal<boolean>(false);\r\n\r\n const manipulationModeLabel = computed(() => {\r\n switch (manipulationMode()) {\r\n case \"create\":\r\n return \"Create\";\r\n case \"update\":\r\n return \"Update\";\r\n case \"delete\":\r\n return \"Delete\";\r\n case \"create-child\":\r\n return \"Create Child\";\r\n case \"update-child\":\r\n return \"Update Child\";\r\n case \"delete-child\":\r\n return \"Delete Child\";\r\n default:\r\n return \"\";\r\n }\r\n });\r\n\r\n const titleWithManipulationMode = computed(() => {\r\n return `${manipulationModeLabel()} ${title()}`.trim();\r\n });\r\n\r\n return Object.seal({\r\n isCheckBoxSelectionEnabled,\r\n canSelectRow,\r\n canSelectMultipleItem,\r\n manipulationMode,\r\n title,\r\n isAnyNetworkOperationRunning,\r\n isDataManipulationUiActive,\r\n manipulationModeLabel,\r\n titleWithManipulationMode,\r\n setTitle(newTitle: string) {\r\n title.set(newTitle);\r\n return this;\r\n },\r\n\r\n setManipulationMode(mode: ManipulationMode | null): SlimComponentState {\r\n manipulationMode.set(mode);\r\n return this;\r\n },\r\n setIsCheckBoxSelectionEnabled(canSelect: boolean): SlimComponentState {\r\n isCheckBoxSelectionEnabled.set(canSelect);\r\n return this;\r\n },\r\n\r\n setCanSelectRow(canSelect: boolean): SlimComponentState {\r\n canSelectRow.set(canSelect);\r\n return this;\r\n },\r\n\r\n setCanSelectMultipleItem(canSelect: boolean): SlimComponentState {\r\n canSelectMultipleItem.set(canSelect);\r\n return this;\r\n },\r\n\r\n setIsAnyNetworkOperationRunning(status: boolean): SlimComponentState {\r\n isAnyNetworkOperationRunning.set(status);\r\n return this;\r\n },\r\n\r\n setIsDataManipulationUiActive(status: boolean): SlimComponentState {\r\n isDataManipulationUiActive.set(status);\r\n return this;\r\n },\r\n\r\n resetAll(): SlimComponentState {\r\n isCheckBoxSelectionEnabled.set(false);\r\n canSelectRow.set(false);\r\n canSelectMultipleItem.set(false);\r\n manipulationMode.set(null);\r\n title.set(\"\");\r\n isAnyNetworkOperationRunning.set(false);\r\n isDataManipulationUiActive.set(false);\r\n return this;\r\n }\r\n });\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngx-extra.mjs","sources":["../../../projects/ngx-extra/src/lib/utils/create-signal-change-notifier.ts","../../../projects/ngx-extra/src/lib/helpers.ts","../../../projects/ngx-extra/src/lib/utils/reactive-query-param.ts","../../../projects/ngx-extra/src/lib/utils/debounced-signal.ts","../../../projects/ngx-extra/src/lib/utils/during-destroy.ts","../../../projects/ngx-extra/src/lib/utils/rx-subscriber.ts","../../../projects/ngx-extra/src/lib/utils/throw-resource-error.ts","../../../projects/ngx-extra/src/lib/utils/abstract-control-signal.ts","../../../projects/ngx-extra/src/lib/misc/slim-component-state.ts","../../../projects/ngx-extra/src/lib/utils/slim-lazy-effect.ts","../../../projects/ngx-extra/src/lib/utils/pairwise-signal.ts","../../../projects/ngx-extra/src/lib/components/reactive-form-error-message.component.ts","../../../projects/ngx-extra/src/ngx-extra.ts"],"sourcesContent":["import { Signal, signal } from \"@angular/core\";\n\nexport type SignalChangeNotifier = {\n notify: () => void;\n listen: Signal<number | null>;\n};\n\nexport function createSignalChangeNotifier() {\n const sourceSignal = signal<number | null>(null);\n\n return Object.seal({\n notify: () => {\n sourceSignal.update((v) => (v === null ? 1 : v + 1));\n },\n listen: sourceSignal.asReadonly()\n }) satisfies SignalChangeNotifier;\n}\n","export function cleanNullishFromObject(obj?: object): Record<string, any> {\n if (obj === undefined) {\n return {};\n }\n\n return Object.fromEntries(Object.entries(obj).filter(([, v]) => v != null));\n}\n\nexport function hasNullishInObject(obj: object): boolean {\n return Object.values(obj).some((val) => val === null || val === undefined);\n}\n","import {\n DestroyRef,\n Injectable,\n Injector,\n Signal,\n assertInInjectionContext,\n effect,\n inject,\n isDevMode,\n isSignal,\n runInInjectionContext,\n untracked\n} from \"@angular/core\";\nimport { takeUntilDestroyed, toObservable } from \"@angular/core/rxjs-interop\";\nimport { ActivatedRoute, NavigationExtras, Router } from \"@angular/router\";\nimport LzString from \"lz-string\";\nimport { Observable, filter, map } from \"rxjs\";\nimport { createSignalChangeNotifier } from \"./create-signal-change-notifier\";\nimport { cleanNullishFromObject } from \"../helpers\";\n\nexport type SlimNavigationExtras = Pick<\n NavigationExtras,\n | \"queryParamsHandling\"\n | \"onSameUrlNavigation\"\n | \"replaceUrl\"\n | \"skipLocationChange\"\n | \"preserveFragment\"\n>;\n\nexport type ReactiveQueryParamOptions<T> = {\n queryParamKey: string;\n source: Signal<T> | Observable<T>;\n parse?: (rawData: any) => T | null;\n handleInitialSnapshot?: (payload: T) => void;\n handleStream?: (payload: T) => void;\n injector?: Injector;\n routerOptions?: SlimNavigationExtras;\n base64EncodingOptions?: {\n disableEncoding?: boolean;\n disableJsonStringifyWhenNoEncoding?: boolean;\n };\n queryParamOptions?: {\n blackListedValues?: any[];\n preserveStaleOnBlacklistedValue?: boolean;\n };\n};\n\n@Injectable({ providedIn: \"root\" })\nclass ReactiveQueryParamGlobalHandler {\n private router = inject(Router);\n\n private schedulerNotifier = createSignalChangeNotifier();\n private currentKeys: Record<string, string | null> = {};\n private navigationExtras: SlimNavigationExtras = {};\n\n constructor() {\n effect(() => {\n if (!this.schedulerNotifier.listen()) {\n return;\n }\n untracked(() => {\n this.router\n .navigate([], {\n queryParams: this.currentKeys,\n ...this.navigationExtras\n })\n .then(() => {\n this.currentKeys = {};\n this.navigationExtras = {};\n });\n });\n });\n }\n\n scheduleNavigation(key: string, value: string | null, navOptions: SlimNavigationExtras) {\n this.currentKeys[key] = value;\n this.setCurrentNavigationExtras(navOptions);\n this.schedulerNotifier.notify();\n }\n\n private setCurrentNavigationExtras(config: Partial<SlimNavigationExtras> = {}) {\n const {\n queryParamsHandling,\n onSameUrlNavigation,\n replaceUrl,\n skipLocationChange,\n preserveFragment\n } = config;\n\n if (queryParamsHandling || queryParamsHandling === \"\") {\n this.navigationExtras.queryParamsHandling = queryParamsHandling;\n }\n if (onSameUrlNavigation) {\n this.navigationExtras.onSameUrlNavigation = onSameUrlNavigation;\n }\n if (replaceUrl) {\n this.navigationExtras.replaceUrl = replaceUrl;\n }\n if (skipLocationChange) {\n this.navigationExtras.skipLocationChange = skipLocationChange;\n }\n if (preserveFragment) {\n this.navigationExtras.preserveFragment = preserveFragment;\n }\n }\n}\n\nexport function reactiveQueryParam<T>(options: ReactiveQueryParamOptions<T>) {\n if (isDevMode() && !options?.injector) {\n assertInInjectionContext(reactiveQueryParam);\n }\n\n const assertedInjector = options.injector ?? inject(Injector);\n\n const blackList = options.queryParamOptions?.blackListedValues ?? [null, undefined, \"\"];\n\n const useEncoding = !options?.base64EncodingOptions?.disableEncoding;\n\n const useStringifyOnNoEncoding =\n !options?.base64EncodingOptions?.disableJsonStringifyWhenNoEncoding;\n\n const deserialize = (payload: string): T => {\n if (useEncoding) {\n const decoded = LzString.decompressFromEncodedURIComponent(payload);\n return JSON.parse(decoded);\n }\n\n if (!useEncoding && useStringifyOnNoEncoding) {\n return JSON.parse(payload);\n } else {\n try {\n return JSON.parse(payload);\n } catch {\n return payload as T;\n }\n }\n };\n\n const serialize = (value: T | null | undefined): string | null => {\n if (blackList.some((elem) => elem === value)) {\n return null;\n }\n if (useEncoding) {\n return LzString.compressToEncodedURIComponent(JSON.stringify(value));\n }\n\n if (!useEncoding && useStringifyOnNoEncoding) {\n return JSON.stringify(value);\n } else {\n if (typeof value === \"string\") {\n return value;\n } else {\n return JSON.stringify(value);\n }\n }\n };\n\n runInInjectionContext(assertedInjector, () => {\n const globalHandler = inject(ReactiveQueryParamGlobalHandler);\n const route = inject(ActivatedRoute);\n const destroyRef = inject(DestroyRef);\n\n // Handle initial snapshot\n const payloadFromSnapshot = route.snapshot.queryParamMap.get(options.queryParamKey);\n\n if (\n payloadFromSnapshot !== null &&\n payloadFromSnapshot !== \"\" &&\n options.handleInitialSnapshot\n ) {\n const deserialized = deserialize(payloadFromSnapshot);\n if (!options.parse) {\n options.handleInitialSnapshot(deserialized);\n } else {\n try {\n const parsedValue = options.parse(deserialized);\n if (parsedValue !== null) {\n options.handleInitialSnapshot(parsedValue);\n }\n } catch (error) {\n console.error(error);\n }\n }\n }\n\n // Handle query param stream\n route.queryParamMap\n .pipe(\n map((params) => params.get(options.queryParamKey)),\n filter((value) => value !== null),\n filter((value) => value !== \"\"),\n takeUntilDestroyed(destroyRef)\n )\n .subscribe((payloadFromStream) => {\n if (!options.handleStream) {\n return;\n }\n const deserialized = deserialize(payloadFromStream);\n if (!options.parse) {\n options.handleStream(deserialized);\n } else {\n try {\n const parsedValue = options.parse(deserialized);\n if (parsedValue !== null) {\n options.handleStream(parsedValue);\n }\n } catch (error) {\n console.error(error);\n }\n }\n });\n\n // Handle source changes\n let source$: Observable<T>;\n\n if (isSignal(options.source)) {\n source$ = toObservable(options.source);\n } else if (options.source instanceof Observable) {\n source$ = options.source;\n } else {\n throw new Error(\"Invalid source\");\n }\n\n source$.pipe(takeUntilDestroyed(destroyRef)).subscribe((value) => {\n const serializedValue = serialize(value);\n if (serializedValue === null && options?.queryParamOptions?.preserveStaleOnBlacklistedValue) {\n return;\n }\n\n globalHandler.scheduleNavigation(options.queryParamKey, serializedValue, {\n ...cleanNullishFromObject(options?.routerOptions),\n queryParamsHandling: options.routerOptions?.queryParamsHandling ?? \"merge\"\n });\n });\n });\n}\n","import {\n Signal,\n Injector,\n isDevMode,\n assertInInjectionContext,\n inject,\n runInInjectionContext,\n isSignal\n} from \"@angular/core\";\nimport { toSignal, toObservable, takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport { debounceTime } from \"rxjs\";\n\nexport function debouncedSignal<T>(source: Signal<T>, ms: number, injector?: Injector) {\n if (isDevMode() && !injector) {\n assertInInjectionContext(debouncedSignal);\n }\n const assertedInjector = injector ?? inject(Injector);\n\n return runInInjectionContext(assertedInjector, () => {\n if (isSignal(source)) {\n return toSignal(toObservable(source).pipe(debounceTime(ms), takeUntilDestroyed()));\n } else {\n throw new Error(\"Invalid source\");\n }\n });\n}\n","import {\n Injector,\n isDevMode,\n assertInInjectionContext,\n inject,\n runInInjectionContext,\n DestroyRef\n} from \"@angular/core\";\n\nexport function duringDestroy(fn: () => void, injector?: Injector) {\n if (isDevMode() && !injector) {\n assertInInjectionContext(duringDestroy);\n }\n const assertedInjector = injector ?? inject(Injector);\n\n runInInjectionContext(assertedInjector, () => {\n inject(DestroyRef).onDestroy(fn);\n });\n}\n","import {\n assertInInjectionContext,\n inject,\n Injector,\n isDevMode,\n runInInjectionContext\n} from \"@angular/core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport { Observable } from \"rxjs\";\n\nexport type RxSubscriberOptions = {\n injector?: Injector;\n};\n\nexport function rxSubscriber<T>(\n source: Observable<T>,\n next: (payload: T) => void,\n options?: RxSubscriberOptions\n) {\n if (isDevMode() && !options?.injector) {\n assertInInjectionContext(rxSubscriber);\n }\n const assertedInjector = options?.injector ?? inject(Injector);\n\n runInInjectionContext(assertedInjector, () => {\n source.pipe(takeUntilDestroyed()).subscribe((payloadFromStream) => {\n next(payloadFromStream);\n });\n });\n}\n","import { HttpResourceRef } from \"@angular/common/http\";\nimport {\n Injector,\n assertInInjectionContext,\n inject,\n runInInjectionContext,\n effect,\n isDevMode\n} from \"@angular/core\";\n\nexport function throwResourceError<T = any>(resorce: HttpResourceRef<T>, injector?: Injector) {\n if (isDevMode() && !injector) {\n assertInInjectionContext(throwResourceError);\n }\n const assertedInjector = injector ?? inject(Injector);\n runInInjectionContext(assertedInjector, () => {\n effect(() => {\n if (resorce.status() === \"error\") {\n throw resorce.error();\n }\n });\n });\n}\n","import {\n assertInInjectionContext,\n computed,\n inject,\n Injector,\n isDevMode,\n runInInjectionContext,\n signal\n} from \"@angular/core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport {\n AbstractControl,\n FormControlStatus,\n PristineChangeEvent,\n StatusChangeEvent,\n TouchedChangeEvent,\n ValidationErrors,\n ValueChangeEvent\n} from \"@angular/forms\";\n\ntype AbstractControlSignalOptions = {\n injector?: Injector;\n};\n\nexport function abstractControlSignal<T>(\n source: AbstractControl<T>,\n options: AbstractControlSignalOptions = {}\n) {\n if (isDevMode() && !options.injector) {\n assertInInjectionContext(abstractControlSignal);\n }\n const assertedInjector = options.injector ?? inject(Injector);\n\n return runInInjectionContext(assertedInjector, () => {\n const internalState = Object.seal({\n value: signal<T>(source.getRawValue()),\n status: signal<FormControlStatus>(source.status),\n touched: signal<boolean>(source.touched),\n pristine: signal<boolean>(source.pristine),\n errors: signal<ValidationErrors | null>(source.errors)\n });\n\n source.events.pipe(takeUntilDestroyed()).subscribe((newEvent) => {\n if (newEvent instanceof ValueChangeEvent) {\n internalState.value.set(newEvent.value);\n }\n\n if (newEvent instanceof PristineChangeEvent) {\n internalState.pristine.set(newEvent.pristine);\n }\n\n if (newEvent instanceof TouchedChangeEvent) {\n internalState.touched.set(newEvent.touched);\n }\n\n if (newEvent instanceof StatusChangeEvent) {\n internalState.status.set(newEvent.status);\n internalState.errors.set(source.errors);\n }\n });\n\n return Object.seal({\n errors: internalState.errors.asReadonly(),\n value: internalState.value.asReadonly(),\n touched: internalState.touched.asReadonly(),\n untouched: computed(() => {\n return !internalState.touched();\n }),\n pristine: internalState.pristine.asReadonly(),\n dirty: computed(() => {\n return !internalState.pristine();\n }),\n valid: computed(() => {\n return internalState.status() === \"VALID\";\n }),\n invalid: computed(() => {\n return internalState.status() === \"INVALID\";\n }),\n pending: computed(() => {\n return internalState.status() === \"PENDING\";\n }),\n disabled: computed(() => {\n return internalState.status() === \"DISABLED\";\n })\n });\n });\n}\n","import { signal, computed, Signal, WritableSignal } from \"@angular/core\";\r\nimport { ManipulationMode } from \"../types\";\r\n\r\nexport type SlimComponentState = {\r\n isCheckBoxSelectionEnabled: WritableSignal<boolean>;\r\n canSelectRow: WritableSignal<boolean>;\r\n canSelectMultipleItem: WritableSignal<boolean>;\r\n manipulationMode: WritableSignal<ManipulationMode | null>;\r\n title: WritableSignal<string>;\r\n isAnyNetworkOperationRunning: WritableSignal<boolean>;\r\n isDataManipulationUiActive: WritableSignal<boolean>;\r\n manipulationModeLabel: Signal<string>;\r\n titleWithManipulationMode: Signal<string>;\r\n setTitle(newTitle: string): SlimComponentState;\r\n setManipulationMode(mode: ManipulationMode | null): SlimComponentState;\r\n setIsCheckBoxSelectionEnabled(canSelect: boolean): SlimComponentState;\r\n setCanSelectRow(canSelect: boolean): SlimComponentState;\r\n setCanSelectMultipleItem(canSelect: boolean): SlimComponentState;\r\n setIsAnyNetworkOperationRunning(status: boolean): SlimComponentState;\r\n setIsDataManipulationUiActive(status: boolean): SlimComponentState;\r\n resetAll(): SlimComponentState;\r\n};\r\n\r\nexport function slimComponentState(): SlimComponentState {\r\n const isCheckBoxSelectionEnabled = signal<boolean>(false);\r\n const canSelectRow = signal<boolean>(false);\r\n const canSelectMultipleItem = signal<boolean>(false);\r\n const manipulationMode = signal<ManipulationMode | null>(null);\r\n const title = signal<string>(\"\");\r\n const isAnyNetworkOperationRunning = signal<boolean>(false);\r\n const isDataManipulationUiActive = signal<boolean>(false);\r\n\r\n const manipulationModeLabel = computed(() => {\r\n switch (manipulationMode()) {\r\n case \"create\":\r\n return \"Create\";\r\n case \"update\":\r\n return \"Update\";\r\n case \"delete\":\r\n return \"Delete\";\r\n case \"create-child\":\r\n return \"Create Child\";\r\n case \"update-child\":\r\n return \"Update Child\";\r\n case \"delete-child\":\r\n return \"Delete Child\";\r\n default:\r\n return \"\";\r\n }\r\n });\r\n\r\n const titleWithManipulationMode = computed(() => {\r\n return `${manipulationModeLabel()} ${title()}`.trim();\r\n });\r\n\r\n return Object.seal({\r\n isCheckBoxSelectionEnabled,\r\n canSelectRow,\r\n canSelectMultipleItem,\r\n manipulationMode,\r\n title,\r\n isAnyNetworkOperationRunning,\r\n isDataManipulationUiActive,\r\n manipulationModeLabel,\r\n titleWithManipulationMode,\r\n setTitle(newTitle: string) {\r\n title.set(newTitle);\r\n return this;\r\n },\r\n\r\n setManipulationMode(mode: ManipulationMode | null): SlimComponentState {\r\n manipulationMode.set(mode);\r\n return this;\r\n },\r\n setIsCheckBoxSelectionEnabled(canSelect: boolean): SlimComponentState {\r\n isCheckBoxSelectionEnabled.set(canSelect);\r\n return this;\r\n },\r\n\r\n setCanSelectRow(canSelect: boolean): SlimComponentState {\r\n canSelectRow.set(canSelect);\r\n return this;\r\n },\r\n\r\n setCanSelectMultipleItem(canSelect: boolean): SlimComponentState {\r\n canSelectMultipleItem.set(canSelect);\r\n return this;\r\n },\r\n\r\n setIsAnyNetworkOperationRunning(status: boolean): SlimComponentState {\r\n isAnyNetworkOperationRunning.set(status);\r\n return this;\r\n },\r\n\r\n setIsDataManipulationUiActive(status: boolean): SlimComponentState {\r\n isDataManipulationUiActive.set(status);\r\n return this;\r\n },\r\n\r\n resetAll(): SlimComponentState {\r\n isCheckBoxSelectionEnabled.set(false);\r\n canSelectRow.set(false);\r\n canSelectMultipleItem.set(false);\r\n manipulationMode.set(null);\r\n title.set(\"\");\r\n isAnyNetworkOperationRunning.set(false);\r\n isDataManipulationUiActive.set(false);\r\n return this;\r\n }\r\n });\r\n}\r\n","import { effect, EffectCleanupRegisterFn, Injector, Signal, untracked } from \"@angular/core\";\n\ntype SlimLazyEffectOptions = {\n injector?: Injector;\n};\n\nexport function slimLazyEffect<T>(\n dependency: Signal<T>,\n fn: (dependency: T, onCleanup: EffectCleanupRegisterFn) => void,\n options?: SlimLazyEffectOptions\n) {\n let warm = false;\n return effect((onCleanup) => {\n const dep = dependency();\n untracked(() => {\n if (warm) {\n fn(dep, onCleanup);\n }\n warm = true;\n });\n }, options);\n}\n","import {\n assertInInjectionContext,\n inject,\n Injector,\n isDevMode,\n linkedSignal,\n runInInjectionContext,\n Signal,\n ValueEqualityFn\n} from \"@angular/core\";\n\ntype Value<T> = { current: T; previous: T | null };\n\ntype PairwiseSignalOptions<T> = {\n equalityFn?: ValueEqualityFn<Value<T>>;\n injector?: Injector;\n};\n\nexport function pairwiseSignal<T>(source: Signal<T>, options?: PairwiseSignalOptions<T>) {\n if (isDevMode() && !options?.injector) {\n assertInInjectionContext(pairwiseSignal);\n }\n const assertedInjector = options?.injector ?? inject(Injector);\n\n const defaultEqualityFn = (a: Value<T>, b: Value<T>) =>\n JSON.stringify(a.previous) === JSON.stringify(b.current);\n\n return runInInjectionContext(assertedInjector, () => {\n const pair = linkedSignal<T, Value<T>>({\n source: source,\n equal: options?.equalityFn ?? defaultEqualityFn,\n computation: (current, previous) => {\n console.log(JSON.stringify(previous) === JSON.stringify(current));\n return {\n current,\n previous: previous?.value.current ?? null\n };\n }\n });\n\n return pair.asReadonly();\n });\n}\n","import { Component, computed, input, ChangeDetectionStrategy } from \"@angular/core\";\nimport { FormControl } from \"@angular/forms\";\nimport { KeyValuePipe } from \"@angular/common\";\n\n@Component({\n selector: \"ngx-reactive-form-error-message\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [KeyValuePipe],\n template: `\n @for (item of finalErrorsWithCodeAndMessage() | keyvalue; track item.key) {\n @if (formControlToBind().errors?.[item.key]) {\n <small [class]=\"cssClass()\">{{ item.value }}</small>\n }\n }\n `\n})\nexport class ReactiveFormErrorMessageComponent {\n readonly formControlToBind = input.required<FormControl>();\n readonly formControlLabel = input.required<string>();\n readonly cssClass = input<string>(\"\");\n readonly customErrors = input<Record<string, string>>();\n\n protected readonly finalErrorsWithCodeAndMessage = computed(() => {\n const label = this.formControlLabel();\n const customKv = this.customErrors() ?? {};\n\n return {\n required: `${label} is required.`,\n maxlength: `${label} must be smaller.`,\n minlength: `${label} must be bigger.`,\n min: `${label} must be bigger.`,\n max: `${label} must be smaller.`,\n email: `${label} must be a valid email.`,\n pattern: `${label} is not valid.`,\n ...customKv\n };\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;SAOgB,0BAA0B,GAAA;AACxC,IAAA,MAAM,YAAY,GAAG,MAAM,CAAgB,IAAI,wDAAC;IAEhD,OAAO,MAAM,CAAC,IAAI,CAAC;QACjB,MAAM,EAAE,MAAK;YACX,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACtD,CAAC;AACD,QAAA,MAAM,EAAE,YAAY,CAAC,UAAU;AAChC,KAAA,CAAgC;AACnC;;AChBM,SAAU,sBAAsB,CAAC,GAAY,EAAA;AACjD,IAAA,IAAI,GAAG,KAAK,SAAS,EAAE;AACrB,QAAA,OAAO,EAAE;IACX;IAEA,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC;AAC7E;AAEM,SAAU,kBAAkB,CAAC,GAAW,EAAA;IAC5C,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,CAAC;AAC5E;;ACqCA,MACM,+BAA+B,CAAA;AAC3B,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAEvB,iBAAiB,GAAG,0BAA0B,EAAE;IAChD,WAAW,GAAkC,EAAE;IAC/C,gBAAgB,GAAyB,EAAE;AAEnD,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,EAAE;gBACpC;YACF;YACA,SAAS,CAAC,MAAK;AACb,gBAAA,IAAI,CAAC;qBACF,QAAQ,CAAC,EAAE,EAAE;oBACZ,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,GAAG,IAAI,CAAC;iBACT;qBACA,IAAI,CAAC,MAAK;AACT,oBAAA,IAAI,CAAC,WAAW,GAAG,EAAE;AACrB,oBAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAC5B,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,kBAAkB,CAAC,GAAW,EAAE,KAAoB,EAAE,UAAgC,EAAA;AACpF,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK;AAC7B,QAAA,IAAI,CAAC,0BAA0B,CAAC,UAAU,CAAC;AAC3C,QAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE;IACjC;IAEQ,0BAA0B,CAAC,SAAwC,EAAE,EAAA;AAC3E,QAAA,MAAM,EACJ,mBAAmB,EACnB,mBAAmB,EACnB,UAAU,EACV,kBAAkB,EAClB,gBAAgB,EACjB,GAAG,MAAM;AAEV,QAAA,IAAI,mBAAmB,IAAI,mBAAmB,KAAK,EAAE,EAAE;AACrD,YAAA,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,GAAG,mBAAmB;QACjE;QACA,IAAI,mBAAmB,EAAE;AACvB,YAAA,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,GAAG,mBAAmB;QACjE;QACA,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,GAAG,UAAU;QAC/C;QACA,IAAI,kBAAkB,EAAE;AACtB,YAAA,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,GAAG,kBAAkB;QAC/D;QACA,IAAI,gBAAgB,EAAE;AACpB,YAAA,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,GAAG,gBAAgB;QAC3D;IACF;wGAxDI,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAA/B,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,+BAA+B,cADX,MAAM,EAAA,CAAA;;4FAC1B,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBADpC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;AA4D5B,SAAU,kBAAkB,CAAI,OAAqC,EAAA;IACzE,IAAI,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE;QACrC,wBAAwB,CAAC,kBAAkB,CAAC;IAC9C;IAEA,MAAM,gBAAgB,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC;AAE7D,IAAA,MAAM,SAAS,GAAG,OAAO,CAAC,iBAAiB,EAAE,iBAAiB,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC;IAEvF,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,qBAAqB,EAAE,eAAe;IAEpE,MAAM,wBAAwB,GAC5B,CAAC,OAAO,EAAE,qBAAqB,EAAE,kCAAkC;AAErE,IAAA,MAAM,WAAW,GAAG,CAAC,OAAe,KAAO;QACzC,IAAI,WAAW,EAAE;YACf,MAAM,OAAO,GAAG,QAAQ,CAAC,iCAAiC,CAAC,OAAO,CAAC;AACnE,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;QAC5B;AAEA,QAAA,IAAI,CAAC,WAAW,IAAI,wBAAwB,EAAE;AAC5C,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;QAC5B;aAAO;AACL,YAAA,IAAI;AACF,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;YAC5B;AAAE,YAAA,MAAM;AACN,gBAAA,OAAO,OAAY;YACrB;QACF;AACF,IAAA,CAAC;AAED,IAAA,MAAM,SAAS,GAAG,CAAC,KAA2B,KAAmB;AAC/D,QAAA,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,KAAK,CAAC,EAAE;AAC5C,YAAA,OAAO,IAAI;QACb;QACA,IAAI,WAAW,EAAE;YACf,OAAO,QAAQ,CAAC,6BAA6B,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACtE;AAEA,QAAA,IAAI,CAAC,WAAW,IAAI,wBAAwB,EAAE;AAC5C,YAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAC9B;aAAO;AACL,YAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,gBAAA,OAAO,KAAK;YACd;iBAAO;AACL,gBAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YAC9B;QACF;AACF,IAAA,CAAC;AAED,IAAA,qBAAqB,CAAC,gBAAgB,EAAE,MAAK;AAC3C,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,+BAA+B,CAAC;AAC7D,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AACpC,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;;AAGrC,QAAA,MAAM,mBAAmB,GAAG,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC;QAEnF,IACE,mBAAmB,KAAK,IAAI;AAC5B,YAAA,mBAAmB,KAAK,EAAE;YAC1B,OAAO,CAAC,qBAAqB,EAC7B;AACA,YAAA,MAAM,YAAY,GAAG,WAAW,CAAC,mBAAmB,CAAC;AACrD,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AAClB,gBAAA,OAAO,CAAC,qBAAqB,CAAC,YAAY,CAAC;YAC7C;iBAAO;AACL,gBAAA,IAAI;oBACF,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC;AAC/C,oBAAA,IAAI,WAAW,KAAK,IAAI,EAAE;AACxB,wBAAA,OAAO,CAAC,qBAAqB,CAAC,WAAW,CAAC;oBAC5C;gBACF;gBAAE,OAAO,KAAK,EAAE;AACd,oBAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;gBACtB;YACF;QACF;;AAGA,QAAA,KAAK,CAAC;aACH,IAAI,CACH,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,EAClD,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,IAAI,CAAC,EACjC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,EAAE,CAAC,EAC/B,kBAAkB,CAAC,UAAU,CAAC;AAE/B,aAAA,SAAS,CAAC,CAAC,iBAAiB,KAAI;AAC/B,YAAA,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;gBACzB;YACF;AACA,YAAA,MAAM,YAAY,GAAG,WAAW,CAAC,iBAAiB,CAAC;AACnD,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AAClB,gBAAA,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC;YACpC;iBAAO;AACL,gBAAA,IAAI;oBACF,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC;AAC/C,oBAAA,IAAI,WAAW,KAAK,IAAI,EAAE;AACxB,wBAAA,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC;oBACnC;gBACF;gBAAE,OAAO,KAAK,EAAE;AACd,oBAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;gBACtB;YACF;AACF,QAAA,CAAC,CAAC;;AAGJ,QAAA,IAAI,OAAsB;AAE1B,QAAA,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AAC5B,YAAA,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC;QACxC;AAAO,aAAA,IAAI,OAAO,CAAC,MAAM,YAAY,UAAU,EAAE;AAC/C,YAAA,OAAO,GAAG,OAAO,CAAC,MAAM;QAC1B;aAAO;AACL,YAAA,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC;QACnC;AAEA,QAAA,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AAC/D,YAAA,MAAM,eAAe,GAAG,SAAS,CAAC,KAAK,CAAC;YACxC,IAAI,eAAe,KAAK,IAAI,IAAI,OAAO,EAAE,iBAAiB,EAAE,+BAA+B,EAAE;gBAC3F;YACF;YAEA,aAAa,CAAC,kBAAkB,CAAC,OAAO,CAAC,aAAa,EAAE,eAAe,EAAE;AACvE,gBAAA,GAAG,sBAAsB,CAAC,OAAO,EAAE,aAAa,CAAC;AACjD,gBAAA,mBAAmB,EAAE,OAAO,CAAC,aAAa,EAAE,mBAAmB,IAAI;AACpE,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,CAAC;AACJ;;SC/NgB,eAAe,CAAI,MAAiB,EAAE,EAAU,EAAE,QAAmB,EAAA;AACnF,IAAA,IAAI,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE;QAC5B,wBAAwB,CAAC,eAAe,CAAC;IAC3C;IACA,MAAM,gBAAgB,GAAG,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC;AAErD,IAAA,OAAO,qBAAqB,CAAC,gBAAgB,EAAE,MAAK;AAClD,QAAA,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE;AACpB,YAAA,OAAO,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC;QACpF;aAAO;AACL,YAAA,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC;QACnC;AACF,IAAA,CAAC,CAAC;AACJ;;AChBM,SAAU,aAAa,CAAC,EAAc,EAAE,QAAmB,EAAA;AAC/D,IAAA,IAAI,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE;QAC5B,wBAAwB,CAAC,aAAa,CAAC;IACzC;IACA,MAAM,gBAAgB,GAAG,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC;AAErD,IAAA,qBAAqB,CAAC,gBAAgB,EAAE,MAAK;QAC3C,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC;AAClC,IAAA,CAAC,CAAC;AACJ;;SCJgB,YAAY,CAC1B,MAAqB,EACrB,IAA0B,EAC1B,OAA6B,EAAA;IAE7B,IAAI,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE;QACrC,wBAAwB,CAAC,YAAY,CAAC;IACxC;IACA,MAAM,gBAAgB,GAAG,OAAO,EAAE,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC;AAE9D,IAAA,qBAAqB,CAAC,gBAAgB,EAAE,MAAK;AAC3C,QAAA,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,iBAAiB,KAAI;YAChE,IAAI,CAAC,iBAAiB,CAAC;AACzB,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,CAAC;AACJ;;ACnBM,SAAU,kBAAkB,CAAU,OAA2B,EAAE,QAAmB,EAAA;AAC1F,IAAA,IAAI,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE;QAC5B,wBAAwB,CAAC,kBAAkB,CAAC;IAC9C;IACA,MAAM,gBAAgB,GAAG,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC;AACrD,IAAA,qBAAqB,CAAC,gBAAgB,EAAE,MAAK;QAC3C,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,OAAO,CAAC,MAAM,EAAE,KAAK,OAAO,EAAE;AAChC,gBAAA,MAAM,OAAO,CAAC,KAAK,EAAE;YACvB;AACF,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,CAAC;AACJ;;SCEgB,qBAAqB,CACnC,MAA0B,EAC1B,UAAwC,EAAE,EAAA;IAE1C,IAAI,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;QACpC,wBAAwB,CAAC,qBAAqB,CAAC;IACjD;IACA,MAAM,gBAAgB,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC;AAE7D,IAAA,OAAO,qBAAqB,CAAC,gBAAgB,EAAE,MAAK;AAClD,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC;AAChC,YAAA,KAAK,EAAE,MAAM,CAAI,MAAM,CAAC,WAAW,EAAE,CAAC;AACtC,YAAA,MAAM,EAAE,MAAM,CAAoB,MAAM,CAAC,MAAM,CAAC;AAChD,YAAA,OAAO,EAAE,MAAM,CAAU,MAAM,CAAC,OAAO,CAAC;AACxC,YAAA,QAAQ,EAAE,MAAM,CAAU,MAAM,CAAC,QAAQ,CAAC;AAC1C,YAAA,MAAM,EAAE,MAAM,CAA0B,MAAM,CAAC,MAAM;AACtD,SAAA,CAAC;AAEF,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,KAAI;AAC9D,YAAA,IAAI,QAAQ,YAAY,gBAAgB,EAAE;gBACxC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;YACzC;AAEA,YAAA,IAAI,QAAQ,YAAY,mBAAmB,EAAE;gBAC3C,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC/C;AAEA,YAAA,IAAI,QAAQ,YAAY,kBAAkB,EAAE;gBAC1C,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC7C;AAEA,YAAA,IAAI,QAAQ,YAAY,iBAAiB,EAAE;gBACzC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACzC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;YACzC;AACF,QAAA,CAAC,CAAC;QAEF,OAAO,MAAM,CAAC,IAAI,CAAC;AACjB,YAAA,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,UAAU,EAAE;AACzC,YAAA,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,UAAU,EAAE;AACvC,YAAA,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,UAAU,EAAE;AAC3C,YAAA,SAAS,EAAE,QAAQ,CAAC,MAAK;AACvB,gBAAA,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE;AACjC,YAAA,CAAC,CAAC;AACF,YAAA,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,UAAU,EAAE;AAC7C,YAAA,KAAK,EAAE,QAAQ,CAAC,MAAK;AACnB,gBAAA,OAAO,CAAC,aAAa,CAAC,QAAQ,EAAE;AAClC,YAAA,CAAC,CAAC;AACF,YAAA,KAAK,EAAE,QAAQ,CAAC,MAAK;AACnB,gBAAA,OAAO,aAAa,CAAC,MAAM,EAAE,KAAK,OAAO;AAC3C,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,EAAE,QAAQ,CAAC,MAAK;AACrB,gBAAA,OAAO,aAAa,CAAC,MAAM,EAAE,KAAK,SAAS;AAC7C,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,EAAE,QAAQ,CAAC,MAAK;AACrB,gBAAA,OAAO,aAAa,CAAC,MAAM,EAAE,KAAK,SAAS;AAC7C,YAAA,CAAC,CAAC;AACF,YAAA,QAAQ,EAAE,QAAQ,CAAC,MAAK;AACtB,gBAAA,OAAO,aAAa,CAAC,MAAM,EAAE,KAAK,UAAU;AAC9C,YAAA,CAAC;AACF,SAAA,CAAC;AACJ,IAAA,CAAC,CAAC;AACJ;;SC/DgB,kBAAkB,GAAA;AAChC,IAAA,MAAM,0BAA0B,GAAG,MAAM,CAAU,KAAK,sEAAC;AACzD,IAAA,MAAM,YAAY,GAAG,MAAM,CAAU,KAAK,wDAAC;AAC3C,IAAA,MAAM,qBAAqB,GAAG,MAAM,CAAU,KAAK,iEAAC;AACpD,IAAA,MAAM,gBAAgB,GAAG,MAAM,CAA0B,IAAI,4DAAC;AAC9D,IAAA,MAAM,KAAK,GAAG,MAAM,CAAS,EAAE,iDAAC;AAChC,IAAA,MAAM,4BAA4B,GAAG,MAAM,CAAU,KAAK,wEAAC;AAC3D,IAAA,MAAM,0BAA0B,GAAG,MAAM,CAAU,KAAK,sEAAC;AAEzD,IAAA,MAAM,qBAAqB,GAAG,QAAQ,CAAC,MAAK;QAC1C,QAAQ,gBAAgB,EAAE;AACxB,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,QAAQ;AACjB,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,QAAQ;AACjB,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,QAAQ;AACjB,YAAA,KAAK,cAAc;AACjB,gBAAA,OAAO,cAAc;AACvB,YAAA,KAAK,cAAc;AACjB,gBAAA,OAAO,cAAc;AACvB,YAAA,KAAK,cAAc;AACjB,gBAAA,OAAO,cAAc;AACvB,YAAA;AACE,gBAAA,OAAO,EAAE;;AAEf,IAAA,CAAC,iEAAC;AAEF,IAAA,MAAM,yBAAyB,GAAG,QAAQ,CAAC,MAAK;QAC9C,OAAO,CAAA,EAAG,qBAAqB,EAAE,CAAA,CAAA,EAAI,KAAK,EAAE,CAAA,CAAE,CAAC,IAAI,EAAE;AACvD,IAAA,CAAC,qEAAC;IAEF,OAAO,MAAM,CAAC,IAAI,CAAC;QACjB,0BAA0B;QAC1B,YAAY;QACZ,qBAAqB;QACrB,gBAAgB;QAChB,KAAK;QACL,4BAA4B;QAC5B,0BAA0B;QAC1B,qBAAqB;QACrB,yBAAyB;AACzB,QAAA,QAAQ,CAAC,QAAgB,EAAA;AACvB,YAAA,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;AACnB,YAAA,OAAO,IAAI;QACb,CAAC;AAED,QAAA,mBAAmB,CAAC,IAA6B,EAAA;AAC/C,YAAA,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1B,YAAA,OAAO,IAAI;QACb,CAAC;AACD,QAAA,6BAA6B,CAAC,SAAkB,EAAA;AAC9C,YAAA,0BAA0B,CAAC,GAAG,CAAC,SAAS,CAAC;AACzC,YAAA,OAAO,IAAI;QACb,CAAC;AAED,QAAA,eAAe,CAAC,SAAkB,EAAA;AAChC,YAAA,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC;AAC3B,YAAA,OAAO,IAAI;QACb,CAAC;AAED,QAAA,wBAAwB,CAAC,SAAkB,EAAA;AACzC,YAAA,qBAAqB,CAAC,GAAG,CAAC,SAAS,CAAC;AACpC,YAAA,OAAO,IAAI;QACb,CAAC;AAED,QAAA,+BAA+B,CAAC,MAAe,EAAA;AAC7C,YAAA,4BAA4B,CAAC,GAAG,CAAC,MAAM,CAAC;AACxC,YAAA,OAAO,IAAI;QACb,CAAC;AAED,QAAA,6BAA6B,CAAC,MAAe,EAAA;AAC3C,YAAA,0BAA0B,CAAC,GAAG,CAAC,MAAM,CAAC;AACtC,YAAA,OAAO,IAAI;QACb,CAAC;QAED,QAAQ,GAAA;AACN,YAAA,0BAA0B,CAAC,GAAG,CAAC,KAAK,CAAC;AACrC,YAAA,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AACvB,YAAA,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC;AAChC,YAAA,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1B,YAAA,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AACb,YAAA,4BAA4B,CAAC,GAAG,CAAC,KAAK,CAAC;AACvC,YAAA,0BAA0B,CAAC,GAAG,CAAC,KAAK,CAAC;AACrC,YAAA,OAAO,IAAI;QACb;AACD,KAAA,CAAC;AACJ;;SCxGgB,cAAc,CAC5B,UAAqB,EACrB,EAA+D,EAC/D,OAA+B,EAAA;IAE/B,IAAI,IAAI,GAAG,KAAK;AAChB,IAAA,OAAO,MAAM,CAAC,CAAC,SAAS,KAAI;AAC1B,QAAA,MAAM,GAAG,GAAG,UAAU,EAAE;QACxB,SAAS,CAAC,MAAK;YACb,IAAI,IAAI,EAAE;AACR,gBAAA,EAAE,CAAC,GAAG,EAAE,SAAS,CAAC;YACpB;YACA,IAAI,GAAG,IAAI;AACb,QAAA,CAAC,CAAC;IACJ,CAAC,EAAE,OAAO,CAAC;AACb;;ACHM,SAAU,cAAc,CAAI,MAAiB,EAAE,OAAkC,EAAA;IACrF,IAAI,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE;QACrC,wBAAwB,CAAC,cAAc,CAAC;IAC1C;IACA,MAAM,gBAAgB,GAAG,OAAO,EAAE,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC;IAE9D,MAAM,iBAAiB,GAAG,CAAC,CAAW,EAAE,CAAW,KACjD,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;AAE1D,IAAA,OAAO,qBAAqB,CAAC,gBAAgB,EAAE,MAAK;AAClD,QAAA,MAAM,IAAI,GAAG,YAAY,CAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,MAAA,EACvB,MAAM,EAAE,MAAM;AACd,gBAAA,KAAK,EAAE,OAAO,EAAE,UAAU,IAAI,iBAAiB;AAC/C,gBAAA,WAAW,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAI;AACjC,oBAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;oBACjE,OAAO;wBACL,OAAO;AACP,wBAAA,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,OAAO,IAAI;qBACtC;AACH,gBAAA,CAAC,EAAA,CAAA,GAAA,CAToC;AACrC,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,KAAK,EAAE,OAAO,EAAE,UAAU,IAAI,iBAAiB;AAC/C,gBAAA,WAAW,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAI;AACjC,oBAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;oBACjE,OAAO;wBACL,OAAO;AACP,wBAAA,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,OAAO,IAAI;qBACtC;gBACH;AACD,aAAA,CAAA,CAAA,CAAC;AAEF,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE;AAC1B,IAAA,CAAC,CAAC;AACJ;;MC1Ba,iCAAiC,CAAA;AACnC,IAAA,iBAAiB,GAAG,KAAK,CAAC,QAAQ,4DAAe;AACjD,IAAA,gBAAgB,GAAG,KAAK,CAAC,QAAQ,2DAAU;AAC3C,IAAA,QAAQ,GAAG,KAAK,CAAS,EAAE,oDAAC;IAC5B,YAAY,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAA0B;AAEpC,IAAA,6BAA6B,GAAG,QAAQ,CAAC,MAAK;AAC/D,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAE;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE;QAE1C,OAAO;YACL,QAAQ,EAAE,CAAA,EAAG,KAAK,CAAA,aAAA,CAAe;YACjC,SAAS,EAAE,CAAA,EAAG,KAAK,CAAA,iBAAA,CAAmB;YACtC,SAAS,EAAE,CAAA,EAAG,KAAK,CAAA,gBAAA,CAAkB;YACrC,GAAG,EAAE,CAAA,EAAG,KAAK,CAAA,gBAAA,CAAkB;YAC/B,GAAG,EAAE,CAAA,EAAG,KAAK,CAAA,iBAAA,CAAmB;YAChC,KAAK,EAAE,CAAA,EAAG,KAAK,CAAA,uBAAA,CAAyB;YACxC,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,cAAA,CAAgB;AACjC,YAAA,GAAG;SACJ;AACH,IAAA,CAAC,yEAAC;wGApBS,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iCAAiC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EARlC;;;;;;AAMT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAPS,YAAY,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FASX,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAZ7C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iCAAiC;oBAC3C,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,oBAAA,QAAQ,EAAE;;;;;;AAMT,EAAA;AACF,iBAAA;;;ACfD;;AAEG;;;;"}
package/index.d.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { Signal, Injector, WritableSignal } from '@angular/core';
2
+ import { Signal, Injector, WritableSignal, EffectCleanupRegisterFn, ValueEqualityFn } from '@angular/core';
3
3
  import { NavigationExtras } from '@angular/router';
4
4
  import { Observable } from 'rxjs';
5
5
  import { HttpResourceRef } from '@angular/common/http';
6
- import { AbstractControl, ValidationErrors } from '@angular/forms';
6
+ import { AbstractControl, ValidationErrors, FormControl } from '@angular/forms';
7
7
 
8
8
  type SlimNavigationExtras = Pick<NavigationExtras, "queryParamsHandling" | "onSameUrlNavigation" | "replaceUrl" | "skipLocationChange" | "preserveFragment">;
9
9
  type ReactiveQueryParamOptions<T> = {
@@ -84,5 +84,38 @@ type SlimComponentState = {
84
84
  };
85
85
  declare function slimComponentState(): SlimComponentState;
86
86
 
87
- export { abstractControlSignal, createSignalChangeNotifier, debouncedSignal, duringDestroy, reactiveQueryParam, rxSubscriber, slimComponentState, throwResourceError };
87
+ type SlimLazyEffectOptions = {
88
+ injector?: Injector;
89
+ };
90
+ declare function slimLazyEffect<T>(dependency: Signal<T>, fn: (dependency: T, onCleanup: EffectCleanupRegisterFn) => void, options?: SlimLazyEffectOptions): _angular_core.EffectRef;
91
+
92
+ type Value<T> = {
93
+ current: T;
94
+ previous: T | null;
95
+ };
96
+ type PairwiseSignalOptions<T> = {
97
+ equalityFn?: ValueEqualityFn<Value<T>>;
98
+ injector?: Injector;
99
+ };
100
+ declare function pairwiseSignal<T>(source: Signal<T>, options?: PairwiseSignalOptions<T>): Signal<Value<T>>;
101
+
102
+ declare class ReactiveFormErrorMessageComponent {
103
+ readonly formControlToBind: _angular_core.InputSignal<FormControl<any>>;
104
+ readonly formControlLabel: _angular_core.InputSignal<string>;
105
+ readonly cssClass: _angular_core.InputSignal<string>;
106
+ readonly customErrors: _angular_core.InputSignal<Record<string, string> | undefined>;
107
+ protected readonly finalErrorsWithCodeAndMessage: _angular_core.Signal<{
108
+ required: string;
109
+ maxlength: string;
110
+ minlength: string;
111
+ min: string;
112
+ max: string;
113
+ email: string;
114
+ pattern: string;
115
+ }>;
116
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ReactiveFormErrorMessageComponent, never>;
117
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ReactiveFormErrorMessageComponent, "ngx-reactive-form-error-message", never, { "formControlToBind": { "alias": "formControlToBind"; "required": true; "isSignal": true; }; "formControlLabel": { "alias": "formControlLabel"; "required": true; "isSignal": true; }; "cssClass": { "alias": "cssClass"; "required": false; "isSignal": true; }; "customErrors": { "alias": "customErrors"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
118
+ }
119
+
120
+ export { ReactiveFormErrorMessageComponent, abstractControlSignal, createSignalChangeNotifier, debouncedSignal, duringDestroy, pairwiseSignal, reactiveQueryParam, rxSubscriber, slimComponentState, slimLazyEffect, throwResourceError };
88
121
  export type { ManipulationMode, ReactiveQueryParamOptions, RxSubscriberOptions, SignalChangeNotifier, SlimComponentState, SlimNavigationExtras };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-extra",
3
- "version": "20.1.4",
3
+ "version": "20.1.6",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^20.3.12",
6
6
  "@angular/core": "^20.3.0",