ngx-toast-notifications
Version:
Toast notifications for Angular applications
167 lines • 16.8 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: toast-container/toast-container.component.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { ChangeDetectionStrategy, ChangeDetectorRef, Component } from '@angular/core';
import { animate, animateChild, query, style, transition, trigger } from '@angular/animations';
import { Toast } from '../toast';
/** @type {?} */
var nestedTransition = transition('* => *', [
query('@*', animateChild(), { optional: true })
]);
/** @type {?} */
var shrinkInTransition = transition('void => *', [
style({ height: 0, opacity: 0, 'margin-top': 0 }),
animate(200, style({ height: '*', opacity: 1, 'margin-top': '1rem' }))
]);
/** @type {?} */
var shrinkOutTransition = transition('* => void', [
style({ height: '!', opacity: 1, 'margin-top': '1rem' }),
animate(150, style({ height: 0, opacity: 0, 'margin-top': 0 }))
]);
/** @type {?} */
var progressTransition = transition('void => *', [
style({ width: 0, opacity: 0 }),
animate('{{duration}}', style({ width: '100%', opacity: 1 }))
]);
var ToastContainerComponent = /** @class */ (function () {
function ToastContainerComponent(_changeDetector) {
this._changeDetector = _changeDetector;
this.tl = [];
this.tc = [];
this.tr = [];
this.bl = [];
this.bc = [];
this.br = [];
}
/**
* @param {?} config
* @return {?}
*/
ToastContainerComponent.prototype.add = /**
* @param {?} config
* @return {?}
*/
function (config) {
var _this = this;
/** @type {?} */
var collection = this._getCollection(config.position);
if (config.preventDuplicates && this._isDuplicate(collection, config)) {
return null;
}
/** @type {?} */
var toast = new Toast(config, (/**
* @param {?} t
* @return {?}
*/
function (t) { return _this._delete(collection, t); }));
collection.push(toast);
this._changeDetector.detectChanges();
return toast;
};
/**
* @private
* @param {?} collection
* @param {?} toast
* @return {?}
*/
ToastContainerComponent.prototype._delete = /**
* @private
* @param {?} collection
* @param {?} toast
* @return {?}
*/
function (collection, toast) {
collection.splice(collection.indexOf(toast), 1);
this._changeDetector.detectChanges();
};
/**
* @private
* @param {?} collection
* @param {?} config
* @return {?}
*/
ToastContainerComponent.prototype._isDuplicate = /**
* @private
* @param {?} collection
* @param {?} config
* @return {?}
*/
function (collection, config) {
return collection.some((/**
* @param {?} t
* @return {?}
*/
function (t) {
return t.type === config.type
&& t.component === config.component
&& t.caption === config.caption
&& t.text === config.text;
}));
};
/**
* @private
* @param {?} position
* @return {?}
*/
ToastContainerComponent.prototype._getCollection = /**
* @private
* @param {?} position
* @return {?}
*/
function (position) {
switch (position) {
case 'top-left':
return this.tl;
case 'top-center':
return this.tc;
case 'top-right':
return this.tr;
case 'bottom-left':
return this.bl;
case 'bottom-center':
return this.bc;
default:
return this.br;
}
};
ToastContainerComponent.decorators = [
{ type: Component, args: [{
template: "<ng-template #toastPanel let-toasts>\r\n <div *ngFor=\"let toast of toasts\" [@nested]>\r\n <div class=\"toast-card\" [ngClass]=\"toast.type || 'light'\" [@shrink]>\r\n <ng-template toastContent [toast]=\"toast\"></ng-template>\r\n <div *ngIf=\"toast.autoClose\"\r\n class=\"lifetime-progress\"\r\n role=\"progressbar\"\r\n [@progress]=\"{value: '*', params: {duration: toast.duration + 'ms'}}\"></div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<div class=\"toast-overlay\">\r\n <div class=\"toast-panel top-center\">\r\n <ng-container *ngTemplateOutlet=\"toastPanel; context: {$implicit: tc}\"></ng-container>\r\n </div>\r\n <div class=\"toast-panel top-left\">\r\n <ng-container *ngTemplateOutlet=\"toastPanel; context: {$implicit: tl}\"></ng-container>\r\n </div>\r\n <div class=\"toast-panel top-right\">\r\n <ng-container *ngTemplateOutlet=\"toastPanel; context: {$implicit: tr}\"></ng-container>\r\n </div>\r\n <div class=\"toast-panel bottom-center\">\r\n <ng-container *ngTemplateOutlet=\"toastPanel; context: {$implicit: bc}\"></ng-container>\r\n </div>\r\n <div class=\"toast-panel bottom-left\">\r\n <ng-container *ngTemplateOutlet=\"toastPanel; context: {$implicit: bl}\"></ng-container>\r\n </div>\r\n <div class=\"toast-panel bottom-right\">\r\n <ng-container *ngTemplateOutlet=\"toastPanel; context: {$implicit: br}\"></ng-container>\r\n </div>\r\n</div>\r\n",
animations: [
trigger('nested', [nestedTransition]),
trigger('shrink', [shrinkInTransition, shrinkOutTransition]),
trigger('progress', [progressTransition]),
],
changeDetection: ChangeDetectionStrategy.OnPush,
styles: [".toast-overlay{pointer-events:none;position:fixed;z-index:9000;left:0;top:0;width:100%;height:100%}@media (max-width:575px){.toast-overlay{display:flex;justify-content:flex-end;flex-direction:column}}.toast-panel{width:100%;font-size:1rem;line-height:1.5;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif}.toast-card{pointer-events:auto;overflow:hidden;background-clip:border-box;min-width:0;background-color:#f8f9fa;color:#212529;margin-top:1rem;box-shadow:rgba(0,0,0,.15) 0 .2rem 1.5rem .3rem}@media (min-width:576px){.toast-panel{position:absolute;max-width:20rem}.toast-panel.top-left{top:0;left:1rem}.toast-panel.top-center{top:0;left:50%;margin-left:-10rem}.toast-panel.top-right{top:0;right:1rem}.toast-panel.bottom-left{bottom:1rem;left:1rem}.toast-panel.bottom-center{bottom:1rem;left:50%;margin-left:-10rem}.toast-panel.bottom-right{bottom:1rem;right:1rem}.toast-card{border-radius:.15rem;box-shadow:rgba(0,0,0,.2) 0 .3rem .4rem -.2rem,rgba(0,0,0,.15) 0 .2rem 1.5rem .3rem}}.toast-card.danger,.toast-card.dark,.toast-card.info,.toast-card.primary,.toast-card.secondary,.toast-card.success{color:#f8f9fa}.toast-card.danger .lifetime-progress,.toast-card.dark .lifetime-progress,.toast-card.info .lifetime-progress,.toast-card.primary .lifetime-progress,.toast-card.secondary .lifetime-progress,.toast-card.success .lifetime-progress{background-color:#f8f9fa}.toast-card.light .lifetime-progress,.toast-card.primary,.toast-card.warning .lifetime-progress{background-color:#007bff}.toast-card.secondary{background-color:#868e96}.toast-card.success{background-color:#28a745}.toast-card.danger{background-color:#dc3545}.toast-card.warning{background-color:#ffc107}.toast-card.info{background-color:#17a2b8}.toast-card.light{background-color:#f8f9fa}.toast-card.dark{background-color:#343a40}.toast-card .lifetime-progress{display:flex;height:2px;width:0;border-radius:1px}"]
}] }
];
/** @nocollapse */
ToastContainerComponent.ctorParameters = function () { return [
{ type: ChangeDetectorRef }
]; };
return ToastContainerComponent;
}());
export { ToastContainerComponent };
if (false) {
/** @type {?} */
ToastContainerComponent.prototype.tl;
/** @type {?} */
ToastContainerComponent.prototype.tc;
/** @type {?} */
ToastContainerComponent.prototype.tr;
/** @type {?} */
ToastContainerComponent.prototype.bl;
/** @type {?} */
ToastContainerComponent.prototype.bc;
/** @type {?} */
ToastContainerComponent.prototype.br;
/**
* @type {?}
* @private
*/
ToastContainerComponent.prototype._changeDetector;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3QtY29udGFpbmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC10b2FzdC1ub3RpZmljYXRpb25zLyIsInNvdXJjZXMiOlsidG9hc3QtY29udGFpbmVyL3RvYXN0LWNvbnRhaW5lci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRS9GLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7O0lBRzNCLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxRQUFRLEVBQUU7SUFDNUMsS0FBSyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQztDQUM5QyxDQUFDOztJQUVJLGtCQUFrQixHQUFHLFVBQVUsQ0FBQyxXQUFXLEVBQUU7SUFDakQsS0FBSyxDQUFDLEVBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEVBQUMsQ0FBQztJQUMvQyxPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQztDQUNyRSxDQUFDOztJQUVJLG1CQUFtQixHQUFHLFVBQVUsQ0FBQyxXQUFXLEVBQUU7SUFDbEQsS0FBSyxDQUFDLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUMsQ0FBQztJQUN0RCxPQUFPLENBQUMsR0FBRyxFQUFFLEtB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U0FBQztvQkFDVCw0N0NBQStDO29CQUUvQyxVQUFVLEVBQUU7d0JBQ1YsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLGdCQUFnQixDQUFDLENBQUM7d0JBQ3JDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO3dCQUM1RCxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsa0JBQWtCLENBQUMsQ0FBQztxQkFDMUM7b0JBQ0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07O2lCQUNoRDs7OztnQkFsQ2lDLGlCQUFpQjs7SUEwRm5ELDhCQUFDO0NBQUEsQUFqRUQsSUFpRUM7U0F2RFksdUJBQXVCOzs7SUFFbEMscUNBQWlCOztJQUNqQixxQ0FBaUI7O0lBQ2pCLHFDQUFpQjs7SUFDakIscUNBQWlCOztJQUNqQixxQ0FBaUI7O0lBQ2pCLHFDQUFpQjs7Ozs7SUFHZixrREFBMEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBhbmltYXRlLCBhbmltYXRlQ2hpbGQsIHF1ZXJ5LCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQgeyBUb2FzdENvbmZpZyB9IGZyb20gJy4uL3RvYXN0LmNvbmZpZyc7XHJcbmltcG9ydCB7IFRvYXN0IH0gZnJvbSAnLi4vdG9hc3QnO1xyXG5pbXBvcnQgeyBUb2FzdFBvc2l0aW9uIH0gZnJvbSAnLi4vdG9hc3Qtbm90aWZpY2F0aW9ucy5jb25maWcnO1xyXG5cclxuY29uc3QgbmVzdGVkVHJhbnNpdGlvbiA9IHRyYW5zaXRpb24oJyogPT4gKicsIFtcclxuICBxdWVyeSgnQConLCBhbmltYXRlQ2hpbGQoKSwge29wdGlvbmFsOiB0cnVlfSlcclxuXSk7XHJcblxyXG5jb25zdCBzaHJpbmtJblRyYW5zaXRpb24gPSB0cmFuc2l0aW9uKCd2b2lkID0+IConLCBbXHJcbiAgc3R5bGUoe2hlaWdodDogMCwgb3BhY2l0eTogMCwgJ21hcmdpbi10b3AnOiAwfSksXHJcbiAgYW5pbWF0ZSgyMDAsIHN0eWxlKHtoZWlnaHQ6ICcqJywgb3BhY2l0eTogMSwgJ21hcmdpbi10b3AnOiAnMXJlbSd9KSlcclxuXSk7XHJcblxyXG5jb25zdCBzaHJpbmtPdXRUcmFuc2l0aW9uID0gdHJhbnNpdGlvbignKiA9PiB2b2lkJywgW1xyXG4gIHN0eWxlKHtoZWlnaHQ6ICchJywgb3BhY2l0eTogMSwgJ21hcmdpbi10b3AnOiAnMXJlbSd9KSxcclxuICBhbmltYXRlKDE1MCwgc3R5bGUoe2hlaWdodDogMCwgb3BhY2l0eTogMCwgJ21hcmdpbi10b3AnOiAwfSkpXHJcbl0pO1xyXG5cclxuY29uc3QgcHJvZ3Jlc3NUcmFuc2l0aW9uID0gdHJhbnNpdGlvbigndm9pZCA9PiAqJywgW1xyXG4gIHN0eWxlKHt3aWR0aDogMCwgb3BhY2l0eTogMH0pLFxyXG4gIGFuaW1hdGUoJ3t7ZHVyYXRpb259fScsIHN0eWxlKHt3aWR0aDogJzEwMCUnLCBvcGFjaXR5OiAxfSkpXHJcbl0pO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RvYXN0LWNvbnRhaW5lci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdG9hc3QtY29udGFpbmVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgdHJpZ2dlcignbmVzdGVkJywgW25lc3RlZFRyYW5zaXRpb25dKSxcclxuICAgIHRyaWdnZXIoJ3NocmluaycsIFtzaHJpbmtJblRyYW5zaXRpb24sIHNocmlua091dFRyYW5zaXRpb25dKSxcclxuICAgIHRyaWdnZXIoJ3Byb2dyZXNzJywgW3Byb2dyZXNzVHJhbnNpdGlvbl0pLFxyXG4gIF0sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUb2FzdENvbnRhaW5lckNvbXBvbmVudCB7XHJcblxyXG4gIHRsOiBUb2FzdFtdID0gW107XHJcbiAgdGM6IFRvYXN0W10gPSBbXTtcclxuICB0cjogVG9hc3RbXSA9IFtdO1xyXG4gIGJsOiBUb2FzdFtdID0gW107XHJcbiAgYmM6IFRvYXN0W10gPSBbXTtcclxuICBicjogVG9hc3RbXSA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICApIHtcclxuICB9XHJcblxyXG4gIGFkZChjb25maWc6IFRvYXN0Q29uZmlnKTogVG9hc3QgfCBudWxsIHtcclxuICAgIGNvbnN0IGNvbGxlY3Rpb24gPSB0aGlzLl9nZXRDb2xsZWN0aW9uKGNvbmZpZy5wb3NpdGlvbik7XHJcbiAgICBpZiAoY29uZmlnLnByZXZlbnREdXBsaWNhdGVzICYmIHRoaXMuX2lzRHVwbGljYXRlKGNvbGxlY3Rpb24sIGNvbmZpZykpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCB0b2FzdCA9IG5ldyBUb2FzdChjb25maWcsICh0KSA9PiB0aGlzLl9kZWxldGUoY29sbGVjdGlvbiwgdCkpO1xyXG4gICAgY29sbGVjdGlvbi5wdXNoKHRvYXN0KTtcclxuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgIHJldHVybiB0b2FzdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2RlbGV0ZShjb2xsZWN0aW9uOiBUb2FzdFtdLCB0b2FzdDogVG9hc3QpOiB2b2lkIHtcclxuICAgIGNvbGxlY3Rpb24uc3BsaWNlKGNvbGxlY3Rpb24uaW5kZXhPZih0b2FzdCksIDEpO1xyXG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNEdXBsaWNhdGUoY29sbGVjdGlvbjogVG9hc3RbXSwgY29uZmlnOiBUb2FzdENvbmZpZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGNvbGxlY3Rpb24uc29tZSh0ID0+IHtcclxuICAgICAgcmV0dXJuIHQudHlwZSA9PT0gY29uZmlnLnR5cGVcclxuICAgICAgICAmJiB0LmNvbXBvbmVudCA9PT0gY29uZmlnLmNvbXBvbmVudFxyXG4gICAgICAgICYmIHQuY2FwdGlvbiA9PT0gY29uZmlnLmNhcHRpb25cclxuICAgICAgICAmJiB0LnRleHQgPT09IGNvbmZpZy50ZXh0O1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldENvbGxlY3Rpb24ocG9zaXRpb246IFRvYXN0UG9zaXRpb24pOiBUb2FzdFtdIHtcclxuICAgIHN3aXRjaCAocG9zaXRpb24pIHtcclxuICAgICAgY2FzZSAndG9wLWxlZnQnOlxyXG4gICAgICAgIHJldHVybiB0aGlzLnRsO1xyXG4gICAgICBjYXNlICd0b3AtY2VudGVyJzpcclxuICAgICAgICByZXR1cm4gdGhpcy50YztcclxuICAgICAgY2FzZSAndG9wLXJpZ2h0JzpcclxuICAgICAgICByZXR1cm4gdGhpcy50cjtcclxuICAgICAgY2FzZSAnYm90dG9tLWxlZnQnOlxyXG4gICAgICAgIHJldHVybiB0aGlzLmJsO1xyXG4gICAgICBjYXNlICdib3R0b20tY2VudGVyJzpcclxuICAgICAgICByZXR1cm4gdGhpcy5iYztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gdGhpcy5icjtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19