UNPKG

@kushki/ng-suka

Version:

<p align="center"> <h1 align="center">Suka Components Angular</h1> <p align="center"> An Angular implementation of the Suka Design System </p> </p>

176 lines 16 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, Inject, TemplateRef, HostListener, EventEmitter, HostBinding } from '@angular/core'; import { ModalRef } from './modal-ref'; import { MODAL_CONTENT_DATA } from './modal.tokens'; import { trigger, state, style, transition, animate } from '@angular/animations'; /** @type {?} */ var ESCAPE_KEY = 27; /** @type {?} */ var MODAL_ANIMATION_TIMINGS = '200ms cubic-bezier(0.64, 0, 0.35, 1)'; var ModalContainer = /** @class */ (function () { function ModalContainer(dialogRef, content) { this.dialogRef = dialogRef; this.content = content; this.animationState = 'enter'; this.animationStateChanged = new EventEmitter(); this.showFooter = false; this.baseClass = true; } /** * @return {?} */ ModalContainer.prototype.ngOnInit = /** * @return {?} */ function () { if (this.content.actions && this.content.actions.length > 0) { this.showFooter = true; this.primaryActions = this.content.actions.filter((/** * @param {?} action * @return {?} */ function (action) { return action.type === 'primary'; })); this.secondaryActions = this.content.actions.filter((/** * @param {?} action * @return {?} */ function (action) { return action.type === 'secondary'; })); } }; /** * @param {?} value * @return {?} */ ModalContainer.prototype.isTemplate = /** * @param {?} value * @return {?} */ function (value) { return value instanceof TemplateRef; }; /** * @param {?=} event * @return {?} */ ModalContainer.prototype.onClose = /** * @param {?=} event * @return {?} */ function (event) { this.dialogRef.close('cancel'); }; /** * @param {?} tag * @return {?} */ ModalContainer.prototype.onAction = /** * @param {?} tag * @return {?} */ function (tag) { this.dialogRef.close(tag); }; /** * @param {?} event * @return {?} */ ModalContainer.prototype.handleKeydown = /** * @param {?} event * @return {?} */ function (event) { // tslint:disable-next-line: deprecation if (event.keyCode === ESCAPE_KEY) { this.dialogRef.close('cancel'); } }; /** * @param {?} event * @return {?} */ ModalContainer.prototype.onAnimationStart = /** * @param {?} event * @return {?} */ function (event) { this.animationStateChanged.emit(event); }; /** * @param {?} event * @return {?} */ ModalContainer.prototype.onAnimationDone = /** * @param {?} event * @return {?} */ function (event) { this.animationStateChanged.emit(event); }; /** * @return {?} */ ModalContainer.prototype.startExitAnimation = /** * @return {?} */ function () { this.animationState = 'leave'; }; /** * @param {?} $event * @return {?} */ ModalContainer.prototype.closeModal = /** * @param {?} $event * @return {?} */ function ($event) { this.dialogRef.close($event); }; ModalContainer.decorators = [ { type: Component, args: [{ selector: 'suka-modal', template: "\n <div class=\"modal\"\n [@slideContent]=\"animationState\"\n (@slideContent.start)=\"onAnimationStart($event)\"\n (@slideContent.done)=\"onAnimationDone($event)\"\n cdkTrapFocus\n >\n <div class=\"modal__header\">\n <h5>\n <ng-container *ngIf=\"!isTemplate(content.title)\">{{content.title}}</ng-container>\n <ng-template *ngIf=\"isTemplate(content.title)\" [ngTemplateOutlet]=\"content.title\"></ng-template>\n </h5>\n <button\n *ngIf=\"content.closeButton\"\n sukaButton=\"plain\"\n (click)=\"onClose($event)\"\n >\n <suka-icon icon=\"x\"></suka-icon>\n </button>\n </div>\n <div class=\"modal__content\">\n <ng-container *ngIf=\"!isTemplate(content.body)\">{{content.body}}</ng-container>\n <ng-container *ngIf=\"isTemplate(content.body)\">\n <ng-container\n *ngTemplateOutlet=\"content.body; context: {closeModal: closeModal.bind(this)}\"\n ></ng-container>\n </ng-container>\n </div>\n <div class=\"modal__footer\" *ngIf=\"showFooter\">\n <suka-button-group>\n <button\n *ngFor=\"let secondaryAction of secondaryActions\"\n sukaButton=\"plain\"\n (click)=\"onAction(secondaryAction.tag)\"\n >\n {{secondaryAction.label}}\n </button>\n <button\n *ngFor=\"let primaryAction of primaryActions\"\n sukaButton=\"primary\"\n (click)=\"onAction(primaryAction.tag)\"\n >\n {{primaryAction.label}}\n </button>\n </suka-button-group>\n </div>\n </div>\n ", animations: [ trigger('slideContent', [ state('void', style({ transform: 'translate3d(0, 20rem, 0)', opacity: 0 })), state('enter', style({ transform: 'none', opacity: 1 })), state('leave', style({ transform: 'translate3d(0, 20rem, 0)', opacity: 0 })), transition('* => *', animate(MODAL_ANIMATION_TIMINGS)), ]) ] }] } ]; /** @nocollapse */ ModalContainer.ctorParameters = function () { return [ { type: ModalRef }, { type: undefined, decorators: [{ type: Inject, args: [MODAL_CONTENT_DATA,] }] } ]; }; ModalContainer.propDecorators = { baseClass: [{ type: HostBinding, args: ['class.modal--default',] }], handleKeydown: [{ type: HostListener, args: ['document:keydown', ['$event'],] }] }; return ModalContainer; }()); export { ModalContainer }; if (false) { /** @type {?} */ ModalContainer.prototype.animationState; /** @type {?} */ ModalContainer.prototype.animationStateChanged; /** @type {?} */ ModalContainer.prototype.showFooter; /** @type {?} */ ModalContainer.prototype.primaryActions; /** @type {?} */ ModalContainer.prototype.secondaryActions; /** @type {?} */ ModalContainer.prototype.baseClass; /** @type {?} */ ModalContainer.prototype.dialogRef; /** @type {?} */ ModalContainer.prototype.content; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtY29udGFpbmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BrdXNoa2kvbmctc3VrYS8iLCJzb3VyY2VzIjpbImxpYi9tb2RhbC9tb2RhbC1jb250YWluZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBVSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFaEgsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRCxPQUFPLEVBQWtCLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7SUFFM0YsVUFBVSxHQUFHLEVBQUU7O0lBQ2YsdUJBQXVCLEdBQUcsc0NBQXNDO0FBRXRFO0lBb0VFLHdCQUNTLFNBQW1CLEVBQ1MsT0FBWTtRQUR4QyxjQUFTLEdBQVQsU0FBUyxDQUFVO1FBQ1MsWUFBTyxHQUFQLE9BQU8sQ0FBSztRQVYxQyxtQkFBYyxHQUErQixPQUFPLENBQUM7UUFDckQsMEJBQXFCLEdBQUcsSUFBSSxZQUFZLEVBQWtCLENBQUM7UUFDbEUsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUlrQixjQUFTLEdBQUcsSUFBSSxDQUFDO0lBS2xELENBQUM7Ozs7SUFFRSxpQ0FBUTs7O0lBQWY7UUFDRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDM0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDdkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNOzs7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dGVSZWYsIEhvc3RMaXN0ZW5lciwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIEhvc3RCaW5kaW5nIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE1vZGFsUmVmIH0gZnJvbSAnLi9tb2RhbC1yZWYnO1xuaW1wb3J0IHsgTU9EQUxfQ09OVEVOVF9EQVRBIH0gZnJvbSAnLi9tb2RhbC50b2tlbnMnO1xuaW1wb3J0IHsgQW5pbWF0aW9uRXZlbnQsIHRyaWdnZXIsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgYW5pbWF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuXG5jb25zdCBFU0NBUEVfS0VZID0gMjc7XG5jb25zdCBNT0RBTF9BTklNQVRJT05fVElNSU5HUyA9ICcyMDBtcyBjdWJpYy1iZXppZXIoMC42NCwgMCwgMC4zNSwgMSknO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdWthLW1vZGFsJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWxcIlxuICAgICAgW0BzbGlkZUNvbnRlbnRdPVwiYW5pbWF0aW9uU3RhdGVcIlxuICAgICAgKEBzbGlkZUNvbnRlbnQuc3RhcnQpPVwib25BbmltYXRpb25TdGFydCgkZXZlbnQpXCJcbiAgICAgIChAc2xpZGVDb250ZW50LmRvbmUpPVwib25BbmltYXRpb25Eb25lKCRldmVudClcIlxuICAgICAgY2RrVHJhcEZvY3VzXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsX19oZWFkZXJcIj5cbiAgICAgICAgPGg1PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNUZW1wbGF0ZShjb250ZW50LnRpdGxlKVwiPnt7Y29udGVudC50aXRsZX19PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiaXNUZW1wbGF0ZShjb250ZW50LnRpdGxlKVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRlbnQudGl0bGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2g1PlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgKm5nSWY9XCJjb250ZW50LmNsb3NlQnV0dG9uXCJcbiAgICAgICAgICBzdWthQnV0dG9uPVwicGxhaW5cIlxuICAgICAgICAgIChjbGljayk9XCJvbkNsb3NlKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgICAgPHN1a2EtaWNvbiBpY29uPVwieFwiPjwvc3VrYS1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsX19jb250ZW50XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNUZW1wbGF0ZShjb250ZW50LmJvZHkpXCI+e3tjb250ZW50LmJvZHl9fTwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNUZW1wbGF0ZShjb250ZW50LmJvZHkpXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250ZW50LmJvZHk7IGNvbnRleHQ6IHtjbG9zZU1vZGFsOiBjbG9zZU1vZGFsLmJpbmQodGhpcyl9XCJcbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWxfX2Zvb3RlclwiICpuZ0lmPVwic2hvd0Zvb3RlclwiPlxuICAgICAgICA8c3VrYS1idXR0b24tZ3JvdXA+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHNlY29uZGFyeUFjdGlvbiBvZiBzZWNvbmRhcnlBY3Rpb25zXCJcbiAgICAgICAgICAgIHN1a2FCdXR0b249XCJwbGFpblwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25BY3Rpb24oc2Vjb25kYXJ5QWN0aW9uLnRhZylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7c2Vjb25kYXJ5QWN0aW9uLmxhYmVsfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgcHJpbWFyeUFjdGlvbiBvZiBwcmltYXJ5QWN0aW9uc1wiXG4gICAgICAgICAgICBzdWthQnV0dG9uPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25BY3Rpb24ocHJpbWFyeUFjdGlvbi50YWcpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7e3ByaW1hcnlBY3Rpb24ubGFiZWx9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L3N1a2EtYnV0dG9uLWdyb3VwPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGAsXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdzbGlkZUNvbnRlbnQnLCBbXG4gICAgICBzdGF0ZSgndm9pZCcsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlM2QoMCwgMjByZW0sIDApJywgb3BhY2l0eTogMCB9KSksXG4gICAgICBzdGF0ZSgnZW50ZXInLCBzdHlsZSh7IHRyYW5zZm9ybTogJ25vbmUnLCBvcGFjaXR5OiAxIH0pKSxcbiAgICAgIHN0YXRlKCdsZWF2ZScsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlM2QoMCwgMjByZW0sIDApJywgb3BhY2l0eTogMCB9KSksXG4gICAgICB0cmFuc2l0aW9uKCcqID0+IConLCBhbmltYXRlKE1PREFMX0FOSU1BVElPTl9USU1JTkdTKSksXG4gICAgXSlcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBNb2RhbENvbnRhaW5lciBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHB1YmxpYyBhbmltYXRpb25TdGF0ZTogJ3ZvaWQnIHwgJ2VudGVyJyB8ICdsZWF2ZScgPSAnZW50ZXInO1xuICBwdWJsaWMgYW5pbWF0aW9uU3RhdGVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxBbmltYXRpb25FdmVudD4oKTtcbiAgc2hvd0Zvb3RlciA9IGZhbHNlO1xuICBwcmltYXJ5QWN0aW9uczogW107XG4gIHNlY29uZGFyeUFjdGlvbnM6IFtdO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MubW9kYWwtLWRlZmF1bHQnKSBiYXNlQ2xhc3MgPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1vZGFsUmVmLFxuICAgIEBJbmplY3QoTU9EQUxfQ09OVEVOVF9EQVRBKSBwdWJsaWMgY29udGVudDogYW55XG4gICkgeyB9XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmNvbnRlbnQuYWN0aW9ucyAmJiB0aGlzLmNvbnRlbnQuYWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNob3dGb290ZXIgPSB0cnVlO1xuICAgICAgdGhpcy5wcmltYXJ5QWN0aW9ucyA9IHRoaXMuY29udGVudC5hY3Rpb25zLmZpbHRlcigoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gJ3ByaW1hcnknKTtcbiAgICAgIHRoaXMuc2Vjb25kYXJ5QWN0aW9ucyA9IHRoaXMuY29udGVudC5hY3Rpb25zLmZpbHRlcigoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gJ3NlY29uZGFyeScpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc1RlbXBsYXRlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgVGVtcGxhdGVSZWY7XG4gIH1cblxuICBwdWJsaWMgb25DbG9zZShldmVudD86IGFueSkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCdjYW5jZWwnKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkFjdGlvbih0YWc6IHN0cmluZykge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHRhZyk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJywgWyckZXZlbnQnXSkgcHVibGljIGhhbmRsZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGRlcHJlY2F0aW9uXG4gICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IEVTQ0FQRV9LRVkpIHtcbiAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCdjYW5jZWwnKTtcbiAgICB9XG4gIH1cblxuICBvbkFuaW1hdGlvblN0YXJ0KGV2ZW50OiBBbmltYXRpb25FdmVudCkge1xuICAgIHRoaXMuYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25BbmltYXRpb25Eb25lKGV2ZW50OiBBbmltYXRpb25FdmVudCkge1xuICAgIHRoaXMuYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgc3RhcnRFeGl0QW5pbWF0aW9uKCkge1xuICAgIHRoaXMuYW5pbWF0aW9uU3RhdGUgPSAnbGVhdmUnO1xuICB9XG5cbiAgY2xvc2VNb2RhbCgkZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCRldmVudCk7XG4gIH1cbn1cbiJdfQ==