ngssm-toolkit 21.0.0 → 21.1.1
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/ngssm-toolkit.mjs +101 -107
- package/fesm2022/ngssm-toolkit.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -25,20 +25,18 @@ import { MatMenuModule } from '@angular/material/menu';
|
|
|
25
25
|
import { DateTime } from 'luxon';
|
|
26
26
|
|
|
27
27
|
class NgssmMessageOverlayComponent {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: NgssmMessageOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
32
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.0", type: NgssmMessageOverlayComponent, isStandalone: true, selector: "ngssm-message-overlay", ngImport: i0, template: `
|
|
28
|
+
message = signal('', ...(ngDevMode ? [{ debugName: "message" }] : []));
|
|
29
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmMessageOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
30
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.3", type: NgssmMessageOverlayComponent, isStandalone: true, selector: "ngssm-message-overlay", ngImport: i0, template: `
|
|
33
31
|
<mat-card>
|
|
34
32
|
<mat-card-content class="message-container">
|
|
35
33
|
<mat-spinner></mat-spinner>
|
|
36
34
|
{{ message() }}
|
|
37
35
|
</mat-card-content>
|
|
38
36
|
</mat-card>
|
|
39
|
-
`, isInline: true, styles: [".message-container{display:flex!important;flex-direction:column;align-items:center}\n"], dependencies: [{ kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i1.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i1.MatCardContent, selector: "mat-card-content" }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i2.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] });
|
|
37
|
+
`, isInline: true, styles: [".message-container{display:flex!important;flex-direction:column;align-items:center}\n"], dependencies: [{ kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i1.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i1.MatCardContent, selector: "mat-card-content" }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i2.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] });
|
|
40
38
|
}
|
|
41
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
39
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmMessageOverlayComponent, decorators: [{
|
|
42
40
|
type: Component,
|
|
43
41
|
args: [{ selector: 'ngssm-message-overlay', imports: [MatCardModule, MatProgressSpinnerModule], template: `
|
|
44
42
|
<mat-card>
|
|
@@ -51,30 +49,35 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImpor
|
|
|
51
49
|
}] });
|
|
52
50
|
|
|
53
51
|
class NgssmOverlayContainer extends OverlayContainer {
|
|
52
|
+
elementRef;
|
|
54
53
|
setContainerRef(elementRef) {
|
|
55
54
|
this.elementRef = elementRef;
|
|
56
55
|
}
|
|
57
56
|
getContainerElement() {
|
|
58
57
|
return this.elementRef?.nativeElement;
|
|
59
58
|
}
|
|
60
|
-
static
|
|
61
|
-
static
|
|
59
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmOverlayContainer, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
60
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmOverlayContainer });
|
|
62
61
|
}
|
|
63
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
62
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmOverlayContainer, decorators: [{
|
|
64
63
|
type: Injectable
|
|
65
64
|
}] });
|
|
66
65
|
|
|
67
66
|
class NgssmOverlayBuilder {
|
|
68
|
-
static
|
|
67
|
+
static nextId = 1;
|
|
68
|
+
overlayMessage = signal('Please wait', ...(ngDevMode ? [{ debugName: "overlayMessage" }] : []));
|
|
69
|
+
overlayTemplate;
|
|
70
|
+
overlayComponent;
|
|
71
|
+
logger = inject(Logger);
|
|
72
|
+
injector = inject(Injector);
|
|
73
|
+
elementRef = inject(ElementRef);
|
|
74
|
+
overlay = inject(Overlay);
|
|
75
|
+
viewContainerRef = inject(ViewContainerRef);
|
|
76
|
+
renderer = inject(Renderer2);
|
|
77
|
+
overlayInjector;
|
|
78
|
+
id = NgssmOverlayBuilder.nextId++;
|
|
79
|
+
overlayRef;
|
|
69
80
|
constructor() {
|
|
70
|
-
this.overlayMessage = signal('Please wait', ...(ngDevMode ? [{ debugName: "overlayMessage" }] : []));
|
|
71
|
-
this.logger = inject(Logger);
|
|
72
|
-
this.injector = inject(Injector);
|
|
73
|
-
this.elementRef = inject(ElementRef);
|
|
74
|
-
this.overlay = inject(Overlay);
|
|
75
|
-
this.viewContainerRef = inject(ViewContainerRef);
|
|
76
|
-
this.renderer = inject(Renderer2);
|
|
77
|
-
this.id = NgssmOverlayBuilder.nextId++;
|
|
78
81
|
this.logger.information(`[NgssmOverlayBuilder] Creating overlay ${this.id}`);
|
|
79
82
|
this.renderer.setStyle(this.elementRef.nativeElement, 'position', 'relative');
|
|
80
83
|
this.overlayInjector = Injector.create({
|
|
@@ -86,7 +89,8 @@ class NgssmOverlayBuilder {
|
|
|
86
89
|
this.overlayRef = createOverlayRef(this.overlayInjector, {
|
|
87
90
|
positionStrategy: this.overlay.position().global().centerHorizontally().centerVertically(),
|
|
88
91
|
scrollStrategy: createRepositionScrollStrategy(this.injector),
|
|
89
|
-
hasBackdrop: true
|
|
92
|
+
hasBackdrop: true,
|
|
93
|
+
usePopover: false
|
|
90
94
|
});
|
|
91
95
|
}
|
|
92
96
|
ngOnDestroy() {
|
|
@@ -112,20 +116,20 @@ class NgssmOverlayBuilder {
|
|
|
112
116
|
hideOverlay() {
|
|
113
117
|
this.overlayRef.detach();
|
|
114
118
|
}
|
|
115
|
-
static
|
|
116
|
-
static
|
|
119
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmOverlayBuilder, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
120
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmOverlayBuilder });
|
|
117
121
|
}
|
|
118
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
122
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmOverlayBuilder, decorators: [{
|
|
119
123
|
type: Injectable
|
|
120
124
|
}], ctorParameters: () => [] });
|
|
121
125
|
|
|
122
126
|
class NgssmComponentOverlayDirective {
|
|
127
|
+
overlayTemplate = input(...(ngDevMode ? [undefined, { debugName: "overlayTemplate" }] : []));
|
|
128
|
+
overlayComponent = input(...(ngDevMode ? [undefined, { debugName: "overlayComponent" }] : []));
|
|
129
|
+
overlayMessage = input('Please wait', ...(ngDevMode ? [{ debugName: "overlayMessage" }] : []));
|
|
130
|
+
ngssmDisplayOverlay = input(false, ...(ngDevMode ? [{ debugName: "ngssmDisplayOverlay" }] : []));
|
|
131
|
+
overlayBuilder = inject(NgssmOverlayBuilder);
|
|
123
132
|
constructor() {
|
|
124
|
-
this.overlayTemplate = input(...(ngDevMode ? [undefined, { debugName: "overlayTemplate" }] : []));
|
|
125
|
-
this.overlayComponent = input(...(ngDevMode ? [undefined, { debugName: "overlayComponent" }] : []));
|
|
126
|
-
this.overlayMessage = input('Please wait', ...(ngDevMode ? [{ debugName: "overlayMessage" }] : []));
|
|
127
|
-
this.ngssmDisplayOverlay = input(false, ...(ngDevMode ? [{ debugName: "ngssmDisplayOverlay" }] : []));
|
|
128
|
-
this.overlayBuilder = inject(NgssmOverlayBuilder);
|
|
129
133
|
effect(() => {
|
|
130
134
|
this.overlayBuilder.overlayTemplate = this.overlayTemplate() ?? undefined;
|
|
131
135
|
this.overlayBuilder.overlayComponent = this.overlayComponent() ?? undefined;
|
|
@@ -141,10 +145,10 @@ class NgssmComponentOverlayDirective {
|
|
|
141
145
|
}
|
|
142
146
|
});
|
|
143
147
|
}
|
|
144
|
-
static
|
|
145
|
-
static
|
|
148
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmComponentOverlayDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
149
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.3", type: NgssmComponentOverlayDirective, isStandalone: true, selector: "[ngssmDisplayOverlay]", inputs: { overlayTemplate: { classPropertyName: "overlayTemplate", publicName: "overlayTemplate", isSignal: true, isRequired: false, transformFunction: null }, overlayComponent: { classPropertyName: "overlayComponent", publicName: "overlayComponent", isSignal: true, isRequired: false, transformFunction: null }, overlayMessage: { classPropertyName: "overlayMessage", publicName: "overlayMessage", isSignal: true, isRequired: false, transformFunction: null }, ngssmDisplayOverlay: { classPropertyName: "ngssmDisplayOverlay", publicName: "ngssmDisplayOverlay", isSignal: true, isRequired: false, transformFunction: null } }, providers: [NgssmOverlayBuilder], ngImport: i0 });
|
|
146
150
|
}
|
|
147
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
151
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmComponentOverlayDirective, decorators: [{
|
|
148
152
|
type: Directive,
|
|
149
153
|
args: [{
|
|
150
154
|
selector: '[ngssmDisplayOverlay]',
|
|
@@ -153,10 +157,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImpor
|
|
|
153
157
|
}], ctorParameters: () => [], propDecorators: { overlayTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "overlayTemplate", required: false }] }], overlayComponent: [{ type: i0.Input, args: [{ isSignal: true, alias: "overlayComponent", required: false }] }], overlayMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "overlayMessage", required: false }] }], ngssmDisplayOverlay: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngssmDisplayOverlay", required: false }] }] } });
|
|
154
158
|
|
|
155
159
|
class NgssmEmptyOverlayComponent {
|
|
156
|
-
static
|
|
157
|
-
static
|
|
160
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmEmptyOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
161
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.3", type: NgssmEmptyOverlayComponent, isStandalone: true, selector: "ngssm-empty-overlay", ngImport: i0, template: ``, isInline: true });
|
|
158
162
|
}
|
|
159
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
163
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmEmptyOverlayComponent, decorators: [{
|
|
160
164
|
type: Component,
|
|
161
165
|
args: [{ selector: 'ngssm-empty-overlay', template: `` }]
|
|
162
166
|
}] });
|
|
@@ -169,18 +173,16 @@ class DefaultErrorStateMatcher {
|
|
|
169
173
|
const useDefaultErrorStateMatcher = { provide: ErrorStateMatcher, useClass: DefaultErrorStateMatcher };
|
|
170
174
|
|
|
171
175
|
class NotFoundComponent {
|
|
172
|
-
static
|
|
173
|
-
static
|
|
176
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NotFoundComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
177
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.3", type: NotFoundComponent, isStandalone: true, selector: "ngssm-not-found", ngImport: i0, template: ` <img src="./assets/404-not-found.png" alt="not found" /> `, isInline: true, styles: [":host{display:flex;flex-direction:row;flex:1;align-items:center;justify-content:center}\n"] });
|
|
174
178
|
}
|
|
175
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
179
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NotFoundComponent, decorators: [{
|
|
176
180
|
type: Component,
|
|
177
181
|
args: [{ selector: 'ngssm-not-found', imports: [], template: ` <img src="./assets/404-not-found.png" alt="not found" /> `, styles: [":host{display:flex;flex-direction:row;flex:1;align-items:center;justify-content:center}\n"] }]
|
|
178
182
|
}] });
|
|
179
183
|
|
|
180
184
|
class NgssmFileSizePipe {
|
|
181
|
-
|
|
182
|
-
this.units = ['bytes', 'KB', 'MB', 'GB'];
|
|
183
|
-
}
|
|
185
|
+
units = ['bytes', 'KB', 'MB', 'GB'];
|
|
184
186
|
transform(value, precision = 2) {
|
|
185
187
|
let bytes = value;
|
|
186
188
|
if (isNaN(bytes) || !isFinite(bytes)) {
|
|
@@ -196,10 +198,10 @@ class NgssmFileSizePipe {
|
|
|
196
198
|
}
|
|
197
199
|
return `${bytes.toFixed(+precision)} ${this.units[unit]}`;
|
|
198
200
|
}
|
|
199
|
-
static
|
|
200
|
-
static
|
|
201
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmFileSizePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
202
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: NgssmFileSizePipe, isStandalone: true, name: "ngssmFileSize" });
|
|
201
203
|
}
|
|
202
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
204
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmFileSizePipe, decorators: [{
|
|
203
205
|
type: Pipe,
|
|
204
206
|
args: [{
|
|
205
207
|
name: 'ngssmFileSize'
|
|
@@ -211,19 +213,22 @@ const noop = () => {
|
|
|
211
213
|
// nothing to do
|
|
212
214
|
};
|
|
213
215
|
class NgssmFilePickerComponent {
|
|
214
|
-
static
|
|
216
|
+
static nextId = 0;
|
|
217
|
+
fileInput;
|
|
218
|
+
id = `file-picker-${NgssmFilePickerComponent.nextId++}`;
|
|
219
|
+
ngControl = inject(NgControl, { optional: true, self: true });
|
|
220
|
+
displayDetails = input(true, ...(ngDevMode ? [{ debugName: "displayDetails" }] : []));
|
|
221
|
+
controlType = 'file-picker';
|
|
222
|
+
placeholder = '';
|
|
223
|
+
focused = false;
|
|
224
|
+
stateChanges = new Subject();
|
|
225
|
+
value = null;
|
|
226
|
+
autofilled;
|
|
227
|
+
userAriaDescribedBy;
|
|
228
|
+
onChangeCallback = noop;
|
|
229
|
+
_required = false;
|
|
230
|
+
_disabled = false;
|
|
215
231
|
constructor() {
|
|
216
|
-
this.id = `file-picker-${NgssmFilePickerComponent.nextId++}`;
|
|
217
|
-
this.ngControl = inject(NgControl, { optional: true, self: true });
|
|
218
|
-
this.displayDetails = input(true, ...(ngDevMode ? [{ debugName: "displayDetails" }] : []));
|
|
219
|
-
this.controlType = 'file-picker';
|
|
220
|
-
this.placeholder = '';
|
|
221
|
-
this.focused = false;
|
|
222
|
-
this.stateChanges = new Subject();
|
|
223
|
-
this.value = null;
|
|
224
|
-
this.onChangeCallback = noop;
|
|
225
|
-
this._required = false;
|
|
226
|
-
this._disabled = false;
|
|
227
232
|
// Replace the provider from above with this.
|
|
228
233
|
if (this.ngControl != null) {
|
|
229
234
|
// Setting the value accessor directly (instead of using
|
|
@@ -314,10 +319,10 @@ class NgssmFilePickerComponent {
|
|
|
314
319
|
this.onChangeCallback(this.value);
|
|
315
320
|
}
|
|
316
321
|
}
|
|
317
|
-
static
|
|
318
|
-
static
|
|
322
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmFilePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
323
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: NgssmFilePickerComponent, isStandalone: true, selector: "ngssm-file-picker", inputs: { displayDetails: { classPropertyName: "displayDetails", publicName: "displayDetails", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: false, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null } }, host: { properties: { "id": "this.id" } }, providers: [{ provide: MatFormFieldControl, useExisting: NgssmFilePickerComponent }], viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true, static: true }], ngImport: i0, template: "<div\n class=\"file-picker-container\"\n (drop)=\"onDrop($event)\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n [ngClass]=\"{ 'picker-disabled': disabled }\">\n <input type=\"file\" class=\"hidden\" #fileInput (change)=\"onFileSelected()\" />\n @if (!empty) {\n <div class=\"flex-column-stretch\">\n <div class=\"file-picker-file-name\">\n {{ value?.name }}\n </div>\n @if (displayDetails()) {\n <div class=\"file-picker-file-information\">{{ value?.size | ngssmFileSize }}, last modified on {{ lastModificationDate }}</div>\n }\n </div>\n }\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: NgssmFileSizePipe, name: "ngssmFileSize" }] });
|
|
319
324
|
}
|
|
320
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
325
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmFilePickerComponent, decorators: [{
|
|
321
326
|
type: Component,
|
|
322
327
|
args: [{ selector: 'ngssm-file-picker', imports: [CommonModule, NgssmFileSizePipe], providers: [{ provide: MatFormFieldControl, useExisting: NgssmFilePickerComponent }], template: "<div\n class=\"file-picker-container\"\n (drop)=\"onDrop($event)\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n [ngClass]=\"{ 'picker-disabled': disabled }\">\n <input type=\"file\" class=\"hidden\" #fileInput (change)=\"onFileSelected()\" />\n @if (!empty) {\n <div class=\"flex-column-stretch\">\n <div class=\"file-picker-file-name\">\n {{ value?.name }}\n </div>\n @if (displayDetails()) {\n <div class=\"file-picker-file-information\">{{ value?.size | ngssmFileSize }}, last modified on {{ lastModificationDate }}</div>\n }\n </div>\n }\n</div>\n" }]
|
|
323
328
|
}], ctorParameters: () => [], propDecorators: { fileInput: [{
|
|
@@ -333,33 +338,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImpor
|
|
|
333
338
|
}] } });
|
|
334
339
|
|
|
335
340
|
class NgssmNotificationErrorComponent {
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
}
|
|
339
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: NgssmNotificationErrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
340
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.0", type: NgssmNotificationErrorComponent, isStandalone: true, selector: "ngssm-notification-error", ngImport: i0, template: "<mat-icon class=\"fa-solid fa-triangle-exclamation with-margin-right-12\" color=\"accent\"></mat-icon>\n<span class=\"ngssm-notification-error-message\">{{message}}</span>\n", styles: [":host{display:flex;flex-direction:row;align-items:center}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
341
|
+
message = inject(MAT_SNACK_BAR_DATA);
|
|
342
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmNotificationErrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
343
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.3", type: NgssmNotificationErrorComponent, isStandalone: true, selector: "ngssm-notification-error", ngImport: i0, template: "<mat-icon class=\"fa-solid fa-triangle-exclamation with-margin-right-12\" color=\"accent\"></mat-icon>\n<span class=\"ngssm-notification-error-message\">{{message}}</span>\n", styles: [":host{display:flex;flex-direction:row;align-items:center}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
341
344
|
}
|
|
342
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
345
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmNotificationErrorComponent, decorators: [{
|
|
343
346
|
type: Component,
|
|
344
347
|
args: [{ selector: 'ngssm-notification-error', imports: [MatIconModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-icon class=\"fa-solid fa-triangle-exclamation with-margin-right-12\" color=\"accent\"></mat-icon>\n<span class=\"ngssm-notification-error-message\">{{message}}</span>\n", styles: [":host{display:flex;flex-direction:row;align-items:center}\n"] }]
|
|
345
348
|
}] });
|
|
346
349
|
|
|
347
350
|
class NgssmNotificationSuccessComponent {
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
}
|
|
351
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: NgssmNotificationSuccessComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
352
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.0", type: NgssmNotificationSuccessComponent, isStandalone: true, selector: "ngssm-notification-success", ngImport: i0, template: "<mat-icon class=\"fa-solid fa-check with-margin-right-12 ngssm-notification-success-icon\" color=\"primary\"></mat-icon>\n<span class=\"ngssm-notification-success-message\">{{message}}</span>\n\n", styles: [":host{display:flex;flex-direction:row;align-items:center}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
351
|
+
message = inject(MAT_SNACK_BAR_DATA);
|
|
352
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmNotificationSuccessComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
353
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.3", type: NgssmNotificationSuccessComponent, isStandalone: true, selector: "ngssm-notification-success", ngImport: i0, template: "<mat-icon class=\"fa-solid fa-check with-margin-right-12 ngssm-notification-success-icon\" color=\"primary\"></mat-icon>\n<span class=\"ngssm-notification-success-message\">{{message}}</span>\n\n", styles: [":host{display:flex;flex-direction:row;align-items:center}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
353
354
|
}
|
|
354
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
355
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmNotificationSuccessComponent, decorators: [{
|
|
355
356
|
type: Component,
|
|
356
357
|
args: [{ selector: 'ngssm-notification-success', imports: [MatIconModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-icon class=\"fa-solid fa-check with-margin-right-12 ngssm-notification-success-icon\" color=\"primary\"></mat-icon>\n<span class=\"ngssm-notification-success-message\">{{message}}</span>\n\n", styles: [":host{display:flex;flex-direction:row;align-items:center}\n"] }]
|
|
357
358
|
}] });
|
|
358
359
|
|
|
359
360
|
class NgssmNotifierService {
|
|
360
|
-
|
|
361
|
-
this.matSnackBar = inject(MatSnackBar);
|
|
362
|
-
}
|
|
361
|
+
matSnackBar = inject(MatSnackBar);
|
|
363
362
|
notifyError(message) {
|
|
364
363
|
this.matSnackBar.openFromComponent(NgssmNotificationErrorComponent, {
|
|
365
364
|
panelClass: 'ngssm-notification-panel',
|
|
@@ -372,10 +371,10 @@ class NgssmNotifierService {
|
|
|
372
371
|
data: message
|
|
373
372
|
});
|
|
374
373
|
}
|
|
375
|
-
static
|
|
376
|
-
static
|
|
374
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmNotifierService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
375
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmNotifierService, providedIn: 'root' });
|
|
377
376
|
}
|
|
378
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
377
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmNotifierService, decorators: [{
|
|
379
378
|
type: Injectable,
|
|
380
379
|
args: [{
|
|
381
380
|
providedIn: 'root'
|
|
@@ -410,21 +409,17 @@ const defaultRegexEditorValidator = {
|
|
|
410
409
|
};
|
|
411
410
|
|
|
412
411
|
class NgssmConfirmationDialogComponent {
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
}
|
|
416
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: NgssmConfirmationDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
417
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.0", type: NgssmConfirmationDialogComponent, isStandalone: true, selector: "ngssm-confirmation-dialog", ngImport: i0, template: "<mat-dialog-content class=\"flex-column-stretch fxFlex message-container\">\n{{data.message}}\n</mat-dialog-content>\n<mat-dialog-actions class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n <button mat-button [matDialogClose]=\"data.cancelLabel\" id=\"cancelButton\">{{data.cancelLabel}}</button>\n <button mat-raised-button [color]=\"data.submitButtonColor\" [matDialogClose]=\"data.submitLabel\" id=\"submitButton\">\n {{data.submitLabel}}\n </button>\n</mat-dialog-actions>\n", styles: [":host .message-container{font-weight:700}\n"], dependencies: [{ kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
412
|
+
data = inject(MAT_DIALOG_DATA);
|
|
413
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmConfirmationDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
414
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.3", type: NgssmConfirmationDialogComponent, isStandalone: true, selector: "ngssm-confirmation-dialog", ngImport: i0, template: "<mat-dialog-content class=\"flex-column-stretch fxFlex message-container\">\n{{data.message}}\n</mat-dialog-content>\n<mat-dialog-actions class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n <button mat-button [matDialogClose]=\"data.cancelLabel\" id=\"cancelButton\">{{data.cancelLabel}}</button>\n <button mat-raised-button [color]=\"data.submitButtonColor\" [matDialogClose]=\"data.submitLabel\" id=\"submitButton\">\n {{data.submitLabel}}\n </button>\n</mat-dialog-actions>\n", styles: [":host .message-container{font-weight:700}\n"], dependencies: [{ kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
418
415
|
}
|
|
419
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
416
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmConfirmationDialogComponent, decorators: [{
|
|
420
417
|
type: Component,
|
|
421
418
|
args: [{ selector: 'ngssm-confirmation-dialog', imports: [MatDialogContent, MatDialogActions, MatDialogClose, MatButton], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-dialog-content class=\"flex-column-stretch fxFlex message-container\">\n{{data.message}}\n</mat-dialog-content>\n<mat-dialog-actions class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n <button mat-button [matDialogClose]=\"data.cancelLabel\" id=\"cancelButton\">{{data.cancelLabel}}</button>\n <button mat-raised-button [color]=\"data.submitButtonColor\" [matDialogClose]=\"data.submitLabel\" id=\"submitButton\">\n {{data.submitLabel}}\n </button>\n</mat-dialog-actions>\n", styles: [":host .message-container{font-weight:700}\n"] }]
|
|
422
419
|
}] });
|
|
423
420
|
|
|
424
421
|
class NgssmConfirmationDialogService {
|
|
425
|
-
|
|
426
|
-
this.matDialog = inject(MatDialog);
|
|
427
|
-
}
|
|
422
|
+
matDialog = inject(MatDialog);
|
|
428
423
|
displayConfirmationDialog(config) {
|
|
429
424
|
return this.matDialog
|
|
430
425
|
.open(NgssmConfirmationDialogComponent, {
|
|
@@ -435,10 +430,10 @@ class NgssmConfirmationDialogService {
|
|
|
435
430
|
})
|
|
436
431
|
.afterClosed();
|
|
437
432
|
}
|
|
438
|
-
static
|
|
439
|
-
static
|
|
433
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmConfirmationDialogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
434
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmConfirmationDialogService, providedIn: 'root' });
|
|
440
435
|
}
|
|
441
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
436
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmConfirmationDialogService, decorators: [{
|
|
442
437
|
type: Injectable,
|
|
443
438
|
args: [{
|
|
444
439
|
providedIn: 'root'
|
|
@@ -448,9 +443,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImpor
|
|
|
448
443
|
const isNullOrUndefined = (value) => value === null || value === undefined;
|
|
449
444
|
|
|
450
445
|
class NgssmComponentDisplayDirective {
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
446
|
+
viewContainerRef = inject(ViewContainerRef);
|
|
447
|
+
componentRef;
|
|
448
|
+
componentAction;
|
|
454
449
|
set ngssmComponentDisplay(value) {
|
|
455
450
|
this.componentRef = undefined;
|
|
456
451
|
this.viewContainerRef.clear();
|
|
@@ -467,10 +462,10 @@ class NgssmComponentDisplayDirective {
|
|
|
467
462
|
this.componentAction(this.componentRef.instance);
|
|
468
463
|
}
|
|
469
464
|
}
|
|
470
|
-
static
|
|
471
|
-
static
|
|
465
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmComponentDisplayDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
466
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.3", type: NgssmComponentDisplayDirective, isStandalone: true, selector: "[ngssmComponentDisplay]", inputs: { ngssmComponentDisplay: "ngssmComponentDisplay", ngssmComponentAction: "ngssmComponentAction" }, ngImport: i0 });
|
|
472
467
|
}
|
|
473
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
468
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmComponentDisplayDirective, decorators: [{
|
|
474
469
|
type: Directive,
|
|
475
470
|
args: [{
|
|
476
471
|
selector: '[ngssmComponentDisplay]'
|
|
@@ -482,13 +477,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImpor
|
|
|
482
477
|
}] } });
|
|
483
478
|
|
|
484
479
|
class NgssmHelpComponent {
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
}
|
|
488
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: NgssmHelpComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
489
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.0", type: NgssmHelpComponent, isStandalone: true, selector: "ngssm-help", inputs: { help: { classPropertyName: "help", publicName: "help", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<button mat-icon-button color=\"primary\" [matMenuTriggerFor]=\"helpMenu\" id=\"helpButton\">\n <mat-icon class=\"fa-solid fa-circle-question\"></mat-icon>\n</button>\n<mat-menu #helpMenu=\"matMenu\">\n @if (help(); as content) {\n <div class=\"ngssm-help-panel\" [innerHTML]=\"content\"></div>\n } @else {\n <div class=\"ngssm-help-panel\">\n <ng-content></ng-content>\n </div>\n }\n</mat-menu>\n", dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$3.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i3.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: i3.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
480
|
+
help = input(...(ngDevMode ? [undefined, { debugName: "help" }] : []));
|
|
481
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmHelpComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
482
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: NgssmHelpComponent, isStandalone: true, selector: "ngssm-help", inputs: { help: { classPropertyName: "help", publicName: "help", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<button mat-icon-button color=\"primary\" [matMenuTriggerFor]=\"helpMenu\" id=\"helpButton\">\n <mat-icon class=\"fa-solid fa-circle-question\"></mat-icon>\n</button>\n<mat-menu #helpMenu=\"matMenu\">\n @if (help(); as content) {\n <div class=\"ngssm-help-panel\" [innerHTML]=\"content\"></div>\n } @else {\n <div class=\"ngssm-help-panel\">\n <ng-content></ng-content>\n </div>\n }\n</mat-menu>\n", dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$3.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i3.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: i3.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
490
483
|
}
|
|
491
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
484
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmHelpComponent, decorators: [{
|
|
492
485
|
type: Component,
|
|
493
486
|
args: [{ selector: 'ngssm-help', imports: [MatButtonModule, MatIconModule, MatMenuModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<button mat-icon-button color=\"primary\" [matMenuTriggerFor]=\"helpMenu\" id=\"helpButton\">\n <mat-icon class=\"fa-solid fa-circle-question\"></mat-icon>\n</button>\n<mat-menu #helpMenu=\"matMenu\">\n @if (help(); as content) {\n <div class=\"ngssm-help-panel\" [innerHTML]=\"content\"></div>\n } @else {\n <div class=\"ngssm-help-panel\">\n <ng-content></ng-content>\n </div>\n }\n</mat-menu>\n" }]
|
|
494
487
|
}], propDecorators: { help: [{ type: i0.Input, args: [{ isSignal: true, alias: "help", required: false }] }] } });
|
|
@@ -530,11 +523,12 @@ const provideNgssmMatDialogConfigs = (...configs) => {
|
|
|
530
523
|
};
|
|
531
524
|
|
|
532
525
|
class MatDialogOpeningEffect {
|
|
526
|
+
processedActions = [];
|
|
527
|
+
configs = inject(NGSSM_MAT_DIALOG_CONFIG, { optional: true });
|
|
528
|
+
matDialog = inject(MatDialog);
|
|
529
|
+
injector = inject(EnvironmentInjector);
|
|
530
|
+
extendedConfigs;
|
|
533
531
|
constructor() {
|
|
534
|
-
this.processedActions = [];
|
|
535
|
-
this.configs = inject(NGSSM_MAT_DIALOG_CONFIG, { optional: true });
|
|
536
|
-
this.matDialog = inject(MatDialog);
|
|
537
|
-
this.injector = inject(EnvironmentInjector);
|
|
538
532
|
const allActions = (this.configs ?? []).flatMap((c) => [c.openingAction, ...c.closingActions]);
|
|
539
533
|
const actions = new Set(allActions);
|
|
540
534
|
this.processedActions.push(...actions);
|
|
@@ -563,10 +557,10 @@ class MatDialogOpeningEffect {
|
|
|
563
557
|
config.dialog = undefined;
|
|
564
558
|
});
|
|
565
559
|
}
|
|
566
|
-
static
|
|
567
|
-
static
|
|
560
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: MatDialogOpeningEffect, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
561
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: MatDialogOpeningEffect });
|
|
568
562
|
}
|
|
569
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
563
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: MatDialogOpeningEffect, decorators: [{
|
|
570
564
|
type: Injectable
|
|
571
565
|
}], ctorParameters: () => [] });
|
|
572
566
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngssm-toolkit.mjs","sources":["../../../projects/ngssm-toolkit/src/lib/overlay/ngssm-message-overlay.component.ts","../../../projects/ngssm-toolkit/src/lib/overlay/ngssm-overlay-container.ts","../../../projects/ngssm-toolkit/src/lib/overlay/ngssm-overlay-builder.ts","../../../projects/ngssm-toolkit/src/lib/overlay/ngssm-component-overlay.directive.ts","../../../projects/ngssm-toolkit/src/lib/overlay/ngssm-empty-overlay.component.ts","../../../projects/ngssm-toolkit/src/lib/default-error-state-matcher.ts","../../../projects/ngssm-toolkit/src/lib/not-found.component.ts","../../../projects/ngssm-toolkit/src/lib/file-picker/ngssm-file-size.pipe.ts","../../../projects/ngssm-toolkit/src/lib/file-picker/ngssm-file-picker.component.ts","../../../projects/ngssm-toolkit/src/lib/file-picker/ngssm-file-picker.component.html","../../../projects/ngssm-toolkit/src/lib/notification/ngssm-notification-error/ngssm-notification-error.component.ts","../../../projects/ngssm-toolkit/src/lib/notification/ngssm-notification-error/ngssm-notification-error.component.html","../../../projects/ngssm-toolkit/src/lib/notification/ngssm-notification-success/ngssm-notification-success.component.ts","../../../projects/ngssm-toolkit/src/lib/notification/ngssm-notification-success/ngssm-notification-success.component.html","../../../projects/ngssm-toolkit/src/lib/notification/ngssm-notifier.service.ts","../../../projects/ngssm-toolkit/src/lib/regex-editor/regex-editor-validator.ts","../../../projects/ngssm-toolkit/src/lib/confirmation-dialog/ngssm-confirmation-dialog/ngssm-confirmation-dialog.component.ts","../../../projects/ngssm-toolkit/src/lib/confirmation-dialog/ngssm-confirmation-dialog/ngssm-confirmation-dialog.component.html","../../../projects/ngssm-toolkit/src/lib/confirmation-dialog/ngssm-confirmation-dialog.service.ts","../../../projects/ngssm-toolkit/src/lib/object-helpers.ts","../../../projects/ngssm-toolkit/src/lib/ngssm-component-display.directive.ts","../../../projects/ngssm-toolkit/src/lib/ngssm-help/ngssm-help.component.ts","../../../projects/ngssm-toolkit/src/lib/ngssm-help/ngssm-help.component.html","../../../projects/ngssm-toolkit/src/lib/blob-helpers.ts","../../../projects/ngssm-toolkit/src/lib/luxon-helpers.ts","../../../projects/ngssm-toolkit/src/lib/mat-dialog/ngssm-mat-dialog-config.ts","../../../projects/ngssm-toolkit/src/lib/mat-dialog/mat-dialog-opening.effect.ts","../../../projects/ngssm-toolkit/src/lib/mat-dialog/provide-ngssm-mat-dialog.ts","../../../projects/ngssm-toolkit/src/public-api.ts","../../../projects/ngssm-toolkit/src/ngssm-toolkit.ts"],"sourcesContent":["import { Component, signal } from '@angular/core';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\n@Component({\n selector: 'ngssm-message-overlay',\n imports: [MatCardModule, MatProgressSpinnerModule],\n template: `\n <mat-card>\n <mat-card-content class=\"message-container\">\n <mat-spinner></mat-spinner>\n {{ message() }}\n </mat-card-content>\n </mat-card>\n `,\n styles: [\n `\n .message-container {\n display: flex !important;\n flex-direction: column;\n align-items: center;\n }\n `\n ]\n})\nexport class NgssmMessageOverlayComponent {\n public message = signal<string>('');\n}\n","import { ElementRef, Injectable } from '@angular/core';\nimport { OverlayContainer } from '@angular/cdk/overlay';\n\n@Injectable()\nexport class NgssmOverlayContainer extends OverlayContainer {\n private elementRef: ElementRef | undefined;\n\n public setContainerRef(elementRef: ElementRef) {\n this.elementRef = elementRef;\n }\n\n public override getContainerElement(): HTMLElement {\n return this.elementRef?.nativeElement;\n }\n}\n","import {\n ComponentType,\n createOverlayRef,\n createRepositionScrollStrategy,\n Overlay,\n OverlayContainer,\n OverlayRef\n} from '@angular/cdk/overlay';\nimport { ComponentPortal, TemplatePortal } from '@angular/cdk/portal';\nimport {\n DestroyableInjector,\n ElementRef,\n inject,\n Injectable,\n Injector,\n OnDestroy,\n Renderer2,\n signal,\n TemplateRef,\n ViewContainerRef\n} from '@angular/core';\n\nimport { Logger } from 'ngssm-store';\n\nimport { NgssmMessageOverlayComponent } from './ngssm-message-overlay.component';\nimport { NgssmOverlayContainer } from './ngssm-overlay-container';\n\n@Injectable()\nexport class NgssmOverlayBuilder implements OnDestroy {\n private static nextId = 1;\n\n public readonly overlayMessage = signal<string>('Please wait');\n public overlayTemplate: TemplateRef<unknown> | undefined;\n public overlayComponent: ComponentType<unknown> | undefined;\n\n private readonly logger = inject(Logger);\n private readonly injector = inject(Injector);\n private readonly elementRef = inject(ElementRef);\n private readonly overlay = inject(Overlay);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly renderer = inject(Renderer2);\n\n private readonly overlayInjector?: DestroyableInjector;\n private id = NgssmOverlayBuilder.nextId++;\n\n private overlayRef: OverlayRef;\n\n constructor() {\n this.logger.information(`[NgssmOverlayBuilder] Creating overlay ${this.id}`);\n this.renderer.setStyle(this.elementRef.nativeElement, 'position', 'relative');\n\n this.overlayInjector = Injector.create({\n providers: [{ provide: OverlayContainer, useClass: NgssmOverlayContainer }],\n parent: this.injector\n });\n const overlayContainer = this.overlayInjector.get(OverlayContainer);\n (overlayContainer as NgssmOverlayContainer).setContainerRef(this.elementRef);\n\n this.overlayRef = createOverlayRef(this.overlayInjector, {\n positionStrategy: this.overlay.position().global().centerHorizontally().centerVertically(),\n scrollStrategy: createRepositionScrollStrategy(this.injector),\n hasBackdrop: true\n });\n }\n\n public ngOnDestroy(): void {\n this.logger.information(`[NgssmOverlayBuilder] Destroying overlay ${this.id}`);\n this.overlayRef.detach();\n this.overlayInjector?.destroy();\n }\n\n public showOverlay(): void {\n if (this.overlayTemplate) {\n this.overlayRef.attach(new TemplatePortal(this.overlayTemplate, this.viewContainerRef));\n } else if (this.overlayComponent) {\n const ref = this.overlayRef.attach(new ComponentPortal(this.overlayComponent, this.viewContainerRef));\n if (this.overlayComponent === NgssmMessageOverlayComponent) {\n (ref.instance as NgssmMessageOverlayComponent).message = this.overlayMessage;\n }\n } else {\n const ref = this.overlayRef.attach(new ComponentPortal(NgssmMessageOverlayComponent, this.viewContainerRef));\n ref.instance.message = this.overlayMessage;\n }\n }\n\n public hideOverlay(): void {\n this.overlayRef.detach();\n }\n}\n","import { Directive, inject, input, TemplateRef, effect } from '@angular/core';\nimport { ComponentType } from '@angular/cdk/portal';\n\nimport { NgssmOverlayBuilder } from './ngssm-overlay-builder';\n\n@Directive({\n selector: '[ngssmDisplayOverlay]',\n providers: [NgssmOverlayBuilder]\n})\nexport class NgssmComponentOverlayDirective {\n public readonly overlayTemplate = input<TemplateRef<unknown> | undefined | null>();\n public readonly overlayComponent = input<ComponentType<unknown> | undefined | null>();\n public readonly overlayMessage = input<string | null | undefined>('Please wait');\n public readonly ngssmDisplayOverlay = input<boolean>(false);\n\n private overlayBuilder = inject(NgssmOverlayBuilder);\n\n constructor() {\n effect(() => {\n this.overlayBuilder.overlayTemplate = this.overlayTemplate() ?? undefined;\n this.overlayBuilder.overlayComponent = this.overlayComponent() ?? undefined;\n this.overlayBuilder.overlayMessage.set(this.overlayMessage() ?? '');\n });\n\n effect(() => {\n const doRenderOveralay = this.ngssmDisplayOverlay();\n if (doRenderOveralay === true) {\n this.overlayBuilder.showOverlay();\n } else {\n this.overlayBuilder.hideOverlay();\n }\n });\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngssm-empty-overlay',\n template: ``,\n styles: []\n})\nexport class NgssmEmptyOverlayComponent {}\n","import { Provider } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { ErrorStateMatcher } from '@angular/material/core';\n\nexport class DefaultErrorStateMatcher implements ErrorStateMatcher {\n isErrorState(control: FormControl | null): boolean {\n return !!(control && control.invalid);\n }\n}\n\nexport const useDefaultErrorStateMatcher: Provider = { provide: ErrorStateMatcher, useClass: DefaultErrorStateMatcher };\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngssm-not-found',\n imports: [],\n template: ` <img src=\"./assets/404-not-found.png\" alt=\"not found\" /> `,\n styles: [\n `\n :host {\n display: flex;\n flex-direction: row;\n flex: 1;\n align-items: center;\n justify-content: center;\n }\n `\n ]\n})\nexport class NotFoundComponent {}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'ngssmFileSize'\n})\nexport class NgssmFileSizePipe implements PipeTransform {\n private readonly units = ['bytes', 'KB', 'MB', 'GB'];\n\n public transform(value: unknown, precision = 2): string {\n let bytes = value as number;\n if (isNaN(bytes) || !isFinite(bytes)) {\n return '?';\n }\n\n let unit = 0;\n while (bytes >= 1024 && unit < this.units.length) {\n bytes /= 1024;\n unit++;\n }\n\n if (unit === 0) {\n return `${bytes} ${this.units[unit]}`;\n }\n\n return `${bytes.toFixed(+precision)} ${this.units[unit]}`;\n }\n}\n","/* eslint-disable @typescript-eslint/member-ordering */\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { CommonModule } from '@angular/common';\nimport { Component, ElementRef, HostBinding, inject, input, Input, OnDestroy, ViewChild } from '@angular/core';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { Subject } from 'rxjs';\n\nimport { NgssmFileSizePipe } from './ngssm-file-size.pipe';\n\nexport const noop = () => {\n // nothing to do\n};\n\n@Component({\n selector: 'ngssm-file-picker',\n imports: [CommonModule, NgssmFileSizePipe],\n templateUrl: './ngssm-file-picker.component.html',\n styleUrls: ['./ngssm-file-picker.component.scss'],\n providers: [{ provide: MatFormFieldControl, useExisting: NgssmFilePickerComponent }]\n})\nexport class NgssmFilePickerComponent implements MatFormFieldControl<File>, ControlValueAccessor, OnDestroy {\n private static nextId = 0;\n\n @ViewChild('fileInput', { static: true }) fileInput: ElementRef | undefined;\n @HostBinding('id') public id = `file-picker-${NgssmFilePickerComponent.nextId++}`;\n\n public readonly ngControl: NgControl | null = inject(NgControl, { optional: true, self: true });\n\n public readonly displayDetails = input(true);\n\n public controlType = 'file-picker';\n public placeholder = '';\n public focused = false;\n public stateChanges = new Subject<void>();\n public value: File | null = null;\n public autofilled?: boolean | undefined;\n public userAriaDescribedBy?: string | undefined;\n\n private onChangeCallback: (_: unknown) => void = noop;\n private _required = false;\n private _disabled = false;\n\n constructor() {\n // Replace the provider from above with this.\n if (this.ngControl != null) {\n // Setting the value accessor directly (instead of using\n // the providers) to avoid running into a circular import.\n this.ngControl.valueAccessor = this;\n }\n }\n\n @Input()\n public get required(): boolean {\n return this._required;\n }\n\n public set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n this.stateChanges.next();\n }\n\n @Input()\n public get disabled(): boolean {\n return this._disabled;\n }\n\n public set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n this.stateChanges.next();\n }\n\n public get empty(): boolean {\n return this.value === null;\n }\n\n public get shouldLabelFloat(): boolean {\n return this.value !== null;\n }\n\n public get errorState(): boolean {\n return this.ngControl?.invalid ?? false;\n }\n\n public get lastModificationDate(): string {\n if (this.value) {\n const date = new Date(this.value.lastModified);\n return date.toISOString();\n }\n\n return '';\n }\n\n public setDescribedByIds(): void {\n // nothing to do\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public onContainerClick(): void {\n if (!this.disabled) {\n this.fileInput?.nativeElement.click();\n }\n }\n\n public writeValue(obj: File | null | undefined): void {\n this.value = obj ?? null;\n if (!this.value && this.fileInput) {\n this.fileInput.nativeElement.value = null;\n }\n\n this.stateChanges.next();\n }\n\n public registerOnChange(fn: (_: unknown) => void): void {\n this.onChangeCallback = fn;\n }\n\n public registerOnTouched(): void {\n // nothing to do\n }\n\n public ngOnDestroy(): void {\n this.stateChanges.complete();\n }\n\n public onDrop(event: DragEvent): void {\n this.preventAndStop(event);\n if (!this.disabled && event.dataTransfer !== null) {\n this.updateValue(event.dataTransfer.files);\n }\n }\n\n public onDragOver(event: DragEvent): void {\n this.preventAndStop(event);\n }\n\n public onDragLeave(event: DragEvent): void {\n this.preventAndStop(event);\n }\n\n public onFileSelected(): void {\n this.updateValue(this.fileInput?.nativeElement.files);\n }\n\n private preventAndStop(event: DragEvent): void {\n event.stopPropagation();\n event.preventDefault();\n }\n\n private updateValue(files: FileList): void {\n if (files.length > 0) {\n this.value = files[0];\n this.stateChanges.next();\n this.onChangeCallback(this.value);\n }\n }\n}\n","<div\n class=\"file-picker-container\"\n (drop)=\"onDrop($event)\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n [ngClass]=\"{ 'picker-disabled': disabled }\">\n <input type=\"file\" class=\"hidden\" #fileInput (change)=\"onFileSelected()\" />\n @if (!empty) {\n <div class=\"flex-column-stretch\">\n <div class=\"file-picker-file-name\">\n {{ value?.name }}\n </div>\n @if (displayDetails()) {\n <div class=\"file-picker-file-information\">{{ value?.size | ngssmFileSize }}, last modified on {{ lastModificationDate }}</div>\n }\n </div>\n }\n</div>\n","import { Component, ChangeDetectionStrategy, inject } from '@angular/core';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MAT_SNACK_BAR_DATA } from '@angular/material/snack-bar';\n\n@Component({\n selector: 'ngssm-notification-error',\n imports: [MatIconModule],\n templateUrl: './ngssm-notification-error.component.html',\n styleUrls: ['./ngssm-notification-error.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmNotificationErrorComponent {\n public readonly message: string = inject(MAT_SNACK_BAR_DATA);\n}\n","<mat-icon class=\"fa-solid fa-triangle-exclamation with-margin-right-12\" color=\"accent\"></mat-icon>\n<span class=\"ngssm-notification-error-message\">{{message}}</span>\n","import { Component, ChangeDetectionStrategy, inject } from '@angular/core';\n\nimport { MAT_SNACK_BAR_DATA } from '@angular/material/snack-bar';\nimport { MatIconModule } from '@angular/material/icon';\n\n@Component({\n selector: 'ngssm-notification-success',\n imports: [MatIconModule],\n templateUrl: './ngssm-notification-success.component.html',\n styleUrls: ['./ngssm-notification-success.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmNotificationSuccessComponent {\n public message: string = inject(MAT_SNACK_BAR_DATA);\n}\n","<mat-icon class=\"fa-solid fa-check with-margin-right-12 ngssm-notification-success-icon\" color=\"primary\"></mat-icon>\n<span class=\"ngssm-notification-success-message\">{{message}}</span>\n\n","import { inject, Injectable } from '@angular/core';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n\nimport { NgssmNotificationErrorComponent } from './ngssm-notification-error/ngssm-notification-error.component';\nimport { NgssmNotificationSuccessComponent } from './ngssm-notification-success/ngssm-notification-success.component';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NgssmNotifierService {\n private readonly matSnackBar = inject(MatSnackBar);\n\n public notifyError(message: string): void {\n this.matSnackBar.openFromComponent(NgssmNotificationErrorComponent, {\n panelClass: 'ngssm-notification-panel',\n data: message\n });\n }\n\n public notifySuccess(message: string): void {\n this.matSnackBar.openFromComponent(NgssmNotificationSuccessComponent, {\n panelClass: 'ngssm-notification-panel',\n data: message\n });\n }\n}\n","export interface RegexValidationResult {\n isValid: boolean;\n error?: string;\n}\n\nexport interface RegexEditorValidator {\n validatePattern: (pattern: string) => RegexValidationResult;\n isMatch: (pattern: string, testString: string) => boolean;\n}\n\nexport const defaultRegexEditorValidator: RegexEditorValidator = {\n validatePattern: (pattern: string) => {\n try {\n const regex = new RegExp(pattern);\n if (regex.test('')) {\n return { isValid: true };\n }\n } catch (error) {\n return { isValid: false, error: (error as Error).message };\n }\n\n return { isValid: true };\n },\n isMatch: (pattern: string, testString: string) => {\n try {\n const regex = new RegExp(pattern);\n if (regex.test(testString)) {\n return true;\n }\n } catch {\n return false;\n }\n\n return false;\n }\n};\n","import { Component, ChangeDetectionStrategy, inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\nimport { MatButton } from '@angular/material/button';\n\nimport { NgssmConfirmationDialogConfig } from '../ngssm-confirmation-dialog-config';\n\n@Component({\n selector: 'ngssm-confirmation-dialog',\n imports: [MatDialogContent, MatDialogActions, MatDialogClose, MatButton],\n templateUrl: './ngssm-confirmation-dialog.component.html',\n styleUrls: ['./ngssm-confirmation-dialog.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmConfirmationDialogComponent {\n public readonly data = inject(MAT_DIALOG_DATA) as NgssmConfirmationDialogConfig;\n}\n","<mat-dialog-content class=\"flex-column-stretch fxFlex message-container\">\n{{data.message}}\n</mat-dialog-content>\n<mat-dialog-actions class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n <button mat-button [matDialogClose]=\"data.cancelLabel\" id=\"cancelButton\">{{data.cancelLabel}}</button>\n <button mat-raised-button [color]=\"data.submitButtonColor\" [matDialogClose]=\"data.submitLabel\" id=\"submitButton\">\n {{data.submitLabel}}\n </button>\n</mat-dialog-actions>\n","import { inject, Injectable } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { Observable } from 'rxjs';\n\nimport { NgssmConfirmationDialogConfig } from './ngssm-confirmation-dialog-config';\nimport { NgssmConfirmationDialogComponent } from './ngssm-confirmation-dialog/ngssm-confirmation-dialog.component';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NgssmConfirmationDialogService {\n private readonly matDialog = inject(MatDialog);\n\n public displayConfirmationDialog(config: NgssmConfirmationDialogConfig): Observable<string> {\n return this.matDialog\n .open(NgssmConfirmationDialogComponent, {\n disableClose: true,\n data: config,\n minWidth: config.minWidth,\n minHeight: config.minHeight\n })\n .afterClosed();\n }\n}\n","export const isNullOrUndefined = <T = unknown>(value: T): boolean => value === null || value === undefined;\n","import { ComponentRef, Directive, inject, Input, Type, ViewContainerRef } from '@angular/core';\n\nexport type NgssmComponentAction = (component: unknown) => void;\n\n@Directive({\n selector: '[ngssmComponentDisplay]'\n})\nexport class NgssmComponentDisplayDirective {\n private readonly viewContainerRef = inject(ViewContainerRef);\n\n private componentRef?: ComponentRef<unknown>;\n private componentAction?: NgssmComponentAction | null;\n\n @Input() public set ngssmComponentDisplay(value: Type<unknown> | null | undefined) {\n this.componentRef = undefined;\n this.viewContainerRef.clear();\n if (value) {\n this.componentRef = this.viewContainerRef.createComponent(value);\n if (this.componentRef && this.componentAction) {\n this.componentAction(this.componentRef.instance);\n }\n }\n }\n\n @Input() public set ngssmComponentAction(value: NgssmComponentAction | null | undefined) {\n this.componentAction = value;\n if (this.componentRef && this.componentAction) {\n this.componentAction(this.componentRef.instance);\n }\n }\n}\n","import { Component, ChangeDetectionStrategy, input } from '@angular/core';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\n\n@Component({\n selector: 'ngssm-help',\n imports: [MatButtonModule, MatIconModule, MatMenuModule],\n templateUrl: './ngssm-help.component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmHelpComponent {\n public readonly help = input<string | null | undefined>();\n}\n","<button mat-icon-button color=\"primary\" [matMenuTriggerFor]=\"helpMenu\" id=\"helpButton\">\n <mat-icon class=\"fa-solid fa-circle-question\"></mat-icon>\n</button>\n<mat-menu #helpMenu=\"matMenu\">\n @if (help(); as content) {\n <div class=\"ngssm-help-panel\" [innerHTML]=\"content\"></div>\n } @else {\n <div class=\"ngssm-help-panel\">\n <ng-content></ng-content>\n </div>\n }\n</mat-menu>\n","import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\nexport type BlobContentReaderAsString = (file: Blob) => Observable<string>;\n\nexport const defaultBlobContentReaderAsString: BlobContentReaderAsString = (file: Blob): Observable<string> => {\n const observable = new Subject<string>();\n const reader = new FileReader();\n\n reader.onloadend = () => {\n const data = reader.result as string;\n reader.onload = null;\n observable.next(data);\n observable.complete();\n };\n\n reader.onerror = (error) => {\n observable.error(error);\n };\n\n reader.readAsText(file);\n\n return observable;\n};\n\nexport const BLOB_CONTENT_READER_AS_STRING = new InjectionToken<BlobContentReaderAsString>('BLOB_CONTENT_READER_AS_STRING');\n\nexport const provideBlobHelpers = (): EnvironmentProviders => {\n return makeEnvironmentProviders([{ provide: BLOB_CONTENT_READER_AS_STRING, useValue: defaultBlobContentReaderAsString }]);\n};\n","import { DateTime } from 'luxon';\n\nexport const compareDateTime = (left: DateTime, right: DateTime): number => {\n if (left < right) {\n return -1;\n }\n\n if (left > right) {\n return 1;\n }\n\n return 0;\n};\n\nexport const toUtcDate = (value: string): DateTime => DateTime.fromISO(value, { zone: 'utc' });\n","import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from '@angular/core';\nimport { ComponentType } from '@angular/cdk/portal';\nimport { MatDialogConfig } from '@angular/material/dialog';\n\nimport { State } from 'ngssm-store';\n\nexport interface NgssmMatDialogConfig<T = unknown, D = unknown> {\n openingAction: string;\n closingActions: string[];\n component: ComponentType<T>;\n matDialogConfig?: MatDialogConfig<D>;\n beforeOpeningDialog?: (state: State) => void;\n}\n\nexport const NGSSM_MAT_DIALOG_CONFIG = new InjectionToken<NgssmMatDialogConfig>('NGSSM_MAT_DIALOG_CONFIG');\n\nexport const provideNgssmMatDialogConfigs = (...configs: NgssmMatDialogConfig[]): EnvironmentProviders => {\n return makeEnvironmentProviders(configs.map((config) => ({ provide: NGSSM_MAT_DIALOG_CONFIG, useValue: config, multi: true })));\n};\n","import { EnvironmentInjector, inject, Injectable, runInInjectionContext } from '@angular/core';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\n\nimport { Effect, State, Action, ActionDispatcher } from 'ngssm-store';\n\nimport { NGSSM_MAT_DIALOG_CONFIG, NgssmMatDialogConfig } from './ngssm-mat-dialog-config';\n\ninterface ExtendedConfig {\n config: NgssmMatDialogConfig;\n dialog?: MatDialogRef<unknown, unknown>;\n}\n\n@Injectable()\nexport class MatDialogOpeningEffect implements Effect {\n public readonly processedActions: string[] = [];\n\n private configs: NgssmMatDialogConfig[] | null = inject(NGSSM_MAT_DIALOG_CONFIG, { optional: true }) as unknown as NgssmMatDialogConfig[];\n private readonly matDialog = inject(MatDialog);\n private readonly injector = inject(EnvironmentInjector);\n\n private readonly extendedConfigs: ExtendedConfig[];\n\n constructor() {\n const allActions = (this.configs ?? []).flatMap((c) => [c.openingAction, ...c.closingActions]);\n const actions = new Set<string>(allActions);\n this.processedActions.push(...actions);\n this.extendedConfigs = (this.configs ?? []).map((c) => ({\n config: c\n }));\n }\n\n public processAction(actionDispatcher: ActionDispatcher, state: State, action: Action): void {\n this.processActionAsClosingOne(action);\n this.processActionAsOpeningOne(state, action);\n }\n\n private processActionAsOpeningOne(state: State, action: Action): void {\n const extendedConfig = this.extendedConfigs.find((c) => c.config.openingAction === action.type);\n if (extendedConfig) {\n const beforeOpeningDialog = extendedConfig.config.beforeOpeningDialog;\n if (beforeOpeningDialog) {\n runInInjectionContext(this.injector, () => beforeOpeningDialog(state));\n }\n extendedConfig.dialog = this.matDialog.open(extendedConfig.config.component, extendedConfig.config.matDialogConfig);\n }\n }\n\n private processActionAsClosingOne(action: Action): void {\n const extendedConfigs = this.extendedConfigs.filter((c) => c.config.closingActions.includes(action.type));\n extendedConfigs.forEach((config) => {\n config.dialog?.close();\n config.dialog = undefined;\n });\n }\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\n\nimport { provideEffects } from 'ngssm-store';\n\nimport { MatDialogOpeningEffect } from './mat-dialog-opening.effect';\n\nexport const provideNgssmMatDialog = (): EnvironmentProviders => {\n return makeEnvironmentProviders([provideEffects(MatDialogOpeningEffect)]);\n};\n","/*\n * Public API Surface of ngssm-toolkit\n */\n\nexport * from './lib/overlay';\nexport * from './lib/default-error-state-matcher';\nexport * from './lib/not-found.component';\nexport * from './lib/file-picker';\nexport * from './lib/notification';\nexport * from './lib/regex-editor';\nexport * from './lib/confirmation-dialog';\nexport * from './lib/object-helpers';\nexport * from './lib/ngssm-component-display.directive';\nexport * from './lib/ngssm-help/ngssm-help.component';\nexport * from './lib/blob-helpers';\nexport * from './lib/luxon-helpers';\nexport * from './lib/mat-dialog';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngssm-toolkit.mjs","sources":["../../../projects/ngssm-toolkit/src/lib/overlay/ngssm-message-overlay.component.ts","../../../projects/ngssm-toolkit/src/lib/overlay/ngssm-overlay-container.ts","../../../projects/ngssm-toolkit/src/lib/overlay/ngssm-overlay-builder.ts","../../../projects/ngssm-toolkit/src/lib/overlay/ngssm-component-overlay.directive.ts","../../../projects/ngssm-toolkit/src/lib/overlay/ngssm-empty-overlay.component.ts","../../../projects/ngssm-toolkit/src/lib/default-error-state-matcher.ts","../../../projects/ngssm-toolkit/src/lib/not-found.component.ts","../../../projects/ngssm-toolkit/src/lib/file-picker/ngssm-file-size.pipe.ts","../../../projects/ngssm-toolkit/src/lib/file-picker/ngssm-file-picker.component.ts","../../../projects/ngssm-toolkit/src/lib/file-picker/ngssm-file-picker.component.html","../../../projects/ngssm-toolkit/src/lib/notification/ngssm-notification-error/ngssm-notification-error.component.ts","../../../projects/ngssm-toolkit/src/lib/notification/ngssm-notification-error/ngssm-notification-error.component.html","../../../projects/ngssm-toolkit/src/lib/notification/ngssm-notification-success/ngssm-notification-success.component.ts","../../../projects/ngssm-toolkit/src/lib/notification/ngssm-notification-success/ngssm-notification-success.component.html","../../../projects/ngssm-toolkit/src/lib/notification/ngssm-notifier.service.ts","../../../projects/ngssm-toolkit/src/lib/regex-editor/regex-editor-validator.ts","../../../projects/ngssm-toolkit/src/lib/confirmation-dialog/ngssm-confirmation-dialog/ngssm-confirmation-dialog.component.ts","../../../projects/ngssm-toolkit/src/lib/confirmation-dialog/ngssm-confirmation-dialog/ngssm-confirmation-dialog.component.html","../../../projects/ngssm-toolkit/src/lib/confirmation-dialog/ngssm-confirmation-dialog.service.ts","../../../projects/ngssm-toolkit/src/lib/object-helpers.ts","../../../projects/ngssm-toolkit/src/lib/ngssm-component-display.directive.ts","../../../projects/ngssm-toolkit/src/lib/ngssm-help/ngssm-help.component.ts","../../../projects/ngssm-toolkit/src/lib/ngssm-help/ngssm-help.component.html","../../../projects/ngssm-toolkit/src/lib/blob-helpers.ts","../../../projects/ngssm-toolkit/src/lib/luxon-helpers.ts","../../../projects/ngssm-toolkit/src/lib/mat-dialog/ngssm-mat-dialog-config.ts","../../../projects/ngssm-toolkit/src/lib/mat-dialog/mat-dialog-opening.effect.ts","../../../projects/ngssm-toolkit/src/lib/mat-dialog/provide-ngssm-mat-dialog.ts","../../../projects/ngssm-toolkit/src/public-api.ts","../../../projects/ngssm-toolkit/src/ngssm-toolkit.ts"],"sourcesContent":["import { Component, signal } from '@angular/core';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\n@Component({\n selector: 'ngssm-message-overlay',\n imports: [MatCardModule, MatProgressSpinnerModule],\n template: `\n <mat-card>\n <mat-card-content class=\"message-container\">\n <mat-spinner></mat-spinner>\n {{ message() }}\n </mat-card-content>\n </mat-card>\n `,\n styles: [\n `\n .message-container {\n display: flex !important;\n flex-direction: column;\n align-items: center;\n }\n `\n ]\n})\nexport class NgssmMessageOverlayComponent {\n public message = signal<string>('');\n}\n","import { ElementRef, Injectable } from '@angular/core';\nimport { OverlayContainer } from '@angular/cdk/overlay';\n\n@Injectable()\nexport class NgssmOverlayContainer extends OverlayContainer {\n private elementRef: ElementRef | undefined;\n\n public setContainerRef(elementRef: ElementRef) {\n this.elementRef = elementRef;\n }\n\n public override getContainerElement(): HTMLElement {\n return this.elementRef?.nativeElement;\n }\n}\n","import {\n ComponentType,\n createOverlayRef,\n createRepositionScrollStrategy,\n Overlay,\n OverlayContainer,\n OverlayRef\n} from '@angular/cdk/overlay';\nimport { ComponentPortal, TemplatePortal } from '@angular/cdk/portal';\nimport {\n DestroyableInjector,\n ElementRef,\n inject,\n Injectable,\n Injector,\n OnDestroy,\n Renderer2,\n signal,\n TemplateRef,\n ViewContainerRef\n} from '@angular/core';\n\nimport { Logger } from 'ngssm-store';\n\nimport { NgssmMessageOverlayComponent } from './ngssm-message-overlay.component';\nimport { NgssmOverlayContainer } from './ngssm-overlay-container';\n\n@Injectable()\nexport class NgssmOverlayBuilder implements OnDestroy {\n private static nextId = 1;\n\n public readonly overlayMessage = signal<string>('Please wait');\n public overlayTemplate: TemplateRef<unknown> | undefined;\n public overlayComponent: ComponentType<unknown> | undefined;\n\n private readonly logger = inject(Logger);\n private readonly injector = inject(Injector);\n private readonly elementRef = inject(ElementRef);\n private readonly overlay = inject(Overlay);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly renderer = inject(Renderer2);\n\n private readonly overlayInjector?: DestroyableInjector;\n private id = NgssmOverlayBuilder.nextId++;\n\n private overlayRef: OverlayRef;\n\n constructor() {\n this.logger.information(`[NgssmOverlayBuilder] Creating overlay ${this.id}`);\n this.renderer.setStyle(this.elementRef.nativeElement, 'position', 'relative');\n\n this.overlayInjector = Injector.create({\n providers: [{ provide: OverlayContainer, useClass: NgssmOverlayContainer }],\n parent: this.injector\n });\n const overlayContainer = this.overlayInjector.get(OverlayContainer);\n (overlayContainer as NgssmOverlayContainer).setContainerRef(this.elementRef);\n\n this.overlayRef = createOverlayRef(this.overlayInjector, {\n positionStrategy: this.overlay.position().global().centerHorizontally().centerVertically(),\n scrollStrategy: createRepositionScrollStrategy(this.injector),\n hasBackdrop: true,\n usePopover: false\n });\n }\n\n public ngOnDestroy(): void {\n this.logger.information(`[NgssmOverlayBuilder] Destroying overlay ${this.id}`);\n this.overlayRef.detach();\n this.overlayInjector?.destroy();\n }\n\n public showOverlay(): void {\n if (this.overlayTemplate) {\n this.overlayRef.attach(new TemplatePortal(this.overlayTemplate, this.viewContainerRef));\n } else if (this.overlayComponent) {\n const ref = this.overlayRef.attach(new ComponentPortal(this.overlayComponent, this.viewContainerRef));\n if (this.overlayComponent === NgssmMessageOverlayComponent) {\n (ref.instance as NgssmMessageOverlayComponent).message = this.overlayMessage;\n }\n } else {\n const ref = this.overlayRef.attach(new ComponentPortal(NgssmMessageOverlayComponent, this.viewContainerRef));\n ref.instance.message = this.overlayMessage;\n }\n }\n\n public hideOverlay(): void {\n this.overlayRef.detach();\n }\n}\n","import { Directive, inject, input, TemplateRef, effect } from '@angular/core';\nimport { ComponentType } from '@angular/cdk/portal';\n\nimport { NgssmOverlayBuilder } from './ngssm-overlay-builder';\n\n@Directive({\n selector: '[ngssmDisplayOverlay]',\n providers: [NgssmOverlayBuilder]\n})\nexport class NgssmComponentOverlayDirective {\n public readonly overlayTemplate = input<TemplateRef<unknown> | undefined | null>();\n public readonly overlayComponent = input<ComponentType<unknown> | undefined | null>();\n public readonly overlayMessage = input<string | null | undefined>('Please wait');\n public readonly ngssmDisplayOverlay = input<boolean>(false);\n\n private overlayBuilder = inject(NgssmOverlayBuilder);\n\n constructor() {\n effect(() => {\n this.overlayBuilder.overlayTemplate = this.overlayTemplate() ?? undefined;\n this.overlayBuilder.overlayComponent = this.overlayComponent() ?? undefined;\n this.overlayBuilder.overlayMessage.set(this.overlayMessage() ?? '');\n });\n\n effect(() => {\n const doRenderOveralay = this.ngssmDisplayOverlay();\n if (doRenderOveralay === true) {\n this.overlayBuilder.showOverlay();\n } else {\n this.overlayBuilder.hideOverlay();\n }\n });\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngssm-empty-overlay',\n template: ``,\n styles: []\n})\nexport class NgssmEmptyOverlayComponent {}\n","import { Provider } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { ErrorStateMatcher } from '@angular/material/core';\n\nexport class DefaultErrorStateMatcher implements ErrorStateMatcher {\n isErrorState(control: FormControl | null): boolean {\n return !!(control && control.invalid);\n }\n}\n\nexport const useDefaultErrorStateMatcher: Provider = { provide: ErrorStateMatcher, useClass: DefaultErrorStateMatcher };\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngssm-not-found',\n imports: [],\n template: ` <img src=\"./assets/404-not-found.png\" alt=\"not found\" /> `,\n styles: [\n `\n :host {\n display: flex;\n flex-direction: row;\n flex: 1;\n align-items: center;\n justify-content: center;\n }\n `\n ]\n})\nexport class NotFoundComponent {}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'ngssmFileSize'\n})\nexport class NgssmFileSizePipe implements PipeTransform {\n private readonly units = ['bytes', 'KB', 'MB', 'GB'];\n\n public transform(value: unknown, precision = 2): string {\n let bytes = value as number;\n if (isNaN(bytes) || !isFinite(bytes)) {\n return '?';\n }\n\n let unit = 0;\n while (bytes >= 1024 && unit < this.units.length) {\n bytes /= 1024;\n unit++;\n }\n\n if (unit === 0) {\n return `${bytes} ${this.units[unit]}`;\n }\n\n return `${bytes.toFixed(+precision)} ${this.units[unit]}`;\n }\n}\n","/* eslint-disable @typescript-eslint/member-ordering */\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { CommonModule } from '@angular/common';\nimport { Component, ElementRef, HostBinding, inject, input, Input, OnDestroy, ViewChild } from '@angular/core';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { Subject } from 'rxjs';\n\nimport { NgssmFileSizePipe } from './ngssm-file-size.pipe';\n\nexport const noop = () => {\n // nothing to do\n};\n\n@Component({\n selector: 'ngssm-file-picker',\n imports: [CommonModule, NgssmFileSizePipe],\n templateUrl: './ngssm-file-picker.component.html',\n styleUrls: ['./ngssm-file-picker.component.scss'],\n providers: [{ provide: MatFormFieldControl, useExisting: NgssmFilePickerComponent }]\n})\nexport class NgssmFilePickerComponent implements MatFormFieldControl<File>, ControlValueAccessor, OnDestroy {\n private static nextId = 0;\n\n @ViewChild('fileInput', { static: true }) fileInput: ElementRef | undefined;\n @HostBinding('id') public id = `file-picker-${NgssmFilePickerComponent.nextId++}`;\n\n public readonly ngControl: NgControl | null = inject(NgControl, { optional: true, self: true });\n\n public readonly displayDetails = input(true);\n\n public controlType = 'file-picker';\n public placeholder = '';\n public focused = false;\n public stateChanges = new Subject<void>();\n public value: File | null = null;\n public autofilled?: boolean | undefined;\n public userAriaDescribedBy?: string | undefined;\n\n private onChangeCallback: (_: unknown) => void = noop;\n private _required = false;\n private _disabled = false;\n\n constructor() {\n // Replace the provider from above with this.\n if (this.ngControl != null) {\n // Setting the value accessor directly (instead of using\n // the providers) to avoid running into a circular import.\n this.ngControl.valueAccessor = this;\n }\n }\n\n @Input()\n public get required(): boolean {\n return this._required;\n }\n\n public set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n this.stateChanges.next();\n }\n\n @Input()\n public get disabled(): boolean {\n return this._disabled;\n }\n\n public set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n this.stateChanges.next();\n }\n\n public get empty(): boolean {\n return this.value === null;\n }\n\n public get shouldLabelFloat(): boolean {\n return this.value !== null;\n }\n\n public get errorState(): boolean {\n return this.ngControl?.invalid ?? false;\n }\n\n public get lastModificationDate(): string {\n if (this.value) {\n const date = new Date(this.value.lastModified);\n return date.toISOString();\n }\n\n return '';\n }\n\n public setDescribedByIds(): void {\n // nothing to do\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public onContainerClick(): void {\n if (!this.disabled) {\n this.fileInput?.nativeElement.click();\n }\n }\n\n public writeValue(obj: File | null | undefined): void {\n this.value = obj ?? null;\n if (!this.value && this.fileInput) {\n this.fileInput.nativeElement.value = null;\n }\n\n this.stateChanges.next();\n }\n\n public registerOnChange(fn: (_: unknown) => void): void {\n this.onChangeCallback = fn;\n }\n\n public registerOnTouched(): void {\n // nothing to do\n }\n\n public ngOnDestroy(): void {\n this.stateChanges.complete();\n }\n\n public onDrop(event: DragEvent): void {\n this.preventAndStop(event);\n if (!this.disabled && event.dataTransfer !== null) {\n this.updateValue(event.dataTransfer.files);\n }\n }\n\n public onDragOver(event: DragEvent): void {\n this.preventAndStop(event);\n }\n\n public onDragLeave(event: DragEvent): void {\n this.preventAndStop(event);\n }\n\n public onFileSelected(): void {\n this.updateValue(this.fileInput?.nativeElement.files);\n }\n\n private preventAndStop(event: DragEvent): void {\n event.stopPropagation();\n event.preventDefault();\n }\n\n private updateValue(files: FileList): void {\n if (files.length > 0) {\n this.value = files[0];\n this.stateChanges.next();\n this.onChangeCallback(this.value);\n }\n }\n}\n","<div\n class=\"file-picker-container\"\n (drop)=\"onDrop($event)\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n [ngClass]=\"{ 'picker-disabled': disabled }\">\n <input type=\"file\" class=\"hidden\" #fileInput (change)=\"onFileSelected()\" />\n @if (!empty) {\n <div class=\"flex-column-stretch\">\n <div class=\"file-picker-file-name\">\n {{ value?.name }}\n </div>\n @if (displayDetails()) {\n <div class=\"file-picker-file-information\">{{ value?.size | ngssmFileSize }}, last modified on {{ lastModificationDate }}</div>\n }\n </div>\n }\n</div>\n","import { Component, ChangeDetectionStrategy, inject } from '@angular/core';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MAT_SNACK_BAR_DATA } from '@angular/material/snack-bar';\n\n@Component({\n selector: 'ngssm-notification-error',\n imports: [MatIconModule],\n templateUrl: './ngssm-notification-error.component.html',\n styleUrls: ['./ngssm-notification-error.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmNotificationErrorComponent {\n public readonly message: string = inject(MAT_SNACK_BAR_DATA);\n}\n","<mat-icon class=\"fa-solid fa-triangle-exclamation with-margin-right-12\" color=\"accent\"></mat-icon>\n<span class=\"ngssm-notification-error-message\">{{message}}</span>\n","import { Component, ChangeDetectionStrategy, inject } from '@angular/core';\n\nimport { MAT_SNACK_BAR_DATA } from '@angular/material/snack-bar';\nimport { MatIconModule } from '@angular/material/icon';\n\n@Component({\n selector: 'ngssm-notification-success',\n imports: [MatIconModule],\n templateUrl: './ngssm-notification-success.component.html',\n styleUrls: ['./ngssm-notification-success.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmNotificationSuccessComponent {\n public message: string = inject(MAT_SNACK_BAR_DATA);\n}\n","<mat-icon class=\"fa-solid fa-check with-margin-right-12 ngssm-notification-success-icon\" color=\"primary\"></mat-icon>\n<span class=\"ngssm-notification-success-message\">{{message}}</span>\n\n","import { inject, Injectable } from '@angular/core';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n\nimport { NgssmNotificationErrorComponent } from './ngssm-notification-error/ngssm-notification-error.component';\nimport { NgssmNotificationSuccessComponent } from './ngssm-notification-success/ngssm-notification-success.component';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NgssmNotifierService {\n private readonly matSnackBar = inject(MatSnackBar);\n\n public notifyError(message: string): void {\n this.matSnackBar.openFromComponent(NgssmNotificationErrorComponent, {\n panelClass: 'ngssm-notification-panel',\n data: message\n });\n }\n\n public notifySuccess(message: string): void {\n this.matSnackBar.openFromComponent(NgssmNotificationSuccessComponent, {\n panelClass: 'ngssm-notification-panel',\n data: message\n });\n }\n}\n","export interface RegexValidationResult {\n isValid: boolean;\n error?: string;\n}\n\nexport interface RegexEditorValidator {\n validatePattern: (pattern: string) => RegexValidationResult;\n isMatch: (pattern: string, testString: string) => boolean;\n}\n\nexport const defaultRegexEditorValidator: RegexEditorValidator = {\n validatePattern: (pattern: string) => {\n try {\n const regex = new RegExp(pattern);\n if (regex.test('')) {\n return { isValid: true };\n }\n } catch (error) {\n return { isValid: false, error: (error as Error).message };\n }\n\n return { isValid: true };\n },\n isMatch: (pattern: string, testString: string) => {\n try {\n const regex = new RegExp(pattern);\n if (regex.test(testString)) {\n return true;\n }\n } catch {\n return false;\n }\n\n return false;\n }\n};\n","import { Component, ChangeDetectionStrategy, inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\nimport { MatButton } from '@angular/material/button';\n\nimport { NgssmConfirmationDialogConfig } from '../ngssm-confirmation-dialog-config';\n\n@Component({\n selector: 'ngssm-confirmation-dialog',\n imports: [MatDialogContent, MatDialogActions, MatDialogClose, MatButton],\n templateUrl: './ngssm-confirmation-dialog.component.html',\n styleUrls: ['./ngssm-confirmation-dialog.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmConfirmationDialogComponent {\n public readonly data = inject(MAT_DIALOG_DATA) as NgssmConfirmationDialogConfig;\n}\n","<mat-dialog-content class=\"flex-column-stretch fxFlex message-container\">\n{{data.message}}\n</mat-dialog-content>\n<mat-dialog-actions class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n <button mat-button [matDialogClose]=\"data.cancelLabel\" id=\"cancelButton\">{{data.cancelLabel}}</button>\n <button mat-raised-button [color]=\"data.submitButtonColor\" [matDialogClose]=\"data.submitLabel\" id=\"submitButton\">\n {{data.submitLabel}}\n </button>\n</mat-dialog-actions>\n","import { inject, Injectable } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { Observable } from 'rxjs';\n\nimport { NgssmConfirmationDialogConfig } from './ngssm-confirmation-dialog-config';\nimport { NgssmConfirmationDialogComponent } from './ngssm-confirmation-dialog/ngssm-confirmation-dialog.component';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NgssmConfirmationDialogService {\n private readonly matDialog = inject(MatDialog);\n\n public displayConfirmationDialog(config: NgssmConfirmationDialogConfig): Observable<string> {\n return this.matDialog\n .open(NgssmConfirmationDialogComponent, {\n disableClose: true,\n data: config,\n minWidth: config.minWidth,\n minHeight: config.minHeight\n })\n .afterClosed();\n }\n}\n","export const isNullOrUndefined = <T = unknown>(value: T): boolean => value === null || value === undefined;\n","import { ComponentRef, Directive, inject, Input, Type, ViewContainerRef } from '@angular/core';\n\nexport type NgssmComponentAction = (component: unknown) => void;\n\n@Directive({\n selector: '[ngssmComponentDisplay]'\n})\nexport class NgssmComponentDisplayDirective {\n private readonly viewContainerRef = inject(ViewContainerRef);\n\n private componentRef?: ComponentRef<unknown>;\n private componentAction?: NgssmComponentAction | null;\n\n @Input() public set ngssmComponentDisplay(value: Type<unknown> | null | undefined) {\n this.componentRef = undefined;\n this.viewContainerRef.clear();\n if (value) {\n this.componentRef = this.viewContainerRef.createComponent(value);\n if (this.componentRef && this.componentAction) {\n this.componentAction(this.componentRef.instance);\n }\n }\n }\n\n @Input() public set ngssmComponentAction(value: NgssmComponentAction | null | undefined) {\n this.componentAction = value;\n if (this.componentRef && this.componentAction) {\n this.componentAction(this.componentRef.instance);\n }\n }\n}\n","import { Component, ChangeDetectionStrategy, input } from '@angular/core';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\n\n@Component({\n selector: 'ngssm-help',\n imports: [MatButtonModule, MatIconModule, MatMenuModule],\n templateUrl: './ngssm-help.component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmHelpComponent {\n public readonly help = input<string | null | undefined>();\n}\n","<button mat-icon-button color=\"primary\" [matMenuTriggerFor]=\"helpMenu\" id=\"helpButton\">\n <mat-icon class=\"fa-solid fa-circle-question\"></mat-icon>\n</button>\n<mat-menu #helpMenu=\"matMenu\">\n @if (help(); as content) {\n <div class=\"ngssm-help-panel\" [innerHTML]=\"content\"></div>\n } @else {\n <div class=\"ngssm-help-panel\">\n <ng-content></ng-content>\n </div>\n }\n</mat-menu>\n","import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\nexport type BlobContentReaderAsString = (file: Blob) => Observable<string>;\n\nexport const defaultBlobContentReaderAsString: BlobContentReaderAsString = (file: Blob): Observable<string> => {\n const observable = new Subject<string>();\n const reader = new FileReader();\n\n reader.onloadend = () => {\n const data = reader.result as string;\n reader.onload = null;\n observable.next(data);\n observable.complete();\n };\n\n reader.onerror = (error) => {\n observable.error(error);\n };\n\n reader.readAsText(file);\n\n return observable;\n};\n\nexport const BLOB_CONTENT_READER_AS_STRING = new InjectionToken<BlobContentReaderAsString>('BLOB_CONTENT_READER_AS_STRING');\n\nexport const provideBlobHelpers = (): EnvironmentProviders => {\n return makeEnvironmentProviders([{ provide: BLOB_CONTENT_READER_AS_STRING, useValue: defaultBlobContentReaderAsString }]);\n};\n","import { DateTime } from 'luxon';\n\nexport const compareDateTime = (left: DateTime, right: DateTime): number => {\n if (left < right) {\n return -1;\n }\n\n if (left > right) {\n return 1;\n }\n\n return 0;\n};\n\nexport const toUtcDate = (value: string): DateTime => DateTime.fromISO(value, { zone: 'utc' });\n","import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from '@angular/core';\nimport { ComponentType } from '@angular/cdk/portal';\nimport { MatDialogConfig } from '@angular/material/dialog';\n\nimport { State } from 'ngssm-store';\n\nexport interface NgssmMatDialogConfig<T = unknown, D = unknown> {\n openingAction: string;\n closingActions: string[];\n component: ComponentType<T>;\n matDialogConfig?: MatDialogConfig<D>;\n beforeOpeningDialog?: (state: State) => void;\n}\n\nexport const NGSSM_MAT_DIALOG_CONFIG = new InjectionToken<NgssmMatDialogConfig>('NGSSM_MAT_DIALOG_CONFIG');\n\nexport const provideNgssmMatDialogConfigs = (...configs: NgssmMatDialogConfig[]): EnvironmentProviders => {\n return makeEnvironmentProviders(configs.map((config) => ({ provide: NGSSM_MAT_DIALOG_CONFIG, useValue: config, multi: true })));\n};\n","import { EnvironmentInjector, inject, Injectable, runInInjectionContext } from '@angular/core';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\n\nimport { Effect, State, Action, ActionDispatcher } from 'ngssm-store';\n\nimport { NGSSM_MAT_DIALOG_CONFIG, NgssmMatDialogConfig } from './ngssm-mat-dialog-config';\n\ninterface ExtendedConfig {\n config: NgssmMatDialogConfig;\n dialog?: MatDialogRef<unknown, unknown>;\n}\n\n@Injectable()\nexport class MatDialogOpeningEffect implements Effect {\n public readonly processedActions: string[] = [];\n\n private configs: NgssmMatDialogConfig[] | null = inject(NGSSM_MAT_DIALOG_CONFIG, { optional: true }) as unknown as NgssmMatDialogConfig[];\n private readonly matDialog = inject(MatDialog);\n private readonly injector = inject(EnvironmentInjector);\n\n private readonly extendedConfigs: ExtendedConfig[];\n\n constructor() {\n const allActions = (this.configs ?? []).flatMap((c) => [c.openingAction, ...c.closingActions]);\n const actions = new Set<string>(allActions);\n this.processedActions.push(...actions);\n this.extendedConfigs = (this.configs ?? []).map((c) => ({\n config: c\n }));\n }\n\n public processAction(actionDispatcher: ActionDispatcher, state: State, action: Action): void {\n this.processActionAsClosingOne(action);\n this.processActionAsOpeningOne(state, action);\n }\n\n private processActionAsOpeningOne(state: State, action: Action): void {\n const extendedConfig = this.extendedConfigs.find((c) => c.config.openingAction === action.type);\n if (extendedConfig) {\n const beforeOpeningDialog = extendedConfig.config.beforeOpeningDialog;\n if (beforeOpeningDialog) {\n runInInjectionContext(this.injector, () => beforeOpeningDialog(state));\n }\n extendedConfig.dialog = this.matDialog.open(extendedConfig.config.component, extendedConfig.config.matDialogConfig);\n }\n }\n\n private processActionAsClosingOne(action: Action): void {\n const extendedConfigs = this.extendedConfigs.filter((c) => c.config.closingActions.includes(action.type));\n extendedConfigs.forEach((config) => {\n config.dialog?.close();\n config.dialog = undefined;\n });\n }\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\n\nimport { provideEffects } from 'ngssm-store';\n\nimport { MatDialogOpeningEffect } from './mat-dialog-opening.effect';\n\nexport const provideNgssmMatDialog = (): EnvironmentProviders => {\n return makeEnvironmentProviders([provideEffects(MatDialogOpeningEffect)]);\n};\n","/*\n * Public API Surface of ngssm-toolkit\n */\n\nexport * from './lib/overlay';\nexport * from './lib/default-error-state-matcher';\nexport * from './lib/not-found.component';\nexport * from './lib/file-picker';\nexport * from './lib/notification';\nexport * from './lib/regex-editor';\nexport * from './lib/confirmation-dialog';\nexport * from './lib/object-helpers';\nexport * from './lib/ngssm-component-display.directive';\nexport * from './lib/ngssm-help/ngssm-help.component';\nexport * from './lib/blob-helpers';\nexport * from './lib/luxon-helpers';\nexport * from './lib/mat-dialog';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;MAyBa,4BAA4B,CAAA;AAChC,IAAA,OAAO,GAAG,MAAM,CAAS,EAAE,mDAAC;uGADxB,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA5B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlB7B;;;;;;;GAOT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,uFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EARS,aAAa,0NAAE,wBAAwB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAmBtC,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBArBxC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,WACxB,CAAC,aAAa,EAAE,wBAAwB,CAAC,EAAA,QAAA,EACxC;;;;;;;AAOT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,uFAAA,CAAA,EAAA;;;ACVG,MAAO,qBAAsB,SAAQ,gBAAgB,CAAA;AACjD,IAAA,UAAU;AAEX,IAAA,eAAe,CAAC,UAAsB,EAAA;AAC3C,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;IAC9B;IAEgB,mBAAmB,GAAA;AACjC,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,aAAa;IACvC;uGATW,qBAAqB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAArB,qBAAqB,EAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC;;;MCyBY,mBAAmB,CAAA;AACtB,IAAA,OAAO,MAAM,GAAG,CAAC;AAET,IAAA,cAAc,GAAG,MAAM,CAAS,aAAa,0DAAC;AACvD,IAAA,eAAe;AACf,IAAA,gBAAgB;AAEN,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AACzB,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,IAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAE5B,IAAA,eAAe;AACxB,IAAA,EAAE,GAAG,mBAAmB,CAAC,MAAM,EAAE;AAEjC,IAAA,UAAU;AAElB,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA,uCAAA,EAA0C,IAAI,CAAC,EAAE,CAAA,CAAE,CAAC;AAC5E,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC;AAE7E,QAAA,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC;YACrC,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,qBAAqB,EAAE,CAAC;YAC3E,MAAM,EAAE,IAAI,CAAC;AACd,SAAA,CAAC;QACF,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,gBAAgB,CAAC;AAClE,QAAA,gBAA0C,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC;QAE5E,IAAI,CAAC,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,eAAe,EAAE;AACvD,YAAA,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,kBAAkB,EAAE,CAAC,gBAAgB,EAAE;AAC1F,YAAA,cAAc,EAAE,8BAA8B,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7D,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,UAAU,EAAE;AACb,SAAA,CAAC;IACJ;IAEO,WAAW,GAAA;QAChB,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA,yCAAA,EAA4C,IAAI,CAAC,EAAE,CAAA,CAAE,CAAC;AAC9E,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;AACxB,QAAA,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE;IACjC;IAEO,WAAW,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACzF;AAAO,aAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;YAChC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACrG,YAAA,IAAI,IAAI,CAAC,gBAAgB,KAAK,4BAA4B,EAAE;gBACzD,GAAG,CAAC,QAAyC,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc;YAC9E;QACF;aAAO;AACL,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,eAAe,CAAC,4BAA4B,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC5G,GAAG,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc;QAC5C;IACF;IAEO,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;IAC1B;uGA5DW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAnB,mBAAmB,EAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B;;;MClBY,8BAA8B,CAAA;IACzB,eAAe,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAA2C;IAClE,gBAAgB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAA6C;AACrE,IAAA,cAAc,GAAG,KAAK,CAA4B,aAAa,0DAAC;AAChE,IAAA,mBAAmB,GAAG,KAAK,CAAU,KAAK,+DAAC;AAEnD,IAAA,cAAc,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAEpD,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,cAAc,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE,IAAI,SAAS;YACzE,IAAI,CAAC,cAAc,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EAAE,IAAI,SAAS;AAC3E,YAAA,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC;AACrE,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,EAAE;AACnD,YAAA,IAAI,gBAAgB,KAAK,IAAI,EAAE;AAC7B,gBAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;YACnC;iBAAO;AACL,gBAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;YACnC;AACF,QAAA,CAAC,CAAC;IACJ;uGAvBW,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA9B,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAF9B,CAAC,mBAAmB,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAErB,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAJ1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;oBACjC,SAAS,EAAE,CAAC,mBAAmB;AAChC,iBAAA;;;MCDY,0BAA0B,CAAA;uGAA1B,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,+EAH3B,CAAA,CAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA;;2FAGD,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBALtC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,YACrB,CAAA,CAAE,EAAA;;;MCAD,wBAAwB,CAAA;AACnC,IAAA,YAAY,CAAC,OAA2B,EAAA;QACtC,OAAO,CAAC,EAAE,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IACvC;AACD;AAEM,MAAM,2BAA2B,GAAa,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,wBAAwB;;MCQxG,iBAAiB,CAAA;uGAAjB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,2EAblB,CAAA,0DAAA,CAA4D,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2FAAA,CAAA,EAAA,CAAA;;2FAa3D,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAhB7B,SAAS;+BACE,iBAAiB,EAAA,OAAA,EAClB,EAAE,EAAA,QAAA,EACD,CAAA,0DAAA,CAA4D,EAAA,MAAA,EAAA,CAAA,2FAAA,CAAA,EAAA;;;MCA3D,iBAAiB,CAAA;IACX,KAAK,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;AAE7C,IAAA,SAAS,CAAC,KAAc,EAAE,SAAS,GAAG,CAAC,EAAA;QAC5C,IAAI,KAAK,GAAG,KAAe;QAC3B,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACpC,YAAA,OAAO,GAAG;QACZ;QAEA,IAAI,IAAI,GAAG,CAAC;AACZ,QAAA,OAAO,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YAChD,KAAK,IAAI,IAAI;AACb,YAAA,IAAI,EAAE;QACR;AAEA,QAAA,IAAI,IAAI,KAAK,CAAC,EAAE;YACd,OAAO,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA,CAAE;QACvC;AAEA,QAAA,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;IAC3D;uGApBW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,eAAA,EAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE;AACP,iBAAA;;;ACJD;AAUO,MAAM,IAAI,GAAG,MAAK;;AAEzB;MASa,wBAAwB,CAAA;AAC3B,IAAA,OAAO,MAAM,GAAG,CAAC;AAEiB,IAAA,SAAS;AACzB,IAAA,EAAE,GAAG,CAAA,YAAA,EAAe,wBAAwB,CAAC,MAAM,EAAE,EAAE;AAEjE,IAAA,SAAS,GAAqB,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAE/E,IAAA,cAAc,GAAG,KAAK,CAAC,IAAI,0DAAC;IAErC,WAAW,GAAG,aAAa;IAC3B,WAAW,GAAG,EAAE;IAChB,OAAO,GAAG,KAAK;AACf,IAAA,YAAY,GAAG,IAAI,OAAO,EAAQ;IAClC,KAAK,GAAgB,IAAI;AACzB,IAAA,UAAU;AACV,IAAA,mBAAmB;IAElB,gBAAgB,GAAyB,IAAI;IAC7C,SAAS,GAAG,KAAK;IACjB,SAAS,GAAG,KAAK;AAEzB,IAAA,WAAA,GAAA;;AAEE,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE;;;AAG1B,YAAA,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI;QACrC;IACF;AAEA,IAAA,IACW,QAAQ,GAAA;QACjB,OAAO,IAAI,CAAC,SAAS;IACvB;IAEA,IAAW,QAAQ,CAAC,KAAc,EAAA;AAChC,QAAA,IAAI,CAAC,SAAS,GAAG,qBAAqB,CAAC,KAAK,CAAC;AAC7C,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC1B;AAEA,IAAA,IACW,QAAQ,GAAA;QACjB,OAAO,IAAI,CAAC,SAAS;IACvB;IAEA,IAAW,QAAQ,CAAC,KAAc,EAAA;AAChC,QAAA,IAAI,CAAC,SAAS,GAAG,qBAAqB,CAAC,KAAK,CAAC;AAC7C,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC1B;AAEA,IAAA,IAAW,KAAK,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,KAAK,KAAK,IAAI;IAC5B;AAEA,IAAA,IAAW,gBAAgB,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,KAAK,KAAK,IAAI;IAC5B;AAEA,IAAA,IAAW,UAAU,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE,OAAO,IAAI,KAAK;IACzC;AAEA,IAAA,IAAW,oBAAoB,GAAA;AAC7B,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;AAC9C,YAAA,OAAO,IAAI,CAAC,WAAW,EAAE;QAC3B;AAEA,QAAA,OAAO,EAAE;IACX;IAEO,iBAAiB,GAAA;;IAExB;AAEO,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AACzC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;IAC5B;IAEO,gBAAgB,GAAA;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,KAAK,EAAE;QACvC;IACF;AAEO,IAAA,UAAU,CAAC,GAA4B,EAAA;AAC5C,QAAA,IAAI,CAAC,KAAK,GAAG,GAAG,IAAI,IAAI;QACxB,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE;YACjC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI;QAC3C;AAEA,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC1B;AAEO,IAAA,gBAAgB,CAAC,EAAwB,EAAA;AAC9C,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;IAC5B;IAEO,iBAAiB,GAAA;;IAExB;IAEO,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;IAC9B;AAEO,IAAA,MAAM,CAAC,KAAgB,EAAA;AAC5B,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,YAAY,KAAK,IAAI,EAAE;YACjD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC;QAC5C;IACF;AAEO,IAAA,UAAU,CAAC,KAAgB,EAAA;AAChC,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;IAC5B;AAEO,IAAA,WAAW,CAAC,KAAgB,EAAA;AACjC,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;IAC5B;IAEO,cAAc,GAAA;QACnB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,KAAK,CAAC;IACvD;AAEQ,IAAA,cAAc,CAAC,KAAgB,EAAA;QACrC,KAAK,CAAC,eAAe,EAAE;QACvB,KAAK,CAAC,cAAc,EAAE;IACxB;AAEQ,IAAA,WAAW,CAAC,KAAe,EAAA;AACjC,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACpB,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;AACrB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AACxB,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;QACnC;IACF;uGAzIW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,8gBAFxB,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,wBAAwB,EAAE,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnBtF,wnBAkBA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDFY,YAAY,0HAAE,iBAAiB,EAAA,IAAA,EAAA,eAAA,EAAA,CAAA,EAAA,CAAA;;2FAK9B,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAPpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,WACpB,CAAC,YAAY,EAAE,iBAAiB,CAAC,EAAA,SAAA,EAG/B,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAA,wBAA0B,EAAE,CAAC,EAAA,QAAA,EAAA,wnBAAA,EAAA;;sBAKnF,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;sBACvC,WAAW;uBAAC,IAAI;;sBA2BhB;;sBAUA;;;MElDU,+BAA+B,CAAA;AAC1B,IAAA,OAAO,GAAW,MAAM,CAAC,kBAAkB,CAAC;uGADjD,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECZ5C,+KAEA,EAAA,MAAA,EAAA,CAAA,6DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDKY,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAKZ,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAP3C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,WAC3B,CAAC,aAAa,CAAC,EAAA,eAAA,EAGP,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,+KAAA,EAAA,MAAA,EAAA,CAAA,6DAAA,CAAA,EAAA;;;MEEpC,iCAAiC,CAAA;AACrC,IAAA,OAAO,GAAW,MAAM,CAAC,kBAAkB,CAAC;uGADxC,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAjC,iCAAiC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECZ9C,qMAGA,EAAA,MAAA,EAAA,CAAA,6DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDIY,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAKZ,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAP7C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,4BAA4B,WAC7B,CAAC,aAAa,CAAC,EAAA,eAAA,EAGP,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,qMAAA,EAAA,MAAA,EAAA,CAAA,6DAAA,CAAA,EAAA;;;MEDpC,oBAAoB,CAAA;AACd,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AAE3C,IAAA,WAAW,CAAC,OAAe,EAAA;AAChC,QAAA,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,+BAA+B,EAAE;AAClE,YAAA,UAAU,EAAE,0BAA0B;AACtC,YAAA,IAAI,EAAE;AACP,SAAA,CAAC;IACJ;AAEO,IAAA,aAAa,CAAC,OAAe,EAAA;AAClC,QAAA,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,iCAAiC,EAAE;AACpE,YAAA,UAAU,EAAE,0BAA0B;AACtC,YAAA,IAAI,EAAE;AACP,SAAA,CAAC;IACJ;uGAfW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAApB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cAFnB,MAAM,EAAA,CAAA;;2FAEP,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACEM,MAAM,2BAA2B,GAAyB;AAC/D,IAAA,eAAe,EAAE,CAAC,OAAe,KAAI;AACnC,QAAA,IAAI;AACF,YAAA,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC;AACjC,YAAA,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;AAClB,gBAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;YAC1B;QACF;QAAE,OAAO,KAAK,EAAE;YACd,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE;QAC5D;AAEA,QAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;IAC1B,CAAC;AACD,IAAA,OAAO,EAAE,CAAC,OAAe,EAAE,UAAkB,KAAI;AAC/C,QAAA,IAAI;AACF,YAAA,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC;AACjC,YAAA,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AAC1B,gBAAA,OAAO,IAAI;YACb;QACF;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,OAAO,KAAK;IACd;;;MCrBW,gCAAgC,CAAA;AAC3B,IAAA,IAAI,GAAG,MAAM,CAAC,eAAe,CAAkC;uGADpE,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAhC,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECb7C,6fAUA,EAAA,MAAA,EAAA,CAAA,6CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDFY,gBAAgB,yGAAE,gBAAgB,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,cAAc,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,SAAS,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAK5D,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAP5C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,2BAA2B,EAAA,OAAA,EAC5B,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,EAAE,SAAS,CAAC,EAAA,eAAA,EAGvD,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,6fAAA,EAAA,MAAA,EAAA,CAAA,6CAAA,CAAA,EAAA;;;MEDpC,8BAA8B,CAAA;AACxB,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAEvC,IAAA,yBAAyB,CAAC,MAAqC,EAAA;QACpE,OAAO,IAAI,CAAC;aACT,IAAI,CAAC,gCAAgC,EAAE;AACtC,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,SAAS,EAAE,MAAM,CAAC;SACnB;AACA,aAAA,WAAW,EAAE;IAClB;uGAZW,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAA9B,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,8BAA8B,cAF7B,MAAM,EAAA,CAAA;;2FAEP,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAH1C,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACTM,MAAM,iBAAiB,GAAG,CAAc,KAAQ,KAAc,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK;;MCOpF,8BAA8B,CAAA;AACxB,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAEpD,IAAA,YAAY;AACZ,IAAA,eAAe;IAEvB,IAAoB,qBAAqB,CAAC,KAAuC,EAAA;AAC/E,QAAA,IAAI,CAAC,YAAY,GAAG,SAAS;AAC7B,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;QAC7B,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,KAAK,CAAC;YAChE,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,eAAe,EAAE;gBAC7C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;YAClD;QACF;IACF;IAEA,IAAoB,oBAAoB,CAAC,KAA8C,EAAA;AACrF,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;QAC5B,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,eAAe,EAAE;YAC7C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;QAClD;IACF;uGAtBW,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA9B,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA9B,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAH1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;AACX,iBAAA;;sBAOE;;sBAWA;;;MCXU,kBAAkB,CAAA;IACb,IAAI,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAA6B;uGAD9C,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,uMCb/B,iaAYA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDJY,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,qLAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAK5C,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAP9B,SAAS;+BACE,YAAY,EAAA,OAAA,EACb,CAAC,eAAe,EAAE,aAAa,EAAE,aAAa,CAAC,EAAA,eAAA,EAGvC,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,iaAAA,EAAA;;;AEN1C,MAAM,gCAAgC,GAA8B,CAAC,IAAU,KAAwB;AAC5G,IAAA,MAAM,UAAU,GAAG,IAAI,OAAO,EAAU;AACxC,IAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE;AAE/B,IAAA,MAAM,CAAC,SAAS,GAAG,MAAK;AACtB,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,MAAgB;AACpC,QAAA,MAAM,CAAC,MAAM,GAAG,IAAI;AACpB,QAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QACrB,UAAU,CAAC,QAAQ,EAAE;AACvB,IAAA,CAAC;AAED,IAAA,MAAM,CAAC,OAAO,GAAG,CAAC,KAAK,KAAI;AACzB,QAAA,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;AACzB,IAAA,CAAC;AAED,IAAA,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;AAEvB,IAAA,OAAO,UAAU;AACnB;MAEa,6BAA6B,GAAG,IAAI,cAAc,CAA4B,+BAA+B;AAEnH,MAAM,kBAAkB,GAAG,MAA2B;AAC3D,IAAA,OAAO,wBAAwB,CAAC,CAAC,EAAE,OAAO,EAAE,6BAA6B,EAAE,QAAQ,EAAE,gCAAgC,EAAE,CAAC,CAAC;AAC3H;;MC3Ba,eAAe,GAAG,CAAC,IAAc,EAAE,KAAe,KAAY;AACzE,IAAA,IAAI,IAAI,GAAG,KAAK,EAAE;QAChB,OAAO,CAAC,CAAC;IACX;AAEA,IAAA,IAAI,IAAI,GAAG,KAAK,EAAE;AAChB,QAAA,OAAO,CAAC;IACV;AAEA,IAAA,OAAO,CAAC;AACV;MAEa,SAAS,GAAG,CAAC,KAAa,KAAe,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;;MCAhF,uBAAuB,GAAG,IAAI,cAAc,CAAuB,yBAAyB;MAE5F,4BAA4B,GAAG,CAAC,GAAG,OAA+B,KAA0B;AACvG,IAAA,OAAO,wBAAwB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,MAAM,EAAE,OAAO,EAAE,uBAAuB,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACjI;;MCLa,sBAAsB,CAAA;IACjB,gBAAgB,GAAa,EAAE;IAEvC,OAAO,GAAkC,MAAM,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAsC;AACxH,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAC7B,IAAA,QAAQ,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAEtC,IAAA,eAAe;AAEhC,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC;AAC9F,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS,UAAU,CAAC;QAC3C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;AACtC,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM;AACtD,YAAA,MAAM,EAAE;AACT,SAAA,CAAC,CAAC;IACL;AAEO,IAAA,aAAa,CAAC,gBAAkC,EAAE,KAAY,EAAE,MAAc,EAAA;AACnF,QAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC;AACtC,QAAA,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,MAAM,CAAC;IAC/C;IAEQ,yBAAyB,CAAC,KAAY,EAAE,MAAc,EAAA;QAC5D,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,KAAK,MAAM,CAAC,IAAI,CAAC;QAC/F,IAAI,cAAc,EAAE;AAClB,YAAA,MAAM,mBAAmB,GAAG,cAAc,CAAC,MAAM,CAAC,mBAAmB;YACrE,IAAI,mBAAmB,EAAE;AACvB,gBAAA,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,mBAAmB,CAAC,KAAK,CAAC,CAAC;YACxE;YACA,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,MAAM,CAAC,eAAe,CAAC;QACrH;IACF;AAEQ,IAAA,yBAAyB,CAAC,MAAc,EAAA;QAC9C,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACzG,QAAA,eAAe,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AACjC,YAAA,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE;AACtB,YAAA,MAAM,CAAC,MAAM,GAAG,SAAS;AAC3B,QAAA,CAAC,CAAC;IACJ;uGAxCW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAtB,sBAAsB,EAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC;;;ACNM,MAAM,qBAAqB,GAAG,MAA2B;IAC9D,OAAO,wBAAwB,CAAC,CAAC,cAAc,CAAC,sBAAsB,CAAC,CAAC,CAAC;AAC3E;;ACRA;;AAEG;;ACFH;;AAEG;;;;"}
|