@scania-nl/tegel-angular-extensions 0.0.7 → 0.0.9

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.
@@ -0,0 +1,135 @@
1
+ import { DestroyRef, Directive, effect, inject, input, untracked, ViewContainerRef, } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Dynamically renders an Angular component and wires its signal inputs/outputs.
5
+ *
6
+ * This directive:
7
+ * - Creates/destroys the component when the type changes.
8
+ * - Applies inputs via `setInput`.
9
+ * - Subscribes to outputs and forwards emitted values to handlers.
10
+ * - Cleans subscriptions and the component instance on destroy.
11
+ *
12
+ * @example
13
+ * ```html
14
+ * <ng-container
15
+ * taeDynamicComponent
16
+ * [component]="MyComponent"
17
+ * [inputs]="{ name: 'John', age: 25 }"
18
+ * [outputs]="{ submitted: (data) => handleSubmit(data) }"
19
+ * />
20
+ * ```
21
+ */
22
+ export class DynamicComponentDirective {
23
+ component = input.required();
24
+ inputs = input();
25
+ outputs = input();
26
+ viewContainer = inject(ViewContainerRef);
27
+ destroyRef = inject(DestroyRef);
28
+ // Current component instance reference managed by this directive.
29
+ componentRef;
30
+ outputSubscriptions = new Set();
31
+ constructor() {
32
+ // Recreate the component whenever the type changes.
33
+ effect(() => {
34
+ const componentType = this.component();
35
+ untracked(() => {
36
+ this.destroyComponent();
37
+ this.createComponent(componentType);
38
+ });
39
+ });
40
+ // Apply new inputs whenever the `inputs` signal changes.
41
+ effect(() => {
42
+ const inputsValue = this.inputs();
43
+ if (inputsValue && this.componentRef) {
44
+ untracked(() => this.applyInputs(inputsValue));
45
+ }
46
+ });
47
+ // Ensure cleanup if the host view is destroyed.
48
+ this.destroyRef.onDestroy(() => this.destroyComponent());
49
+ }
50
+ /**
51
+ * Creates the component and wires initial inputs/outputs.
52
+ * @param componentType Component type to instantiate.
53
+ */
54
+ createComponent(componentType) {
55
+ this.viewContainer.clear();
56
+ this.componentRef = this.viewContainer.createComponent(componentType);
57
+ const inputsValue = this.inputs();
58
+ if (inputsValue) {
59
+ this.applyInputs(inputsValue);
60
+ }
61
+ const outputsValue = this.outputs();
62
+ if (outputsValue) {
63
+ this.subscribeToOutputs(outputsValue);
64
+ }
65
+ this.componentRef.changeDetectorRef.detectChanges();
66
+ }
67
+ /**
68
+ * Applies input values to the component instance using `setInput`.
69
+ * @param inputs Input values keyed by input name.
70
+ */
71
+ applyInputs(inputs) {
72
+ if (!this.componentRef)
73
+ return;
74
+ Object.entries(inputs).forEach(([key, value]) => {
75
+ this.componentRef?.setInput(key, value);
76
+ });
77
+ this.componentRef.changeDetectorRef.markForCheck();
78
+ }
79
+ /**
80
+ * Subscribes to output signal emitters and forwards values to handlers.
81
+ * @param outputs Output handler map keyed by output name.
82
+ */
83
+ subscribeToOutputs(outputs) {
84
+ if (!this.componentRef)
85
+ return;
86
+ // Clear previous subscriptions before wiring new outputs.
87
+ this.clearOutputSubscriptions();
88
+ const instance = this.componentRef.instance;
89
+ Object.entries(outputs).forEach(([key, handler]) => {
90
+ if (typeof handler !== 'function')
91
+ return;
92
+ const output = instance[key];
93
+ // Subscribe to the output signal emitter if present.
94
+ if (this.isOutputEmitterRef(output)) {
95
+ const subscription = output.subscribe((value) => handler(value));
96
+ this.outputSubscriptions.add(subscription);
97
+ }
98
+ });
99
+ }
100
+ /**
101
+ * Clears all output subscriptions.
102
+ */
103
+ clearOutputSubscriptions() {
104
+ this.outputSubscriptions.forEach((sub) => sub.unsubscribe());
105
+ this.outputSubscriptions.clear();
106
+ }
107
+ /**
108
+ * Destroys the dynamic component and cleans subscriptions.
109
+ */
110
+ destroyComponent() {
111
+ this.clearOutputSubscriptions();
112
+ this.componentRef?.destroy();
113
+ this.componentRef = undefined;
114
+ }
115
+ /**
116
+ * Type guard for Angular signal output emitters.
117
+ * @param value Value to test.
118
+ */
119
+ isOutputEmitterRef(value) {
120
+ return (typeof value === 'object' &&
121
+ value !== null &&
122
+ 'subscribe' in value &&
123
+ typeof value['subscribe'] === 'function');
124
+ }
125
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: DynamicComponentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
126
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.17", type: DynamicComponentDirective, isStandalone: true, selector: "[taeDynamicComponent]", inputs: { component: { classPropertyName: "component", publicName: "component", isSignal: true, isRequired: true, transformFunction: null }, inputs: { classPropertyName: "inputs", publicName: "inputs", isSignal: true, isRequired: false, transformFunction: null }, outputs: { classPropertyName: "outputs", publicName: "outputs", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
127
+ }
128
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: DynamicComponentDirective, decorators: [{
129
+ type: Directive,
130
+ args: [{
131
+ selector: '[taeDynamicComponent]',
132
+ standalone: true,
133
+ }]
134
+ }], ctorParameters: () => [] });
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1jb21wb25lbnQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy90ZWdlbC1hbmd1bGFyLWV4dGVuc2lvbnMvc3JjL2xpYi9tb2RhbC9kaXJlY3RpdmVzL2R5bmFtaWMtY29tcG9uZW50LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsVUFBVSxFQUNWLFNBQVMsRUFDVCxNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFJTCxTQUFTLEVBQ1QsZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDOztBQU12Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBS0gsTUFBTSxPQUFPLHlCQUF5QjtJQUMzQixTQUFTLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVyxDQUFDO0lBQ3RDLE1BQU0sR0FBRyxLQUFLLEVBQXNCLENBQUM7SUFDckMsT0FBTyxHQUFHLEtBQUssRUFBdUIsQ0FBQztJQUUvQixhQUFhLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDekMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUVqRCxrRUFBa0U7SUFDMUQsWUFBWSxDQUFtQjtJQUN0QixtQkFBbUIsR0FBRyxJQUFJLEdBQUcsRUFBeUIsQ0FBQztJQUV4RTtRQUNFLG9EQUFvRDtRQUNwRCxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBRXZDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDdEMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILHlEQUF5RDtRQUN6RCxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1Ys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Q0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxnQkFBZ0I7UUFDdEIsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssa0JBQWtCLENBQ3hCLEtBQWM7UUFFZCxPQUFPLENBQ0wsT0FBTyxLQUFLLEtBQUssUUFBUTtZQUN6QixLQUFLLEtBQUssSUFBSTtZQUNkLFdBQVcsSUFBSSxLQUFLO1lBQ3BCLE9BQVEsS0FBaUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxVQUFVLENBQ3RFLENBQUM7SUFDSixDQUFDO3dHQWhJVSx5QkFBeUI7NEZBQXpCLHlCQUF5Qjs7NEZBQXpCLHlCQUF5QjtrQkFKckMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsdUJBQXVCO29CQUNqQyxVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnRSZWYsXG4gIERlc3Ryb3lSZWYsXG4gIERpcmVjdGl2ZSxcbiAgZWZmZWN0LFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBPdXRwdXRFbWl0dGVyUmVmLFxuICBPdXRwdXRSZWZTdWJzY3JpcHRpb24sXG4gIFR5cGUsXG4gIHVudHJhY2tlZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDb21wb25lbnRJbnB1dHMsXG4gIENvbXBvbmVudE91dHB1dHMsXG59IGZyb20gJy4uLy4uL3V0aWxzL2FuZ3VsYXItY29tcG9uZW50LWlvJztcblxuLyoqXG4gKiBEeW5hbWljYWxseSByZW5kZXJzIGFuIEFuZ3VsYXIgY29tcG9uZW50IGFuZCB3aXJlcyBpdHMgc2lnbmFsIGlucHV0cy9vdXRwdXRzLlxuICpcbiAqIFRoaXMgZGlyZWN0aXZlOlxuICogLSBDcmVhdGVzL2Rlc3Ryb3lzIHRoZSBjb21wb25lbnQgd2hlbiB0aGUgdHlwZSBjaGFuZ2VzLlxuICogLSBBcHBsaWVzIGlucHV0cyB2aWEgYHNldElucHV0YC5cbiAqIC0gU3Vic2NyaWJlcyB0byBvdXRwdXRzIGFuZCBmb3J3YXJkcyBlbWl0dGVkIHZhbHVlcyB0byBoYW5kbGVycy5cbiAqIC0gQ2xlYW5zIHN1YnNjcmlwdGlvbnMgYW5kIHRoZSBjb21wb25lbnQgaW5zdGFuY2Ugb24gZGVzdHJveS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPG5nLWNvbnRhaW5lclxuICogICB0YWVEeW5hbWljQ29tcG9uZW50XG4gKiAgIFtjb21wb25lbnRdPVwiTXlDb21wb25lbnRcIlxuICogICBbaW5wdXRzXT1cInsgbmFtZTogJ0pvaG4nLCBhZ2U6IDI1IH1cIlxuICogICBbb3V0cHV0c109XCJ7IHN1Ym1pdHRlZDogKGRhdGEpID0+IGhhbmRsZVN1Ym1pdChkYXRhKSB9XCJcbiAqIC8+XG4gKiBgYGBcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3RhZUR5bmFtaWNDb21wb25lbnRdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgRHluYW1pY0NvbXBvbmVudERpcmVjdGl2ZTxUPiB7XG4gIHJlYWRvbmx5IGNvbXBvbmVudCA9IGlucHV0LnJlcXVpcmVkPFR5cGU8VD4+KCk7XG4gIHJlYWRvbmx5IGlucHV0cyA9IGlucHV0PENvbXBvbmVudElucHV0czxUPj4oKTtcbiAgcmVhZG9ubHkgb3V0cHV0cyA9IGlucHV0PENvbXBvbmVudE91dHB1dHM8VD4+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSB2aWV3Q29udGFpbmVyID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgLy8gQ3VycmVudCBjb21wb25lbnQgaW5zdGFuY2UgcmVmZXJlbmNlIG1hbmFnZWQgYnkgdGhpcyBkaXJlY3RpdmUuXG4gIHByaXZhdGUgY29tcG9uZW50UmVmPzogQ29tcG9uZW50UmVmPFQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IG91dHB1dFN1YnNjcmlwdGlvbnMgPSBuZXcgU2V0PE91dHB1dFJlZlN1YnNjcmlwdGlvbj4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyBSZWNyZWF0ZSB0aGUgY29tcG9uZW50IHdoZW5ldmVyIHRoZSB0eXBlIGNoYW5nZXMuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudFR5cGUgPSB0aGlzLmNvbXBvbmVudCgpO1xuXG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICB0aGlzLmRlc3Ryb3lDb21wb25lbnQoKTtcbiAgICAgICAgdGhpcy5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50VHlwZSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIEFwcGx5IG5ldyBpbnB1dHMgd2hlbmV2ZXIgdGhlIGBpbnB1dHNgIHNpZ25hbCBjaGFuZ2VzLlxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dHNWYWx1ZSA9IHRoaXMuaW5wdXRzKCk7XG5cbiAgICAgIGlmIChpbnB1dHNWYWx1ZSAmJiB0aGlzLmNvbXBvbmVudFJlZikge1xuICAgICAgICB1bnRyYWNrZWQoKCkgPT4gdGhpcy5hcHBseUlucHV0cyhpbnB1dHNWYWx1ZSkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gRW5zdXJlIGNsZWFudXAgaWYgdGhlIGhvc3QgdmlldyBpcyBkZXN0cm95ZWQuXG4gICAgdGhpcy5kZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiB0aGlzLmRlc3Ryb3lDb21wb25lbnQoKSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgY29tcG9uZW50IGFuZCB3aXJlcyBpbml0aWFsIGlucHV0cy9vdXRwdXRzLlxuICAgKiBAcGFyYW0gY29tcG9uZW50VHlwZSBDb21wb25lbnQgdHlwZSB0byBpbnN0YW50aWF0ZS5cbiAgICovXG4gIHByaXZhdGUgY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudFR5cGU6IFR5cGU8VD4pOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdDb250YWluZXIuY2xlYXIoKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZiA9IHRoaXMudmlld0NvbnRhaW5lci5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50VHlwZSk7XG5cbiAgICBjb25zdCBpbnB1dHNWYWx1ZSA9IHRoaXMuaW5wdXRzKCk7XG4gICAgaWYgKGlucHV0c1ZhbHVlKSB7XG4gICAgICB0aGlzLmFwcGx5SW5wdXRzKGlucHV0c1ZhbHVlKTtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXRzVmFsdWUgPSB0aGlzLm91dHB1dHMoKTtcbiAgICBpZiAob3V0cHV0c1ZhbHVlKSB7XG4gICAgICB0aGlzLnN1YnNjcmliZVRvT3V0cHV0cyhvdXRwdXRzVmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMuY29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIGlucHV0IHZhbHVlcyB0byB0aGUgY29tcG9uZW50IGluc3RhbmNlIHVzaW5nIGBzZXRJbnB1dGAuXG4gICAqIEBwYXJhbSBpbnB1dHMgSW5wdXQgdmFsdWVzIGtleWVkIGJ5IGlucHV0IG5hbWUuXG4gICAqL1xuICBwcml2YXRlIGFwcGx5SW5wdXRzKGlucHV0czogQ29tcG9uZW50SW5wdXRzPFQ+KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbXBvbmVudFJlZikgcmV0dXJuO1xuXG4gICAgT2JqZWN0LmVudHJpZXMoaW5wdXRzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmPy5zZXRJbnB1dChrZXksIHZhbHVlKTtcbiAgICB9KTtcblxuICAgIHRoaXMuY29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZXMgdG8gb3V0cHV0IHNpZ25hbCBlbWl0dGVycyBhbmQgZm9yd2FyZHMgdmFsdWVzIHRvIGhhbmRsZXJzLlxuICAgKiBAcGFyYW0gb3V0cHV0cyBPdXRwdXQgaGFuZGxlciBtYXAga2V5ZWQgYnkgb3V0cHV0IG5hbWUuXG4gICAqL1xuICBwcml2YXRlIHN1YnNjcmliZVRvT3V0cHV0cyhvdXRwdXRzOiBDb21wb25lbnRPdXRwdXRzPFQ+KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbXBvbmVudFJlZikgcmV0dXJuO1xuXG4gICAgLy8gQ2xlYXIgcHJldmlvdXMgc3Vic2NyaXB0aW9ucyBiZWZvcmUgd2lyaW5nIG5ldyBvdXRwdXRzLlxuICAgIHRoaXMuY2xlYXJPdXRwdXRTdWJzY3JpcHRpb25zKCk7XG5cbiAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gICAgT2JqZWN0LmVudHJpZXMob3V0cHV0cykuZm9yRWFjaCgoW2tleSwgaGFuZGxlcl0pID0+IHtcbiAgICAgIGlmICh0eXBlb2YgaGFuZGxlciAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuO1xuXG4gICAgICBjb25zdCBvdXRwdXQgPSBpbnN0YW5jZVtrZXldO1xuXG4gICAgICAvLyBTdWJzY3JpYmUgdG8gdGhlIG91dHB1dCBzaWduYWwgZW1pdHRlciBpZiBwcmVzZW50LlxuICAgICAgaWYgKHRoaXMuaXNPdXRwdXRFbWl0dGVyUmVmKG91dHB1dCkpIHtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gb3V0cHV0LnN1YnNjcmliZSgodmFsdWU6IHVua25vd24pID0+XG4gICAgICAgICAgaGFuZGxlcih2YWx1ZSksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMub3V0cHV0U3Vic2NyaXB0aW9ucy5hZGQoc3Vic2NyaXB0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgYWxsIG91dHB1dCBzdWJzY3JpcHRpb25zLlxuICAgKi9cbiAgcHJpdmF0ZSBjbGVhck91dHB1dFN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5vdXRwdXRTdWJzY3JpcHRpb25zLmZvckVhY2goKHN1YikgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xuICAgIHRoaXMub3V0cHV0U3Vic2NyaXB0aW9ucy5jbGVhcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIHRoZSBkeW5hbWljIGNvbXBvbmVudCBhbmQgY2xlYW5zIHN1YnNjcmlwdGlvbnMuXG4gICAqL1xuICBwcml2YXRlIGRlc3Ryb3lDb21wb25lbnQoKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhck91dHB1dFN1YnNjcmlwdGlvbnMoKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZj8uZGVzdHJveSgpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFR5cGUgZ3VhcmQgZm9yIEFuZ3VsYXIgc2lnbmFsIG91dHB1dCBlbWl0dGVycy5cbiAgICogQHBhcmFtIHZhbHVlIFZhbHVlIHRvIHRlc3QuXG4gICAqL1xuICBwcml2YXRlIGlzT3V0cHV0RW1pdHRlclJlZihcbiAgICB2YWx1ZTogdW5rbm93bixcbiAgKTogdmFsdWUgaXMgT3V0cHV0RW1pdHRlclJlZjx1bmtub3duPiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgICAnc3Vic2NyaWJlJyBpbiB2YWx1ZSAmJlxuICAgICAgdHlwZW9mICh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbJ3N1YnNjcmliZSddID09PSAnZnVuY3Rpb24nXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,156 @@
1
+ import { Injectable, inject, signal } from '@angular/core';
2
+ import { MODAL_CONFIG } from './schema/modal.config';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Central registry and lifecycle manager for modal instances.
6
+ *
7
+ * This service creates modals, tracks their state, and coordinates
8
+ * open/close/remove behavior across the application.
9
+ */
10
+ export class ModalService {
11
+ /** Default modal configuration injected via `MODAL_CONFIG`. */
12
+ config = inject(MODAL_CONFIG);
13
+ /** Incrementing counter for modal id generation. */
14
+ id = 0;
15
+ /** Internal store of modals keyed by id. */
16
+ _modals = signal(new Map());
17
+ /** Read-only signal of all registered modals. */
18
+ modals = this._modals.asReadonly();
19
+ /**
20
+ * Creates a new modal instance and registers it.
21
+ * @param options Modal options used to initialize the instance.
22
+ * @returns A ModalRef for controlling the instance.
23
+ */
24
+ create(options = {}) {
25
+ // Create a new id and build the initial modal state.
26
+ const id = `modal-${++this.id}`;
27
+ const modal = this.buildModal(id, undefined, options);
28
+ // Persist to the internal store.
29
+ this.upsertModal(modal);
30
+ return {
31
+ id,
32
+ open: this.open.bind(this, id),
33
+ close: this.close.bind(this, id),
34
+ remove: this.remove.bind(this, id),
35
+ };
36
+ }
37
+ /**
38
+ * Opens a modal by id.
39
+ * @param id Modal id.
40
+ */
41
+ open(id) {
42
+ // Set open state to true if needed.
43
+ this.updateModalState(id, true);
44
+ }
45
+ /**
46
+ * Closes a modal by id.
47
+ * @param id Modal id.
48
+ */
49
+ close(id) {
50
+ const existing = this.getModal(id);
51
+ if (!existing?.isOpen)
52
+ return;
53
+ // Set open state to false and notify callbacks.
54
+ this.updateModalState(id, false);
55
+ existing.onClosed?.();
56
+ console.log('Modal closed:', id);
57
+ // Optionally remove the modal after closing.
58
+ if (existing.removeOnClose) {
59
+ this.remove(id);
60
+ }
61
+ }
62
+ /**
63
+ * Removes a modal from the registry and DOM.
64
+ * Closes the modal first if it is open.
65
+ * @param id Modal id.
66
+ */
67
+ remove(id) {
68
+ const existing = this.getModal(id);
69
+ if (!existing)
70
+ return;
71
+ // Remove from the internal store.
72
+ this._modals.update((modals) => {
73
+ const next = new Map(modals);
74
+ next.delete(id);
75
+ return next;
76
+ });
77
+ // Fire callbacks for cleanup.
78
+ if (existing.isOpen) {
79
+ existing.onClosed?.();
80
+ }
81
+ existing.onRemoved?.();
82
+ console.log('Modal removed:', id);
83
+ }
84
+ /**
85
+ * Closes all open modals.
86
+ */
87
+ closeAll() {
88
+ // Use service close to ensure removeOnClose behavior is honored.
89
+ this.modals().forEach((modal) => this.close(modal.id));
90
+ }
91
+ /**
92
+ * Removes all modals from the registry.
93
+ */
94
+ removeAll() {
95
+ // Use service remove to ensure callbacks are fired.
96
+ this.modals().forEach((modal) => this.remove(modal.id));
97
+ }
98
+ /**
99
+ * Looks up a modal by id.
100
+ * @param id Modal id.
101
+ */
102
+ getModal(id) {
103
+ return this._modals().get(id);
104
+ }
105
+ /**
106
+ * Updates the open/closed state of a modal if it exists.
107
+ * @param id Modal id.
108
+ * @param isOpen Desired open state.
109
+ */
110
+ updateModalState(id, isOpen) {
111
+ const existing = this.getModal(id);
112
+ if (!existing || existing.isOpen === isOpen)
113
+ return;
114
+ // Rebuild the modal with the new open state.
115
+ const updated = this.buildModal(id, existing, {}, isOpen);
116
+ this.upsertModal(updated);
117
+ }
118
+ /**
119
+ * Inserts or replaces a modal in the internal store.
120
+ * @param modal Modal to upsert.
121
+ */
122
+ upsertModal(modal) {
123
+ this._modals.update((modals) => new Map(modals).set(modal.id, modal));
124
+ }
125
+ /**
126
+ * Builds a modal instance by merging defaults, existing state, and options.
127
+ * @param id Modal id.
128
+ * @param existing Existing modal state (if any).
129
+ * @param options New options to apply.
130
+ * @param isOpen Optional override for open state.
131
+ */
132
+ buildModal(id, existing, options, isOpen) {
133
+ // Resolve initial open state from the override, options, existing state, or config.
134
+ const resolvedIsOpen = isOpen ??
135
+ options.startOpen ??
136
+ existing?.startOpen ??
137
+ this.config.startOpen;
138
+ // Merge config defaults, existing values, and new options.
139
+ return {
140
+ ...this.config,
141
+ ...existing,
142
+ ...options,
143
+ id,
144
+ isOpen: resolvedIsOpen,
145
+ };
146
+ }
147
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ModalService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
148
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ModalService, providedIn: 'root' });
149
+ }
150
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ModalService, decorators: [{
151
+ type: Injectable,
152
+ args: [{
153
+ providedIn: 'root',
154
+ }]
155
+ }] });
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdGVnZWwtYW5ndWxhci1leHRlbnNpb25zL3NyYy9saWIvbW9kYWwvbW9kYWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0QsT0FBTyxFQUFFLFlBQVksRUFBZSxNQUFNLHVCQUF1QixDQUFDOztBQUdsRTs7Ozs7R0FLRztBQUlILE1BQU0sT0FBTyxZQUFZO0lBQ3ZCLCtEQUErRDtJQUM5QyxNQUFNLEdBQUcsTUFBTSxDQUFjLFlBQVksQ0FBQyxDQUFDO0lBRTVELG9EQUFvRDtJQUM1QyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsNENBQTRDO0lBQzNCLE9BQU8sR0FBRyxNQUFNLENBQXFCLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztJQUVqRSxpREFBaUQ7SUFDeEMsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7SUFFNUM7Ozs7T0FJRztJQUNILE1BQU0sQ0FBSSxVQUEyQixFQUFFO1FBQ3JDLHFEQUFxRDtRQUNyRCxNQUFNLEVBQUUsR0FBRyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN0RCxpQ0FBaUM7UUFDakMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV4QixPQUFPO1lBQ0wsRUFBRTtZQUNGLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQzlCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1NBQ2hCLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQUksQ0FBQyxFQUFVO1FBQ2Isb0NBQW9DO1FBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxFQUFVO1FBQ2QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU07WUFBRSxPQUFPO1FBRTlCLGdEQUFnRDtRQUNoRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpDLDZDQUE2QztRQUM3QyxJQUFJLFFBQVEsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xCLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxFQUFVO1FBQ2YsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU87UUFFdEIsa0NBQWtDO1FBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDN0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO1FBRUgsOEJBQThCO1FBQzlCLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3BCLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1FBQ3hCLENBQUM7UUFDRCxRQUFRLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztRQUN2QixPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7T0FFRztJQUNILFFBQVE7UUFDTixpRUFBaUU7UUFDakUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxTQUFTO1FBQ1Asb0RBQW9EO1FBQ3BELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOzs7T0FHRztJQUNLLFFBQVEsQ0FBQyxFQUFVO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLGdCQUFnQixDQUFDLEVBQVUsRUFBRSxNQUFlO1FBQ2xELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLE1BQU07WUFBRSxPQUFPO1FBRXBELDZDQUE2QztRQUM3QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7T0FHRztJQUNLLFdBQVcsQ0FBQyxLQUFZO1FBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSyxVQUFVLENBQ2hCLEVBQVUsRUFDVixRQUEyQixFQUMzQixPQUFxQixFQUNyQixNQUFnQjtRQUVoQixvRkFBb0Y7UUFDcEYsTUFBTSxjQUFjLEdBQ2xCLE1BQU07WUFDTixPQUFPLENBQUMsU0FBUztZQUNqQixRQUFRLEVBQUUsU0FBUztZQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztRQUV4QiwyREFBMkQ7UUFDM0QsT0FBTztZQUNMLEdBQUcsSUFBSSxDQUFDLE1BQU07WUFDZCxHQUFHLFFBQVE7WUFDWCxHQUFHLE9BQU87WUFDVixFQUFFO1lBQ0YsTUFBTSxFQUFFLGNBQWM7U0FDdkIsQ0FBQztJQUNKLENBQUM7d0dBOUpVLFlBQVk7NEdBQVosWUFBWSxjQUZYLE1BQU07OzRGQUVQLFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1vZGFsUmVmIH0gZnJvbSAnLi9zY2hlbWEvbW9kYWwtcmVmJztcbmltcG9ydCB7IE1PREFMX0NPTkZJRywgTW9kYWxDb25maWcgfSBmcm9tICcuL3NjaGVtYS9tb2RhbC5jb25maWcnO1xuaW1wb3J0IHsgTW9kYWwsIE1vZGFsT3B0aW9ucyB9IGZyb20gJy4vc2NoZW1hL21vZGFsLm1vZGVsJztcblxuLyoqXG4gKiBDZW50cmFsIHJlZ2lzdHJ5IGFuZCBsaWZlY3ljbGUgbWFuYWdlciBmb3IgbW9kYWwgaW5zdGFuY2VzLlxuICpcbiAqIFRoaXMgc2VydmljZSBjcmVhdGVzIG1vZGFscywgdHJhY2tzIHRoZWlyIHN0YXRlLCBhbmQgY29vcmRpbmF0ZXNcbiAqIG9wZW4vY2xvc2UvcmVtb3ZlIGJlaGF2aW9yIGFjcm9zcyB0aGUgYXBwbGljYXRpb24uXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBNb2RhbFNlcnZpY2Uge1xuICAvKiogRGVmYXVsdCBtb2RhbCBjb25maWd1cmF0aW9uIGluamVjdGVkIHZpYSBgTU9EQUxfQ09ORklHYC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWcgPSBpbmplY3Q8TW9kYWxDb25maWc+KE1PREFMX0NPTkZJRyk7XG5cbiAgLyoqIEluY3JlbWVudGluZyBjb3VudGVyIGZvciBtb2RhbCBpZCBnZW5lcmF0aW9uLiAqL1xuICBwcml2YXRlIGlkID0gMDtcbiAgLyoqIEludGVybmFsIHN0b3JlIG9mIG1vZGFscyBrZXllZCBieSBpZC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfbW9kYWxzID0gc2lnbmFsPE1hcDxzdHJpbmcsIE1vZGFsPj4obmV3IE1hcCgpKTtcblxuICAvKiogUmVhZC1vbmx5IHNpZ25hbCBvZiBhbGwgcmVnaXN0ZXJlZCBtb2RhbHMuICovXG4gIHJlYWRvbmx5IG1vZGFscyA9IHRoaXMuX21vZGFscy5hc1JlYWRvbmx5KCk7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgbW9kYWwgaW5zdGFuY2UgYW5kIHJlZ2lzdGVycyBpdC5cbiAgICogQHBhcmFtIG9wdGlvbnMgTW9kYWwgb3B0aW9ucyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGluc3RhbmNlLlxuICAgKiBAcmV0dXJucyBBIE1vZGFsUmVmIGZvciBjb250cm9sbGluZyB0aGUgaW5zdGFuY2UuXG4gICAqL1xuICBjcmVhdGU8VD4ob3B0aW9uczogTW9kYWxPcHRpb25zPFQ+ID0ge30pOiBNb2RhbFJlZiB7XG4gICAgLy8gQ3JlYXRlIGEgbmV3IGlkIGFuZCBidWlsZCB0aGUgaW5pdGlhbCBtb2RhbCBzdGF0ZS5cbiAgICBjb25zdCBpZCA9IGBtb2RhbC0keysrdGhpcy5pZH1gO1xuICAgIGNvbnN0IG1vZGFsID0gdGhpcy5idWlsZE1vZGFsKGlkLCB1bmRlZmluZWQsIG9wdGlvbnMpO1xuICAgIC8vIFBlcnNpc3QgdG8gdGhlIGludGVybmFsIHN0b3JlLlxuICAgIHRoaXMudXBzZXJ0TW9kYWwobW9kYWwpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkLFxuICAgICAgb3BlbjogdGhpcy5vcGVuLmJpbmQodGhpcywgaWQpLFxuICAgICAgY2xvc2U6IHRoaXMuY2xvc2UuYmluZCh0aGlzLCBpZCksXG4gICAgICByZW1vdmU6IHRoaXMucmVtb3ZlLmJpbmQodGhpcywgaWQpLFxuICAgIH0gc2F0aXNmaWVzIE1vZGFsUmVmO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIGEgbW9kYWwgYnkgaWQuXG4gICAqIEBwYXJhbSBpZCBNb2RhbCBpZC5cbiAgICovXG4gIG9wZW4oaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIFNldCBvcGVuIHN0YXRlIHRvIHRydWUgaWYgbmVlZGVkLlxuICAgIHRoaXMudXBkYXRlTW9kYWxTdGF0ZShpZCwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIGEgbW9kYWwgYnkgaWQuXG4gICAqIEBwYXJhbSBpZCBNb2RhbCBpZC5cbiAgICovXG4gIGNsb3NlKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuZ2V0TW9kYWwoaWQpO1xuICAgIGlmICghZXhpc3Rpbmc/LmlzT3BlbikgcmV0dXJuO1xuXG4gICAgLy8gU2V0IG9wZW4gc3RhdGUgdG8gZmFsc2UgYW5kIG5vdGlmeSBjYWxsYmFja3MuXG4gICAgdGhpcy51cGRhdGVNb2RhbFN0YXRlKGlkLCBmYWxzZSk7XG4gICAgZXhpc3Rpbmcub25DbG9zZWQ/LigpO1xuICAgIGNvbnNvbGUubG9nKCdNb2RhbCBjbG9zZWQ6JywgaWQpO1xuXG4gICAgLy8gT3B0aW9uYWxseSByZW1vdmUgdGhlIG1vZGFsIGFmdGVyIGNsb3NpbmcuXG4gICAgaWYgKGV4aXN0aW5nLnJlbW92ZU9uQ2xvc2UpIHtcbiAgICAgIHRoaXMucmVtb3ZlKGlkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIG1vZGFsIGZyb20gdGhlIHJlZ2lzdHJ5IGFuZCBET00uXG4gICAqIENsb3NlcyB0aGUgbW9kYWwgZmlyc3QgaWYgaXQgaXMgb3Blbi5cbiAgICogQHBhcmFtIGlkIE1vZGFsIGlkLlxuICAgKi9cbiAgcmVtb3ZlKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuZ2V0TW9kYWwoaWQpO1xuICAgIGlmICghZXhpc3RpbmcpIHJldHVybjtcblxuICAgIC8vIFJlbW92ZSBmcm9tIHRoZSBpbnRlcm5hbCBzdG9yZS5cbiAgICB0aGlzLl9tb2RhbHMudXBkYXRlKChtb2RhbHMpID0+IHtcbiAgICAgIGNvbnN0IG5leHQgPSBuZXcgTWFwKG1vZGFscyk7XG4gICAgICBuZXh0LmRlbGV0ZShpZCk7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9KTtcblxuICAgIC8vIEZpcmUgY2FsbGJhY2tzIGZvciBjbGVhbnVwLlxuICAgIGlmIChleGlzdGluZy5pc09wZW4pIHtcbiAgICAgIGV4aXN0aW5nLm9uQ2xvc2VkPy4oKTtcbiAgICB9XG4gICAgZXhpc3Rpbmcub25SZW1vdmVkPy4oKTtcbiAgICBjb25zb2xlLmxvZygnTW9kYWwgcmVtb3ZlZDonLCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIGFsbCBvcGVuIG1vZGFscy5cbiAgICovXG4gIGNsb3NlQWxsKCk6IHZvaWQge1xuICAgIC8vIFVzZSBzZXJ2aWNlIGNsb3NlIHRvIGVuc3VyZSByZW1vdmVPbkNsb3NlIGJlaGF2aW9yIGlzIGhvbm9yZWQuXG4gICAgdGhpcy5tb2RhbHMoKS5mb3JFYWNoKChtb2RhbCkgPT4gdGhpcy5jbG9zZShtb2RhbC5pZCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYWxsIG1vZGFscyBmcm9tIHRoZSByZWdpc3RyeS5cbiAgICovXG4gIHJlbW92ZUFsbCgpOiB2b2lkIHtcbiAgICAvLyBVc2Ugc2VydmljZSByZW1vdmUgdG8gZW5zdXJlIGNhbGxiYWNrcyBhcmUgZmlyZWQuXG4gICAgdGhpcy5tb2RhbHMoKS5mb3JFYWNoKChtb2RhbCkgPT4gdGhpcy5yZW1vdmUobW9kYWwuaWQpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb29rcyB1cCBhIG1vZGFsIGJ5IGlkLlxuICAgKiBAcGFyYW0gaWQgTW9kYWwgaWQuXG4gICAqL1xuICBwcml2YXRlIGdldE1vZGFsKGlkOiBzdHJpbmcpOiBNb2RhbCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX21vZGFscygpLmdldChpZCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgb3Blbi9jbG9zZWQgc3RhdGUgb2YgYSBtb2RhbCBpZiBpdCBleGlzdHMuXG4gICAqIEBwYXJhbSBpZCBNb2RhbCBpZC5cbiAgICogQHBhcmFtIGlzT3BlbiBEZXNpcmVkIG9wZW4gc3RhdGUuXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZU1vZGFsU3RhdGUoaWQ6IHN0cmluZywgaXNPcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmdldE1vZGFsKGlkKTtcbiAgICBpZiAoIWV4aXN0aW5nIHx8IGV4aXN0aW5nLmlzT3BlbiA9PT0gaXNPcGVuKSByZXR1cm47XG5cbiAgICAvLyBSZWJ1aWxkIHRoZSBtb2RhbCB3aXRoIHRoZSBuZXcgb3BlbiBzdGF0ZS5cbiAgICBjb25zdCB1cGRhdGVkID0gdGhpcy5idWlsZE1vZGFsKGlkLCBleGlzdGluZywge30sIGlzT3Blbik7XG4gICAgdGhpcy51cHNlcnRNb2RhbCh1cGRhdGVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnNlcnRzIG9yIHJlcGxhY2VzIGEgbW9kYWwgaW4gdGhlIGludGVybmFsIHN0b3JlLlxuICAgKiBAcGFyYW0gbW9kYWwgTW9kYWwgdG8gdXBzZXJ0LlxuICAgKi9cbiAgcHJpdmF0ZSB1cHNlcnRNb2RhbChtb2RhbDogTW9kYWwpOiB2b2lkIHtcbiAgICB0aGlzLl9tb2RhbHMudXBkYXRlKChtb2RhbHMpID0+IG5ldyBNYXAobW9kYWxzKS5zZXQobW9kYWwuaWQsIG1vZGFsKSk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGEgbW9kYWwgaW5zdGFuY2UgYnkgbWVyZ2luZyBkZWZhdWx0cywgZXhpc3Rpbmcgc3RhdGUsIGFuZCBvcHRpb25zLlxuICAgKiBAcGFyYW0gaWQgTW9kYWwgaWQuXG4gICAqIEBwYXJhbSBleGlzdGluZyBFeGlzdGluZyBtb2RhbCBzdGF0ZSAoaWYgYW55KS5cbiAgICogQHBhcmFtIG9wdGlvbnMgTmV3IG9wdGlvbnMgdG8gYXBwbHkuXG4gICAqIEBwYXJhbSBpc09wZW4gT3B0aW9uYWwgb3ZlcnJpZGUgZm9yIG9wZW4gc3RhdGUuXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkTW9kYWwoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBleGlzdGluZzogTW9kYWwgfCB1bmRlZmluZWQsXG4gICAgb3B0aW9uczogTW9kYWxPcHRpb25zLFxuICAgIGlzT3Blbj86IGJvb2xlYW4sXG4gICk6IE1vZGFsIHtcbiAgICAvLyBSZXNvbHZlIGluaXRpYWwgb3BlbiBzdGF0ZSBmcm9tIHRoZSBvdmVycmlkZSwgb3B0aW9ucywgZXhpc3Rpbmcgc3RhdGUsIG9yIGNvbmZpZy5cbiAgICBjb25zdCByZXNvbHZlZElzT3BlbiA9XG4gICAgICBpc09wZW4gPz9cbiAgICAgIG9wdGlvbnMuc3RhcnRPcGVuID8/XG4gICAgICBleGlzdGluZz8uc3RhcnRPcGVuID8/XG4gICAgICB0aGlzLmNvbmZpZy5zdGFydE9wZW47XG5cbiAgICAvLyBNZXJnZSBjb25maWcgZGVmYXVsdHMsIGV4aXN0aW5nIHZhbHVlcywgYW5kIG5ldyBvcHRpb25zLlxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmNvbmZpZyxcbiAgICAgIC4uLmV4aXN0aW5nLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGlkLFxuICAgICAgaXNPcGVuOiByZXNvbHZlZElzT3BlbixcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -0,0 +1,25 @@
1
+ import { makeEnvironmentProviders, provideAppInitializer, } from '@angular/core';
2
+ import { bootstrapGlobalComponent } from '../utils/bootstrap-global-component';
3
+ import { ModalHostComponent } from './components/modal-host/modal-host.component';
4
+ import { DEFAULT_MODAL_CONFIG, MODAL_CONFIG, } from './schema/modal.config';
5
+ /**
6
+ * Provides modal configuration defaults and bootstraps the global modal host.
7
+ *
8
+ * @param config Optional config overrides applied on top of defaults.
9
+ * @returns EnvironmentProviders to register in application providers.
10
+ */
11
+ export function provideModal(config = {}) {
12
+ return makeEnvironmentProviders([
13
+ {
14
+ provide: MODAL_CONFIG,
15
+ useFactory: () => ({
16
+ ...DEFAULT_MODAL_CONFIG,
17
+ ...(config ?? {}),
18
+ }),
19
+ },
20
+ provideAppInitializer(() => {
21
+ bootstrapGlobalComponent(ModalHostComponent, { reuseIfExists: true });
22
+ }),
23
+ ]);
24
+ }
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS1tb2RhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdGVnZWwtYW5ndWxhci1leHRlbnNpb25zL3NyYy9saWIvbW9kYWwvcHJvdmlkZS1tb2RhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsd0JBQXdCLEVBQ3hCLHFCQUFxQixHQUN0QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNsRixPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLFlBQVksR0FFYixNQUFNLHVCQUF1QixDQUFDO0FBRS9COzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FDMUIsU0FBK0IsRUFBRTtJQUVqQyxPQUFPLHdCQUF3QixDQUFDO1FBQzlCO1lBQ0UsT0FBTyxFQUFFLFlBQVk7WUFDckIsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQ2pCLEdBQUcsb0JBQW9CO2dCQUN2QixHQUFHLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQzthQUNsQixDQUFDO1NBQ0g7UUFDRCxxQkFBcUIsQ0FBQyxHQUFHLEVBQUU7WUFDekIsd0JBQXdCLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN4RSxDQUFDLENBQUM7S0FDSCxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRW52aXJvbm1lbnRQcm92aWRlcnMsXG4gIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyxcbiAgcHJvdmlkZUFwcEluaXRpYWxpemVyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGJvb3RzdHJhcEdsb2JhbENvbXBvbmVudCB9IGZyb20gJy4uL3V0aWxzL2Jvb3RzdHJhcC1nbG9iYWwtY29tcG9uZW50JztcbmltcG9ydCB7IE1vZGFsSG9zdENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9tb2RhbC1ob3N0L21vZGFsLWhvc3QuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIERFRkFVTFRfTU9EQUxfQ09ORklHLFxuICBNT0RBTF9DT05GSUcsXG4gIE1vZGFsQ29uZmlnLFxufSBmcm9tICcuL3NjaGVtYS9tb2RhbC5jb25maWcnO1xuXG4vKipcbiAqIFByb3ZpZGVzIG1vZGFsIGNvbmZpZ3VyYXRpb24gZGVmYXVsdHMgYW5kIGJvb3RzdHJhcHMgdGhlIGdsb2JhbCBtb2RhbCBob3N0LlxuICpcbiAqIEBwYXJhbSBjb25maWcgT3B0aW9uYWwgY29uZmlnIG92ZXJyaWRlcyBhcHBsaWVkIG9uIHRvcCBvZiBkZWZhdWx0cy5cbiAqIEByZXR1cm5zIEVudmlyb25tZW50UHJvdmlkZXJzIHRvIHJlZ2lzdGVyIGluIGFwcGxpY2F0aW9uIHByb3ZpZGVycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVNb2RhbChcbiAgY29uZmlnOiBQYXJ0aWFsPE1vZGFsQ29uZmlnPiA9IHt9LFxuKTogRW52aXJvbm1lbnRQcm92aWRlcnMge1xuICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBNT0RBTF9DT05GSUcsXG4gICAgICB1c2VGYWN0b3J5OiAoKSA9PiAoe1xuICAgICAgICAuLi5ERUZBVUxUX01PREFMX0NPTkZJRyxcbiAgICAgICAgLi4uKGNvbmZpZyA/PyB7fSksXG4gICAgICB9KSxcbiAgICB9LFxuICAgIHByb3ZpZGVBcHBJbml0aWFsaXplcigoKSA9PiB7XG4gICAgICBib290c3RyYXBHbG9iYWxDb21wb25lbnQoTW9kYWxIb3N0Q29tcG9uZW50LCB7IHJldXNlSWZFeGlzdHM6IHRydWUgfSk7XG4gICAgfSksXG4gIF0pO1xufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtcmVmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy90ZWdlbC1hbmd1bGFyLWV4dGVuc2lvbnMvc3JjL2xpYi9tb2RhbC9zY2hlbWEvbW9kYWwtcmVmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIE1vZGFsUmVmIHtcbiAgLyoqIFVuaXF1ZSBpZCBmb3IgdGhlIG1vZGFsIGluc3RhbmNlLiAqL1xuICBpZDogc3RyaW5nO1xuICAvKiogT3BlbnMgdGhlIG1vZGFsIGluc3RhbmNlLiAqL1xuICBvcGVuOiAoKSA9PiB2b2lkO1xuICAvKiogQ2xvc2VzIHRoZSBtb2RhbCBpbnN0YW5jZS4gKi9cbiAgY2xvc2U6ICgpID0+IHZvaWQ7XG4gIC8qKiBSZW1vdmVzIHRoZSBtb2RhbCBpbnN0YW5jZSBmcm9tIHRoZSBET00uICovXG4gIHJlbW92ZTogKCkgPT4gdm9pZDtcbn1cbiJdfQ==
@@ -0,0 +1,15 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ /** Injection token for modal configuration defaults. */
3
+ export const MODAL_CONFIG = new InjectionToken('ModalConfig');
4
+ /** Default modal configuration. */
5
+ export const DEFAULT_MODAL_CONFIG = {
6
+ size: 'md',
7
+ actionsPosition: 'static',
8
+ prevent: false,
9
+ closable: true,
10
+ alertDialog: 'dialog',
11
+ lazy: false,
12
+ startOpen: true,
13
+ removeOnClose: true,
14
+ };
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy90ZWdlbC1hbmd1bGFyLWV4dGVuc2lvbnMvc3JjL2xpYi9tb2RhbC9zY2hlbWEvbW9kYWwuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUE4Qi9DLHdEQUF3RDtBQUN4RCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxjQUFjLENBQWMsYUFBYSxDQUFDLENBQUM7QUFFM0UsbUNBQW1DO0FBQ25DLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUEwQjtJQUN6RCxJQUFJLEVBQUUsSUFBSTtJQUNWLGVBQWUsRUFBRSxRQUFRO0lBQ3pCLE9BQU8sRUFBRSxLQUFLO0lBQ2QsUUFBUSxFQUFFLElBQUk7SUFDZCxXQUFXLEVBQUUsUUFBUTtJQUNyQixJQUFJLEVBQUUsS0FBSztJQUNYLFNBQVMsRUFBRSxJQUFJO0lBQ2YsYUFBYSxFQUFFLElBQUk7Q0FDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBNb2RhbEFjdGlvbnNQb3NpdGlvbixcbiAgTW9kYWxBbGVydERpYWxvZ1JvbGUsXG4gIE1vZGFsU2l6ZSxcbn0gZnJvbSAnLi9tb2RhbC50eXBlcyc7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiB1c2VkIGJ5IHRoZSBtb2RhbCBzZXJ2aWNlIHdoZW4gY3JlYXRpbmcgbW9kYWxzLlxuICogSW5kaXZpZHVhbCBtb2RhbCBvcHRpb25zIGNhbiBvdmVycmlkZSBhbnkgb2YgdGhlc2UgdmFsdWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZGFsQ29uZmlnIHtcbiAgLyoqIFNpemUgb2YgdGhlIG1vZGFsIGRpYWxvZy4gKi9cbiAgc2l6ZTogTW9kYWxTaXplO1xuICAvKiogUG9zaXRpb25pbmcgYmVoYXZpb3IgZm9yIHRoZSBhY3Rpb25zIGFyZWEuICovXG4gIGFjdGlvbnNQb3NpdGlvbjogTW9kYWxBY3Rpb25zUG9zaXRpb247XG4gIC8qKiBQcmV2ZW50IGNsb3Npbmcgd2hlbiBjbGlja2luZyB0aGUgb3ZlcmxheS4gKi9cbiAgcHJldmVudDogYm9vbGVhbjtcbiAgLyoqIFNob3cgb3IgaGlkZSB0aGUgY2xvc2UgW1hdIGJ1dHRvbi4gKi9cbiAgY2xvc2FibGU6IGJvb2xlYW47XG4gIC8qKiBBUklBIHJvbGUgZm9yIHRoZSBtb2RhbCBlbGVtZW50LiAqL1xuICBhbGVydERpYWxvZzogTW9kYWxBbGVydERpYWxvZ1JvbGU7XG4gIC8qKiBJZiB0cnVlLCBjb250ZW50IGlzIG9ubHkgcmVuZGVyZWQgd2hpbGUgb3Blbi4gKi9cbiAgbGF6eTogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgYSBtb2RhbCBzdGFydHMgb3BlbiAqL1xuICBzdGFydE9wZW46IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIGEgbW9kYWwgc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSBET00gb24gY2xvc2UgKi9cbiAgcmVtb3ZlT25DbG9zZTogYm9vbGVhbjtcbn1cblxuLyoqIEluamVjdGlvbiB0b2tlbiBmb3IgbW9kYWwgY29uZmlndXJhdGlvbiBkZWZhdWx0cy4gKi9cbmV4cG9ydCBjb25zdCBNT0RBTF9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48TW9kYWxDb25maWc+KCdNb2RhbENvbmZpZycpO1xuXG4vKiogRGVmYXVsdCBtb2RhbCBjb25maWd1cmF0aW9uLiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTU9EQUxfQ09ORklHOiBSZXF1aXJlZDxNb2RhbENvbmZpZz4gPSB7XG4gIHNpemU6ICdtZCcsXG4gIGFjdGlvbnNQb3NpdGlvbjogJ3N0YXRpYycsXG4gIHByZXZlbnQ6IGZhbHNlLFxuICBjbG9zYWJsZTogdHJ1ZSxcbiAgYWxlcnREaWFsb2c6ICdkaWFsb2cnLFxuICBsYXp5OiBmYWxzZSxcbiAgc3RhcnRPcGVuOiB0cnVlLFxuICByZW1vdmVPbkNsb3NlOiB0cnVlLFxufTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3RlZ2VsLWFuZ3VsYXItZXh0ZW5zaW9ucy9zcmMvbGliL21vZGFsL3NjaGVtYS9tb2RhbC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVtcGxhdGVSZWYsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENvbXBvbmVudElucHV0cyxcbiAgQ29tcG9uZW50T3V0cHV0cyxcbn0gZnJvbSAnLi4vLi4vdXRpbHMvYW5ndWxhci1jb21wb25lbnQtaW8nO1xuaW1wb3J0IHsgTW9kYWxDb25maWcgfSBmcm9tICcuL21vZGFsLmNvbmZpZyc7XG5pbXBvcnQgeyBNb2RhbEJ1dHRvbiB9IGZyb20gJy4vbW9kYWwudHlwZXMnO1xuXG4vKiogQ29tcG9uZW50LWJhc2VkIG1vZGFsIGJvZHkgd2l0aCB0eXBlZCBpbnB1dHMvb3V0cHV0cy4gKi9cbmV4cG9ydCB0eXBlIE1vZGFsQ29tcG9uZW50Qm9keTxUQ29tcG9uZW50ID0gdW5rbm93bj4gPSB7XG4gIGNvbXBvbmVudDogVHlwZTxUQ29tcG9uZW50PjtcbiAgaW5wdXRzOiBDb21wb25lbnRJbnB1dHM8VENvbXBvbmVudD47XG4gIG91dHB1dHM/OiBDb21wb25lbnRPdXRwdXRzPFRDb21wb25lbnQ+O1xufTtcblxuLyoqIFRlbXBsYXRlLWJhc2VkIG1vZGFsIGJvZHkgd2l0aCBhbiBvcHRpb25hbCBjb250ZXh0LiAqL1xuZXhwb3J0IHR5cGUgTW9kYWxUZW1wbGF0ZUJvZHk8VENvbnRleHQgPSB1bmtub3duPiA9IHtcbiAgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPFRDb250ZXh0PjtcbiAgY29udGV4dD86IFRDb250ZXh0O1xufTtcblxuLyoqIFVuaW9uIG9mIHN1cHBvcnRlZCBtb2RhbCBib2R5IHR5cGVzLiAqL1xuZXhwb3J0IHR5cGUgTW9kYWxCb2R5PFQgPSB1bmtub3duPiA9XG4gIHwgc3RyaW5nXG4gIHwgTW9kYWxUZW1wbGF0ZUJvZHk8VD5cbiAgfCBNb2RhbENvbXBvbmVudEJvZHk8VD47XG5cbi8qKiBQdWJsaWMgb3B0aW9ucyB1c2VkIHdoZW4gY3JlYXRpbmcgYSBtb2RhbC4gKi9cbmV4cG9ydCB0eXBlIE1vZGFsT3B0aW9uczxUID0gdW5rbm93bj4gPSBQYXJ0aWFsPE1vZGFsQ29uZmlnPiAmIHtcbiAgc2VsZWN0b3I/OiBzdHJpbmc7XG4gIHJlZmVyZW5jZUVsPzogSFRNTEVsZW1lbnQ7XG4gIGhlYWRlcj86IHN0cmluZyB8IFRlbXBsYXRlUmVmPHVua25vd24+O1xuICBib2R5PzogTW9kYWxCb2R5PFQ+O1xuICBidXR0b25zPzogTW9kYWxCdXR0b25bXTtcbiAgLyoqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIG1vZGFsIGlzIGNsb3NlZCAodXNlciBvciBwcm9ncmFtbWF0aWMpLiAqL1xuICBvbkNsb3NlZD86ICgpID0+IHZvaWQ7XG4gIC8qKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBtb2RhbCBpcyByZW1vdmVkIGZyb20gdGhlIERPTS4gKi9cbiAgb25SZW1vdmVkPzogKCkgPT4gdm9pZDtcbn07XG5cbi8qKiBSdW50aW1lIG1vZGFsIHN0YXRlIHN0b3JlZCBieSB0aGUgc2VydmljZS4gKi9cbmV4cG9ydCB0eXBlIE1vZGFsID0gUmVxdWlyZWQ8TW9kYWxDb25maWc+ICZcbiAgT21pdDxNb2RhbE9wdGlvbnM8dW5rbm93bj4sIGtleW9mIE1vZGFsQ29uZmlnPiAmIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGlzT3BlbjogYm9vbGVhbjtcbiAgfTtcbiJdfQ==
@@ -0,0 +1,3 @@
1
+ /** Pure domain/UI types for modal components. */
2
+ export {};
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3RlZ2VsLWFuZ3VsYXItZXh0ZW5zaW9ucy9zcmMvbGliL21vZGFsL3NjaGVtYS9tb2RhbC50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpREFBaUQiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogUHVyZSBkb21haW4vVUkgdHlwZXMgZm9yIG1vZGFsIGNvbXBvbmVudHMuICovXG5cbi8qKiBTdXBwb3J0ZWQgbW9kYWwgc2l6ZXMuICovXG5leHBvcnQgdHlwZSBNb2RhbFNpemUgPSAnbGcnIHwgJ21kJyB8ICdzbScgfCAneHMnO1xuLyoqIFBvc2l0aW9uaW5nIGJlaGF2aW9yIGZvciB0aGUgYWN0aW9ucyBzbG90LiAqL1xuZXhwb3J0IHR5cGUgTW9kYWxBY3Rpb25zUG9zaXRpb24gPSAnc3RpY2t5JyB8ICdzdGF0aWMnO1xuLyoqIEFSSUEgcm9sZSB1c2VkIGJ5IHRoZSBtb2RhbCBmb3IgYWNjZXNzaWJpbGl0eS4gKi9cbmV4cG9ydCB0eXBlIE1vZGFsQWxlcnREaWFsb2dSb2xlID0gJ2RpYWxvZycgfCAnYWxlcnRkaWFsb2cnO1xuXG4vKiogRGVzY3JpcHRvciBmb3IgYSBidXR0b24gcmVuZGVyZWQgaW4gdGhlIG1vZGFsIGFjdGlvbnMgYXJlYS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kYWxCdXR0b24ge1xuICAvKiogQnV0dG9uIGxhYmVsIHRleHQuICovXG4gIHRleHQ6IHN0cmluZztcbiAgLyoqIFZpc3VhbCB2YXJpYW50IGZvciB0aGUgYnV0dG9uLiAqL1xuICB2YXJpYW50PzogJ3ByaW1hcnknIHwgJ3NlY29uZGFyeScgfCAnc3VjY2VzcycgfCAnZGFuZ2VyJztcbiAgLyoqIFNpemUgb2YgdGhlIGJ1dHRvbi4gKi9cbiAgc2l6ZT86ICd4cycgfCAnc20nIHwgJ21kJyB8ICdsZyc7XG4gIC8qKiBXaGV0aGVyIHRoZSBidXR0b24gaXMgZGlzYWJsZWQuICovXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqIElmIHRydWUsIGNsaWNraW5nIHRyaWdnZXJzIG1vZGFsIGRpc21pc3NhbC4gKi9cbiAgZGlzbWlzcz86IGJvb2xlYW47XG4gIC8qKiBPcHRpb25hbCBjbGljayBoYW5kbGVyIChzeW5jIG9yIGFzeW5jKS4gKi9cbiAgb25DbGljaz86ICgpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xufVxuIl19
@@ -2,6 +2,12 @@ import { makeEnvironmentProviders, provideAppInitializer, } from '@angular/core'
2
2
  import { bootstrapGlobalComponent } from '../utils/bootstrap-global-component';
3
3
  import { ToastComponent } from './toast.component';
4
4
  import { DEFAULT_TOAST_CONFIG, TOAST_CONFIG, } from './toast.config';
5
+ /**
6
+ * Provides toast configuration defaults and bootstraps the global toast host.
7
+ *
8
+ * @param config Optional config overrides applied on top of defaults.
9
+ * @returns EnvironmentProviders to register in application providers.
10
+ */
5
11
  export function provideToast(config = {}) {
6
12
  return makeEnvironmentProviders([
7
13
  {
@@ -16,4 +22,4 @@ export function provideToast(config = {}) {
16
22
  }),
17
23
  ]);
18
24
  }
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS10b2FzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdGVnZWwtYW5ndWxhci1leHRlbnNpb25zL3NyYy9saWIvdG9hc3QvcHJvdmlkZS10b2FzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsd0JBQXdCLEVBQ3hCLHFCQUFxQixHQUN0QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixZQUFZLEdBRWIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixNQUFNLFVBQVUsWUFBWSxDQUMxQixTQUErQixFQUFFO0lBRWpDLE9BQU8sd0JBQXdCLENBQUM7UUFDOUI7WUFDRSxPQUFPLEVBQUUsWUFBWTtZQUNyQixVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDakIsR0FBRyxvQkFBb0I7Z0JBQ3ZCLEdBQUcsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO2FBQ2xCLENBQUM7U0FDSDtRQUNELHFCQUFxQixDQUFDLEdBQUcsRUFBRTtZQUN6Qix3QkFBd0IsQ0FBQyxjQUFjLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNwRSxDQUFDLENBQUM7S0FDSCxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRW52aXJvbm1lbnRQcm92aWRlcnMsXG4gIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyxcbiAgcHJvdmlkZUFwcEluaXRpYWxpemVyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGJvb3RzdHJhcEdsb2JhbENvbXBvbmVudCB9IGZyb20gJy4uL3V0aWxzL2Jvb3RzdHJhcC1nbG9iYWwtY29tcG9uZW50JztcbmltcG9ydCB7IFRvYXN0Q29tcG9uZW50IH0gZnJvbSAnLi90b2FzdC5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9UT0FTVF9DT05GSUcsXG4gIFRPQVNUX0NPTkZJRyxcbiAgVG9hc3RDb25maWcsXG59IGZyb20gJy4vdG9hc3QuY29uZmlnJztcblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVUb2FzdChcbiAgY29uZmlnOiBQYXJ0aWFsPFRvYXN0Q29uZmlnPiA9IHt9XG4pOiBFbnZpcm9ubWVudFByb3ZpZGVycyB7XG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IFRPQVNUX0NPTkZJRyxcbiAgICAgIHVzZUZhY3Rvcnk6ICgpID0+ICh7XG4gICAgICAgIC4uLkRFRkFVTFRfVE9BU1RfQ09ORklHLFxuICAgICAgICAuLi4oY29uZmlnID8/IHt9KSxcbiAgICAgIH0pLFxuICAgIH0sXG4gICAgcHJvdmlkZUFwcEluaXRpYWxpemVyKCgpID0+IHtcbiAgICAgIGJvb3RzdHJhcEdsb2JhbENvbXBvbmVudChUb2FzdENvbXBvbmVudCwgeyByZXVzZUlmRXhpc3RzOiB0cnVlIH0pO1xuICAgIH0pLFxuICBdKTtcbn1cbiJdfQ==
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS10b2FzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdGVnZWwtYW5ndWxhci1leHRlbnNpb25zL3NyYy9saWIvdG9hc3QvcHJvdmlkZS10b2FzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsd0JBQXdCLEVBQ3hCLHFCQUFxQixHQUN0QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixZQUFZLEdBRWIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4Qjs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQzFCLFNBQStCLEVBQUU7SUFFakMsT0FBTyx3QkFBd0IsQ0FBQztRQUM5QjtZQUNFLE9BQU8sRUFBRSxZQUFZO1lBQ3JCLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUNqQixHQUFHLG9CQUFvQjtnQkFDdkIsR0FBRyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7YUFDbEIsQ0FBQztTQUNIO1FBQ0QscUJBQXFCLENBQUMsR0FBRyxFQUFFO1lBQ3pCLHdCQUF3QixDQUFDLGNBQWMsRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLENBQUMsQ0FBQztLQUNILENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBFbnZpcm9ubWVudFByb3ZpZGVycyxcbiAgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzLFxuICBwcm92aWRlQXBwSW5pdGlhbGl6ZXIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgYm9vdHN0cmFwR2xvYmFsQ29tcG9uZW50IH0gZnJvbSAnLi4vdXRpbHMvYm9vdHN0cmFwLWdsb2JhbC1jb21wb25lbnQnO1xuaW1wb3J0IHsgVG9hc3RDb21wb25lbnQgfSBmcm9tICcuL3RvYXN0LmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBERUZBVUxUX1RPQVNUX0NPTkZJRyxcbiAgVE9BU1RfQ09ORklHLFxuICBUb2FzdENvbmZpZyxcbn0gZnJvbSAnLi90b2FzdC5jb25maWcnO1xuXG4vKipcbiAqIFByb3ZpZGVzIHRvYXN0IGNvbmZpZ3VyYXRpb24gZGVmYXVsdHMgYW5kIGJvb3RzdHJhcHMgdGhlIGdsb2JhbCB0b2FzdCBob3N0LlxuICpcbiAqIEBwYXJhbSBjb25maWcgT3B0aW9uYWwgY29uZmlnIG92ZXJyaWRlcyBhcHBsaWVkIG9uIHRvcCBvZiBkZWZhdWx0cy5cbiAqIEByZXR1cm5zIEVudmlyb25tZW50UHJvdmlkZXJzIHRvIHJlZ2lzdGVyIGluIGFwcGxpY2F0aW9uIHByb3ZpZGVycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVUb2FzdChcbiAgY29uZmlnOiBQYXJ0aWFsPFRvYXN0Q29uZmlnPiA9IHt9LFxuKTogRW52aXJvbm1lbnRQcm92aWRlcnMge1xuICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBUT0FTVF9DT05GSUcsXG4gICAgICB1c2VGYWN0b3J5OiAoKSA9PiAoe1xuICAgICAgICAuLi5ERUZBVUxUX1RPQVNUX0NPTkZJRyxcbiAgICAgICAgLi4uKGNvbmZpZyA/PyB7fSksXG4gICAgICB9KSxcbiAgICB9LFxuICAgIHByb3ZpZGVBcHBJbml0aWFsaXplcigoKSA9PiB7XG4gICAgICBib290c3RyYXBHbG9iYWxDb21wb25lbnQoVG9hc3RDb21wb25lbnQsIHsgcmV1c2VJZkV4aXN0czogdHJ1ZSB9KTtcbiAgICB9KSxcbiAgXSk7XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1jb21wb25lbnQtaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3RlZ2VsLWFuZ3VsYXItZXh0ZW5zaW9ucy9zcmMvbGliL3V0aWxzL2FuZ3VsYXItY29tcG9uZW50LWlvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbnB1dFNpZ25hbCwgT3V0cHV0RW1pdHRlclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKiArLS0tLS0tLS0rICovXG4vKiB8IElOUFVUUyB8ICovXG4vKiArLS0tLS0tLS0rICovXG5cbi8qKlxuICogRXh0cmFjdHMgdGhlIGlubmVyIHZhbHVlIHR5cGUgZnJvbSBhbiBJbnB1dFNpZ25hbC5cbiAqIEV4YW1wbGU6IElucHV0U2lnbmFsPHN0cmluZz4gLT4gc3RyaW5nXG4gKi9cbnR5cGUgRXh0cmFjdElucHV0VmFsdWU8VD4gPSBUIGV4dGVuZHMgSW5wdXRTaWduYWw8aW5mZXIgVj4gPyBWIDogbmV2ZXI7XG5cbi8qKlxuICogR2V0cyBhbGwgcHJvcGVydHkga2V5cyB0aGF0IGFyZSByZXF1aXJlZCBpbnB1dCBzaWduYWxzIChgaW5wdXQucmVxdWlyZWQ8VD4oKWApLlxuICogVGhlc2UgYXJlIElucHV0U2lnbmFscyB3aGVyZSBgdW5kZWZpbmVkYCBpcyBOT1QgcGFydCBvZiB0aGUgdmFsdWUgdHlwZS5cbiAqL1xuZXhwb3J0IHR5cGUgUmVxdWlyZWRJbnB1dEtleXM8VD4gPSB7XG4gIFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgSW5wdXRTaWduYWw8aW5mZXIgVj5cbiAgICA/IHVuZGVmaW5lZCBleHRlbmRzIFZcbiAgICAgID8gbmV2ZXJcbiAgICAgIDogS1xuICAgIDogbmV2ZXI7XG59W2tleW9mIFRdO1xuXG4vKipcbiAqIEdldHMgYWxsIHByb3BlcnR5IGtleXMgdGhhdCBhcmUgb3B0aW9uYWwgaW5wdXQgc2lnbmFscyAoYGlucHV0PFQgfCB1bmRlZmluZWQ+KClgKS5cbiAqIFRoZXNlIGFyZSBJbnB1dFNpZ25hbHMgd2hlcmUgYHVuZGVmaW5lZGAgSVMgcGFydCBvZiB0aGUgdmFsdWUgdHlwZS5cbiAqL1xuZXhwb3J0IHR5cGUgT3B0aW9uYWxJbnB1dEtleXM8VD4gPSB7XG4gIFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgSW5wdXRTaWduYWw8aW5mZXIgVj5cbiAgICA/IHVuZGVmaW5lZCBleHRlbmRzIFZcbiAgICAgID8gS1xuICAgICAgOiBuZXZlclxuICAgIDogbmV2ZXI7XG59W2tleW9mIFRdO1xuXG4vKipcbiAqIENyZWF0ZXMgYSB0eXBlIHJlcHJlc2VudGluZyB0aGUgaW5wdXQgdmFsdWVzIGZvciBhbiBBbmd1bGFyIGNvbXBvbmVudC5cbiAqIC0gUmVxdWlyZWQgaW5wdXRzIChgaW5wdXQucmVxdWlyZWQ8VD4oKWApIGJlY29tZSByZXF1aXJlZCBwcm9wZXJ0aWVzXG4gKiAtIE9wdGlvbmFsIGlucHV0cyAoYGlucHV0PFQgfCB1bmRlZmluZWQ+KClgKSBiZWNvbWUgb3B0aW9uYWwgcHJvcGVydGllc1xuICogLSBOb24taW5wdXQgcHJvcGVydGllcyBhcmUgZXhjbHVkZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogY2xhc3MgTXlDb21wb25lbnQge1xuICogICBuYW1lID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuICogICBhZ2UgPSBpbnB1dDxudW1iZXIgfCB1bmRlZmluZWQ+KCk7XG4gKiB9XG4gKlxuICogdHlwZSBJbnB1dHMgPSBDb21wb25lbnRJbnB1dHM8TXlDb21wb25lbnQ+O1xuICogLy8geyBuYW1lOiBzdHJpbmc7IGFnZT86IG51bWJlciB8IHVuZGVmaW5lZCB9XG4gKi9cbmV4cG9ydCB0eXBlIENvbXBvbmVudElucHV0czxUPiA9IHtcbiAgW0sgaW4gUmVxdWlyZWRJbnB1dEtleXM8VD5dOiBFeHRyYWN0SW5wdXRWYWx1ZTxUW0tdPjtcbn0gJiB7XG4gIFtLIGluIE9wdGlvbmFsSW5wdXRLZXlzPFQ+XT86IEV4dHJhY3RJbnB1dFZhbHVlPFRbS10+O1xufTtcblxuLyogKy0tLS0tLS0tLSsgKi9cbi8qIHwgT1VUUFVUUyB8ICovXG4vKiArLS0tLS0tLS0tKyAqL1xuXG4vKipcbiAqIEV4dHJhY3RzIHRoZSBpbm5lciB2YWx1ZSB0eXBlIGZyb20gYW4gT3V0cHV0RW1pdHRlclJlZi5cbiAqIEV4YW1wbGU6IE91dHB1dEVtaXR0ZXJSZWY8c3RyaW5nPiAtPiBzdHJpbmdcbiAqL1xudHlwZSBFeHRyYWN0T3V0cHV0VmFsdWU8VD4gPSBUIGV4dGVuZHMgT3V0cHV0RW1pdHRlclJlZjxpbmZlciBWPiA/IFYgOiBuZXZlcjtcblxuLyoqXG4gKiBHZXRzIGFsbCBwcm9wZXJ0eSBrZXlzIHRoYXQgYXJlIG91dHB1dCBzaWduYWxzIChgb3V0cHV0PFQ+KClgKS5cbiAqL1xudHlwZSBPdXRwdXRLZXlzPFQ+ID0ge1xuICBbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIE91dHB1dEVtaXR0ZXJSZWY8dW5rbm93bj4gPyBLIDogbmV2ZXI7XG59W2tleW9mIFRdO1xuXG4vKipcbiAqIENyZWF0ZXMgYSB0eXBlIHJlcHJlc2VudGluZyB0aGUgb3V0cHV0IGV2ZW50IGhhbmRsZXJzIGZvciBhbiBBbmd1bGFyIGNvbXBvbmVudC5cbiAqIENvbnZlcnRzIG91dHB1dCBzaWduYWxzIGludG8gY2FsbGJhY2sgZnVuY3Rpb25zIHRoYXQgcmVjZWl2ZSB0aGUgZW1pdHRlZCB2YWx1ZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogY2xhc3MgTXlDb21wb25lbnQge1xuICogICBjbG9zZWQgPSBvdXRwdXQ8dm9pZD4oKTtcbiAqICAgdmFsdWVDaGFuZ2VkID0gb3V0cHV0PHN0cmluZz4oKTtcbiAqICAgbm90QW5PdXRwdXQgPSAncmVndWxhciBwcm9wZXJ0eSc7XG4gKiB9XG4gKlxuICogdHlwZSBPdXRwdXRzID0gQ29tcG9uZW50T3V0cHV0czxNeUNvbXBvbmVudD47XG4gKiAvLyB7IGNsb3NlZD86ICgpID0+IHZvaWQ7IHZhbHVlQ2hhbmdlZD86ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkIH1cbiAqL1xuZXhwb3J0IHR5cGUgQ29tcG9uZW50T3V0cHV0czxUPiA9IHtcbiAgW0sgaW4gT3V0cHV0S2V5czxUPl0/OiAodmFsdWU6IEV4dHJhY3RPdXRwdXRWYWx1ZTxUW0tdPikgPT4gdm9pZDtcbn07XG4iXX0=