@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>
165 lines • 12.2 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Injectable, Injector } from '@angular/core';
import { Overlay, OverlayConfig } from '@angular/cdk/overlay';
import { ComponentPortal, PortalInjector } from '@angular/cdk/portal';
import { ModalRef } from './modal-ref';
import { MODAL_CONTENT_DATA } from './modal.tokens';
import { ModalContainer } from './modal-container.component';
/**
* @record
*/
export function ModalContent() { }
if (false) {
/** @type {?|undefined} */
ModalContent.prototype.title;
/** @type {?|undefined} */
ModalContent.prototype.body;
/** @type {?|undefined} */
ModalContent.prototype.closeButton;
/** @type {?|undefined} */
ModalContent.prototype.actions;
}
/**
* @record
*/
export function ModalConfig() { }
if (false) {
/** @type {?|undefined} */
ModalConfig.prototype.closeOnBackdropClick;
/** @type {?|undefined} */
ModalConfig.prototype.panelClass;
/** @type {?|undefined} */
ModalConfig.prototype.hasBackdrop;
/** @type {?|undefined} */
ModalConfig.prototype.backdropClass;
/** @type {?|undefined} */
ModalConfig.prototype.content;
}
/** @type {?} */
const DEFAULT_CONFIG = {
closeOnBackdropClick: true,
hasBackdrop: true,
backdropClass: 'backdrop--dark',
panelClass: 'modal--default',
content: null
};
export class ModalService {
/**
* @param {?} injector
* @param {?} overlay
*/
constructor(injector, overlay) {
this.injector = injector;
this.overlay = overlay;
}
/**
* @param {?=} config
* @return {?}
*/
open(config = {}) {
// Override default configuration
/** @type {?} */
const dialogConfig = Object.assign({}, DEFAULT_CONFIG, config);
// Returns an OverlayRef which is a PortalHost
/** @type {?} */
const overlayRef = this.createOverlay(dialogConfig);
// Instantiate remote control
/** @type {?} */
const modalRef = new ModalRef(overlayRef);
/** @type {?} */
const overlayComponent = this.attachModalContainer(overlayRef, dialogConfig, modalRef);
modalRef.componentInstance = overlayComponent;
if (dialogConfig.closeOnBackdropClick) {
overlayRef.backdropClick().subscribe((/**
* @param {?} _
* @return {?}
*/
_ => modalRef.close('cancel')));
}
return modalRef;
}
/**
* @private
* @param {?} config
* @return {?}
*/
createOverlay(config) {
/** @type {?} */
const overlayConfig = this.getOverlayConfig(config);
return this.overlay.create(overlayConfig);
}
/**
* @private
* @param {?} overlayRef
* @param {?} config
* @param {?} modalRef
* @return {?}
*/
attachModalContainer(overlayRef, config, modalRef) {
/** @type {?} */
const injector = this.createInjector(config, modalRef);
/** @type {?} */
const containerPortal = new ComponentPortal(ModalContainer, null, injector);
/** @type {?} */
const containerRef = overlayRef.attach(containerPortal);
return containerRef.instance;
}
/**
* @private
* @param {?} config
* @param {?} modalRef
* @return {?}
*/
createInjector(config, modalRef) {
/** @type {?} */
const injectionTokens = new WeakMap();
injectionTokens.set(ModalRef, modalRef);
injectionTokens.set(MODAL_CONTENT_DATA, config.content);
return new PortalInjector(this.injector, injectionTokens);
}
/**
* @private
* @param {?} config
* @return {?}
*/
getOverlayConfig(config) {
/** @type {?} */
const positionStrategy = this.overlay.position()
.global()
.centerHorizontally()
.centerVertically();
/** @type {?} */
const overlayConfig = new OverlayConfig({
hasBackdrop: config.hasBackdrop,
backdropClass: config.backdropClass,
panelClass: config.panelClass,
scrollStrategy: this.overlay.scrollStrategies.noop(),
positionStrategy
});
return overlayConfig;
}
}
ModalService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
ModalService.ctorParameters = () => [
{ type: Injector },
{ type: Overlay }
];
if (false) {
/**
* @type {?}
* @private
*/
ModalService.prototype.injector;
/**
* @type {?}
* @private
*/
ModalService.prototype.overlay;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BrdXNoa2kvbmctc3VrYS8iLCJzb3VyY2VzIjpbImxpYi9tb2RhbC9tb2RhbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBNkIsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQWMsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdkMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7O0FBRTdELGtDQVNDOzs7SUFSQyw2QkFBa0M7O0lBQ2xDLDRCQUFpQzs7SUFDakMsbUNBQXNCOztJQUN0QiwrQkFJSTs7Ozs7QUFHTixpQ0FNQzs7O0lBTEMsMkNBQStCOztJQUMvQixpQ0FBb0I7O0lBQ3BCLGtDQUFzQjs7SUFDdEIsb0NBQXVCOztJQUN2Qiw4QkFBdUI7OztNQUduQixjQUFjLEdBQWdCO0lBQ2xDLG9CQUFvQixFQUFFLElBQUk7SUFDMUIsV0FBVyxFQUFFLElBQUk7SUFDakIsYUFBYSxFQUFFLGdCQUFnQjtJQUMvQixVQUFVLEVBQUUsZ0JBQWdCO0lBQzVCLE9BQU8sRUFBRSxJQUFJO0NBQ2Q7QUFHRCxNQUFNLE9BQU8sWUFBWTs7Ozs7SUFFdkIsWUFDVSxRQUFrQixFQUNsQixPQUFnQjtRQURoQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLFlBQU8sR0FBUCxPQUFPLENBQVM7SUFDdEIsQ0FBQzs7Ozs7SUFFTCxJQUFJLENBQUMsU0FBc0IsRUFBRTs7O2NBRXJCLFlBQVkscUJBQVEsY0FBYyxFQUFLLE1BQU0sQ0FBRTs7O2NBRy9DLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQzs7O2NBRzdDLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUM7O2NBRW5DLGdCQUFnQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLFFBQVEsQ0FBQztRQUV0RixRQUFRLENBQUMsaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUM7UUFFOUMsSUFBSSxZQUFZLENBQUMsb0JBQW9CLEVBQUU7WUFDckMsVUFBVSxDQUFDLGFBQWEsRUFBRSxDQUFDLFNBQVM7Ozs7WUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUMsQ0FBQztTQUNyRTtRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7Ozs7OztJQUVPLGFBQWEsQ0FBQyxNQUFtQjs7Y0FDakMsYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7UUFDbkQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM1QyxDQUFDOzs7Ozs7OztJQUVPLG9CQUFvQixDQUFDLFVBQXNCLEVBQUUsTUFBbUIsRUFBRSxRQUFrQjs7Y0FDcEYsUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQzs7Y0FFaEQsZUFBZSxHQUFHLElBQUksZUFBZSxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDOztjQUNyRSxZQUFZLEdBQWlDLFVBQVUsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO1FBRXJGLE9BQU8sWUFBWSxDQUFDLFFBQVEsQ0FBQztJQUMvQixDQUFDOzs7Ozs7O0lBRU8sY0FBYyxDQUFDLE1BQW1CLEVBQUUsUUFBa0I7O2NBQ3RELGVBQWUsR0FBRyxJQUFJLE9BQU8sRUFBRTtRQUVyQyxlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN4QyxlQUFlLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV4RCxPQUFPLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDNUQsQ0FBQzs7Ozs7O0lBRU8sZ0JBQWdCLENBQUMsTUFBbUI7O2NBQ3BDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFO2FBQzdDLE1BQU0sRUFBRTthQUNSLGtCQUFrQixFQUFFO2FBQ3BCLGdCQUFnQixFQUFFOztjQUVmLGFBQWEsR0FBRyxJQUFJLGFBQWEsQ0FBQztZQUN0QyxXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVc7WUFDL0IsYUFBYSxFQUFFLE1BQU0sQ0FBQyxhQUFhO1lBQ25DLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtZQUM3QixjQUFjLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUU7WUFDcEQsZ0JBQWdCO1NBQ2pCLENBQUM7UUFFRixPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDOzs7WUFuRUYsVUFBVTs7OztZQW5DVSxRQUFRO1lBQ3BCLE9BQU87Ozs7Ozs7SUFzQ1osZ0NBQTBCOzs7OztJQUMxQiwrQkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciwgQ29tcG9uZW50UmVmLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT3ZlcmxheSwgT3ZlcmxheUNvbmZpZywgT3ZlcmxheVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IENvbXBvbmVudFBvcnRhbCwgUG9ydGFsSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcblxuaW1wb3J0IHsgTW9kYWxSZWYgfSBmcm9tICcuL21vZGFsLXJlZic7XG5pbXBvcnQgeyBNT0RBTF9DT05URU5UX0RBVEEgfSBmcm9tICcuL21vZGFsLnRva2Vucyc7XG5pbXBvcnQgeyBNb2RhbENvbnRhaW5lciB9IGZyb20gJy4vbW9kYWwtY29udGFpbmVyLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9kYWxDb250ZW50IHtcbiAgdGl0bGU/OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuICBib2R5Pzogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PjtcbiAgY2xvc2VCdXR0b24/OiBib29sZWFuO1xuICBhY3Rpb25zPzoge1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgdHlwZTogJ3ByaW1hcnknIHwgJ3NlY29uZGFyeSc7XG4gICAgdGFnPzogc3RyaW5nO1xuICB9W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9kYWxDb25maWcge1xuICBjbG9zZU9uQmFja2Ryb3BDbGljaz86IGJvb2xlYW47XG4gIHBhbmVsQ2xhc3M/OiBzdHJpbmc7XG4gIGhhc0JhY2tkcm9wPzogYm9vbGVhbjtcbiAgYmFja2Ryb3BDbGFzcz86IHN0cmluZztcbiAgY29udGVudD86IE1vZGFsQ29udGVudDtcbn1cblxuY29uc3QgREVGQVVMVF9DT05GSUc6IE1vZGFsQ29uZmlnID0ge1xuICBjbG9zZU9uQmFja2Ryb3BDbGljazogdHJ1ZSxcbiAgaGFzQmFja2Ryb3A6IHRydWUsXG4gIGJhY2tkcm9wQ2xhc3M6ICdiYWNrZHJvcC0tZGFyaycsXG4gIHBhbmVsQ2xhc3M6ICdtb2RhbC0tZGVmYXVsdCcsXG4gIGNvbnRlbnQ6IG51bGxcbn07XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNb2RhbFNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheVxuICApIHsgfVxuXG4gIG9wZW4oY29uZmlnOiBNb2RhbENvbmZpZyA9IHt9KSB7XG4gICAgLy8gT3ZlcnJpZGUgZGVmYXVsdCBjb25maWd1cmF0aW9uXG4gICAgY29uc3QgZGlhbG9nQ29uZmlnID0geyAuLi5ERUZBVUxUX0NPTkZJRywgLi4uY29uZmlnIH07XG5cbiAgICAvLyBSZXR1cm5zIGFuIE92ZXJsYXlSZWYgd2hpY2ggaXMgYSBQb3J0YWxIb3N0XG4gICAgY29uc3Qgb3ZlcmxheVJlZiA9IHRoaXMuY3JlYXRlT3ZlcmxheShkaWFsb2dDb25maWcpO1xuXG4gICAgLy8gSW5zdGFudGlhdGUgcmVtb3RlIGNvbnRyb2xcbiAgICBjb25zdCBtb2RhbFJlZiA9IG5ldyBNb2RhbFJlZihvdmVybGF5UmVmKTtcblxuICAgIGNvbnN0IG92ZXJsYXlDb21wb25lbnQgPSB0aGlzLmF0dGFjaE1vZGFsQ29udGFpbmVyKG92ZXJsYXlSZWYsIGRpYWxvZ0NvbmZpZywgbW9kYWxSZWYpO1xuXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UgPSBvdmVybGF5Q29tcG9uZW50O1xuXG4gICAgaWYgKGRpYWxvZ0NvbmZpZy5jbG9zZU9uQmFja2Ryb3BDbGljaykge1xuICAgICAgb3ZlcmxheVJlZi5iYWNrZHJvcENsaWNrKCkuc3Vic2NyaWJlKF8gPT4gbW9kYWxSZWYuY2xvc2UoJ2NhbmNlbCcpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbW9kYWxSZWY7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU92ZXJsYXkoY29uZmlnOiBNb2RhbENvbmZpZykge1xuICAgIGNvbnN0IG92ZXJsYXlDb25maWcgPSB0aGlzLmdldE92ZXJsYXlDb25maWcoY29uZmlnKTtcbiAgICByZXR1cm4gdGhpcy5vdmVybGF5LmNyZWF0ZShvdmVybGF5Q29uZmlnKTtcbiAgfVxuXG4gIHByaXZhdGUgYXR0YWNoTW9kYWxDb250YWluZXIob3ZlcmxheVJlZjogT3ZlcmxheVJlZiwgY29uZmlnOiBNb2RhbENvbmZpZywgbW9kYWxSZWY6IE1vZGFsUmVmKSB7XG4gICAgY29uc3QgaW5qZWN0b3IgPSB0aGlzLmNyZWF0ZUluamVjdG9yKGNvbmZpZywgbW9kYWxSZWYpO1xuXG4gICAgY29uc3QgY29udGFpbmVyUG9ydGFsID0gbmV3IENvbXBvbmVudFBvcnRhbChNb2RhbENvbnRhaW5lciwgbnVsbCwgaW5qZWN0b3IpO1xuICAgIGNvbnN0IGNvbnRhaW5lclJlZjogQ29tcG9uZW50UmVmPE1vZGFsQ29udGFpbmVyPiA9IG92ZXJsYXlSZWYuYXR0YWNoKGNvbnRhaW5lclBvcnRhbCk7XG5cbiAgICByZXR1cm4gY29udGFpbmVyUmVmLmluc3RhbmNlO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVJbmplY3Rvcihjb25maWc6IE1vZGFsQ29uZmlnLCBtb2RhbFJlZjogTW9kYWxSZWYpOiBQb3J0YWxJbmplY3RvciB7XG4gICAgY29uc3QgaW5qZWN0aW9uVG9rZW5zID0gbmV3IFdlYWtNYXAoKTtcblxuICAgIGluamVjdGlvblRva2Vucy5zZXQoTW9kYWxSZWYsIG1vZGFsUmVmKTtcbiAgICBpbmplY3Rpb25Ub2tlbnMuc2V0KE1PREFMX0NPTlRFTlRfREFUQSwgY29uZmlnLmNvbnRlbnQpO1xuXG4gICAgcmV0dXJuIG5ldyBQb3J0YWxJbmplY3Rvcih0aGlzLmluamVjdG9yLCBpbmplY3Rpb25Ub2tlbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPdmVybGF5Q29uZmlnKGNvbmZpZzogTW9kYWxDb25maWcpOiBPdmVybGF5Q29uZmlnIHtcbiAgICBjb25zdCBwb3NpdGlvblN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5LnBvc2l0aW9uKClcbiAgICAgIC5nbG9iYWwoKVxuICAgICAgLmNlbnRlckhvcml6b250YWxseSgpXG4gICAgICAuY2VudGVyVmVydGljYWxseSgpO1xuXG4gICAgY29uc3Qgb3ZlcmxheUNvbmZpZyA9IG5ldyBPdmVybGF5Q29uZmlnKHtcbiAgICAgIGhhc0JhY2tkcm9wOiBjb25maWcuaGFzQmFja2Ryb3AsXG4gICAgICBiYWNrZHJvcENsYXNzOiBjb25maWcuYmFja2Ryb3BDbGFzcyxcbiAgICAgIHBhbmVsQ2xhc3M6IGNvbmZpZy5wYW5lbENsYXNzLFxuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLm5vb3AoKSxcbiAgICAgIHBvc2l0aW9uU3RyYXRlZ3lcbiAgICB9KTtcblxuICAgIHJldHVybiBvdmVybGF5Q29uZmlnO1xuICB9XG59XG4iXX0=