toast-message-display 18.0.5 → 18.0.6

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,21 +1,15 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Injectable, inject, Pipe, VERSION, EventEmitter, Input, Output, Inject, ViewEncapsulation, Component, NgModule } from '@angular/core';
3
- import * as i9 from '@angular/common';
4
3
  import { CommonModule } from '@angular/common';
4
+ import { ReactiveFormsModule } from '@angular/forms';
5
5
  import * as i1 from '@angular/material/icon';
6
6
  import { MatIconModule } from '@angular/material/icon';
7
7
  import { MatSnackBar, MAT_SNACK_BAR_DATA, MatSnackBarModule } from '@angular/material/snack-bar';
8
8
  import * as i2 from '@angular/material/button';
9
9
  import { MatButtonModule } from '@angular/material/button';
10
- import * as i4 from '@angular/material/toolbar';
11
10
  import { MatToolbarModule } from '@angular/material/toolbar';
12
- import * as i5 from '@angular/material/menu';
13
11
  import { MatMenuModule } from '@angular/material/menu';
14
- import * as i1$1 from '@angular/forms';
15
- import { FormBuilder, ReactiveFormsModule } from '@angular/forms';
16
- import * as i6 from '@angular/material/radio';
17
12
  import { MatRadioModule } from '@angular/material/radio';
18
- import * as i7 from '@angular/material/divider';
19
13
  import { MatDividerModule } from '@angular/material/divider';
20
14
  import { DomSanitizer } from '@angular/platform-browser';
21
15
  import { take } from 'rxjs/operators';
@@ -237,11 +231,11 @@ class ToastUIComponent {
237
231
  this.close.emit(options);
238
232
  }
239
233
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ToastUIComponent, deps: [{ token: MAT_SNACK_BAR_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
240
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ToastUIComponent, selector: "app-toast-ui", inputs: { options: "options" }, outputs: { close: "close" }, ngImport: i0, template: "<div\n class=\"toast-grid-container\"\n [class.has-icon]=\"options.icon\"\n [class.has-action]=\"options.action\"\n [style.background-color]=\"(options) ? options.color : ''\"\n >\n @if (options.icon) {\n <mat-icon\n class=\"toast-icon\"\n [style.color]=\"textColor\"\n >\n {{ options.icon }}\n </mat-icon>\n }\n\n <div\n class=\"toast-message\"\n [style.color]=\"textColor\"\n [innerHTML]=\"options.message | safeHtml\"\n >\n </div>\n\n @if (options.action) {\n <button\n class=\"toast-action-button\"\n mat-button\n (click)=\"onCloseToast(options)\"\n [style.color]=\"textColor\"\n >\n @if (options.action !== '-') {\n {{ options.action }}\n } @else {\n <mat-icon>close</mat-icon>\n }\n </button>\n }\n</div>\n", styles: [".mat-mdc-snack-bar-container .mdc-snackbar__surface{max-width:100%!important;width:100%}.cdk-overlay-pane{width:100%}.cdk-overlay-container{position:fixed;top:0;left:0;width:100%;z-index:1000}.toast-grid-container{display:grid;grid-template-columns:1fr auto}.toast-grid-container.has-icon{grid-template-columns:minmax(0,44px) 1fr auto}.toast-grid-container>*{display:inline-flex;overflow:hidden;align-items:center}.toast-icon{margin-top:.25rem;grid-column:1;display:flex;align-items:center;justify-content:center;max-width:44px;overflow:hidden}.toast-message{word-wrap:break-word;overflow-wrap:break-word;white-space:normal;flex-grow:1}.toast-action-button{justify-self:end}\n", ".mat-mdc-snack-bar-container{--mat-snackbar-container-color: var(--toast-bg-color, #fff);--mat-mdc-snack-bar-button-color: var(--toast-text-color, #fff);--mat-snackbar-supporting-text-color: var(--toast-text-color, #000)}\n"], dependencies: [{ kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }], encapsulation: i0.ViewEncapsulation.None }); }
234
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ToastUIComponent, selector: "app-toast-ui", inputs: { options: "options" }, outputs: { close: "close" }, ngImport: i0, template: "<div\n class=\"toast-grid-container\"\n [class.has-icon]=\"options.icon\"\n [class.has-action]=\"options.action\"\n [style.background-color]=\"(options) ? options.color : ''\"\n >\n @if (options.icon) {\n <mat-icon\n class=\"toast-icon\"\n [style.color]=\"textColor\"\n >\n {{ options.icon }}\n </mat-icon>\n }\n\n <div\n class=\"toast-message\"\n [style.color]=\"textColor\"\n [innerHTML]=\"options.message | safeHtml\"\n >\n </div>\n\n @if (options.action) {\n <button\n class=\"toast-action-button\"\n mat-button\n (click)=\"onCloseToast(options)\"\n [style.color]=\"textColor\"\n >\n @if (options.action !== '-') {\n {{ options.action }}\n } @else {\n <mat-icon>close</mat-icon>\n }\n </button>\n }\n</div>\n", styles: [".mat-mdc-snack-bar-container .mdc-snackbar__surface{max-width:100%!important;width:100%}.cdk-overlay-pane{width:100%}.cdk-overlay-container{position:fixed;top:0;left:0;width:100%;z-index:1000}.toast-grid-container{display:grid;grid-template-columns:1fr}.toast-grid-container.has-action{grid-template-columns:1fr auto}.toast-grid-container.has-icon{grid-template-columns:minmax(0,44px) 1fr}.toast-grid-container.has-icon.has-action{grid-template-columns:minmax(0,44px) 1fr auto}.toast-grid-container>*{display:inline-flex;overflow:hidden;align-items:center}.toast-icon{margin-top:.25rem;grid-column:1;display:flex;align-items:center;justify-content:center;max-width:44px;overflow:hidden}.toast-message{word-wrap:break-word;overflow-wrap:break-word;white-space:normal;flex-grow:1}.toast-action-button{justify-self:end}\n", ".mat-mdc-snack-bar-container{--mat-snackbar-container-color: var(--toast-bg-color, #fff);--mat-mdc-snack-bar-button-color: var(--toast-text-color, #fff);--mat-snackbar-supporting-text-color: var(--toast-text-color, #000)}\n"], dependencies: [{ kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }], encapsulation: i0.ViewEncapsulation.None }); }
241
235
  }
242
236
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ToastUIComponent, decorators: [{
243
237
  type: Component,
244
- args: [{ selector: 'app-toast-ui', encapsulation: ViewEncapsulation.None, standalone: false, template: "<div\n class=\"toast-grid-container\"\n [class.has-icon]=\"options.icon\"\n [class.has-action]=\"options.action\"\n [style.background-color]=\"(options) ? options.color : ''\"\n >\n @if (options.icon) {\n <mat-icon\n class=\"toast-icon\"\n [style.color]=\"textColor\"\n >\n {{ options.icon }}\n </mat-icon>\n }\n\n <div\n class=\"toast-message\"\n [style.color]=\"textColor\"\n [innerHTML]=\"options.message | safeHtml\"\n >\n </div>\n\n @if (options.action) {\n <button\n class=\"toast-action-button\"\n mat-button\n (click)=\"onCloseToast(options)\"\n [style.color]=\"textColor\"\n >\n @if (options.action !== '-') {\n {{ options.action }}\n } @else {\n <mat-icon>close</mat-icon>\n }\n </button>\n }\n</div>\n", styles: [".mat-mdc-snack-bar-container .mdc-snackbar__surface{max-width:100%!important;width:100%}.cdk-overlay-pane{width:100%}.cdk-overlay-container{position:fixed;top:0;left:0;width:100%;z-index:1000}.toast-grid-container{display:grid;grid-template-columns:1fr auto}.toast-grid-container.has-icon{grid-template-columns:minmax(0,44px) 1fr auto}.toast-grid-container>*{display:inline-flex;overflow:hidden;align-items:center}.toast-icon{margin-top:.25rem;grid-column:1;display:flex;align-items:center;justify-content:center;max-width:44px;overflow:hidden}.toast-message{word-wrap:break-word;overflow-wrap:break-word;white-space:normal;flex-grow:1}.toast-action-button{justify-self:end}\n", ".mat-mdc-snack-bar-container{--mat-snackbar-container-color: var(--toast-bg-color, #fff);--mat-mdc-snack-bar-button-color: var(--toast-text-color, #fff);--mat-snackbar-supporting-text-color: var(--toast-text-color, #000)}\n"] }]
238
+ args: [{ selector: 'app-toast-ui', encapsulation: ViewEncapsulation.None, standalone: false, template: "<div\n class=\"toast-grid-container\"\n [class.has-icon]=\"options.icon\"\n [class.has-action]=\"options.action\"\n [style.background-color]=\"(options) ? options.color : ''\"\n >\n @if (options.icon) {\n <mat-icon\n class=\"toast-icon\"\n [style.color]=\"textColor\"\n >\n {{ options.icon }}\n </mat-icon>\n }\n\n <div\n class=\"toast-message\"\n [style.color]=\"textColor\"\n [innerHTML]=\"options.message | safeHtml\"\n >\n </div>\n\n @if (options.action) {\n <button\n class=\"toast-action-button\"\n mat-button\n (click)=\"onCloseToast(options)\"\n [style.color]=\"textColor\"\n >\n @if (options.action !== '-') {\n {{ options.action }}\n } @else {\n <mat-icon>close</mat-icon>\n }\n </button>\n }\n</div>\n", styles: [".mat-mdc-snack-bar-container .mdc-snackbar__surface{max-width:100%!important;width:100%}.cdk-overlay-pane{width:100%}.cdk-overlay-container{position:fixed;top:0;left:0;width:100%;z-index:1000}.toast-grid-container{display:grid;grid-template-columns:1fr}.toast-grid-container.has-action{grid-template-columns:1fr auto}.toast-grid-container.has-icon{grid-template-columns:minmax(0,44px) 1fr}.toast-grid-container.has-icon.has-action{grid-template-columns:minmax(0,44px) 1fr auto}.toast-grid-container>*{display:inline-flex;overflow:hidden;align-items:center}.toast-icon{margin-top:.25rem;grid-column:1;display:flex;align-items:center;justify-content:center;max-width:44px;overflow:hidden}.toast-message{word-wrap:break-word;overflow-wrap:break-word;white-space:normal;flex-grow:1}.toast-action-button{justify-self:end}\n", ".mat-mdc-snack-bar-container{--mat-snackbar-container-color: var(--toast-bg-color, #fff);--mat-mdc-snack-bar-button-color: var(--toast-text-color, #fff);--mat-snackbar-supporting-text-color: var(--toast-text-color, #000)}\n"] }]
245
239
  }], ctorParameters: () => [{ type: ToastDisplay, decorators: [{
246
240
  type: Inject,
247
241
  args: [MAT_SNACK_BAR_DATA]
@@ -283,60 +277,11 @@ class ToastOptions {
283
277
  this.data = data;
284
278
  }
285
279
  static adapt(item) {
286
- if (item?.duration)
287
- item.duration = item.duration * 1000;
288
- return new ToastOptions(item?.duration, item?.horizontalPosition, item?.verticalPosition, item?.data ? ToastDisplay.adapt(item.data) : ToastDisplay.adapt());
280
+ const duration = item?.duration ? item.duration * 1000 : item?.duration;
281
+ return new ToastOptions(duration, item?.horizontalPosition, item?.verticalPosition, item?.data ? ToastDisplay.adapt(item.data) : ToastDisplay.adapt());
289
282
  }
290
283
  }
291
284
 
292
- class ToastMessageDisplayService {
293
- constructor() {
294
- this.snackBar = inject(MatSnackBar);
295
- this.toastQueue = [];
296
- this.isToastVisible = false;
297
- this.defaultDuration = 3;
298
- }
299
- toastMessage(options = ToastDisplay.adapt(), duration, vertical) {
300
- this.toastQueue.push({ options, duration, vertical });
301
- this.showNextToast();
302
- }
303
- showNextToast() {
304
- if (this.isToastVisible || this.toastQueue.length === 0)
305
- return;
306
- const { options, duration, vertical } = this.toastQueue.shift();
307
- const vertPosition = (vertical) ? vertical : 'top';
308
- const durationDismiss = (!options.action) ? this.defaultDuration : duration;
309
- const displayOptions = ToastOptions.adapt({
310
- duration: durationDismiss,
311
- horizontalPosition: 'center',
312
- verticalPosition: vertPosition,
313
- data: options,
314
- });
315
- this.isToastVisible = true;
316
- this.snackBarRef = this.snackBar.openFromComponent(ToastUIComponent, displayOptions);
317
- if (this.snackBarRef) {
318
- this.snackBarRef
319
- .afterDismissed()
320
- .pipe(take(1))
321
- .subscribe(() => {
322
- this.isToastVisible = false;
323
- this.showNextToast();
324
- });
325
- }
326
- else {
327
- console.error('Snackbar reference is undefined. Unable to subscribe to dismissal event.');
328
- }
329
- }
330
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ToastMessageDisplayService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
331
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ToastMessageDisplayService, providedIn: 'root' }); }
332
- }
333
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ToastMessageDisplayService, decorators: [{
334
- type: Injectable,
335
- args: [{
336
- providedIn: 'root'
337
- }]
338
- }] });
339
-
340
285
  class ToastMessageInlineComponent {
341
286
  constructor() {
342
287
  this.close = new EventEmitter();
@@ -352,7 +297,7 @@ class ToastMessageInlineComponent {
352
297
  const toast = ToastDisplay.adapt(value);
353
298
  if (!toast.action) {
354
299
  this.dismissToasts.push(toast);
355
- this.expireTime(toast);
300
+ this.expireTime(toast, this.duration);
356
301
  }
357
302
  this.toastList.push(toast);
358
303
  }
@@ -365,27 +310,26 @@ class ToastMessageInlineComponent {
365
310
  get textColor() {
366
311
  return (this.option) ? this.textColorService.textColorForBgColor(this.option.color, '#FFFFFF', '#000000') : '';
367
312
  }
368
- ngOnInit() {
369
- document.documentElement.style.setProperty('--snackbar-color', this.color);
370
- }
371
313
  onCloseToast(toast) {
372
314
  this.toastList = this.toastList.filter(item => item.id !== toast?.id);
373
315
  this.close.emit(toast);
374
316
  }
375
- expireTime(toast) {
317
+ expireTime(toast, duration) {
318
+ if (duration <= 0)
319
+ return;
376
320
  const boundRemove = this.removeToast.bind(this, toast);
377
- setTimeout(boundRemove, 3000);
321
+ setTimeout(boundRemove, duration * 1000);
378
322
  }
379
323
  removeToast(toast) {
380
324
  this.dismissToasts = this.dismissToasts.filter(t => t.id !== toast.id);
381
325
  this.toastList = this.toastList.filter(t => t.id !== toast.id);
382
326
  }
383
327
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ToastMessageInlineComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
384
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ToastMessageInlineComponent, selector: "app-toast-message-display-inline", inputs: { toast: "toast", duration: "duration", position: "position" }, outputs: { close: "close" }, ngImport: i0, template: "<div style=\"display: flex; gap: .5rem; flex-direction: column;\">\n @for (toast of toastList; track toast) {\n <div [style.background-color]=\"toast.color\" class=\"inline\">\n <app-toast-ui\n [options]=\"toast\"\n style=\"flex: 1;\"\n (close)=\"onCloseToast(toast)\"\n ></app-toast-ui>\n </div>\n }\n</div>\n", styles: [".inline{padding:.75rem;border-radius:.25rem}\n"], dependencies: [{ kind: "component", type: ToastUIComponent, selector: "app-toast-ui", inputs: ["options"], outputs: ["close"] }] }); }
328
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ToastMessageInlineComponent, selector: "app-toast-message-display-inline", inputs: { toast: "toast", duration: "duration", position: "position" }, outputs: { close: "close" }, ngImport: i0, template: "<div class=\"toast-inline-list\" [class.position-bottom]=\"position === 'bottom'\">\n @for (toast of toastList; track toast) {\n <div [style.background-color]=\"toast.color\" class=\"inline\">\n <app-toast-ui\n [options]=\"toast\"\n class=\"toast-inline-item\"\n (close)=\"onCloseToast(toast)\"\n ></app-toast-ui>\n </div>\n }\n</div>\n", styles: [".toast-inline-list{display:flex;flex-direction:column;gap:.5rem}.toast-inline-list.position-bottom{flex-direction:column-reverse}.toast-inline-item{flex:1}.inline{padding:.75rem;border-radius:.25rem}\n"], dependencies: [{ kind: "component", type: ToastUIComponent, selector: "app-toast-ui", inputs: ["options"], outputs: ["close"] }] }); }
385
329
  }
386
330
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ToastMessageInlineComponent, decorators: [{
387
331
  type: Component,
388
- args: [{ selector: 'app-toast-message-display-inline', standalone: false, template: "<div style=\"display: flex; gap: .5rem; flex-direction: column;\">\n @for (toast of toastList; track toast) {\n <div [style.background-color]=\"toast.color\" class=\"inline\">\n <app-toast-ui\n [options]=\"toast\"\n style=\"flex: 1;\"\n (close)=\"onCloseToast(toast)\"\n ></app-toast-ui>\n </div>\n }\n</div>\n", styles: [".inline{padding:.75rem;border-radius:.25rem}\n"] }]
332
+ args: [{ selector: 'app-toast-message-display-inline', standalone: false, template: "<div class=\"toast-inline-list\" [class.position-bottom]=\"position === 'bottom'\">\n @for (toast of toastList; track toast) {\n <div [style.background-color]=\"toast.color\" class=\"inline\">\n <app-toast-ui\n [options]=\"toast\"\n class=\"toast-inline-item\"\n (close)=\"onCloseToast(toast)\"\n ></app-toast-ui>\n </div>\n }\n</div>\n", styles: [".toast-inline-list{display:flex;flex-direction:column;gap:.5rem}.toast-inline-list.position-bottom{flex-direction:column-reverse}.toast-inline-item{flex:1}.inline{padding:.75rem;border-radius:.25rem}\n"] }]
389
333
  }], propDecorators: { close: [{
390
334
  type: Output
391
335
  }], toast: [{
@@ -396,118 +340,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
396
340
  type: Input
397
341
  }] } });
398
342
 
399
- class ToastDemoComponent {
400
- constructor() {
401
- this.random = () => {
402
- const typedArray = new Uint8Array(1);
403
- const randomValue = crypto.getRandomValues(typedArray)[0];
404
- const randomFloat = randomValue / Math.pow(2, 8);
405
- return randomFloat;
406
- };
407
- this.randomNumber = (min, max) => {
408
- return Math.floor(this.random() * max) + min;
409
- };
410
- this.fb = inject(FormBuilder);
411
- this.toastMessageDisplayService = inject(ToastMessageDisplayService);
412
- this.type = 'Basic';
413
- this.position = this.fb.control('top');
414
- this.icons = [
415
- 'favorite_border',
416
- 'dashboard',
417
- 'event',
418
- 'paid',
419
- 'notifications',
420
- 'movie_filter',
421
- ];
422
- this.toastSamples = [
423
- {
424
- message: `This is a simple toast message. This is a <span style="font-size: 22px">simple toast message</span>. This is a simple toast message. This is a simple toast message`,
425
- color: ToastColors.ERROR,
426
- action: "Ok"
427
- },
428
- {
429
- message: 'Sample message',
430
- color: ToastColors.INFO,
431
- icon: this.icons[0]
432
- },
433
- {
434
- message: 'Sample message',
435
- color: ToastColors.WARN,
436
- icon: this.icons[1]
437
- },
438
- {
439
- message: `This is a simple toast message. This is a <span style="font-size: 22px">simple toast message</span>. This is a simple toast message. This is a simple toast message`,
440
- color: ToastColors.NOTIFY,
441
- icon: this.icons[2],
442
- action: "Dismiss"
443
- },
444
- {
445
- message: 'Sample message',
446
- color: ToastColors.GENERAL,
447
- action: "Dismiss"
448
- },
449
- {
450
- message: `This is a simple toast message. This is a <span style="font-size: 22px">simple toast message</span>. This is a simple toast message. This is a simple toast message`,
451
- color: ToastColors.SUCCESS,
452
- action: "-"
453
- },
454
- ];
455
- }
456
- onSelectType(type) {
457
- this.type = type;
458
- }
459
- onBasic(type, icon, action) {
460
- switch (type) {
461
- case 'ERROR':
462
- this.presentToast(ToastColors.ERROR, icon, action);
463
- break;
464
- case 'INFO':
465
- this.presentToast(ToastColors.INFO, icon, action);
466
- break;
467
- case 'WARN':
468
- this.presentToast(ToastColors.WARN, icon, action);
469
- break;
470
- case 'NOTIFY':
471
- this.presentToast(ToastColors.NOTIFY, icon, action);
472
- break;
473
- case 'GENERAL':
474
- this.presentToast(ToastColors.GENERAL, icon, action);
475
- break;
476
- default:
477
- this.presentToast(ToastColors.SUCCESS, icon, action);
478
- break;
479
- }
480
- }
481
- presentToast(color, icon, action) {
482
- const options = ToastDisplay.adapt({
483
- message: `This is a simple toast message. <span style="font-size: 22px">simple toast message</span>. This is a simple toast message. This is a simple toast message`,
484
- color,
485
- icon,
486
- action
487
- });
488
- const toastPosition = (this.position.value === 'top') ? VerticalAlignment.TOP : VerticalAlignment.BOTTOM;
489
- this.toastMessageDisplayService.toastMessage(options, -1, toastPosition);
490
- }
491
- onInline() {
492
- const pick = this.randomNumber(0, this.toastSamples.length - 1);
493
- this.pickToastSample = this.toastSamples[pick];
494
- }
495
- onClosedToast(toast) {
496
- console.log(toast);
497
- }
498
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ToastDemoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
499
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ToastDemoComponent, selector: "app-toast-display-demo", ngImport: i0, template: "<mat-toolbar style=\"display: flex;\">\n <div>Toast Message Demo</div>\n <div style=\"flex:1; text-align: end;\">\n <button\n mat-stroked-button\n [matMenuTriggerFor]=\"menu\"\n matIconPrefix\n >\n {{ type | titlecase }}\n <mat-icon>layers</mat-icon>\n </button>\n </div>\n</mat-toolbar>\n\n<mat-menu #menu=\"matMenu\">\n <button\n mat-menu-item\n (click)=\"onSelectType('basic')\"\n >\n Basic\n </button>\n <button\n mat-menu-item\n (click)=\"onSelectType('icon')\"\n >\n Icon\n </button>\n <button\n mat-menu-item\n (click)=\"onSelectType('action')\"\n >\n Action\n </button>\n</mat-menu>\n\n<div style=\"margin: 1rem;\">\n <span>\n @switch (type) {\n @case ('icon') {\n <div>\n <div style=\"display: flex; gap: 1rem; flex-direction: column;\">\n <h3 style=\"flex:1; margin-bottom: 0;\">Toast with Icon</h3>\n <div style=\"display: flex; gap: .5rem;\">\n <button\n mat-stroked-button\n (click)=\"onBasic('SUCCESS', 'favorite_border')\"\n >\n Icon - SUCCESS\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('ERROR', 'dashboard')\"\n >\n Icon - ERROR\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('INFO', 'event')\"\n >\n Icon - INFO\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('WARN', 'paid')\"\n >\n Icon - WARN\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('WARN', 'notifications')\"\n >\n Icon - NOTIFY\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('WARN', 'movie_filter')\"\n >\n Icon - GENERAL\n </button>\n </div>\n </div>\n </div>\n }\n @case ('action') {\n <div>\n <div style=\"display: flex; gap: 1rem; flex-direction: column;\">\n <h3 style=\"flex:1; margin-bottom: 0;\">Toast with Icon and Action</h3>\n <div style=\"display: flex; gap: .5rem;\">\n <button\n mat-stroked-button\n (click)=\"onBasic('SUCCESS', 'favorite_border', 'Dismiss')\"\n >\n Action - SUCCESS\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('ERROR', 'dashboard', 'Dismiss')\"\n >\n Action - ERROR\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('INFO', 'event', 'Dismiss')\"\n >\n Action - INFO\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('WARN', 'paid', 'Dismiss')\"\n >\n Action - WARN\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('NOTIFY', 'notifications', 'Dismiss')\"\n >\n Action - NOTIFY\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('GENERAL', 'movie_filter', 'Dismiss')\"\n >\n Action - GENERAL\n </button>\n </div>\n </div>\n </div>\n }\n @default {\n <div>\n <div style=\"display: flex; gap: 1rem; flex-direction: column;\">\n <h3 style=\"flex:1; margin-bottom: 0;\">Basic Toast</h3>\n <div style=\"display: flex; gap: .5rem;\">\n <button\n mat-stroked-button\n (click)=\"onBasic('SUCCESS')\"\n >\n Basic - SUCCESS\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('ERROR')\"\n >\n Basic - ERROR\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('INFO')\"\n >\n Basic - INFO\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('WARN')\"\n >\n Basic - WARN\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('NOTIFY')\"\n >\n Basic - NOTIFY\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('GENERAL')\"\n >\n Basic - GENERAL\n </button>\n </div>\n </div>\n </div>\n }\n }\n </span>\n <div style=\"display: flex; margin-top: 1rem;\">\n <mat-radio-group [formControl]=\"position\" style=\"display: flex; gap: 2rem\">\n <mat-radio-button value=\"top\">Top Position</mat-radio-button>\n <mat-radio-button value=\"bottom\">Bottom Position</mat-radio-button>\n </mat-radio-group>\n </div>\n</div>\n\n<div style=\"margin-top: 1rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n</div>\n\n<div style=\"margin: 1rem;\">\n <button mat-stroked-button (click)=\"onInline()\" style=\"margin-bottom: 2rem;\">\n Add Inline Toast Message\n </button>\n <app-toast-message-display-inline\n [toast]=\"pickToastSample\"\n [duration]=\"5\"\n (close)=\"onClosedToast($event)\"\n ></app-toast-message-display-inline>\n</div>\n", styles: [".bold{font-size:22px;font-weight:700}\n"], dependencies: [{ kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i4.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i5.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i6.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i6.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "component", type: i7.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: ToastMessageInlineComponent, selector: "app-toast-message-display-inline", inputs: ["toast", "duration", "position"], outputs: ["close"] }, { kind: "pipe", type: i9.TitleCasePipe, name: "titlecase" }] }); }
500
- }
501
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ToastDemoComponent, decorators: [{
502
- type: Component,
503
- args: [{ selector: 'app-toast-display-demo', standalone: false, template: "<mat-toolbar style=\"display: flex;\">\n <div>Toast Message Demo</div>\n <div style=\"flex:1; text-align: end;\">\n <button\n mat-stroked-button\n [matMenuTriggerFor]=\"menu\"\n matIconPrefix\n >\n {{ type | titlecase }}\n <mat-icon>layers</mat-icon>\n </button>\n </div>\n</mat-toolbar>\n\n<mat-menu #menu=\"matMenu\">\n <button\n mat-menu-item\n (click)=\"onSelectType('basic')\"\n >\n Basic\n </button>\n <button\n mat-menu-item\n (click)=\"onSelectType('icon')\"\n >\n Icon\n </button>\n <button\n mat-menu-item\n (click)=\"onSelectType('action')\"\n >\n Action\n </button>\n</mat-menu>\n\n<div style=\"margin: 1rem;\">\n <span>\n @switch (type) {\n @case ('icon') {\n <div>\n <div style=\"display: flex; gap: 1rem; flex-direction: column;\">\n <h3 style=\"flex:1; margin-bottom: 0;\">Toast with Icon</h3>\n <div style=\"display: flex; gap: .5rem;\">\n <button\n mat-stroked-button\n (click)=\"onBasic('SUCCESS', 'favorite_border')\"\n >\n Icon - SUCCESS\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('ERROR', 'dashboard')\"\n >\n Icon - ERROR\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('INFO', 'event')\"\n >\n Icon - INFO\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('WARN', 'paid')\"\n >\n Icon - WARN\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('WARN', 'notifications')\"\n >\n Icon - NOTIFY\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('WARN', 'movie_filter')\"\n >\n Icon - GENERAL\n </button>\n </div>\n </div>\n </div>\n }\n @case ('action') {\n <div>\n <div style=\"display: flex; gap: 1rem; flex-direction: column;\">\n <h3 style=\"flex:1; margin-bottom: 0;\">Toast with Icon and Action</h3>\n <div style=\"display: flex; gap: .5rem;\">\n <button\n mat-stroked-button\n (click)=\"onBasic('SUCCESS', 'favorite_border', 'Dismiss')\"\n >\n Action - SUCCESS\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('ERROR', 'dashboard', 'Dismiss')\"\n >\n Action - ERROR\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('INFO', 'event', 'Dismiss')\"\n >\n Action - INFO\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('WARN', 'paid', 'Dismiss')\"\n >\n Action - WARN\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('NOTIFY', 'notifications', 'Dismiss')\"\n >\n Action - NOTIFY\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('GENERAL', 'movie_filter', 'Dismiss')\"\n >\n Action - GENERAL\n </button>\n </div>\n </div>\n </div>\n }\n @default {\n <div>\n <div style=\"display: flex; gap: 1rem; flex-direction: column;\">\n <h3 style=\"flex:1; margin-bottom: 0;\">Basic Toast</h3>\n <div style=\"display: flex; gap: .5rem;\">\n <button\n mat-stroked-button\n (click)=\"onBasic('SUCCESS')\"\n >\n Basic - SUCCESS\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('ERROR')\"\n >\n Basic - ERROR\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('INFO')\"\n >\n Basic - INFO\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('WARN')\"\n >\n Basic - WARN\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('NOTIFY')\"\n >\n Basic - NOTIFY\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('GENERAL')\"\n >\n Basic - GENERAL\n </button>\n </div>\n </div>\n </div>\n }\n }\n </span>\n <div style=\"display: flex; margin-top: 1rem;\">\n <mat-radio-group [formControl]=\"position\" style=\"display: flex; gap: 2rem\">\n <mat-radio-button value=\"top\">Top Position</mat-radio-button>\n <mat-radio-button value=\"bottom\">Bottom Position</mat-radio-button>\n </mat-radio-group>\n </div>\n</div>\n\n<div style=\"margin-top: 1rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n</div>\n\n<div style=\"margin: 1rem;\">\n <button mat-stroked-button (click)=\"onInline()\" style=\"margin-bottom: 2rem;\">\n Add Inline Toast Message\n </button>\n <app-toast-message-display-inline\n [toast]=\"pickToastSample\"\n [duration]=\"5\"\n (close)=\"onClosedToast($event)\"\n ></app-toast-message-display-inline>\n</div>\n", styles: [".bold{font-size:22px;font-weight:700}\n"] }]
504
- }] });
505
-
506
343
  class ToastMessageDisplayModule {
507
344
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ToastMessageDisplayModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
508
345
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: ToastMessageDisplayModule, declarations: [SafeHtmlPipe,
509
346
  ToastUIComponent,
510
- ToastDemoComponent,
511
347
  ToastMessageInlineComponent], imports: [CommonModule,
512
348
  ReactiveFormsModule,
513
349
  MatIconModule,
@@ -517,7 +353,7 @@ class ToastMessageDisplayModule {
517
353
  MatMenuModule,
518
354
  MatRadioModule,
519
355
  MatDividerModule], exports: [ToastUIComponent,
520
- ToastDemoComponent] }); }
356
+ ToastMessageInlineComponent] }); }
521
357
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ToastMessageDisplayModule, imports: [CommonModule,
522
358
  ReactiveFormsModule,
523
359
  MatIconModule,
@@ -545,16 +381,63 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
545
381
  declarations: [
546
382
  SafeHtmlPipe,
547
383
  ToastUIComponent,
548
- ToastDemoComponent,
549
384
  ToastMessageInlineComponent,
550
385
  ],
551
386
  exports: [
552
387
  ToastUIComponent,
553
- ToastDemoComponent,
388
+ ToastMessageInlineComponent,
554
389
  ],
555
390
  }]
556
391
  }] });
557
392
 
393
+ class ToastMessageDisplayService {
394
+ constructor() {
395
+ this.snackBar = inject(MatSnackBar);
396
+ this.toastQueue = [];
397
+ this.isToastVisible = false;
398
+ this.defaultDuration = 3;
399
+ }
400
+ toastMessage(options = ToastDisplay.adapt(), duration, vertical) {
401
+ this.toastQueue.push({ options, duration, vertical });
402
+ this.showNextToast();
403
+ }
404
+ showNextToast() {
405
+ if (this.isToastVisible || this.toastQueue.length === 0)
406
+ return;
407
+ const { options, duration, vertical } = this.toastQueue.shift();
408
+ const vertPosition = (vertical) ? vertical : 'top';
409
+ const durationDismiss = (!options.action) ? this.defaultDuration : duration;
410
+ const displayOptions = ToastOptions.adapt({
411
+ duration: durationDismiss,
412
+ horizontalPosition: 'center',
413
+ verticalPosition: vertPosition,
414
+ data: options,
415
+ });
416
+ this.isToastVisible = true;
417
+ this.snackBarRef = this.snackBar.openFromComponent(ToastUIComponent, displayOptions);
418
+ if (this.snackBarRef) {
419
+ this.snackBarRef
420
+ .afterDismissed()
421
+ .pipe(take(1))
422
+ .subscribe(() => {
423
+ this.isToastVisible = false;
424
+ this.showNextToast();
425
+ });
426
+ }
427
+ else {
428
+ console.error('Snackbar reference is undefined. Unable to subscribe to dismissal event.');
429
+ }
430
+ }
431
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ToastMessageDisplayService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
432
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ToastMessageDisplayService, providedIn: 'root' }); }
433
+ }
434
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ToastMessageDisplayService, decorators: [{
435
+ type: Injectable,
436
+ args: [{
437
+ providedIn: 'root'
438
+ }]
439
+ }] });
440
+
558
441
  /*
559
442
  * Public API Surface of toast-message
560
443
  */
@@ -563,5 +446,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
563
446
  * Generated bundle index. Do not edit.
564
447
  */
565
448
 
566
- export { HorizontalAlignment, ToastColors, ToastDemoComponent, ToastDisplay, ToastMessage, ToastMessageDisplayModule, ToastMessageDisplayService, ToastMessageInlineComponent, ToastOptions, ToastUIComponent, VerticalAlignment };
449
+ export { HorizontalAlignment, ToastColors, ToastDisplay, ToastMessage, ToastMessageDisplayModule, ToastMessageDisplayService, ToastMessageInlineComponent, ToastOptions, ToastUIComponent, VerticalAlignment };
567
450
  //# sourceMappingURL=toast-message-display.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"toast-message-display.mjs","sources":["../../../projects/toast-message-display/src/lib/models/toast-colors.enum.ts","../../../projects/toast-message-display/src/lib/models/toast-display-model.ts","../../../projects/toast-message-display/src/lib/utils/color-conversion.service.ts","../../../projects/toast-message-display/src/lib/utils/text-color.service.ts","../../../projects/toast-message-display/src/lib/pipes/safe-html.pipe.ts","../../../projects/toast-message-display/src/lib/toast-ui/toast-ui.component.ts","../../../projects/toast-message-display/src/lib/toast-ui/toast-ui.component.html","../../../projects/toast-message-display/src/lib/models/horizontal-alignment.enum.ts","../../../projects/toast-message-display/src/lib/models/vertical-alignment.enum.ts","../../../projects/toast-message-display/src/lib/models/toast-message.model.ts","../../../projects/toast-message-display/src/lib/models/toast-options.model.ts","../../../projects/toast-message-display/src/lib/services/toast-message.service.ts","../../../projects/toast-message-display/src/lib/toast-message-inline/toast-message-inline.component.ts","../../../projects/toast-message-display/src/lib/toast-message-inline/toast-message-inline.component.html","../../../projects/toast-message-display/src/lib/toast-demo/toast-demo.component.ts","../../../projects/toast-message-display/src/lib/toast-demo/toast-demo.component.html","../../../projects/toast-message-display/src/lib/toast-message.module.ts","../../../projects/toast-message-display/src/public-api.ts","../../../projects/toast-message-display/src/toast-message-display.ts"],"sourcesContent":["export enum ToastColors {\n SUCCESS = '#006B31', // green\n ERROR = '#CC0000', // red\n INFO = '#02559F', // grey\n WARN = '#FFC20E', // orange\n NOTIFY = '#080808', // black\n GENERAL = '#f5f5f5', // light\n}\n","import { ToastColors } from \"./toast-colors.enum\";\n\nexport interface ToastDisplayInterface {\n id?: string;\n message: string;\n action?: string;\n color: ToastColors;\n icon?: string;\n}\n\nexport class ToastDisplay implements ToastDisplayInterface {\n\n constructor(\n public id?: string,\n public message = 'Sample message',\n public action?: string,\n public color = ToastColors.INFO,\n public icon?: string,\n ) {}\n\n static adapt(item?: any) {\n return new ToastDisplay(\n (item?.id) ? item.id : this.randomNumbers(8),\n item?.message,\n item?.action,\n item?.color,\n item?.icon,\n );\n }\n\n static randomNumbers(length: number) {\n return this.generateRandom('0123456789', length)\n }\n\n static generateRandom(randomChars: string, length: number) {\n\n var result = ''\n for ( var i = 0; i < length; i++ ) {\n result += randomChars.charAt(Math.floor(Math.random() * randomChars.length))\n }\n return result\n\n }\n\n}\n","import { Injectable } from '@angular/core'\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ColorConversionService {\r\n\r\n rgbToHex(rgb: number[]): string {\r\n const [r, g, b] = rgb\r\n const componentToHex = (c: number) => {\r\n const hex = c.toString(16)\r\n return hex.length === 1 ? \"0\" + hex : hex\r\n }\r\n const hexR = componentToHex(r)\r\n const hexG = componentToHex(g)\r\n const hexB = componentToHex(b)\r\n return \"#\" + hexR + hexG + hexB\r\n }\r\n\r\n hexToRgb(hex: string) {\r\n\r\n hex = (hex.length === 3) ? hex + hex : hex\r\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex)\r\n\r\n return result ? [\r\n parseInt(result[1], 16),\r\n parseInt(result[2], 16),\r\n parseInt(result[3], 16)\r\n ] : []\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core'\r\nimport { ColorConversionService } from './color-conversion.service'\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TextColorService {\r\n\r\n constructor(\r\n private colorConversionService: ColorConversionService\r\n ) {}\r\n\r\n /**\r\n * Determines the appropriate text color (light or dark) based on the background color.\r\n *\r\n * @param bgColor - The background color to use for the calculation.\r\n * @param lightColor - The light color to use if the background is dark.\r\n * @param darkColor - The dark color to use if the background is light.\r\n * @returns The appropriate text color (light or dark) based on the background color.\r\n */\r\n textColorForBgColor(bgColor: string, lightColor: string, darkColor: string) {\r\n\r\n const UIColors = this.fixColor(bgColor)\r\n\r\n const r = UIColors[0]\r\n const g = UIColors[1]\r\n const b = UIColors[2]\r\n\r\n return ((r*0.299 + g*0.587 + b*0.114) > 149) ? darkColor : lightColor;\r\n\r\n }\r\n\r\n /**\r\n * Determines whether the first color is darker than the second color.\r\n *\r\n * @param color1 - The first color to compare.\r\n * @param color2 - The second color to compare.\r\n * @returns The darker of the two colors.\r\n */\r\n isColorDarker(color1: string, color2: string) {\r\n const newColor1 = this.fixColor(color1);\r\n const newColor2 = this.fixColor(color2);\r\n\r\n const luminance1 = this.calculateLuminance(\r\n newColor1[0],\r\n newColor1[1],\r\n newColor1[2]\r\n );\r\n const luminance2 = this.calculateLuminance(\r\n newColor2[0],\r\n newColor2[1],\r\n newColor2[2]\r\n );\r\n\r\n return luminance1 > luminance2 ? color2 : color1;\r\n }\r\n\r\n calculateLuminance(r: number, g: number, b: number): number {\r\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\r\n }\r\n\r\n /**\r\n * Fixes the provided color string by ensuring it is in a valid hexadecimal format.\r\n * If the input color is a hexadecimal string, it will be normalized to a 6-digit format.\r\n * If the input color is not a hexadecimal string, it will be converted to an RGB array.\r\n *\r\n * @param color - The color string to be fixed.\r\n * @returns An array of RGB values, or the normalized hexadecimal color string.\r\n */\r\n fixColor(color: string) {\r\n let newColor = color;\r\n\r\n if (color.includes(\"#\")) {\r\n newColor = color.slice(1);\r\n newColor =\r\n newColor.length === 3\r\n ? \"#\" +\r\n newColor\r\n .split(\"\")\r\n .map((hex) => hex + hex)\r\n .join(\"\")\r\n : \"#\" + newColor;\r\n } else {\r\n newColor = this.standardize_color(color);\r\n }\r\n\r\n const Reg_Exp = /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/;\r\n const colorIsHex = Reg_Exp.test(newColor);\r\n\r\n const UIColors = colorIsHex\r\n ? this.colorConversionService.hexToRgb(newColor)\r\n : newColor.match(/\\d+/g)?.map((item) => parseInt(item)) || [];\r\n\r\n return UIColors;\r\n }\r\n\r\n /**\r\n * Converts the color representation of the provided string into HEX value.\r\n *\r\n * @param str - The color string to be standardized - 'whitesmoke'.\r\n * @returns The standardized color string - #DEDEDE.\r\n */\r\n standardize_color(str: string): string {\r\n const ctx = document.createElement(\"canvas\").getContext(\"2d\");\r\n\r\n if (ctx) {\r\n ctx.fillStyle = str;\r\n }\r\n\r\n return ctx?.fillStyle as string;\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform, inject } from '@angular/core';\nimport {DomSanitizer} from \"@angular/platform-browser\";\n\n@Pipe({\n name: 'safeHtml',\n standalone: false\n})\nexport class SafeHtmlPipe implements PipeTransform {\n\n private sanitizer = inject(DomSanitizer)\n\n transform(html: string) {\n return this.sanitizer.bypassSecurityTrustHtml(html)\n }\n\n}\n","import { Component, EventEmitter, Inject, inject, Input, OnInit, Output, VERSION, ViewEncapsulation } from '@angular/core';\nimport { MAT_SNACK_BAR_DATA, MatSnackBar } from '@angular/material/snack-bar';\n\nimport { ToastDisplay } from '../models/toast-display-model';\nimport { TextColorService } from '../utils';\n\n@Component({\n selector: 'app-toast-ui',\n templateUrl: './toast-ui.component.html',\n styleUrls: ['./toast-ui.component.scss'],\n encapsulation: ViewEncapsulation.None,\n styles: [`\n .mat-mdc-snack-bar-container {\n --mat-snackbar-container-color: var(--toast-bg-color, #fff);\n --mat-mdc-snack-bar-button-color: var(--toast-text-color, #fff);\n --mat-snackbar-supporting-text-color: var(--toast-text-color, #000);\n }\n `],\n standalone: false\n})\nexport class ToastUIComponent implements OnInit {\n\n ngVersion = parseInt(VERSION.full.split('.')[0], 10)\n\n @Output() close = new EventEmitter<ToastDisplay>();\n\n textColorService = inject(TextColorService);\n private snackBar = inject(MatSnackBar);\n\n @Input() options = ToastDisplay.adapt();\n\n constructor(\n @Inject(MAT_SNACK_BAR_DATA)\n public data: ToastDisplay\n ) {\n this.options = ToastDisplay.adapt(data)\n }\n\n ngOnInit() {\n\n if (this.ngVersion >= 15) {\n\n const hostElement = document.querySelector('.mat-mdc-snack-bar-container')\n\n if (hostElement) {\n hostElement.setAttribute('style', `\n --toast-bg-color: ${this.color};\n --toast-text-color: ${this.textColor};\n `)\n }\n\n } else {\n\n document.documentElement.style.setProperty('--toast-bg-color', this.color);\n document.documentElement.style.setProperty('--toast-text-color', this.textColor);\n\n const hostElement = document.querySelector('.mat-snack-bar-container') as HTMLElement;\n\n if (hostElement) {\n hostElement.style.backgroundColor = this.color;\n hostElement.style.color = this.textColor;\n\n const actionButton = hostElement.querySelector('.mat-button, .mat-snack-bar-action') as HTMLElement;\n if (actionButton) {\n actionButton.style.color = this.textColor;\n }\n }\n\n }\n\n }\n\n get color() {\n return this.options.color || '#2196f3';\n }\n\n get textColor() {\n return this.textColorService.textColorForBgColor(\n this.color,\n '#FFFFFF',\n '#000000'\n );\n }\n\n onCloseToast(options?: ToastDisplay) {\n this.snackBar.dismiss()\n this.close.emit(options)\n }\n}\n","<div\n class=\"toast-grid-container\"\n [class.has-icon]=\"options.icon\"\n [class.has-action]=\"options.action\"\n [style.background-color]=\"(options) ? options.color : ''\"\n >\n @if (options.icon) {\n <mat-icon\n class=\"toast-icon\"\n [style.color]=\"textColor\"\n >\n {{ options.icon }}\n </mat-icon>\n }\n\n <div\n class=\"toast-message\"\n [style.color]=\"textColor\"\n [innerHTML]=\"options.message | safeHtml\"\n >\n </div>\n\n @if (options.action) {\n <button\n class=\"toast-action-button\"\n mat-button\n (click)=\"onCloseToast(options)\"\n [style.color]=\"textColor\"\n >\n @if (options.action !== '-') {\n {{ options.action }}\n } @else {\n <mat-icon>close</mat-icon>\n }\n </button>\n }\n</div>\n","export enum HorizontalAlignment {\n LEFT = 'left',\n RIGHT = 'right',\n CENTER = 'center',\n}\n","export enum VerticalAlignment {\n TOP = 'top',\n BOTTOM = 'bottom',\n}\n","export interface ToastMessageInterface {\n error: string;\n action: string;\n icon: string;\n}\n\nexport class ToastMessage implements ToastMessageInterface {\n constructor(\n public error = '',\n public action = '',\n public icon = 'error',\n ) {}\n\n static adapt(item?: any): ToastMessageInterface {\n return new ToastMessage(\n item?.error,\n item?.action,\n item?.icon,\n )\n\n }\n}\n","import { MatSnackBarVerticalPosition } from \"@angular/material/snack-bar\";\nimport { HorizontalAlignment } from \"./horizontal-alignment.enum\";\nimport { ToastDisplay } from \"./toast-display-model\";\nimport { VerticalAlignment } from \"./vertical-alignment.enum\";\n\nexport interface ToastOptionsInterface {\n duration?: number\n horizontalPosition?: HorizontalAlignment\n verticalPosition?: MatSnackBarVerticalPosition\n data?: ToastDisplay\n}\n\nexport class ToastOptions implements ToastOptionsInterface {\n\n constructor(\n public duration?: number,\n public horizontalPosition = HorizontalAlignment.CENTER,\n public verticalPosition = VerticalAlignment.TOP,\n public data?: ToastDisplay\n ) {}\n\n static adapt(item?: any): ToastOptionsInterface {\n\n if(item?.duration) item.duration = item.duration * 1000\n\n return new ToastOptions(\n item?.duration,\n item?.horizontalPosition,\n item?.verticalPosition,\n item?.data ? ToastDisplay.adapt(item.data) : ToastDisplay.adapt()\n )\n }\n\n}\n","import { inject, Injectable } from '@angular/core';\nimport { MatSnackBar, MatSnackBarRef, MatSnackBarVerticalPosition } from '@angular/material/snack-bar';\nimport { ToastUIComponent } from '../toast-ui/toast-ui.component';\nimport { ToastOptions } from '../models/toast-options.model';\nimport { VerticalAlignment } from '../models/vertical-alignment.enum';\nimport { ToastDisplay } from '../models/toast-display-model';\nimport { take } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ToastMessageDisplayService {\n\n private snackBar = inject(MatSnackBar);\n\n private toastQueue: { options: ToastDisplay, duration?: number, vertical?: VerticalAlignment }[] = [];\n private isToastVisible = false;\n\n defaultDuration = 3;\n\n snackBarRef: MatSnackBarRef<any> | undefined;\n\n toastMessage(options = ToastDisplay.adapt(), duration?: number, vertical?: VerticalAlignment) {\n this.toastQueue.push({ options, duration, vertical });\n this.showNextToast();\n }\n\n private showNextToast() {\n\n if (this.isToastVisible || this.toastQueue.length === 0) return\n\n const { options, duration, vertical } = this.toastQueue.shift()!\n\n const vertPosition: MatSnackBarVerticalPosition = (vertical) ? vertical : 'top'\n\n const durationDismiss = (!options.action) ? this.defaultDuration : duration\n\n const displayOptions = ToastOptions.adapt({\n duration: durationDismiss,\n horizontalPosition: 'center',\n verticalPosition: vertPosition,\n data: options,\n })\n\n this.isToastVisible = true;\n this.snackBarRef = this.snackBar.openFromComponent(ToastUIComponent, displayOptions);\n\n if (this.snackBarRef) {\n this.snackBarRef\n .afterDismissed()\n .pipe(take(1))\n .subscribe(() => {\n this.isToastVisible = false;\n this.showNextToast();\n });\n } else {\n console.error('Snackbar reference is undefined. Unable to subscribe to dismissal event.');\n }\n\n }\n}\n","import { Component, EventEmitter, inject, Input, OnInit, Output } from '@angular/core';\nimport { TextColorService } from '../utils';\nimport { ToastDisplay, VerticalAlignment } from '../models';\n\n@Component({\n selector: 'app-toast-message-display-inline',\n templateUrl: './toast-message-inline.component.html',\n styleUrls: ['./toast-message-inline.component.scss'],\n standalone: false\n})\nexport class ToastMessageInlineComponent implements OnInit {\n\n @Output() close = new EventEmitter<ToastDisplay>();\n\n textColorService = inject(TextColorService)\n\n toastList: ToastDisplay[] = []\n\n dismissToasts: any[] = []\n\n @Input() set toast(value: any) {\n\n if (!value) return\n const toast = ToastDisplay.adapt(value)\n\n if (!toast.action) {\n this.dismissToasts.push(toast)\n this.expireTime(toast)\n }\n\n this.toastList.push(toast)\n\n }\n\n get option() {\n return (this.toastList.length > 0) ? this.toastList[0] : null\n }\n\n @Input() duration = -1\n @Input() position: VerticalAlignment = VerticalAlignment.TOP\n\n get color() {\n return (this.option) ? this.option.color : ''\n }\n\n get textColor() {\n return (this.option) ? this.textColorService.textColorForBgColor(this.option.color, '#FFFFFF', '#000000') : ''\n }\n\n ngOnInit() {\n document.documentElement.style.setProperty('--snackbar-color', this.color)\n }\n\n onCloseToast(toast?: ToastDisplay) {\n this.toastList = this.toastList.filter(item => item.id !== toast?.id)\n this.close.emit(toast)\n }\n\n expireTime(toast: any) {\n const boundRemove = this.removeToast.bind(this, toast)\n setTimeout(boundRemove, 3000)\n }\n\n removeToast(toast: any) {\n this.dismissToasts = this.dismissToasts.filter(t => t.id !== toast.id)\n this.toastList = this.toastList.filter(t => t.id !== toast.id)\n }\n\n}\n","<div style=\"display: flex; gap: .5rem; flex-direction: column;\">\n @for (toast of toastList; track toast) {\n <div [style.background-color]=\"toast.color\" class=\"inline\">\n <app-toast-ui\n [options]=\"toast\"\n style=\"flex: 1;\"\n (close)=\"onCloseToast(toast)\"\n ></app-toast-ui>\n </div>\n }\n</div>\n","import { Component, inject } from '@angular/core';\nimport { ToastColors, ToastDisplay, VerticalAlignment } from '../models';\nimport { FormBuilder } from '@angular/forms';\n\nimport { ToastMessageDisplayService } from '../services/toast-message.service';\n\n@Component({\n selector: 'app-toast-display-demo',\n templateUrl: './toast-demo.component.html',\n styleUrls: ['./toast-demo.component.scss'],\n standalone: false\n})\nexport class ToastDemoComponent {\n\n random = () => {\n const typedArray = new Uint8Array(1)\n const randomValue = crypto.getRandomValues(typedArray)[0]\n const randomFloat = randomValue / Math.pow(2, 8)\n return randomFloat\n }\n\n randomNumber = (min: number, max: number) => {\n return Math.floor(this.random() * max) + min\n }\n\n fb = inject(FormBuilder)\n toastMessageDisplayService = inject(ToastMessageDisplayService)\n\n type = 'Basic'\n\n position = this.fb.control('top')\n\n icons = [\n 'favorite_border',\n 'dashboard',\n 'event',\n 'paid',\n 'notifications',\n 'movie_filter',\n ]\n\n toastSamples = [\n {\n message: `This is a simple toast message. This is a <span style=\"font-size: 22px\">simple toast message</span>. This is a simple toast message. This is a simple toast message`,\n color: ToastColors.ERROR,\n action: \"Ok\"\n },\n {\n message: 'Sample message',\n color: ToastColors.INFO,\n icon: this.icons[0]\n },\n {\n message: 'Sample message',\n color: ToastColors.WARN,\n icon: this.icons[1]\n },\n {\n message: `This is a simple toast message. This is a <span style=\"font-size: 22px\">simple toast message</span>. This is a simple toast message. This is a simple toast message`,\n color: ToastColors.NOTIFY,\n icon: this.icons[2],\n action: \"Dismiss\"\n },\n {\n message: 'Sample message',\n color: ToastColors.GENERAL,\n action: \"Dismiss\"\n },\n {\n message: `This is a simple toast message. This is a <span style=\"font-size: 22px\">simple toast message</span>. This is a simple toast message. This is a simple toast message`,\n color: ToastColors.SUCCESS,\n action: \"-\"\n },\n ]\n\n pickToastSample?: ToastDisplay\n\n onSelectType(type: string) {\n this.type = type\n }\n\n onBasic(type: string, icon?: string, action?: string) {\n switch (type) {\n case 'ERROR':\n this.presentToast(ToastColors.ERROR, icon, action)\n break;\n case 'INFO':\n this.presentToast(ToastColors.INFO, icon, action)\n break;\n case 'WARN':\n this.presentToast(ToastColors.WARN, icon, action)\n break;\n case 'NOTIFY':\n this.presentToast(ToastColors.NOTIFY, icon, action)\n break;\n case 'GENERAL':\n this.presentToast(ToastColors.GENERAL, icon, action)\n break;\n default:\n this.presentToast(ToastColors.SUCCESS, icon, action)\n break;\n }\n }\n\n presentToast(color: ToastColors, icon?: string, action?: string) {\n\n const options = ToastDisplay.adapt({\n message: `This is a simple toast message. <span style=\"font-size: 22px\">simple toast message</span>. This is a simple toast message. This is a simple toast message`,\n color,\n icon,\n action\n })\n\n const toastPosition = (this.position.value === 'top') ? VerticalAlignment.TOP : VerticalAlignment.BOTTOM\n this.toastMessageDisplayService.toastMessage(options, -1, toastPosition)\n }\n\n onInline() {\n const pick = this.randomNumber(0, this.toastSamples.length-1)\n this.pickToastSample = this.toastSamples[pick]\n }\n\n onClosedToast(toast?: ToastDisplay) {\n console.log(toast)\n }\n\n}\n","<mat-toolbar style=\"display: flex;\">\n <div>Toast Message Demo</div>\n <div style=\"flex:1; text-align: end;\">\n <button\n mat-stroked-button\n [matMenuTriggerFor]=\"menu\"\n matIconPrefix\n >\n {{ type | titlecase }}\n <mat-icon>layers</mat-icon>\n </button>\n </div>\n</mat-toolbar>\n\n<mat-menu #menu=\"matMenu\">\n <button\n mat-menu-item\n (click)=\"onSelectType('basic')\"\n >\n Basic\n </button>\n <button\n mat-menu-item\n (click)=\"onSelectType('icon')\"\n >\n Icon\n </button>\n <button\n mat-menu-item\n (click)=\"onSelectType('action')\"\n >\n Action\n </button>\n</mat-menu>\n\n<div style=\"margin: 1rem;\">\n <span>\n @switch (type) {\n @case ('icon') {\n <div>\n <div style=\"display: flex; gap: 1rem; flex-direction: column;\">\n <h3 style=\"flex:1; margin-bottom: 0;\">Toast with Icon</h3>\n <div style=\"display: flex; gap: .5rem;\">\n <button\n mat-stroked-button\n (click)=\"onBasic('SUCCESS', 'favorite_border')\"\n >\n Icon - SUCCESS\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('ERROR', 'dashboard')\"\n >\n Icon - ERROR\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('INFO', 'event')\"\n >\n Icon - INFO\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('WARN', 'paid')\"\n >\n Icon - WARN\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('WARN', 'notifications')\"\n >\n Icon - NOTIFY\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('WARN', 'movie_filter')\"\n >\n Icon - GENERAL\n </button>\n </div>\n </div>\n </div>\n }\n @case ('action') {\n <div>\n <div style=\"display: flex; gap: 1rem; flex-direction: column;\">\n <h3 style=\"flex:1; margin-bottom: 0;\">Toast with Icon and Action</h3>\n <div style=\"display: flex; gap: .5rem;\">\n <button\n mat-stroked-button\n (click)=\"onBasic('SUCCESS', 'favorite_border', 'Dismiss')\"\n >\n Action - SUCCESS\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('ERROR', 'dashboard', 'Dismiss')\"\n >\n Action - ERROR\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('INFO', 'event', 'Dismiss')\"\n >\n Action - INFO\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('WARN', 'paid', 'Dismiss')\"\n >\n Action - WARN\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('NOTIFY', 'notifications', 'Dismiss')\"\n >\n Action - NOTIFY\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('GENERAL', 'movie_filter', 'Dismiss')\"\n >\n Action - GENERAL\n </button>\n </div>\n </div>\n </div>\n }\n @default {\n <div>\n <div style=\"display: flex; gap: 1rem; flex-direction: column;\">\n <h3 style=\"flex:1; margin-bottom: 0;\">Basic Toast</h3>\n <div style=\"display: flex; gap: .5rem;\">\n <button\n mat-stroked-button\n (click)=\"onBasic('SUCCESS')\"\n >\n Basic - SUCCESS\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('ERROR')\"\n >\n Basic - ERROR\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('INFO')\"\n >\n Basic - INFO\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('WARN')\"\n >\n Basic - WARN\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('NOTIFY')\"\n >\n Basic - NOTIFY\n </button>\n <button\n mat-stroked-button\n (click)=\"onBasic('GENERAL')\"\n >\n Basic - GENERAL\n </button>\n </div>\n </div>\n </div>\n }\n }\n </span>\n <div style=\"display: flex; margin-top: 1rem;\">\n <mat-radio-group [formControl]=\"position\" style=\"display: flex; gap: 2rem\">\n <mat-radio-button value=\"top\">Top Position</mat-radio-button>\n <mat-radio-button value=\"bottom\">Bottom Position</mat-radio-button>\n </mat-radio-group>\n </div>\n</div>\n\n<div style=\"margin-top: 1rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n</div>\n\n<div style=\"margin: 1rem;\">\n <button mat-stroked-button (click)=\"onInline()\" style=\"margin-bottom: 2rem;\">\n Add Inline Toast Message\n </button>\n <app-toast-message-display-inline\n [toast]=\"pickToastSample\"\n [duration]=\"5\"\n (close)=\"onClosedToast($event)\"\n ></app-toast-message-display-inline>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatDividerModule } from '@angular/material/divider';\n\nimport { ToastUIComponent } from './toast-ui/toast-ui.component';\nimport { ToastDemoComponent } from './toast-demo/toast-demo.component';\n\nimport { SafeHtmlPipe } from './pipes/safe-html.pipe';\nimport { ToastMessageInlineComponent } from '../public-api';\n\n@NgModule({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatIconModule,\n MatSnackBarModule,\n MatButtonModule,\n MatToolbarModule,\n MatMenuModule,\n MatRadioModule,\n MatDividerModule,\n ],\n declarations: [\n SafeHtmlPipe,\n ToastUIComponent,\n ToastDemoComponent,\n ToastMessageInlineComponent,\n ],\n exports: [\n ToastUIComponent,\n ToastDemoComponent,\n ],\n\n})\nexport class ToastMessageDisplayModule { }\n","/*\n * Public API Surface of toast-message\n */\n\nexport * from \"./lib/toast-message.module\"\nexport * from \"./lib/toast-ui/toast-ui.component\"\n\nexport * from './lib/models';\n\nexport * from './lib/toast-demo/toast-demo.component';\nexport * from './lib/toast-message-inline/toast-message-inline.component';\n\nexport * from './lib/services/toast-message.service'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ColorConversionService","i3.SafeHtmlPipe","i1.ToastUIComponent","i1","i2","i3","i8.ToastMessageInlineComponent"],"mappings":"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"}
1
+ {"version":3,"file":"toast-message-display.mjs","sources":["../../../projects/toast-message-display/src/lib/models/toast-colors.enum.ts","../../../projects/toast-message-display/src/lib/models/toast-display-model.ts","../../../projects/toast-message-display/src/lib/utils/color-conversion.service.ts","../../../projects/toast-message-display/src/lib/utils/text-color.service.ts","../../../projects/toast-message-display/src/lib/pipes/safe-html.pipe.ts","../../../projects/toast-message-display/src/lib/toast-ui/toast-ui.component.ts","../../../projects/toast-message-display/src/lib/toast-ui/toast-ui.component.html","../../../projects/toast-message-display/src/lib/models/horizontal-alignment.enum.ts","../../../projects/toast-message-display/src/lib/models/vertical-alignment.enum.ts","../../../projects/toast-message-display/src/lib/models/toast-message.model.ts","../../../projects/toast-message-display/src/lib/models/toast-options.model.ts","../../../projects/toast-message-display/src/lib/toast-message-inline/toast-message-inline.component.ts","../../../projects/toast-message-display/src/lib/toast-message-inline/toast-message-inline.component.html","../../../projects/toast-message-display/src/lib/toast-message.module.ts","../../../projects/toast-message-display/src/lib/services/toast-message.service.ts","../../../projects/toast-message-display/src/public-api.ts","../../../projects/toast-message-display/src/toast-message-display.ts"],"sourcesContent":["export enum ToastColors {\n SUCCESS = '#006B31', // green\n ERROR = '#CC0000', // red\n INFO = '#02559F', // grey\n WARN = '#FFC20E', // orange\n NOTIFY = '#080808', // black\n GENERAL = '#f5f5f5', // light\n}\n","import { ToastColors } from \"./toast-colors.enum\";\n\nexport interface ToastDisplayInterface {\n id?: string;\n message: string;\n action?: string;\n color: ToastColors;\n icon?: string;\n}\n\nexport class ToastDisplay implements ToastDisplayInterface {\n\n constructor(\n public id?: string,\n public message = 'Sample message',\n public action?: string,\n public color = ToastColors.INFO,\n public icon?: string,\n ) {}\n\n static adapt(item?: any) {\n return new ToastDisplay(\n (item?.id) ? item.id : this.randomNumbers(8),\n item?.message,\n item?.action,\n item?.color,\n item?.icon,\n );\n }\n\n static randomNumbers(length: number) {\n return this.generateRandom('0123456789', length)\n }\n\n static generateRandom(randomChars: string, length: number) {\n\n var result = ''\n for ( var i = 0; i < length; i++ ) {\n result += randomChars.charAt(Math.floor(Math.random() * randomChars.length))\n }\n return result\n\n }\n\n}\n","import { Injectable } from '@angular/core'\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ColorConversionService {\r\n\r\n rgbToHex(rgb: number[]): string {\r\n const [r, g, b] = rgb\r\n const componentToHex = (c: number) => {\r\n const hex = c.toString(16)\r\n return hex.length === 1 ? \"0\" + hex : hex\r\n }\r\n const hexR = componentToHex(r)\r\n const hexG = componentToHex(g)\r\n const hexB = componentToHex(b)\r\n return \"#\" + hexR + hexG + hexB\r\n }\r\n\r\n hexToRgb(hex: string) {\r\n\r\n hex = (hex.length === 3) ? hex + hex : hex\r\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex)\r\n\r\n return result ? [\r\n parseInt(result[1], 16),\r\n parseInt(result[2], 16),\r\n parseInt(result[3], 16)\r\n ] : []\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core'\r\nimport { ColorConversionService } from './color-conversion.service'\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TextColorService {\r\n\r\n constructor(\r\n private colorConversionService: ColorConversionService\r\n ) {}\r\n\r\n /**\r\n * Determines the appropriate text color (light or dark) based on the background color.\r\n *\r\n * @param bgColor - The background color to use for the calculation.\r\n * @param lightColor - The light color to use if the background is dark.\r\n * @param darkColor - The dark color to use if the background is light.\r\n * @returns The appropriate text color (light or dark) based on the background color.\r\n */\r\n textColorForBgColor(bgColor: string, lightColor: string, darkColor: string) {\r\n\r\n const UIColors = this.fixColor(bgColor)\r\n\r\n const r = UIColors[0]\r\n const g = UIColors[1]\r\n const b = UIColors[2]\r\n\r\n return ((r*0.299 + g*0.587 + b*0.114) > 149) ? darkColor : lightColor;\r\n\r\n }\r\n\r\n /**\r\n * Determines whether the first color is darker than the second color.\r\n *\r\n * @param color1 - The first color to compare.\r\n * @param color2 - The second color to compare.\r\n * @returns The darker of the two colors.\r\n */\r\n isColorDarker(color1: string, color2: string) {\r\n const newColor1 = this.fixColor(color1);\r\n const newColor2 = this.fixColor(color2);\r\n\r\n const luminance1 = this.calculateLuminance(\r\n newColor1[0],\r\n newColor1[1],\r\n newColor1[2]\r\n );\r\n const luminance2 = this.calculateLuminance(\r\n newColor2[0],\r\n newColor2[1],\r\n newColor2[2]\r\n );\r\n\r\n return luminance1 > luminance2 ? color2 : color1;\r\n }\r\n\r\n calculateLuminance(r: number, g: number, b: number): number {\r\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\r\n }\r\n\r\n /**\r\n * Fixes the provided color string by ensuring it is in a valid hexadecimal format.\r\n * If the input color is a hexadecimal string, it will be normalized to a 6-digit format.\r\n * If the input color is not a hexadecimal string, it will be converted to an RGB array.\r\n *\r\n * @param color - The color string to be fixed.\r\n * @returns An array of RGB values, or the normalized hexadecimal color string.\r\n */\r\n fixColor(color: string) {\r\n let newColor = color;\r\n\r\n if (color.includes(\"#\")) {\r\n newColor = color.slice(1);\r\n newColor =\r\n newColor.length === 3\r\n ? \"#\" +\r\n newColor\r\n .split(\"\")\r\n .map((hex) => hex + hex)\r\n .join(\"\")\r\n : \"#\" + newColor;\r\n } else {\r\n newColor = this.standardize_color(color);\r\n }\r\n\r\n const Reg_Exp = /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/;\r\n const colorIsHex = Reg_Exp.test(newColor);\r\n\r\n const UIColors = colorIsHex\r\n ? this.colorConversionService.hexToRgb(newColor)\r\n : newColor.match(/\\d+/g)?.map((item) => parseInt(item)) || [];\r\n\r\n return UIColors;\r\n }\r\n\r\n /**\r\n * Converts the color representation of the provided string into HEX value.\r\n *\r\n * @param str - The color string to be standardized - 'whitesmoke'.\r\n * @returns The standardized color string - #DEDEDE.\r\n */\r\n standardize_color(str: string): string {\r\n const ctx = document.createElement(\"canvas\").getContext(\"2d\");\r\n\r\n if (ctx) {\r\n ctx.fillStyle = str;\r\n }\r\n\r\n return ctx?.fillStyle as string;\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform, inject } from '@angular/core';\nimport {DomSanitizer} from \"@angular/platform-browser\";\n\n@Pipe({\n name: 'safeHtml',\n standalone: false\n})\nexport class SafeHtmlPipe implements PipeTransform {\n\n private sanitizer = inject(DomSanitizer)\n\n transform(html: string) {\n return this.sanitizer.bypassSecurityTrustHtml(html)\n }\n\n}\n","import { Component, EventEmitter, Inject, inject, Input, OnInit, Output, VERSION, ViewEncapsulation } from '@angular/core';\nimport { MAT_SNACK_BAR_DATA, MatSnackBar } from '@angular/material/snack-bar';\n\nimport { ToastDisplay } from '../models/toast-display-model';\nimport { TextColorService } from '../utils';\n\n@Component({\n selector: 'app-toast-ui',\n templateUrl: './toast-ui.component.html',\n styleUrls: ['./toast-ui.component.scss'],\n encapsulation: ViewEncapsulation.None,\n styles: [`\n .mat-mdc-snack-bar-container {\n --mat-snackbar-container-color: var(--toast-bg-color, #fff);\n --mat-mdc-snack-bar-button-color: var(--toast-text-color, #fff);\n --mat-snackbar-supporting-text-color: var(--toast-text-color, #000);\n }\n `],\n standalone: false\n})\nexport class ToastUIComponent implements OnInit {\n\n ngVersion = parseInt(VERSION.full.split('.')[0], 10)\n\n @Output() close = new EventEmitter<ToastDisplay>();\n\n textColorService = inject(TextColorService);\n private snackBar = inject(MatSnackBar);\n\n @Input() options = ToastDisplay.adapt();\n\n constructor(\n @Inject(MAT_SNACK_BAR_DATA)\n public data: ToastDisplay\n ) {\n this.options = ToastDisplay.adapt(data)\n }\n\n ngOnInit() {\n\n if (this.ngVersion >= 15) {\n\n const hostElement = document.querySelector('.mat-mdc-snack-bar-container')\n\n if (hostElement) {\n hostElement.setAttribute('style', `\n --toast-bg-color: ${this.color};\n --toast-text-color: ${this.textColor};\n `)\n }\n\n } else {\n\n document.documentElement.style.setProperty('--toast-bg-color', this.color);\n document.documentElement.style.setProperty('--toast-text-color', this.textColor);\n\n const hostElement = document.querySelector('.mat-snack-bar-container') as HTMLElement;\n\n if (hostElement) {\n hostElement.style.backgroundColor = this.color;\n hostElement.style.color = this.textColor;\n\n const actionButton = hostElement.querySelector('.mat-button, .mat-snack-bar-action') as HTMLElement;\n if (actionButton) {\n actionButton.style.color = this.textColor;\n }\n }\n\n }\n\n }\n\n get color() {\n return this.options.color || '#2196f3';\n }\n\n get textColor() {\n return this.textColorService.textColorForBgColor(\n this.color,\n '#FFFFFF',\n '#000000'\n );\n }\n\n onCloseToast(options?: ToastDisplay) {\n this.snackBar.dismiss()\n this.close.emit(options)\n }\n}\n","<div\n class=\"toast-grid-container\"\n [class.has-icon]=\"options.icon\"\n [class.has-action]=\"options.action\"\n [style.background-color]=\"(options) ? options.color : ''\"\n >\n @if (options.icon) {\n <mat-icon\n class=\"toast-icon\"\n [style.color]=\"textColor\"\n >\n {{ options.icon }}\n </mat-icon>\n }\n\n <div\n class=\"toast-message\"\n [style.color]=\"textColor\"\n [innerHTML]=\"options.message | safeHtml\"\n >\n </div>\n\n @if (options.action) {\n <button\n class=\"toast-action-button\"\n mat-button\n (click)=\"onCloseToast(options)\"\n [style.color]=\"textColor\"\n >\n @if (options.action !== '-') {\n {{ options.action }}\n } @else {\n <mat-icon>close</mat-icon>\n }\n </button>\n }\n</div>\n","export enum HorizontalAlignment {\n LEFT = 'left',\n RIGHT = 'right',\n CENTER = 'center',\n}\n","export enum VerticalAlignment {\n TOP = 'top',\n BOTTOM = 'bottom',\n}\n","export interface ToastMessageInterface {\n error: string;\n action: string;\n icon: string;\n}\n\nexport class ToastMessage implements ToastMessageInterface {\n constructor(\n public error = '',\n public action = '',\n public icon = 'error',\n ) {}\n\n static adapt(item?: any): ToastMessageInterface {\n return new ToastMessage(\n item?.error,\n item?.action,\n item?.icon,\n )\n\n }\n}\n","import { MatSnackBarVerticalPosition } from \"@angular/material/snack-bar\";\nimport { HorizontalAlignment } from \"./horizontal-alignment.enum\";\nimport { ToastDisplay } from \"./toast-display-model\";\nimport { VerticalAlignment } from \"./vertical-alignment.enum\";\n\nexport interface ToastOptionsInterface {\n duration?: number\n horizontalPosition?: HorizontalAlignment\n verticalPosition?: MatSnackBarVerticalPosition\n data?: ToastDisplay\n}\n\nexport class ToastOptions implements ToastOptionsInterface {\n\n constructor(\n public duration?: number,\n public horizontalPosition = HorizontalAlignment.CENTER,\n public verticalPosition = VerticalAlignment.TOP,\n public data?: ToastDisplay\n ) {}\n\n static adapt(item?: any): ToastOptionsInterface {\n\n const duration = item?.duration ? item.duration * 1000 : item?.duration;\n\n return new ToastOptions(\n duration,\n item?.horizontalPosition,\n item?.verticalPosition,\n item?.data ? ToastDisplay.adapt(item.data) : ToastDisplay.adapt()\n )\n }\n\n}\n","import { Component, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { TextColorService } from '../utils';\nimport { ToastDisplay, VerticalAlignment } from '../models';\n\n@Component({\n selector: 'app-toast-message-display-inline',\n templateUrl: './toast-message-inline.component.html',\n styleUrls: ['./toast-message-inline.component.scss'],\n standalone: false\n})\nexport class ToastMessageInlineComponent {\n\n @Output() close = new EventEmitter<ToastDisplay>();\n\n textColorService = inject(TextColorService)\n\n toastList: ToastDisplay[] = []\n\n dismissToasts: any[] = []\n\n @Input() set toast(value: any) {\n\n if (!value) return\n const toast = ToastDisplay.adapt(value)\n\n if (!toast.action) {\n this.dismissToasts.push(toast)\n this.expireTime(toast, this.duration)\n }\n\n this.toastList.push(toast)\n\n }\n\n get option() {\n return (this.toastList.length > 0) ? this.toastList[0] : null\n }\n\n @Input() duration = -1\n @Input() position: VerticalAlignment = VerticalAlignment.TOP\n\n get color() {\n return (this.option) ? this.option.color : ''\n }\n\n get textColor() {\n return (this.option) ? this.textColorService.textColorForBgColor(this.option.color, '#FFFFFF', '#000000') : ''\n }\n\n onCloseToast(toast?: ToastDisplay) {\n this.toastList = this.toastList.filter(item => item.id !== toast?.id)\n this.close.emit(toast)\n }\n\n expireTime(toast: any, duration: number) {\n if (duration <= 0) return\n const boundRemove = this.removeToast.bind(this, toast)\n setTimeout(boundRemove, duration * 1000)\n }\n\n removeToast(toast: any) {\n this.dismissToasts = this.dismissToasts.filter(t => t.id !== toast.id)\n this.toastList = this.toastList.filter(t => t.id !== toast.id)\n }\n\n}\n","<div class=\"toast-inline-list\" [class.position-bottom]=\"position === 'bottom'\">\n @for (toast of toastList; track toast) {\n <div [style.background-color]=\"toast.color\" class=\"inline\">\n <app-toast-ui\n [options]=\"toast\"\n class=\"toast-inline-item\"\n (close)=\"onCloseToast(toast)\"\n ></app-toast-ui>\n </div>\n }\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatDividerModule } from '@angular/material/divider';\n\nimport { ToastUIComponent } from './toast-ui/toast-ui.component';\nimport { ToastMessageInlineComponent } from './toast-message-inline/toast-message-inline.component';\nimport { SafeHtmlPipe } from './pipes/safe-html.pipe';\n\n@NgModule({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatIconModule,\n MatSnackBarModule,\n MatButtonModule,\n MatToolbarModule,\n MatMenuModule,\n MatRadioModule,\n MatDividerModule,\n ],\n declarations: [\n SafeHtmlPipe,\n ToastUIComponent,\n ToastMessageInlineComponent,\n ],\n exports: [\n ToastUIComponent,\n ToastMessageInlineComponent,\n ],\n})\nexport class ToastMessageDisplayModule { }\n","import { inject, Injectable } from '@angular/core';\nimport { MatSnackBar, MatSnackBarRef, MatSnackBarVerticalPosition } from '@angular/material/snack-bar';\nimport { ToastUIComponent } from '../toast-ui/toast-ui.component';\nimport { ToastOptions } from '../models/toast-options.model';\nimport { VerticalAlignment } from '../models/vertical-alignment.enum';\nimport { ToastDisplay } from '../models/toast-display-model';\nimport { take } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ToastMessageDisplayService {\n\n private snackBar = inject(MatSnackBar);\n\n private toastQueue: { options: ToastDisplay, duration?: number, vertical?: VerticalAlignment }[] = [];\n private isToastVisible = false;\n\n defaultDuration = 3;\n\n snackBarRef: MatSnackBarRef<any> | undefined;\n\n toastMessage(options = ToastDisplay.adapt(), duration?: number, vertical?: VerticalAlignment) {\n this.toastQueue.push({ options, duration, vertical });\n this.showNextToast();\n }\n\n private showNextToast() {\n\n if (this.isToastVisible || this.toastQueue.length === 0) return\n\n const { options, duration, vertical } = this.toastQueue.shift()!\n\n const vertPosition: MatSnackBarVerticalPosition = (vertical) ? vertical : 'top'\n\n const durationDismiss = (!options.action) ? this.defaultDuration : duration\n\n const displayOptions = ToastOptions.adapt({\n duration: durationDismiss,\n horizontalPosition: 'center',\n verticalPosition: vertPosition,\n data: options,\n })\n\n this.isToastVisible = true;\n this.snackBarRef = this.snackBar.openFromComponent(ToastUIComponent, displayOptions);\n\n if (this.snackBarRef) {\n this.snackBarRef\n .afterDismissed()\n .pipe(take(1))\n .subscribe(() => {\n this.isToastVisible = false;\n this.showNextToast();\n });\n } else {\n console.error('Snackbar reference is undefined. Unable to subscribe to dismissal event.');\n }\n\n }\n}\n","/*\n * Public API Surface of toast-message\n */\n\nexport * from \"./lib/toast-message.module\"\nexport * from \"./lib/toast-ui/toast-ui.component\"\n\nexport * from './lib/models';\n\nexport * from './lib/toast-message-inline/toast-message-inline.component';\n\nexport * from './lib/services/toast-message.service'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ColorConversionService","i3.SafeHtmlPipe","i1.ToastUIComponent"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "toast-message-display",
3
- "version": "18.0.5",
3
+ "version": "18.0.6",
4
4
  "homepage": "https://wavecoders.ca",
5
5
  "author": "Mike Bonifacio <wavecoders@gmail.com> (http://wavecoders@gmail.com/)",
6
6
  "description": "This is an Angular Module containing Components/Services using Material",
@@ -11,8 +11,10 @@
11
11
  }
12
12
  ],
13
13
  "peerDependencies": {
14
- "@angular/common": "^18.2.13",
15
- "@angular/core": "^18.2.13"
14
+ "@angular/cdk": ">=18.0.0 <21.0.0",
15
+ "@angular/common": ">=18.0.0 <21.0.0",
16
+ "@angular/core": ">=18.0.0 <21.0.0",
17
+ "@angular/material": ">=18.0.0 <21.0.0"
16
18
  },
17
19
  "dependencies": {
18
20
  "tslib": "^2.3.0"
Binary file
@@ -2,17 +2,16 @@ import * as i0 from '@angular/core';
2
2
  import { PipeTransform, OnInit, EventEmitter } from '@angular/core';
3
3
  import * as _angular_platform_browser from '@angular/platform-browser';
4
4
  import * as toast_message_display from 'toast-message-display';
5
- import * as _angular_forms from '@angular/forms';
6
- import { FormBuilder } from '@angular/forms';
7
- import * as i8 from '@angular/material/snack-bar';
5
+ import * as i4 from '@angular/common';
6
+ import * as i5 from '@angular/forms';
7
+ import * as i6 from '@angular/material/icon';
8
+ import * as i7 from '@angular/material/snack-bar';
8
9
  import { MatSnackBarVerticalPosition, MatSnackBarRef } from '@angular/material/snack-bar';
9
- import * as i5 from '@angular/common';
10
- import * as i7 from '@angular/material/icon';
11
- import * as i9 from '@angular/material/button';
12
- import * as i10 from '@angular/material/toolbar';
13
- import * as i11 from '@angular/material/menu';
14
- import * as i12 from '@angular/material/radio';
15
- import * as i13 from '@angular/material/divider';
10
+ import * as i8 from '@angular/material/button';
11
+ import * as i9 from '@angular/material/toolbar';
12
+ import * as i10 from '@angular/material/menu';
13
+ import * as i11 from '@angular/material/radio';
14
+ import * as i12 from '@angular/material/divider';
16
15
 
17
16
  declare class SafeHtmlPipe implements PipeTransform {
18
17
  private sanitizer;
@@ -152,53 +151,7 @@ declare class ToastOptions implements ToastOptionsInterface {
152
151
  static adapt(item?: any): ToastOptionsInterface;
153
152
  }
154
153
 
155
- declare class ToastMessageDisplayService {
156
- private snackBar;
157
- private toastQueue;
158
- private isToastVisible;
159
- defaultDuration: number;
160
- snackBarRef: MatSnackBarRef<any> | undefined;
161
- toastMessage(options?: ToastDisplay, duration?: number, vertical?: VerticalAlignment): void;
162
- private showNextToast;
163
- static ɵfac: i0.ɵɵFactoryDeclaration<ToastMessageDisplayService, never>;
164
- static ɵprov: i0.ɵɵInjectableDeclaration<ToastMessageDisplayService>;
165
- }
166
-
167
- declare class ToastDemoComponent {
168
- random: () => number;
169
- randomNumber: (min: number, max: number) => number;
170
- fb: FormBuilder;
171
- toastMessageDisplayService: ToastMessageDisplayService;
172
- type: string;
173
- position: _angular_forms.FormControl<string | null>;
174
- icons: string[];
175
- toastSamples: ({
176
- message: string;
177
- color: ToastColors;
178
- action: string;
179
- icon?: undefined;
180
- } | {
181
- message: string;
182
- color: ToastColors;
183
- icon: string;
184
- action?: undefined;
185
- } | {
186
- message: string;
187
- color: ToastColors;
188
- icon: string;
189
- action: string;
190
- })[];
191
- pickToastSample?: ToastDisplay;
192
- onSelectType(type: string): void;
193
- onBasic(type: string, icon?: string, action?: string): void;
194
- presentToast(color: ToastColors, icon?: string, action?: string): void;
195
- onInline(): void;
196
- onClosedToast(toast?: ToastDisplay): void;
197
- static ɵfac: i0.ɵɵFactoryDeclaration<ToastDemoComponent, never>;
198
- static ɵcmp: i0.ɵɵComponentDeclaration<ToastDemoComponent, "app-toast-display-demo", never, {}, {}, never, never, false, never>;
199
- }
200
-
201
- declare class ToastMessageInlineComponent implements OnInit {
154
+ declare class ToastMessageInlineComponent {
202
155
  close: EventEmitter<ToastDisplay>;
203
156
  textColorService: TextColorService;
204
157
  toastList: ToastDisplay[];
@@ -209,9 +162,8 @@ declare class ToastMessageInlineComponent implements OnInit {
209
162
  position: VerticalAlignment;
210
163
  get color(): ToastColors | "";
211
164
  get textColor(): string;
212
- ngOnInit(): void;
213
165
  onCloseToast(toast?: ToastDisplay): void;
214
- expireTime(toast: any): void;
166
+ expireTime(toast: any, duration: number): void;
215
167
  removeToast(toast: any): void;
216
168
  static ɵfac: i0.ɵɵFactoryDeclaration<ToastMessageInlineComponent, never>;
217
169
  static ɵcmp: i0.ɵɵComponentDeclaration<ToastMessageInlineComponent, "app-toast-message-display-inline", never, { "toast": { "alias": "toast"; "required": false; }; "duration": { "alias": "duration"; "required": false; }; "position": { "alias": "position"; "required": false; }; }, { "close": "close"; }, never, never, false, never>;
@@ -219,9 +171,21 @@ declare class ToastMessageInlineComponent implements OnInit {
219
171
 
220
172
  declare class ToastMessageDisplayModule {
221
173
  static ɵfac: i0.ɵɵFactoryDeclaration<ToastMessageDisplayModule, never>;
222
- static ɵmod: i0.ɵɵNgModuleDeclaration<ToastMessageDisplayModule, [typeof SafeHtmlPipe, typeof ToastUIComponent, typeof ToastDemoComponent, typeof ToastMessageInlineComponent], [typeof i5.CommonModule, typeof _angular_forms.ReactiveFormsModule, typeof i7.MatIconModule, typeof i8.MatSnackBarModule, typeof i9.MatButtonModule, typeof i10.MatToolbarModule, typeof i11.MatMenuModule, typeof i12.MatRadioModule, typeof i13.MatDividerModule], [typeof ToastUIComponent, typeof ToastDemoComponent]>;
174
+ static ɵmod: i0.ɵɵNgModuleDeclaration<ToastMessageDisplayModule, [typeof SafeHtmlPipe, typeof ToastUIComponent, typeof ToastMessageInlineComponent], [typeof i4.CommonModule, typeof i5.ReactiveFormsModule, typeof i6.MatIconModule, typeof i7.MatSnackBarModule, typeof i8.MatButtonModule, typeof i9.MatToolbarModule, typeof i10.MatMenuModule, typeof i11.MatRadioModule, typeof i12.MatDividerModule], [typeof ToastUIComponent, typeof ToastMessageInlineComponent]>;
223
175
  static ɵinj: i0.ɵɵInjectorDeclaration<ToastMessageDisplayModule>;
224
176
  }
225
177
 
226
- export { HorizontalAlignment, ToastColors, ToastDemoComponent, ToastDisplay, ToastMessage, ToastMessageDisplayModule, ToastMessageDisplayService, ToastMessageInlineComponent, ToastOptions, ToastUIComponent, VerticalAlignment };
178
+ declare class ToastMessageDisplayService {
179
+ private snackBar;
180
+ private toastQueue;
181
+ private isToastVisible;
182
+ defaultDuration: number;
183
+ snackBarRef: MatSnackBarRef<any> | undefined;
184
+ toastMessage(options?: ToastDisplay, duration?: number, vertical?: VerticalAlignment): void;
185
+ private showNextToast;
186
+ static ɵfac: i0.ɵɵFactoryDeclaration<ToastMessageDisplayService, never>;
187
+ static ɵprov: i0.ɵɵInjectableDeclaration<ToastMessageDisplayService>;
188
+ }
189
+
190
+ export { HorizontalAlignment, ToastColors, ToastDisplay, ToastMessage, ToastMessageDisplayModule, ToastMessageDisplayService, ToastMessageInlineComponent, ToastOptions, ToastUIComponent, VerticalAlignment };
227
191
  export type { ToastDisplayInterface, ToastMessageInterface, ToastOptionsInterface };
Binary file