ngssm-toolkit 20.3.8 → 20.3.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,50 +1,50 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Component, Injectable, inject, Injector, ElementRef, ViewContainerRef, Renderer2, Input, Directive, Pipe, input, HostBinding, ViewChild, ChangeDetectionStrategy, InjectionToken, makeEnvironmentProviders, EnvironmentInjector, runInInjectionContext } from '@angular/core';
2
+ import { signal, Component, Injectable, inject, Injector, ElementRef, ViewContainerRef, Renderer2, input, effect, Directive, Pipe, Input, HostBinding, ViewChild, ChangeDetectionStrategy, InjectionToken, makeEnvironmentProviders, EnvironmentInjector, runInInjectionContext } from '@angular/core';
3
3
  import { OverlayContainer, Overlay, createOverlayRef, createRepositionScrollStrategy } from '@angular/cdk/overlay';
4
4
  import { TemplatePortal, ComponentPortal } from '@angular/cdk/portal';
5
- import { Subject, BehaviorSubject } from 'rxjs';
6
5
  import { Logger, provideEffects } from 'ngssm-store';
7
- import * as i3 from '@angular/common';
8
- import { CommonModule } from '@angular/common';
9
6
  import * as i1 from '@angular/material/card';
10
7
  import { MatCardModule } from '@angular/material/card';
11
8
  import * as i2 from '@angular/material/progress-spinner';
12
9
  import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
13
10
  import { ErrorStateMatcher } from '@angular/material/core';
11
+ import * as i1$1 from '@angular/common';
12
+ import { CommonModule } from '@angular/common';
14
13
  import { coerceBooleanProperty } from '@angular/cdk/coercion';
15
14
  import { NgControl } from '@angular/forms';
16
15
  import { MatFormFieldControl } from '@angular/material/form-field';
16
+ import { Subject } from 'rxjs';
17
17
  import { MAT_SNACK_BAR_DATA, MatSnackBar } from '@angular/material/snack-bar';
18
- import * as i1$1 from '@angular/material/icon';
18
+ import * as i1$2 from '@angular/material/icon';
19
19
  import { MatIconModule } from '@angular/material/icon';
20
20
  import { MAT_DIALOG_DATA, MatDialogContent, MatDialogActions, MatDialogClose, MatDialog } from '@angular/material/dialog';
21
- import * as i1$2 from '@angular/material/button';
21
+ import * as i1$3 from '@angular/material/button';
22
22
  import { MatButton, MatButtonModule } from '@angular/material/button';
23
- import * as i3$1 from '@angular/material/menu';
23
+ import * as i3 from '@angular/material/menu';
24
24
  import { MatMenuModule } from '@angular/material/menu';
25
25
  import { DateTime } from 'luxon';
26
26
 
27
27
  class NgssmMessageOverlayComponent {
28
28
  constructor() {
29
- this.message$ = new Subject();
29
+ this.message = signal('', ...(ngDevMode ? [{ debugName: "message" }] : []));
30
30
  }
31
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgssmMessageOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
32
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.9", type: NgssmMessageOverlayComponent, isStandalone: true, selector: "ngssm-message-overlay", ngImport: i0, template: `
31
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmMessageOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
32
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.10", type: NgssmMessageOverlayComponent, isStandalone: true, selector: "ngssm-message-overlay", ngImport: i0, template: `
33
33
  <mat-card>
34
34
  <mat-card-content class="message-container">
35
35
  <mat-spinner></mat-spinner>
36
- {{ message$ | async }}
36
+ {{ message() }}
37
37
  </mat-card-content>
38
38
  </mat-card>
39
- `, isInline: true, styles: [".message-container{display:flex!important;flex-direction:column;align-items:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { 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"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] }); }
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"] }] }); }
40
40
  }
41
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgssmMessageOverlayComponent, decorators: [{
41
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmMessageOverlayComponent, decorators: [{
42
42
  type: Component,
43
- args: [{ selector: 'ngssm-message-overlay', imports: [CommonModule, MatCardModule, MatProgressSpinnerModule], template: `
43
+ args: [{ selector: 'ngssm-message-overlay', imports: [MatCardModule, MatProgressSpinnerModule], template: `
44
44
  <mat-card>
45
45
  <mat-card-content class="message-container">
46
46
  <mat-spinner></mat-spinner>
47
- {{ message$ | async }}
47
+ {{ message() }}
48
48
  </mat-card-content>
49
49
  </mat-card>
50
50
  `, styles: [".message-container{display:flex!important;flex-direction:column;align-items:center}\n"] }]
@@ -57,23 +57,23 @@ class NgssmOverlayContainer extends OverlayContainer {
57
57
  getContainerElement() {
58
58
  return this.elementRef?.nativeElement;
59
59
  }
60
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgssmOverlayContainer, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
61
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgssmOverlayContainer }); }
60
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmOverlayContainer, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
61
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmOverlayContainer }); }
62
62
  }
63
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgssmOverlayContainer, decorators: [{
63
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmOverlayContainer, decorators: [{
64
64
  type: Injectable
65
65
  }] });
66
66
 
67
67
  class NgssmOverlayBuilder {
68
68
  static { this.nextId = 1; }
69
69
  constructor() {
70
+ this.overlayMessage = signal('Please wait', ...(ngDevMode ? [{ debugName: "overlayMessage" }] : []));
70
71
  this.logger = inject(Logger);
71
72
  this.injector = inject(Injector);
72
73
  this.elementRef = inject(ElementRef);
73
74
  this.overlay = inject(Overlay);
74
75
  this.viewContainerRef = inject(ViewContainerRef);
75
76
  this.renderer = inject(Renderer2);
76
- this._overlayMessage$ = new BehaviorSubject('Please wait');
77
77
  this.id = NgssmOverlayBuilder.nextId++;
78
78
  this.logger.information(`[NgssmOverlayBuilder] Creating overlay ${this.id}`);
79
79
  this.renderer.setStyle(this.elementRef.nativeElement, 'position', 'relative');
@@ -94,82 +94,69 @@ class NgssmOverlayBuilder {
94
94
  this.overlayRef.detach();
95
95
  this.overlayInjector?.destroy();
96
96
  }
97
- set overlayMessage(value) {
98
- this._overlayMessage$.next(value);
99
- }
100
97
  showOverlay() {
101
- if (this.overLayTemplate) {
102
- this.overlayRef.attach(new TemplatePortal(this.overLayTemplate, this.viewContainerRef));
98
+ if (this.overlayTemplate) {
99
+ this.overlayRef.attach(new TemplatePortal(this.overlayTemplate, this.viewContainerRef));
103
100
  }
104
101
  else if (this.overlayComponent) {
105
- const ref = this.overlayRef.attach(new ComponentPortal(this.overlayComponent));
102
+ const ref = this.overlayRef.attach(new ComponentPortal(this.overlayComponent, this.viewContainerRef));
106
103
  if (this.overlayComponent === NgssmMessageOverlayComponent) {
107
- ref.instance.message$ = this._overlayMessage$.asObservable();
104
+ ref.instance.message = this.overlayMessage;
108
105
  }
109
106
  }
110
107
  else {
111
108
  const ref = this.overlayRef.attach(new ComponentPortal(NgssmMessageOverlayComponent, this.viewContainerRef));
112
- ref.instance.message$ = this._overlayMessage$.asObservable();
109
+ ref.instance.message = this.overlayMessage;
113
110
  }
114
111
  }
115
112
  hideOverlay() {
116
113
  this.overlayRef.detach();
117
114
  }
118
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgssmOverlayBuilder, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
119
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgssmOverlayBuilder }); }
115
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmOverlayBuilder, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
116
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmOverlayBuilder }); }
120
117
  }
121
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgssmOverlayBuilder, decorators: [{
118
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmOverlayBuilder, decorators: [{
122
119
  type: Injectable
123
120
  }], ctorParameters: () => [] });
124
121
 
125
122
  class NgssmComponentOverlayDirective {
126
123
  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" }] : []));
127
128
  this.overlayBuilder = inject(NgssmOverlayBuilder);
129
+ effect(() => {
130
+ this.overlayBuilder.overlayTemplate = this.overlayTemplate() ?? undefined;
131
+ this.overlayBuilder.overlayComponent = this.overlayComponent() ?? undefined;
132
+ this.overlayBuilder.overlayMessage.set(this.overlayMessage() ?? '');
133
+ });
134
+ effect(() => {
135
+ const doRenderOveralay = this.ngssmDisplayOverlay();
136
+ if (doRenderOveralay === true) {
137
+ this.overlayBuilder.showOverlay();
138
+ }
139
+ else {
140
+ this.overlayBuilder.hideOverlay();
141
+ }
142
+ });
128
143
  }
129
- // eslint-disable-next-line @angular-eslint/no-input-rename
130
- set overLayTemplate(value) {
131
- this.overlayBuilder.overLayTemplate = value ?? undefined;
132
- }
133
- set overlayComponent(value) {
134
- this.overlayBuilder.overlayComponent = value ?? undefined;
135
- }
136
- set overlayMessage(value) {
137
- this.overlayBuilder.overlayMessage = value;
138
- }
139
- set displayOverlay(value) {
140
- if (value === true) {
141
- this.overlayBuilder.showOverlay();
142
- }
143
- else {
144
- this.overlayBuilder.hideOverlay();
145
- }
146
- }
147
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgssmComponentOverlayDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
148
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.9", type: NgssmComponentOverlayDirective, isStandalone: true, selector: "[ngssmDisplayOverlay]", inputs: { overLayTemplate: ["overlayTemplate", "overLayTemplate"], overlayComponent: "overlayComponent", overlayMessage: "overlayMessage", displayOverlay: ["ngssmDisplayOverlay", "displayOverlay"] }, providers: [NgssmOverlayBuilder], ngImport: i0 }); }
144
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmComponentOverlayDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
145
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.10", 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 }); }
149
146
  }
150
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgssmComponentOverlayDirective, decorators: [{
147
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmComponentOverlayDirective, decorators: [{
151
148
  type: Directive,
152
149
  args: [{
153
150
  selector: '[ngssmDisplayOverlay]',
154
151
  providers: [NgssmOverlayBuilder]
155
152
  }]
156
- }], propDecorators: { overLayTemplate: [{
157
- type: Input,
158
- args: ['overlayTemplate']
159
- }], overlayComponent: [{
160
- type: Input
161
- }], overlayMessage: [{
162
- type: Input
163
- }], displayOverlay: [{
164
- type: Input,
165
- args: ['ngssmDisplayOverlay']
166
- }] } });
153
+ }], 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 }] }] } });
167
154
 
168
155
  class NgssmEmptyOverlayComponent {
169
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgssmEmptyOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
170
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.9", type: NgssmEmptyOverlayComponent, isStandalone: true, selector: "ngssm-empty-overlay", ngImport: i0, template: ``, isInline: true }); }
156
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmEmptyOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
157
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.10", type: NgssmEmptyOverlayComponent, isStandalone: true, selector: "ngssm-empty-overlay", ngImport: i0, template: ``, isInline: true }); }
171
158
  }
172
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgssmEmptyOverlayComponent, decorators: [{
159
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmEmptyOverlayComponent, decorators: [{
173
160
  type: Component,
174
161
  args: [{ selector: 'ngssm-empty-overlay', template: `` }]
175
162
  }] });
@@ -182,10 +169,10 @@ class DefaultErrorStateMatcher {
182
169
  const useDefaultErrorStateMatcher = { provide: ErrorStateMatcher, useClass: DefaultErrorStateMatcher };
183
170
 
184
171
  class NotFoundComponent {
185
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NotFoundComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
186
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.9", 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"], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
172
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NotFoundComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
173
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.10", 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"], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
187
174
  }
188
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NotFoundComponent, decorators: [{
175
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NotFoundComponent, decorators: [{
189
176
  type: Component,
190
177
  args: [{ selector: 'ngssm-not-found', imports: [CommonModule], 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"] }]
191
178
  }] });
@@ -209,10 +196,10 @@ class NgssmFileSizePipe {
209
196
  }
210
197
  return `${bytes.toFixed(+precision)} ${this.units[unit]}`;
211
198
  }
212
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgssmFileSizePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
213
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.9", ngImport: i0, type: NgssmFileSizePipe, isStandalone: true, name: "ngssmFileSize" }); }
199
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmFileSizePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
200
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.10", ngImport: i0, type: NgssmFileSizePipe, isStandalone: true, name: "ngssmFileSize" }); }
214
201
  }
215
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgssmFileSizePipe, decorators: [{
202
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmFileSizePipe, decorators: [{
216
203
  type: Pipe,
217
204
  args: [{
218
205
  name: 'ngssmFileSize'
@@ -326,10 +313,10 @@ class NgssmFilePickerComponent {
326
313
  this.onChangeCallback(this.value);
327
314
  }
328
315
  }
329
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgssmFilePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
330
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.9", 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: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: NgssmFileSizePipe, name: "ngssmFileSize" }] }); }
316
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmFilePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
317
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.10", 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" }] }); }
331
318
  }
332
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgssmFilePickerComponent, decorators: [{
319
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmFilePickerComponent, decorators: [{
333
320
  type: Component,
334
321
  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" }]
335
322
  }], ctorParameters: () => [], propDecorators: { displayDetails: [{ type: i0.Input, args: [{ isSignal: true, alias: "displayDetails", required: false }] }], fileInput: [{
@@ -348,10 +335,10 @@ class NgssmNotificationErrorComponent {
348
335
  constructor() {
349
336
  this.message = inject(MAT_SNACK_BAR_DATA);
350
337
  }
351
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgssmNotificationErrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
352
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.9", 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: CommonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
338
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmNotificationErrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
339
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.10", 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: CommonModule }, { 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
340
  }
354
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgssmNotificationErrorComponent, decorators: [{
341
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmNotificationErrorComponent, decorators: [{
355
342
  type: Component,
356
343
  args: [{ selector: 'ngssm-notification-error', imports: [CommonModule, 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"] }]
357
344
  }] });
@@ -360,10 +347,10 @@ class NgssmNotificationSuccessComponent {
360
347
  constructor() {
361
348
  this.message = inject(MAT_SNACK_BAR_DATA);
362
349
  }
363
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgssmNotificationSuccessComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
364
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.9", 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: CommonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
350
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmNotificationSuccessComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
351
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.10", 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: CommonModule }, { 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 }); }
365
352
  }
366
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgssmNotificationSuccessComponent, decorators: [{
353
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmNotificationSuccessComponent, decorators: [{
367
354
  type: Component,
368
355
  args: [{ selector: 'ngssm-notification-success', imports: [CommonModule, 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"] }]
369
356
  }] });
@@ -384,10 +371,10 @@ class NgssmNotifierService {
384
371
  data: message
385
372
  });
386
373
  }
387
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgssmNotifierService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
388
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgssmNotifierService, providedIn: 'root' }); }
374
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmNotifierService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
375
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmNotifierService, providedIn: 'root' }); }
389
376
  }
390
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgssmNotifierService, decorators: [{
377
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmNotifierService, decorators: [{
391
378
  type: Injectable,
392
379
  args: [{
393
380
  providedIn: 'root'
@@ -425,10 +412,10 @@ class NgssmConfirmationDialogComponent {
425
412
  constructor() {
426
413
  this.data = inject(MAT_DIALOG_DATA);
427
414
  }
428
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgssmConfirmationDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
429
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.9", 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 }); }
415
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmConfirmationDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
416
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.10", 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 }); }
430
417
  }
431
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgssmConfirmationDialogComponent, decorators: [{
418
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmConfirmationDialogComponent, decorators: [{
432
419
  type: Component,
433
420
  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"] }]
434
421
  }] });
@@ -447,10 +434,10 @@ class NgssmConfirmationDialogService {
447
434
  })
448
435
  .afterClosed();
449
436
  }
450
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgssmConfirmationDialogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
451
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgssmConfirmationDialogService, providedIn: 'root' }); }
437
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmConfirmationDialogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
438
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmConfirmationDialogService, providedIn: 'root' }); }
452
439
  }
453
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgssmConfirmationDialogService, decorators: [{
440
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmConfirmationDialogService, decorators: [{
454
441
  type: Injectable,
455
442
  args: [{
456
443
  providedIn: 'root'
@@ -479,10 +466,10 @@ class NgssmComponentDisplayDirective {
479
466
  this.componentAction(this.componentRef.instance);
480
467
  }
481
468
  }
482
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgssmComponentDisplayDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
483
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.9", type: NgssmComponentDisplayDirective, isStandalone: true, selector: "[ngssmComponentDisplay]", inputs: { ngssmComponentDisplay: "ngssmComponentDisplay", ngssmComponentAction: "ngssmComponentAction" }, ngImport: i0 }); }
469
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmComponentDisplayDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
470
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.10", type: NgssmComponentDisplayDirective, isStandalone: true, selector: "[ngssmComponentDisplay]", inputs: { ngssmComponentDisplay: "ngssmComponentDisplay", ngssmComponentAction: "ngssmComponentAction" }, ngImport: i0 }); }
484
471
  }
485
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgssmComponentDisplayDirective, decorators: [{
472
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmComponentDisplayDirective, decorators: [{
486
473
  type: Directive,
487
474
  args: [{
488
475
  selector: '[ngssmComponentDisplay]'
@@ -497,10 +484,10 @@ class NgssmHelpComponent {
497
484
  constructor() {
498
485
  this.help = input(...(ngDevMode ? [undefined, { debugName: "help" }] : []));
499
486
  }
500
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgssmHelpComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
501
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.9", 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: CommonModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$2.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$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i3$1.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$1.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 }); }
487
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmHelpComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
488
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.10", 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: CommonModule }, { 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 }); }
502
489
  }
503
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgssmHelpComponent, decorators: [{
490
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: NgssmHelpComponent, decorators: [{
504
491
  type: Component,
505
492
  args: [{ selector: 'ngssm-help', imports: [CommonModule, 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" }]
506
493
  }], propDecorators: { help: [{ type: i0.Input, args: [{ isSignal: true, alias: "help", required: false }] }] } });
@@ -575,10 +562,10 @@ class MatDialogOpeningEffect {
575
562
  config.dialog = undefined;
576
563
  });
577
564
  }
578
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: MatDialogOpeningEffect, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
579
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: MatDialogOpeningEffect }); }
565
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: MatDialogOpeningEffect, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
566
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: MatDialogOpeningEffect }); }
580
567
  }
581
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: MatDialogOpeningEffect, decorators: [{
568
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: MatDialogOpeningEffect, decorators: [{
582
569
  type: Injectable
583
570
  }], ctorParameters: () => [] });
584
571
 
@@ -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 { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { Observable, Subject } from 'rxjs';\n\n@Component({\n selector: 'ngssm-message-overlay',\n imports: [CommonModule, MatCardModule, MatProgressSpinnerModule],\n template: `\n <mat-card>\n <mat-card-content class=\"message-container\">\n <mat-spinner></mat-spinner>\n {{ message$ | async }}\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$: Observable<string> = new Subject<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 TemplateRef,\n ViewContainerRef\n} from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\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 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 readonly _overlayMessage$ = new BehaviorSubject<string>('Please wait');\n private id = NgssmOverlayBuilder.nextId++;\n\n private overlayRef: OverlayRef;\n\n public overLayTemplate: TemplateRef<unknown> | undefined;\n public overlayComponent: ComponentType<unknown> | undefined;\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 set overlayMessage(value: string) {\n this._overlayMessage$.next(value);\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));\n if (this.overlayComponent === NgssmMessageOverlayComponent) {\n (ref.instance as NgssmMessageOverlayComponent).message$ = this._overlayMessage$.asObservable();\n }\n } else {\n const ref = this.overlayRef.attach(new ComponentPortal(NgssmMessageOverlayComponent, this.viewContainerRef));\n ref.instance.message$ = this._overlayMessage$.asObservable();\n }\n }\n\n public hideOverlay(): void {\n this.overlayRef.detach();\n }\n}\n","import { Directive, inject, Input, TemplateRef } 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 private overlayBuilder = inject(NgssmOverlayBuilder);\n\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('overlayTemplate') set overLayTemplate(value: TemplateRef<unknown> | undefined | null) {\n this.overlayBuilder.overLayTemplate = value ?? undefined;\n }\n\n @Input() set overlayComponent(value: ComponentType<unknown> | undefined | null) {\n this.overlayBuilder.overlayComponent = value ?? undefined;\n }\n\n @Input() public set overlayMessage(value: string) {\n this.overlayBuilder.overlayMessage = value;\n }\n\n @Input('ngssmDisplayOverlay') public set displayOverlay(value: boolean) {\n if (value === true) {\n this.overlayBuilder.showOverlay();\n } else {\n this.overlayBuilder.hideOverlay();\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 { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\n\n@Component({\n selector: 'ngssm-not-found',\n imports: [CommonModule],\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","import { 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 public readonly ngControl: NgControl | null = inject(NgControl, { optional: true, self: true });\n\n private onChangeCallback: (_: unknown) => void = noop;\n private _required = false;\n private _disabled = false;\n\n public readonly displayDetails = input(true);\n\n @ViewChild('fileInput', { static: true }) fileInput: ElementRef | undefined;\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 @HostBinding('id') public id = `file-picker-${NgssmFilePickerComponent.nextId++}`;\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 public get empty(): boolean {\n return this.value === null;\n }\n\n public get shouldLabelFloat(): boolean {\n return this.value !== null;\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 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';\nimport { CommonModule } from '@angular/common';\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: [CommonModule, 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';\nimport { CommonModule } from '@angular/common';\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: [CommonModule, 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';\nimport { CommonModule } from '@angular/common';\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: [CommonModule, 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 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 public readonly processedActions: string[] = [];\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","i2","i3"],"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 });\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 { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\n\n@Component({\n selector: 'ngssm-not-found',\n imports: [CommonModule],\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","import { 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 public readonly ngControl: NgControl | null = inject(NgControl, { optional: true, self: true });\n\n private onChangeCallback: (_: unknown) => void = noop;\n private _required = false;\n private _disabled = false;\n\n public readonly displayDetails = input(true);\n\n @ViewChild('fileInput', { static: true }) fileInput: ElementRef | undefined;\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 @HostBinding('id') public id = `file-picker-${NgssmFilePickerComponent.nextId++}`;\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 public get empty(): boolean {\n return this.value === null;\n }\n\n public get shouldLabelFloat(): boolean {\n return this.value !== null;\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 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';\nimport { CommonModule } from '@angular/common';\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: [CommonModule, 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';\nimport { CommonModule } from '@angular/common';\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: [CommonModule, 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';\nimport { CommonModule } from '@angular/common';\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: [CommonModule, 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 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 public readonly processedActions: string[] = [];\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","i2"],"mappings":"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"}
package/index.d.ts CHANGED
@@ -1,23 +1,24 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { TemplateRef, OnDestroy, ElementRef, Provider, PipeTransform, Type, InjectionToken, EnvironmentProviders } from '@angular/core';
3
3
  import { ComponentType } from '@angular/cdk/portal';
4
- import { Observable, Subject } from 'rxjs';
5
4
  import { ComponentType as ComponentType$1, OverlayContainer } from '@angular/cdk/overlay';
6
5
  import { FormControl, ControlValueAccessor, NgControl } from '@angular/forms';
7
6
  import { ErrorStateMatcher } from '@angular/material/core';
8
7
  import { MatFormFieldControl } from '@angular/material/form-field';
8
+ import { Subject, Observable } from 'rxjs';
9
9
  import { DateTime } from 'luxon';
10
10
  import { MatDialogConfig } from '@angular/material/dialog';
11
11
  import { State } from 'ngssm-store';
12
12
 
13
13
  declare class NgssmComponentOverlayDirective {
14
+ readonly overlayTemplate: i0.InputSignal<TemplateRef<unknown> | null | undefined>;
15
+ readonly overlayComponent: i0.InputSignal<ComponentType<unknown> | null | undefined>;
16
+ readonly overlayMessage: i0.InputSignal<string | null | undefined>;
17
+ readonly ngssmDisplayOverlay: i0.InputSignal<boolean>;
14
18
  private overlayBuilder;
15
- set overLayTemplate(value: TemplateRef<unknown> | undefined | null);
16
- set overlayComponent(value: ComponentType<unknown> | undefined | null);
17
- set overlayMessage(value: string);
18
- set displayOverlay(value: boolean);
19
+ constructor();
19
20
  static ɵfac: i0.ɵɵFactoryDeclaration<NgssmComponentOverlayDirective, never>;
20
- static ɵdir: i0.ɵɵDirectiveDeclaration<NgssmComponentOverlayDirective, "[ngssmDisplayOverlay]", never, { "overLayTemplate": { "alias": "overlayTemplate"; "required": false; }; "overlayComponent": { "alias": "overlayComponent"; "required": false; }; "overlayMessage": { "alias": "overlayMessage"; "required": false; }; "displayOverlay": { "alias": "ngssmDisplayOverlay"; "required": false; }; }, {}, never, never, true, never>;
21
+ static ɵdir: i0.ɵɵDirectiveDeclaration<NgssmComponentOverlayDirective, "[ngssmDisplayOverlay]", never, { "overlayTemplate": { "alias": "overlayTemplate"; "required": false; "isSignal": true; }; "overlayComponent": { "alias": "overlayComponent"; "required": false; "isSignal": true; }; "overlayMessage": { "alias": "overlayMessage"; "required": false; "isSignal": true; }; "ngssmDisplayOverlay": { "alias": "ngssmDisplayOverlay"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
21
22
  }
22
23
 
23
24
  declare class NgssmEmptyOverlayComponent {
@@ -26,13 +27,16 @@ declare class NgssmEmptyOverlayComponent {
26
27
  }
27
28
 
28
29
  declare class NgssmMessageOverlayComponent {
29
- message$: Observable<string>;
30
+ message: i0.WritableSignal<string>;
30
31
  static ɵfac: i0.ɵɵFactoryDeclaration<NgssmMessageOverlayComponent, never>;
31
32
  static ɵcmp: i0.ɵɵComponentDeclaration<NgssmMessageOverlayComponent, "ngssm-message-overlay", never, {}, {}, never, never, true, never>;
32
33
  }
33
34
 
34
35
  declare class NgssmOverlayBuilder implements OnDestroy {
35
36
  private static nextId;
37
+ readonly overlayMessage: i0.WritableSignal<string>;
38
+ overlayTemplate: TemplateRef<unknown> | undefined;
39
+ overlayComponent: ComponentType$1<unknown> | undefined;
36
40
  private readonly logger;
37
41
  private readonly injector;
38
42
  private readonly elementRef;
@@ -40,14 +44,10 @@ declare class NgssmOverlayBuilder implements OnDestroy {
40
44
  private readonly viewContainerRef;
41
45
  private readonly renderer;
42
46
  private readonly overlayInjector?;
43
- private readonly _overlayMessage$;
44
47
  private id;
45
48
  private overlayRef;
46
- overLayTemplate: TemplateRef<unknown> | undefined;
47
- overlayComponent: ComponentType$1<unknown> | undefined;
48
49
  constructor();
49
50
  ngOnDestroy(): void;
50
- set overlayMessage(value: string);
51
51
  showOverlay(): void;
52
52
  hideOverlay(): void;
53
53
  static ɵfac: i0.ɵɵFactoryDeclaration<NgssmOverlayBuilder, never>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngssm-toolkit",
3
- "version": "20.3.8",
3
+ "version": "20.3.9",
4
4
  "description": "NgSsm - Utilities for angular applications.",
5
5
  "author": "Lion Marc",
6
6
  "license": "MIT",