ngx-extra 21.1.4 → 21.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.
- package/fesm2022/ngx-extra.mjs +122 -40
- package/fesm2022/ngx-extra.mjs.map +1 -1
- package/package.json +1 -1
- package/types/ngx-extra.d.ts +4 -2
package/fesm2022/ngx-extra.mjs
CHANGED
|
@@ -94,10 +94,10 @@ class ReactiveQueryParamGlobalHandler {
|
|
|
94
94
|
this.navigationExtras.preserveFragment = preserveFragment;
|
|
95
95
|
}
|
|
96
96
|
}
|
|
97
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
98
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
97
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: ReactiveQueryParamGlobalHandler, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
98
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: ReactiveQueryParamGlobalHandler, providedIn: "root" });
|
|
99
99
|
}
|
|
100
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
100
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: ReactiveQueryParamGlobalHandler, decorators: [{
|
|
101
101
|
type: Injectable,
|
|
102
102
|
args: [{ providedIn: "root" }]
|
|
103
103
|
}], ctorParameters: () => [] });
|
|
@@ -410,41 +410,123 @@ function pairwiseSignal(source, options) {
|
|
|
410
410
|
});
|
|
411
411
|
}
|
|
412
412
|
|
|
413
|
+
function isStorageEnvelope(parsed) {
|
|
414
|
+
return (typeof parsed === "object" &&
|
|
415
|
+
parsed !== null &&
|
|
416
|
+
"__metadata" in parsed &&
|
|
417
|
+
typeof parsed.__metadata.expiresAt === "number" &&
|
|
418
|
+
"value" in parsed);
|
|
419
|
+
}
|
|
420
|
+
function parseStoredValue(parsed) {
|
|
421
|
+
if (!isStorageEnvelope(parsed)) {
|
|
422
|
+
return { kind: "plain", raw: parsed };
|
|
423
|
+
}
|
|
424
|
+
if (parsed.__metadata.expiresAt < Date.now()) {
|
|
425
|
+
return { kind: "expired" };
|
|
426
|
+
}
|
|
427
|
+
return { kind: "valid", value: parsed.value, expiresAt: parsed.__metadata.expiresAt };
|
|
428
|
+
}
|
|
429
|
+
function applyParse(value, parse) {
|
|
430
|
+
if (parse) {
|
|
431
|
+
return parse(value);
|
|
432
|
+
}
|
|
433
|
+
return value;
|
|
434
|
+
}
|
|
413
435
|
function reactiveLocalStorageItem(key, opts) {
|
|
414
436
|
if (isDevMode() && !opts?.injector) {
|
|
415
437
|
assertInInjectionContext(reactiveLocalStorageItem);
|
|
416
438
|
}
|
|
417
439
|
const assertedInjector = opts?.injector ?? inject(Injector);
|
|
440
|
+
const ttlEnabled = opts?.ttlMs != null;
|
|
418
441
|
return runInInjectionContext(assertedInjector, () => {
|
|
442
|
+
let expiryTimer;
|
|
443
|
+
const destroyRef = ttlEnabled || opts?.syncAcrossTabs !== false ? inject(DestroyRef) : undefined;
|
|
444
|
+
const clearExpiryTimer = () => {
|
|
445
|
+
if (expiryTimer !== undefined) {
|
|
446
|
+
clearTimeout(expiryTimer);
|
|
447
|
+
expiryTimer = undefined;
|
|
448
|
+
}
|
|
449
|
+
};
|
|
450
|
+
if (destroyRef && ttlEnabled) {
|
|
451
|
+
destroyRef.onDestroy(clearExpiryTimer);
|
|
452
|
+
}
|
|
453
|
+
let sig;
|
|
454
|
+
const expireItem = () => {
|
|
455
|
+
clearExpiryTimer();
|
|
456
|
+
localStorage.removeItem(key);
|
|
457
|
+
sig.set(opts?.defaultValue ?? null);
|
|
458
|
+
};
|
|
459
|
+
const scheduleExpiry = (expiresAt) => {
|
|
460
|
+
if (!ttlEnabled) {
|
|
461
|
+
return;
|
|
462
|
+
}
|
|
463
|
+
clearExpiryTimer();
|
|
464
|
+
const delay = expiresAt - Date.now();
|
|
465
|
+
if (delay <= 0) {
|
|
466
|
+
expireItem();
|
|
467
|
+
return;
|
|
468
|
+
}
|
|
469
|
+
expiryTimer = setTimeout(() => expireItem(), delay);
|
|
470
|
+
};
|
|
419
471
|
const readFromStorage = () => {
|
|
420
472
|
const raw = localStorage.getItem(key);
|
|
421
|
-
if (raw === null)
|
|
473
|
+
if (raw === null) {
|
|
474
|
+
return opts?.defaultValue ?? null;
|
|
475
|
+
}
|
|
476
|
+
const parsed = parseStoredValue(JSON.parse(raw));
|
|
477
|
+
if (parsed.kind === "expired") {
|
|
478
|
+
localStorage.removeItem(key);
|
|
422
479
|
return opts?.defaultValue ?? null;
|
|
423
|
-
|
|
424
|
-
|
|
480
|
+
}
|
|
481
|
+
if (parsed.kind === "valid" && parsed.expiresAt !== undefined) {
|
|
482
|
+
scheduleExpiry(parsed.expiresAt);
|
|
483
|
+
return applyParse(parsed.value, opts?.parse);
|
|
484
|
+
}
|
|
485
|
+
return applyParse(parsed.kind === "plain" ? parsed.raw : parsed.value, opts?.parse);
|
|
425
486
|
};
|
|
426
|
-
const
|
|
427
|
-
effect(() => {
|
|
428
|
-
const value = sig();
|
|
487
|
+
const writeToStorage = (value) => {
|
|
429
488
|
if (value === null || value === undefined) {
|
|
489
|
+
clearExpiryTimer();
|
|
430
490
|
localStorage.removeItem(key);
|
|
491
|
+
return;
|
|
431
492
|
}
|
|
432
|
-
|
|
493
|
+
if (!ttlEnabled) {
|
|
433
494
|
localStorage.setItem(key, JSON.stringify(value));
|
|
495
|
+
return;
|
|
434
496
|
}
|
|
497
|
+
const expiresAt = Date.now() + opts.ttlMs;
|
|
498
|
+
const envelope = {
|
|
499
|
+
__metadata: { expiresAt },
|
|
500
|
+
value
|
|
501
|
+
};
|
|
502
|
+
localStorage.setItem(key, JSON.stringify(envelope));
|
|
503
|
+
scheduleExpiry(expiresAt);
|
|
504
|
+
};
|
|
505
|
+
sig = signal(readFromStorage());
|
|
506
|
+
effect(() => {
|
|
507
|
+
writeToStorage(sig());
|
|
435
508
|
});
|
|
436
|
-
if (opts?.syncAcrossTabs !== false) {
|
|
437
|
-
const destroyRef = inject(DestroyRef);
|
|
509
|
+
if (opts?.syncAcrossTabs !== false && destroyRef) {
|
|
438
510
|
const onStorageChange = (event) => {
|
|
439
|
-
if (event.key !== key)
|
|
511
|
+
if (event.key !== key) {
|
|
440
512
|
return;
|
|
441
|
-
if (event.newValue !== null) {
|
|
442
|
-
const parsed = JSON.parse(event.newValue);
|
|
443
|
-
sig.set(opts?.parse ? opts.parse(parsed) : parsed);
|
|
444
513
|
}
|
|
445
|
-
|
|
514
|
+
if (event.newValue === null) {
|
|
515
|
+
clearExpiryTimer();
|
|
446
516
|
sig.set(opts?.defaultValue ?? null);
|
|
517
|
+
return;
|
|
518
|
+
}
|
|
519
|
+
const parsed = parseStoredValue(JSON.parse(event.newValue));
|
|
520
|
+
if (parsed.kind === "expired") {
|
|
521
|
+
expireItem();
|
|
522
|
+
return;
|
|
447
523
|
}
|
|
524
|
+
if (parsed.kind === "valid" && parsed.expiresAt !== undefined) {
|
|
525
|
+
scheduleExpiry(parsed.expiresAt);
|
|
526
|
+
sig.set(applyParse(parsed.value, opts?.parse));
|
|
527
|
+
return;
|
|
528
|
+
}
|
|
529
|
+
sig.set(applyParse(parsed.kind === "plain" ? parsed.raw : parsed.value, opts?.parse));
|
|
448
530
|
};
|
|
449
531
|
window.addEventListener("storage", onStorageChange);
|
|
450
532
|
destroyRef.onDestroy(() => window.removeEventListener("storage", onStorageChange));
|
|
@@ -472,27 +554,27 @@ class ReactiveFormErrorMessageComponent {
|
|
|
472
554
|
...customKv
|
|
473
555
|
};
|
|
474
556
|
}, ...(ngDevMode ? [{ debugName: "finalErrorsWithCodeAndMessage" }] : /* istanbul ignore next */ []));
|
|
475
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
476
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
477
|
-
@for (item of finalErrorsWithCodeAndMessage() | keyvalue; track item.key) {
|
|
478
|
-
@if (formControlToBind().errors?.[item.key]) {
|
|
479
|
-
<small [class]="cssClass()">{{ item.value }}</small>
|
|
480
|
-
}
|
|
481
|
-
}
|
|
557
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: ReactiveFormErrorMessageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
558
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.12", 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: `
|
|
559
|
+
@for (item of finalErrorsWithCodeAndMessage() | keyvalue; track item.key) {
|
|
560
|
+
@if (formControlToBind().errors?.[item.key]) {
|
|
561
|
+
<small [class]="cssClass()">{{ item.value }}</small>
|
|
562
|
+
}
|
|
563
|
+
}
|
|
482
564
|
`, isInline: true, dependencies: [{ kind: "pipe", type: KeyValuePipe, name: "keyvalue" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
483
565
|
}
|
|
484
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
566
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: ReactiveFormErrorMessageComponent, decorators: [{
|
|
485
567
|
type: Component,
|
|
486
568
|
args: [{
|
|
487
569
|
selector: "ngx-reactive-form-error-message",
|
|
488
570
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
489
571
|
imports: [KeyValuePipe],
|
|
490
|
-
template: `
|
|
491
|
-
@for (item of finalErrorsWithCodeAndMessage() | keyvalue; track item.key) {
|
|
492
|
-
@if (formControlToBind().errors?.[item.key]) {
|
|
493
|
-
<small [class]="cssClass()">{{ item.value }}</small>
|
|
494
|
-
}
|
|
495
|
-
}
|
|
572
|
+
template: `
|
|
573
|
+
@for (item of finalErrorsWithCodeAndMessage() | keyvalue; track item.key) {
|
|
574
|
+
@if (formControlToBind().errors?.[item.key]) {
|
|
575
|
+
<small [class]="cssClass()">{{ item.value }}</small>
|
|
576
|
+
}
|
|
577
|
+
}
|
|
496
578
|
`
|
|
497
579
|
}]
|
|
498
580
|
}], 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 }] }] } });
|
|
@@ -504,10 +586,10 @@ class MemoizeFnPipe {
|
|
|
504
586
|
}
|
|
505
587
|
return handler(value);
|
|
506
588
|
}
|
|
507
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
508
|
-
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.
|
|
589
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: MemoizeFnPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
590
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.12", ngImport: i0, type: MemoizeFnPipe, isStandalone: true, name: "ngxMemoizeFn" });
|
|
509
591
|
}
|
|
510
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
592
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: MemoizeFnPipe, decorators: [{
|
|
511
593
|
type: Pipe,
|
|
512
594
|
args: [{
|
|
513
595
|
name: "ngxMemoizeFn"
|
|
@@ -545,10 +627,10 @@ class TimeOnlyPipe {
|
|
|
545
627
|
return `${hours}:${minutes}:${seconds} ${period}`;
|
|
546
628
|
}
|
|
547
629
|
}
|
|
548
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
549
|
-
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.
|
|
630
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: TimeOnlyPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
631
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.12", ngImport: i0, type: TimeOnlyPipe, isStandalone: true, name: "ngxTimeOnly" });
|
|
550
632
|
}
|
|
551
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
633
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: TimeOnlyPipe, decorators: [{
|
|
552
634
|
type: Pipe,
|
|
553
635
|
args: [{
|
|
554
636
|
name: "ngxTimeOnly"
|
|
@@ -592,10 +674,10 @@ class ToggleValidationErrorAreaDirective {
|
|
|
592
674
|
this.hasView = false;
|
|
593
675
|
}
|
|
594
676
|
}
|
|
595
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
596
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.
|
|
677
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: ToggleValidationErrorAreaDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
678
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.12", type: ToggleValidationErrorAreaDirective, isStandalone: true, selector: "[ToggleValidationErrorArea]", inputs: { ToggleValidationErrorArea: "ToggleValidationErrorArea" }, ngImport: i0 });
|
|
597
679
|
}
|
|
598
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
680
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: ToggleValidationErrorAreaDirective, decorators: [{
|
|
599
681
|
type: Directive,
|
|
600
682
|
args: [{
|
|
601
683
|
selector: "[ToggleValidationErrorArea]",
|
|
@@ -1 +1 @@
|
|
|
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/during-destroy.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/pairwise-signal.ts","../../../projects/ngx-extra/src/lib/utils/reactive-local-storage-item.ts","../../../projects/ngx-extra/src/lib/components/reactive-form-error-message.component.ts","../../../projects/ngx-extra/src/lib/pipes/memoize-fn.pipe.ts","../../../projects/ngx-extra/src/lib/pipes/time-only.pipe.ts","../../../projects/ngx-extra/src/lib/directives/toggle-validation-error-area.directive.ts","../../../projects/ngx-extra/src/ngx-extra.ts"],"sourcesContent":["import { Signal, signal } from \"@angular/core\";\n\n/**\n * A small notifier that exposes a readonly signal which increments when\n * `notify()` is called. Consumers can subscribe to `listen` to detect\n * changes (the value is a monotonically increasing counter or `null`).\n */\nexport type SignalChangeNotifier = {\n /**\n * Triggers a change notification. Each call increments the internal counter.\n */\n notify: () => void;\n /**\n * Readonly signal that yields the current counter value or `null` before\n * the first notification. Useful for change detection and subscriptions.\n */\n listen: Signal<number | null>;\n};\n\n/**\n * Creates a `SignalChangeNotifier`.\n *\n * Usage:\n * - Call `notify()` whenever you want listeners to react to a change.\n * - Read `listen` readonly signal from components or services to respond.\n *\n * The implementation uses a numeric counter so consumers can detect repeated\n * notifications and ignore identical updates if needed.\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","/**\n * Removes all null and undefined values from an object.\n * @param obj - The object to clean. If null or undefined, returns an empty object.\n * @returns A new object with all nullish values filtered out.\n */\nexport function cleanNullishFromObject(obj?: object): Record<string, any> {\n if (obj == null) return {};\n return Object.fromEntries(Object.entries(obj).filter(([, v]) => v != null));\n}\n\n/**\n * Checks if an object contains any null or undefined values.\n * @param obj - The object to check. If null or undefined, returns false.\n * @returns True if the object contains at least one nullish value, false otherwise.\n */\nexport function hasNullishInObject(obj?: object): boolean {\n if (obj == null) return false;\n return Object.values(obj).some((val) => val == null);\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 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 { HttpResourceRef } from \"@angular/common/http\";\nimport {\n Injector,\n assertInInjectionContext,\n inject,\n runInInjectionContext,\n effect,\n isDevMode,\n untracked\n} from \"@angular/core\";\n\n/**\n * Subscribe to a resource and re-throw its error inside an Angular effect.\n *\n * Important: Before accessing the `value()` of a resource, always do conditional check by `hasValue()`.\n * Otherwise `throwResourceError` can lead to infinite loop.\n *\n * @param resorce The `HttpResourceRef<T>` to observe for errors.\n * @param injector Optional `Injector` to run the effect in (defaults to current injection context).\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 untracked(() => {\n throw resorce.error();\n });\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, toSignal } from \"@angular/core/rxjs-interop\";\nimport {\n AbstractControl,\n FormControlStatus,\n FormResetEvent,\n PristineChangeEvent,\n StatusChangeEvent,\n TouchedChangeEvent,\n ValidationErrors,\n ValueChangeEvent\n} from \"@angular/forms\";\nimport { map } from \"rxjs\";\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(source.getRawValue());\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 reset: toSignal(source.events.pipe(map((e) => e instanceof FormResetEvent)), {\n initialValue: false\n }),\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 {\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 {\r\n assertInInjectionContext,\r\n DestroyRef,\r\n effect,\r\n inject,\r\n Injector,\r\n isDevMode,\r\n runInInjectionContext,\r\n signal,\r\n type WritableSignal\r\n} from \"@angular/core\";\r\n\r\nexport type ReactiveLocalStorageItemOptions<T> = {\r\n defaultValue?: T;\r\n parse?: (raw: unknown) => T;\r\n syncAcrossTabs?: boolean;\r\n injector?: Injector;\r\n};\r\n\r\nexport function reactiveLocalStorageItem<T>(\r\n key: string,\r\n opts?: ReactiveLocalStorageItemOptions<T>\r\n): WritableSignal<T | null> {\r\n if (isDevMode() && !opts?.injector) {\r\n assertInInjectionContext(reactiveLocalStorageItem);\r\n }\r\n\r\n const assertedInjector = opts?.injector ?? inject(Injector);\r\n\r\n return runInInjectionContext(assertedInjector, () => {\r\n const readFromStorage = (): T | null => {\r\n const raw = localStorage.getItem(key);\r\n if (raw === null) return opts?.defaultValue ?? null;\r\n\r\n const parsed = JSON.parse(raw);\r\n return opts?.parse ? opts.parse(parsed) : (parsed as T);\r\n };\r\n\r\n const sig = signal<T | null>(readFromStorage());\r\n\r\n effect(() => {\r\n const value = sig();\r\n if (value === null || value === undefined) {\r\n localStorage.removeItem(key);\r\n } else {\r\n localStorage.setItem(key, JSON.stringify(value));\r\n }\r\n });\r\n\r\n if (opts?.syncAcrossTabs !== false) {\r\n const destroyRef = inject(DestroyRef);\r\n\r\n const onStorageChange = (event: StorageEvent) => {\r\n if (event.key !== key) return;\r\n\r\n if (event.newValue !== null) {\r\n const parsed = JSON.parse(event.newValue);\r\n sig.set(opts?.parse ? opts.parse(parsed) : (parsed as T));\r\n } else {\r\n sig.set(opts?.defaultValue ?? null);\r\n }\r\n };\r\n\r\n window.addEventListener(\"storage\", onStorageChange);\r\n destroyRef.onDestroy(() => window.removeEventListener(\"storage\", onStorageChange));\r\n }\r\n\r\n return sig;\r\n });\r\n}\r\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","import { Pipe, type PipeTransform } from \"@angular/core\";\r\n\r\n@Pipe({\r\n name: \"ngxMemoizeFn\"\r\n})\r\nexport class MemoizeFnPipe implements PipeTransform {\r\n public transform<T, R>(value: T, handler: (value: T) => R, context?: unknown): R {\r\n if (context) {\r\n return handler.call(context, value);\r\n }\r\n\r\n return handler(value);\r\n }\r\n}\r\n","import { Pipe, type PipeTransform } from \"@angular/core\";\n\n@Pipe({\n name: \"ngxTimeOnly\"\n})\nexport class TimeOnlyPipe implements PipeTransform {\n transform(\n value: string | Date | null | undefined,\n format: \"shortTime\" | \"mediumTime\" = \"shortTime\"\n ): string | null {\n if (value == null || value === \"\") {\n return null;\n }\n\n let hours: number;\n let minutes: string;\n let seconds: string;\n\n if (value instanceof Date) {\n hours = value.getHours();\n minutes = String(value.getMinutes()).padStart(2, \"0\");\n seconds = String(value.getSeconds()).padStart(2, \"0\");\n } else {\n const timeParts = value.split(\":\");\n if (timeParts.length < 2) {\n return null;\n }\n hours = parseInt(timeParts[0], 10);\n minutes = timeParts[1];\n seconds = (timeParts[2] || \"00\").split(\".\")[0];\n }\n\n const period = hours >= 12 ? \"PM\" : \"AM\";\n hours = hours % 12 || 12;\n\n if (format === \"shortTime\") {\n return `${hours}:${minutes} ${period}`;\n } else {\n return `${hours}:${minutes}:${seconds} ${period}`;\n }\n }\n}\n","import { DestroyRef, Directive, Input, TemplateRef, ViewContainerRef } from \"@angular/core\";\nimport { AbstractControl, ValidationErrors } from \"@angular/forms\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport { merge, Subscription } from \"rxjs\";\n\ninterface ErrorContext {\n $implicit: ValidationErrors | null;\n control: AbstractControl;\n}\n\n@Directive({\n selector: \"[ToggleValidationErrorArea]\",\n standalone: true\n})\nexport class ToggleValidationErrorAreaDirective {\n constructor(\n private readonly templateRef: TemplateRef<ErrorContext>,\n private readonly viewContainer: ViewContainerRef,\n private readonly destroyRef: DestroyRef\n ) {}\n\n private hasView = false;\n private subscription: Subscription | null = null;\n\n @Input({ required: true }) set ToggleValidationErrorArea(control: AbstractControl) {\n if (!control) return;\n\n this.subscription?.unsubscribe();\n this.subscription = merge(control.statusChanges, control.valueChanges)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.updateView(control));\n\n this.updateView(control);\n }\n\n static ngTemplateContextGuard(\n _dir: ToggleValidationErrorAreaDirective,\n ctx: unknown\n ): ctx is ErrorContext {\n return true;\n }\n\n private updateView(control: AbstractControl) {\n const hasError = control.invalid && (control.dirty || control.touched);\n\n if (hasError && !this.hasView) {\n this.viewContainer.createEmbeddedView<ErrorContext>(this.templateRef, {\n $implicit: control.errors,\n control\n });\n this.hasView = true;\n } else if (!hasError && this.hasView) {\n this.viewContainer.clear();\n this.hasView = false;\n }\n }\n}\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/during-destroy.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/pairwise-signal.ts","../../../projects/ngx-extra/src/lib/utils/reactive-local-storage-item.ts","../../../projects/ngx-extra/src/lib/components/reactive-form-error-message.component.ts","../../../projects/ngx-extra/src/lib/pipes/memoize-fn.pipe.ts","../../../projects/ngx-extra/src/lib/pipes/time-only.pipe.ts","../../../projects/ngx-extra/src/lib/directives/toggle-validation-error-area.directive.ts","../../../projects/ngx-extra/src/ngx-extra.ts"],"sourcesContent":["import { Signal, signal } from \"@angular/core\";\r\n\r\n/**\r\n * A small notifier that exposes a readonly signal which increments when\r\n * `notify()` is called. Consumers can subscribe to `listen` to detect\r\n * changes (the value is a monotonically increasing counter or `null`).\r\n */\r\nexport type SignalChangeNotifier = {\r\n /**\r\n * Triggers a change notification. Each call increments the internal counter.\r\n */\r\n notify: () => void;\r\n /**\r\n * Readonly signal that yields the current counter value or `null` before\r\n * the first notification. Useful for change detection and subscriptions.\r\n */\r\n listen: Signal<number | null>;\r\n};\r\n\r\n/**\r\n * Creates a `SignalChangeNotifier`.\r\n *\r\n * Usage:\r\n * - Call `notify()` whenever you want listeners to react to a change.\r\n * - Read `listen` readonly signal from components or services to respond.\r\n *\r\n * The implementation uses a numeric counter so consumers can detect repeated\r\n * notifications and ignore identical updates if needed.\r\n */\r\nexport function createSignalChangeNotifier() {\r\n const sourceSignal = signal<number | null>(null);\r\n\r\n return Object.seal({\r\n notify: () => {\r\n sourceSignal.update((v) => (v === null ? 1 : v + 1));\r\n },\r\n listen: sourceSignal.asReadonly()\r\n }) satisfies SignalChangeNotifier;\r\n}\r\n","/**\r\n * Removes all null and undefined values from an object.\r\n * @param obj - The object to clean. If null or undefined, returns an empty object.\r\n * @returns A new object with all nullish values filtered out.\r\n */\r\nexport function cleanNullishFromObject(obj?: object): Record<string, any> {\r\n if (obj == null) return {};\r\n return Object.fromEntries(Object.entries(obj).filter(([, v]) => v != null));\r\n}\r\n\r\n/**\r\n * Checks if an object contains any null or undefined values.\r\n * @param obj - The object to check. If null or undefined, returns false.\r\n * @returns True if the object contains at least one nullish value, false otherwise.\r\n */\r\nexport function hasNullishInObject(obj?: object): boolean {\r\n if (obj == null) return false;\r\n return Object.values(obj).some((val) => val == null);\r\n}\r\n","import {\r\n DestroyRef,\r\n Injectable,\r\n Injector,\r\n Signal,\r\n assertInInjectionContext,\r\n effect,\r\n inject,\r\n isDevMode,\r\n isSignal,\r\n runInInjectionContext,\r\n untracked\r\n} from \"@angular/core\";\r\nimport { takeUntilDestroyed, toObservable } from \"@angular/core/rxjs-interop\";\r\nimport { ActivatedRoute, NavigationExtras, Router } from \"@angular/router\";\r\nimport LzString from \"lz-string\";\r\nimport { Observable, filter, map } from \"rxjs\";\r\nimport { createSignalChangeNotifier } from \"./create-signal-change-notifier\";\r\nimport { cleanNullishFromObject } from \"../helpers\";\r\n\r\nexport type SlimNavigationExtras = Pick<\r\n NavigationExtras,\r\n | \"queryParamsHandling\"\r\n | \"onSameUrlNavigation\"\r\n | \"replaceUrl\"\r\n | \"skipLocationChange\"\r\n | \"preserveFragment\"\r\n>;\r\n\r\nexport type ReactiveQueryParamOptions<T> = {\r\n queryParamKey: string;\r\n source: Signal<T> | Observable<T>;\r\n parse?: (rawData: any) => T | null;\r\n handleInitialSnapshot?: (payload: T) => void;\r\n handleStream?: (payload: T) => void;\r\n injector?: Injector;\r\n routerOptions?: SlimNavigationExtras;\r\n base64EncodingOptions?: {\r\n disableEncoding?: boolean;\r\n disableJsonStringifyWhenNoEncoding?: boolean;\r\n };\r\n queryParamOptions?: {\r\n blackListedValues?: any[];\r\n preserveStaleOnBlacklistedValue?: boolean;\r\n };\r\n};\r\n\r\n@Injectable({ providedIn: \"root\" })\r\nclass ReactiveQueryParamGlobalHandler {\r\n private router = inject(Router);\r\n\r\n private schedulerNotifier = createSignalChangeNotifier();\r\n private currentKeys: Record<string, string | null> = {};\r\n private navigationExtras: SlimNavigationExtras = {};\r\n\r\n constructor() {\r\n effect(() => {\r\n if (!this.schedulerNotifier.listen()) {\r\n return;\r\n }\r\n untracked(() => {\r\n this.router\r\n .navigate([], {\r\n queryParams: this.currentKeys,\r\n ...this.navigationExtras\r\n })\r\n .then(() => {\r\n this.currentKeys = {};\r\n this.navigationExtras = {};\r\n });\r\n });\r\n });\r\n }\r\n\r\n scheduleNavigation(key: string, value: string | null, navOptions: SlimNavigationExtras) {\r\n this.currentKeys[key] = value;\r\n this.setCurrentNavigationExtras(navOptions);\r\n this.schedulerNotifier.notify();\r\n }\r\n\r\n private setCurrentNavigationExtras(config: Partial<SlimNavigationExtras> = {}) {\r\n const {\r\n queryParamsHandling,\r\n onSameUrlNavigation,\r\n replaceUrl,\r\n skipLocationChange,\r\n preserveFragment\r\n } = config;\r\n\r\n if (queryParamsHandling || queryParamsHandling === \"\") {\r\n this.navigationExtras.queryParamsHandling = queryParamsHandling;\r\n }\r\n if (onSameUrlNavigation) {\r\n this.navigationExtras.onSameUrlNavigation = onSameUrlNavigation;\r\n }\r\n if (replaceUrl) {\r\n this.navigationExtras.replaceUrl = replaceUrl;\r\n }\r\n if (skipLocationChange) {\r\n this.navigationExtras.skipLocationChange = skipLocationChange;\r\n }\r\n if (preserveFragment) {\r\n this.navigationExtras.preserveFragment = preserveFragment;\r\n }\r\n }\r\n}\r\n\r\nexport function reactiveQueryParam<T>(options: ReactiveQueryParamOptions<T>) {\r\n if (isDevMode() && !options?.injector) {\r\n assertInInjectionContext(reactiveQueryParam);\r\n }\r\n\r\n const assertedInjector = options.injector ?? inject(Injector);\r\n\r\n const blackList = options.queryParamOptions?.blackListedValues ?? [null, undefined, \"\"];\r\n\r\n const useEncoding = !options?.base64EncodingOptions?.disableEncoding;\r\n\r\n const useStringifyOnNoEncoding =\r\n !options?.base64EncodingOptions?.disableJsonStringifyWhenNoEncoding;\r\n\r\n const deserialize = (payload: string): T => {\r\n if (useEncoding) {\r\n const decoded = LzString.decompressFromEncodedURIComponent(payload);\r\n return JSON.parse(decoded);\r\n }\r\n\r\n if (!useEncoding && useStringifyOnNoEncoding) {\r\n return JSON.parse(payload);\r\n } else {\r\n try {\r\n return JSON.parse(payload);\r\n } catch {\r\n return payload as T;\r\n }\r\n }\r\n };\r\n\r\n const serialize = (value: T | null | undefined): string | null => {\r\n if (blackList.some((elem) => elem === value)) {\r\n return null;\r\n }\r\n if (useEncoding) {\r\n return LzString.compressToEncodedURIComponent(JSON.stringify(value));\r\n }\r\n\r\n if (!useEncoding && useStringifyOnNoEncoding) {\r\n return JSON.stringify(value);\r\n } else {\r\n if (typeof value === \"string\") {\r\n return value;\r\n } else {\r\n return JSON.stringify(value);\r\n }\r\n }\r\n };\r\n\r\n runInInjectionContext(assertedInjector, () => {\r\n const globalHandler = inject(ReactiveQueryParamGlobalHandler);\r\n const route = inject(ActivatedRoute);\r\n const destroyRef = inject(DestroyRef);\r\n\r\n // Handle initial snapshot\r\n const payloadFromSnapshot = route.snapshot.queryParamMap.get(options.queryParamKey);\r\n\r\n if (\r\n payloadFromSnapshot !== null &&\r\n payloadFromSnapshot !== \"\" &&\r\n options.handleInitialSnapshot\r\n ) {\r\n const deserialized = deserialize(payloadFromSnapshot);\r\n if (!options.parse) {\r\n options.handleInitialSnapshot(deserialized);\r\n } else {\r\n try {\r\n const parsedValue = options.parse(deserialized);\r\n if (parsedValue !== null) {\r\n options.handleInitialSnapshot(parsedValue);\r\n }\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n }\r\n }\r\n\r\n // Handle query param stream\r\n route.queryParamMap\r\n .pipe(\r\n map((params) => params.get(options.queryParamKey)),\r\n filter((value) => value !== null),\r\n filter((value) => value !== \"\"),\r\n takeUntilDestroyed(destroyRef)\r\n )\r\n .subscribe((payloadFromStream) => {\r\n if (!options.handleStream) {\r\n return;\r\n }\r\n const deserialized = deserialize(payloadFromStream);\r\n if (!options.parse) {\r\n options.handleStream(deserialized);\r\n } else {\r\n try {\r\n const parsedValue = options.parse(deserialized);\r\n if (parsedValue !== null) {\r\n options.handleStream(parsedValue);\r\n }\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n }\r\n });\r\n\r\n // Handle source changes\r\n let source$: Observable<T>;\r\n\r\n if (isSignal(options.source)) {\r\n source$ = toObservable(options.source);\r\n } else if (options.source instanceof Observable) {\r\n source$ = options.source;\r\n } else {\r\n throw new Error(\"Invalid source\");\r\n }\r\n\r\n source$.pipe(takeUntilDestroyed(destroyRef)).subscribe((value) => {\r\n const serializedValue = serialize(value);\r\n if (serializedValue === null && options?.queryParamOptions?.preserveStaleOnBlacklistedValue) {\r\n return;\r\n }\r\n\r\n globalHandler.scheduleNavigation(options.queryParamKey, serializedValue, {\r\n ...cleanNullishFromObject(options?.routerOptions),\r\n queryParamsHandling: options.routerOptions?.queryParamsHandling ?? \"merge\"\r\n });\r\n });\r\n });\r\n}\r\n","import {\r\n Injector,\r\n isDevMode,\r\n assertInInjectionContext,\r\n inject,\r\n runInInjectionContext,\r\n DestroyRef\r\n} from \"@angular/core\";\r\n\r\nexport function duringDestroy(fn: () => void, injector?: Injector) {\r\n if (isDevMode() && !injector) {\r\n assertInInjectionContext(duringDestroy);\r\n }\r\n const assertedInjector = injector ?? inject(Injector);\r\n\r\n runInInjectionContext(assertedInjector, () => {\r\n inject(DestroyRef).onDestroy(fn);\r\n });\r\n}\r\n","import { HttpResourceRef } from \"@angular/common/http\";\r\nimport {\r\n Injector,\r\n assertInInjectionContext,\r\n inject,\r\n runInInjectionContext,\r\n effect,\r\n isDevMode,\r\n untracked\r\n} from \"@angular/core\";\r\n\r\n/**\r\n * Subscribe to a resource and re-throw its error inside an Angular effect.\r\n *\r\n * Important: Before accessing the `value()` of a resource, always do conditional check by `hasValue()`.\r\n * Otherwise `throwResourceError` can lead to infinite loop.\r\n *\r\n * @param resorce The `HttpResourceRef<T>` to observe for errors.\r\n * @param injector Optional `Injector` to run the effect in (defaults to current injection context).\r\n */\r\nexport function throwResourceError<T = any>(resorce: HttpResourceRef<T>, injector?: Injector) {\r\n if (isDevMode() && !injector) {\r\n assertInInjectionContext(throwResourceError);\r\n }\r\n const assertedInjector = injector ?? inject(Injector);\r\n runInInjectionContext(assertedInjector, () => {\r\n effect(() => {\r\n if (resorce.status() === \"error\") {\r\n untracked(() => {\r\n throw resorce.error();\r\n });\r\n }\r\n });\r\n });\r\n}\r\n","import {\r\n assertInInjectionContext,\r\n computed,\r\n inject,\r\n Injector,\r\n isDevMode,\r\n runInInjectionContext,\r\n signal\r\n} from \"@angular/core\";\r\nimport { takeUntilDestroyed, toSignal } from \"@angular/core/rxjs-interop\";\r\nimport {\r\n AbstractControl,\r\n FormControlStatus,\r\n FormResetEvent,\r\n PristineChangeEvent,\r\n StatusChangeEvent,\r\n TouchedChangeEvent,\r\n ValidationErrors,\r\n ValueChangeEvent\r\n} from \"@angular/forms\";\r\nimport { map } from \"rxjs\";\r\n\r\ntype AbstractControlSignalOptions = {\r\n injector?: Injector;\r\n};\r\n\r\nexport function abstractControlSignal<TValue, TRawValue extends TValue = TValue>(\r\n source: AbstractControl<TValue, TRawValue>,\r\n options?: AbstractControlSignalOptions\r\n) {\r\n if (isDevMode() && !options?.injector) {\r\n assertInInjectionContext(abstractControlSignal);\r\n }\r\n const assertedInjector = options?.injector ?? inject(Injector);\r\n\r\n return runInInjectionContext(assertedInjector, () => {\r\n const internalState = Object.seal({\r\n value: signal<TRawValue>(source.getRawValue()),\r\n status: signal<FormControlStatus>(source.status),\r\n touched: signal<boolean>(source.touched),\r\n pristine: signal<boolean>(source.pristine),\r\n errors: signal<ValidationErrors | null>(source.errors)\r\n });\r\n\r\n source.events.pipe(takeUntilDestroyed()).subscribe((newEvent) => {\r\n if (newEvent instanceof ValueChangeEvent) {\r\n internalState.value.set(source.getRawValue());\r\n }\r\n\r\n if (newEvent instanceof PristineChangeEvent) {\r\n internalState.pristine.set(newEvent.pristine);\r\n }\r\n\r\n if (newEvent instanceof TouchedChangeEvent) {\r\n internalState.touched.set(newEvent.touched);\r\n }\r\n\r\n if (newEvent instanceof StatusChangeEvent) {\r\n internalState.status.set(newEvent.status);\r\n internalState.errors.set(source.errors);\r\n }\r\n });\r\n\r\n return Object.seal({\r\n errors: internalState.errors.asReadonly(),\r\n value: internalState.value.asReadonly(),\r\n reset: toSignal(source.events.pipe(map((e) => e instanceof FormResetEvent)), {\r\n initialValue: false\r\n }),\r\n touched: internalState.touched.asReadonly(),\r\n untouched: computed(() => {\r\n return !internalState.touched();\r\n }),\r\n pristine: internalState.pristine.asReadonly(),\r\n dirty: computed(() => {\r\n return !internalState.pristine();\r\n }),\r\n valid: computed(() => {\r\n return internalState.status() === \"VALID\";\r\n }),\r\n invalid: computed(() => {\r\n return internalState.status() === \"INVALID\";\r\n }),\r\n pending: computed(() => {\r\n return internalState.status() === \"PENDING\";\r\n }),\r\n disabled: computed(() => {\r\n return internalState.status() === \"DISABLED\";\r\n })\r\n });\r\n });\r\n}\r\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 {\r\n assertInInjectionContext,\r\n inject,\r\n Injector,\r\n isDevMode,\r\n linkedSignal,\r\n runInInjectionContext,\r\n Signal,\r\n ValueEqualityFn\r\n} from \"@angular/core\";\r\n\r\ntype Value<T> = { current: T; previous: T | null };\r\n\r\ntype PairwiseSignalOptions<T> = {\r\n equalityFn?: ValueEqualityFn<Value<T>>;\r\n injector?: Injector;\r\n};\r\n\r\nexport function pairwiseSignal<T>(source: Signal<T>, options?: PairwiseSignalOptions<T>) {\r\n if (isDevMode() && !options?.injector) {\r\n assertInInjectionContext(pairwiseSignal);\r\n }\r\n const assertedInjector = options?.injector ?? inject(Injector);\r\n\r\n const defaultEqualityFn = (a: Value<T>, b: Value<T>) =>\r\n JSON.stringify(a.previous) === JSON.stringify(b.current);\r\n\r\n return runInInjectionContext(assertedInjector, () => {\r\n const pair = linkedSignal<T, Value<T>>({\r\n source: source,\r\n equal: options?.equalityFn ?? defaultEqualityFn,\r\n computation: (current, previous) => {\r\n console.log(JSON.stringify(previous) === JSON.stringify(current));\r\n return {\r\n current,\r\n previous: previous?.value.current ?? null\r\n };\r\n }\r\n });\r\n\r\n return pair.asReadonly();\r\n });\r\n}\r\n","import {\r\n assertInInjectionContext,\r\n DestroyRef,\r\n effect,\r\n inject,\r\n Injector,\r\n isDevMode,\r\n runInInjectionContext,\r\n signal,\r\n type WritableSignal\r\n} from \"@angular/core\";\r\n\r\ntype StorageEnvelope<T> = {\r\n __metadata: { expiresAt: number };\r\n value: T;\r\n};\r\n\r\ntype ParsedStorage =\r\n | { kind: \"plain\"; raw: unknown }\r\n | { kind: \"valid\"; value: unknown; expiresAt?: number }\r\n | { kind: \"expired\" };\r\n\r\nexport type ReactiveLocalStorageItemOptions<T> = {\r\n defaultValue?: T;\r\n parse?: (raw: unknown) => T;\r\n syncAcrossTabs?: boolean;\r\n injector?: Injector;\r\n /** TTL in milliseconds. Must be specified to enable expiry; omit for plain JSON storage. */\r\n ttlMs?: number;\r\n};\r\n\r\nfunction isStorageEnvelope(parsed: unknown): parsed is StorageEnvelope<unknown> {\r\n return (\r\n typeof parsed === \"object\" &&\r\n parsed !== null &&\r\n \"__metadata\" in parsed &&\r\n typeof (parsed as StorageEnvelope<unknown>).__metadata.expiresAt === \"number\" &&\r\n \"value\" in parsed\r\n );\r\n}\r\n\r\nfunction parseStoredValue(parsed: unknown): ParsedStorage {\r\n if (!isStorageEnvelope(parsed)) {\r\n return { kind: \"plain\", raw: parsed };\r\n }\r\n\r\n if (parsed.__metadata.expiresAt < Date.now()) {\r\n return { kind: \"expired\" };\r\n }\r\n\r\n return { kind: \"valid\", value: parsed.value, expiresAt: parsed.__metadata.expiresAt };\r\n}\r\n\r\nfunction applyParse<T>(value: unknown, parse?: (raw: unknown) => T): T | null {\r\n if (parse) {\r\n return parse(value);\r\n }\r\n return value as T;\r\n}\r\n\r\nexport function reactiveLocalStorageItem<T>(\r\n key: string,\r\n opts?: ReactiveLocalStorageItemOptions<T>\r\n): WritableSignal<T | null> {\r\n if (isDevMode() && !opts?.injector) {\r\n assertInInjectionContext(reactiveLocalStorageItem);\r\n }\r\n\r\n const assertedInjector = opts?.injector ?? inject(Injector);\r\n const ttlEnabled = opts?.ttlMs != null;\r\n\r\n return runInInjectionContext(assertedInjector, () => {\r\n let expiryTimer: ReturnType<typeof setTimeout> | undefined;\r\n const destroyRef =\r\n ttlEnabled || opts?.syncAcrossTabs !== false ? inject(DestroyRef) : undefined;\r\n\r\n const clearExpiryTimer = () => {\r\n if (expiryTimer !== undefined) {\r\n clearTimeout(expiryTimer);\r\n expiryTimer = undefined;\r\n }\r\n };\r\n\r\n if (destroyRef && ttlEnabled) {\r\n destroyRef.onDestroy(clearExpiryTimer);\r\n }\r\n\r\n let sig!: WritableSignal<T | null>;\r\n\r\n const expireItem = () => {\r\n clearExpiryTimer();\r\n localStorage.removeItem(key);\r\n sig.set(opts?.defaultValue ?? null);\r\n };\r\n\r\n const scheduleExpiry = (expiresAt: number) => {\r\n if (!ttlEnabled) {\r\n return;\r\n }\r\n\r\n clearExpiryTimer();\r\n const delay = expiresAt - Date.now();\r\n if (delay <= 0) {\r\n expireItem();\r\n return;\r\n }\r\n\r\n expiryTimer = setTimeout(() => expireItem(), delay);\r\n };\r\n\r\n const readFromStorage = (): T | null => {\r\n const raw = localStorage.getItem(key);\r\n if (raw === null) {\r\n return opts?.defaultValue ?? null;\r\n }\r\n\r\n const parsed = parseStoredValue(JSON.parse(raw));\r\n\r\n if (parsed.kind === \"expired\") {\r\n localStorage.removeItem(key);\r\n return opts?.defaultValue ?? null;\r\n }\r\n\r\n if (parsed.kind === \"valid\" && parsed.expiresAt !== undefined) {\r\n scheduleExpiry(parsed.expiresAt);\r\n return applyParse(parsed.value, opts?.parse);\r\n }\r\n\r\n return applyParse(parsed.kind === \"plain\" ? parsed.raw : parsed.value, opts?.parse);\r\n };\r\n\r\n const writeToStorage = (value: T | null | undefined) => {\r\n if (value === null || value === undefined) {\r\n clearExpiryTimer();\r\n localStorage.removeItem(key);\r\n return;\r\n }\r\n\r\n if (!ttlEnabled) {\r\n localStorage.setItem(key, JSON.stringify(value));\r\n return;\r\n }\r\n\r\n const expiresAt = Date.now() + opts!.ttlMs!;\r\n const envelope: StorageEnvelope<T> = {\r\n __metadata: { expiresAt },\r\n value\r\n };\r\n localStorage.setItem(key, JSON.stringify(envelope));\r\n scheduleExpiry(expiresAt);\r\n };\r\n\r\n sig = signal<T | null>(readFromStorage());\r\n\r\n effect(() => {\r\n writeToStorage(sig());\r\n });\r\n\r\n if (opts?.syncAcrossTabs !== false && destroyRef) {\r\n const onStorageChange = (event: StorageEvent) => {\r\n if (event.key !== key) {\r\n return;\r\n }\r\n\r\n if (event.newValue === null) {\r\n clearExpiryTimer();\r\n sig.set(opts?.defaultValue ?? null);\r\n return;\r\n }\r\n\r\n const parsed = parseStoredValue(JSON.parse(event.newValue));\r\n\r\n if (parsed.kind === \"expired\") {\r\n expireItem();\r\n return;\r\n }\r\n\r\n if (parsed.kind === \"valid\" && parsed.expiresAt !== undefined) {\r\n scheduleExpiry(parsed.expiresAt);\r\n sig.set(applyParse(parsed.value, opts?.parse));\r\n return;\r\n }\r\n\r\n sig.set(applyParse(parsed.kind === \"plain\" ? parsed.raw : parsed.value, opts?.parse));\r\n };\r\n\r\n window.addEventListener(\"storage\", onStorageChange);\r\n destroyRef.onDestroy(() => window.removeEventListener(\"storage\", onStorageChange));\r\n }\r\n\r\n return sig;\r\n });\r\n}\r\n","import { Component, computed, input, ChangeDetectionStrategy } from \"@angular/core\";\r\nimport { FormControl } from \"@angular/forms\";\r\nimport { KeyValuePipe } from \"@angular/common\";\r\n\r\n@Component({\r\n selector: \"ngx-reactive-form-error-message\",\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [KeyValuePipe],\r\n template: `\r\n @for (item of finalErrorsWithCodeAndMessage() | keyvalue; track item.key) {\r\n @if (formControlToBind().errors?.[item.key]) {\r\n <small [class]=\"cssClass()\">{{ item.value }}</small>\r\n }\r\n }\r\n `\r\n})\r\nexport class ReactiveFormErrorMessageComponent {\r\n readonly formControlToBind = input.required<FormControl>();\r\n readonly formControlLabel = input.required<string>();\r\n readonly cssClass = input<string>(\"\");\r\n readonly customErrors = input<Record<string, string>>();\r\n\r\n protected readonly finalErrorsWithCodeAndMessage = computed(() => {\r\n const label = this.formControlLabel();\r\n const customKv = this.customErrors() ?? {};\r\n\r\n return {\r\n required: `${label} is required.`,\r\n maxlength: `${label} must be smaller.`,\r\n minlength: `${label} must be bigger.`,\r\n min: `${label} must be bigger.`,\r\n max: `${label} must be smaller.`,\r\n email: `${label} must be a valid email.`,\r\n pattern: `${label} is not valid.`,\r\n ...customKv\r\n };\r\n });\r\n}\r\n","import { Pipe, type PipeTransform } from \"@angular/core\";\r\n\r\n@Pipe({\r\n name: \"ngxMemoizeFn\"\r\n})\r\nexport class MemoizeFnPipe implements PipeTransform {\r\n public transform<T, R>(value: T, handler: (value: T) => R, context?: unknown): R {\r\n if (context) {\r\n return handler.call(context, value);\r\n }\r\n\r\n return handler(value);\r\n }\r\n}\r\n","import { Pipe, type PipeTransform } from \"@angular/core\";\r\n\r\n@Pipe({\r\n name: \"ngxTimeOnly\"\r\n})\r\nexport class TimeOnlyPipe implements PipeTransform {\r\n transform(\r\n value: string | Date | null | undefined,\r\n format: \"shortTime\" | \"mediumTime\" = \"shortTime\"\r\n ): string | null {\r\n if (value == null || value === \"\") {\r\n return null;\r\n }\r\n\r\n let hours: number;\r\n let minutes: string;\r\n let seconds: string;\r\n\r\n if (value instanceof Date) {\r\n hours = value.getHours();\r\n minutes = String(value.getMinutes()).padStart(2, \"0\");\r\n seconds = String(value.getSeconds()).padStart(2, \"0\");\r\n } else {\r\n const timeParts = value.split(\":\");\r\n if (timeParts.length < 2) {\r\n return null;\r\n }\r\n hours = parseInt(timeParts[0], 10);\r\n minutes = timeParts[1];\r\n seconds = (timeParts[2] || \"00\").split(\".\")[0];\r\n }\r\n\r\n const period = hours >= 12 ? \"PM\" : \"AM\";\r\n hours = hours % 12 || 12;\r\n\r\n if (format === \"shortTime\") {\r\n return `${hours}:${minutes} ${period}`;\r\n } else {\r\n return `${hours}:${minutes}:${seconds} ${period}`;\r\n }\r\n }\r\n}\r\n","import { DestroyRef, Directive, Input, TemplateRef, ViewContainerRef } from \"@angular/core\";\r\nimport { AbstractControl, ValidationErrors } from \"@angular/forms\";\r\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\r\nimport { merge, Subscription } from \"rxjs\";\r\n\r\ninterface ErrorContext {\r\n $implicit: ValidationErrors | null;\r\n control: AbstractControl;\r\n}\r\n\r\n@Directive({\r\n selector: \"[ToggleValidationErrorArea]\",\r\n standalone: true\r\n})\r\nexport class ToggleValidationErrorAreaDirective {\r\n constructor(\r\n private readonly templateRef: TemplateRef<ErrorContext>,\r\n private readonly viewContainer: ViewContainerRef,\r\n private readonly destroyRef: DestroyRef\r\n ) {}\r\n\r\n private hasView = false;\r\n private subscription: Subscription | null = null;\r\n\r\n @Input({ required: true }) set ToggleValidationErrorArea(control: AbstractControl) {\r\n if (!control) return;\r\n\r\n this.subscription?.unsubscribe();\r\n this.subscription = merge(control.statusChanges, control.valueChanges)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(() => this.updateView(control));\r\n\r\n this.updateView(control);\r\n }\r\n\r\n static ngTemplateContextGuard(\r\n _dir: ToggleValidationErrorAreaDirective,\r\n ctx: unknown\r\n ): ctx is ErrorContext {\r\n return true;\r\n }\r\n\r\n private updateView(control: AbstractControl) {\r\n const hasError = control.invalid && (control.dirty || control.touched);\r\n\r\n if (hasError && !this.hasView) {\r\n this.viewContainer.createEmbeddedView<ErrorContext>(this.templateRef, {\r\n $implicit: control.errors,\r\n control\r\n });\r\n this.hasView = true;\r\n } else if (!hasError && this.hasView) {\r\n this.viewContainer.clear();\r\n this.hasView = false;\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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"}
|
package/package.json
CHANGED
package/types/ngx-extra.d.ts
CHANGED
|
@@ -72,9 +72,9 @@ declare function throwResourceError<T = any>(resorce: HttpResourceRef<T>, inject
|
|
|
72
72
|
type AbstractControlSignalOptions = {
|
|
73
73
|
injector?: Injector;
|
|
74
74
|
};
|
|
75
|
-
declare function abstractControlSignal<
|
|
75
|
+
declare function abstractControlSignal<TValue, TRawValue extends TValue = TValue>(source: AbstractControl<TValue, TRawValue>, options?: AbstractControlSignalOptions): {
|
|
76
76
|
errors: _angular_core.Signal<ValidationErrors | null>;
|
|
77
|
-
value: _angular_core.Signal<
|
|
77
|
+
value: _angular_core.Signal<TRawValue>;
|
|
78
78
|
reset: _angular_core.Signal<boolean>;
|
|
79
79
|
touched: _angular_core.Signal<boolean>;
|
|
80
80
|
untouched: _angular_core.Signal<boolean>;
|
|
@@ -124,6 +124,8 @@ type ReactiveLocalStorageItemOptions<T> = {
|
|
|
124
124
|
parse?: (raw: unknown) => T;
|
|
125
125
|
syncAcrossTabs?: boolean;
|
|
126
126
|
injector?: Injector;
|
|
127
|
+
/** TTL in milliseconds. Must be specified to enable expiry; omit for plain JSON storage. */
|
|
128
|
+
ttlMs?: number;
|
|
127
129
|
};
|
|
128
130
|
declare function reactiveLocalStorageItem<T>(key: string, opts?: ReactiveLocalStorageItemOptions<T>): WritableSignal<T | null>;
|
|
129
131
|
|