dbweb-common
Version:
用`yarn add dbweb-common`安装,不要忘记修改`angular.json`里的 `architect\build\options\assets`,加上
353 lines • 39.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, ElementRef, EventEmitter, HostBinding, HostListener, Input, Output, Renderer2, ViewChild } from '@angular/core';
import { MatMenuTrigger } from '@angular/material/menu';
import { MatTable } from '@angular/material/table';
import { ClipboardService } from 'ngx-clipboard';
import { ServiceService } from '../service/service.service';
import { ContextMenu } from './contex-menu';
import { Header } from './header';
import { nonePoint, noneSelector, Selector } from './selector';
export class TableComponent {
/**
* @param {?} svr
* @param {?} _clipboardService
* @param {?} elRef
* @param {?} renderer
*/
constructor(svr, _clipboardService, elRef, renderer) {
this.svr = svr;
this._clipboardService = _clipboardService;
this.elRef = elRef;
this.renderer = renderer;
this.hostClass = 'content mat-elevation-z1';
this.dataSource = [];
// 跟随数据行的处理列表,初始值为空数组,防止出现不能访问.length的错误
this._processes = [];
this.sortChange = new EventEmitter();
this.processClick = new EventEmitter();
this._tableColumns = [];
// 处理按钮是否是展开的
this.processExpand = true;
this.displayColumnNames = [];
this.fixStartColumns = [
{ index: 0, Name: '_select', Type: '', sticky: true, stickyEnd: false, showToolbar: false },
{ index: 1, Name: '_序号', Type: 'STR', sticky: true, stickyEnd: false, showToolbar: false }
];
this.fixEndColumns = [];
this.contextMenuPosition = { x: '0px', y: '0px' };
// 要用复制的方式,否则会修改掉nonePoint
this.current = Object.assign({}, nonePoint);
// 选择用到的属性、函数
this.selector = Object.assign({}, noneSelector);
this.cellSelector = Selector.prototype.cellSelector;
this.cellSelectorLeft = Selector.prototype.cellSelectorLeft;
this.cellSelectorBottom = Selector.prototype.cellSelectorBottom;
this.cellSelectorRight = Selector.prototype.cellSelectorRight;
this.cellSelectorTop = Selector.prototype.cellSelectorTop;
this.cellMouseDown = Selector.prototype.cellMouseDown;
this.cellMouseEnter = Selector.prototype.cellMouseEnter;
this.mouseUp = Selector.prototype.mouseUp;
this.onMouseMove = Selector.prototype.onMouseMove.bind(this);
this.scrollTable = Selector.prototype.scrollTable;
this.openContextMenu = ContextMenu.prototype.openContextMenu;
this.onSelCopyClick = ContextMenu.prototype.onSelCopyClick;
this.onSelLineMenuClick = ContextMenu.prototype.onSelLineMenuClick;
this.onSelCancelLineMenuClick = ContextMenu.prototype.onSelCancelLineMenuClick;
this.onSelAllMenuClick = ContextMenu.prototype.onSelAllMenuClick;
// 列头功能
this.headerMouseenter = Header.prototype.headerMouseenter;
this.headerMouseleave = Header.prototype.headerMouseleave;
this.lockButtonClick = Header.prototype.lockButtonClick;
this.stickyColumnRight = Header.prototype.stickyColumnRight;
this.syncColumn = Header.prototype.syncColumn;
this.unlockButtonClick = Header.prototype.unlockButtonClick;
this.toLeftButtonClick = Header.prototype.toLeftButtonClick;
this.toRightButtonClick = Header.prototype.toRightButtonClick;
this.scrollLeft = 0;
this.scrollTop = 0;
}
/**
* @param {?} val
* @return {?}
*/
set processes(val) {
if (val.length > 0) {
if (this.fixEndColumns.length === 0) {
this.fixEndColumns.push({
index: -1,
Name: '_操作',
Type: '',
sticky: false,
stickyEnd: true,
showToolbar: false
});
}
}
else {
this.fixEndColumns.splice(0);
}
this._processes = val;
}
/**
* @return {?}
*/
get processes() {
return this._processes;
}
// keepSequence是否保留列的顺序
/**
* @param {?} val
* @param {?} dispCols
* @param {?} keepSequence
* @return {?}
*/
setDataSource(val, dispCols, keepSequence) {
// 要复制,不能赋值,否则会修改掉noneSelector的值
Object.assign(this.selector, noneSelector);
this.dataSource = val;
this.displayColumns = dispCols;
if (!keepSequence) {
// 清除之前的列顺序定义
this.columns = [];
}
// 同步列信息
this.syncColumn();
// 一定要延后更新,否则没有效果
setTimeout((/**
* @return {?}
*/
() => {
this.updateTableHasScrollbar();
}), 20);
}
/**
* @return {?}
*/
ngOnInit() { }
/**
* @return {?}
*/
ngAfterViewInit() {
// 不使用setTimeout会引起错误
setTimeout((/**
* @return {?}
*/
() => {
this.tableHasScrollbar = this.elRef.nativeElement.scrollWidth > this.elRef.nativeElement.clientWidth;
}), 100);
}
/**
* @param {?} event
* @return {?}
*/
onResize(event) {
this.updateTableHasScrollbar();
}
/**
* @private
* @return {?}
*/
updateTableHasScrollbar() {
this.tableHasScrollbar = this.elRef.nativeElement.scrollWidth > this.elRef.nativeElement.clientWidth;
}
/**
* @return {?}
*/
onDetach() {
this.scrollLeft = this.elRef.nativeElement.scrollLeft;
this.scrollTop = this.elRef.nativeElement.scrollTop;
}
/**
* @param {?} ref
* @param {?} activatedRoute
* @return {?}
*/
onAttach(ref, activatedRoute) {
this.elRef.nativeElement.scrollLeft = this.scrollLeft;
this.elRef.nativeElement.scrollTop = this.scrollTop;
}
/**
* Selects all rows if they are not all selected; otherwise clear selection.
* @return {?}
*/
masterToggle() {
this.isPageSelected()
? this.svr.data.tableRowSelection.deselect(...this.dataSource.map((/**
* @param {?} row
* @return {?}
*/
row => row.Key)))
: this.svr.data.tableRowSelection.select(...this.dataSource.map((/**
* @param {?} row
* @return {?}
*/
row => row.Key)));
}
/**
* Whether the number of selected elements matches the total number of rows.
* @return {?}
*/
isPageSelected() {
return this.dataSource.find((/**
* @param {?} v
* @return {?}
*/
v => !this.svr.data.tableRowSelection.isSelected(v.Key))) === undefined;
}
/**
* @param {?} i
* @param {?} col
* @return {?}
*/
trackByName(i, col) {
return col.Name;
}
}
TableComponent.decorators = [
{ type: Component, args: [{
selector: 'common-table',
template: "<div\r\n\tstyle=\"position: fixed\"\r\n\t[style.left]=\"contextMenuPosition.x\"\r\n\t[style.top]=\"contextMenuPosition.y\"\r\n\t[matMenuTriggerFor]=\"contextMenu\"\r\n></div>\r\n<mat-menu #contextMenu=\"matMenu\">\r\n\t<button mat-menu-item (click)=\"onSelCopyClick(true)\"><mat-icon svgIcon=\"content_copy\"></mat-icon>\u590D\u5236</button>\r\n\t<button mat-menu-item (click)=\"onSelCopyClick(false)\"><mat-icon></mat-icon>\u590D\u5236(\u65E0\u6807\u9898)</button>\r\n\t<!-- <mat-divider></mat-divider> -->\r\n\t<button mat-menu-item (click)=\"onSelLineMenuClick($event)\">\r\n\t\t<mat-icon svgIcon=\"single_chosen\"></mat-icon>\u9009\u4E2D\u884C\r\n\t</button>\r\n\t<button mat-menu-item (click)=\"onSelCancelLineMenuClick()\">\r\n\t\t<mat-icon svgIcon=\"cancel_chosen\"></mat-icon>\u53D6\u6D88\u9009\u4E2D\r\n\t</button>\r\n\t<button mat-menu-item (click)=\"onSelAllMenuClick()\"><mat-icon svgIcon=\"return_chosen\"></mat-icon>\u5168\u9009</button>\r\n</mat-menu>\r\n<table\r\n\tmat-table\r\n\t[dataSource]=\"dataSource\"\r\n\tmatSort\r\n\tmatSortStart=\"desc\"\r\n\t(matSortChange)=\"sortChange.emit($event)\"\r\n\t#tabData\r\n>\r\n\t<ng-container matColumnDef=\"_select\" sticky>\r\n\t\t<th mat-header-cell *matHeaderCellDef>\r\n\t\t\t<!--labelPosition=\"before\" \u4E00\u5B9A\u8981\u8FD9\u6837\u8BBE\u7F6E\uFF0C\u5426\u5219\u4F1A\u51FA\u73B0\u7A7A\u9699-->\r\n\t\t\t<mat-checkbox\r\n\t\t\t\t(change)=\"$event ? masterToggle() : null\"\r\n\t\t\t\t[checked]=\"svr.data.tableRowSelection.hasValue() && isPageSelected()\"\r\n\t\t\t\t[indeterminate]=\"svr.data.tableRowSelection.hasValue() && !isPageSelected()\"\r\n\t\t\t\tlabelPosition=\"before\"\r\n\t\t\t>\r\n\t\t\t</mat-checkbox>\r\n\t\t</th>\r\n\t\t<td\r\n\t\t\tmat-cell\r\n\t\t\t*matCellDef=\"let row; let rowIndex = index\"\r\n\t\t\t[ngClass]=\"{ 'current-row': current.y === rowIndex + 1 }\"\r\n\t\t>\r\n\t\t\t<mat-checkbox\r\n\t\t\t\t(click)=\"$event.stopPropagation()\"\r\n\t\t\t\t(change)=\"$event ? svr.data.tableRowSelection.toggle(row.Key) : null\"\r\n\t\t\t\t[checked]=\"svr.data.tableRowSelection.isSelected(row.Key)\"\r\n\t\t\t\tlabelPosition=\"before\"\r\n\t\t\t>\r\n\t\t\t</mat-checkbox>\r\n\t\t</td>\r\n\t</ng-container>\r\n\t<ng-container matColumnDef=\"_\u5E8F\u53F7\" sticky>\r\n\t\t<th\r\n\t\t\tmat-header-cell\r\n\t\t\t*matHeaderCellDef\r\n\t\t\tclass=\"number-cell\"\r\n\t\t\t[ngClass]=\"{\r\n\t\t\t\t'current-col': current.x === 1,\r\n\t\t\t\t'sticky-right': tableHasScrollbar && stickyColumnRight(1)\r\n\t\t\t}\"\r\n\t\t>\r\n\t\t\t\u5E8F\u53F7\r\n\t\t</th>\r\n\t\t<td\r\n\t\t\tmat-cell\r\n\t\t\t*matCellDef=\"let row; let rowIndex = index\"\r\n\t\t\tclass=\"number-cell\"\r\n\t\t\t(contextmenu)=\"openContextMenu($event, 1, rowIndex)\"\r\n\t\t\t[ngClass]=\"{\r\n\t\t\t\tselector: cellSelector(1, rowIndex),\r\n\t\t\t\t'sel-left': cellSelectorLeft(1, rowIndex),\r\n\t\t\t\t'sel-bottom': cellSelectorBottom(1, rowIndex),\r\n\t\t\t\t'sel-right': cellSelectorRight(1, rowIndex),\r\n\t\t\t\t'sel-top': cellSelectorTop(1, rowIndex),\r\n\t\t\t\t'current-row': current.y === rowIndex + 1,\r\n\t\t\t\t'sticky-right': tableHasScrollbar && stickyColumnRight(1)\r\n\t\t\t}\"\r\n\t\t\t(mousedown)=\"cellMouseDown($event, 1, rowIndex)\"\r\n\t\t>\r\n\t\t\t{{ row.RowNum }}\r\n\t\t</td>\r\n\t</ng-container>\r\n\t<ng-container *ngFor=\"let col of columns; trackBy: trackByName\" matColumnDef=\"{{ col.Name }}\" [sticky]=\"col.sticky\">\r\n\t\t<th\r\n\t\t\tmat-header-cell\r\n\t\t\t[arrowPosition]=\"col.Type !== 'INT' && col.Type !== 'FLOAT' ? 'after' : 'before'\"\r\n\t\t\t*matHeaderCellDef\r\n\t\t\tmat-sort-header\r\n\t\t\t[ngClass]=\"{\r\n\t\t\t\t'current-col': current.x === col.index + 2,\r\n\t\t\t\t'sticky-right': tableHasScrollbar && stickyColumnRight(col.index + 2),\r\n\t\t\t\t'number-cell': col.Type === 'INT' || col.Type === 'FLOAT'\r\n\t\t\t}\"\r\n\t\t\t(mouseenter)=\"headerMouseenter(col, $event)\"\r\n\t\t\t(mouseleave)=\"headerMouseleave(col)\"\r\n\t\t>\r\n\t\t\t<div *ngIf=\"col.showToolbar\" class=\"col-toolbar\">\r\n\t\t\t\t<mat-icon\r\n\t\t\t\t\tmatRipple\r\n\t\t\t\t\tmatRippleRadius=\"8\"\r\n\t\t\t\t\tmatRippleCentered=\"true\"\r\n\t\t\t\t\tmatTooltip=\"\u9501\u5B9A\u5217\u5230\u5DE6\u8FB9\"\r\n\t\t\t\t\t*ngIf=\"!col.sticky\"\r\n\t\t\t\t\tsvgIcon=\"lock\"\r\n\t\t\t\t\t(click)=\"lockButtonClick($event, col)\"\r\n\t\t\t\t></mat-icon>\r\n\t\t\t\t<mat-icon\r\n\t\t\t\t\tmatRipple\r\n\t\t\t\t\tmatRippleRadius=\"8\"\r\n\t\t\t\t\tmatRippleCentered=\"true\"\r\n\t\t\t\t\tmatTooltip=\"\u79FB\u9664\u9501\u5B9A\"\r\n\t\t\t\t\t*ngIf=\"col.sticky\"\r\n\t\t\t\t\tsvgIcon=\"lock_open\"\r\n\t\t\t\t\t(click)=\"unlockButtonClick($event, col)\"\r\n\t\t\t\t></mat-icon>\r\n\t\t\t\t<mat-icon\r\n\t\t\t\t\tmatRipple\r\n\t\t\t\t\tmatRippleRadius=\"8\"\r\n\t\t\t\t\tmatRippleCentered=\"true\"\r\n\t\t\t\t\tmatTooltip=\"\u5DE6\u79FB\"\r\n\t\t\t\t\t*ngIf=\"col.sticky && col.index > 0\"\r\n\t\t\t\t\tsvgIcon=\"arrow_back\"\r\n\t\t\t\t\t(click)=\"toLeftButtonClick($event, col)\"\r\n\t\t\t\t></mat-icon>\r\n\t\t\t\t<mat-icon\r\n\t\t\t\t\tmatRipple\r\n\t\t\t\t\tmatRippleRadius=\"8\"\r\n\t\t\t\t\tmatRippleCentered=\"true\"\r\n\t\t\t\t\tmatTooltip=\"\u53F3\u79FB\"\r\n\t\t\t\t\t*ngIf=\"col.sticky && !stickyColumnRight(col.index + 2)\"\r\n\t\t\t\t\tsvgIcon=\"arrow_forward\"\r\n\t\t\t\t\t(click)=\"toRightButtonClick($event, col)\"\r\n\t\t\t\t></mat-icon>\r\n\t\t\t</div>\r\n\t\t\t{{ col.Name }}\r\n\t\t</th>\r\n\t\t<td\r\n\t\t\tmat-cell\r\n\t\t\t*matCellDef=\"let row; let rowIndex = index\"\r\n\t\t\t(contextmenu)=\"openContextMenu($event, col.index + 2, rowIndex)\"\r\n\t\t\t[ngClass]=\"{\r\n\t\t\t\tselector: cellSelector(col.index + 2, rowIndex),\r\n\t\t\t\t'sel-left': cellSelectorLeft(col.index + 2, rowIndex),\r\n\t\t\t\t'sel-bottom': cellSelectorBottom(col.index + 2, rowIndex),\r\n\t\t\t\t'sel-right': cellSelectorRight(col.index + 2, rowIndex),\r\n\t\t\t\t'sel-top': cellSelectorTop(col.index + 2, rowIndex),\r\n\t\t\t\t'current-row': current.y === rowIndex + 1,\r\n\t\t\t\t'sticky-right': tableHasScrollbar && stickyColumnRight(col.index + 2),\r\n\t\t\t\t'number-cell': col.Type === 'INT' || col.Type === 'FLOAT'\r\n\t\t\t}\"\r\n\t\t\t(mouseenter)=\"cellMouseEnter($event)\"\r\n\t\t\t(mousedown)=\"cellMouseDown($event, col.index + 2, rowIndex)\"\r\n\t\t>\r\n\t\t\t<span class=\"line-breaker\" *ngIf=\"col.Type === 'DATE'\">\r\n\t\t\t\t{{ row.Data[col.Name] | date: 'yyyy-MM-dd hh:mm:ss' }}\r\n\t\t\t</span>\r\n\t\t\t<span class=\"line-breaker\" *ngIf=\"col.Type !== 'DATE'\">\r\n\t\t\t\t{{ row.Data[col.Name] }}\r\n\t\t\t</span>\r\n\t\t</td>\r\n\t</ng-container>\r\n\r\n\t<ng-container matColumnDef=\"_\u64CD\u4F5C\" stickyEnd *ngIf=\"processes.length > 0\">\r\n\t\t<th mat-header-cell *matHeaderCellDef [ngClass]=\"{ 'sticky-left': tableHasScrollbar }\" class=\"col-\u64CD\u4F5C\">\r\n\t\t\t<span>\r\n\t\t\t\t<span *ngIf=\"processExpand\">\u64CD\u4F5C</span\r\n\t\t\t\t><button mat-icon-button (click)=\"processExpand = !processExpand\">\r\n\t\t\t\t\t<mat-icon\r\n\t\t\t\t\t\t[matTooltip]=\"processExpand ? '\u6536\u7F29' : '\u5C55\u5F00'\"\r\n\t\t\t\t\t\t[svgIcon]=\"processExpand ? 'first_page' : 'last_page'\"\r\n\t\t\t\t\t></mat-icon>\r\n\t\t\t\t</button>\r\n\t\t\t</span>\r\n\t\t</th>\r\n\t\t<td\r\n\t\t\tmat-cell\r\n\t\t\tclass=\"cell-\u64CD\u4F5C\"\r\n\t\t\t*matCellDef=\"let row; let rowIndex = index\"\r\n\t\t\t[ngClass]=\"{ 'current-row': current.y === rowIndex + 1, 'sticky-left': tableHasScrollbar }\"\r\n\t\t>\r\n\t\t\t<common-process\r\n\t\t\t\t[processes]=\"processes\"\r\n\t\t\t\t[processStatus]=\"row.Processes\"\r\n\t\t\t\t[buttonShowNum]=\"processExpand ? 3 : 0\"\r\n\t\t\t\t(processClick)=\"processClick.emit({ pro: $event, row: row })\"\r\n\t\t\t></common-process>\r\n\t\t</td>\r\n\t</ng-container>\r\n\r\n\t<tr mat-header-row *matHeaderRowDef=\"displayColumnNames; sticky: true\" class=\"table-header\"></tr>\r\n\t<tr mat-row *matRowDef=\"let myRowData; let rowIndex = index; columns: displayColumnNames\"></tr>\r\n</table>\r\n",
styles: ["@charset \"UTF-8\";.content{height:100%;width:100%;overflow:auto;flex-grow:1}.line-breaker{white-space:pre}table{margin-bottom:24px;white-space:nowrap}table .col-toolbar{position:absolute;border-radius:2px;left:0;top:0;height:18px;background-color:rgba(0,0,0,.4)}table .col-toolbar .common-icon-button,table .col-toolbar .mat-icon{color:#fff;padding-top:2px;width:16px;height:16px}table .number-cell{text-align:right}table .mat-cell{font-size:14px;line-height:20px;min-height:auto;padding-left:8px;padding-right:16px;cursor:default}table .mat-row{height:40px}table .mat-row.mat-table-sticky:last{border-right:1px solid #e0e0e0!important}table .table-header{padding-right:0!important;padding-left:0!important;height:40px}table .table-header ::ng-deep .number-cell .mat-sort-header-container{justify-content:flex-end}table .table-header .col-\u64CD\u4F5C{padding-right:0!important;padding-left:0!important}table .table-header .col-\u64CD\u4F5C span{display:flex;justify-content:center;align-items:center}table .table-header .col-\u64CD\u4F5C span button{margin-bottom:3px}table .table-header .mat-header-cell{font-size:14px;line-height:20px;min-height:auto;padding-left:8px;padding-right:16px}table .cell-\u64CD\u4F5C{padding:0;text-align:center}"]
}] }
];
/** @nocollapse */
TableComponent.ctorParameters = () => [
{ type: ServiceService },
{ type: ClipboardService },
{ type: ElementRef },
{ type: Renderer2 }
];
TableComponent.propDecorators = {
hostClass: [{ type: HostBinding, args: ['class',] }],
processes: [{ type: Input }],
sortChange: [{ type: Output }],
processClick: [{ type: Output }],
tabData: [{ type: ViewChild, args: ['tabData', { read: ElementRef, static: true },] }],
tabDataOrg: [{ type: ViewChild, args: ['tabData', { static: true },] }],
contextMenu: [{ type: ViewChild, args: [MatMenuTrigger, { static: true },] }],
mouseUp: [{ type: HostListener, args: ['window:mouseup', ['$event'],] }],
onResize: [{ type: HostListener, args: ['window:resize', ['$event'],] }]
};
if (false) {
/** @type {?} */
TableComponent.prototype.hostClass;
/** @type {?} */
TableComponent.prototype.displayColumns;
/** @type {?} */
TableComponent.prototype.dataSource;
/**
* @type {?}
* @private
*/
TableComponent.prototype._processes;
/** @type {?} */
TableComponent.prototype.sortChange;
/** @type {?} */
TableComponent.prototype.processClick;
/** @type {?} */
TableComponent.prototype._tableColumns;
/** @type {?} */
TableComponent.prototype.tabData;
/** @type {?} */
TableComponent.prototype.tabDataOrg;
/** @type {?} */
TableComponent.prototype.contextMenu;
/** @type {?} */
TableComponent.prototype.columns;
/** @type {?} */
TableComponent.prototype.processExpand;
/** @type {?} */
TableComponent.prototype.displayColumnNames;
/** @type {?} */
TableComponent.prototype.timer;
/** @type {?} */
TableComponent.prototype.leftPressed;
/** @type {?} */
TableComponent.prototype.x;
/** @type {?} */
TableComponent.prototype.y;
/** @type {?} */
TableComponent.prototype.fixStartColumns;
/** @type {?} */
TableComponent.prototype.fixEndColumns;
/** @type {?} */
TableComponent.prototype.contextMenuPosition;
/** @type {?} */
TableComponent.prototype.current;
/** @type {?} */
TableComponent.prototype.selector;
/** @type {?} */
TableComponent.prototype.cellSelector;
/** @type {?} */
TableComponent.prototype.cellSelectorLeft;
/** @type {?} */
TableComponent.prototype.cellSelectorBottom;
/** @type {?} */
TableComponent.prototype.cellSelectorRight;
/** @type {?} */
TableComponent.prototype.cellSelectorTop;
/** @type {?} */
TableComponent.prototype.cellMouseDown;
/** @type {?} */
TableComponent.prototype.cellMouseEnter;
/** @type {?} */
TableComponent.prototype.mouseUp;
/** @type {?} */
TableComponent.prototype.closeMouseDownListern;
/** @type {?} */
TableComponent.prototype.onMouseMove;
/** @type {?} */
TableComponent.prototype.scrollTable;
/** @type {?} */
TableComponent.prototype.openContextMenu;
/** @type {?} */
TableComponent.prototype.onSelCopyClick;
/** @type {?} */
TableComponent.prototype.onSelLineMenuClick;
/** @type {?} */
TableComponent.prototype.onSelCancelLineMenuClick;
/** @type {?} */
TableComponent.prototype.onSelAllMenuClick;
/** @type {?} */
TableComponent.prototype.headerMouseenter;
/** @type {?} */
TableComponent.prototype.headerMouseleave;
/** @type {?} */
TableComponent.prototype.lockButtonClick;
/** @type {?} */
TableComponent.prototype.stickyColumnRight;
/** @type {?} */
TableComponent.prototype.syncColumn;
/** @type {?} */
TableComponent.prototype.unlockButtonClick;
/** @type {?} */
TableComponent.prototype.toLeftButtonClick;
/** @type {?} */
TableComponent.prototype.toRightButtonClick;
/** @type {?} */
TableComponent.prototype.tableHasScrollbar;
/** @type {?} */
TableComponent.prototype.headerToolbarShowTimer;
/**
* @type {?}
* @private
*/
TableComponent.prototype.scrollLeft;
/**
* @type {?}
* @private
*/
TableComponent.prototype.scrollTop;
/** @type {?} */
TableComponent.prototype.svr;
/** @type {?} */
TableComponent.prototype._clipboardService;
/** @type {?} */
TableComponent.prototype.elRef;
/** @type {?} */
TableComponent.prototype.renderer;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vZGJ3ZWItY29tbW9uLyIsInNvdXJjZXMiOlsibGliL3JlY29yZC12aWV3L3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUVOLFNBQVMsRUFFVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQU8sRUFBRSxjQUFjLEVBQXFCLE1BQU0sNEJBQTRCLENBQUM7QUFDL0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2xDLE9BQU8sRUFBVSxTQUFTLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQVF2RSxNQUFNLE9BQU8sY0FBYzs7Ozs7OztJQTJGMUIsWUFDUSxHQUFtQixFQUNuQixpQkFBbUMsRUFDbkMsS0FBaUIsRUFDakIsUUFBbUI7UUFIbkIsUUFBRyxHQUFILEdBQUcsQ0FBZ0I7UUFDbkIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFrQjtRQUNuQyxVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQ2pCLGFBQVEsR0FBUixRQUFRLENBQVc7UUE5RkwsY0FBUyxHQUFHLDBCQUEwQixDQUFDO1FBRzdELGVBQVUsR0FBaUIsRUFBRSxDQUFDOztRQUd0QixlQUFVLEdBQXlCLEVBQUUsQ0FBQztRQXFCcEMsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFR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OztJQXhIekMsbUNBQTZEOztJQUU3RCx3Q0FBa0M7O0lBQ2xDLG9DQUE4Qjs7Ozs7SUFHOUIsb0NBQThDOztJQXFCOUMsb0NBQWdEOztJQUNoRCxzQ0FBMEY7O0lBQzFGLHVDQUFzQzs7SUFDdEMsaUNBQ3NDOztJQUN0QyxvQ0FDaUM7O0lBQ2pDLHFDQUF5RTs7SUFFekUsaUNBQTJCOztJQUUzQix1Q0FBcUI7O0lBRXJCLDRDQUFrQzs7SUFFbEMsK0JBQW9COztJQUNwQixxQ0FBcUI7O0lBQ3JCLDJCQUFVOztJQUNWLDJCQUFVOztJQUNWLHlDQUdFOztJQUNGLHVDQUErQzs7SUFFL0MsNkNBQTZDOztJQUU3QyxpQ0FBbUM7O0lBRW5DLGtDQUF3Qzs7SUFDeEMsc0NBQStDOztJQUMvQywwQ0FBdUQ7O0lBQ3ZELDRDQUEyRDs7SUFDM0QsMkNBQXlEOztJQUN6RCx5Q0FBcUQ7O0lBQ3JELHVDQUFpRDs7SUFDakQsd0NBQW1EOztJQUVuRCxpQ0FDcUM7O0lBQ3JDLCtDQUFrQzs7SUFDbEMscUNBQXdEOztJQUN4RCxxQ0FBNkM7O0lBQzdDLHlDQUF3RDs7SUFDeEQsd0NBQXNEOztJQUN0RCw0Q0FBOEQ7O0lBQzlELGtEQUEwRTs7SUFDMUUsMkNBQTREOztJQUU1RCwwQ0FBcUQ7O0lBQ3JELDBDQUFxRDs7SUFDckQseUNBQW1EOztJQUNuRCwyQ0FBdUQ7O0lBQ3ZELG9DQUF5Qzs7SUFDekMsMkNBQXVEOztJQUN2RCwyQ0FBdUQ7O0lBQ3ZELDRDQUF5RDs7SUFFekQsMkNBQTJCOztJQUMzQixnREFBcUM7Ozs7O0lBRXJDLG9DQUF1Qjs7Ozs7SUFDdkIsbUNBQXNCOztJQUVyQiw2QkFBMEI7O0lBQzFCLDJDQUEwQzs7SUFDMUMsK0JBQXdCOztJQUN4QixrQ0FBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG5cdEFmdGVyVmlld0luaXQsXHJcblx0Q29tcG9uZW50LFxyXG5cdENvbXBvbmVudFJlZixcclxuXHRFbGVtZW50UmVmLFxyXG5cdEV2ZW50RW1pdHRlcixcclxuXHRIb3N0QmluZGluZyxcclxuXHRIb3N0TGlzdGVuZXIsXHJcblx0SW5wdXQsXHJcblx0T25Jbml0LFxyXG5cdE91dHB1dCxcclxuXHRSZW5kZXJlcjIsXHJcblx0Vmlld0NoaWxkXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdE1lbnVUcmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XHJcbmltcG9ydCB7IFNvcnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcclxuaW1wb3J0IHsgTWF0VGFibGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgUm91dGVyT3V0bGV0RXZlbnQgfSBmcm9tICdkYndlYi1jb3JlJztcclxuaW1wb3J0IHsgQ2xpcGJvYXJkU2VydmljZSB9IGZyb20gJ25neC1jbGlwYm9hcmQnO1xyXG5pbXBvcnQgeyBJUmVjb3JkVmlld1Byb2Nlc3MsIElSZW5kZXJSb3cgfSBmcm9tICcuLi9tb2RlbC9tb2RlbCc7XHJcbmltcG9ydCB7IFNlcnZpY2VTZXJ2aWNlLCBSZWZyZXNoRGF0YUNvbmZpZyB9IGZyb20gJy4uL3NlcnZpY2Uvc2VydmljZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29udGV4dE1lbnUgfSBmcm9tICcuL2NvbnRleC1tZW51JztcclxuaW1wb3J0IHsgSGVhZGVyIH0gZnJvbSAnLi9oZWFkZXInO1xyXG5pbXBvcnQgeyBJUG9pbnQsIG5vbmVQb2ludCwgbm9uZVNlbGVjdG9yLCBTZWxlY3RvciB9IGZyb20gJy4vc2VsZWN0b3InO1xyXG5pbXBvcnQgeyBUYWJsZUNvbHVtblR5cGUgfSBmcm9tICcuLi9tb2RlbC9tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogJ2NvbW1vbi10YWJsZScsXHJcblx0dGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgU2VsZWN0b3IsIENvbnRleHRNZW51LCBIZWFkZXIsIFJvdXRlck91dGxldEV2ZW50IHtcclxuXHRASG9zdEJpbmRpbmcoJ2NsYXNzJykgaG9zdENsYXNzID0gJ2NvbnRlbnQgbWF0LWVsZXZhdGlvbi16MSc7XHJcblx0Ly8g5Lyg5YWl55qE5pWw5o2u5Lit55qE5pi+56S65YiXXHJcblx0ZGlzcGxheUNvbHVtbnM6IFRhYmxlQ29sdW1uVHlwZVtdO1xyXG5cdGRhdGFTb3VyY2U6IElSZW5kZXJSb3dbXSA9IFtdO1xyXG5cclxuXHQvLyDot5/pmo/mlbDmja7ooYznmoTlpITnkIbliJfooags5Yid5aeL5YC85Li656m65pWw57uE77yM6Ziy5q2i5Ye6546w5LiN6IO96K6/6ZeuLmxlbmd0aOeahOmUmeivr1xyXG5cdHByaXZhdGUgX3Byb2Nlc3NlczogSVJlY29yZFZpZXdQcm9jZXNzW10gPSBbXTtcclxuXHRASW5wdXQoKSBzZXQgcHJvY2Vzc2VzKHZhbDogSVJlY29yZFZpZXdQcm9jZXNzW10pIHtcclxuXHRcdGlmICh2YWwubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRpZiAodGhpcy5maXhFbmRDb2x1bW5zLmxlbmd0aCA9PT0gMCkge1xyXG5cdFx0XHRcdHRoaXMuZml4RW5kQ29sdW1ucy5wdXNoKHtcclxuXHRcdFx0XHRcdGluZGV4OiAtMSxcclxuXHRcdFx0XHRcdE5hbWU6ICdf5pON5L2cJyxcclxuXHRcdFx0XHRcdFR5cGU6ICcnLFxyXG5cdFx0XHRcdFx0c3RpY2t5OiBmYWxzZSxcclxuXHRcdFx0XHRcdHN0aWNreUVuZDogdHJ1ZSxcclxuXHRcdFx0XHRcdHNob3dUb29sYmFyOiBmYWxzZVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLmZpeEVuZENvbHVtbnMuc3BsaWNlKDApO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5fcHJvY2Vzc2VzID0gdmFsO1xyXG5cdH1cclxuXHRnZXQgcHJvY2Vzc2VzKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuX3Byb2Nlc3NlcztcclxuXHR9XHJcblx0QE91dHB1dCgpIHNvcnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFNvcnQ+KCk7XHJcblx0QE91dHB1dCgpIHByb2Nlc3NDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8eyBwcm86IElSZWNvcmRWaWV3UHJvY2Vzczsgcm93OiBJUmVuZGVyUm93IH0+KCk7XHJcblx0X3RhYmxlQ29sdW1uczogVGFibGVDb2x1bW5UeXBlW10gPSBbXTtcclxuXHRAVmlld0NoaWxkKCd0YWJEYXRhJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSlcclxuXHR0YWJEYXRhOiBFbGVtZW50UmVmPEhUTUxUYWJsZUVsZW1lbnQ+O1xyXG5cdEBWaWV3Q2hpbGQoJ3RhYkRhdGEnLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG5cdHRhYkRhdGFPcmc6IE1hdFRhYmxlPElSZW5kZXJSb3c+O1xyXG5cdEBWaWV3Q2hpbGQoTWF0TWVudVRyaWdnZXIsIHsgc3RhdGljOiB0cnVlIH0pIGNvbnRleHRNZW51OiBNYXRNZW51VHJpZ2dlcjtcclxuXHQvLyDlvZPliY3lhoXpg6jnmoTliJfvvIzlj6/og73mmK/nlKjmiLfosIPmlbTov4fliJfnmoTpobrluo9cclxuXHRjb2x1bW5zOiBUYWJsZUNvbHVtblR5cGVbXTtcclxuXHQvLyDlpITnkIbmjInpkq7mmK/lkKbmmK/lsZXlvIDnmoRcclxuXHRwcm9jZXNzRXhwYW5kID0gdHJ1ZTtcclxuXHJcblx0ZGlzcGxheUNvbHVtbk5hbWVzOiBzdHJpbmdbXSA9IFtdO1xyXG5cdC8vIOWumuaXtuWZqFxyXG5cdHRpbWVyOiBOb2RlSlMuVGltZXI7XHJcblx0bGVmdFByZXNzZWQ6IGJvb2xlYW47XHJcblx0eDogbnVtYmVyO1xyXG5cdHk6IG51bWJlcjtcclxuXHRyZWFkb25seSBmaXhTdGFydENvbHVtbnM6IFRhYmxlQ29sdW1uVHlwZVtdID0gW1xyXG5cdFx0eyBpbmRleDogMCwgTmFtZTogJ19zZWxlY3QnLCBUeXBlOiAnJywgc3RpY2t5OiB0cnVlLCBzdGlja3lFbmQ6IGZhbHNlLCBzaG93VG9vbGJhcjogZmFsc2UgfSxcclxuXHRcdHsgaW5kZXg6IDEsIE5hbWU6ICdf5bqP5Y+3JywgVHlwZTogJ1NUUicsIHN0aWNreTogdHJ1ZSwgc3RpY2t5RW5kOiBmYWxzZSwgc2hvd1Rvb2xiYXI6IGZhbHNlIH1cclxuXHRdO1xyXG5cdHJlYWRvbmx5IGZpeEVuZENvbHVtbnM6IFRhYmxlQ29sdW1uVHlwZVtdID0gW107XHJcblxyXG5cdGNvbnRleHRNZW51UG9zaXRpb24gPSB7IHg6ICcwcHgnLCB5OiAnMHB4JyB9O1xyXG5cdC8vIOimgeeUqOWkjeWItueahOaWueW8j++8jOWQpuWImeS8muS/ruaUueaOiW5vbmVQb2ludFxyXG5cdGN1cnJlbnQ6IElQb2ludCA9IHsgLi4ubm9uZVBvaW50IH07XHJcblx0Ly8g6YCJ5oup55So5Yiw55qE5bGe5oCn44CB5Ye95pWwXHJcblx0cmVhZG9ubHkgc2VsZWN0b3IgPSB7IC4uLm5vbmVTZWxlY3RvciB9O1xyXG5cdGNlbGxTZWxlY3RvciA9IFNlbGVjdG9yLnByb3RvdHlwZS5jZWxsU2VsZWN0b3I7XHJcblx0Y2VsbFNlbGVjdG9yTGVmdCA9IFNlbGVjdG9yLnByb3RvdHlwZS5jZWxsU2VsZWN0b3JMZWZ0O1xyXG5cdGNlbGxTZWxlY3RvckJvdHRvbSA9IFNlbGVjdG9yLnByb3RvdHlwZS5jZWxsU2VsZWN0b3JCb3R0b207XHJcblx0Y2VsbFNlbGVjdG9yUmlnaHQgPSBTZWxlY3Rvci5wcm90b3R5cGUuY2VsbFNlbGVjdG9yUmlnaHQ7XHJcblx0Y2VsbFNlbGVjdG9yVG9wID0gU2VsZWN0b3IucHJvdG90eXBlLmNlbGxTZWxlY3RvclRvcDtcclxuXHRjZWxsTW91c2VEb3duID0gU2VsZWN0b3IucHJvdG90eXBlLmNlbGxNb3VzZURvd247XHJcblx0Y2VsbE1vdXNlRW50ZXIgPSBTZWxlY3Rvci5wcm90b3R5cGUuY2VsbE1vdXNlRW50ZXI7XHJcblxyXG5cdEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzptb3VzZXVwJywgWyckZXZlbnQnXSlcclxuXHRtb3VzZVVwID0gU2VsZWN0b3IucHJvdG90eXBlLm1vdXNlVXA7XHJcblx0Y2xvc2VNb3VzZURvd25MaXN0ZXJuOiAoKSA9PiB2b2lkO1xyXG5cdG9uTW91c2VNb3ZlID0gU2VsZWN0b3IucHJvdG90eXBlLm9uTW91c2VNb3ZlLmJpbmQodGhpcyk7XHJcblx0c2Nyb2xsVGFibGUgPSBTZWxlY3Rvci5wcm90b3R5cGUuc2Nyb2xsVGFibGU7XHJcblx0b3BlbkNvbnRleHRNZW51ID0gQ29udGV4dE1lbnUucHJvdG90eXBlLm9wZW5Db250ZXh0TWVudTtcclxuXHRvblNlbENvcHlDbGljayA9IENvbnRleHRNZW51LnByb3RvdHlwZS5vblNlbENvcHlDbGljaztcclxuXHRvblNlbExpbmVNZW51Q2xpY2sgPSBDb250ZXh0TWVudS5wcm90b3R5cGUub25TZWxMaW5lTWVudUNsaWNrO1xyXG5cdG9uU2VsQ2FuY2VsTGluZU1lbnVDbGljayA9IENvbnRleHRNZW51LnByb3RvdHlwZS5vblNlbENhbmNlbExpbmVNZW51Q2xpY2s7XHJcblx0b25TZWxBbGxNZW51Q2xpY2sgPSBDb250ZXh0TWVudS5wcm90b3R5cGUub25TZWxBbGxNZW51Q2xpY2s7XHJcblx0Ly8g5YiX5aS05Yqf6IO9XHJcblx0aGVhZGVyTW91c2VlbnRlciA9IEhlYWRlci5wcm90b3R5cGUuaGVhZGVyTW91c2VlbnRlcjtcclxuXHRoZWFkZXJNb3VzZWxlYXZlID0gSGVhZGVyLnByb3RvdHlwZS5oZWFkZXJNb3VzZWxlYXZlO1xyXG5cdGxvY2tCdXR0b25DbGljayA9IEhlYWRlci5wcm90b3R5cGUubG9ja0J1dHRvbkNsaWNrO1xyXG5cdHN0aWNreUNvbHVtblJpZ2h0ID0gSGVhZGVyLnByb3RvdHlwZS5zdGlja3lDb2x1bW5SaWdodDtcclxuXHRzeW5jQ29sdW1uID0gSGVhZGVyLnByb3RvdHlwZS5zeW5jQ29sdW1uO1xyXG5cdHVubG9ja0J1dHRvbkNsaWNrID0gSGVhZGVyLnByb3RvdHlwZS51bmxvY2tCdXR0b25DbGljaztcclxuXHR0b0xlZnRCdXR0b25DbGljayA9IEhlYWRlci5wcm90b3R5cGUudG9MZWZ0QnV0dG9uQ2xpY2s7XHJcblx0dG9SaWdodEJ1dHRvbkNsaWNrID0gSGVhZGVyLnByb3RvdHlwZS50b1JpZ2h0QnV0dG9uQ2xpY2s7XHJcblxyXG5cdHRhYmxlSGFzU2Nyb2xsYmFyOiBib29sZWFuO1xyXG5cdGhlYWRlclRvb2xiYXJTaG93VGltZXI6IE5vZGVKUy5UaW1lcjtcclxuXHJcblx0cHJpdmF0ZSBzY3JvbGxMZWZ0ID0gMDtcclxuXHRwcml2YXRlIHNjcm9sbFRvcCA9IDA7XHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwdWJsaWMgc3ZyOiBTZXJ2aWNlU2VydmljZSxcclxuXHRcdHB1YmxpYyBfY2xpcGJvYXJkU2VydmljZTogQ2xpcGJvYXJkU2VydmljZSxcclxuXHRcdHB1YmxpYyBlbFJlZjogRWxlbWVudFJlZixcclxuXHRcdHB1YmxpYyByZW5kZXJlcjogUmVuZGVyZXIyXHJcblx0KSB7fVxyXG5cdC8vICBrZWVwU2VxdWVuY2XmmK/lkKbkv53nlZnliJfnmoTpobrluo9cclxuXHRzZXREYXRhU291cmNlKHZhbDogSVJlbmRlclJvd1tdLCBkaXNwQ29sczogVGFibGVDb2x1bW5UeXBlW10sIGtlZXBTZXF1ZW5jZTogYm9vbGVhbikge1xyXG5cdFx0Ly8g6KaB5aSN5Yi277yM5LiN6IO96LWL5YC877yM5ZCm5YiZ5Lya5L+u5pS55o6Jbm9uZVNlbGVjdG9y55qE5YC8XHJcblx0XHRPYmplY3QuYXNzaWduKHRoaXMuc2VsZWN0b3IsIG5vbmVTZWxlY3Rvcik7XHJcblx0XHR0aGlzLmRhdGFTb3VyY2UgPSB2YWw7XHJcblx0XHR0aGlzLmRpc3BsYXlDb2x1bW5zID0gZGlzcENvbHM7XHJcblx0XHRpZiAoIWtlZXBTZXF1ZW5jZSkge1xyXG5cdFx0XHQvLyDmuIXpmaTkuYvliY3nmoTliJfpobrluo/lrprkuYlcclxuXHRcdFx0dGhpcy5jb2x1bW5zID0gW107XHJcblx0XHR9XHJcblx0XHQvLyDlkIzmraXliJfkv6Hmga9cclxuXHRcdHRoaXMuc3luY0NvbHVtbigpO1xyXG5cdFx0Ly8g5LiA5a6a6KaB5bu25ZCO5pu05paw77yM5ZCm5YiZ5rKh5pyJ5pWI5p6cXHJcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0dGhpcy51cGRhdGVUYWJsZUhhc1Njcm9sbGJhcigpO1xyXG5cdFx0fSwgMjApO1xyXG5cdH1cclxuXHRuZ09uSW5pdCgpIHt9XHJcblx0bmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG5cdFx0Ly8g5LiN5L2/55Soc2V0VGltZW91dOS8muW8lei1t+mUmeivr1xyXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdHRoaXMudGFibGVIYXNTY3JvbGxiYXIgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGggPiB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGg7XHJcblx0XHR9LCAxMDApO1xyXG5cdH1cclxuXHRASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcclxuXHRvblJlc2l6ZShldmVudDogVUlFdmVudCkge1xyXG5cdFx0dGhpcy51cGRhdGVUYWJsZUhhc1Njcm9sbGJhcigpO1xyXG5cdH1cclxuXHRwcml2YXRlIHVwZGF0ZVRhYmxlSGFzU2Nyb2xsYmFyKCkge1xyXG5cdFx0dGhpcy50YWJsZUhhc1Njcm9sbGJhciA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aCA+IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aDtcclxuXHR9XHJcblx0b25EZXRhY2goKTogdm9pZCB7XHJcblx0XHR0aGlzLnNjcm9sbExlZnQgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdDtcclxuXHRcdHRoaXMuc2Nyb2xsVG9wID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcDtcclxuXHR9XHJcblx0b25BdHRhY2gocmVmOiBDb21wb25lbnRSZWY8YW55PiwgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlKTogdm9pZCB7XHJcblx0XHR0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHRoaXMuc2Nyb2xsTGVmdDtcclxuXHRcdHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSB0aGlzLnNjcm9sbFRvcDtcclxuXHR9XHJcblx0LyoqIFNlbGVjdHMgYWxsIHJvd3MgaWYgdGhleSBhcmUgbm90IGFsbCBzZWxlY3RlZDsgb3RoZXJ3aXNlIGNsZWFyIHNlbGVjdGlvbi4gKi9cclxuXHRtYXN0ZXJUb2dnbGUoKSB7XHJcblx0XHR0aGlzLmlzUGFnZVNlbGVjdGVkKClcclxuXHRcdFx0PyB0aGlzLnN2ci5kYXRhLnRhYmxlUm93U2VsZWN0aW9uLmRlc2VsZWN0KC4uLnRoaXMuZGF0YVNvdXJjZS5tYXAocm93ID0+IHJvdy5LZXkpKVxyXG5cdFx0XHQ6IHRoaXMuc3ZyLmRhdGEudGFibGVSb3dTZWxlY3Rpb24uc2VsZWN0KC4uLnRoaXMuZGF0YVNvdXJjZS5tYXAocm93ID0+IHJvdy5LZXkpKTtcclxuXHR9XHJcblx0LyoqIFdoZXRoZXIgdGhlIG51bWJlciBvZiBzZWxlY3RlZCBlbGVtZW50cyBtYXRjaGVzIHRoZSB0b3RhbCBudW1iZXIgb2Ygcm93cy4gKi9cclxuXHRpc1BhZ2VTZWxlY3RlZCgpIHtcclxuXHRcdHJldHVybiB0aGlzLmRhdGFTb3VyY2UuZmluZCh2ID0+ICF0aGlzLnN2ci5kYXRhLnRhYmxlUm93U2VsZWN0aW9uLmlzU2VsZWN0ZWQodi5LZXkpKSA9PT0gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHR0cmFja0J5TmFtZShpOiBudW1iZXIsIGNvbDogVGFibGVDb2x1bW5UeXBlKSB7XHJcblx0XHRyZXR1cm4gY29sLk5hbWU7XHJcblx0fVxyXG59XHJcbiJdfQ==