@flywheel-io/vision 0.3.0 → 0.4.2

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.
Files changed (40) hide show
  1. package/bundles/flywheel-io-vision.umd.js +419 -22
  2. package/bundles/flywheel-io-vision.umd.js.map +1 -1
  3. package/bundles/flywheel-io-vision.umd.min.js +1 -1
  4. package/bundles/flywheel-io-vision.umd.min.js.map +1 -1
  5. package/components/dialog/choice-dialog.component.d.ts +24 -0
  6. package/components/dialog/confirm-dialog.component.d.ts +12 -0
  7. package/components/dialog/dialog.module.d.ts +2 -0
  8. package/components/dialog/dialog.service.d.ts +19 -0
  9. package/components/dialog/error-dialog.component.d.ts +10 -0
  10. package/components/dialog/portal-dialog.component.d.ts +25 -0
  11. package/components/notification/notification-container/notification-container.component.d.ts +2 -2
  12. package/components/shared/pipes/pipes.module.d.ts +4 -0
  13. package/components/shared/pipes/translate.pipe.d.ts +15 -0
  14. package/components/shared/pipes/trusthtml.pipe.d.ts +7 -0
  15. package/components/shared/translation.service.d.ts +11 -0
  16. package/esm2015/components/dialog/choice-dialog.component.js +52 -0
  17. package/esm2015/components/dialog/confirm-dialog.component.js +40 -0
  18. package/esm2015/components/dialog/dialog.module.js +45 -0
  19. package/esm2015/components/dialog/dialog.service.js +69 -0
  20. package/esm2015/components/dialog/error-dialog.component.js +32 -0
  21. package/esm2015/components/dialog/portal-dialog.component.js +88 -0
  22. package/esm2015/components/notification/notification/notification.component.js +3 -3
  23. package/esm2015/components/notification/notification-container/notification-container.component.js +17 -16
  24. package/esm2015/components/popover/popover.component.js +1 -1
  25. package/esm2015/components/shared/pipes/pipes.module.js +24 -0
  26. package/esm2015/components/shared/pipes/translate.pipe.js +40 -0
  27. package/esm2015/components/shared/pipes/trusthtml.pipe.js +20 -0
  28. package/esm2015/components/shared/translation.service.js +22 -0
  29. package/esm2015/flywheel-io-vision.js +5 -2
  30. package/esm2015/public-api.js +8 -1
  31. package/fesm2015/flywheel-io-vision.js +420 -23
  32. package/fesm2015/flywheel-io-vision.js.map +1 -1
  33. package/flywheel-io-vision.d.ts +4 -1
  34. package/flywheel-io-vision.metadata.json +1 -1
  35. package/package.json +2 -2
  36. package/public-api.d.ts +7 -0
  37. package/scss/config/colors.scss +5 -2
  38. package/scss/material/overrides.scss +8 -20
  39. package/styles.css +104 -109
  40. package/styles.scss +0 -3
@@ -1,15 +1,17 @@
1
- import { Component, ViewEncapsulation, Input, NgModule, ɵɵdefineInjectable, Injectable, ChangeDetectionStrategy, ChangeDetectorRef, EventEmitter, Output, HostBinding, Directive, ElementRef, ViewContainerRef, ViewChild, TemplateRef } from '@angular/core';
1
+ import { Component, ViewEncapsulation, Input, NgModule, Inject, Injectable, SimpleChange, ViewContainerRef, Pipe, ChangeDetectorRef, ɵɵdefineInjectable, ChangeDetectionStrategy, EventEmitter, Output, HostBinding, Directive, ElementRef, ViewChild, TemplateRef } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { MatButtonModule } from '@angular/material/button';
4
- import { BehaviorSubject, Subscription } from 'rxjs';
4
+ import { MAT_DIALOG_DATA, MatDialog, MatDialogRef, MatDialogModule, MAT_DIALOG_DEFAULT_OPTIONS } from '@angular/material/dialog';
5
+ import { ComponentPortal, TemplatePortal, PortalModule } from '@angular/cdk/portal';
5
6
  import { MatIconModule } from '@angular/material/icon';
7
+ import { Subject, of, BehaviorSubject, Subscription } from 'rxjs';
8
+ import { takeUntil, debounceTime } from 'rxjs/operators';
9
+ import { DomSanitizer } from '@angular/platform-browser';
6
10
  import { Overlay } from '@angular/cdk/overlay';
7
- import { TemplatePortal } from '@angular/cdk/portal';
8
11
  import { FormGroup, FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';
9
12
  import { MatPaginator, MatPaginatorModule } from '@angular/material/paginator';
10
13
  import { MatSort, MatSortModule } from '@angular/material/sort';
11
14
  import { MatTableDataSource, MatTableModule } from '@angular/material/table';
12
- import { debounceTime } from 'rxjs/operators';
13
15
  import { MatInputModule } from '@angular/material/input';
14
16
  import { MatSelectModule } from '@angular/material/select';
15
17
 
@@ -103,6 +105,400 @@ FwButtonModule.decorators = [
103
105
  },] }
104
106
  ];
105
107
 
108
+ class FwChoiceDialog {
109
+ constructor(data) {
110
+ this.data = data;
111
+ this.alignActions = this.data.alignActions
112
+ ? this.data.alignActions === 'start'
113
+ ? null
114
+ : this.data.alignActions
115
+ : 'center';
116
+ this.choices = this.data.choices;
117
+ this.content = this.data.content;
118
+ this.title = this.data.title;
119
+ }
120
+ getTestId(choice) {
121
+ var _a;
122
+ return choice.testId || `${String((_a = choice.label) !== null && _a !== void 0 ? _a : choice.value).toLowerCase()}-button`;
123
+ }
124
+ }
125
+ FwChoiceDialog.decorators = [
126
+ { type: Component, args: [{
127
+ host: {
128
+ class: 'mat-dialog-component',
129
+ 'test-id': 'choice-dialog',
130
+ },
131
+ selector: 'fw-choice-dialog',
132
+ template: `
133
+ <h1 mat-dialog-title *ngIf="title">{{ title }}</h1>
134
+ <div mat-dialog-content>{{ content }}</div>
135
+ <div mat-dialog-actions [align]="alignActions">
136
+ <ng-container *ngFor="let choice of choices" [ngSwitch]="choice.variant">
137
+ <button *ngSwitchCase="'raised'" mat-raised-button [color]="choice.color" [attr.test-id]="getTestId(choice)"
138
+ [mat-dialog-close]="choice.value">{{ choice.label }}</button>
139
+ <button *ngSwitchCase="'stroked'" mat-stroked-button [color]="choice.color" [attr.test-id]="getTestId(choice)"
140
+ [mat-dialog-close]="choice.value">{{ choice.label }}</button>
141
+ <button *ngSwitchCase="'flat'" mat-flat-button [color]="choice.color" [attr.test-id]="getTestId(choice)"
142
+ [mat-dialog-close]="choice.value">{{ choice.label }}</button>
143
+ <ng-container *ngSwitchDefault>
144
+ <button *ngIf="choice.color" mat-flat-button [color]="choice.color" [attr.test-id]="getTestId(choice)"
145
+ [mat-dialog-close]="choice.value">{{ choice.label }}</button>
146
+ <button *ngIf="!choice.color" mat-stroked-button [attr.test-id]="getTestId(choice)"
147
+ [mat-dialog-close]="choice.value">{{ choice.label }}</button>
148
+ </ng-container>
149
+ </ng-container>
150
+ </div>
151
+ `
152
+ },] }
153
+ ];
154
+ FwChoiceDialog.ctorParameters = () => [
155
+ { type: undefined, decorators: [{ type: Inject, args: [MAT_DIALOG_DATA,] }] }
156
+ ];
157
+
158
+ class FwConfirmDialog {
159
+ constructor(data) {
160
+ this.data = data;
161
+ this.title = this.data.title;
162
+ this.content = this.data.content;
163
+ this.html = this.data.html;
164
+ }
165
+ }
166
+ FwConfirmDialog.decorators = [
167
+ { type: Component, args: [{
168
+ host: {
169
+ class: 'mat-dialog-component',
170
+ 'test-id': 'confirm-dialog',
171
+ },
172
+ selector: 'fw-confirm-dialog',
173
+ template: `
174
+ <h1 mat-dialog-title *ngIf="title">{{ title }}</h1>
175
+ <div mat-dialog-content *ngIf="html" class="markup" [innerHTML]="html | trusthtml"></div>
176
+ <div mat-dialog-content *ngIf="!html">{{ content || ('confirmDialog.body' | translate ) }}</div>
177
+ <div mat-dialog-actions align="center">
178
+ <button test-id="no-button" mat-stroked-button [mat-dialog-close]="false">{{ 'confirmDialog.no' | translate }}</button>
179
+ <button test-id="yes-button" mat-flat-button color="primary" [mat-dialog-close]="true">{{ 'confirmDialog.yes' | translate }}</button>
180
+ </div>
181
+ `,
182
+ styles: [`
183
+ [mat-dialog-content] {
184
+ text-align: center;
185
+ }
186
+ [mat-dialog-content].markup {
187
+ text-align: inherit;
188
+ }
189
+ `]
190
+ },] }
191
+ ];
192
+ FwConfirmDialog.ctorParameters = () => [
193
+ { type: undefined, decorators: [{ type: Inject, args: [MAT_DIALOG_DATA,] }] }
194
+ ];
195
+
196
+ class FwDialogService {
197
+ constructor(matDialog) {
198
+ this.matDialog = matDialog;
199
+ this.dialogs = [];
200
+ this.config = new Map();
201
+ }
202
+ closeAll(component) {
203
+ if (component) {
204
+ this.dialogs
205
+ .filter((el) => el.component === component)
206
+ .forEach((el) => el.ref.close());
207
+ }
208
+ else {
209
+ this.matDialog.closeAll();
210
+ }
211
+ }
212
+ open(component, config) {
213
+ const index = this.dialogs.findIndex(el => el.component === component);
214
+ let ref = null;
215
+ const baseConfig = Object.assign({ multi: 'allow' }, this.config.get(component));
216
+ switch (baseConfig.multi) {
217
+ case 'ignore':
218
+ // if an existing dialog of the same type doesn't exist, open one
219
+ if (index === -1) {
220
+ ref = this.matDialog.open(component, Object.assign(Object.assign({}, baseConfig), config));
221
+ this.dialogs.push({ component, ref });
222
+ }
223
+ break;
224
+ case 'replace':
225
+ // if an existing dialog of the same type exists, replace it.
226
+ if (index > -1) {
227
+ this.dialogs[index].ref.close();
228
+ ref = this.matDialog.open(component, Object.assign(Object.assign({}, baseConfig), config));
229
+ this.dialogs.splice(index, 1, { component, ref });
230
+ }
231
+ else {
232
+ ref = this.matDialog.open(component, Object.assign(Object.assign({}, baseConfig), config));
233
+ this.dialogs.push({ component, ref });
234
+ }
235
+ break;
236
+ default:
237
+ ref = this.matDialog.open(component, Object.assign(Object.assign({}, baseConfig), config));
238
+ this.dialogs.push({ component, ref });
239
+ break;
240
+ }
241
+ if (ref) {
242
+ ref.afterClosed().subscribe(() => {
243
+ // clean up open dialog reference
244
+ const index = this.dialogs.findIndex(el => el.ref === ref);
245
+ if (index >= 0) {
246
+ this.dialogs.splice(index, 1);
247
+ }
248
+ });
249
+ }
250
+ return ref;
251
+ }
252
+ registerDialog(component, config) {
253
+ this.config.set(component, config);
254
+ }
255
+ }
256
+ FwDialogService.decorators = [
257
+ { type: Injectable }
258
+ ];
259
+ FwDialogService.ctorParameters = () => [
260
+ { type: MatDialog }
261
+ ];
262
+
263
+ class FwErrorDialog {
264
+ constructor(data, ref) {
265
+ this.data = data;
266
+ this.ref = ref;
267
+ this.message = this.data.message;
268
+ this.ref.disableClose = false;
269
+ }
270
+ }
271
+ FwErrorDialog.decorators = [
272
+ { type: Component, args: [{
273
+ host: {
274
+ class: 'mat-dialog-component',
275
+ 'test-id': 'error-dialog',
276
+ },
277
+ selector: 'fw-error-dialog',
278
+ template: `
279
+ <div mat-dialog-content>{{ message }}</div>
280
+ <div mat-dialog-actions align="end">
281
+ <button test-id="close-button" mat-stroked-button mat-dialog-close>
282
+ {{ 'common.actions.close' | translate }}
283
+ </button>
284
+ </div>
285
+ `
286
+ },] }
287
+ ];
288
+ FwErrorDialog.ctorParameters = () => [
289
+ { type: undefined, decorators: [{ type: Inject, args: [MAT_DIALOG_DATA,] }] },
290
+ { type: MatDialogRef }
291
+ ];
292
+
293
+ class FwPortalDialog {
294
+ constructor(data, viewContainerRef) {
295
+ this.data = data;
296
+ this.viewContainerRef = viewContainerRef;
297
+ this.content = this.data.content;
298
+ this.title = this.data.title;
299
+ this.destroyed$ = new Subject();
300
+ if (this.data.component) {
301
+ this.portal = new ComponentPortal(this.data.component.type, this.viewContainerRef);
302
+ }
303
+ else if (this.data.template) {
304
+ this.portal = new TemplatePortal(this.data.template, this.viewContainerRef);
305
+ }
306
+ else {
307
+ throw new Error('One of [component, template] was not provided.');
308
+ }
309
+ }
310
+ ngOnDestroy() {
311
+ this.destroyed$.next();
312
+ }
313
+ attached(ref) {
314
+ var _a, _b;
315
+ if (this.data.component) {
316
+ ref = ref;
317
+ if (this.data.component.outputs) {
318
+ for (const [key, observer] of Object.entries(this.data.component.outputs)) {
319
+ const output$ = ref[key];
320
+ if (typeof (output$ === null || output$ === void 0 ? void 0 : output$.pipe) === 'function' && typeof output$.subscribe === 'function') {
321
+ output$.pipe(takeUntil(this.destroyed$)).subscribe(observer);
322
+ }
323
+ }
324
+ }
325
+ if (this.data.component.inputs) {
326
+ const changes = {};
327
+ for (const [key, value] of Object.entries(this.data.component.inputs)) {
328
+ ref.instance[key] = value;
329
+ changes[key] = new SimpleChange(value, value, true);
330
+ }
331
+ (_b = (_a = ref.instance).ngOnChanges) === null || _b === void 0 ? void 0 : _b.call(_a, changes);
332
+ ref.changeDetectorRef.markForCheck();
333
+ }
334
+ }
335
+ }
336
+ }
337
+ FwPortalDialog.decorators = [
338
+ { type: Component, args: [{
339
+ host: {
340
+ class: 'mat-dialog-component',
341
+ 'test-id': 'portal-dialog',
342
+ },
343
+ selector: 'fw-portal-dialog',
344
+ template: `
345
+ <ng-container *ngIf="title">
346
+ <h1 mat-dialog-title>{{ title }}</h1>
347
+ <button test-id="dialog-close-corner" mat-icon-button mat-dialog-close>
348
+ <mat-icon>close</mat-icon>
349
+ </button>
350
+ </ng-container>
351
+ <mat-dialog-content>
352
+ <p *ngIf="content" class="content">{{ content }}</p>
353
+ <ng-template [cdkPortalOutlet]="portal" (attached)="attached($event)"></ng-template>
354
+ </mat-dialog-content>
355
+ <mat-dialog-actions align="end">
356
+ <button test-id="dialog-close-button" mat-stroked-button mat-dialog-close>
357
+ {{ 'common.actions.close' | translate }}
358
+ </button>
359
+ </mat-dialog-actions>
360
+ `,
361
+ styles: [`
362
+ :host {
363
+ min-width: 200px;
364
+ }
365
+ .content {
366
+ margin-bottom: 30px;
367
+ }
368
+ `]
369
+ },] }
370
+ ];
371
+ FwPortalDialog.ctorParameters = () => [
372
+ { type: undefined, decorators: [{ type: Inject, args: [MAT_DIALOG_DATA,] }] },
373
+ { type: ViewContainerRef }
374
+ ];
375
+
376
+ class TranslationService {
377
+ }
378
+ /**
379
+ * Very basic i18n implementation. Consumer apps can provide their own implementation of TranslationService to override.
380
+ */
381
+ class MinimalTranslationService {
382
+ getMessage(key, silent) {
383
+ return of(MinimalTranslationService.messages[key]);
384
+ }
385
+ }
386
+ MinimalTranslationService.messages = {
387
+ 'common.actions.close': 'Close',
388
+ 'confirmDialog.body': 'Are you sure?',
389
+ 'confirmDialog.no': 'No',
390
+ 'confirmDialog.yes': 'Yes',
391
+ };
392
+ MinimalTranslationService.decorators = [
393
+ { type: Injectable }
394
+ ];
395
+
396
+ /**
397
+ * Translate a message given a nested key to a location in the loaded locale copy.
398
+ */
399
+ class TranslatePipe {
400
+ constructor(cdr, translationService) {
401
+ this.cdr = cdr;
402
+ this.translationService = translationService;
403
+ this.subscriptions = {};
404
+ this.messages = {};
405
+ }
406
+ ngOnDestroy() {
407
+ for (const subscription of Object.values(this.subscriptions)) {
408
+ subscription.unsubscribe();
409
+ }
410
+ }
411
+ transform(key, silent = false) {
412
+ if (!(key in this.subscriptions)) {
413
+ this.subscriptions[key] = this.translationService.getMessage(key, silent).subscribe(message => {
414
+ this.messages[key] = message;
415
+ // trigger change detection to support components with ChangeDetectionStrategy.OnPush
416
+ this.cdr.markForCheck();
417
+ });
418
+ }
419
+ return this.messages[key] || '';
420
+ }
421
+ }
422
+ TranslatePipe.decorators = [
423
+ { type: Pipe, args: [{
424
+ name: 'translate',
425
+ pure: false,
426
+ },] }
427
+ ];
428
+ TranslatePipe.ctorParameters = () => [
429
+ { type: ChangeDetectorRef },
430
+ { type: TranslationService }
431
+ ];
432
+
433
+ class TrustHtmlPipe {
434
+ constructor(sanitizer) {
435
+ this.sanitizer = sanitizer;
436
+ }
437
+ transform(html) {
438
+ return this.sanitizer.bypassSecurityTrustHtml(html);
439
+ }
440
+ }
441
+ TrustHtmlPipe.decorators = [
442
+ { type: Pipe, args: [{
443
+ name: 'trusthtml',
444
+ pure: true,
445
+ },] }
446
+ ];
447
+ TrustHtmlPipe.ctorParameters = () => [
448
+ { type: DomSanitizer }
449
+ ];
450
+
451
+ const exports = [
452
+ TranslatePipe,
453
+ TrustHtmlPipe,
454
+ ];
455
+ class PipesModule {
456
+ }
457
+ PipesModule.decorators = [
458
+ { type: NgModule, args: [{
459
+ declarations: exports,
460
+ exports: exports,
461
+ providers: [
462
+ {
463
+ provide: TranslationService,
464
+ useClass: MinimalTranslationService,
465
+ },
466
+ ],
467
+ },] }
468
+ ];
469
+
470
+ const ɵ0 = {
471
+ disableClose: true,
472
+ hasBackdrop: true,
473
+ };
474
+ class FwDialogModule {
475
+ }
476
+ FwDialogModule.decorators = [
477
+ { type: NgModule, args: [{
478
+ declarations: [
479
+ FwChoiceDialog,
480
+ FwConfirmDialog,
481
+ FwErrorDialog,
482
+ FwPortalDialog,
483
+ ],
484
+ imports: [
485
+ CommonModule,
486
+ MatButtonModule,
487
+ MatDialogModule,
488
+ MatIconModule,
489
+ PipesModule,
490
+ PortalModule,
491
+ ],
492
+ providers: [
493
+ FwDialogService,
494
+ {
495
+ provide: MAT_DIALOG_DEFAULT_OPTIONS,
496
+ useValue: ɵ0
497
+ }
498
+ ],
499
+ },] }
500
+ ];
501
+
106
502
  function genId() {
107
503
  return String.prototype.padStart(24, Math.floor(Math.random() * Date.now()).toString(16));
108
504
  }
@@ -140,15 +536,15 @@ class FwNotificationContainerComponent {
140
536
  this.notificationService = notificationService;
141
537
  this.limit = 3;
142
538
  this.notifications = [];
143
- this.showMore = false;
144
- this.showLess = false;
539
+ this.expanded = false;
145
540
  this.subscriptions = {
146
- notifications: Subscription.EMPTY
541
+ notifications: Subscription.EMPTY,
147
542
  };
148
543
  this.subscriptions.notifications = this.notificationService.notifications$.subscribe((notifications) => {
149
544
  this.notifications = notifications;
150
- this.showMore = this.notifications.length > 1;
151
- this.showLess = false;
545
+ if (notifications.length === 0) {
546
+ this.expanded = false;
547
+ }
152
548
  this.cdr.markForCheck();
153
549
  });
154
550
  }
@@ -162,7 +558,7 @@ class FwNotificationContainerComponent {
162
558
  const level = this.notifications.length > this.limit
163
559
  ? index - (this.notifications.length - this.limit)
164
560
  : index;
165
- if (this.showLess) {
561
+ if (this.expanded) {
166
562
  cssClass = 'default';
167
563
  }
168
564
  else {
@@ -170,33 +566,34 @@ class FwNotificationContainerComponent {
170
566
  }
171
567
  return cssClass;
172
568
  }
569
+ getEmptyNotification(notification) {
570
+ return Object.assign(Object.assign({}, notification), { message: ' ' }); // take up a line but show no content
571
+ }
173
572
  onReady(notification) {
174
573
  const currentNotification = this.notifications[this.notifications.length - 1];
175
574
  currentNotification.ref = notification;
176
575
  notification.startTimer();
177
576
  }
178
577
  onDismiss(notificationId) {
179
- const notification = this.notifications.find((currentNotification) => currentNotification.id === notificationId);
578
+ const notification = this.notifications.find(currentNotification => currentNotification.id === notificationId);
180
579
  if (notification === null || notification === void 0 ? void 0 : notification.ref) {
181
580
  notification.ref.stopTimer();
182
581
  }
183
- this.notificationService.dismiss(notification.id);
582
+ if (notification === null || notification === void 0 ? void 0 : notification.id) {
583
+ this.notificationService.dismiss(notification.id);
584
+ }
184
585
  this.cdr.markForCheck();
185
586
  }
186
587
  clearAll() {
187
- this.showMore = false;
188
- this.showLess = false;
189
588
  this.notificationService.dismissAll();
190
589
  this.cdr.markForCheck();
191
590
  }
192
591
  onShowMore() {
193
- this.showLess = true;
194
- this.showMore = false;
592
+ this.expanded = true;
195
593
  this.cdr.markForCheck();
196
594
  }
197
595
  onShowLess() {
198
- this.showMore = true;
199
- this.showLess = false;
596
+ this.expanded = false;
200
597
  this.cdr.markForCheck();
201
598
  }
202
599
  }
@@ -208,7 +605,7 @@ FwNotificationContainerComponent.decorators = [
208
605
  '[class.triple]': 'notifications.length >= 3',
209
606
  },
210
607
  selector: 'fw-notification-container',
211
- template: "<div role=\"list\">\n <fw-notification *ngFor=\"let notification of notifications; index as i\"\n (ready)=\"onReady($event)\"\n (dismiss)=\"onDismiss($event)\"\n [class]=\"notificationClass(i)\"\n [notification]=\"notification\"\n [attr.aria-label]=\"notification.type + ' : ' + notification.message\"\n role=\"listitem\"\n ></fw-notification>\n <div class=\"buttons\">\n <fw-button *ngIf=\"showLess\" (click)=\"onShowLess()\" mat-button aria-label=\"show less\" layout=\"compact\" size=\"small\">\n <mat-icon>expand_less</mat-icon>\n </fw-button>\n <fw-button *ngIf=\"showMore\" (click)=\"onShowMore()\" mat-button aria-label=\"show more\" layout=\"compact\" size=\"small\">\n <mat-icon>expand_more</mat-icon>\n </fw-button>\n <fw-button (click)=\"clearAll()\" mat-button class=\"clear-all\" aria-label=\"clear all\" layout=\"compact\" size=\"small\">\n Clear All\n </fw-button>\n </div>\n</div>\n",
608
+ template: "<div role=\"list\">\n <fw-notification *ngFor=\"let notification of notifications; index as $index\"\n (ready)=\"onReady($event)\"\n (dismiss)=\"onDismiss($event)\"\n [class]=\"notificationClass($index)\"\n [notification]=\"expanded || $index === notifications.length - 1 ? notification : getEmptyNotification(notification)\"\n [attr.aria-label]=\"notification.type + ' : ' + notification.message\"\n role=\"listitem\"\n ></fw-notification>\n <div class=\"buttons\">\n <fw-button *ngIf=\"expanded\" (click)=\"onShowLess()\" mat-button aria-label=\"show less\" layout=\"compact\" size=\"small\">\n <mat-icon>expand_less</mat-icon>\n </fw-button>\n <fw-button *ngIf=\"!expanded && notifications.length > 1\" (click)=\"onShowMore()\" mat-button aria-label=\"show more\" layout=\"compact\" size=\"small\">\n <mat-icon>expand_more</mat-icon>\n </fw-button>\n <fw-button (click)=\"clearAll()\" mat-button class=\"clear-all\" aria-label=\"clear all\" layout=\"compact\" size=\"small\">\n Clear All\n </fw-button>\n </div>\n</div>\n",
212
609
  encapsulation: ViewEncapsulation.None,
213
610
  changeDetection: ChangeDetectionStrategy.OnPush,
214
611
  styles: ["fw-notification-container{position:absolute;right:0;top:0;margin-top:20px;z-index:999999}fw-notification-container>div{display:flex;flex-direction:column-reverse}fw-notification-container .buttons{display:none;position:absolute;top:-5px;right:25px}fw-notification-container .buttons button{color:#fff;background-color:#919292;margin-left:2px}fw-notification-container .buttons button.mat-button{line-height:24px!important;margin:0 0 0 2px!important}fw-notification-container:hover .buttons{display:flex}fw-notification-container .hidden{display:none}fw-notification-container fw-notification:last-of-type{margin-top:24px}fw-notification-container.duo fw-notification.level-0,fw-notification-container.triple fw-notification.level-1{transform:scale(.95) translateY(-51px)}fw-notification-container.triple fw-notification.level-0{transform:scale(.9) translateY(-108px)}"]
@@ -308,11 +705,11 @@ FwNotificationComponent.decorators = [
308
705
  '(click)': 'onClickDismiss()'
309
706
  },
310
707
  selector: 'fw-notification',
311
- template: `<ng-container>{{ notification?.message }}</ng-container>`,
708
+ template: `{{ notification?.message }}`,
312
709
  providers: [FwNotificationTimerService],
313
710
  encapsulation: ViewEncapsulation.None,
314
711
  changeDetection: ChangeDetectionStrategy.OnPush,
315
- styles: ["fw-notification{display:block;border-radius:4px;box-sizing:border-box;margin:5px 24px;max-width:33vw;min-width:344px;padding:14px 16px;height:48px;transform-origin:center;background-color:#2f96b4;border:1px solid hsla(0,0%,100%,.7019607843137254);box-shadow:0 0 12px #999;color:#fff;opacity:.99}fw-notification .notification{display:flex;justify-content:space-between;align-items:center}fw-notification.error{background-color:#bd362f}fw-notification.info{background-color:#2f96b4}fw-notification.success{background-color:#51a351}fw-notification.wait{background-color:#2f96b4}fw-notification.warning{background-color:#f89406}"]
712
+ styles: ["fw-notification{display:block;border-radius:4px;box-sizing:border-box;margin:5px 24px;max-width:33vw;min-width:344px;padding:14px 16px;transform-origin:center;background-color:#2f96b4;border:1px solid hsla(0,0%,100%,.7019607843);box-shadow:0 0 12px #999;color:#fff;opacity:.99;white-space:pre-wrap}fw-notification.error{background-color:#bd362f}fw-notification.info{background-color:#2f96b4}fw-notification.success{background-color:#51a351}fw-notification.wait{background-color:#2f96b4}fw-notification.warning{background-color:#f89406}"]
316
713
  },] }
317
714
  ];
318
715
  FwNotificationComponent.ctorParameters = () => [
@@ -544,7 +941,7 @@ FwPopoverComponent.decorators = [
544
941
  </div>
545
942
  </ng-template>`,
546
943
  encapsulation: ViewEncapsulation.None,
547
- styles: [".white{color:#fff!important}.fill-white{background-color:#fff!important}.border-top-white,.border-white{border-color:#fff!important}.border-top-white{border-top:1px solid}.border-right-white{border-right:1px solid;border-color:#fff!important}.border-bottom-white{border-bottom:1px solid;border-color:#fff!important}.border-left-white{border-left:1px solid;border-color:#fff!important}.black{color:#000!important}.fill-black{background-color:#000!important}.border-black,.border-top-black{border-color:#000!important}.border-top-black{border-top:1px solid}.border-right-black{border-right:1px solid;border-color:#000!important}.border-bottom-black{border-bottom:1px solid;border-color:#000!important}.border-left-black{border-left:1px solid;border-color:#000!important}.green{color:#59b96b!important}.fill-green{background-color:#59b96b!important}.border-green,.border-top-green{border-color:#59b96b!important}.border-top-green{border-top:1px solid}.border-right-green{border-right:1px solid;border-color:#59b96b!important}.border-bottom-green{border-bottom:1px solid;border-color:#59b96b!important}.border-left-green{border-left:1px solid;border-color:#59b96b!important}.orange{color:#f7941d!important}.fill-orange{background-color:#f7941d!important}.border-orange,.border-top-orange{border-color:#f7941d!important}.border-top-orange{border-top:1px solid}.border-right-orange{border-right:1px solid;border-color:#f7941d!important}.border-bottom-orange{border-bottom:1px solid;border-color:#f7941d!important}.border-left-orange{border-left:1px solid;border-color:#f7941d!important}.red{color:#d22239!important}.fill-red{background-color:#d22239!important}.border-red,.border-top-red{border-color:#d22239!important}.border-top-red{border-top:1px solid}.border-right-red{border-right:1px solid;border-color:#d22239!important}.border-bottom-red{border-bottom:1px solid;border-color:#d22239!important}.border-left-red{border-left:1px solid;border-color:#d22239!important}.blue{color:#5871a2!important}.fill-blue{background-color:#5871a2!important}.border-blue,.border-top-blue{border-color:#5871a2!important}.border-top-blue{border-top:1px solid}.border-right-blue{border-right:1px solid;border-color:#5871a2!important}.border-bottom-blue{border-bottom:1px solid;border-color:#5871a2!important}.border-left-blue{border-left:1px solid;border-color:#5871a2!important}.focus-blue{color:#23527c!important}.fill-focus-blue{background-color:#23527c!important}.border-focus-blue,.border-top-focus-blue{border-color:#23527c!important}.border-top-focus-blue{border-top:1px solid}.border-right-focus-blue{border-right:1px solid;border-color:#23527c!important}.border-bottom-focus-blue{border-bottom:1px solid;border-color:#23527c!important}.border-left-focus-blue{border-left:1px solid;border-color:#23527c!important}.dark-blue{color:#394256!important}.fill-dark-blue{background-color:#394256!important}.border-dark-blue,.border-top-dark-blue{border-color:#394256!important}.border-top-dark-blue{border-top:1px solid}.border-right-dark-blue{border-right:1px solid;border-color:#394256!important}.border-bottom-dark-blue{border-bottom:1px solid;border-color:#394256!important}.border-left-dark-blue{border-left:1px solid;border-color:#394256!important}.light-blue{color:#e7f0fc!important}.fill-light-blue{background-color:#e7f0fc!important}.border-light-blue,.border-top-light-blue{border-color:#e7f0fc!important}.border-top-light-blue{border-top:1px solid}.border-right-light-blue{border-right:1px solid;border-color:#e7f0fc!important}.border-bottom-light-blue{border-bottom:1px solid;border-color:#e7f0fc!important}.border-left-light-blue{border-left:1px solid;border-color:#e7f0fc!important}.bright-blue{color:#1b68fa!important}.fill-bright-blue{background-color:#1b68fa!important}.border-bright-blue,.border-top-bright-blue{border-color:#1b68fa!important}.border-top-bright-blue{border-top:1px solid}.border-right-bright-blue{border-right:1px solid;border-color:#1b68fa!important}.border-bottom-bright-blue{border-bottom:1px solid;border-color:#1b68fa!important}.border-left-bright-blue{border-left:1px solid;border-color:#1b68fa!important}.admin-black{color:#01010a!important}.fill-admin-black{background-color:#01010a!important}.border-admin-black,.border-top-admin-black{border-color:#01010a!important}.border-top-admin-black{border-top:1px solid}.border-right-admin-black{border-right:1px solid;border-color:#01010a!important}.border-bottom-admin-black{border-bottom:1px solid;border-color:#01010a!important}.border-left-admin-black{border-left:1px solid;border-color:#01010a!important}.accent-purple{color:#b080fc!important}.fill-accent-purple{background-color:#b080fc!important}.border-accent-purple,.border-top-accent-purple{border-color:#b080fc!important}.border-top-accent-purple{border-top:1px solid}.border-right-accent-purple{border-right:1px solid;border-color:#b080fc!important}.border-bottom-accent-purple{border-bottom:1px solid;border-color:#b080fc!important}.border-left-accent-purple{border-left:1px solid;border-color:#b080fc!important}.grey{color:#58595b!important}.fill-grey{background-color:#58595b!important}.border-grey,.border-top-grey{border-color:#58595b!important}.border-top-grey{border-top:1px solid}.border-right-grey{border-right:1px solid;border-color:#58595b!important}.border-bottom-grey{border-bottom:1px solid;border-color:#58595b!important}.border-left-grey{border-left:1px solid;border-color:#58595b!important}.soft-grey{color:#dddede!important}.fill-soft-grey{background-color:#dddede!important}.border-soft-grey,.border-top-soft-grey{border-color:#dddede!important}.border-top-soft-grey{border-top:1px solid}.border-right-soft-grey{border-right:1px solid;border-color:#dddede!important}.border-bottom-soft-grey{border-bottom:1px solid;border-color:#dddede!important}.border-left-soft-grey{border-left:1px solid;border-color:#dddede!important}.light-grey{color:#eee!important}.fill-light-grey{background-color:#eee!important}.border-light-grey,.border-top-light-grey{border-color:#eee!important}.border-top-light-grey{border-top:1px solid}.border-right-light-grey{border-right:1px solid;border-color:#eee!important}.border-bottom-light-grey{border-bottom:1px solid;border-color:#eee!important}.border-left-light-grey{border-left:1px solid;border-color:#eee!important}.medium-grey{color:#ccc!important}.fill-medium-grey{background-color:#ccc!important}.border-medium-grey,.border-top-medium-grey{border-color:#ccc!important}.border-top-medium-grey{border-top:1px solid}.border-right-medium-grey{border-right:1px solid;border-color:#ccc!important}.border-bottom-medium-grey{border-bottom:1px solid;border-color:#ccc!important}.border-left-medium-grey{border-left:1px solid;border-color:#ccc!important}.medium-dark-grey{color:#999!important}.fill-medium-dark-grey{background-color:#999!important}.border-medium-dark-grey{border-color:#999!important}.border-top-medium-dark-grey{border-top:1px solid;border-color:#999!important}.border-right-medium-dark-grey{border-right:1px solid;border-color:#999!important}.border-bottom-medium-dark-grey{border-bottom:1px solid;border-color:#999!important}.border-left-medium-dark-grey{border-left:1px solid;border-color:#999!important}.dark-grey{color:#222!important}.fill-dark-grey{background-color:#222!important}.border-dark-grey,.border-top-dark-grey{border-color:#222!important}.border-top-dark-grey{border-top:1px solid}.border-right-dark-grey{border-right:1px solid;border-color:#222!important}.border-bottom-dark-grey{border-bottom:1px solid;border-color:#222!important}.border-left-dark-grey{border-left:1px solid;border-color:#222!important}.soft-blue{color:#eff1f5!important}.fill-soft-blue{background-color:#eff1f5!important}.border-soft-blue,.border-top-soft-blue{border-color:#eff1f5!important}.border-top-soft-blue{border-top:1px solid}.border-right-soft-blue{border-right:1px solid;border-color:#eff1f5!important}.border-bottom-soft-blue{border-bottom:1px solid;border-color:#eff1f5!important}.border-left-soft-blue{border-left:1px solid;border-color:#eff1f5!important}.dark-soft-blue{color:#e9ecf1!important}.fill-dark-soft-blue{background-color:#e9ecf1!important}.border-dark-soft-blue,.border-top-dark-soft-blue{border-color:#e9ecf1!important}.border-top-dark-soft-blue{border-top:1px solid}.border-right-dark-soft-blue{border-right:1px solid;border-color:#e9ecf1!important}.border-bottom-dark-soft-blue{border-bottom:1px solid;border-color:#e9ecf1!important}.border-left-dark-soft-blue{border-left:1px solid;border-color:#e9ecf1!important}.darker-soft-blue{color:#e6e9ef!important}.fill-darker-soft-blue{background-color:#e6e9ef!important}.border-darker-soft-blue,.border-top-darker-soft-blue{border-color:#e6e9ef!important}.border-top-darker-soft-blue{border-top:1px solid}.border-right-darker-soft-blue{border-right:1px solid;border-color:#e6e9ef!important}.border-bottom-darker-soft-blue{border-bottom:1px solid;border-color:#e6e9ef!important}.border-left-darker-soft-blue{border-left:1px solid;border-color:#e6e9ef!important}.light-soft-blue{color:#f5f6f9!important}.fill-light-soft-blue{background-color:#f5f6f9!important}.border-light-soft-blue,.border-top-light-soft-blue{border-color:#f5f6f9!important}.border-top-light-soft-blue{border-top:1px solid}.border-right-light-soft-blue{border-right:1px solid;border-color:#f5f6f9!important}.border-bottom-light-soft-blue{border-bottom:1px solid;border-color:#f5f6f9!important}.border-left-light-soft-blue{border-left:1px solid;border-color:#f5f6f9!important}.lighter-soft-blue{color:#f8f9fb!important}.fill-lighter-soft-blue{background-color:#f8f9fb!important}.border-lighter-soft-blue,.border-top-lighter-soft-blue{border-color:#f8f9fb!important}.border-top-lighter-soft-blue{border-top:1px solid}.border-right-lighter-soft-blue{border-right:1px solid;border-color:#f8f9fb!important}.border-bottom-lighter-soft-blue{border-bottom:1px solid;border-color:#f8f9fb!important}.border-left-lighter-soft-blue{border-left:1px solid;border-color:#f8f9fb!important}:root{--color-gray:var(--color-gray-100);--color-gray-50:#f6f7f8;--color-gray-100:#eff1f4;--color-gray-200:#e3e5e8;--color-gray-300:#d7d9dc;--color-gray-400:#cbcdcf;--color-gray-500:#bfc1c3;--color-primary:var(--color-primary-500);--color-primary-50:#e4edfe;--color-primary-100:#bbd2fe;--color-primary-200:#8db4fd;--color-primary-300:#5f95fc;--color-primary-400:#3d7ffb;--color-primary-500:#1b68fa;--color-primary-600:#1860f9;--color-primary-700:#1455f9;--color-primary-800:#104bf8;--color-primary-900:#083af6;--color-primary-A100:#fff;--color-primary-A200:#ebefff;--color-primary-A400:#b8c4ff;--color-primary-A700:#9fafff;--color-secondary:var(--color-secondary-500);--color-secondary-50:#ebf7ed;--color-secondary-100:#cdead3;--color-secondary-200:#acdcb5;--color-secondary-300:#8bce97;--color-secondary-400:#72c481;--color-secondary-500:#59b96b;--color-secondary-600:#51b263;--color-secondary-700:#48aa58;--color-secondary-800:#3ea24e;--color-secondary-900:#2e933c;--color-secondary-A100:#d9ffde;--color-secondary-A200:#a6ffb1;--color-secondary-A400:#73ff84;--color-secondary-A700:#59ff6e}fw-popover{display:none}.fw-popover-panel .fw-popover-content-wrapper{position:relative;background:#fff;border-radius:4px;box-shadow:0 1px 4px rgba(0,0,0,.15)!important;border:1px solid #d6dbe5;padding:16px}.fw-popover-panel .fw-popover-content-wrapper .fw-popover-caret{position:absolute;overflow:hidden;width:25px;height:25px}.fw-popover-panel .fw-popover-content-wrapper .fw-popover-caret:after{display:block;content:\"\";width:16px;height:16px;background:#fff;box-shadow:0 1px 4px rgba(0,0,0,.15)!important;border:1px solid #d6dbe5;transform:rotate(45deg);position:relative}.fw-popover-panel.fw-popover-above{margin-bottom:-20px;padding-bottom:20px}.fw-popover-panel.fw-popover-above .fw-popover-caret{left:0;bottom:-16px;height:16px}.fw-popover-panel.fw-popover-above .fw-popover-caret:after{margin:-8px auto}.fw-popover-panel.fw-popover-below{margin-top:-20px;padding-top:20px}.fw-popover-panel.fw-popover-below .fw-popover-caret{left:0;top:-16px;height:16px}.fw-popover-panel.fw-popover-below .fw-popover-caret:after{top:16px;margin:-8px auto}.fw-popover-panel.fw-popover-left{margin-right:-20px;padding-right:20px}.fw-popover-panel.fw-popover-left .fw-popover-caret{right:-16px;top:0;width:16px}.fw-popover-panel.fw-popover-left .fw-popover-caret:after{top:calc(50% - 8px);left:-8px}.fw-popover-panel.fw-popover-right{margin-left:-20px;padding-left:20px}.fw-popover-panel.fw-popover-right .fw-popover-caret{left:-16px;top:0;width:16px}.fw-popover-panel.fw-popover-right .fw-popover-caret:after{top:calc(50% - 8px);right:-8px}"]
944
+ styles: [".white{color:#fff!important}.fill-white{background-color:#fff!important}.border-top-white,.border-white{border-color:#fff!important}.border-top-white{border-top:1px solid}.border-right-white{border-right:1px solid;border-color:#fff!important}.border-bottom-white{border-bottom:1px solid;border-color:#fff!important}.border-left-white{border-left:1px solid;border-color:#fff!important}.black{color:#000!important}.fill-black{background-color:#000!important}.border-black,.border-top-black{border-color:#000!important}.border-top-black{border-top:1px solid}.border-right-black{border-right:1px solid;border-color:#000!important}.border-bottom-black{border-bottom:1px solid;border-color:#000!important}.border-left-black{border-left:1px solid;border-color:#000!important}.green{color:#59b96b!important}.fill-green{background-color:#59b96b!important}.border-green,.border-top-green{border-color:#59b96b!important}.border-top-green{border-top:1px solid}.border-right-green{border-right:1px solid;border-color:#59b96b!important}.border-bottom-green{border-bottom:1px solid;border-color:#59b96b!important}.border-left-green{border-left:1px solid;border-color:#59b96b!important}.orange{color:#f7941d!important}.fill-orange{background-color:#f7941d!important}.border-orange,.border-top-orange{border-color:#f7941d!important}.border-top-orange{border-top:1px solid}.border-right-orange{border-right:1px solid;border-color:#f7941d!important}.border-bottom-orange{border-bottom:1px solid;border-color:#f7941d!important}.border-left-orange{border-left:1px solid;border-color:#f7941d!important}.red{color:#de584c!important}.fill-red{background-color:#de584c!important}.border-red,.border-top-red{border-color:#de584c!important}.border-top-red{border-top:1px solid}.border-right-red{border-right:1px solid;border-color:#de584c!important}.border-bottom-red{border-bottom:1px solid;border-color:#de584c!important}.border-left-red{border-left:1px solid;border-color:#de584c!important}.light-red{color:#f8e5e4!important}.fill-light-red{background-color:#f8e5e4!important}.border-light-red,.border-top-light-red{border-color:#f8e5e4!important}.border-top-light-red{border-top:1px solid}.border-right-light-red{border-right:1px solid;border-color:#f8e5e4!important}.border-bottom-light-red{border-bottom:1px solid;border-color:#f8e5e4!important}.border-left-light-red{border-left:1px solid;border-color:#f8e5e4!important}.blue{color:#5871a2!important}.fill-blue{background-color:#5871a2!important}.border-blue,.border-top-blue{border-color:#5871a2!important}.border-top-blue{border-top:1px solid}.border-right-blue{border-right:1px solid;border-color:#5871a2!important}.border-bottom-blue{border-bottom:1px solid;border-color:#5871a2!important}.border-left-blue{border-left:1px solid;border-color:#5871a2!important}.focus-blue{color:#23527c!important}.fill-focus-blue{background-color:#23527c!important}.border-focus-blue,.border-top-focus-blue{border-color:#23527c!important}.border-top-focus-blue{border-top:1px solid}.border-right-focus-blue{border-right:1px solid;border-color:#23527c!important}.border-bottom-focus-blue{border-bottom:1px solid;border-color:#23527c!important}.border-left-focus-blue{border-left:1px solid;border-color:#23527c!important}.dark-blue{color:#394256!important}.fill-dark-blue{background-color:#394256!important}.border-dark-blue,.border-top-dark-blue{border-color:#394256!important}.border-top-dark-blue{border-top:1px solid}.border-right-dark-blue{border-right:1px solid;border-color:#394256!important}.border-bottom-dark-blue{border-bottom:1px solid;border-color:#394256!important}.border-left-dark-blue{border-left:1px solid;border-color:#394256!important}.light-blue{color:#e7effe!important}.fill-light-blue{background-color:#e7effe!important}.border-light-blue,.border-top-light-blue{border-color:#e7effe!important}.border-top-light-blue{border-top:1px solid}.border-right-light-blue{border-right:1px solid;border-color:#e7effe!important}.border-bottom-light-blue{border-bottom:1px solid;border-color:#e7effe!important}.border-left-light-blue{border-left:1px solid;border-color:#e7effe!important}.bright-blue{color:#1b68fa!important}.fill-bright-blue{background-color:#1b68fa!important}.border-bright-blue,.border-top-bright-blue{border-color:#1b68fa!important}.border-top-bright-blue{border-top:1px solid}.border-right-bright-blue{border-right:1px solid;border-color:#1b68fa!important}.border-bottom-bright-blue{border-bottom:1px solid;border-color:#1b68fa!important}.border-left-bright-blue{border-left:1px solid;border-color:#1b68fa!important}.admin-black{color:#01010a!important}.fill-admin-black{background-color:#01010a!important}.border-admin-black,.border-top-admin-black{border-color:#01010a!important}.border-top-admin-black{border-top:1px solid}.border-right-admin-black{border-right:1px solid;border-color:#01010a!important}.border-bottom-admin-black{border-bottom:1px solid;border-color:#01010a!important}.border-left-admin-black{border-left:1px solid;border-color:#01010a!important}.accent-purple{color:#b080fc!important}.fill-accent-purple{background-color:#b080fc!important}.border-accent-purple,.border-top-accent-purple{border-color:#b080fc!important}.border-top-accent-purple{border-top:1px solid}.border-right-accent-purple{border-right:1px solid;border-color:#b080fc!important}.border-bottom-accent-purple{border-bottom:1px solid;border-color:#b080fc!important}.border-left-accent-purple{border-left:1px solid;border-color:#b080fc!important}.grey{color:#58595b!important}.fill-grey{background-color:#58595b!important}.border-grey,.border-top-grey{border-color:#58595b!important}.border-top-grey{border-top:1px solid}.border-right-grey{border-right:1px solid;border-color:#58595b!important}.border-bottom-grey{border-bottom:1px solid;border-color:#58595b!important}.border-left-grey{border-left:1px solid;border-color:#58595b!important}.soft-grey{color:#dddede!important}.fill-soft-grey{background-color:#dddede!important}.border-soft-grey,.border-top-soft-grey{border-color:#dddede!important}.border-top-soft-grey{border-top:1px solid}.border-right-soft-grey{border-right:1px solid;border-color:#dddede!important}.border-bottom-soft-grey{border-bottom:1px solid;border-color:#dddede!important}.border-left-soft-grey{border-left:1px solid;border-color:#dddede!important}.light-grey{color:#eee!important}.fill-light-grey{background-color:#eee!important}.border-light-grey,.border-top-light-grey{border-color:#eee!important}.border-top-light-grey{border-top:1px solid}.border-right-light-grey{border-right:1px solid;border-color:#eee!important}.border-bottom-light-grey{border-bottom:1px solid;border-color:#eee!important}.border-left-light-grey{border-left:1px solid;border-color:#eee!important}.medium-grey{color:#ccc!important}.fill-medium-grey{background-color:#ccc!important}.border-medium-grey,.border-top-medium-grey{border-color:#ccc!important}.border-top-medium-grey{border-top:1px solid}.border-right-medium-grey{border-right:1px solid;border-color:#ccc!important}.border-bottom-medium-grey{border-bottom:1px solid;border-color:#ccc!important}.border-left-medium-grey{border-left:1px solid;border-color:#ccc!important}.medium-dark-grey{color:#999!important}.fill-medium-dark-grey{background-color:#999!important}.border-medium-dark-grey{border-color:#999!important}.border-top-medium-dark-grey{border-top:1px solid;border-color:#999!important}.border-right-medium-dark-grey{border-right:1px solid;border-color:#999!important}.border-bottom-medium-dark-grey{border-bottom:1px solid;border-color:#999!important}.border-left-medium-dark-grey{border-left:1px solid;border-color:#999!important}.dark-grey{color:#222!important}.fill-dark-grey{background-color:#222!important}.border-dark-grey,.border-top-dark-grey{border-color:#222!important}.border-top-dark-grey{border-top:1px solid}.border-right-dark-grey{border-right:1px solid;border-color:#222!important}.border-bottom-dark-grey{border-bottom:1px solid;border-color:#222!important}.border-left-dark-grey{border-left:1px solid;border-color:#222!important}.soft-blue{color:#eff1f5!important}.fill-soft-blue{background-color:#eff1f5!important}.border-soft-blue,.border-top-soft-blue{border-color:#eff1f5!important}.border-top-soft-blue{border-top:1px solid}.border-right-soft-blue{border-right:1px solid;border-color:#eff1f5!important}.border-bottom-soft-blue{border-bottom:1px solid;border-color:#eff1f5!important}.border-left-soft-blue{border-left:1px solid;border-color:#eff1f5!important}.dark-soft-blue{color:#e9ecf1!important}.fill-dark-soft-blue{background-color:#e9ecf1!important}.border-dark-soft-blue,.border-top-dark-soft-blue{border-color:#e9ecf1!important}.border-top-dark-soft-blue{border-top:1px solid}.border-right-dark-soft-blue{border-right:1px solid;border-color:#e9ecf1!important}.border-bottom-dark-soft-blue{border-bottom:1px solid;border-color:#e9ecf1!important}.border-left-dark-soft-blue{border-left:1px solid;border-color:#e9ecf1!important}.darker-soft-blue{color:#e6e9ef!important}.fill-darker-soft-blue{background-color:#e6e9ef!important}.border-darker-soft-blue,.border-top-darker-soft-blue{border-color:#e6e9ef!important}.border-top-darker-soft-blue{border-top:1px solid}.border-right-darker-soft-blue{border-right:1px solid;border-color:#e6e9ef!important}.border-bottom-darker-soft-blue{border-bottom:1px solid;border-color:#e6e9ef!important}.border-left-darker-soft-blue{border-left:1px solid;border-color:#e6e9ef!important}.light-soft-blue{color:#f5f6f9!important}.fill-light-soft-blue{background-color:#f5f6f9!important}.border-light-soft-blue,.border-top-light-soft-blue{border-color:#f5f6f9!important}.border-top-light-soft-blue{border-top:1px solid}.border-right-light-soft-blue{border-right:1px solid;border-color:#f5f6f9!important}.border-bottom-light-soft-blue{border-bottom:1px solid;border-color:#f5f6f9!important}.border-left-light-soft-blue{border-left:1px solid;border-color:#f5f6f9!important}.lighter-soft-blue{color:#f8f9fb!important}.fill-lighter-soft-blue{background-color:#f8f9fb!important}.border-lighter-soft-blue,.border-top-lighter-soft-blue{border-color:#f8f9fb!important}.border-top-lighter-soft-blue{border-top:1px solid}.border-right-lighter-soft-blue{border-right:1px solid;border-color:#f8f9fb!important}.border-bottom-lighter-soft-blue{border-bottom:1px solid;border-color:#f8f9fb!important}.border-left-lighter-soft-blue{border-left:1px solid;border-color:#f8f9fb!important}:root{--color-gray:var(--color-gray-100);--color-gray-50:#f6f7f8;--color-gray-100:#eff1f4;--color-gray-200:#e3e5e8;--color-gray-300:#d7d9dc;--color-gray-400:#cbcdcf;--color-gray-500:#bfc1c3;--color-primary:var(--color-primary-500);--color-primary-50:#e4edfe;--color-primary-100:#bbd2fe;--color-primary-200:#8db4fd;--color-primary-300:#5f95fc;--color-primary-400:#3d7ffb;--color-primary-500:#1b68fa;--color-primary-600:#1860f9;--color-primary-700:#1455f9;--color-primary-800:#104bf8;--color-primary-900:#083af6;--color-primary-A100:#fff;--color-primary-A200:#ebefff;--color-primary-A400:#b8c4ff;--color-primary-A700:#9fafff;--color-secondary:var(--color-secondary-500);--color-secondary-50:#ebf7ed;--color-secondary-100:#cdead3;--color-secondary-200:#acdcb5;--color-secondary-300:#8bce97;--color-secondary-400:#72c481;--color-secondary-500:#59b96b;--color-secondary-600:#51b263;--color-secondary-700:#48aa58;--color-secondary-800:#3ea24e;--color-secondary-900:#2e933c;--color-secondary-A100:#d9ffde;--color-secondary-A200:#a6ffb1;--color-secondary-A400:#73ff84;--color-secondary-A700:#59ff6e}fw-popover{display:none}.fw-popover-panel .fw-popover-content-wrapper{position:relative;background:#fff;border-radius:4px;box-shadow:0 1px 4px rgba(0,0,0,.15)!important;border:1px solid #d6dbe5;padding:16px}.fw-popover-panel .fw-popover-content-wrapper .fw-popover-caret{position:absolute;overflow:hidden;width:25px;height:25px}.fw-popover-panel .fw-popover-content-wrapper .fw-popover-caret:after{display:block;content:\"\";width:16px;height:16px;background:#fff;box-shadow:0 1px 4px rgba(0,0,0,.15)!important;border:1px solid #d6dbe5;transform:rotate(45deg);position:relative}.fw-popover-panel.fw-popover-above{margin-bottom:-20px;padding-bottom:20px}.fw-popover-panel.fw-popover-above .fw-popover-caret{left:0;bottom:-16px;height:16px}.fw-popover-panel.fw-popover-above .fw-popover-caret:after{margin:-8px auto}.fw-popover-panel.fw-popover-below{margin-top:-20px;padding-top:20px}.fw-popover-panel.fw-popover-below .fw-popover-caret{left:0;top:-16px;height:16px}.fw-popover-panel.fw-popover-below .fw-popover-caret:after{top:16px;margin:-8px auto}.fw-popover-panel.fw-popover-left{margin-right:-20px;padding-right:20px}.fw-popover-panel.fw-popover-left .fw-popover-caret{right:-16px;top:0;width:16px}.fw-popover-panel.fw-popover-left .fw-popover-caret:after{top:calc(50% - 8px);left:-8px}.fw-popover-panel.fw-popover-right{margin-left:-20px;padding-left:20px}.fw-popover-panel.fw-popover-right .fw-popover-caret{left:-16px;top:0;width:16px}.fw-popover-panel.fw-popover-right .fw-popover-caret:after{top:calc(50% - 8px);right:-8px}"]
548
945
  },] }
549
946
  ];
550
947
  FwPopoverComponent.propDecorators = {
@@ -767,5 +1164,5 @@ FwTableModule.decorators = [
767
1164
  * Generated bundle index. Do not edit.
768
1165
  */
769
1166
 
770
- export { FwButtonComponent, FwButtonGroupComponent, FwButtonGroupModule, FwButtonModule, FwNotificationComponent, FwNotificationContainerComponent, FwNotificationModule, FwNotificationService, FwNotificationType, FwPopoverComponent, FwPopoverModule, FwPopoverTriggerComponent, FwPopoverTriggerDirective, FwTableComponent, FwTableModule, genId, FwNotificationTimerService as ɵa };
1167
+ export { FwButtonComponent, FwButtonGroupComponent, FwButtonGroupModule, FwButtonModule, FwChoiceDialog, FwConfirmDialog, FwDialogModule, FwDialogService, FwErrorDialog, FwNotificationComponent, FwNotificationContainerComponent, FwNotificationModule, FwNotificationService, FwNotificationType, FwPopoverComponent, FwPopoverModule, FwPopoverTriggerComponent, FwPopoverTriggerDirective, FwPortalDialog, FwTableComponent, FwTableModule, MinimalTranslationService, TranslationService, genId, ɵ0, PipesModule as ɵa, TranslatePipe as ɵb, TrustHtmlPipe as ɵc, FwNotificationTimerService as ɵd };
771
1168
  //# sourceMappingURL=flywheel-io-vision.js.map