@ai-table/grid 0.0.56 → 0.0.57
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/components/cell-editors/abstract-cell-editor.component.d.ts.map +1 -1
- package/components/cell-editors/cell-editor.scss +0 -1
- package/components/index.d.ts +0 -1
- package/components/index.d.ts.map +1 -1
- package/constants/editor.d.ts.map +1 -1
- package/constants/grid.d.ts +0 -1
- package/constants/grid.d.ts.map +1 -1
- package/constants/table.d.ts +3 -1
- package/constants/table.d.ts.map +1 -1
- package/core/types/core.d.ts +13 -13
- package/core/types/core.d.ts.map +1 -1
- package/dom-grid.component.d.ts.map +1 -1
- package/esm2022/components/cell-editors/abstract-cell-editor.component.mjs +2 -4
- package/esm2022/components/cell-editors/date/date-editor.component.mjs +5 -5
- package/esm2022/components/index.mjs +1 -2
- package/esm2022/constants/editor.mjs +3 -4
- package/esm2022/constants/grid.mjs +1 -2
- package/esm2022/constants/table.mjs +4 -2
- package/esm2022/core/constants/field.mjs +2 -2
- package/esm2022/core/types/core.mjs +1 -1
- package/esm2022/dom-grid.component.mjs +2 -4
- package/esm2022/grid-base.component.mjs +5 -28
- package/esm2022/grid.component.mjs +17 -52
- package/esm2022/renderer/components/cells/attachment.component.mjs +9 -19
- package/esm2022/renderer/components/cells/index.mjs +3 -2
- package/esm2022/renderer/components/cells/link.component.mjs +3 -5
- package/esm2022/renderer/components/cells/progress.component.mjs +268 -0
- package/esm2022/renderer/components/cells/rich-text.component.mjs +90 -0
- package/esm2022/renderer/drawers/cell-drawer.mjs +3 -3
- package/esm2022/utils/cell.mjs +3 -3
- package/esm2022/utils/clipboard/copy.mjs +11 -5
- package/esm2022/utils/clipboard/paste.mjs +1 -4
- package/esm2022/utils/field/model/attachment.mjs +8 -1
- package/esm2022/utils/field/model/date.mjs +13 -3
- package/esm2022/utils/field/model/field.mjs +1 -2
- package/esm2022/utils/field/model/link.mjs +16 -4
- package/esm2022/utils/field/model/member.mjs +1 -1
- package/esm2022/utils/field/model/number.mjs +11 -8
- package/esm2022/utils/field/model/progress.mjs +7 -7
- package/esm2022/utils/field/model/rate.mjs +3 -2
- package/esm2022/utils/field/model/rich-text.mjs +1 -1
- package/esm2022/utils/field/model/select.mjs +1 -1
- package/esm2022/utils/field/model/text.mjs +3 -2
- package/esm2022/utils/field/operate.mjs +4 -2
- package/esm2022/utils/i18n.mjs +3 -3
- package/esm2022/utils/index.mjs +2 -1
- package/esm2022/utils/match-keywords.mjs +9 -4
- package/fesm2022/ai-table-grid.mjs +836 -675
- package/fesm2022/ai-table-grid.mjs.map +1 -1
- package/grid-base.component.d.ts +2 -3
- package/grid-base.component.d.ts.map +1 -1
- package/grid.component.d.ts +1 -1
- package/grid.component.d.ts.map +1 -1
- package/package.json +1 -1
- package/renderer/components/cells/attachment.component.d.ts +0 -3
- package/renderer/components/cells/attachment.component.d.ts.map +1 -1
- package/renderer/components/cells/index.d.ts +2 -1
- package/renderer/components/cells/index.d.ts.map +1 -1
- package/renderer/components/cells/link.component.d.ts.map +1 -1
- package/renderer/components/cells/progress.component.d.ts +82 -0
- package/renderer/components/cells/progress.component.d.ts.map +1 -0
- package/renderer/components/cells/{richtext.component.d.ts → rich-text.component.d.ts} +4 -4
- package/renderer/components/cells/rich-text.component.d.ts.map +1 -0
- package/renderer/drawers/cell-drawer.d.ts.map +1 -1
- package/utils/clipboard/paste.d.ts.map +1 -1
- package/utils/field/model/attachment.d.ts.map +1 -1
- package/utils/field/model/date.d.ts +1 -0
- package/utils/field/model/date.d.ts.map +1 -1
- package/utils/field/model/field.d.ts.map +1 -1
- package/utils/field/model/link.d.ts +3 -2
- package/utils/field/model/link.d.ts.map +1 -1
- package/utils/field/model/member.d.ts +1 -1
- package/utils/field/model/member.d.ts.map +1 -1
- package/utils/field/model/number.d.ts +5 -4
- package/utils/field/model/number.d.ts.map +1 -1
- package/utils/field/model/progress.d.ts +4 -4
- package/utils/field/model/progress.d.ts.map +1 -1
- package/utils/field/model/rate.d.ts +2 -2
- package/utils/field/model/rate.d.ts.map +1 -1
- package/utils/field/model/rich-text.d.ts +3 -3
- package/utils/field/model/rich-text.d.ts.map +1 -1
- package/utils/field/model/select.d.ts +1 -1
- package/utils/field/model/select.d.ts.map +1 -1
- package/utils/field/model/text.d.ts +3 -3
- package/utils/field/model/text.d.ts.map +1 -1
- package/utils/field/operate.d.ts +1 -1
- package/utils/field/operate.d.ts.map +1 -1
- package/utils/i18n.d.ts +1 -1
- package/utils/index.d.ts +1 -0
- package/utils/index.d.ts.map +1 -1
- package/utils/match-keywords.d.ts.map +1 -1
- package/components/cell-editors/progress/progress-editor.component.d.ts +0 -19
- package/components/cell-editors/progress/progress-editor.component.d.ts.map +0 -1
- package/components/cell-editors/progress/progress-editor.component.scss +0 -29
- package/esm2022/components/cell-editors/progress/progress-editor.component.mjs +0 -72
- package/esm2022/renderer/components/cells/richtext.component.mjs +0 -90
- package/renderer/components/cells/richtext.component.d.ts.map +0 -1
@@ -1,7 +1,5 @@
|
|
1
1
|
import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';
|
2
|
-
import { KoShape } from '../../../angular-konva/components/shape.component';
|
3
2
|
import { AI_TABLE_CELL_PADDING, AI_TABLE_FIELD_HEAD_ICON_GAP_SIZE, AI_TABLE_FIELD_HEAD_MORE, Colors } from '../../../constants';
|
4
|
-
import { KoContainer } from '../../../angular-konva/components/container.component';
|
5
3
|
import { getMousePosition, handleMouseStyle } from '../../../utils';
|
6
4
|
import { AITableText } from '../text.component';
|
7
5
|
import { AITable, AITableFieldType } from '../../../core';
|
@@ -17,7 +15,7 @@ export class AITableCellLink {
|
|
17
15
|
this.textConfig = computed(() => {
|
18
16
|
const render = this.config()?.render;
|
19
17
|
if (render) {
|
20
|
-
const { x, y, transformValue,
|
18
|
+
const { x, y, transformValue, columnWidth, rowHeight, style, zIndex } = render;
|
21
19
|
let textRender = transformValue.text;
|
22
20
|
if (textRender == null) {
|
23
21
|
return;
|
@@ -84,8 +82,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
84
82
|
}
|
85
83
|
`,
|
86
84
|
standalone: true,
|
87
|
-
imports: [
|
85
|
+
imports: [AITableText],
|
88
86
|
changeDetection: ChangeDetectionStrategy.OnPush
|
89
87
|
}]
|
90
88
|
}] });
|
91
|
-
//# sourceMappingURL=data:application/json;base64,
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9yZW5kZXJlci9jb21wb25lbnRzL2NlbGxzL2xpbmsuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsaUNBQWlDLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEksT0FBTyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBR2hELE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQWM5QyxNQUFNLE9BQU8sZUFBZTtJQVg1QjtRQWNJLFdBQU0sR0FBRyxLQUFLLEVBQXNDLENBQUM7UUFFckQsZUFBVSxHQUFHLHFCQUFxQixHQUFHLGlDQUFpQyxDQUFDO1FBRXZFLFdBQU0sR0FBRyxRQUFRLENBQTRCLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUUxRSxtQkFBYyxHQUFHLFFBQVEsQ0FBZ0MsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBRTlGLGFBQVEsR0FBRyxRQUFRLENBQVUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVsRSxlQUFVLEdBQUcsUUFBUSxDQUF5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Q0FBQzsrR0FsRVEsZUFBZTttR0FBZixlQUFlLGdOQVRkOzs7O0tBSVQsNERBRVMsV0FBVzs7NEZBR1osZUFBZTtrQkFYM0IsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsUUFBUSxFQUFFOzs7O0tBSVQ7b0JBQ0QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFdBQVcsQ0FBQztvQkFDdEIsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2xEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBSV9UQUJMRV9DRUxMX1BBRERJTkcsIEFJX1RBQkxFX0ZJRUxEX0hFQURfSUNPTl9HQVBfU0laRSwgQUlfVEFCTEVfRklFTERfSEVBRF9NT1JFLCBDb2xvcnMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgZ2V0TW91c2VQb3NpdGlvbiwgaGFuZGxlTW91c2VTdHlsZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IEFJVGFibGVUZXh0IH0gZnJvbSAnLi4vdGV4dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQUlUYWJsZUhvdmVyQ2VsbENvbmZpZywgQUlUYWJsZVJlbmRlciB9IGZyb20gJy4uLy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEtvRXZlbnRPYmplY3QgfSBmcm9tICcuLi8uLi8uLi9hbmd1bGFyLWtvbnZhJztcbmltcG9ydCB7IEFJVGFibGUsIEFJVGFibGVGaWVsZFR5cGUgfSBmcm9tICcuLi8uLi8uLi9jb3JlJztcbmltcG9ydCB7IFRleHRDb25maWcgfSBmcm9tICdrb252YS9saWIvc2hhcGVzL1RleHQnO1xuaW1wb3J0IHsgZHJhd2VyIH0gZnJvbSAnLi4vLi4vZHJhd2Vycy9kcmF3ZXInO1xuaW1wb3J0IHsgSG92ZXJDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWktdGFibGUtbGluaycsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgQGlmIChzaG93TGluaygpKSB7XG4gICAgICAgICAgICA8YWktdGFibGUtdGV4dCBbY29uZmlnXT1cInRleHRDb25maWcoKSFcIiAoa29DbGljayk9XCJsaW5rQ2xpY2soJGV2ZW50KVwiIChrb01vdXNlTW92ZSk9XCJsaW5rTW91c2VNb3ZlKCRldmVudClcIj48L2FpLXRhYmxlLXRleHQ+XG4gICAgICAgIH1cbiAgICBgLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0FJVGFibGVUZXh0XSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBBSVRhYmxlQ2VsbExpbmsgaW1wbGVtZW50cyBIb3ZlckNlbGxDb21wb25lbnQge1xuICAgIHN0YXRpYyBmaWVsZFR5cGUgPSBBSVRhYmxlRmllbGRUeXBlLmxpbms7XG5cbiAgICBjb25maWcgPSBpbnB1dDxBSVRhYmxlSG92ZXJDZWxsQ29uZmlnIHwgdW5kZWZpbmVkPigpO1xuXG4gICAgdGV4dE9mZnNldCA9IEFJX1RBQkxFX0NFTExfUEFERElORyArIEFJX1RBQkxFX0ZJRUxEX0hFQURfSUNPTl9HQVBfU0laRTtcblxuICAgIHJlbmRlciA9IGNvbXB1dGVkPEFJVGFibGVSZW5kZXIgfCB1bmRlZmluZWQ+KCgpID0+IHRoaXMuY29uZmlnKCk/LnJlbmRlcik7XG5cbiAgICB0cmFuc2Zvcm1WYWx1ZSA9IGNvbXB1dGVkPHsgdGV4dDogc3RyaW5nOyB1cmw6IHN0cmluZyB9PigoKSA9PiB0aGlzLnJlbmRlcigpPy50cmFuc2Zvcm1WYWx1ZSk7XG5cbiAgICBzaG93TGluayA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+ICEhdGhpcy50cmFuc2Zvcm1WYWx1ZSgpPy50ZXh0KTtcblxuICAgIHRleHRDb25maWcgPSBjb21wdXRlZDxUZXh0Q29uZmlnIHwgdW5kZWZpbmVkPigoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlbmRlciA9IHRoaXMuY29uZmlnKCk/LnJlbmRlcjtcbiAgICAgICAgaWYgKHJlbmRlcikge1xuICAgICAgICAgICAgY29uc3QgeyB4LCB5LCB0cmFuc2Zvcm1WYWx1ZSwgY29sdW1uV2lkdGgsIHJvd0hlaWdodCwgc3R5bGUsIHpJbmRleCB9ID0gcmVuZGVyO1xuICAgICAgICAgICAgbGV0IHRleHRSZW5kZXI6IHN0cmluZyB8IG51bGwgPSB0cmFuc2Zvcm1WYWx1ZS50ZXh0O1xuICAgICAgICAgICAgaWYgKHRleHRSZW5kZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGV4dFJlbmRlciA9IHRleHRSZW5kZXIucmVwbGFjZSgvXFxyfFxcbi9nLCAnICcpO1xuICAgICAgICAgICAgY29uc3QgZm9udFdlaWdodCA9IHN0eWxlPy5mb250V2VpZ2h0O1xuICAgICAgICAgICAgY29uc3QgdGV4dE1heFdpZHRoID0gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICAgICAgY29uc3QgeyB0ZXh0LCB0ZXh0V2lkdGggfSA9IGRyYXdlci50ZXh0RWxsaXBzaXMoe1xuICAgICAgICAgICAgICAgIHRleHQ6IHRleHRSZW5kZXIsXG4gICAgICAgICAgICAgICAgbWF4V2lkdGg6IHRleHRNYXhXaWR0aCxcbiAgICAgICAgICAgICAgICBmb250V2VpZ2h0XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgIHksXG4gICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgICAgICB3cmFwOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgd2lkdGg6IHRleHRXaWR0aCxcbiAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IENvbG9ycy5wcmltYXJ5LFxuICAgICAgICAgICAgICAgIGZpbGw6IENvbG9ycy5wcmltYXJ5LFxuICAgICAgICAgICAgICAgIGhlaWdodDogcm93SGVpZ2h0ICsgMixcbiAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiAxLjg0LFxuICAgICAgICAgICAgICAgIGxpc3RlbmluZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBlbGxpcHNpczogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0ZXh0RGVjb3JhdGlvbjogJ3VuZGVybGluZScsXG4gICAgICAgICAgICAgICAgekluZGV4XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9KTtcblxuICAgIGxpbmtDbGljayhlOiBLb0V2ZW50T2JqZWN0PE1vdXNlRXZlbnQ+KSB7XG4gICAgICAgIGUuZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcbiAgICAgICAgd2luZG93Lm9wZW4odGhpcy50cmFuc2Zvcm1WYWx1ZSgpLnVybCwgJ19ibGFuaycsICdub29wZW5lcixub3JlZmVycmVyJyk7XG4gICAgfVxuXG4gICAgbGlua01vdXNlTW92ZShlOiBLb0V2ZW50T2JqZWN0PE1vdXNlRXZlbnQ+KSB7XG4gICAgICAgIGUuZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgeyBhaVRhYmxlLCBjb29yZGluYXRlIH0gPSB0aGlzLmNvbmZpZygpITtcbiAgICAgICAgY29uc3QgdGFyZ2V0TmFtZSA9IGUuZXZlbnQudGFyZ2V0Lm5hbWUoKTtcbiAgICAgICAgY29uc3QgZ3JpZFN0YWdlID0gZS5ldmVudC5jdXJyZW50VGFyZ2V0LmdldFN0YWdlKCk7XG4gICAgICAgIGNvbnN0IHBvcyA9IGdyaWRTdGFnZT8uZ2V0UG9pbnRlclBvc2l0aW9uKCk7XG4gICAgICAgIGlmIChwb3MgPT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICBjb25zdCB7IGNvbnRleHQgfSA9IGFpVGFibGU7XG4gICAgICAgIGNvbnN0IHsgeCwgeSB9ID0gcG9zO1xuICAgICAgICBjb25zdCBjdXJNb3VzZVBvc2l0aW9uID0gZ2V0TW91c2VQb3NpdGlvbihhaVRhYmxlLCB4LCB5LCBjb29yZGluYXRlLCBBSVRhYmxlLmdldFZpc2libGVGaWVsZHMoYWlUYWJsZSksIGNvbnRleHQhLCB0YXJnZXROYW1lKTtcbiAgICAgICAgaGFuZGxlTW91c2VTdHlsZShBSV9UQUJMRV9GSUVMRF9IRUFEX01PUkUsIGN1ck1vdXNlUG9zaXRpb24uYXJlYVR5cGUsIGNvb3JkaW5hdGUuY29udGFpbmVyKTtcbiAgICB9XG59XG4iXX0=
|
@@ -0,0 +1,268 @@
|
|
1
|
+
import { Component, computed, input, signal } from '@angular/core';
|
2
|
+
import { ChangeDetectionStrategy } from '@angular/core';
|
3
|
+
import { KoShape } from '../../../angular-konva';
|
4
|
+
import { AITableFieldType } from '../../../core';
|
5
|
+
import { generateTargetName } from '../../../utils';
|
6
|
+
import { isActiveCell } from '../../../renderer';
|
7
|
+
import { Colors, AI_TABLE_CELL_PADDING, AI_TABLE_ROW_BLANK_HEIGHT, AI_TABLE_OFFSET, AI_TABLE_CELL, AI_TABLE_CELL_BORDER, AI_TABLE_PROGRESS_BAR_HEIGHT, AI_TABLE_PROGRESS_TEXT_WIDTH, AI_TABLE_PROGRESS_BAR_RADIUS, AI_TABLE_PROGRESS_BAR_POINTER_WIDTH, AI_TABLE_PROGRESS_BAR_POINTER_HEIGHT, AI_TABLE_TEXT_GAP, DEFAULT_FONT_FAMILY, DEFAULT_FONT_SIZE, DEFAULT_TEXT_FILL } from '../../../constants';
|
8
|
+
import { isNil } from 'lodash';
|
9
|
+
import * as i0 from "@angular/core";
|
10
|
+
export class AITableCellProgress {
|
11
|
+
constructor() {
|
12
|
+
this.config = input();
|
13
|
+
this.readonly = computed(() => {
|
14
|
+
return this.config()?.readonly;
|
15
|
+
});
|
16
|
+
this.dragPointerX = signal(null);
|
17
|
+
this.railWidth = computed(() => {
|
18
|
+
const { columnWidth } = this.config().render;
|
19
|
+
return columnWidth - 2 * AI_TABLE_CELL_PADDING - AI_TABLE_PROGRESS_TEXT_WIDTH;
|
20
|
+
});
|
21
|
+
this.trackWidth = computed(() => {
|
22
|
+
return (this.progressValue() / 100) * this.railWidth();
|
23
|
+
});
|
24
|
+
this.pointerWidth = AI_TABLE_PROGRESS_BAR_POINTER_WIDTH;
|
25
|
+
this.progressOffsetY = (AI_TABLE_ROW_BLANK_HEIGHT - AI_TABLE_PROGRESS_BAR_HEIGHT) / 2 + AI_TABLE_OFFSET;
|
26
|
+
this.dragProgressValue = signal(null);
|
27
|
+
this.progressValue = computed(() => {
|
28
|
+
const dragValue = this.dragProgressValue();
|
29
|
+
if (dragValue !== null) {
|
30
|
+
return dragValue;
|
31
|
+
}
|
32
|
+
const { render } = this.config();
|
33
|
+
const { transformValue } = render;
|
34
|
+
if (isNil(transformValue)) {
|
35
|
+
return 0;
|
36
|
+
}
|
37
|
+
return transformValue;
|
38
|
+
});
|
39
|
+
this.whiteBgConfig = computed(() => {
|
40
|
+
const { aiTable, render, field, recordId, coordinate } = this.config();
|
41
|
+
const pointPosition = aiTable.context.pointPosition();
|
42
|
+
const { x, y } = render;
|
43
|
+
const { columnIndex } = pointPosition;
|
44
|
+
const isActive = isActiveCell([recordId, field._id], aiTable);
|
45
|
+
return {
|
46
|
+
x: x - AI_TABLE_CELL_PADDING + AI_TABLE_CELL_BORDER / 2,
|
47
|
+
y: y + AI_TABLE_CELL_BORDER + AI_TABLE_OFFSET,
|
48
|
+
width: coordinate.getColumnWidth(columnIndex) - (AI_TABLE_CELL_BORDER + AI_TABLE_OFFSET) * 2 + AI_TABLE_CELL_BORDER / 2,
|
49
|
+
height: AI_TABLE_ROW_BLANK_HEIGHT - (AI_TABLE_CELL_BORDER + AI_TABLE_OFFSET),
|
50
|
+
fill: Colors.white,
|
51
|
+
stroke: isActive ? null : Colors.white,
|
52
|
+
name: generateTargetName({
|
53
|
+
targetName: AI_TABLE_CELL,
|
54
|
+
fieldId: field._id,
|
55
|
+
recordId
|
56
|
+
})
|
57
|
+
};
|
58
|
+
});
|
59
|
+
this.railConfig = computed(() => {
|
60
|
+
const { render, field, recordId } = this.config();
|
61
|
+
const { x } = render;
|
62
|
+
return {
|
63
|
+
x,
|
64
|
+
y: this.progressOffsetY,
|
65
|
+
width: this.railWidth(),
|
66
|
+
height: AI_TABLE_PROGRESS_BAR_HEIGHT,
|
67
|
+
cornerRadius: AI_TABLE_PROGRESS_BAR_RADIUS,
|
68
|
+
fill: Colors.gray200,
|
69
|
+
name: generateTargetName({
|
70
|
+
targetName: AI_TABLE_CELL,
|
71
|
+
fieldId: field._id,
|
72
|
+
recordId,
|
73
|
+
mouseStyle: this.readonly() ? 'default' : 'pointer'
|
74
|
+
})
|
75
|
+
};
|
76
|
+
});
|
77
|
+
this.trackConfig = computed(() => {
|
78
|
+
const { render, field, recordId } = this.config();
|
79
|
+
const { x } = render;
|
80
|
+
return {
|
81
|
+
x,
|
82
|
+
y: this.progressOffsetY,
|
83
|
+
width: this.trackWidth(),
|
84
|
+
height: AI_TABLE_PROGRESS_BAR_HEIGHT,
|
85
|
+
cornerRadius: AI_TABLE_PROGRESS_BAR_RADIUS,
|
86
|
+
fill: Colors.success,
|
87
|
+
name: generateTargetName({
|
88
|
+
targetName: AI_TABLE_CELL,
|
89
|
+
fieldId: field._id,
|
90
|
+
recordId,
|
91
|
+
mouseStyle: this.readonly() ? 'default' : 'pointer'
|
92
|
+
})
|
93
|
+
};
|
94
|
+
});
|
95
|
+
this.pointerConfig = computed(() => {
|
96
|
+
const { render, field, recordId } = this.config();
|
97
|
+
const { x } = render;
|
98
|
+
const halfPointerWidth = this.pointerWidth / 2;
|
99
|
+
const pointerY = this.progressOffsetY - (AI_TABLE_PROGRESS_BAR_POINTER_HEIGHT - AI_TABLE_PROGRESS_BAR_HEIGHT) / 2;
|
100
|
+
let pointerX;
|
101
|
+
if (this.dragPointerX() !== null) {
|
102
|
+
pointerX = this.dragPointerX() - halfPointerWidth;
|
103
|
+
}
|
104
|
+
else {
|
105
|
+
pointerX = x + this.trackWidth() - halfPointerWidth;
|
106
|
+
}
|
107
|
+
return {
|
108
|
+
x: pointerX,
|
109
|
+
y: pointerY,
|
110
|
+
width: this.pointerWidth,
|
111
|
+
height: AI_TABLE_PROGRESS_BAR_POINTER_HEIGHT,
|
112
|
+
fill: Colors.white,
|
113
|
+
stroke: Colors.success,
|
114
|
+
strokeWidth: 1,
|
115
|
+
cornerRadius: AI_TABLE_PROGRESS_BAR_RADIUS,
|
116
|
+
opacity: this.readonly() ? 0 : 1,
|
117
|
+
draggable: !this.readonly(),
|
118
|
+
dragBoundFunc: (pos) => {
|
119
|
+
const minX = x;
|
120
|
+
const maxX = x + this.railWidth() - this.pointerWidth;
|
121
|
+
return {
|
122
|
+
x: Math.min(minX, Math.min(maxX, pos.x)),
|
123
|
+
y: pointerY
|
124
|
+
};
|
125
|
+
},
|
126
|
+
name: generateTargetName({
|
127
|
+
targetName: AI_TABLE_CELL,
|
128
|
+
fieldId: field._id,
|
129
|
+
recordId,
|
130
|
+
mouseStyle: this.readonly() ? 'default' : 'pointer'
|
131
|
+
})
|
132
|
+
};
|
133
|
+
});
|
134
|
+
this.textConfig = computed(() => {
|
135
|
+
const { render, field, recordId } = this.config();
|
136
|
+
const { x } = render;
|
137
|
+
const textX = x + this.railWidth() + AI_TABLE_TEXT_GAP;
|
138
|
+
const textY = (AI_TABLE_ROW_BLANK_HEIGHT - DEFAULT_FONT_SIZE) / 2 + AI_TABLE_OFFSET;
|
139
|
+
return {
|
140
|
+
x: textX,
|
141
|
+
y: textY,
|
142
|
+
text: `${this.progressValue()}%`,
|
143
|
+
fill: DEFAULT_TEXT_FILL,
|
144
|
+
fontFamily: DEFAULT_FONT_FAMILY,
|
145
|
+
fontSize: DEFAULT_FONT_SIZE,
|
146
|
+
name: generateTargetName({
|
147
|
+
targetName: AI_TABLE_CELL,
|
148
|
+
fieldId: field._id,
|
149
|
+
recordId
|
150
|
+
})
|
151
|
+
};
|
152
|
+
});
|
153
|
+
}
|
154
|
+
static { this.fieldType = AITableFieldType.progress; }
|
155
|
+
calculatePercentage(clickX) {
|
156
|
+
return Math.max(0, Math.min(100, Math.round((clickX / this.railWidth()) * 100)));
|
157
|
+
}
|
158
|
+
koClick(e) {
|
159
|
+
if (this.readonly()) {
|
160
|
+
return;
|
161
|
+
}
|
162
|
+
this.updateProgressValue(e);
|
163
|
+
}
|
164
|
+
pointerDragstart(e) {
|
165
|
+
if (this.readonly()) {
|
166
|
+
return;
|
167
|
+
}
|
168
|
+
}
|
169
|
+
pointerDragmove(e) {
|
170
|
+
if (this.readonly()) {
|
171
|
+
return;
|
172
|
+
}
|
173
|
+
const { render, aiTable, coordinate } = this.config();
|
174
|
+
const { x } = render;
|
175
|
+
const { scrollLeft } = aiTable.context.scrollState();
|
176
|
+
const pointPosition = aiTable.context.pointPosition();
|
177
|
+
const { columnIndex } = pointPosition;
|
178
|
+
const columnLeftX = coordinate.getColumnOffset(columnIndex) - scrollLeft + AI_TABLE_OFFSET;
|
179
|
+
const stage = e.event.target.getStage();
|
180
|
+
if (!stage)
|
181
|
+
return;
|
182
|
+
const point = stage.getPointerPosition();
|
183
|
+
if (!point)
|
184
|
+
return;
|
185
|
+
const dragX = point.x - columnLeftX - x;
|
186
|
+
const minX = x;
|
187
|
+
const maxX = x + this.railWidth();
|
188
|
+
let dragPointerX = point.x - columnLeftX;
|
189
|
+
if (dragPointerX < minX) {
|
190
|
+
dragPointerX = minX;
|
191
|
+
}
|
192
|
+
else if (dragPointerX > maxX) {
|
193
|
+
dragPointerX = maxX;
|
194
|
+
}
|
195
|
+
this.dragPointerX.set(dragPointerX);
|
196
|
+
const percentage = this.calculatePercentage(dragX);
|
197
|
+
this.dragProgressValue.set(percentage);
|
198
|
+
}
|
199
|
+
pointerDragend(e) {
|
200
|
+
if (this.readonly()) {
|
201
|
+
return;
|
202
|
+
}
|
203
|
+
this.updateProgressValue(e);
|
204
|
+
this.dragPointerX.set(null);
|
205
|
+
this.dragProgressValue.set(null);
|
206
|
+
}
|
207
|
+
updateProgressValue(e) {
|
208
|
+
const { render, aiTable, coordinate, actions, field, recordId } = this.config();
|
209
|
+
const { x } = render;
|
210
|
+
const { scrollLeft } = aiTable.context.scrollState();
|
211
|
+
const pointPosition = aiTable.context.pointPosition();
|
212
|
+
const { columnIndex } = pointPosition;
|
213
|
+
const columnLeftX = coordinate.getColumnOffset(columnIndex) - scrollLeft + AI_TABLE_OFFSET;
|
214
|
+
const stage = e.event.target.getStage();
|
215
|
+
if (!stage)
|
216
|
+
return;
|
217
|
+
const point = stage.getPointerPosition();
|
218
|
+
if (!point)
|
219
|
+
return;
|
220
|
+
const dragX = point.x - columnLeftX - x;
|
221
|
+
const percentage = this.calculatePercentage(dragX);
|
222
|
+
if (!this.readonly() && actions && actions.updateFieldValue) {
|
223
|
+
actions.updateFieldValue({
|
224
|
+
value: percentage,
|
225
|
+
path: [recordId, field._id]
|
226
|
+
});
|
227
|
+
}
|
228
|
+
}
|
229
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AITableCellProgress, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
230
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AITableCellProgress, isStandalone: true, selector: "ai-table-progress", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
231
|
+
@if (!readonly()) {
|
232
|
+
<ko-rect [config]="whiteBgConfig()"></ko-rect>
|
233
|
+
}
|
234
|
+
<ko-rect [config]="railConfig()" (koClick)="koClick($event)"></ko-rect>
|
235
|
+
<ko-rect [config]="trackConfig()" (koClick)="koClick($event)"></ko-rect>
|
236
|
+
<ko-rect
|
237
|
+
[config]="pointerConfig()"
|
238
|
+
(koDragstart)="pointerDragstart($event)"
|
239
|
+
(koDragmove)="pointerDragmove($event)"
|
240
|
+
(koDragend)="pointerDragend($event)"
|
241
|
+
></ko-rect>
|
242
|
+
<ko-text [config]="textConfig()"></ko-text>
|
243
|
+
`, isInline: true, dependencies: [{ kind: "component", type: KoShape, selector: "ko-shape, ko-circle, ko-label, ko-rect, ko-ellipse, ko-wedge, ko-line, ko-sprite, ko-image, ko-text, ko-text-path, ko-star, ko-ring, ko-arc, ko-tag, ko-path, ko-regular-polygon, ko-arrow, ko-transformer", inputs: ["config"], outputs: ["koMouseover", "koMousemove", "koMouseout", "koMouseenter", "koMouseleave", "koMousedown", "koMouseup", "koWheel", "koContextmenu", "koClick", "koDblclick", "koTouchstart", "koTouchmove", "koTouchend", "koTap", "koDbltap", "koDragstart", "koDragmove", "koDragend"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
244
|
+
}
|
245
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AITableCellProgress, decorators: [{
|
246
|
+
type: Component,
|
247
|
+
args: [{
|
248
|
+
selector: 'ai-table-progress',
|
249
|
+
template: `
|
250
|
+
@if (!readonly()) {
|
251
|
+
<ko-rect [config]="whiteBgConfig()"></ko-rect>
|
252
|
+
}
|
253
|
+
<ko-rect [config]="railConfig()" (koClick)="koClick($event)"></ko-rect>
|
254
|
+
<ko-rect [config]="trackConfig()" (koClick)="koClick($event)"></ko-rect>
|
255
|
+
<ko-rect
|
256
|
+
[config]="pointerConfig()"
|
257
|
+
(koDragstart)="pointerDragstart($event)"
|
258
|
+
(koDragmove)="pointerDragmove($event)"
|
259
|
+
(koDragend)="pointerDragend($event)"
|
260
|
+
></ko-rect>
|
261
|
+
<ko-text [config]="textConfig()"></ko-text>
|
262
|
+
`,
|
263
|
+
standalone: true,
|
264
|
+
imports: [KoShape],
|
265
|
+
changeDetection: ChangeDetectionStrategy.OnPush
|
266
|
+
}]
|
267
|
+
}] });
|
268
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ3JpZC9zcmMvcmVuZGVyZXIvY29tcG9uZW50cy9jZWxscy9wcm9ncmVzcy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEQsT0FBTyxFQUFFLE9BQU8sRUFBaUIsTUFBTSx3QkFBd0IsQ0FBQztBQUdoRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFDSCxNQUFNLEVBQ04scUJBQXFCLEVBQ3JCLHlCQUF5QixFQUN6QixlQUFlLEVBQ2YsYUFBYSxFQUNiLG9CQUFvQixFQUNwQiw0QkFBNEIsRUFDNUIsNEJBQTRCLEVBQzVCLDRCQUE0QixFQUM1QixtQ0FBbUMsRUFDbkMsb0NBQW9DLEVBQ3BDLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNwQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUFRLENBQUM7O0FBc0IvQixNQUFNLE9BQU8sbUJBQW1CO0lBcEJoQztRQXVCSSxXQUFNLEdBQUcsS0FBSyxFQUEwQixDQUFDO1FBRXpDLGFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLFFBQVEsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztRQUVL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SztZQUFFLE9BQU87UUFFbkIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVuRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxRCxPQUFPLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ3JCLEtBQUssRUFBRSxVQUFVO2dCQUNqQixJQUFJLEVBQUUsQ0FBQyxRQUFTLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQzthQUMvQixDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0wsQ0FBQzsrR0F6UFEsbUJBQW1CO21HQUFuQixtQkFBbUIsb05BbEJsQjs7Ozs7Ozs7Ozs7OztLQWFULDREQUVTLE9BQU87OzRGQUdSLG1CQUFtQjtrQkFwQi9CLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7O0tBYVQ7b0JBQ0QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQztvQkFDbEIsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2xEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5wdXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEtvU2hhcGUsIEtvRXZlbnRPYmplY3QgfSBmcm9tICcuLi8uLi8uLi9hbmd1bGFyLWtvbnZhJztcbmltcG9ydCB7IEhvdmVyQ2VsbENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQUlUYWJsZUhvdmVyQ2VsbENvbmZpZyB9IGZyb20gJy4uLy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEFJVGFibGVGaWVsZFR5cGUgfSBmcm9tICcuLi8uLi8uLi9jb3JlJztcbmltcG9ydCB7IGdlbmVyYXRlVGFyZ2V0TmFtZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IGlzQWN0aXZlQ2VsbCB9IGZyb20gJy4uLy4uLy4uL3JlbmRlcmVyJztcbmltcG9ydCB7XG4gICAgQ29sb3JzLFxuICAgIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICBBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hULFxuICAgIEFJX1RBQkxFX09GRlNFVCxcbiAgICBBSV9UQUJMRV9DRUxMLFxuICAgIEFJX1RBQkxFX0NFTExfQk9SREVSLFxuICAgIEFJX1RBQkxFX1BST0dSRVNTX0JBUl9IRUlHSFQsXG4gICAgQUlfVEFCTEVfUFJPR1JFU1NfVEVYVF9XSURUSCxcbiAgICBBSV9UQUJMRV9QUk9HUkVTU19CQVJfUkFESVVTLFxuICAgIEFJX1RBQkxFX1BST0dSRVNTX0JBUl9QT0lOVEVSX1dJRFRILFxuICAgIEFJX1RBQkxFX1BST0dSRVNTX0JBUl9QT0lOVEVSX0hFSUdIVCxcbiAgICBBSV9UQUJMRV9URVhUX0dBUCxcbiAgICBERUZBVUxUX0ZPTlRfRkFNSUxZLFxuICAgIERFRkFVTFRfRk9OVF9TSVpFLFxuICAgIERFRkFVTFRfVEVYVF9GSUxMXG59IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJ2xvZGFzaCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWktdGFibGUtcHJvZ3Jlc3MnLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIEBpZiAoIXJlYWRvbmx5KCkpIHtcbiAgICAgICAgICAgIDxrby1yZWN0IFtjb25maWddPVwid2hpdGVCZ0NvbmZpZygpXCI+PC9rby1yZWN0PlxuICAgICAgICB9XG4gICAgICAgIDxrby1yZWN0IFtjb25maWddPVwicmFpbENvbmZpZygpXCIgKGtvQ2xpY2spPVwia29DbGljaygkZXZlbnQpXCI+PC9rby1yZWN0PlxuICAgICAgICA8a28tcmVjdCBbY29uZmlnXT1cInRyYWNrQ29uZmlnKClcIiAoa29DbGljayk9XCJrb0NsaWNrKCRldmVudClcIj48L2tvLXJlY3Q+XG4gICAgICAgIDxrby1yZWN0XG4gICAgICAgICAgICBbY29uZmlnXT1cInBvaW50ZXJDb25maWcoKVwiXG4gICAgICAgICAgICAoa29EcmFnc3RhcnQpPVwicG9pbnRlckRyYWdzdGFydCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChrb0RyYWdtb3ZlKT1cInBvaW50ZXJEcmFnbW92ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChrb0RyYWdlbmQpPVwicG9pbnRlckRyYWdlbmQoJGV2ZW50KVwiXG4gICAgICAgID48L2tvLXJlY3Q+XG4gICAgICAgIDxrby10ZXh0IFtjb25maWddPVwidGV4dENvbmZpZygpXCI+PC9rby10ZXh0PlxuICAgIGAsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbS29TaGFwZV0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQUlUYWJsZUNlbGxQcm9ncmVzcyBpbXBsZW1lbnRzIEhvdmVyQ2VsbENvbXBvbmVudCB7XG4gICAgc3RhdGljIGZpZWxkVHlwZSA9IEFJVGFibGVGaWVsZFR5cGUucHJvZ3Jlc3M7XG5cbiAgICBjb25maWcgPSBpbnB1dDxBSVRhYmxlSG92ZXJDZWxsQ29uZmlnPigpO1xuXG4gICAgcmVhZG9ubHkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZygpPy5yZWFkb25seTtcbiAgICB9KTtcblxuICAgIHByaXZhdGUgZHJhZ1BvaW50ZXJYID0gc2lnbmFsPG51bWJlciB8IG51bGw+KG51bGwpO1xuXG4gICAgcHJpdmF0ZSByYWlsV2lkdGggPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY29sdW1uV2lkdGggfSA9IHRoaXMuY29uZmlnKCkhLnJlbmRlcjtcbiAgICAgICAgcmV0dXJuIGNvbHVtbldpZHRoIC0gMiAqIEFJX1RBQkxFX0NFTExfUEFERElORyAtIEFJX1RBQkxFX1BST0dSRVNTX1RFWFRfV0lEVEg7XG4gICAgfSk7XG5cbiAgICBwcml2YXRlIHRyYWNrV2lkdGggPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiAodGhpcy5wcm9ncmVzc1ZhbHVlKCkgLyAxMDApICogdGhpcy5yYWlsV2lkdGgoKTtcbiAgICB9KTtcblxuICAgIHByaXZhdGUgcG9pbnRlcldpZHRoID0gQUlfVEFCTEVfUFJPR1JFU1NfQkFSX1BPSU5URVJfV0lEVEg7XG5cbiAgICBwcml2YXRlIHByb2dyZXNzT2Zmc2V0WSA9IChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfUFJPR1JFU1NfQkFSX0hFSUdIVCkgLyAyICsgQUlfVEFCTEVfT0ZGU0VUO1xuXG4gICAgcHJpdmF0ZSBkcmFnUHJvZ3Jlc3NWYWx1ZSA9IHNpZ25hbDxudW1iZXIgfCBudWxsPihudWxsKTtcblxuICAgIHByaXZhdGUgcHJvZ3Jlc3NWYWx1ZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgZHJhZ1ZhbHVlID0gdGhpcy5kcmFnUHJvZ3Jlc3NWYWx1ZSgpO1xuICAgICAgICBpZiAoZHJhZ1ZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZHJhZ1ZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyByZW5kZXIgfSA9IHRoaXMuY29uZmlnKCkhO1xuICAgICAgICBjb25zdCB7IHRyYW5zZm9ybVZhbHVlIH0gPSByZW5kZXI7XG4gICAgICAgIGlmIChpc05pbCh0cmFuc2Zvcm1WYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFuc2Zvcm1WYWx1ZTtcbiAgICB9KTtcblxuICAgIHdoaXRlQmdDb25maWcgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgYWlUYWJsZSwgcmVuZGVyLCBmaWVsZCwgcmVjb3JkSWQsIGNvb3JkaW5hdGUgfSA9IHRoaXMuY29uZmlnKCkhO1xuICAgICAgICBjb25zdCBwb2ludFBvc2l0aW9uID0gYWlUYWJsZS5jb250ZXh0IS5wb2ludFBvc2l0aW9uKCk7XG4gICAgICAgIGNvbnN0IHsgeCwgeSB9ID0gcmVuZGVyO1xuICAgICAgICBjb25zdCB7IGNvbHVtbkluZGV4IH0gPSBwb2ludFBvc2l0aW9uO1xuICAgICAgICBjb25zdCBpc0FjdGl2ZSA9IGlzQWN0aXZlQ2VsbChbcmVjb3JkSWQhLCBmaWVsZC5faWRdLCBhaVRhYmxlKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogeCAtIEFJX1RBQkxFX0NFTExfUEFERElORyArIEFJX1RBQkxFX0NFTExfQk9SREVSIC8gMixcbiAgICAgICAgICAgIHk6IHkgKyBBSV9UQUJMRV9DRUxMX0JPUkRFUiArIEFJX1RBQkxFX09GRlNFVCxcbiAgICAgICAgICAgIHdpZHRoOiBjb29yZGluYXRlLmdldENvbHVtbldpZHRoKGNvbHVtbkluZGV4KSAtIChBSV9UQUJMRV9DRUxMX0JPUkRFUiArIEFJX1RBQkxFX09GRlNFVCkgKiAyICsgQUlfVEFCTEVfQ0VMTF9CT1JERVIgLyAyLFxuICAgICAgICAgICAgaGVpZ2h0OiBBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gKEFJX1RBQkxFX0NFTExfQk9SREVSICsgQUlfVEFCTEVfT0ZGU0VUKSxcbiAgICAgICAgICAgIGZpbGw6IENvbG9ycy53aGl0ZSxcbiAgICAgICAgICAgIHN0cm9rZTogaXNBY3RpdmUgPyBudWxsIDogQ29sb3JzLndoaXRlLFxuICAgICAgICAgICAgbmFtZTogZ2VuZXJhdGVUYXJnZXROYW1lKHtcbiAgICAgICAgICAgICAgICB0YXJnZXROYW1lOiBBSV9UQUJMRV9DRUxMLFxuICAgICAgICAgICAgICAgIGZpZWxkSWQ6IGZpZWxkLl9pZCxcbiAgICAgICAgICAgICAgICByZWNvcmRJZFxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICB9KTtcblxuICAgIHJhaWxDb25maWcgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmVuZGVyLCBmaWVsZCwgcmVjb3JkSWQgfSA9IHRoaXMuY29uZmlnKCkhO1xuICAgICAgICBjb25zdCB7IHggfSA9IHJlbmRlcjtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeCxcbiAgICAgICAgICAgIHk6IHRoaXMucHJvZ3Jlc3NPZmZzZXRZLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMucmFpbFdpZHRoKCksXG4gICAgICAgICAgICBoZWlnaHQ6IEFJX1RBQkxFX1BST0dSRVNTX0JBUl9IRUlHSFQsXG4gICAgICAgICAgICBjb3JuZXJSYWRpdXM6IEFJX1RBQkxFX1BST0dSRVNTX0JBUl9SQURJVVMsXG4gICAgICAgICAgICBmaWxsOiBDb2xvcnMuZ3JheTIwMCxcbiAgICAgICAgICAgIG5hbWU6IGdlbmVyYXRlVGFyZ2V0TmFtZSh7XG4gICAgICAgICAgICAgICAgdGFyZ2V0TmFtZTogQUlfVEFCTEVfQ0VMTCxcbiAgICAgICAgICAgICAgICBmaWVsZElkOiBmaWVsZC5faWQsXG4gICAgICAgICAgICAgICAgcmVjb3JkSWQsXG4gICAgICAgICAgICAgICAgbW91c2VTdHlsZTogdGhpcy5yZWFkb25seSgpID8gJ2RlZmF1bHQnIDogJ3BvaW50ZXInXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgdHJhY2tDb25maWcgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmVuZGVyLCBmaWVsZCwgcmVjb3JkSWQgfSA9IHRoaXMuY29uZmlnKCkhO1xuICAgICAgICBjb25zdCB7IHggfSA9IHJlbmRlcjtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeCxcbiAgICAgICAgICAgIHk6IHRoaXMucHJvZ3Jlc3NPZmZzZXRZLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMudHJhY2tXaWR0aCgpLFxuICAgICAgICAgICAgaGVpZ2h0OiBBSV9UQUJMRV9QUk9HUkVTU19CQVJfSEVJR0hULFxuICAgICAgICAgICAgY29ybmVyUmFkaXVzOiBBSV9UQUJMRV9QUk9HUkVTU19CQVJfUkFESVVTLFxuICAgICAgICAgICAgZmlsbDogQ29sb3JzLnN1Y2Nlc3MsXG4gICAgICAgICAgICBuYW1lOiBnZW5lcmF0ZVRhcmdldE5hbWUoe1xuICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IEFJX1RBQkxFX0NFTEwsXG4gICAgICAgICAgICAgICAgZmllbGRJZDogZmllbGQuX2lkLFxuICAgICAgICAgICAgICAgIHJlY29yZElkLFxuICAgICAgICAgICAgICAgIG1vdXNlU3R5bGU6IHRoaXMucmVhZG9ubHkoKSA/ICdkZWZhdWx0JyA6ICdwb2ludGVyJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICB9KTtcblxuICAgIHBvaW50ZXJDb25maWcgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmVuZGVyLCBmaWVsZCwgcmVjb3JkSWQgfSA9IHRoaXMuY29uZmlnKCkhO1xuICAgICAgICBjb25zdCB7IHggfSA9IHJlbmRlcjtcbiAgICAgICAgY29uc3QgaGFsZlBvaW50ZXJXaWR0aCA9IHRoaXMucG9pbnRlcldpZHRoIC8gMjtcbiAgICAgICAgY29uc3QgcG9pbnRlclkgPSB0aGlzLnByb2dyZXNzT2Zmc2V0WSAtIChBSV9UQUJMRV9QUk9HUkVTU19CQVJfUE9JTlRFUl9IRUlHSFQgLSBBSV9UQUJMRV9QUk9HUkVTU19CQVJfSEVJR0hUKSAvIDI7XG5cbiAgICAgICAgbGV0IHBvaW50ZXJYOiBudW1iZXI7XG4gICAgICAgIGlmICh0aGlzLmRyYWdQb2ludGVyWCgpICE9PSBudWxsKSB7XG4gICAgICAgICAgICBwb2ludGVyWCA9IHRoaXMuZHJhZ1BvaW50ZXJYKCkhIC0gaGFsZlBvaW50ZXJXaWR0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBvaW50ZXJYID0geCArIHRoaXMudHJhY2tXaWR0aCgpIC0gaGFsZlBvaW50ZXJXaWR0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiBwb2ludGVyWCxcbiAgICAgICAgICAgIHk6IHBvaW50ZXJZLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMucG9pbnRlcldpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiBBSV9UQUJMRV9QUk9HUkVTU19CQVJfUE9JTlRFUl9IRUlHSFQsXG4gICAgICAgICAgICBmaWxsOiBDb2xvcnMud2hpdGUsXG4gICAgICAgICAgICBzdHJva2U6IENvbG9ycy5zdWNjZXNzLFxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgICAgICBjb3JuZXJSYWRpdXM6IEFJX1RBQkxFX1BST0dSRVNTX0JBUl9SQURJVVMsXG4gICAgICAgICAgICBvcGFjaXR5OiB0aGlzLnJlYWRvbmx5KCkgPyAwIDogMSxcbiAgICAgICAgICAgIGRyYWdnYWJsZTogIXRoaXMucmVhZG9ubHkoKSxcbiAgICAgICAgICAgIGRyYWdCb3VuZEZ1bmM6IChwb3M6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1pblggPSB4O1xuICAgICAgICAgICAgICAgIGNvbnN0IG1heFggPSB4ICsgdGhpcy5yYWlsV2lkdGgoKSAtIHRoaXMucG9pbnRlcldpZHRoO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgeDogTWF0aC5taW4obWluWCwgTWF0aC5taW4obWF4WCwgcG9zLngpKSxcbiAgICAgICAgICAgICAgICAgICAgeTogcG9pbnRlcllcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5hbWU6IGdlbmVyYXRlVGFyZ2V0TmFtZSh7XG4gICAgICAgICAgICAgICAgdGFyZ2V0TmFtZTogQUlfVEFCTEVfQ0VMTCxcbiAgICAgICAgICAgICAgICBmaWVsZElkOiBmaWVsZC5faWQsXG4gICAgICAgICAgICAgICAgcmVjb3JkSWQsXG4gICAgICAgICAgICAgICAgbW91c2VTdHlsZTogdGhpcy5yZWFkb25seSgpID8gJ2RlZmF1bHQnIDogJ3BvaW50ZXInXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgdGV4dENvbmZpZyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgeyByZW5kZXIsIGZpZWxkLCByZWNvcmRJZCB9ID0gdGhpcy5jb25maWcoKSE7XG4gICAgICAgIGNvbnN0IHsgeCB9ID0gcmVuZGVyO1xuICAgICAgICBjb25zdCB0ZXh0WCA9IHggKyB0aGlzLnJhaWxXaWR0aCgpICsgQUlfVEFCTEVfVEVYVF9HQVA7XG4gICAgICAgIGNvbnN0IHRleHRZID0gKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBERUZBVUxUX0ZPTlRfU0laRSkgLyAyICsgQUlfVEFCTEVfT0ZGU0VUO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiB0ZXh0WCxcbiAgICAgICAgICAgIHk6IHRleHRZLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5wcm9ncmVzc1ZhbHVlKCl9JWAsXG4gICAgICAgICAgICBmaWxsOiBERUZBVUxUX1RFWFRfRklMTCxcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6IERFRkFVTFRfRk9OVF9GQU1JTFksXG4gICAgICAgICAgICBmb250U2l6ZTogREVGQVVMVF9GT05UX1NJWkUsXG4gICAgICAgICAgICBuYW1lOiBnZW5lcmF0ZVRhcmdldE5hbWUoe1xuICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IEFJX1RBQkxFX0NFTEwsXG4gICAgICAgICAgICAgICAgZmllbGRJZDogZmllbGQuX2lkLFxuICAgICAgICAgICAgICAgIHJlY29yZElkXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVQZXJjZW50YWdlKGNsaWNrWDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKDEwMCwgTWF0aC5yb3VuZCgoY2xpY2tYIC8gdGhpcy5yYWlsV2lkdGgoKSkgKiAxMDApKSk7XG4gICAgfVxuXG4gICAga29DbGljayhlOiBLb0V2ZW50T2JqZWN0PE1vdXNlRXZlbnQ+KSB7XG4gICAgICAgIGlmICh0aGlzLnJlYWRvbmx5KCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZVByb2dyZXNzVmFsdWUoZSk7XG4gICAgfVxuXG4gICAgcG9pbnRlckRyYWdzdGFydChlOiBLb0V2ZW50T2JqZWN0PE1vdXNlRXZlbnQ+KSB7XG4gICAgICAgIGlmICh0aGlzLnJlYWRvbmx5KCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHBvaW50ZXJEcmFnbW92ZShlOiBLb0V2ZW50T2JqZWN0PE1vdXNlRXZlbnQ+KSB7XG4gICAgICAgIGlmICh0aGlzLnJlYWRvbmx5KCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgcmVuZGVyLCBhaVRhYmxlLCBjb29yZGluYXRlIH0gPSB0aGlzLmNvbmZpZygpITtcbiAgICAgICAgY29uc3QgeyB4IH0gPSByZW5kZXI7XG4gICAgICAgIGNvbnN0IHsgc2Nyb2xsTGVmdCB9ID0gYWlUYWJsZS5jb250ZXh0IS5zY3JvbGxTdGF0ZSgpO1xuICAgICAgICBjb25zdCBwb2ludFBvc2l0aW9uID0gYWlUYWJsZS5jb250ZXh0IS5wb2ludFBvc2l0aW9uKCk7XG4gICAgICAgIGNvbnN0IHsgY29sdW1uSW5kZXggfSA9IHBvaW50UG9zaXRpb247XG4gICAgICAgIGNvbnN0IGNvbHVtbkxlZnRYID0gY29vcmRpbmF0ZS5nZXRDb2x1bW5PZmZzZXQoY29sdW1uSW5kZXgpIC0gc2Nyb2xsTGVmdCArIEFJX1RBQkxFX09GRlNFVDtcblxuICAgICAgICBjb25zdCBzdGFnZSA9IGUuZXZlbnQudGFyZ2V0LmdldFN0YWdlKCk7XG4gICAgICAgIGlmICghc3RhZ2UpIHJldHVybjtcblxuICAgICAgICBjb25zdCBwb2ludCA9IHN0YWdlLmdldFBvaW50ZXJQb3NpdGlvbigpO1xuICAgICAgICBpZiAoIXBvaW50KSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgZHJhZ1ggPSBwb2ludC54IC0gY29sdW1uTGVmdFggLSB4O1xuICAgICAgICBjb25zdCBtaW5YID0geDtcbiAgICAgICAgY29uc3QgbWF4WCA9IHggKyB0aGlzLnJhaWxXaWR0aCgpO1xuXG4gICAgICAgIGxldCBkcmFnUG9pbnRlclggPSBwb2ludC54IC0gY29sdW1uTGVmdFg7XG4gICAgICAgIGlmIChkcmFnUG9pbnRlclggPCBtaW5YKSB7XG4gICAgICAgICAgICBkcmFnUG9pbnRlclggPSBtaW5YO1xuICAgICAgICB9IGVsc2UgaWYgKGRyYWdQb2ludGVyWCA+IG1heFgpIHtcbiAgICAgICAgICAgIGRyYWdQb2ludGVyWCA9IG1heFg7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRyYWdQb2ludGVyWC5zZXQoZHJhZ1BvaW50ZXJYKTtcbiAgICAgICAgY29uc3QgcGVyY2VudGFnZSA9IHRoaXMuY2FsY3VsYXRlUGVyY2VudGFnZShkcmFnWCk7XG4gICAgICAgIHRoaXMuZHJhZ1Byb2dyZXNzVmFsdWUuc2V0KHBlcmNlbnRhZ2UpO1xuICAgIH1cblxuICAgIHBvaW50ZXJEcmFnZW5kKGU6IEtvRXZlbnRPYmplY3Q8TW91c2VFdmVudD4pIHtcbiAgICAgICAgaWYgKHRoaXMucmVhZG9ubHkoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVQcm9ncmVzc1ZhbHVlKGUpO1xuICAgICAgICB0aGlzLmRyYWdQb2ludGVyWC5zZXQobnVsbCk7XG4gICAgICAgIHRoaXMuZHJhZ1Byb2dyZXNzVmFsdWUuc2V0KG51bGwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlUHJvZ3Jlc3NWYWx1ZShlOiBLb0V2ZW50T2JqZWN0PE1vdXNlRXZlbnQ+KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgcmVuZGVyLCBhaVRhYmxlLCBjb29yZGluYXRlLCBhY3Rpb25zLCBmaWVsZCwgcmVjb3JkSWQgfSA9IHRoaXMuY29uZmlnKCkhO1xuICAgICAgICBjb25zdCB7IHggfSA9IHJlbmRlcjtcbiAgICAgICAgY29uc3QgeyBzY3JvbGxMZWZ0IH0gPSBhaVRhYmxlLmNvbnRleHQhLnNjcm9sbFN0YXRlKCk7XG4gICAgICAgIGNvbnN0IHBvaW50UG9zaXRpb24gPSBhaVRhYmxlLmNvbnRleHQhLnBvaW50UG9zaXRpb24oKTtcbiAgICAgICAgY29uc3QgeyBjb2x1bW5JbmRleCB9ID0gcG9pbnRQb3NpdGlvbjtcbiAgICAgICAgY29uc3QgY29sdW1uTGVmdFggPSBjb29yZGluYXRlLmdldENvbHVtbk9mZnNldChjb2x1bW5JbmRleCkgLSBzY3JvbGxMZWZ0ICsgQUlfVEFCTEVfT0ZGU0VUO1xuXG4gICAgICAgIGNvbnN0IHN0YWdlID0gZS5ldmVudC50YXJnZXQuZ2V0U3RhZ2UoKTtcbiAgICAgICAgaWYgKCFzdGFnZSkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHBvaW50ID0gc3RhZ2UuZ2V0UG9pbnRlclBvc2l0aW9uKCk7XG4gICAgICAgIGlmICghcG9pbnQpIHJldHVybjtcblxuICAgICAgICBjb25zdCBkcmFnWCA9IHBvaW50LnggLSBjb2x1bW5MZWZ0WCAtIHg7XG4gICAgICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSB0aGlzLmNhbGN1bGF0ZVBlcmNlbnRhZ2UoZHJhZ1gpO1xuXG4gICAgICAgIGlmICghdGhpcy5yZWFkb25seSgpICYmIGFjdGlvbnMgJiYgYWN0aW9ucy51cGRhdGVGaWVsZFZhbHVlKSB7XG4gICAgICAgICAgICBhY3Rpb25zLnVwZGF0ZUZpZWxkVmFsdWUoe1xuICAgICAgICAgICAgICAgIHZhbHVlOiBwZXJjZW50YWdlLFxuICAgICAgICAgICAgICAgIHBhdGg6IFtyZWNvcmRJZCEsIGZpZWxkLl9pZF1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
|
@@ -0,0 +1,90 @@
|
|
1
|
+
import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';
|
2
|
+
import { AI_TABLE_ACTION_COMMON_RADIUS, AI_TABLE_ACTION_COMMON_RIGHT_PADDING, AI_TABLE_ACTION_COMMON_SIZE, AI_TABLE_CELL, AI_TABLE_CELL_EDIT, AI_TABLE_CELL_PADDING, Colors, EditPath } from '../../../constants';
|
3
|
+
import { generateTargetName } from '../../../utils';
|
4
|
+
import { AITableFieldType } from '../../../core';
|
5
|
+
import { AITableActionIcon } from '../action-icon.component';
|
6
|
+
import { drawer } from '../../drawers/drawer';
|
7
|
+
import { AITableText } from '../text.component';
|
8
|
+
import * as i0 from "@angular/core";
|
9
|
+
export class AITableCellRichText {
|
10
|
+
constructor() {
|
11
|
+
this.config = input();
|
12
|
+
this.textConfig = computed(() => {
|
13
|
+
const render = this.config()?.render;
|
14
|
+
if (render) {
|
15
|
+
const { x, y, transformValue, field, columnWidth, rowHeight, style, zIndex } = render;
|
16
|
+
let textRender = transformValue;
|
17
|
+
if (textRender == null) {
|
18
|
+
return;
|
19
|
+
}
|
20
|
+
textRender = textRender.replace(/\r|\n/g, ' ');
|
21
|
+
const fontWeight = style?.fontWeight;
|
22
|
+
const textMaxWidth = columnWidth - AI_TABLE_CELL_PADDING - AI_TABLE_ACTION_COMMON_RIGHT_PADDING - AI_TABLE_ACTION_COMMON_SIZE;
|
23
|
+
const { text, textWidth } = drawer.textEllipsis({
|
24
|
+
text: textRender,
|
25
|
+
maxWidth: textMaxWidth,
|
26
|
+
fontWeight
|
27
|
+
});
|
28
|
+
return {
|
29
|
+
x,
|
30
|
+
y,
|
31
|
+
text,
|
32
|
+
wrap: 'none',
|
33
|
+
width: textWidth,
|
34
|
+
fillStyle: Colors.primary,
|
35
|
+
height: rowHeight + 2,
|
36
|
+
lineHeight: 1.84,
|
37
|
+
listening: false,
|
38
|
+
ellipsis: true,
|
39
|
+
zIndex
|
40
|
+
};
|
41
|
+
}
|
42
|
+
return;
|
43
|
+
});
|
44
|
+
this.iconConfig = computed(() => {
|
45
|
+
const { coordinate, render, field, recordId, readonly } = this.config();
|
46
|
+
const offsetX = render.columnWidth - AI_TABLE_ACTION_COMMON_SIZE - AI_TABLE_ACTION_COMMON_RIGHT_PADDING;
|
47
|
+
const offsetY = (coordinate.rowInitSize - AI_TABLE_ACTION_COMMON_SIZE) / 2;
|
48
|
+
return {
|
49
|
+
coordinate,
|
50
|
+
readonly,
|
51
|
+
name: generateTargetName({
|
52
|
+
targetName: AI_TABLE_CELL,
|
53
|
+
fieldId: field._id,
|
54
|
+
recordId,
|
55
|
+
source: AI_TABLE_CELL_EDIT,
|
56
|
+
mouseStyle: readonly ? 'default' : 'pointer'
|
57
|
+
}),
|
58
|
+
x: offsetX,
|
59
|
+
y: offsetY,
|
60
|
+
data: EditPath,
|
61
|
+
fill: Colors.gray600,
|
62
|
+
hoverFill: Colors.primary,
|
63
|
+
backgroundWidth: AI_TABLE_ACTION_COMMON_SIZE,
|
64
|
+
backgroundHeight: AI_TABLE_ACTION_COMMON_SIZE,
|
65
|
+
cornerRadius: AI_TABLE_ACTION_COMMON_RADIUS,
|
66
|
+
listening: true
|
67
|
+
};
|
68
|
+
});
|
69
|
+
}
|
70
|
+
static { this.fieldType = AITableFieldType.richText; }
|
71
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AITableCellRichText, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
72
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: AITableCellRichText, isStandalone: true, selector: "ai-table-rich-text", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
73
|
+
<ai-table-text [config]="textConfig()!"></ai-table-text>
|
74
|
+
<ai-table-action-icon [config]="iconConfig()"></ai-table-action-icon>
|
75
|
+
`, isInline: true, dependencies: [{ kind: "component", type: AITableText, selector: "ai-table-text", inputs: ["config"], outputs: ["koClick", "koMouseMove"] }, { kind: "component", type: AITableActionIcon, selector: "ai-table-action-icon", inputs: ["config"], outputs: ["onClick", "onMousemove", "onMouseenter", "onMouseleave"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
76
|
+
}
|
77
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AITableCellRichText, decorators: [{
|
78
|
+
type: Component,
|
79
|
+
args: [{
|
80
|
+
selector: 'ai-table-rich-text',
|
81
|
+
template: `
|
82
|
+
<ai-table-text [config]="textConfig()!"></ai-table-text>
|
83
|
+
<ai-table-action-icon [config]="iconConfig()"></ai-table-action-icon>
|
84
|
+
`,
|
85
|
+
standalone: true,
|
86
|
+
imports: [AITableText, AITableActionIcon],
|
87
|
+
changeDetection: ChangeDetectionStrategy.OnPush
|
88
|
+
}]
|
89
|
+
}] });
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmljaC10ZXh0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyaWQvc3JjL3JlbmRlcmVyL2NvbXBvbmVudHMvY2VsbHMvcmljaC10ZXh0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEYsT0FBTyxFQUNILDZCQUE2QixFQUM3QixvQ0FBb0MsRUFDcEMsMkJBQTJCLEVBQzNCLGFBQWEsRUFDYixrQkFBa0IsRUFDbEIscUJBQXFCLEVBQ3JCLE1BQU0sRUFDTixRQUFRLEVBQ1gsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFN0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFZaEQsTUFBTSxPQUFPLG1CQUFtQjtJQVZoQztRQWFJLFdBQU0sR0FBRyxLQUFLLEVBQTBCLENBQUM7UUFFekMsZUFBVSxHQUFHLFFBQVEsQ0FBeUIsR0FBRyxFQUFFO1lBQy9DLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLENBQUM7WUFDckMsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDVCxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQztnQkFDdEYsSUFBSSxVQUFVLEdBQWtCLGNBQWMsQ0FBQztnQkFDL0MsSUFBSSxVQUFVLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQ3JCLE9BQU87Z0JBQ1gsQ0FBQztnQkFDRCxVQUFVLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQy9DLE1BQU0sVUFBVSxHQUFHLEtBQUssRUFBRSxVQUFVLENBQUM7Z0JBQ3JDLE1BQU0sWUFBWSxHQUFHLFdBQVcsR0FBRyxxQkFBcUIsR0FBRyxvQ0FBb0MsR0FBRywyQkFBMkIsQ0FBQztnQkFDOUgsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDO29CQUM1QyxJQUFJLEVBQUUsVUFBVTtvQkFDaEIsUUFBUSxFQUFFLFlBQVk7b0JBQ3RCLFVBQVU7aUJBQ2IsQ0FBQyxDQUFDO2dCQUVILE9BQU87b0JBQ0gsQ0FBQztvQkFDRCxDQUFDO29CQUNELElBQUk7b0JBQ0osSUFBSSxFQUFFLE1BQU07b0JBQ1osS0FBSyxFQUFFLFNBQVM7b0JBQ2hCLFNBQVMsRUFBRSxNQUFNLENBQUMsT0FBTztvQkFDekIsTUFBTSxFQUFFLFNBQVMsR0FBRyxDQUFDO29CQUNyQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsU0FBUyxFQUFFLEtBQUs7b0JBQ2hCLFFBQVEsRUFBRSxJQUFJO29CQUNkLE1BQU07aUJBQ1QsQ0FBQztZQUNOLENBQUM7WUFDRCxPQUFPO1FBQ1gsQ0FBQyxDQUFDLENBQUM7UUFFSCxlQUFVLEdBQUcsUUFBUSxDQUEwQixHQUFHLEVBQUU7WUFDaEQsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFHLENBQUM7WUFDekUsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFdBQVcsR0FBRywyQkFBMkIsR0FBRyxvQ0FBb0MsQ0FBQztZQUN4RyxNQUFNLE9BQU8sR0FBRyxDQUFDLFVBQVUsQ0FBQyxXQUFXLEdBQUcsMkJBQTJCLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFM0UsT0FBTztnQkFDSCxVQUFVO2dCQUNWLFFBQVE7Z0JBQ1IsSUFBSSxFQUFFLGtCQUFrQixDQUFDO29CQUNyQixVQUFVLEVBQUUsYUFBYTtvQkFDekIsT0FBTyxFQUFFLEtBQUssQ0FBQyxHQUFHO29CQUNsQixRQUFRO29CQUNSLE1BQU0sRUFBRSxrQkFBa0I7b0JBQzFCLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUztpQkFDL0MsQ0FBQztnQkFDRixDQUFDLEVBQUUsT0FBTztnQkFDVixDQUFDLEVBQUUsT0FBTztnQkFDVixJQUFJLEVBQUUsUUFBUTtnQkFDZCxJQUFJLEVBQUUsTUFBTSxDQUFDLE9BQU87Z0JBQ3BCLFNBQVMsRUFBRSxNQUFNLENBQUMsT0FBTztnQkFDekIsZUFBZSxFQUFFLDJCQUEyQjtnQkFDNUMsZ0JBQWdCLEVBQUUsMkJBQTJCO2dCQUM3QyxZQUFZLEVBQUUsNkJBQTZCO2dCQUMzQyxTQUFTLEVBQUUsSUFBSTthQUNsQixDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7S0FDTjthQWhFVSxjQUFTLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxBQUE1QixDQUE2QjsrR0FEcEMsbUJBQW1CO21HQUFuQixtQkFBbUIscU5BUmxCOzs7S0FHVCw0REFFUyxXQUFXLG1IQUFFLGlCQUFpQjs7NEZBRy9CLG1CQUFtQjtrQkFWL0IsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixRQUFRLEVBQUU7OztLQUdUO29CQUNELFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxXQUFXLEVBQUUsaUJBQWlCLENBQUM7b0JBQ3pDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNsRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBBSV9UQUJMRV9BQ1RJT05fQ09NTU9OX1JBRElVUyxcbiAgICBBSV9UQUJMRV9BQ1RJT05fQ09NTU9OX1JJR0hUX1BBRERJTkcsXG4gICAgQUlfVEFCTEVfQUNUSU9OX0NPTU1PTl9TSVpFLFxuICAgIEFJX1RBQkxFX0NFTEwsXG4gICAgQUlfVEFCTEVfQ0VMTF9FRElULFxuICAgIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICBDb2xvcnMsXG4gICAgRWRpdFBhdGhcbn0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IGdlbmVyYXRlVGFyZ2V0TmFtZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IEFJVGFibGVBY3Rpb25JY29uQ29uZmlnLCBBSVRhYmxlSG92ZXJDZWxsQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgQUlUYWJsZUZpZWxkVHlwZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUnO1xuaW1wb3J0IHsgSG92ZXJDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBBSVRhYmxlQWN0aW9uSWNvbiB9IGZyb20gJy4uL2FjdGlvbi1pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZXh0Q29uZmlnIH0gZnJvbSAna29udmEvbGliL3NoYXBlcy9UZXh0JztcbmltcG9ydCB7IGRyYXdlciB9IGZyb20gJy4uLy4uL2RyYXdlcnMvZHJhd2VyJztcbmltcG9ydCB7IEFJVGFibGVUZXh0IH0gZnJvbSAnLi4vdGV4dC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FpLXRhYmxlLXJpY2gtdGV4dCcsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGFpLXRhYmxlLXRleHQgW2NvbmZpZ109XCJ0ZXh0Q29uZmlnKCkhXCI+PC9haS10YWJsZS10ZXh0PlxuICAgICAgICA8YWktdGFibGUtYWN0aW9uLWljb24gW2NvbmZpZ109XCJpY29uQ29uZmlnKClcIj48L2FpLXRhYmxlLWFjdGlvbi1pY29uPlxuICAgIGAsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbQUlUYWJsZVRleHQsIEFJVGFibGVBY3Rpb25JY29uXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBBSVRhYmxlQ2VsbFJpY2hUZXh0IGltcGxlbWVudHMgSG92ZXJDZWxsQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgZmllbGRUeXBlID0gQUlUYWJsZUZpZWxkVHlwZS5yaWNoVGV4dDtcblxuICAgIGNvbmZpZyA9IGlucHV0PEFJVGFibGVIb3ZlckNlbGxDb25maWc+KCk7XG5cbiAgICB0ZXh0Q29uZmlnID0gY29tcHV0ZWQ8VGV4dENvbmZpZyB8IHVuZGVmaW5lZD4oKCkgPT4ge1xuICAgICAgICBjb25zdCByZW5kZXIgPSB0aGlzLmNvbmZpZygpPy5yZW5kZXI7XG4gICAgICAgIGlmIChyZW5kZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgeCwgeSwgdHJhbnNmb3JtVmFsdWUsIGZpZWxkLCBjb2x1bW5XaWR0aCwgcm93SGVpZ2h0LCBzdHlsZSwgekluZGV4IH0gPSByZW5kZXI7XG4gICAgICAgICAgICBsZXQgdGV4dFJlbmRlcjogc3RyaW5nIHwgbnVsbCA9IHRyYW5zZm9ybVZhbHVlO1xuICAgICAgICAgICAgaWYgKHRleHRSZW5kZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRleHRSZW5kZXIgPSB0ZXh0UmVuZGVyLnJlcGxhY2UoL1xccnxcXG4vZywgJyAnKTtcbiAgICAgICAgICAgIGNvbnN0IGZvbnRXZWlnaHQgPSBzdHlsZT8uZm9udFdlaWdodDtcbiAgICAgICAgICAgIGNvbnN0IHRleHRNYXhXaWR0aCA9IGNvbHVtbldpZHRoIC0gQUlfVEFCTEVfQ0VMTF9QQURESU5HIC0gQUlfVEFCTEVfQUNUSU9OX0NPTU1PTl9SSUdIVF9QQURESU5HIC0gQUlfVEFCTEVfQUNUSU9OX0NPTU1PTl9TSVpFO1xuICAgICAgICAgICAgY29uc3QgeyB0ZXh0LCB0ZXh0V2lkdGggfSA9IGRyYXdlci50ZXh0RWxsaXBzaXMoe1xuICAgICAgICAgICAgICAgIHRleHQ6IHRleHRSZW5kZXIsXG4gICAgICAgICAgICAgICAgbWF4V2lkdGg6IHRleHRNYXhXaWR0aCxcbiAgICAgICAgICAgICAgICBmb250V2VpZ2h0XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgIHksXG4gICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgICAgICB3cmFwOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgd2lkdGg6IHRleHRXaWR0aCxcbiAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IENvbG9ycy5wcmltYXJ5LFxuICAgICAgICAgICAgICAgIGhlaWdodDogcm93SGVpZ2h0ICsgMixcbiAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiAxLjg0LFxuICAgICAgICAgICAgICAgIGxpc3RlbmluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgZWxsaXBzaXM6IHRydWUsXG4gICAgICAgICAgICAgICAgekluZGV4XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9KTtcblxuICAgIGljb25Db25maWcgPSBjb21wdXRlZDxBSVRhYmxlQWN0aW9uSWNvbkNvbmZpZz4oKCkgPT4ge1xuICAgICAgICBjb25zdCB7IGNvb3JkaW5hdGUsIHJlbmRlciwgZmllbGQsIHJlY29yZElkLCByZWFkb25seSB9ID0gdGhpcy5jb25maWcoKSE7XG4gICAgICAgIGNvbnN0IG9mZnNldFggPSByZW5kZXIuY29sdW1uV2lkdGggLSBBSV9UQUJMRV9BQ1RJT05fQ09NTU9OX1NJWkUgLSBBSV9UQUJMRV9BQ1RJT05fQ09NTU9OX1JJR0hUX1BBRERJTkc7XG4gICAgICAgIGNvbnN0IG9mZnNldFkgPSAoY29vcmRpbmF0ZS5yb3dJbml0U2l6ZSAtIEFJX1RBQkxFX0FDVElPTl9DT01NT05fU0laRSkgLyAyO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb29yZGluYXRlLFxuICAgICAgICAgICAgcmVhZG9ubHksXG4gICAgICAgICAgICBuYW1lOiBnZW5lcmF0ZVRhcmdldE5hbWUoe1xuICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IEFJX1RBQkxFX0NFTEwsXG4gICAgICAgICAgICAgICAgZmllbGRJZDogZmllbGQuX2lkLFxuICAgICAgICAgICAgICAgIHJlY29yZElkLFxuICAgICAgICAgICAgICAgIHNvdXJjZTogQUlfVEFCTEVfQ0VMTF9FRElULFxuICAgICAgICAgICAgICAgIG1vdXNlU3R5bGU6IHJlYWRvbmx5ID8gJ2RlZmF1bHQnIDogJ3BvaW50ZXInXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHg6IG9mZnNldFgsXG4gICAgICAgICAgICB5OiBvZmZzZXRZLFxuICAgICAgICAgICAgZGF0YTogRWRpdFBhdGgsXG4gICAgICAgICAgICBmaWxsOiBDb2xvcnMuZ3JheTYwMCxcbiAgICAgICAgICAgIGhvdmVyRmlsbDogQ29sb3JzLnByaW1hcnksXG4gICAgICAgICAgICBiYWNrZ3JvdW5kV2lkdGg6IEFJX1RBQkxFX0FDVElPTl9DT01NT05fU0laRSxcbiAgICAgICAgICAgIGJhY2tncm91bmRIZWlnaHQ6IEFJX1RBQkxFX0FDVElPTl9DT01NT05fU0laRSxcbiAgICAgICAgICAgIGNvcm5lclJhZGl1czogQUlfVEFCTEVfQUNUSU9OX0NPTU1PTl9SQURJVVMsXG4gICAgICAgICAgICBsaXN0ZW5pbmc6IHRydWVcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbiJdfQ==
|