@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 • 15.7 kB
JavaScript
/**
* @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 { SheetRef } from './sheet-ref';
import { SHEET_CONTENT_DATA } from './sheet.tokens';
import { trigger, state, style, transition, animate } from '@angular/animations';
/** @type {?} */
var ESCAPE_KEY = 27;
/** @type {?} */
var SHEET_ANIMATION_TIMINGS = '200ms cubic-bezier(0.64, 0, 0.35, 1)';
var SheetContainer = /** @class */ (function () {
function SheetContainer(dialogRef, content) {
this.dialogRef = dialogRef;
this.content = content;
this.animationState = 'enter';
this.animationStateChanged = new EventEmitter();
this.showFooter = false;
this.baseClass = true;
}
/**
* @return {?}
*/
SheetContainer.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 {?}
*/
SheetContainer.prototype.isTemplate = /**
* @param {?} value
* @return {?}
*/
function (value) {
return value instanceof TemplateRef;
};
/**
* @param {?=} event
* @return {?}
*/
SheetContainer.prototype.onClose = /**
* @param {?=} event
* @return {?}
*/
function (event) {
this.dialogRef.close('cancel');
};
/**
* @param {?} tag
* @return {?}
*/
SheetContainer.prototype.onAction = /**
* @param {?} tag
* @return {?}
*/
function (tag) {
this.dialogRef.close(tag);
};
/**
* @param {?} event
* @return {?}
*/
SheetContainer.prototype.handleKeydown = /**
* @param {?} event
* @return {?}
*/
function (event) {
// tslint:disable-next-line: deprecation
if (event.keyCode === ESCAPE_KEY) {
this.dialogRef.close('cancel');
}
};
/**
* @param {?} event
* @return {?}
*/
SheetContainer.prototype.onAnimationStart = /**
* @param {?} event
* @return {?}
*/
function (event) {
this.animationStateChanged.emit(event);
};
/**
* @param {?} event
* @return {?}
*/
SheetContainer.prototype.onAnimationDone = /**
* @param {?} event
* @return {?}
*/
function (event) {
this.animationStateChanged.emit(event);
};
/**
* @return {?}
*/
SheetContainer.prototype.startExitAnimation = /**
* @return {?}
*/
function () {
this.animationState = 'leave';
};
/**
* @param {?} $event
* @return {?}
*/
SheetContainer.prototype.closeSheet = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
this.dialogRef.close($event);
};
SheetContainer.decorators = [
{ type: Component, args: [{
selector: 'suka-sheet',
template: "\n <div class=\"sheet\"\n [@slideContent]=\"animationState\"\n (@slideContent.start)=\"onAnimationStart($event)\"\n (@slideContent.done)=\"onAnimationDone($event)\"\n cdkTrapFocus\n >\n <div class=\"sheet__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 sukaButton=\"plain\"\n (click)=\"onClose($event)\"\n >\n <suka-icon icon=\"x\"></suka-icon>\n </button>\n </div>\n <div class=\"sheet__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: {closeSheet: closeSheet.bind(this)}\"\n ></ng-container>\n </ng-container>\n </div>\n <div class=\"sheet__footer\" *ngIf=\"showFooter\">\n <button\n *ngFor=\"let secondaryAction of secondaryActions\"\n sukaButton=\"plain\"\n (click)=\"onAction(secondaryAction.tag)\"\n >\n {{secondaryAction.label}}\n </button>\n\n <button\n *ngFor=\"let primaryAction of primaryActions\"\n sukaButton=\"primary\"\n (click)=\"onAction(primaryAction.tag)\"\n >\n {{primaryAction.label}}\n </button>\n </div>\n </div>\n ",
animations: [
trigger('slideContent', [
state('void', style({ transform: 'translate3d(20rem, 0, 0)', opacity: 0 })),
state('enter', style({ transform: 'none', opacity: 1 })),
state('leave', style({ transform: 'translate3d(20rem, 0, 0)', opacity: 0 })),
transition('* => *', animate(SHEET_ANIMATION_TIMINGS)),
])
]
}] }
];
/** @nocollapse */
SheetContainer.ctorParameters = function () { return [
{ type: SheetRef },
{ type: undefined, decorators: [{ type: Inject, args: [SHEET_CONTENT_DATA,] }] }
]; };
SheetContainer.propDecorators = {
baseClass: [{ type: HostBinding, args: ['class.sheet--default',] }],
handleKeydown: [{ type: HostListener, args: ['document:keydown', ['$event'],] }]
};
return SheetContainer;
}());
export { SheetContainer };
if (false) {
/** @type {?} */
SheetContainer.prototype.animationState;
/** @type {?} */
SheetContainer.prototype.animationStateChanged;
/** @type {?} */
SheetContainer.prototype.showFooter;
/** @type {?} */
SheetContainer.prototype.primaryActions;
/** @type {?} */
SheetContainer.prototype.secondaryActions;
/** @type {?} */
SheetContainer.prototype.baseClass;
/** @type {?} */
SheetContainer.prototype.dialogRef;
/** @type {?} */
SheetContainer.prototype.content;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlZXQtY29udGFpbmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BrdXNoa2kvbmctc3VrYS8iLCJzb3VyY2VzIjpbImxpYi9zaGVldC9zaGVldC1jb250YWluZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBVSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFaEgsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRCxPQUFPLEVBQWtCLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7SUFFM0YsVUFBVSxHQUFHLEVBQUU7O0lBQ2YsdUJBQXVCLEdBQUcsc0NBQXNDO0FBRXRFO0lBa0VFLHdCQUNTLFNBQW1CLEVBQ1MsT0FBWTtRQUR4QyxjQUFTLEdBQVQsU0FBUyxDQUFVO1FBQ1MsWUFBTyxHQUFQLE9BQU8sQ0FBSztRQVYxQyxtQkFBYyxHQUErQixPQUFPLENBQUM7UUFDckQsMEJBQXFCLEdBQUcsSUFBSSxZQUFZLEVBQWtCLENBQUM7UUFDbEUsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUlrQixjQUFTLEdBQUcsSUFBSSxDQUFDO0lBS2xELENBQUM7Ozs7SUFFRSxpQ0FBUTs7O0lBQWY7UUFDRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDM0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDdkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNOzs7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dGVSZWYsIEhvc3RMaXN0ZW5lciwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIEhvc3RCaW5kaW5nIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFNoZWV0UmVmIH0gZnJvbSAnLi9zaGVldC1yZWYnO1xuaW1wb3J0IHsgU0hFRVRfQ09OVEVOVF9EQVRBIH0gZnJvbSAnLi9zaGVldC50b2tlbnMnO1xuaW1wb3J0IHsgQW5pbWF0aW9uRXZlbnQsIHRyaWdnZXIsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgYW5pbWF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuXG5jb25zdCBFU0NBUEVfS0VZID0gMjc7XG5jb25zdCBTSEVFVF9BTklNQVRJT05fVElNSU5HUyA9ICcyMDBtcyBjdWJpYy1iZXppZXIoMC42NCwgMCwgMC4zNSwgMSknO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdWthLXNoZWV0JyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwic2hlZXRcIlxuICAgICAgW0BzbGlkZUNvbnRlbnRdPVwiYW5pbWF0aW9uU3RhdGVcIlxuICAgICAgKEBzbGlkZUNvbnRlbnQuc3RhcnQpPVwib25BbmltYXRpb25TdGFydCgkZXZlbnQpXCJcbiAgICAgIChAc2xpZGVDb250ZW50LmRvbmUpPVwib25BbmltYXRpb25Eb25lKCRldmVudClcIlxuICAgICAgY2RrVHJhcEZvY3VzXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cInNoZWV0X19oZWFkZXJcIj5cbiAgICAgICAgPGg1PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNUZW1wbGF0ZShjb250ZW50LnRpdGxlKVwiPnt7Y29udGVudC50aXRsZX19PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiaXNUZW1wbGF0ZShjb250ZW50LnRpdGxlKVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRlbnQudGl0bGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2g1PlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgc3VrYUJ1dHRvbj1cInBsYWluXCJcbiAgICAgICAgICAoY2xpY2spPVwib25DbG9zZSgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzdWthLWljb24gaWNvbj1cInhcIj48L3N1a2EtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzaGVldF9fY29udGVudFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzVGVtcGxhdGUoY29udGVudC5ib2R5KVwiPnt7Y29udGVudC5ib2R5fX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzVGVtcGxhdGUoY29udGVudC5ib2R5KVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udGVudC5ib2R5OyBjb250ZXh0OiB7Y2xvc2VTaGVldDogY2xvc2VTaGVldC5iaW5kKHRoaXMpfVwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInNoZWV0X19mb290ZXJcIiAqbmdJZj1cInNob3dGb290ZXJcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICpuZ0Zvcj1cImxldCBzZWNvbmRhcnlBY3Rpb24gb2Ygc2Vjb25kYXJ5QWN0aW9uc1wiXG4gICAgICAgICAgc3VrYUJ1dHRvbj1cInBsYWluXCJcbiAgICAgICAgICAoY2xpY2spPVwib25BY3Rpb24oc2Vjb25kYXJ5QWN0aW9uLnRhZylcIlxuICAgICAgICA+XG4gICAgICAgICAge3tzZWNvbmRhcnlBY3Rpb24ubGFiZWx9fVxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHByaW1hcnlBY3Rpb24gb2YgcHJpbWFyeUFjdGlvbnNcIlxuICAgICAgICAgIHN1a2FCdXR0b249XCJwcmltYXJ5XCJcbiAgICAgICAgICAoY2xpY2spPVwib25BY3Rpb24ocHJpbWFyeUFjdGlvbi50YWcpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7cHJpbWFyeUFjdGlvbi5sYWJlbH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGAsXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdzbGlkZUNvbnRlbnQnLCBbXG4gICAgICBzdGF0ZSgndm9pZCcsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlM2QoMjByZW0sIDAsIDApJywgb3BhY2l0eTogMCB9KSksXG4gICAgICBzdGF0ZSgnZW50ZXInLCBzdHlsZSh7IHRyYW5zZm9ybTogJ25vbmUnLCBvcGFjaXR5OiAxIH0pKSxcbiAgICAgIHN0YXRlKCdsZWF2ZScsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlM2QoMjByZW0sIDAsIDApJywgb3BhY2l0eTogMCB9KSksXG4gICAgICB0cmFuc2l0aW9uKCcqID0+IConLCBhbmltYXRlKFNIRUVUX0FOSU1BVElPTl9USU1JTkdTKSksXG4gICAgXSlcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBTaGVldENvbnRhaW5lciBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHB1YmxpYyBhbmltYXRpb25TdGF0ZTogJ3ZvaWQnIHwgJ2VudGVyJyB8ICdsZWF2ZScgPSAnZW50ZXInO1xuICBwdWJsaWMgYW5pbWF0aW9uU3RhdGVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxBbmltYXRpb25FdmVudD4oKTtcbiAgc2hvd0Zvb3RlciA9IGZhbHNlO1xuICBwcmltYXJ5QWN0aW9uczogW107XG4gIHNlY29uZGFyeUFjdGlvbnM6IFtdO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3Muc2hlZXQtLWRlZmF1bHQnKSBiYXNlQ2xhc3MgPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IFNoZWV0UmVmLFxuICAgIEBJbmplY3QoU0hFRVRfQ09OVEVOVF9EQVRBKSBwdWJsaWMgY29udGVudDogYW55XG4gICkgeyB9XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmNvbnRlbnQuYWN0aW9ucyAmJiB0aGlzLmNvbnRlbnQuYWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNob3dGb290ZXIgPSB0cnVlO1xuICAgICAgdGhpcy5wcmltYXJ5QWN0aW9ucyA9IHRoaXMuY29udGVudC5hY3Rpb25zLmZpbHRlcigoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gJ3ByaW1hcnknKTtcbiAgICAgIHRoaXMuc2Vjb25kYXJ5QWN0aW9ucyA9IHRoaXMuY29udGVudC5hY3Rpb25zLmZpbHRlcigoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gJ3NlY29uZGFyeScpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc1RlbXBsYXRlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgVGVtcGxhdGVSZWY7XG4gIH1cblxuICBwdWJsaWMgb25DbG9zZShldmVudD86IGFueSkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCdjYW5jZWwnKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkFjdGlvbih0YWc6IHN0cmluZykge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHRhZyk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJywgWyckZXZlbnQnXSkgcHVibGljIGhhbmRsZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGRlcHJlY2F0aW9uXG4gICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IEVTQ0FQRV9LRVkpIHtcbiAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCdjYW5jZWwnKTtcbiAgICB9XG4gIH1cblxuICBvbkFuaW1hdGlvblN0YXJ0KGV2ZW50OiBBbmltYXRpb25FdmVudCkge1xuICAgIHRoaXMuYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25BbmltYXRpb25Eb25lKGV2ZW50OiBBbmltYXRpb25FdmVudCkge1xuICAgIHRoaXMuYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgc3RhcnRFeGl0QW5pbWF0aW9uKCkge1xuICAgIHRoaXMuYW5pbWF0aW9uU3RhdGUgPSAnbGVhdmUnO1xuICB9XG5cbiAgY2xvc2VTaGVldCgkZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCRldmVudCk7XG4gIH1cbn1cbiJdfQ==