UNPKG

fundamental-ngx

Version:

SAP Fiori Fundamentals, implemented in Angular

201 lines 16.3 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, ElementRef, Type, TemplateRef, ViewContainerRef, ViewChild, ComponentFactoryResolver, ChangeDetectorRef, HostListener, Optional } from '@angular/core'; import { ModalRef } from './modal-utils/modal-ref'; import { modalFadeNgIf } from './modal-utils/modal-animations'; import { AbstractFdNgxClass } from '../utils/abstract-fd-ngx-class'; import focusTrap from 'focus-trap'; export class ModalComponent extends AbstractFdNgxClass { /** * @param {?} elRef * @param {?} componentFactoryResolver * @param {?} cdRef * @param {?} modalRef */ constructor(elRef, componentFactoryResolver, cdRef, modalRef) { super(elRef); this.elRef = elRef; this.componentFactoryResolver = componentFactoryResolver; this.cdRef = cdRef; this.modalRef = modalRef; this.escKeyCloseable = true; this.focusTrapped = true; this.ariaLabelledBy = null; this.ariaLabel = null; this.ariaDescribedBy = null; this.backdropClickCloseable = true; this.hasBackdrop = true; this.modalPanelClass = ''; } /** * @return {?} */ ngOnInit() { this._setProperties(); } /** * @return {?} */ ngOnDestroy() { if (this.focusTrap) { this.focusTrap.deactivate(); } } /** * @return {?} */ ngAfterViewInit() { if (this.childComponentType) { if (this.childComponentType instanceof Type) { this.loadFromComponent(this.childComponentType); } else if (this.childComponentType instanceof TemplateRef) { this.loadFromTemplate(this.childComponentType); } } if (this.focusTrapped) { try { this.focusTrap = focusTrap(this.elRef.nativeElement, { clickOutsideDeactivates: this.backdropClickCloseable && this.hasBackdrop, escapeDeactivates: false, initialFocus: this.elRef.nativeElement }); this.focusTrap.activate(); } catch (e) { console.warn('Attempted to focus trap the modal, but no tabbable elements were found.'); } } this.cdRef.detectChanges(); } /** * @param {?} event * @return {?} */ closeModalEsc(event) { if (this.escKeyCloseable && event.key === 'Escape') { this.modalRef.dismiss('escape'); } } /** * @private * @param {?} content * @return {?} */ loadFromComponent(content) { this.containerRef.clear(); /** @type {?} */ const componentFactory = this.componentFactoryResolver.resolveComponentFactory(content); this.componentRef = this.containerRef.createComponent(componentFactory); } /** * @private * @param {?} content * @return {?} */ loadFromTemplate(content) { this.containerRef.clear(); /** @type {?} */ const context = { $implicit: this.modalRef }; this.componentRef = this.containerRef.createEmbeddedView(content, context); } /** * @return {?} */ _setProperties() { if (this.modalPanelClass) { this._addClassToElement(this.modalPanelClass); } } } ModalComponent.decorators = [ { type: Component, args: [{ selector: 'fd-modal', template: "<div class=\"fd-modal__content\" role=\"document\">\n <ng-content select=\"fd-modal-header\"></ng-content>\n <ng-content select=\"fd-modal-body\"></ng-content>\n <ng-content select=\"fd-modal-footer\"></ng-content>\n <ng-container #vc></ng-container>\n <ng-content></ng-content>\n</div>\n", host: { 'role': 'dialog', '[class.fd-modal]': 'true', '[attr.aria-labelledby]': 'ariaLabelledBy', '[attr.aria-label]': 'ariaLabel', '[attr.aria-describedby]': 'ariaDescribedBy', '[attr.aria-modal]': 'true', '[attr.id]': 'id', 'tabindex': '-1', '[@modal-fade]': '' }, animations: [ modalFadeNgIf ], styles: [":host{max-width:none;z-index:1000}:host:focus{outline:0}:host .fd-modal__content{height:100%;width:100%;min-height:inherit;min-width:inherit;max-height:inherit;max-width:inherit;display:flex;flex-direction:column}"] }] } ]; /** @nocollapse */ ModalComponent.ctorParameters = () => [ { type: ElementRef }, { type: ComponentFactoryResolver }, { type: ChangeDetectorRef }, { type: ModalRef, decorators: [{ type: Optional }] } ]; ModalComponent.propDecorators = { containerRef: [{ type: ViewChild, args: ['vc', { read: ViewContainerRef },] }], closeModalEsc: [{ type: HostListener, args: ['keyup', ['$event'],] }] }; if (false) { /** @type {?} */ ModalComponent.prototype.containerRef; /** @type {?} */ ModalComponent.prototype.id; /** @type {?} */ ModalComponent.prototype.escKeyCloseable; /** @type {?} */ ModalComponent.prototype.focusTrapped; /** @type {?} */ ModalComponent.prototype.ariaLabelledBy; /** @type {?} */ ModalComponent.prototype.ariaLabel; /** @type {?} */ ModalComponent.prototype.ariaDescribedBy; /** @type {?} */ ModalComponent.prototype.childComponentType; /** @type {?} */ ModalComponent.prototype.backdropClickCloseable; /** @type {?} */ ModalComponent.prototype.hasBackdrop; /** @type {?} */ ModalComponent.prototype.modalPanelClass; /** * @type {?} * @private */ ModalComponent.prototype.componentRef; /** * @type {?} * @private */ ModalComponent.prototype.focusTrap; /** * @type {?} * @private */ ModalComponent.prototype.elRef; /** * @type {?} * @private */ ModalComponent.prototype.componentFactoryResolver; /** * @type {?} * @private */ ModalComponent.prototype.cdRef; /** * @type {?} * @private */ ModalComponent.prototype.modalRef; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vZnVuZGFtZW50YWwtbmd4LyIsInNvdXJjZXMiOlsibGliL21vZGFsL21vZGFsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxVQUFVLEVBR1YsSUFBSSxFQUNKLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULHdCQUF3QixFQUd4QixpQkFBaUIsRUFBRSxZQUFZLEVBQWEsUUFBUSxFQUN2RCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BFLE9BQU8sU0FBUyxNQUFNLFlBQVksQ0FBQztBQXFCbkMsTUFBTSxPQUFPLGNBQWUsU0FBUSxrQkFBa0I7Ozs7Ozs7SUE2QmxELFlBQW9CLEtBQWlCLEVBQ2pCLHdCQUFrRCxFQUNsRCxLQUF3QixFQUNaLFFBQWtCO1FBQzlDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUpHLFVBQUssR0FBTCxLQUFLLENBQVk7UUFDakIsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUNaLGFBQVEsR0FBUixRQUFRLENBQVU7UUF6QmxELG9CQUFlLEdBQVksSUFBSSxDQUFDO1FBRWhDLGlCQUFZLEdBQVksSUFBSSxDQUFDO1FBRTdCLG1CQUFjLEdBQVcsSUFBSSxDQUFDO1FBRTlCLGNBQVMsR0FBVyxJQUFJLENBQUM7UUFFekIsb0JBQWUsR0FBVyxJQUFJLENBQUM7UUFJL0IsMkJBQXNCLEdBQVksSUFBSSxDQUFDO1FBRXZDLGdCQUFXLEdBQWEsSUFBSSxDQUFDO1FBRTdCLG9CQUFlLEdBQVcsRUFBRSxDQUFD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QkFDaEIsZUFBZSxFQUFFLEVBQUU7aUJBQ3RCO2dCQUNELFVBQVUsRUFBRTtvQkFDUixhQUFhO2lCQUNoQjs7YUFDSjs7OztZQW5DRyxVQUFVO1lBT1Ysd0JBQXdCO1lBR3hCLGlCQUFpQjtZQUVaLFFBQVEsdUJBd0RBLFFBQVE7OzsyQkE5QnBCLFNBQVMsU0FBQyxJQUFJLEVBQUUsRUFBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUM7NEJBbUV4QyxZQUFZLFNBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDOzs7O0lBbkVqQyxzQ0FDK0I7O0lBRS9CLDRCQUFXOztJQUVYLHlDQUFnQzs7SUFFaEMsc0NBQTZCOztJQUU3Qix3Q0FBOEI7O0lBRTlCLG1DQUF5Qjs7SUFFekIseUNBQStCOztJQUUvQiw0Q0FBaUQ7O0lBRWpELGdEQUF1Qzs7SUFFdkMscUNBQTZCOztJQUU3Qix5Q0FBNkI7Ozs7O0lBRTdCLHNDQUErRDs7Ozs7SUFFL0QsbUNBQXVCOzs7OztJQUVYLCtCQUF5Qjs7Ozs7SUFDekIsa0RBQTBEOzs7OztJQUMxRCwrQkFBZ0M7Ozs7O0lBQ2hDLGtDQUFzQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgT25Jbml0LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgVHlwZSxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgQ29tcG9uZW50UmVmLFxuICAgIEVtYmVkZGVkVmlld1JlZixcbiAgICBDaGFuZ2VEZXRlY3RvclJlZiwgSG9zdExpc3RlbmVyLCBPbkRlc3Ryb3ksIE9wdGlvbmFsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTW9kYWxSZWYgfSBmcm9tICcuL21vZGFsLXV0aWxzL21vZGFsLXJlZic7XG5pbXBvcnQgeyBtb2RhbEZhZGVOZ0lmIH0gZnJvbSAnLi9tb2RhbC11dGlscy9tb2RhbC1hbmltYXRpb25zJztcbmltcG9ydCB7IEFic3RyYWN0RmROZ3hDbGFzcyB9IGZyb20gJy4uL3V0aWxzL2Fic3RyYWN0LWZkLW5neC1jbGFzcyc7XG5pbXBvcnQgZm9jdXNUcmFwIGZyb20gJ2ZvY3VzLXRyYXAnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLW1vZGFsJyxcbiAgICBzdHlsZVVybHM6IFsnbW9kYWwuY29tcG9uZW50LnNjc3MnXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ3JvbGUnOiAnZGlhbG9nJyxcbiAgICAgICAgJ1tjbGFzcy5mZC1tb2RhbF0nOiAndHJ1ZScsXG4gICAgICAgICdbYXR0ci5hcmlhLWxhYmVsbGVkYnldJzogJ2FyaWFMYWJlbGxlZEJ5JyxcbiAgICAgICAgJ1thdHRyLmFyaWEtbGFiZWxdJzogJ2FyaWFMYWJlbCcsXG4gICAgICAgICdbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XSc6ICdhcmlhRGVzY3JpYmVkQnknLFxuICAgICAgICAnW2F0dHIuYXJpYS1tb2RhbF0nOiAndHJ1ZScsXG4gICAgICAgICdbYXR0ci5pZF0nOiAnaWQnLFxuICAgICAgICAndGFiaW5kZXgnOiAnLTEnLFxuICAgICAgICAnW0Btb2RhbC1mYWRlXSc6ICcnXG4gICAgfSxcbiAgICBhbmltYXRpb25zOiBbXG4gICAgICAgIG1vZGFsRmFkZU5nSWZcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIE1vZGFsQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RGZE5neENsYXNzIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgQFZpZXdDaGlsZCgndmMnLCB7cmVhZDogVmlld0NvbnRhaW5lclJlZn0pXG4gICAgY29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gICAgaWQ6IHN0cmluZztcblxuICAgIGVzY0tleUNsb3NlYWJsZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBmb2N1c1RyYXBwZWQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgYXJpYUxhYmVsbGVkQnk6IHN0cmluZyA9IG51bGw7XG5cbiAgICBhcmlhTGFiZWw6IHN0cmluZyA9IG51bGw7XG5cbiAgICBhcmlhRGVzY3JpYmVkQnk6IHN0cmluZyA9IG51bGw7XG5cbiAgICBjaGlsZENvbXBvbmVudFR5cGU6IFRlbXBsYXRlUmVmPGFueT4gfCBUeXBlPGFueT47XG5cbiAgICBiYWNrZHJvcENsaWNrQ2xvc2VhYmxlOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIGhhc0JhY2tkcm9wOiBib29sZWFuICA9IHRydWU7XG5cbiAgICBtb2RhbFBhbmVsQ2xhc3M6IHN0cmluZyA9ICcnO1xuXG4gICAgcHJpdmF0ZSBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxhbnk+IHwgRW1iZWRkZWRWaWV3UmVmPGFueT47XG5cbiAgICBwcml2YXRlIGZvY3VzVHJhcDogYW55O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlbFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgbW9kYWxSZWY6IE1vZGFsUmVmKSB7XG4gICAgICAgIHN1cGVyKGVsUmVmKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2V0UHJvcGVydGllcygpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5mb2N1c1RyYXApIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNUcmFwLmRlYWN0aXZhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRDb21wb25lbnRUeXBlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jaGlsZENvbXBvbmVudFR5cGUgaW5zdGFuY2VvZiBUeXBlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkRnJvbUNvbXBvbmVudCh0aGlzLmNoaWxkQ29tcG9uZW50VHlwZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2hpbGRDb21wb25lbnRUeXBlIGluc3RhbmNlb2YgVGVtcGxhdGVSZWYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRGcm9tVGVtcGxhdGUodGhpcy5jaGlsZENvbXBvbmVudFR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZvY3VzVHJhcHBlZCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzVHJhcCA9IGZvY3VzVHJhcCh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgY2xpY2tPdXRzaWRlRGVhY3RpdmF0ZXM6IHRoaXMuYmFja2Ryb3BDbGlja0Nsb3NlYWJsZSAmJiB0aGlzLmhhc0JhY2tkcm9wLFxuICAgICAgICAgICAgICAgICAgICBlc2NhcGVEZWFjdGl2YXRlczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxGb2N1czogdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c1RyYXAuYWN0aXZhdGUoKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0F0dGVtcHRlZCB0byBmb2N1cyB0cmFwIHRoZSBtb2RhbCwgYnV0IG5vIHRhYmJhYmxlIGVsZW1lbnRzIHdlcmUgZm91bmQuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5dXAnLCBbJyRldmVudCddKVxuICAgIGNsb3NlTW9kYWxFc2MoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZXNjS2V5Q2xvc2VhYmxlICYmIGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgICAgIHRoaXMubW9kYWxSZWYuZGlzbWlzcygnZXNjYXBlJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGxvYWRGcm9tQ29tcG9uZW50KGNvbnRlbnQ6IFR5cGU8YW55Pik6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRhaW5lclJlZi5jbGVhcigpO1xuICAgICAgICBjb25zdCBjb21wb25lbnRGYWN0b3J5ID0gdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoY29udGVudCk7XG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmID0gdGhpcy5jb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudEZhY3RvcnkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZEZyb21UZW1wbGF0ZShjb250ZW50OiBUZW1wbGF0ZVJlZjxhbnk+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29udGFpbmVyUmVmLmNsZWFyKCk7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICAgICAgICAkaW1wbGljaXQ6IHRoaXMubW9kYWxSZWZcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSB0aGlzLmNvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcoY29udGVudCwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgX3NldFByb3BlcnRpZXMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm1vZGFsUGFuZWxDbGFzcykge1xuICAgICAgICAgICAgdGhpcy5fYWRkQ2xhc3NUb0VsZW1lbnQodGhpcy5tb2RhbFBhbmVsQ2xhc3MpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19