ngx-extra 21.1.3 → 21.1.5
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 +71 -30
- package/fesm2022/ngx-extra.mjs.map +1 -1
- package/package.json +3 -2
- package/types/ngx-extra.d.ts +9 -3
package/fesm2022/ngx-extra.mjs
CHANGED
|
@@ -18,7 +18,7 @@ import { KeyValuePipe } from '@angular/common';
|
|
|
18
18
|
* notifications and ignore identical updates if needed.
|
|
19
19
|
*/
|
|
20
20
|
function createSignalChangeNotifier() {
|
|
21
|
-
const sourceSignal = signal(null, ...(ngDevMode ? [{ debugName: "sourceSignal" }] : []));
|
|
21
|
+
const sourceSignal = signal(null, ...(ngDevMode ? [{ debugName: "sourceSignal" }] : /* istanbul ignore next */ []));
|
|
22
22
|
return Object.seal({
|
|
23
23
|
notify: () => {
|
|
24
24
|
sourceSignal.update((v) => (v === null ? 1 : v + 1));
|
|
@@ -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: () => [] });
|
|
@@ -311,13 +311,13 @@ function abstractControlSignal(source, options) {
|
|
|
311
311
|
}
|
|
312
312
|
|
|
313
313
|
function slimComponentState() {
|
|
314
|
-
const isCheckBoxSelectionEnabled = signal(false, ...(ngDevMode ? [{ debugName: "isCheckBoxSelectionEnabled" }] : []));
|
|
315
|
-
const canSelectRow = signal(false, ...(ngDevMode ? [{ debugName: "canSelectRow" }] : []));
|
|
316
|
-
const canSelectMultipleItem = signal(false, ...(ngDevMode ? [{ debugName: "canSelectMultipleItem" }] : []));
|
|
317
|
-
const manipulationMode = signal(null, ...(ngDevMode ? [{ debugName: "manipulationMode" }] : []));
|
|
318
|
-
const title = signal("", ...(ngDevMode ? [{ debugName: "title" }] : []));
|
|
319
|
-
const isAnyNetworkOperationRunning = signal(false, ...(ngDevMode ? [{ debugName: "isAnyNetworkOperationRunning" }] : []));
|
|
320
|
-
const isDataManipulationUiActive = signal(false, ...(ngDevMode ? [{ debugName: "isDataManipulationUiActive" }] : []));
|
|
314
|
+
const isCheckBoxSelectionEnabled = signal(false, ...(ngDevMode ? [{ debugName: "isCheckBoxSelectionEnabled" }] : /* istanbul ignore next */ []));
|
|
315
|
+
const canSelectRow = signal(false, ...(ngDevMode ? [{ debugName: "canSelectRow" }] : /* istanbul ignore next */ []));
|
|
316
|
+
const canSelectMultipleItem = signal(false, ...(ngDevMode ? [{ debugName: "canSelectMultipleItem" }] : /* istanbul ignore next */ []));
|
|
317
|
+
const manipulationMode = signal(null, ...(ngDevMode ? [{ debugName: "manipulationMode" }] : /* istanbul ignore next */ []));
|
|
318
|
+
const title = signal("", ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
|
|
319
|
+
const isAnyNetworkOperationRunning = signal(false, ...(ngDevMode ? [{ debugName: "isAnyNetworkOperationRunning" }] : /* istanbul ignore next */ []));
|
|
320
|
+
const isDataManipulationUiActive = signal(false, ...(ngDevMode ? [{ debugName: "isDataManipulationUiActive" }] : /* istanbul ignore next */ []));
|
|
321
321
|
const manipulationModeLabel = computed(() => {
|
|
322
322
|
switch (manipulationMode()) {
|
|
323
323
|
case "create":
|
|
@@ -335,10 +335,10 @@ function slimComponentState() {
|
|
|
335
335
|
default:
|
|
336
336
|
return "";
|
|
337
337
|
}
|
|
338
|
-
}, ...(ngDevMode ? [{ debugName: "manipulationModeLabel" }] : []));
|
|
338
|
+
}, ...(ngDevMode ? [{ debugName: "manipulationModeLabel" }] : /* istanbul ignore next */ []));
|
|
339
339
|
const titleWithManipulationMode = computed(() => {
|
|
340
340
|
return `${manipulationModeLabel()} ${title()}`.trim();
|
|
341
|
-
}, ...(ngDevMode ? [{ debugName: "titleWithManipulationMode" }] : []));
|
|
341
|
+
}, ...(ngDevMode ? [{ debugName: "titleWithManipulationMode" }] : /* istanbul ignore next */ []));
|
|
342
342
|
return Object.seal({
|
|
343
343
|
isCheckBoxSelectionEnabled,
|
|
344
344
|
canSelectRow,
|
|
@@ -397,7 +397,7 @@ function pairwiseSignal(source, options) {
|
|
|
397
397
|
const assertedInjector = options?.injector ?? inject(Injector);
|
|
398
398
|
const defaultEqualityFn = (a, b) => JSON.stringify(a.previous) === JSON.stringify(b.current);
|
|
399
399
|
return runInInjectionContext(assertedInjector, () => {
|
|
400
|
-
const pair = linkedSignal({ ...(ngDevMode ? { debugName: "pair" } : {}), source: source,
|
|
400
|
+
const pair = linkedSignal({ ...(ngDevMode ? { debugName: "pair" } : /* istanbul ignore next */ {}), source: source,
|
|
401
401
|
equal: options?.equalityFn ?? defaultEqualityFn,
|
|
402
402
|
computation: (current, previous) => {
|
|
403
403
|
console.log(JSON.stringify(previous) === JSON.stringify(current));
|
|
@@ -423,7 +423,7 @@ function reactiveLocalStorageItem(key, opts) {
|
|
|
423
423
|
const parsed = JSON.parse(raw);
|
|
424
424
|
return opts?.parse ? opts.parse(parsed) : parsed;
|
|
425
425
|
};
|
|
426
|
-
const sig = signal(readFromStorage(), ...(ngDevMode ? [{ debugName: "sig" }] : []));
|
|
426
|
+
const sig = signal(readFromStorage(), ...(ngDevMode ? [{ debugName: "sig" }] : /* istanbul ignore next */ []));
|
|
427
427
|
effect(() => {
|
|
428
428
|
const value = sig();
|
|
429
429
|
if (value === null || value === undefined) {
|
|
@@ -454,10 +454,10 @@ function reactiveLocalStorageItem(key, opts) {
|
|
|
454
454
|
}
|
|
455
455
|
|
|
456
456
|
class ReactiveFormErrorMessageComponent {
|
|
457
|
-
formControlToBind = input.required(...(ngDevMode ? [{ debugName: "formControlToBind" }] : []));
|
|
458
|
-
formControlLabel = input.required(...(ngDevMode ? [{ debugName: "formControlLabel" }] : []));
|
|
459
|
-
cssClass = input("", ...(ngDevMode ? [{ debugName: "cssClass" }] : []));
|
|
460
|
-
customErrors = input(...(ngDevMode ? [undefined, { debugName: "customErrors" }] : []));
|
|
457
|
+
formControlToBind = input.required(...(ngDevMode ? [{ debugName: "formControlToBind" }] : /* istanbul ignore next */ []));
|
|
458
|
+
formControlLabel = input.required(...(ngDevMode ? [{ debugName: "formControlLabel" }] : /* istanbul ignore next */ []));
|
|
459
|
+
cssClass = input("", ...(ngDevMode ? [{ debugName: "cssClass" }] : /* istanbul ignore next */ []));
|
|
460
|
+
customErrors = input(...(ngDevMode ? [undefined, { debugName: "customErrors" }] : /* istanbul ignore next */ []));
|
|
461
461
|
finalErrorsWithCodeAndMessage = computed(() => {
|
|
462
462
|
const label = this.formControlLabel();
|
|
463
463
|
const customKv = this.customErrors() ?? {};
|
|
@@ -471,9 +471,9 @@ class ReactiveFormErrorMessageComponent {
|
|
|
471
471
|
pattern: `${label} is not valid.`,
|
|
472
472
|
...customKv
|
|
473
473
|
};
|
|
474
|
-
}, ...(ngDevMode ? [{ debugName: "finalErrorsWithCodeAndMessage" }] : []));
|
|
475
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
476
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
474
|
+
}, ...(ngDevMode ? [{ debugName: "finalErrorsWithCodeAndMessage" }] : /* istanbul ignore next */ []));
|
|
475
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: ReactiveFormErrorMessageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
476
|
+
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: `
|
|
477
477
|
@for (item of finalErrorsWithCodeAndMessage() | keyvalue; track item.key) {
|
|
478
478
|
@if (formControlToBind().errors?.[item.key]) {
|
|
479
479
|
<small [class]="cssClass()">{{ item.value }}</small>
|
|
@@ -481,7 +481,7 @@ class ReactiveFormErrorMessageComponent {
|
|
|
481
481
|
}
|
|
482
482
|
`, isInline: true, dependencies: [{ kind: "pipe", type: KeyValuePipe, name: "keyvalue" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
483
483
|
}
|
|
484
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
484
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: ReactiveFormErrorMessageComponent, decorators: [{
|
|
485
485
|
type: Component,
|
|
486
486
|
args: [{
|
|
487
487
|
selector: "ngx-reactive-form-error-message",
|
|
@@ -504,16 +504,57 @@ class MemoizeFnPipe {
|
|
|
504
504
|
}
|
|
505
505
|
return handler(value);
|
|
506
506
|
}
|
|
507
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
508
|
-
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.
|
|
507
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: MemoizeFnPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
508
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.12", ngImport: i0, type: MemoizeFnPipe, isStandalone: true, name: "ngxMemoizeFn" });
|
|
509
509
|
}
|
|
510
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
510
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: MemoizeFnPipe, decorators: [{
|
|
511
511
|
type: Pipe,
|
|
512
512
|
args: [{
|
|
513
513
|
name: "ngxMemoizeFn"
|
|
514
514
|
}]
|
|
515
515
|
}] });
|
|
516
516
|
|
|
517
|
+
class TimeOnlyPipe {
|
|
518
|
+
transform(value, format = "shortTime") {
|
|
519
|
+
if (value == null || value === "") {
|
|
520
|
+
return null;
|
|
521
|
+
}
|
|
522
|
+
let hours;
|
|
523
|
+
let minutes;
|
|
524
|
+
let seconds;
|
|
525
|
+
if (value instanceof Date) {
|
|
526
|
+
hours = value.getHours();
|
|
527
|
+
minutes = String(value.getMinutes()).padStart(2, "0");
|
|
528
|
+
seconds = String(value.getSeconds()).padStart(2, "0");
|
|
529
|
+
}
|
|
530
|
+
else {
|
|
531
|
+
const timeParts = value.split(":");
|
|
532
|
+
if (timeParts.length < 2) {
|
|
533
|
+
return null;
|
|
534
|
+
}
|
|
535
|
+
hours = parseInt(timeParts[0], 10);
|
|
536
|
+
minutes = timeParts[1];
|
|
537
|
+
seconds = (timeParts[2] || "00").split(".")[0];
|
|
538
|
+
}
|
|
539
|
+
const period = hours >= 12 ? "PM" : "AM";
|
|
540
|
+
hours = hours % 12 || 12;
|
|
541
|
+
if (format === "shortTime") {
|
|
542
|
+
return `${hours}:${minutes} ${period}`;
|
|
543
|
+
}
|
|
544
|
+
else {
|
|
545
|
+
return `${hours}:${minutes}:${seconds} ${period}`;
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: TimeOnlyPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
549
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.12", ngImport: i0, type: TimeOnlyPipe, isStandalone: true, name: "ngxTimeOnly" });
|
|
550
|
+
}
|
|
551
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: TimeOnlyPipe, decorators: [{
|
|
552
|
+
type: Pipe,
|
|
553
|
+
args: [{
|
|
554
|
+
name: "ngxTimeOnly"
|
|
555
|
+
}]
|
|
556
|
+
}] });
|
|
557
|
+
|
|
517
558
|
class ToggleValidationErrorAreaDirective {
|
|
518
559
|
templateRef;
|
|
519
560
|
viewContainer;
|
|
@@ -551,10 +592,10 @@ class ToggleValidationErrorAreaDirective {
|
|
|
551
592
|
this.hasView = false;
|
|
552
593
|
}
|
|
553
594
|
}
|
|
554
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
555
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.
|
|
595
|
+
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 });
|
|
596
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.12", type: ToggleValidationErrorAreaDirective, isStandalone: true, selector: "[ToggleValidationErrorArea]", inputs: { ToggleValidationErrorArea: "ToggleValidationErrorArea" }, ngImport: i0 });
|
|
556
597
|
}
|
|
557
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
598
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: ToggleValidationErrorAreaDirective, decorators: [{
|
|
558
599
|
type: Directive,
|
|
559
600
|
args: [{
|
|
560
601
|
selector: "[ToggleValidationErrorArea]",
|
|
@@ -569,5 +610,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
569
610
|
* Generated bundle index. Do not edit.
|
|
570
611
|
*/
|
|
571
612
|
|
|
572
|
-
export { MemoizeFnPipe, ReactiveFormErrorMessageComponent, ToggleValidationErrorAreaDirective, abstractControlSignal, createSignalChangeNotifier, duringDestroy, pairwiseSignal, reactiveLocalStorageItem, reactiveQueryParam, slimComponentState, throwResourceError };
|
|
613
|
+
export { MemoizeFnPipe, ReactiveFormErrorMessageComponent, TimeOnlyPipe, ToggleValidationErrorAreaDirective, abstractControlSignal, createSignalChangeNotifier, duringDestroy, pairwiseSignal, reactiveLocalStorageItem, reactiveQueryParam, slimComponentState, throwResourceError };
|
|
573
614
|
//# sourceMappingURL=ngx-extra.mjs.map
|
|
@@ -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/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 { 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\";\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<TValue, TRawValue extends TValue = TValue>(\n source: AbstractControl<TValue, TRawValue>,\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<TRawValue>(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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ngx-extra",
|
|
3
|
-
"version": "21.1.
|
|
3
|
+
"version": "21.1.5",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/common": "^21.0.0",
|
|
6
6
|
"@angular/core": "^21.0.0",
|
|
@@ -20,5 +20,6 @@
|
|
|
20
20
|
"types": "./types/ngx-extra.d.ts",
|
|
21
21
|
"default": "./fesm2022/ngx-extra.mjs"
|
|
22
22
|
}
|
|
23
|
-
}
|
|
23
|
+
},
|
|
24
|
+
"type": "module"
|
|
24
25
|
}
|
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>;
|
|
@@ -151,6 +151,12 @@ declare class MemoizeFnPipe implements PipeTransform {
|
|
|
151
151
|
static ɵpipe: _angular_core.ɵɵPipeDeclaration<MemoizeFnPipe, "ngxMemoizeFn", true>;
|
|
152
152
|
}
|
|
153
153
|
|
|
154
|
+
declare class TimeOnlyPipe implements PipeTransform {
|
|
155
|
+
transform(value: string | Date | null | undefined, format?: "shortTime" | "mediumTime"): string | null;
|
|
156
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TimeOnlyPipe, never>;
|
|
157
|
+
static ɵpipe: _angular_core.ɵɵPipeDeclaration<TimeOnlyPipe, "ngxTimeOnly", true>;
|
|
158
|
+
}
|
|
159
|
+
|
|
154
160
|
interface ErrorContext {
|
|
155
161
|
$implicit: ValidationErrors | null;
|
|
156
162
|
control: AbstractControl;
|
|
@@ -169,5 +175,5 @@ declare class ToggleValidationErrorAreaDirective {
|
|
|
169
175
|
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ToggleValidationErrorAreaDirective, "[ToggleValidationErrorArea]", never, { "ToggleValidationErrorArea": { "alias": "ToggleValidationErrorArea"; "required": true; }; }, {}, never, never, true, never>;
|
|
170
176
|
}
|
|
171
177
|
|
|
172
|
-
export { MemoizeFnPipe, ReactiveFormErrorMessageComponent, ToggleValidationErrorAreaDirective, abstractControlSignal, createSignalChangeNotifier, duringDestroy, pairwiseSignal, reactiveLocalStorageItem, reactiveQueryParam, slimComponentState, throwResourceError };
|
|
178
|
+
export { MemoizeFnPipe, ReactiveFormErrorMessageComponent, TimeOnlyPipe, ToggleValidationErrorAreaDirective, abstractControlSignal, createSignalChangeNotifier, duringDestroy, pairwiseSignal, reactiveLocalStorageItem, reactiveQueryParam, slimComponentState, throwResourceError };
|
|
173
179
|
export type { ManipulationMode, ReactiveLocalStorageItemOptions, ReactiveQueryParamOptions, SignalChangeNotifier, SlimComponentState, SlimNavigationExtras };
|