@alauda/ui 7.3.3-beta.24 → 7.3.3-beta.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/table/index.mjs +2 -2
- package/esm2022/table/table-column-resizable.directive.mjs +131 -0
- package/esm2022/table/table.component.mjs +3 -3
- package/fesm2022/alauda-ui.mjs +25 -21
- package/fesm2022/alauda-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/table/index.d.ts +1 -1
- package/table/{table-col-resizable.directive.d.ts → table-column-resizable.directive.d.ts} +5 -6
- package/esm2022/table/table-col-resizable.directive.mjs +0 -127
package/package.json
CHANGED
package/table/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ export * from './table.module';
|
|
|
3
3
|
export * from './table-cell.component';
|
|
4
4
|
export * from './table-cell.directive';
|
|
5
5
|
export * from './table-cell-def.directive';
|
|
6
|
-
export
|
|
6
|
+
export * from './table-column-resizable.directive';
|
|
7
7
|
export * from './table-column-def.directive';
|
|
8
8
|
export * from './table-header-cell.directive';
|
|
9
9
|
export * from './table-header-cell-def.directive';
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { AfterViewInit } from '@angular/core';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
|
-
export declare
|
|
4
|
-
export declare class TableColResizableDirective implements AfterViewInit {
|
|
3
|
+
export declare class TableColumnResizableDirective implements AfterViewInit {
|
|
5
4
|
minWidth: string;
|
|
6
5
|
maxWidth: string;
|
|
7
6
|
private readonly renderer2;
|
|
@@ -10,9 +9,9 @@ export declare class TableColResizableDirective implements AfterViewInit {
|
|
|
10
9
|
private readonly tableScrollWrapperDirective;
|
|
11
10
|
private readonly selfElement;
|
|
12
11
|
private readonly containerElement;
|
|
13
|
-
private
|
|
14
|
-
private styleEl;
|
|
12
|
+
private styleElement;
|
|
15
13
|
private hostAttr;
|
|
14
|
+
private resizeSubscription;
|
|
16
15
|
ngAfterViewInit(): void;
|
|
17
16
|
ngOnDestroy(): void;
|
|
18
17
|
private bindResizable;
|
|
@@ -22,6 +21,6 @@ export declare class TableColResizableDirective implements AfterViewInit {
|
|
|
22
21
|
private getColumnWidth;
|
|
23
22
|
private getColumnOffset;
|
|
24
23
|
private renderWidthStyles;
|
|
25
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<
|
|
26
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<
|
|
24
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TableColumnResizableDirective, never>;
|
|
25
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<TableColumnResizableDirective, "[auiTableColumnResizable]", never, { "minWidth": { "alias": "minWidth"; "required": false; }; "maxWidth": { "alias": "maxWidth"; "required": false; }; }, {}, never, never, true, never>;
|
|
27
26
|
}
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
import { Directive, ElementRef, inject, Input, Renderer2, } from '@angular/core';
|
|
2
|
-
import { first, fromEvent, map, startWith, Subject, switchMap, takeUntil, } from 'rxjs';
|
|
3
|
-
import { buildBem } from '../utils';
|
|
4
|
-
import { tableBem, TableColumnDefDirective, TableComponent, TableScrollWrapperDirective, } from './index';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
let tableColResizableUid = 0;
|
|
7
|
-
export const resizableBem = buildBem('aui-table-column-resizable');
|
|
8
|
-
export class TableColResizableDirective {
|
|
9
|
-
minWidth = '60px';
|
|
10
|
-
maxWidth = '100%';
|
|
11
|
-
renderer2 = inject(Renderer2);
|
|
12
|
-
tableColumnDefDirective = inject(TableColumnDefDirective);
|
|
13
|
-
tableComponent = inject(TableComponent);
|
|
14
|
-
tableScrollWrapperDirective = inject(TableScrollWrapperDirective, {
|
|
15
|
-
optional: true,
|
|
16
|
-
});
|
|
17
|
-
selfElement = inject(ElementRef).nativeElement;
|
|
18
|
-
containerElement = (this.tableScrollWrapperDirective || this.tableComponent).elementRef.nativeElement;
|
|
19
|
-
destroy$$ = new Subject();
|
|
20
|
-
styleEl;
|
|
21
|
-
hostAttr;
|
|
22
|
-
ngAfterViewInit() {
|
|
23
|
-
const resizeHandle = this.createResizeHandle();
|
|
24
|
-
this.bindResizable(resizeHandle);
|
|
25
|
-
}
|
|
26
|
-
ngOnDestroy() {
|
|
27
|
-
this.destroy$$.next();
|
|
28
|
-
this.destroy$$.complete();
|
|
29
|
-
}
|
|
30
|
-
bindResizable(resizeHandle) {
|
|
31
|
-
fromEvent(resizeHandle, 'mousedown')
|
|
32
|
-
.pipe(switchMap(mouseDownEvent => {
|
|
33
|
-
this.renderer2.setStyle(resizeHandle, 'visibility', 'hidden');
|
|
34
|
-
const initialMouseX = mouseDownEvent.clientX;
|
|
35
|
-
const columnWidth = this.getColumnWidth();
|
|
36
|
-
const columnOffset = this.getColumnOffset();
|
|
37
|
-
const resizeMarkLine = this.createResizeMarkLine(columnWidth + columnOffset);
|
|
38
|
-
const resizeOverlay = this.createResizeOverlay();
|
|
39
|
-
return fromEvent(document, 'mousemove').pipe(map(mouseMoveEvent => () => resizeMarkLine.updateOffset(mouseMoveEvent.clientX - initialMouseX)), switchMap(renderMarkLine => fromEvent(document, 'mouseup').pipe(first(), map(mouseUpEvent => () => {
|
|
40
|
-
this.renderer2.removeStyle(resizeHandle, 'visibility');
|
|
41
|
-
resizeMarkLine.destroy();
|
|
42
|
-
resizeOverlay.destroy();
|
|
43
|
-
this.renderWidthStyles(columnWidth + mouseUpEvent.clientX - initialMouseX);
|
|
44
|
-
}), startWith(renderMarkLine))));
|
|
45
|
-
}), takeUntil(this.destroy$$))
|
|
46
|
-
.subscribe(exec => {
|
|
47
|
-
exec();
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
createResizeHandle() {
|
|
51
|
-
const resizeHandle = this.renderer2.createElement('div');
|
|
52
|
-
this.renderer2.addClass(resizeHandle, resizableBem.element('handle'));
|
|
53
|
-
this.renderer2.appendChild(this.selfElement, resizeHandle);
|
|
54
|
-
return resizeHandle;
|
|
55
|
-
}
|
|
56
|
-
createResizeMarkLine(initialOffset) {
|
|
57
|
-
const markLine = this.renderer2.createElement('div');
|
|
58
|
-
this.renderer2.addClass(markLine, resizableBem.element('mark-line'));
|
|
59
|
-
this.renderer2.setStyle(markLine, 'left', initialOffset + 'px');
|
|
60
|
-
this.renderer2.appendChild(this.containerElement, markLine);
|
|
61
|
-
return {
|
|
62
|
-
element: markLine,
|
|
63
|
-
updateOffset: (offset) => {
|
|
64
|
-
this.renderer2.setStyle(markLine, 'left', initialOffset + offset + 'px');
|
|
65
|
-
},
|
|
66
|
-
destroy: () => {
|
|
67
|
-
this.renderer2.removeChild(this.containerElement, markLine);
|
|
68
|
-
},
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
createResizeOverlay() {
|
|
72
|
-
const resizeOverlay = this.renderer2.createElement('div');
|
|
73
|
-
this.renderer2.addClass(resizeOverlay, resizableBem.element('overlay'));
|
|
74
|
-
this.renderer2.appendChild(this.containerElement, resizeOverlay);
|
|
75
|
-
return {
|
|
76
|
-
element: resizeOverlay,
|
|
77
|
-
destroy: () => {
|
|
78
|
-
this.renderer2.removeChild(this.containerElement, resizeOverlay);
|
|
79
|
-
},
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
getColumnWidth() {
|
|
83
|
-
return this.selfElement.clientWidth;
|
|
84
|
-
}
|
|
85
|
-
getColumnOffset() {
|
|
86
|
-
return (this.selfElement.getBoundingClientRect().left -
|
|
87
|
-
this.containerElement.getBoundingClientRect().left);
|
|
88
|
-
}
|
|
89
|
-
renderWidthStyles(width) {
|
|
90
|
-
const className = tableBem.element(`column-${this.tableColumnDefDirective.cssClassFriendlyName}`);
|
|
91
|
-
if (!this.hostAttr) {
|
|
92
|
-
this.hostAttr = `table-resizable-${tableColResizableUid++}`;
|
|
93
|
-
this.containerElement.setAttribute(this.hostAttr, '');
|
|
94
|
-
}
|
|
95
|
-
const styleString = `
|
|
96
|
-
[${this.hostAttr}] .${className} {
|
|
97
|
-
flex: none !important;
|
|
98
|
-
width: ${width}px !important;
|
|
99
|
-
min-width: ${width}px !important;
|
|
100
|
-
max-width: ${width}px !important;
|
|
101
|
-
}
|
|
102
|
-
`;
|
|
103
|
-
if (this.styleEl) {
|
|
104
|
-
this.styleEl.innerHTML = styleString;
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
this.styleEl = this.renderer2.createElement('style');
|
|
108
|
-
this.styleEl.innerHTML = styleString;
|
|
109
|
-
this.renderer2.appendChild(this.containerElement, this.styleEl);
|
|
110
|
-
}
|
|
111
|
-
this.tableComponent.updateStickyColumnStyles();
|
|
112
|
-
}
|
|
113
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.3", ngImport: i0, type: TableColResizableDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
114
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.3", type: TableColResizableDirective, isStandalone: true, selector: "[auiTableColumnResizable]", inputs: { minWidth: "minWidth", maxWidth: "maxWidth" }, ngImport: i0 });
|
|
115
|
-
}
|
|
116
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.3", ngImport: i0, type: TableColResizableDirective, decorators: [{
|
|
117
|
-
type: Directive,
|
|
118
|
-
args: [{
|
|
119
|
-
selector: '[auiTableColumnResizable]',
|
|
120
|
-
standalone: true,
|
|
121
|
-
}]
|
|
122
|
-
}], propDecorators: { minWidth: [{
|
|
123
|
-
type: Input
|
|
124
|
-
}], maxWidth: [{
|
|
125
|
-
type: Input
|
|
126
|
-
}] } });
|
|
127
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29sLXJlc2l6YWJsZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGFibGUvdGFibGUtY29sLXJlc2l6YWJsZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFDTCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLEtBQUssRUFDTCxTQUFTLEVBQ1QsR0FBRyxFQUNILFNBQVMsRUFDVCxPQUFPLEVBQ1AsU0FBUyxFQUNULFNBQVMsR0FDVixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFcEMsT0FBTyxFQUNMLFFBQVEsRUFDUix1QkFBdUIsRUFDdkIsY0FBYyxFQUNkLDJCQUEyQixHQUM1QixNQUFNLFNBQVMsQ0FBQzs7QUFFakIsSUFBSSxvQkFBb0IsR0FBRyxDQUFDLENBQUM7QUFDN0IsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0FBTW5FLE1BQU0sT0FBTywwQkFBMEI7SUFFckMsUUFBUSxHQUFHLE1BQU0sQ0FBQztJQUdsQixRQUFRLEdBQUcsTUFBTSxDQUFDO0lBRUQsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5Qix1QkFBdUIsR0FBRyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUMxRCxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3hDLDJCQUEyQixHQUFHLE1BQU0sQ0FDbkQsMkJBQTJCLEVBQzNCO1FBQ0UsUUFBUSxFQUFFLElBQUk7S0FDZixDQUNGLENBQUM7SUFFZSxXQUFXLEdBQWdCLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxhQUFhLENBQUM7SUFDNUQsZ0JBQWdCLEdBQWdCLENB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QixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNqRTtRQUVELElBQUksQ0FBQyxjQUFjLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUNqRCxDQUFDO3VHQWpMVSwwQkFBMEI7MkZBQTFCLDBCQUEwQjs7MkZBQTFCLDBCQUEwQjtrQkFKdEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsMkJBQTJCO29CQUNyQyxVQUFVLEVBQUUsSUFBSTtpQkFDakI7OEJBR0MsUUFBUTtzQkFEUCxLQUFLO2dCQUlOLFFBQVE7c0JBRFAsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgUmVuZGVyZXIyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIGZpcnN0LFxuICBmcm9tRXZlbnQsXG4gIG1hcCxcbiAgc3RhcnRXaXRoLFxuICBTdWJqZWN0LFxuICBzd2l0Y2hNYXAsXG4gIHRha2VVbnRpbCxcbn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IGJ1aWxkQmVtIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5pbXBvcnQge1xuICB0YWJsZUJlbSxcbiAgVGFibGVDb2x1bW5EZWZEaXJlY3RpdmUsXG4gIFRhYmxlQ29tcG9uZW50LFxuICBUYWJsZVNjcm9sbFdyYXBwZXJEaXJlY3RpdmUsXG59IGZyb20gJy4vaW5kZXgnO1xuXG5sZXQgdGFibGVDb2xSZXNpemFibGVVaWQgPSAwO1xuZXhwb3J0IGNvbnN0IHJlc2l6YWJsZUJlbSA9IGJ1aWxkQmVtKCdhdWktdGFibGUtY29sdW1uLXJlc2l6YWJsZScpO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYXVpVGFibGVDb2x1bW5SZXNpemFibGVdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb2xSZXNpemFibGVEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KClcbiAgbWluV2lkdGggPSAnNjBweCc7XG5cbiAgQElucHV0KClcbiAgbWF4V2lkdGggPSAnMTAwJSc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlcjIgPSBpbmplY3QoUmVuZGVyZXIyKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0YWJsZUNvbHVtbkRlZkRpcmVjdGl2ZSA9IGluamVjdChUYWJsZUNvbHVtbkRlZkRpcmVjdGl2ZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGFibGVDb21wb25lbnQgPSBpbmplY3QoVGFibGVDb21wb25lbnQpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRhYmxlU2Nyb2xsV3JhcHBlckRpcmVjdGl2ZSA9IGluamVjdChcbiAgICBUYWJsZVNjcm9sbFdyYXBwZXJEaXJlY3RpdmUsXG4gICAge1xuICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgfSxcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHNlbGZFbGVtZW50OiBIVE1MRWxlbWVudCA9IGluamVjdChFbGVtZW50UmVmKS5uYXRpdmVFbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbnRhaW5lckVsZW1lbnQ6IEhUTUxFbGVtZW50ID0gKFxuICAgIHRoaXMudGFibGVTY3JvbGxXcmFwcGVyRGlyZWN0aXZlIHx8IHRoaXMudGFibGVDb21wb25lbnRcbiAgKS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgLy8gcHJpdmF0ZSByZWFkb25seSBiYXJXaWR0aCA9IDI7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBwcml2YXRlIHN0eWxlRWw6IEhUTUxTdHlsZUVsZW1lbnQ7XG4gIHByaXZhdGUgaG9zdEF0dHI6IHN0cmluZztcblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgY29uc3QgcmVzaXplSGFuZGxlID0gdGhpcy5jcmVhdGVSZXNpemVIYW5kbGUoKTtcbiAgICB0aGlzLmJpbmRSZXNpemFibGUocmVzaXplSGFuZGxlKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZGVzdHJveSQkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkJC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBiaW5kUmVzaXphYmxlKHJlc2l6ZUhhbmRsZTogSFRNTEVsZW1lbnQpIHtcbiAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4ocmVzaXplSGFuZGxlLCAnbW91c2Vkb3duJylcbiAgICAgIC5waXBlKFxuICAgICAgICAvLyBtYXAoZXZlbnQgPT4ge1xuICAgICAgICAvLyAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIC8vICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgLy8gICBjb25zdCBpbml0aWFsV2lkdGggPSB0aGlzLnNlbGZFbGVtZW50LmNsaWVudFdpZHRoO1xuXG4gICAgICAgIC8vICAgLy8g6YG/5YWN5Lik5p2h57q/5LiN5a+56b2QXG4gICAgICAgIC8vICAgdGhpcy5yZW5kZXJlcjIuc2V0U3R5bGUocmVzaXplSGFuZGxlLCAndmlzaWJpbGl0eScsICdoaWRkZW4nKTtcblxuICAgICAgICAvLyAgIHJldHVybiB7XG4gICAgICAgIC8vICAgICBtYXJrTGluZTogdGhpcy5jcmVhdGVSZXNpemVNYXJrTGluZSgpLFxuICAgICAgICAvLyAgICAgcmVzaXplT3ZlcmxheTogdGhpcy5jcmVhdGVSZXNpemVPdmVybGF5KCksXG4gICAgICAgIC8vICAgICBpbml0aWFsV2lkdGgsXG4gICAgICAgIC8vICAgICBpbml0aWFsTW91c2VYOiBldmVudC5jbGllbnRYLFxuICAgICAgICAvLyAgIH07XG4gICAgICAgIC8vIH0pLFxuICAgICAgICBzd2l0Y2hNYXAobW91c2VEb3duRXZlbnQgPT4ge1xuICAgICAgICAgIHRoaXMucmVuZGVyZXIyLnNldFN0eWxlKHJlc2l6ZUhhbmRsZSwgJ3Zpc2liaWxpdHknLCAnaGlkZGVuJyk7XG4gICAgICAgICAgY29uc3QgaW5pdGlhbE1vdXNlWCA9IG1vdXNlRG93bkV2ZW50LmNsaWVudFg7XG4gICAgICAgICAgY29uc3QgY29sdW1uV2lkdGggPSB0aGlzLmdldENvbHVtbldpZHRoKCk7XG4gICAgICAgICAgY29uc3QgY29sdW1uT2Zmc2V0ID0gdGhpcy5nZXRDb2x1bW5PZmZzZXQoKTtcbiAgICAgICAgICBjb25zdCByZXNpemVNYXJrTGluZSA9IHRoaXMuY3JlYXRlUmVzaXplTWFya0xpbmUoXG4gICAgICAgICAgICBjb2x1bW5XaWR0aCArIGNvbHVtbk9mZnNldCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHJlc2l6ZU92ZXJsYXkgPSB0aGlzLmNyZWF0ZVJlc2l6ZU92ZXJsYXkoKTtcbiAgICAgICAgICByZXR1cm4gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGRvY3VtZW50LCAnbW91c2Vtb3ZlJykucGlwZShcbiAgICAgICAgICAgIG1hcChcbiAgICAgICAgICAgICAgbW91c2VNb3ZlRXZlbnQgPT4gKCkgPT5cbiAgICAgICAgICAgICAgICByZXNpemVNYXJrTGluZS51cGRhdGVPZmZzZXQoXG4gICAgICAgICAgICAgICAgICBtb3VzZU1vdmVFdmVudC5jbGllbnRYIC0gaW5pdGlhbE1vdXNlWCxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHN3aXRjaE1hcChyZW5kZXJNYXJrTGluZSA9PlxuICAgICAgICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZG9jdW1lbnQsICdtb3VzZXVwJykucGlwZShcbiAgICAgICAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgICAgICAgIG1hcChtb3VzZVVwRXZlbnQgPT4gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlcjIucmVtb3ZlU3R5bGUocmVzaXplSGFuZGxlLCAndmlzaWJpbGl0eScpO1xuICAgICAgICAgICAgICAgICAgcmVzaXplTWFya0xpbmUuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgcmVzaXplT3ZlcmxheS5kZXN0cm95KCk7XG5cbiAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyV2lkdGhTdHlsZXMoXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbldpZHRoICsgbW91c2VVcEV2ZW50LmNsaWVudFggLSBpbml0aWFsTW91c2VYLFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBzdGFydFdpdGgocmVuZGVyTWFya0xpbmUpLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoZXhlYyA9PiB7XG4gICAgICAgIGV4ZWMoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVSZXNpemVIYW5kbGUoKSB7XG4gICAgY29uc3QgcmVzaXplSGFuZGxlOiBIVE1MRGl2RWxlbWVudCA9IHRoaXMucmVuZGVyZXIyLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHRoaXMucmVuZGVyZXIyLmFkZENsYXNzKHJlc2l6ZUhhbmRsZSwgcmVzaXphYmxlQmVtLmVsZW1lbnQoJ2hhbmRsZScpKTtcbiAgICB0aGlzLnJlbmRlcmVyMi5hcHBlbmRDaGlsZCh0aGlzLnNlbGZFbGVtZW50LCByZXNpemVIYW5kbGUpO1xuXG4gICAgLy8gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHJlc2l6ZUhhbmRsZSwgJ2NsaWNrJylcbiAgICAvLyAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkJCkpXG4gICAgLy8gICAuc3Vic2NyaWJlKGV2ZW50ID0+IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpKTtcblxuICAgIHJldHVybiByZXNpemVIYW5kbGU7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVJlc2l6ZU1hcmtMaW5lKGluaXRpYWxPZmZzZXQ6IG51bWJlcikge1xuICAgIGNvbnN0IG1hcmtMaW5lOiBIVE1MRWxlbWVudCA9IHRoaXMucmVuZGVyZXIyLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHRoaXMucmVuZGVyZXIyLmFkZENsYXNzKG1hcmtMaW5lLCByZXNpemFibGVCZW0uZWxlbWVudCgnbWFyay1saW5lJykpO1xuICAgIHRoaXMucmVuZGVyZXIyLnNldFN0eWxlKG1hcmtMaW5lLCAnbGVmdCcsIGluaXRpYWxPZmZzZXQgKyAncHgnKTtcbiAgICB0aGlzLnJlbmRlcmVyMi5hcHBlbmRDaGlsZCh0aGlzLmNvbnRhaW5lckVsZW1lbnQsIG1hcmtMaW5lKTtcbiAgICByZXR1cm4ge1xuICAgICAgZWxlbWVudDogbWFya0xpbmUsXG4gICAgICB1cGRhdGVPZmZzZXQ6IChvZmZzZXQ6IG51bWJlcikgPT4ge1xuICAgICAgICB0aGlzLnJlbmRlcmVyMi5zZXRTdHlsZShcbiAgICAgICAgICBtYXJrTGluZSxcbiAgICAgICAgICAnbGVmdCcsXG4gICAgICAgICAgaW5pdGlhbE9mZnNldCArIG9mZnNldCArICdweCcsXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogKCkgPT4ge1xuICAgICAgICB0aGlzLnJlbmRlcmVyMi5yZW1vdmVDaGlsZCh0aGlzLmNvbnRhaW5lckVsZW1lbnQsIG1hcmtMaW5lKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUmVzaXplT3ZlcmxheSgpIHtcbiAgICBjb25zdCByZXNpemVPdmVybGF5ID0gdGhpcy5yZW5kZXJlcjIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdGhpcy5yZW5kZXJlcjIuYWRkQ2xhc3MocmVzaXplT3ZlcmxheSwgcmVzaXphYmxlQmVtLmVsZW1lbnQoJ292ZXJsYXknKSk7XG4gICAgdGhpcy5yZW5kZXJlcjIuYXBwZW5kQ2hpbGQodGhpcy5jb250YWluZXJFbGVtZW50LCByZXNpemVPdmVybGF5KTtcbiAgICByZXR1cm4ge1xuICAgICAgZWxlbWVudDogcmVzaXplT3ZlcmxheSxcbiAgICAgIGRlc3Ryb3k6ICgpID0+IHtcbiAgICAgICAgdGhpcy5yZW5kZXJlcjIucmVtb3ZlQ2hpbGQodGhpcy5jb250YWluZXJFbGVtZW50LCByZXNpemVPdmVybGF5KTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29sdW1uV2lkdGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZkVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIH1cblxuICBwcml2YXRlIGdldENvbHVtbk9mZnNldCgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5zZWxmRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC1cbiAgICAgIHRoaXMuY29udGFpbmVyRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyV2lkdGhTdHlsZXMod2lkdGg6IG51bWJlcikge1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IHRhYmxlQmVtLmVsZW1lbnQoXG4gICAgICBgY29sdW1uLSR7dGhpcy50YWJsZUNvbHVtbkRlZkRpcmVjdGl2ZS5jc3NDbGFzc0ZyaWVuZGx5TmFtZX1gLFxuICAgICk7XG4gICAgaWYgKCF0aGlzLmhvc3RBdHRyKSB7XG4gICAgICB0aGlzLmhvc3RBdHRyID0gYHRhYmxlLXJlc2l6YWJsZS0ke3RhYmxlQ29sUmVzaXphYmxlVWlkKyt9YDtcbiAgICAgIHRoaXMuY29udGFpbmVyRWxlbWVudC5zZXRBdHRyaWJ1dGUodGhpcy5ob3N0QXR0ciwgJycpO1xuICAgIH1cbiAgICBjb25zdCBzdHlsZVN0cmluZyA9IGBcbiAgICAgWyR7dGhpcy5ob3N0QXR0cn1dIC4ke2NsYXNzTmFtZX0ge1xuICAgICAgZmxleDogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgd2lkdGg6ICR7d2lkdGh9cHggIWltcG9ydGFudDtcbiAgICAgIG1pbi13aWR0aDogJHt3aWR0aH1weCAhaW1wb3J0YW50O1xuICAgICAgbWF4LXdpZHRoOiAke3dpZHRofXB4ICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIGA7XG4gICAgaWYgKHRoaXMuc3R5bGVFbCkge1xuICAgICAgdGhpcy5zdHlsZUVsLmlubmVySFRNTCA9IHN0eWxlU3RyaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0eWxlRWwgPSB0aGlzLnJlbmRlcmVyMi5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgICAgdGhpcy5zdHlsZUVsLmlubmVySFRNTCA9IHN0eWxlU3RyaW5nO1xuICAgICAgdGhpcy5yZW5kZXJlcjIuYXBwZW5kQ2hpbGQodGhpcy5jb250YWluZXJFbGVtZW50LCB0aGlzLnN0eWxlRWwpO1xuICAgIH1cblxuICAgIHRoaXMudGFibGVDb21wb25lbnQudXBkYXRlU3RpY2t5Q29sdW1uU3R5bGVzKCk7XG4gIH1cbn1cbiJdfQ==
|