UNPKG

igniteui-angular

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

198 lines • 17.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { ConnectedPositioningStrategy } from './connected-positioning-strategy'; import { getViewportRect, getTargetRect } from '../utilities'; /** * @abstract */ var /** * @abstract */ BaseFitPositionStrategy = /** @class */ (function (_super) { tslib_1.__extends(BaseFitPositionStrategy, _super); function BaseFitPositionStrategy() { return _super !== null && _super.apply(this, arguments) || this; } /** @inheritdoc */ /** * \@inheritdoc * @param {?} contentElement * @param {?} size * @param {?=} document * @param {?=} initialCall * @return {?} */ BaseFitPositionStrategy.prototype.position = /** * \@inheritdoc * @param {?} contentElement * @param {?} size * @param {?=} document * @param {?=} initialCall * @return {?} */ function (contentElement, size, document, initialCall) { /** @type {?} */ var targetRect = getTargetRect(this.settings); /** @type {?} */ var contentElementRect = contentElement.getBoundingClientRect(); if (initialCall) { /** @type {?} */ var connectedFit = {}; connectedFit.targetRect = targetRect; connectedFit.contentElementRect = contentElementRect; this._initialSettings = this._initialSettings || Object.assign({}, this.settings); this.settings = Object.assign({}, this._initialSettings); connectedFit.viewPortRect = getViewportRect(document); this.updateViewPortFit(connectedFit); if (!connectedFit.fitHorizontal || !connectedFit.fitVertical) { this.fitInViewport(contentElement, connectedFit); } } this.setStyle(contentElement, targetRect, contentElementRect); }; /** * Checks if element can fit in viewport and updates provided connectedFit * with the result * @param connectedFit connectedFit to update */ /** * Checks if element can fit in viewport and updates provided connectedFit * with the result * @protected * @param {?} connectedFit connectedFit to update * @return {?} */ BaseFitPositionStrategy.prototype.updateViewPortFit = /** * Checks if element can fit in viewport and updates provided connectedFit * with the result * @protected * @param {?} connectedFit connectedFit to update * @return {?} */ function (connectedFit) { connectedFit.left = this.calculateLeft(connectedFit.targetRect, connectedFit.contentElementRect, this.settings.horizontalStartPoint, this.settings.horizontalDirection); connectedFit.right = connectedFit.left + connectedFit.contentElementRect.width; connectedFit.fitHorizontal = connectedFit.viewPortRect.left < connectedFit.left && connectedFit.right < connectedFit.viewPortRect.right; connectedFit.top = this.calculateTop(connectedFit.targetRect, connectedFit.contentElementRect, this.settings.verticalStartPoint, this.settings.verticalDirection); connectedFit.bottom = connectedFit.top + connectedFit.contentElementRect.height; connectedFit.fitVertical = connectedFit.viewPortRect.top < connectedFit.top && connectedFit.bottom < connectedFit.viewPortRect.bottom; }; /** * Calculates the position of the left border of the element if it gets positioned * with provided start point and direction * @param targetRect Rectangle of the target where element is attached * @param elementRect Rectangle of the element * @param startPoint Start point of the target * @param direction Direction in which to show the element */ /** * Calculates the position of the left border of the element if it gets positioned * with provided start point and direction * @protected * @param {?} targetRect Rectangle of the target where element is attached * @param {?} elementRect Rectangle of the element * @param {?} startPoint Start point of the target * @param {?} direction Direction in which to show the element * @return {?} */ BaseFitPositionStrategy.prototype.calculateLeft = /** * Calculates the position of the left border of the element if it gets positioned * with provided start point and direction * @protected * @param {?} targetRect Rectangle of the target where element is attached * @param {?} elementRect Rectangle of the element * @param {?} startPoint Start point of the target * @param {?} direction Direction in which to show the element * @return {?} */ function (targetRect, elementRect, startPoint, direction) { return targetRect.right + targetRect.width * startPoint + elementRect.width * direction; }; /** * Calculates the position of the top border of the element if it gets positioned * with provided position settings related to the target * @param targetRect Rectangle of the target where element is attached * @param elementRect Rectangle of the element * @param startPoint Start point of the target * @param direction Direction in which to show the element */ /** * Calculates the position of the top border of the element if it gets positioned * with provided position settings related to the target * @protected * @param {?} targetRect Rectangle of the target where element is attached * @param {?} elementRect Rectangle of the element * @param {?} startPoint Start point of the target * @param {?} direction Direction in which to show the element * @return {?} */ BaseFitPositionStrategy.prototype.calculateTop = /** * Calculates the position of the top border of the element if it gets positioned * with provided position settings related to the target * @protected * @param {?} targetRect Rectangle of the target where element is attached * @param {?} elementRect Rectangle of the element * @param {?} startPoint Start point of the target * @param {?} direction Direction in which to show the element * @return {?} */ function (targetRect, elementRect, startPoint, direction) { return targetRect.bottom + targetRect.height * startPoint + elementRect.height * direction; }; return BaseFitPositionStrategy; }(ConnectedPositioningStrategy)); /** * @abstract */ export { BaseFitPositionStrategy }; if (false) { /** * @type {?} * @protected */ BaseFitPositionStrategy.prototype._initialSize; /** * @type {?} * @protected */ BaseFitPositionStrategy.prototype._initialSettings; /** * Fits the element into viewport according to the position settings * @abstract * @protected * @param {?} element element to fit in viewport * @param {?} connectedFit connectedFit object containing all necessary parameters * @return {?} */ BaseFitPositionStrategy.prototype.fitInViewport = function (element, connectedFit) { }; } /** * @record */ export function ConnectedFit() { } if (false) { /** @type {?|undefined} */ ConnectedFit.prototype.contentElementRect; /** @type {?|undefined} */ ConnectedFit.prototype.targetRect; /** @type {?|undefined} */ ConnectedFit.prototype.viewPortRect; /** @type {?|undefined} */ ConnectedFit.prototype.fitHorizontal; /** @type {?|undefined} */ ConnectedFit.prototype.fitVertical; /** @type {?|undefined} */ ConnectedFit.prototype.left; /** @type {?|undefined} */ ConnectedFit.prototype.right; /** @type {?|undefined} */ ConnectedFit.prototype.top; /** @type {?|undefined} */ ConnectedFit.prototype.bottom; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1maXQtcG9zaXRpb24tc3RyYXRlZ3kuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pZ25pdGV1aS1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL292ZXJsYXkvcG9zaXRpb24vYmFzZS1maXQtcG9zaXRpb24tc3RyYXRlZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNoRixPQUFPLEVBQWtFLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7QUFFOUg7Ozs7SUFBc0QsbURBQTRCO0lBQWxGOztJQWtGQSxDQUFDO0lBOUVHLGtCQUFrQjs7Ozs7Ozs7O0lBQ2xCLDBDQUFROzs7Ozs7OztJQUFSLFVBQVMsY0FBMkIsRUFBRSxJQUFVLEVBQUUsUUFBbUIsRUFBRSxXQUFxQjs7WUFDbEYsVUFBVSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDOztZQUN6QyxrQkFBa0IsR0FBRyxjQUFjLENBQUMscUJBQXFCLEVBQUU7UUFDakUsSUFBSSxXQUFXLEVBQUU7O2dCQUNQLFlBQVksR0FBaUIsRUFBRTtZQUNyQyxZQUFZLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztZQUNyQyxZQUFZLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7WUFDckQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEYsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUN6RCxZQUFZLENBQUMsWUFBWSxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN0RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFO2dCQUMxRCxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQzthQUNwRDtTQUNKO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVEOzs7O09BSUc7Ozs7Ozs7O0lBQ08sbURBQWlCOzs7Ozs7O0lBQTNCLFVBQTRCLFlBQTBCO1FBQ2xELFlBQVksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FDbEMsWUFBWSxDQUFDLFVBQVUsRUFDdkIsWUFBWSxDQUFDLGtCQUFrQixFQUMvQixJQUFJLENBQUMsUUFBUSxDQUFDLG9CQUFvQixFQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDdkMsWUFBWSxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7UUFDL0UsWUFBWSxDQUFDLGFBQWE7WUFDdEIsWUFBWSxDQUFDLFlBQVksQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDLElBQUksSUFBSSxZQUFZLENBQUMsS0FBSyxHQUFHLFlBQVksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO1FBRS9HLFlBQVksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FDaEMsWUFBWSxDQUFDLFVBQVUsRUFDdkIsWUFBWSxDQUFDLGtCQUFrQixFQUMvQixJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDckMsWUFBWSxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsR0FBRyxHQUFHLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUM7UUFDaEYsWUFBWSxDQUFDLFdBQVc7WUFDcEIsWUFBWSxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsWUFBWSxDQUFDLEdBQUcsSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO0lBQ25ILENBQUM7SUFFRDs7Ozs7OztPQU9HOzs7Ozs7Ozs7OztJQUNPLCtDQUFhOzs7Ozs7Ozs7O0lBQXZCLFVBQ0ksVUFBc0IsRUFBRSxXQUF1QixFQUFFLFVBQStCLEVBQUUsU0FBOEI7UUFDaEgsT0FBTyxVQUFVLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLEdBQUcsVUFBVSxHQUFHLFdBQVcsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDO0lBQzVGLENBQUM7SUFFRDs7Ozs7OztPQU9HOzs7Ozs7Ozs7OztJQUNPLDhDQUFZOzs7Ozs7Ozs7O0lBQXRCLFVBQ0ksVUFBc0IsRUFBRSxXQUF1QixFQUFFLFVBQTZCLEVBQUUsU0FBNEI7UUFDNUcsT0FBTyxVQUFVLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLEdBQUcsVUFBVSxHQUFHLFdBQVcsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO0lBQy9GLENBQUM7SUFVTCw4QkFBQztBQUFELENBQUMsQUFsRkQsQ0FBc0QsNEJBQTRCLEdBa0ZqRjs7Ozs7Ozs7OztJQWpGRywrQ0FBNkI7Ozs7O0lBQzdCLG1EQUE2Qzs7Ozs7Ozs7O0lBNkU3Qyx1RkFFZ0M7Ozs7O0FBR3BDLGtDQVVDOzs7SUFURywwQ0FBZ0M7O0lBQ2hDLGtDQUF3Qjs7SUFDeEIsb0NBQTBCOztJQUMxQixxQ0FBd0I7O0lBQ3hCLG1DQUFzQjs7SUFDdEIsNEJBQWM7O0lBQ2QsNkJBQWU7O0lBQ2YsMkJBQWE7O0lBQ2IsOEJBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29ubmVjdGVkUG9zaXRpb25pbmdTdHJhdGVneSB9IGZyb20gJy4vY29ubmVjdGVkLXBvc2l0aW9uaW5nLXN0cmF0ZWd5JztcbmltcG9ydCB7IEhvcml6b250YWxBbGlnbm1lbnQsIFZlcnRpY2FsQWxpZ25tZW50LCBQb3NpdGlvblNldHRpbmdzLCBTaXplLCBnZXRWaWV3cG9ydFJlY3QsIGdldFRhcmdldFJlY3QgfSBmcm9tICcuLi91dGlsaXRpZXMnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUZpdFBvc2l0aW9uU3RyYXRlZ3kgZXh0ZW5kcyBDb25uZWN0ZWRQb3NpdGlvbmluZ1N0cmF0ZWd5IHtcbiAgICBwcm90ZWN0ZWQgX2luaXRpYWxTaXplOiBTaXplO1xuICAgIHByb3RlY3RlZCBfaW5pdGlhbFNldHRpbmdzOiBQb3NpdGlvblNldHRpbmdzO1xuXG4gICAgLyoqIEBpbmhlcml0ZG9jICovXG4gICAgcG9zaXRpb24oY29udGVudEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBzaXplOiBTaXplLCBkb2N1bWVudD86IERvY3VtZW50LCBpbml0aWFsQ2FsbD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0UmVjdCA9IGdldFRhcmdldFJlY3QodGhpcy5zZXR0aW5ncyk7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRFbGVtZW50UmVjdCA9IGNvbnRlbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBpZiAoaW5pdGlhbENhbGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbm5lY3RlZEZpdDogQ29ubmVjdGVkRml0ID0ge307XG4gICAgICAgICAgICBjb25uZWN0ZWRGaXQudGFyZ2V0UmVjdCA9IHRhcmdldFJlY3Q7XG4gICAgICAgICAgICBjb25uZWN0ZWRGaXQuY29udGVudEVsZW1lbnRSZWN0ID0gY29udGVudEVsZW1lbnRSZWN0O1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbFNldHRpbmdzID0gdGhpcy5faW5pdGlhbFNldHRpbmdzIHx8IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuc2V0dGluZ3MpO1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX2luaXRpYWxTZXR0aW5ncyk7XG4gICAgICAgICAgICBjb25uZWN0ZWRGaXQudmlld1BvcnRSZWN0ID0gZ2V0Vmlld3BvcnRSZWN0KGRvY3VtZW50KTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmlld1BvcnRGaXQoY29ubmVjdGVkRml0KTtcbiAgICAgICAgICAgIGlmICghY29ubmVjdGVkRml0LmZpdEhvcml6b250YWwgfHwgIWNvbm5lY3RlZEZpdC5maXRWZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZml0SW5WaWV3cG9ydChjb250ZW50RWxlbWVudCwgY29ubmVjdGVkRml0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFN0eWxlKGNvbnRlbnRFbGVtZW50LCB0YXJnZXRSZWN0LCBjb250ZW50RWxlbWVudFJlY3QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBlbGVtZW50IGNhbiBmaXQgaW4gdmlld3BvcnQgYW5kIHVwZGF0ZXMgcHJvdmlkZWQgY29ubmVjdGVkRml0XG4gICAgICogd2l0aCB0aGUgcmVzdWx0XG4gICAgICogQHBhcmFtIGNvbm5lY3RlZEZpdCBjb25uZWN0ZWRGaXQgdG8gdXBkYXRlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHVwZGF0ZVZpZXdQb3J0Rml0KGNvbm5lY3RlZEZpdDogQ29ubmVjdGVkRml0KSB7XG4gICAgICAgIGNvbm5lY3RlZEZpdC5sZWZ0ID0gdGhpcy5jYWxjdWxhdGVMZWZ0KFxuICAgICAgICAgICAgY29ubmVjdGVkRml0LnRhcmdldFJlY3QsXG4gICAgICAgICAgICBjb25uZWN0ZWRGaXQuY29udGVudEVsZW1lbnRSZWN0LFxuICAgICAgICAgICAgdGhpcy5zZXR0aW5ncy5ob3Jpem9udGFsU3RhcnRQb2ludCxcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MuaG9yaXpvbnRhbERpcmVjdGlvbik7XG4gICAgICAgIGNvbm5lY3RlZEZpdC5yaWdodCA9IGNvbm5lY3RlZEZpdC5sZWZ0ICsgY29ubmVjdGVkRml0LmNvbnRlbnRFbGVtZW50UmVjdC53aWR0aDtcbiAgICAgICAgY29ubmVjdGVkRml0LmZpdEhvcml6b250YWwgPVxuICAgICAgICAgICAgY29ubmVjdGVkRml0LnZpZXdQb3J0UmVjdC5sZWZ0IDwgY29ubmVjdGVkRml0LmxlZnQgJiYgY29ubmVjdGVkRml0LnJpZ2h0IDwgY29ubmVjdGVkRml0LnZpZXdQb3J0UmVjdC5yaWdodDtcblxuICAgICAgICBjb25uZWN0ZWRGaXQudG9wID0gdGhpcy5jYWxjdWxhdGVUb3AoXG4gICAgICAgICAgICBjb25uZWN0ZWRGaXQudGFyZ2V0UmVjdCxcbiAgICAgICAgICAgIGNvbm5lY3RlZEZpdC5jb250ZW50RWxlbWVudFJlY3QsXG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzLnZlcnRpY2FsU3RhcnRQb2ludCxcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MudmVydGljYWxEaXJlY3Rpb24pO1xuICAgICAgICBjb25uZWN0ZWRGaXQuYm90dG9tID0gY29ubmVjdGVkRml0LnRvcCArIGNvbm5lY3RlZEZpdC5jb250ZW50RWxlbWVudFJlY3QuaGVpZ2h0O1xuICAgICAgICBjb25uZWN0ZWRGaXQuZml0VmVydGljYWwgPVxuICAgICAgICAgICAgY29ubmVjdGVkRml0LnZpZXdQb3J0UmVjdC50b3AgPCBjb25uZWN0ZWRGaXQudG9wICYmIGNvbm5lY3RlZEZpdC5ib3R0b20gPCBjb25uZWN0ZWRGaXQudmlld1BvcnRSZWN0LmJvdHRvbTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBwb3NpdGlvbiBvZiB0aGUgbGVmdCBib3JkZXIgb2YgdGhlIGVsZW1lbnQgaWYgaXQgZ2V0cyBwb3NpdGlvbmVkXG4gICAgICogd2l0aCBwcm92aWRlZCBzdGFydCBwb2ludCBhbmQgZGlyZWN0aW9uXG4gICAgICogQHBhcmFtIHRhcmdldFJlY3QgUmVjdGFuZ2xlIG9mIHRoZSB0YXJnZXQgd2hlcmUgZWxlbWVudCBpcyBhdHRhY2hlZFxuICAgICAqIEBwYXJhbSBlbGVtZW50UmVjdCBSZWN0YW5nbGUgb2YgdGhlIGVsZW1lbnRcbiAgICAgKiBAcGFyYW0gc3RhcnRQb2ludCBTdGFydCBwb2ludCBvZiB0aGUgdGFyZ2V0XG4gICAgICogQHBhcmFtIGRpcmVjdGlvbiBEaXJlY3Rpb24gaW4gd2hpY2ggdG8gc2hvdyB0aGUgZWxlbWVudFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBjYWxjdWxhdGVMZWZ0KFxuICAgICAgICB0YXJnZXRSZWN0OiBDbGllbnRSZWN0LCBlbGVtZW50UmVjdDogQ2xpZW50UmVjdCwgc3RhcnRQb2ludDogSG9yaXpvbnRhbEFsaWdubWVudCwgZGlyZWN0aW9uOiBIb3Jpem9udGFsQWxpZ25tZW50KTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRhcmdldFJlY3QucmlnaHQgKyB0YXJnZXRSZWN0LndpZHRoICogc3RhcnRQb2ludCArIGVsZW1lbnRSZWN0LndpZHRoICogZGlyZWN0aW9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSB0b3AgYm9yZGVyIG9mIHRoZSBlbGVtZW50IGlmIGl0IGdldHMgcG9zaXRpb25lZFxuICAgICAqIHdpdGggcHJvdmlkZWQgcG9zaXRpb24gc2V0dGluZ3MgcmVsYXRlZCB0byB0aGUgdGFyZ2V0XG4gICAgICogQHBhcmFtIHRhcmdldFJlY3QgUmVjdGFuZ2xlIG9mIHRoZSB0YXJnZXQgd2hlcmUgZWxlbWVudCBpcyBhdHRhY2hlZFxuICAgICAqIEBwYXJhbSBlbGVtZW50UmVjdCBSZWN0YW5nbGUgb2YgdGhlIGVsZW1lbnRcbiAgICAgKiBAcGFyYW0gc3RhcnRQb2ludCBTdGFydCBwb2ludCBvZiB0aGUgdGFyZ2V0XG4gICAgICogQHBhcmFtIGRpcmVjdGlvbiBEaXJlY3Rpb24gaW4gd2hpY2ggdG8gc2hvdyB0aGUgZWxlbWVudFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBjYWxjdWxhdGVUb3AoXG4gICAgICAgIHRhcmdldFJlY3Q6IENsaWVudFJlY3QsIGVsZW1lbnRSZWN0OiBDbGllbnRSZWN0LCBzdGFydFBvaW50OiBWZXJ0aWNhbEFsaWdubWVudCwgZGlyZWN0aW9uOiBWZXJ0aWNhbEFsaWdubWVudCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0YXJnZXRSZWN0LmJvdHRvbSArIHRhcmdldFJlY3QuaGVpZ2h0ICogc3RhcnRQb2ludCArIGVsZW1lbnRSZWN0LmhlaWdodCAqIGRpcmVjdGlvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaXRzIHRoZSBlbGVtZW50IGludG8gdmlld3BvcnQgYWNjb3JkaW5nIHRvIHRoZSBwb3NpdGlvbiBzZXR0aW5nc1xuICAgICAqIEBwYXJhbSBlbGVtZW50IGVsZW1lbnQgdG8gZml0IGluIHZpZXdwb3J0XG4gICAgICogQHBhcmFtIGNvbm5lY3RlZEZpdCBjb25uZWN0ZWRGaXQgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIG5lY2Vzc2FyeSBwYXJhbWV0ZXJzXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGZpdEluVmlld3BvcnQoXG4gICAgICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICAgICAgICBjb25uZWN0ZWRGaXQ6IENvbm5lY3RlZEZpdCk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdGVkRml0IHtcbiAgICBjb250ZW50RWxlbWVudFJlY3Q/OiBDbGllbnRSZWN0O1xuICAgIHRhcmdldFJlY3Q/OiBDbGllbnRSZWN0O1xuICAgIHZpZXdQb3J0UmVjdD86IENsaWVudFJlY3Q7XG4gICAgZml0SG9yaXpvbnRhbD86IGJvb2xlYW47XG4gICAgZml0VmVydGljYWw/OiBib29sZWFuO1xuICAgIGxlZnQ/OiBudW1iZXI7XG4gICAgcmlnaHQ/OiBudW1iZXI7XG4gICAgdG9wPzogbnVtYmVyO1xuICAgIGJvdHRvbT86IG51bWJlcjtcbn1cbiJdfQ==