@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>
228 lines • 16.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Injectable, Injector } from '@angular/core';
import { Overlay, OverlayConfig, OverlayPositionBuilder } from '@angular/cdk/overlay';
import { ComponentPortal, PortalInjector } from '@angular/cdk/portal';
import { PopoverRef } from './popover-ref';
import { POPOVER_CONTENT_DATA } from './popover.tokens';
import { PopoverContainer } from './popover-container.component';
import { fromEvent } from 'rxjs';
import { skip, filter, take } from 'rxjs/operators';
/** @type {?} */
var positions = {
bottom: {
originY: 'bottom',
overlayY: 'top',
offsetY: 4,
},
top: {
originY: 'top',
overlayY: 'bottom',
offsetY: -4,
}
};
/** @type {?} */
var alignments = {
left: {
originX: 'start',
overlayX: 'start',
},
right: {
originX: 'end',
overlayX: 'end',
},
center: {
originX: 'center',
overlayX: 'center',
}
};
/**
* @record
*/
export function PopoverConfig() { }
if (false) {
/** @type {?|undefined} */
PopoverConfig.prototype.content;
/** @type {?} */
PopoverConfig.prototype.position;
/** @type {?} */
PopoverConfig.prototype.alignment;
}
/** @type {?} */
var DEFAULT_CONFIG = {
content: null,
position: 'bottom',
alignment: 'left',
};
var PopoverService = /** @class */ (function () {
function PopoverService(injector, overlay, overlayPositionBuilder) {
this.injector = injector;
this.overlay = overlay;
this.overlayPositionBuilder = overlayPositionBuilder;
}
/**
* @param {?=} config
* @param {?=} target
* @return {?}
*/
PopoverService.prototype.open = /**
* @param {?=} config
* @param {?=} target
* @return {?}
*/
function (config, target) {
var _this = this;
if (config === void 0) { config = DEFAULT_CONFIG; }
// Override default configuration
/** @type {?} */
var popoverConfig = tslib_1.__assign({}, DEFAULT_CONFIG, config);
// Returns an OverlayRef which is a PortalHost
/** @type {?} */
var overlayRef = this.createOverlay(popoverConfig, target);
// Instantiate remote control
/** @type {?} */
var popoverRef = new PopoverRef(overlayRef);
/** @type {?} */
var overlayComponent = this.attachPopoverContainer(overlayRef, popoverConfig, popoverRef);
popoverRef.componentInstance = overlayComponent;
this.clickSubscription = fromEvent(document, 'click')
.pipe(skip(1), filter((/**
* @param {?} event
* @return {?}
*/
function (event) {
/** @type {?} */
var clickTarget = (/** @type {?} */ (event.target));
return overlayRef && overlayRef.overlayElement && !overlayRef.overlayElement.contains(clickTarget);
})), take(1)).subscribe((/**
* @param {?} _
* @return {?}
*/
function (_) {
popoverRef.close();
_this.clickSubscription.unsubscribe();
}));
return popoverRef;
};
/**
* @private
* @param {?} config
* @param {?} target
* @return {?}
*/
PopoverService.prototype.createOverlay = /**
* @private
* @param {?} config
* @param {?} target
* @return {?}
*/
function (config, target) {
/** @type {?} */
var overlayConfig = this.getOverlayConfig(config, target);
return this.overlay.create(overlayConfig);
};
/**
* @private
* @param {?} overlayRef
* @param {?} config
* @param {?} popoverRef
* @return {?}
*/
PopoverService.prototype.attachPopoverContainer = /**
* @private
* @param {?} overlayRef
* @param {?} config
* @param {?} popoverRef
* @return {?}
*/
function (overlayRef, config, popoverRef) {
/** @type {?} */
var injector = this.createInjector(config, popoverRef);
/** @type {?} */
var containerPortal = new ComponentPortal(PopoverContainer, null, injector);
/** @type {?} */
var containerRef = overlayRef.attach(containerPortal);
return containerRef.instance;
};
/**
* @private
* @param {?} config
* @param {?} popoverRef
* @return {?}
*/
PopoverService.prototype.createInjector = /**
* @private
* @param {?} config
* @param {?} popoverRef
* @return {?}
*/
function (config, popoverRef) {
/** @type {?} */
var injectionTokens = new WeakMap();
injectionTokens.set(PopoverRef, popoverRef);
injectionTokens.set(POPOVER_CONTENT_DATA, config.content);
return new PortalInjector(this.injector, injectionTokens);
};
/**
* @private
* @param {?} config
* @param {?} target
* @return {?}
*/
PopoverService.prototype.getOverlayConfig = /**
* @private
* @param {?} config
* @param {?} target
* @return {?}
*/
function (config, target) {
/** @type {?} */
var positionStrategy = this.overlayPositionBuilder
.flexibleConnectedTo(target)
.withPositions([(/** @type {?} */ (tslib_1.__assign({}, positions[config.position], alignments[config.alignment])))]);
/** @type {?} */
var overlayConfig = new OverlayConfig({
hasBackdrop: false,
scrollStrategy: this.overlay.scrollStrategies.close(),
positionStrategy: positionStrategy
});
return overlayConfig;
};
PopoverService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
PopoverService.ctorParameters = function () { return [
{ type: Injector },
{ type: Overlay },
{ type: OverlayPositionBuilder }
]; };
return PopoverService;
}());
export { PopoverService };
if (false) {
/**
* @type {?}
* @private
*/
PopoverService.prototype.clickSubscription;
/**
* @type {?}
* @private
*/
PopoverService.prototype.injector;
/**
* @type {?}
* @private
*/
PopoverService.prototype.overlay;
/**
* @type {?}
* @private
*/
PopoverService.prototype.overlayPositionBuilder;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGt1c2hraS9uZy1zdWthLyIsInNvdXJjZXMiOlsibGliL3BvcG92ZXIvcG9wb3Zlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQXlDLE1BQU0sZUFBZSxDQUFDO0FBQzVGLE9BQU8sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFjLHNCQUFzQixFQUFxQixNQUFNLHNCQUFzQixDQUFDO0FBQ3JILE9BQU8sRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNqRSxPQUFPLEVBQWdCLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7SUFHOUMsU0FBUyxHQUFHO0lBQ2hCLE1BQU0sRUFBRTtRQUNOLE9BQU8sRUFBRSxRQUFRO1FBQ2pCLFFBQVEsRUFBRSxLQUFLO1FBQ2YsT0FBTyxFQUFFLENBQUM7S0FDWDtJQUNELEdBQUcsRUFBRTtRQUNILE9BQU8sRUFBRSxLQUFLO1FBQ2QsUUFBUSxFQUFFLFFBQVE7UUFDbEIsT0FBTyxFQUFFLENBQUMsQ0FBQztLQUNaO0NBQ0Y7O0lBRUssVUFBVSxHQUFHO0lBQ2pCLElBQUksRUFBRTtRQUNKLE9BQU8sRUFBRSxPQUFPO1FBQ2hCLFFBQVEsRUFBRSxPQUFPO0tBQ2xCO0lBQ0QsS0FBSyxFQUFFO1FBQ0wsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUsS0FBSztLQUNoQjtJQUNELE1BQU0sRUFB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Q0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzVELENBQUM7Ozs7Ozs7SUFFTyx5Q0FBZ0I7Ozs7OztJQUF4QixVQUF5QixNQUFxQixFQUFFLE1BQWdDOztZQUN4RSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsc0JBQXNCO2FBQ2pELG1CQUFtQixDQUFDLE1BQU0sQ0FBQzthQUMzQixhQUFhLENBQUMsQ0FBQyx3Q0FBSyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFLLFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQXVCLENBQUMsQ0FBQzs7WUFFckcsYUFBYSxHQUFHLElBQUksYUFBYSxDQUFDO1lBQ3RDLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLGNBQWMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRTtZQUNyRCxnQkFBZ0Isa0JBQUE7U0FDakIsQ0FBQztRQUVGLE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7O2dCQTNFRixVQUFVOzs7O2dCQW5EVSxRQUFRO2dCQUNwQixPQUFPO2dCQUE2QixzQkFBc0I7O0lBOEhuRSxxQkFBQztDQUFBLEFBNUVELElBNEVDO1NBM0VZLGNBQWM7Ozs7OztJQUN6QiwyQ0FBd0M7Ozs7O0lBR3RDLGtDQUEwQjs7Ozs7SUFDMUIsaUNBQXdCOzs7OztJQUN4QixnREFBc0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciwgQ29tcG9uZW50UmVmLCBUZW1wbGF0ZVJlZiwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT3ZlcmxheSwgT3ZlcmxheUNvbmZpZywgT3ZlcmxheVJlZiwgT3ZlcmxheVBvc2l0aW9uQnVpbGRlciwgQ29ubmVjdGVkUG9zaXRpb24gfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwsIFBvcnRhbEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5cbmltcG9ydCB7IFBvcG92ZXJSZWYgfSBmcm9tICcuL3BvcG92ZXItcmVmJztcbmltcG9ydCB7IFBPUE9WRVJfQ09OVEVOVF9EQVRBIH0gZnJvbSAnLi9wb3BvdmVyLnRva2Vucyc7XG5pbXBvcnQgeyBQb3BvdmVyQ29udGFpbmVyIH0gZnJvbSAnLi9wb3BvdmVyLWNvbnRhaW5lci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHNraXAsIGZpbHRlciwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFBvcG92ZXJDb250ZW50IH0gZnJvbSAnLi9wb3BvdmVyLWNvbnRlbnQnO1xuXG5jb25zdCBwb3NpdGlvbnMgPSB7XG4gIGJvdHRvbToge1xuICAgIG9yaWdpblk6ICdib3R0b20nLFxuICAgIG92ZXJsYXlZOiAndG9wJyxcbiAgICBvZmZzZXRZOiA0LFxuICB9LFxuICB0b3A6IHtcbiAgICBvcmlnaW5ZOiAndG9wJyxcbiAgICBvdmVybGF5WTogJ2JvdHRvbScsXG4gICAgb2Zmc2V0WTogLTQsXG4gIH1cbn07XG5cbmNvbnN0IGFsaWdubWVudHMgPSB7XG4gIGxlZnQ6IHtcbiAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICB9LFxuICByaWdodDoge1xuICAgIG9yaWdpblg6ICdlbmQnLFxuICAgIG92ZXJsYXlYOiAnZW5kJyxcbiAgfSxcbiAgY2VudGVyOiB7XG4gICAgb3JpZ2luWDogJ2NlbnRlcicsXG4gICAgb3ZlcmxheVg6ICdjZW50ZXInLFxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9wb3ZlckNvbmZpZyB7XG4gIGNvbnRlbnQ/OiBQb3BvdmVyQ29udGVudDtcbiAgcG9zaXRpb246ICd0b3AnIHwgJ2JvdHRvbSc7XG4gIGFsaWdubWVudDogJ2xlZnQnIHwgJ3JpZ2h0JyB8ICdjZW50ZXInO1xufVxuXG5jb25zdCBERUZBVUxUX0NPTkZJRzogUG9wb3ZlckNvbmZpZyA9IHtcbiAgY29udGVudDogbnVsbCxcbiAgcG9zaXRpb246ICdib3R0b20nLFxuICBhbGlnbm1lbnQ6ICdsZWZ0Jyxcbn07XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBQb3BvdmVyU2VydmljZSB7XG4gIHByaXZhdGUgY2xpY2tTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXksXG4gICAgcHJpdmF0ZSBvdmVybGF5UG9zaXRpb25CdWlsZGVyOiBPdmVybGF5UG9zaXRpb25CdWlsZGVyLFxuICApIHsgfVxuXG4gIG9wZW4oY29uZmlnOiBQb3BvdmVyQ29uZmlnID0gREVGQVVMVF9DT05GSUcsIHRhcmdldDogRWxlbWVudFJlZiB8IEhUTUxFbGVtZW50KSB7XG4gICAgLy8gT3ZlcnJpZGUgZGVmYXVsdCBjb25maWd1cmF0aW9uXG4gICAgY29uc3QgcG9wb3ZlckNvbmZpZyA9IHsgLi4uREVGQVVMVF9DT05GSUcsIC4uLmNvbmZpZyB9O1xuXG4gICAgLy8gUmV0dXJucyBhbiBPdmVybGF5UmVmIHdoaWNoIGlzIGEgUG9ydGFsSG9zdFxuICAgIGNvbnN0IG92ZXJsYXlSZWYgPSB0aGlzLmNyZWF0ZU92ZXJsYXkocG9wb3ZlckNvbmZpZywgdGFyZ2V0KTtcblxuICAgIC8vIEluc3RhbnRpYXRlIHJlbW90ZSBjb250cm9sXG4gICAgY29uc3QgcG9wb3ZlclJlZiA9IG5ldyBQb3BvdmVyUmVmKG92ZXJsYXlSZWYpO1xuXG4gICAgY29uc3Qgb3ZlcmxheUNvbXBvbmVudCA9IHRoaXMuYXR0YWNoUG9wb3ZlckNvbnRhaW5lcihvdmVybGF5UmVmLCBwb3BvdmVyQ29uZmlnLCBwb3BvdmVyUmVmKTtcblxuICAgIHBvcG92ZXJSZWYuY29tcG9uZW50SW5zdGFuY2UgPSBvdmVybGF5Q29tcG9uZW50O1xuXG4gICAgdGhpcy5jbGlja1N1YnNjcmlwdGlvbiA9IGZyb21FdmVudDxNb3VzZUV2ZW50Pihkb2N1bWVudCwgJ2NsaWNrJylcbiAgICAgIC5waXBlKFxuICAgICAgICBza2lwKDEpLFxuICAgICAgICBmaWx0ZXIoZXZlbnQgPT4ge1xuICAgICAgICAgIGNvbnN0IGNsaWNrVGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgIHJldHVybiBvdmVybGF5UmVmICYmIG92ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQgJiYgIW92ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuY29udGFpbnMoY2xpY2tUYXJnZXQpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZSgxKVxuICAgICAgKS5zdWJzY3JpYmUoXyA9PiB7XG4gICAgICAgIHBvcG92ZXJSZWYuY2xvc2UoKTtcbiAgICAgICAgdGhpcy5jbGlja1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gcG9wb3ZlclJlZjtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlT3ZlcmxheShjb25maWc6IFBvcG92ZXJDb25maWcsIHRhcmdldDogRWxlbWVudFJlZiB8IEhUTUxFbGVtZW50KSB7XG4gICAgY29uc3Qgb3ZlcmxheUNvbmZpZyA9IHRoaXMuZ2V0T3ZlcmxheUNvbmZpZyhjb25maWcsIHRhcmdldCk7XG4gICAgcmV0dXJuIHRoaXMub3ZlcmxheS5jcmVhdGUob3ZlcmxheUNvbmZpZyk7XG4gIH1cblxuICBwcml2YXRlIGF0dGFjaFBvcG92ZXJDb250YWluZXIob3ZlcmxheVJlZjogT3ZlcmxheVJlZiwgY29uZmlnOiBQb3BvdmVyQ29uZmlnLCBwb3BvdmVyUmVmOiBQb3BvdmVyUmVmKSB7XG4gICAgY29uc3QgaW5qZWN0b3IgPSB0aGlzLmNyZWF0ZUluamVjdG9yKGNvbmZpZywgcG9wb3ZlclJlZik7XG5cbiAgICBjb25zdCBjb250YWluZXJQb3J0YWwgPSBuZXcgQ29tcG9uZW50UG9ydGFsKFBvcG92ZXJDb250YWluZXIsIG51bGwsIGluamVjdG9yKTtcbiAgICBjb25zdCBjb250YWluZXJSZWY6IENvbXBvbmVudFJlZjxQb3BvdmVyQ29udGFpbmVyPiA9IG92ZXJsYXlSZWYuYXR0YWNoKGNvbnRhaW5lclBvcnRhbCk7XG5cbiAgICByZXR1cm4gY29udGFpbmVyUmVmLmluc3RhbmNlO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVJbmplY3Rvcihjb25maWc6IFBvcG92ZXJDb25maWcsIHBvcG92ZXJSZWY6IFBvcG92ZXJSZWYpOiBQb3J0YWxJbmplY3RvciB7XG4gICAgY29uc3QgaW5qZWN0aW9uVG9rZW5zID0gbmV3IFdlYWtNYXAoKTtcblxuICAgIGluamVjdGlvblRva2Vucy5zZXQoUG9wb3ZlclJlZiwgcG9wb3ZlclJlZik7XG4gICAgaW5qZWN0aW9uVG9rZW5zLnNldChQT1BPVkVSX0NPTlRFTlRfREFUQSwgY29uZmlnLmNvbnRlbnQpO1xuXG4gICAgcmV0dXJuIG5ldyBQb3J0YWxJbmplY3Rvcih0aGlzLmluamVjdG9yLCBpbmplY3Rpb25Ub2tlbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPdmVybGF5Q29uZmlnKGNvbmZpZzogUG9wb3ZlckNvbmZpZywgdGFyZ2V0OiBFbGVtZW50UmVmIHwgSFRNTEVsZW1lbnQpOiBPdmVybGF5Q29uZmlnIHtcbiAgICBjb25zdCBwb3NpdGlvblN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5UG9zaXRpb25CdWlsZGVyXG4gICAgICAuZmxleGlibGVDb25uZWN0ZWRUbyh0YXJnZXQpXG4gICAgICAud2l0aFBvc2l0aW9ucyhbeyAuLi5wb3NpdGlvbnNbY29uZmlnLnBvc2l0aW9uXSwgLi4uYWxpZ25tZW50c1tjb25maWcuYWxpZ25tZW50XSB9IGFzIENvbm5lY3RlZFBvc2l0aW9uXSk7XG5cbiAgICBjb25zdCBvdmVybGF5Q29uZmlnID0gbmV3IE92ZXJsYXlDb25maWcoe1xuICAgICAgaGFzQmFja2Ryb3A6IGZhbHNlLFxuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLmNsb3NlKCksXG4gICAgICBwb3NpdGlvblN0cmF0ZWd5XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb3ZlcmxheUNvbmZpZztcbiAgfVxufVxuIl19