@guiexpert/angular-table 16.0.7 → 16.0.9

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/README.md CHANGED
@@ -8,6 +8,18 @@ This is the UI-agnostic table component for your next web app. 😊
8
8
 
9
9
  <img src="https://raw.githubusercontent.com/guiexperttable/ge-table/main/apps/table-website/src/assets/screens/heatmap.png" width="50%">
10
10
 
11
+ ### Version compatibility
12
+
13
+
14
+ | Angular | @guiexpert/angular-table |
15
+ |:-----------------------|:-------------------------|
16
+ | 17.x.x | ^17.0.0 |
17
+ | 16.x.x | ^16.0.7 |
18
+ | 15.x.x | ^15.0.2 |
19
+ | 14.x.x | ^14.0.3 |
20
+ |
21
+
22
+
11
23
  ### Features
12
24
  - Handle large datasets easily
13
25
  - Excellent performance for large tables by vertical and horizontal virtual scrolling
@@ -1,25 +1,145 @@
1
1
  import { ChangeDetectionStrategy, Component, ElementRef, Input, NgZone, Output, Renderer2, ViewEncapsulation } from "@angular/core";
2
2
  import { CommonModule } from "@angular/common";
3
3
  import { debounceTime, Subject, takeWhile } from "rxjs";
4
- import { TableOptions, TableScope } from "@guiexpert/table";
4
+ import { LicenseManager, TableOptions, TableScope } from '@guiexpert/table';
5
5
  import { DomService } from "./service/dom-service";
6
6
  import * as i0 from "@angular/core";
7
7
  import * as i1 from "./service/dom-service";
8
+ /**
9
+ * TableComponent is a reusable GUI component that displays tabular data.
10
+ * It provides various event outputs for user interactions such as mouse movement, dragging, clicking, etc.
11
+ * It requires a TableModelIf instance to specify the data and TableOptionsIf instance to configure the appearance and behavior.
12
+ *
13
+ * @example
14
+ * <guiexpert-table
15
+ * [licenseKey]="licenseKey"
16
+ * [tableModel]="tableModel"
17
+ * [tableOptions]="tableOptions"
18
+ * [debounceMouseClickDelay]="150"
19
+ * (tableReady)="handleTableReady($event)"
20
+ * (mouseMoved)="handleMouseMoved($event)"
21
+ * (mouseDragging)="handleMouseDragging($event)"
22
+ * (mouseDraggingEnded)="handleMouseDraggingEnded($event)"
23
+ * (contextmenu)="handleContextMenu($event)"
24
+ * (mouseClicked)="handleMouseClicked($event)"
25
+ * (modelChanged)="handleModelChanged($event)"
26
+ * (checkboxChanged)="handleCheckboxChanged($event)">
27
+ * </guiexpert-table>
28
+ *
29
+ * @requires CommonModule from '@angular/common'
30
+ * @requires DomService
31
+ *
32
+ * @remarks
33
+ * This component is designed to be standalone and should not have any parent components wrapping it.
34
+ * It uses OnPush change detection strategy and has ViewEncapsulation.None encapsulation.
35
+ *
36
+ * @publicApi
37
+ */
8
38
  export class TableComponent {
9
39
  renderer;
10
40
  elementRef;
11
41
  zone;
12
42
  domService;
43
+ /**
44
+ * Set the license key for the LicenseManager.
45
+ *
46
+ * @param {string} key - The license key to set.
47
+ * @returns {void}
48
+ */
49
+ set licenseKey(key) {
50
+ LicenseManager.getInstance().setLicenseKey(key);
51
+ }
52
+ /**
53
+ * Represents a Subject variable used to notify subscribers when a table is ready.
54
+ *
55
+ * @type {Subject<TableApi>}
56
+ */
13
57
  tableReady = new Subject();
58
+ /**
59
+ * Represents the event emitter for the mouse moved event.
60
+ *
61
+ * @type {Subject<GeMouseEvent>}
62
+ * @memberOf MyApplication
63
+ */
14
64
  mouseMoved = new Subject();
65
+ /**
66
+ * Represents a variable for tracking mouse dragging events.
67
+ *
68
+ * @type {Subject<GeMouseEvent>}
69
+ */
15
70
  mouseDragging = new Subject();
71
+ /**
72
+ * An instance of `Subject` that represents the event when mouse dragging has ended.
73
+ *
74
+ * @type {Subject<GeMouseEvent>}
75
+ * @memberof [Your Object/Class/Module]
76
+ */
16
77
  mouseDraggingEnded = new Subject();
78
+ /**
79
+ * Represents the context menu event subject.
80
+ *
81
+ * @name contextmenu
82
+ * @type {Subject<GeMouseEvent>}
83
+ *
84
+ * @description
85
+ * The `contextmenu` variable is an instance of the `Subject` class from the 'rxjs' library.
86
+ * It is used for broadcasting context menu events of type `GeMouseEvent`.
87
+ * Other parts of the code can subscribe to this subject to be notified when a context menu event occurs.
88
+ * The subject allows multiple observers to receive the event simultaneously.
89
+ */
17
90
  contextmenu = new Subject();
91
+ /**
92
+ * Represents a stream of mouse click events.
93
+ *
94
+ * @type {Subject<GeMouseEvent>}
95
+ */
18
96
  mouseClicked = new Subject();
97
+ /**
98
+ * A variable representing an observable subject for model change events.
99
+ *
100
+ * @type {Subject<GeModelChangeEvent>}
101
+ */
19
102
  modelChanged = new Subject();
103
+ /**
104
+ * Represents a Subject that emits an array of any type when a checkbox is changed.
105
+ *
106
+ * @type {Subject<any[]>}
107
+ */
20
108
  checkboxChanged = new Subject();
109
+ /**
110
+ * Represents a table model.
111
+ *
112
+ * @typedef {object} TableModel
113
+ * @property {any[]} [data] - An array containing the data for the table rows.
114
+ * @property {string[]} [headers] - An array containing the table column headers.
115
+ * @property {function} [updateData] - A function that updates the data in the table.
116
+ * @property {function} [updateHeaders] - A function that updates the column headers in the table.
117
+ * @property {function} [getData] - A function that retrieves the current data in the table.
118
+ * @property {function} [getHeaders] - A function that retrieves the column headers in the table.
119
+ */
21
120
  tableModel;
121
+ /**
122
+ * Represents the options for configuring a table.
123
+ *
124
+ * @typedef {Object} TableOptions
125
+ * @property {string} [option1] - Optional property to configure option1.
126
+ * @property {number} [option2] - Optional property to configure option2.
127
+ * @property {boolean} [option3] - Optional property to configure option3.
128
+ * @property {any[]} [option4] - Optional property to configure option4.
129
+ *
130
+ * @example
131
+ * const tableOptions: TableOptions = new TableOptions();
132
+ * tableOptions.option1 = 'value1';
133
+ * tableOptions.option2 = 5;
134
+ * tableOptions.option3 = true;
135
+ * tableOptions.option4 = [1, 2, 3];
136
+ */
22
137
  tableOptions = new TableOptions();
138
+ /**
139
+ * The debounceMouseClickDelay variable represents the delay in milliseconds for debouncing mouse clicks.
140
+ *
141
+ * @type {number}
142
+ */
23
143
  debounceMouseClickDelay = 150;
24
144
  debounceMouseClick = new Subject();
25
145
  tableScope;
@@ -72,12 +192,14 @@ export class TableComponent {
72
192
  }
73
193
  }
74
194
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: TableComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: i1.DomService }], target: i0.ɵɵFactoryTarget.Component });
75
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.2", type: TableComponent, isStandalone: true, selector: "guiexpert-table", inputs: { tableModel: "tableModel", tableOptions: "tableOptions", debounceMouseClickDelay: "debounceMouseClickDelay" }, outputs: { tableReady: "tableReady", mouseMoved: "mouseMoved", mouseDragging: "mouseDragging", mouseDraggingEnded: "mouseDraggingEnded", contextmenu: "contextmenu", mouseClicked: "mouseClicked", modelChanged: "modelChanged", checkboxChanged: "checkboxChanged" }, providers: [DomService], ngImport: i0, template: "", isInline: true, styles: ["@import\"../../../../table/css/table-classes.css\";@import\"../../../../table/css/table-tree.css\";@import\"../../../../table/css/table-color-vars.css\";@import\"../../../../table/css/table-color-classes.css\";\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
195
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.2", type: TableComponent, isStandalone: true, selector: "guiexpert-table", inputs: { licenseKey: "licenseKey", tableModel: "tableModel", tableOptions: "tableOptions", debounceMouseClickDelay: "debounceMouseClickDelay" }, outputs: { tableReady: "tableReady", mouseMoved: "mouseMoved", mouseDragging: "mouseDragging", mouseDraggingEnded: "mouseDraggingEnded", contextmenu: "contextmenu", mouseClicked: "mouseClicked", modelChanged: "modelChanged", checkboxChanged: "checkboxChanged" }, providers: [DomService], ngImport: i0, template: "", isInline: true, styles: ["@import\"../../../../table/css/table-classes.css\";@import\"../../../../table/css/table-tree.css\";@import\"../../../../table/css/table-color-vars.css\";@import\"../../../../table/css/table-color-classes.css\";\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
76
196
  }
77
197
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: TableComponent, decorators: [{
78
198
  type: Component,
79
199
  args: [{ selector: "guiexpert-table", standalone: true, imports: [CommonModule], providers: [DomService], template: "", encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["@import\"../../../../table/css/table-classes.css\";@import\"../../../../table/css/table-tree.css\";@import\"../../../../table/css/table-color-vars.css\";@import\"../../../../table/css/table-color-classes.css\";\n"] }]
80
- }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: i1.DomService }], propDecorators: { tableReady: [{
200
+ }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: i1.DomService }], propDecorators: { licenseKey: [{
201
+ type: Input
202
+ }], tableReady: [{
81
203
  type: Output
82
204
  }], mouseMoved: [{
83
205
  type: Output
@@ -100,4 +222,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.2", ngImpor
100
222
  }], debounceMouseClickDelay: [{
101
223
  type: Input
102
224
  }] } });
103
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRhYmxlL3NyYy9saWIvYW5ndWxhci10YWJsZS90YWJsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBR04sTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4RCxPQUFPLEVBTUwsWUFBWSxFQUVaLFVBQVUsRUFDWCxNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7O0FBZW5ELE1BQU0sT0FBTyxjQUFjO0lBMENOO0lBQ0E7SUFDQTtJQUNBO0lBMUNuQixVQUFVLEdBQUcsSUFBSSxPQUFPLEVBQVksQ0FBQztJQUdyQyxVQUFVLEdBQTBCLElBQUksT0FBTyxFQUFnQixDQUFDO0lBR2hFLGFBQWEsR0FBMEIsSUFBSSxPQUFPLEVBQWdCLENBQUM7SUFHbkUsa0JBQWtCLEdBQTBCLElBQUksT0FBTyxFQUFnQixDQUFDO0lBR3hFLFdBQVcsR0FBMEIsSUFBSSxPQUFPLEVBQWdCLENBQUM7SUFHakUsWUFBWSxHQUEwQixJQUFJLE9BQU8sRUFBZ0IsQ0FBQztJQUdsRSxZQUFZLEdBQWdDLElBQUksT0FBTyxFQUFzQixDQUFDO0lBRzlFLGVBQWUsR0FBbUIsSUFBSSxPQUFPLEVBQVMsQ0FBQztJQUd2RCxVQUFVLENBQWdCO0lBRzFCLFlBQVksR0FBbUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUdsRCx1QkFB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LElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU07cUpBSy9DLFVBQVU7c0JBRFQsTUFBTTtnQkFJUCxVQUFVO3NCQURULE1BQU07Z0JBSVAsYUFBYTtzQkFEWixNQUFNO2dCQUlQLGtCQUFrQjtzQkFEakIsTUFBTTtnQkFJUCxXQUFXO3NCQURWLE1BQU07Z0JBSVAsWUFBWTtzQkFEWCxNQUFNO2dCQUlQLFlBQVk7c0JBRFgsTUFBTTtnQkFJUCxlQUFlO3NCQURkLE1BQU07Z0JBSVAsVUFBVTtzQkFEVCxLQUFLO2dCQUlOLFlBQVk7c0JBRFgsS0FBSztnQkFJTix1QkFBdUI7c0JBRHRCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBSZW5kZXJlcjIsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIFN1YmplY3QsIHRha2VXaGlsZSB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQge1xuICBFdmVudExpc3RlbmVySWYsXG4gIEdlTW9kZWxDaGFuZ2VFdmVudCxcbiAgR2VNb3VzZUV2ZW50LFxuICBUYWJsZUFwaSxcbiAgVGFibGVNb2RlbElmLFxuICBUYWJsZU9wdGlvbnMsXG4gIFRhYmxlT3B0aW9uc0lmLFxuICBUYWJsZVNjb3BlXG59IGZyb20gXCJAZ3VpZXhwZXJ0L3RhYmxlXCI7XG5pbXBvcnQgeyBEb21TZXJ2aWNlIH0gZnJvbSBcIi4vc2VydmljZS9kb20tc2VydmljZVwiO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJndWlleHBlcnQtdGFibGVcIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHByb3ZpZGVyczogW0RvbVNlcnZpY2VdLFxuICB0ZW1wbGF0ZTogXCJcIixcbiAgc3R5bGVVcmxzOiBbXG4gICAgXCIuL3RhYmxlLmNvbXBvbmVudC5jc3NcIlxuICBdLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBFdmVudExpc3RlbmVySWYge1xuXG4gIEBPdXRwdXQoKVxuICB0YWJsZVJlYWR5ID0gbmV3IFN1YmplY3Q8VGFibGVBcGk+KCk7XG5cbiAgQE91dHB1dCgpXG4gIG1vdXNlTW92ZWQ6IFN1YmplY3Q8R2VNb3VzZUV2ZW50PiA9IG5ldyBTdWJqZWN0PEdlTW91c2VFdmVudD4oKTtcblxuICBAT3V0cHV0KClcbiAgbW91c2VEcmFnZ2luZzogU3ViamVjdDxHZU1vdXNlRXZlbnQ+ID0gbmV3IFN1YmplY3Q8R2VNb3VzZUV2ZW50PigpO1xuXG4gIEBPdXRwdXQoKVxuICBtb3VzZURyYWdnaW5nRW5kZWQ6IFN1YmplY3Q8R2VNb3VzZUV2ZW50PiA9IG5ldyBTdWJqZWN0PEdlTW91c2VFdmVudD4oKTtcblxuICBAT3V0cHV0KClcbiAgY29udGV4dG1lbnU6IFN1YmplY3Q8R2VNb3VzZUV2ZW50PiA9IG5ldyBTdWJqZWN0PEdlTW91c2VFdmVudD4oKTtcblxuICBAT3V0cHV0KClcbiAgbW91c2VDbGlja2VkOiBTdWJqZWN0PEdlTW91c2VFdmVudD4gPSBuZXcgU3ViamVjdDxHZU1vdXNlRXZlbnQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIG1vZGVsQ2hhbmdlZDogU3ViamVjdDxHZU1vZGVsQ2hhbmdlRXZlbnQ+ID0gbmV3IFN1YmplY3Q8R2VNb2RlbENoYW5nZUV2ZW50PigpO1xuXG4gIEBPdXRwdXQoKVxuICBjaGVja2JveENoYW5nZWQ6IFN1YmplY3Q8YW55W10+ID0gbmV3IFN1YmplY3Q8YW55W10+KCk7XG5cbiAgQElucHV0KClcbiAgdGFibGVNb2RlbD86IFRhYmxlTW9kZWxJZjtcblxuICBASW5wdXQoKVxuICB0YWJsZU9wdGlvbnM6IFRhYmxlT3B0aW9uc0lmID0gbmV3IFRhYmxlT3B0aW9ucygpO1xuXG4gIEBJbnB1dCgpXG4gIGRlYm91bmNlTW91c2VDbGlja0RlbGF5OiBudW1iZXIgPSAxNTA7XG5cbiAgcHJpdmF0ZSBkZWJvdW5jZU1vdXNlQ2xpY2s6IFN1YmplY3Q8R2VNb3VzZUV2ZW50PiA9IG5ldyBTdWJqZWN0PEdlTW91c2VFdmVudD4oKTtcblxuICBwcml2YXRlIHRhYmxlU2NvcGU/OiBUYWJsZVNjb3BlO1xuICBwcml2YXRlIGFsaXZlID0gdHJ1ZTtcblxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSByZWFkb25seSB6b25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb21TZXJ2aWNlOiBEb21TZXJ2aWNlXG4gICkge1xuICB9XG5cblxuICBvbkNvbnRleHRtZW51KGV2dDogR2VNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5jb250ZXh0bWVudS5uZXh0KGV2dCk7XG4gIH1cblxuICBvbk1vdXNlTW92ZWQoZXZ0OiBHZU1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLm1vdXNlTW92ZWQubmV4dChldnQpO1xuICB9XG5cbiAgLy8gd2lsbCBiZSBjYWxsZWQgYnkgdGFibGUtc2NvcGU6XG4gIG9uTW91c2VDbGlja2VkKGV2dDogR2VNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5kZWJvdW5jZU1vdXNlQ2xpY2submV4dChldnQpO1xuICB9XG5cbiAgb25DaGVja2JveENoYW5nZWQoYXJyOiBhbnlbXSk6IHZvaWQge1xuICAgIHRoaXMuY2hlY2tib3hDaGFuZ2VkLm5leHQoYXJyKTtcbiAgfVxuXG4gIG9uTW9kZWxDaGFuZ2VkKGV2dDogR2VNb2RlbENoYW5nZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbENoYW5nZWQubmV4dChldnQpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0TW9kZWwoKTtcbiAgICB0aGlzLmRlYm91bmNlTW91c2VDbGlja1xuICAgICAgLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlTW91c2VDbGlja0RlbGF5KSxcbiAgICAgICAgdGFrZVdoaWxlKCgpID0+IHRoaXMuYWxpdmUpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4gdGhpcy5tb3VzZUNsaWNrZWQubmV4dCh2YWx1ZSkpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5hbGl2ZSA9IGZhbHNlO1xuICB9XG5cblxuICBvbk1vdXNlRHJhZ2dpbmcoZXZ0OiBHZU1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLm1vdXNlRHJhZ2dpbmcubmV4dChldnQpO1xuICB9XG5cbiAgb25Nb3VzZURyYWdnaW5nRW5kKGV2dDogR2VNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5tb3VzZURyYWdnaW5nRW5kZWQubmV4dChldnQpO1xuICB9XG5cblxuICBwcml2YXRlIGluaXRNb2RlbCgpIHtcbiAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIodGhpcy5pbml0LmJpbmQodGhpcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0KCkge1xuICAgIGlmICh0aGlzLnRhYmxlTW9kZWwpIHtcbiAgICAgIHRoaXMudGFibGVTY29wZSA9IG5ldyBUYWJsZVNjb3BlKFxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgdGhpcy50YWJsZU1vZGVsLCB0aGlzLmRvbVNlcnZpY2UsIHRoaXMudGFibGVPcHRpb25zLCB0aGlzXG4gICAgICApO1xuICAgICAgdGhpcy50YWJsZVNjb3BlLmZpcnN0SW5pdCgpO1xuICAgICAgdGhpcy50YWJsZVJlYWR5Lm5leHQodGhpcy50YWJsZVNjb3BlLmdldEFwaSgpKTtcbiAgICB9XG4gIH1cblxuXG59XG4iXX0=
225
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRhYmxlL3NyYy9saWIvYW5ndWxhci10YWJsZS90YWJsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBR04sTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4RCxPQUFPLEVBR1MsY0FBYyxFQUc1QixZQUFZLEVBRVosVUFBVSxFQUNYLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7QUFHbkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkJHO0FBYUgsTUFBTSxPQUFPLGNBQWM7SUF1SU47SUFDQTtJQUNBO0lBQ0E7SUF4SW5COzs7OztPQUtHO0lBQ0gsSUFDSSxVQUFVLENBQUMsR0FBVztRQUN4QixjQUFjLENBQUMsV0FBVyxFQUFFLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRDs7OztPQUlHO0lBRUgsVUFBVSxHQUFHLElBQUksT0FBTyxFQUFZLENBQUM7SUFFckM7Ozs7O09BS0c7SUFFSCxVQUFVLEdBQTBCLElBQUksT0FBTyxFQUFnQixDQUFDO0lBRWhFOzs7O09BSUc7SUFFSCxhQUFhLEdBQTBCLElBQUksT0FBTyxFQUFnQixDQUFDO0lBRW5FOzs7OztPQUtHO0lBRUgsa0JBQWtCLEdBQTBCLElBQUksT0FBTyxFQUFnQixDQUFDO0lBRXhF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SSxDQUN6RixDQUFDO1lBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7U0FDaEQ7SUFDSCxDQUFDO3VHQXhNVSxjQUFjOzJGQUFkLGNBQWMsdWRBUmQsQ0FBQyxVQUFVLENBQUMsMEJBQ2IsRUFBRSw2UkFGRixZQUFZOzsyRkFTWCxjQUFjO2tCQVoxQixTQUFTOytCQUNFLGlCQUFpQixjQUNmLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQyxhQUNaLENBQUMsVUFBVSxDQUFDLFlBQ2IsRUFBRSxpQkFJRyxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNO3FKQVczQyxVQUFVO3NCQURiLEtBQUs7Z0JBV04sVUFBVTtzQkFEVCxNQUFNO2dCQVVQLFVBQVU7c0JBRFQsTUFBTTtnQkFTUCxhQUFhO3NCQURaLE1BQU07Z0JBVVAsa0JBQWtCO3NCQURqQixNQUFNO2dCQWdCUCxXQUFXO3NCQURWLE1BQU07Z0JBU1AsWUFBWTtzQkFEWCxNQUFNO2dCQVNQLFlBQVk7c0JBRFgsTUFBTTtnQkFTUCxlQUFlO3NCQURkLE1BQU07Z0JBZVAsVUFBVTtzQkFEVCxLQUFLO2dCQW9CTixZQUFZO3NCQURYLEtBQUs7Z0JBU04sdUJBQXVCO3NCQUR0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUmVuZGVyZXIyLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBTdWJqZWN0LCB0YWtlV2hpbGUgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHtcbiAgRXZlbnRMaXN0ZW5lcklmLFxuICBHZU1vZGVsQ2hhbmdlRXZlbnQsXG4gIEdlTW91c2VFdmVudCwgTGljZW5zZU1hbmFnZXIsXG4gIFRhYmxlQXBpLFxuICBUYWJsZU1vZGVsSWYsXG4gIFRhYmxlT3B0aW9ucyxcbiAgVGFibGVPcHRpb25zSWYsXG4gIFRhYmxlU2NvcGVcbn0gZnJvbSAnQGd1aWV4cGVydC90YWJsZSc7XG5pbXBvcnQgeyBEb21TZXJ2aWNlIH0gZnJvbSBcIi4vc2VydmljZS9kb20tc2VydmljZVwiO1xuXG5cbi8qKlxuICogVGFibGVDb21wb25lbnQgaXMgYSByZXVzYWJsZSBHVUkgY29tcG9uZW50IHRoYXQgZGlzcGxheXMgdGFidWxhciBkYXRhLlxuICogSXQgcHJvdmlkZXMgdmFyaW91cyBldmVudCBvdXRwdXRzIGZvciB1c2VyIGludGVyYWN0aW9ucyBzdWNoIGFzIG1vdXNlIG1vdmVtZW50LCBkcmFnZ2luZywgY2xpY2tpbmcsIGV0Yy5cbiAqIEl0IHJlcXVpcmVzIGEgVGFibGVNb2RlbElmIGluc3RhbmNlIHRvIHNwZWNpZnkgdGhlIGRhdGEgYW5kIFRhYmxlT3B0aW9uc0lmIGluc3RhbmNlIHRvIGNvbmZpZ3VyZSB0aGUgYXBwZWFyYW5jZSBhbmQgYmVoYXZpb3IuXG4gKlxuICogQGV4YW1wbGVcbiAqIDxndWlleHBlcnQtdGFibGVcbiAqICAgW2xpY2Vuc2VLZXldPVwibGljZW5zZUtleVwiXG4gKiAgIFt0YWJsZU1vZGVsXT1cInRhYmxlTW9kZWxcIlxuICogICBbdGFibGVPcHRpb25zXT1cInRhYmxlT3B0aW9uc1wiXG4gKiAgIFtkZWJvdW5jZU1vdXNlQ2xpY2tEZWxheV09XCIxNTBcIlxuICogICAodGFibGVSZWFkeSk9XCJoYW5kbGVUYWJsZVJlYWR5KCRldmVudClcIlxuICogICAobW91c2VNb3ZlZCk9XCJoYW5kbGVNb3VzZU1vdmVkKCRldmVudClcIlxuICogICAobW91c2VEcmFnZ2luZyk9XCJoYW5kbGVNb3VzZURyYWdnaW5nKCRldmVudClcIlxuICogICAobW91c2VEcmFnZ2luZ0VuZGVkKT1cImhhbmRsZU1vdXNlRHJhZ2dpbmdFbmRlZCgkZXZlbnQpXCJcbiAqICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUNvbnRleHRNZW51KCRldmVudClcIlxuICogICAobW91c2VDbGlja2VkKT1cImhhbmRsZU1vdXNlQ2xpY2tlZCgkZXZlbnQpXCJcbiAqICAgKG1vZGVsQ2hhbmdlZCk9XCJoYW5kbGVNb2RlbENoYW5nZWQoJGV2ZW50KVwiXG4gKiAgIChjaGVja2JveENoYW5nZWQpPVwiaGFuZGxlQ2hlY2tib3hDaGFuZ2VkKCRldmVudClcIj5cbiAqIDwvZ3VpZXhwZXJ0LXRhYmxlPlxuICpcbiAqIEByZXF1aXJlcyBDb21tb25Nb2R1bGUgZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xuICogQHJlcXVpcmVzIERvbVNlcnZpY2VcbiAqXG4gKiBAcmVtYXJrc1xuICogVGhpcyBjb21wb25lbnQgaXMgZGVzaWduZWQgdG8gYmUgc3RhbmRhbG9uZSBhbmQgc2hvdWxkIG5vdCBoYXZlIGFueSBwYXJlbnQgY29tcG9uZW50cyB3cmFwcGluZyBpdC5cbiAqIEl0IHVzZXMgT25QdXNoIGNoYW5nZSBkZXRlY3Rpb24gc3RyYXRlZ3kgYW5kIGhhcyBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lIGVuY2Fwc3VsYXRpb24uXG4gKlxuICogQHB1YmxpY0FwaVxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiZ3VpZXhwZXJ0LXRhYmxlXCIsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBwcm92aWRlcnM6IFtEb21TZXJ2aWNlXSxcbiAgdGVtcGxhdGU6IFwiXCIsXG4gIHN0eWxlVXJsczogW1xuICAgIFwiLi90YWJsZS5jb21wb25lbnQuY3NzXCJcbiAgXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgRXZlbnRMaXN0ZW5lcklmIHtcblxuICAvKipcbiAgICogU2V0IHRoZSBsaWNlbnNlIGtleSBmb3IgdGhlIExpY2Vuc2VNYW5hZ2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGxpY2Vuc2Uga2V5IHRvIHNldC5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgbGljZW5zZUtleShrZXk6IHN0cmluZykge1xuICAgIExpY2Vuc2VNYW5hZ2VyLmdldEluc3RhbmNlKCkuc2V0TGljZW5zZUtleShrZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcHJlc2VudHMgYSBTdWJqZWN0IHZhcmlhYmxlIHVzZWQgdG8gbm90aWZ5IHN1YnNjcmliZXJzIHdoZW4gYSB0YWJsZSBpcyByZWFkeS5cbiAgICpcbiAgICogQHR5cGUge1N1YmplY3Q8VGFibGVBcGk+fVxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHRhYmxlUmVhZHkgPSBuZXcgU3ViamVjdDxUYWJsZUFwaT4oKTtcblxuICAvKipcbiAgICogUmVwcmVzZW50cyB0aGUgZXZlbnQgZW1pdHRlciBmb3IgdGhlIG1vdXNlIG1vdmVkIGV2ZW50LlxuICAgKlxuICAgKiBAdHlwZSB7U3ViamVjdDxHZU1vdXNlRXZlbnQ+fVxuICAgKiBAbWVtYmVyT2YgTXlBcHBsaWNhdGlvblxuICAgKi9cbiAgQE91dHB1dCgpXG4gIG1vdXNlTW92ZWQ6IFN1YmplY3Q8R2VNb3VzZUV2ZW50PiA9IG5ldyBTdWJqZWN0PEdlTW91c2VFdmVudD4oKTtcblxuICAvKipcbiAgICogUmVwcmVzZW50cyBhIHZhcmlhYmxlIGZvciB0cmFja2luZyBtb3VzZSBkcmFnZ2luZyBldmVudHMuXG4gICAqXG4gICAqIEB0eXBlIHtTdWJqZWN0PEdlTW91c2VFdmVudD59XG4gICAqL1xuICBAT3V0cHV0KClcbiAgbW91c2VEcmFnZ2luZzogU3ViamVjdDxHZU1vdXNlRXZlbnQ+ID0gbmV3IFN1YmplY3Q8R2VNb3VzZUV2ZW50PigpO1xuXG4gIC8qKlxuICAgKiBBbiBpbnN0YW5jZSBvZiBgU3ViamVjdGAgdGhhdCByZXByZXNlbnRzIHRoZSBldmVudCB3aGVuIG1vdXNlIGRyYWdnaW5nIGhhcyBlbmRlZC5cbiAgICpcbiAgICogQHR5cGUge1N1YmplY3Q8R2VNb3VzZUV2ZW50Pn1cbiAgICogQG1lbWJlcm9mIFtZb3VyIE9iamVjdC9DbGFzcy9Nb2R1bGVdXG4gICAqL1xuICBAT3V0cHV0KClcbiAgbW91c2VEcmFnZ2luZ0VuZGVkOiBTdWJqZWN0PEdlTW91c2VFdmVudD4gPSBuZXcgU3ViamVjdDxHZU1vdXNlRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIFJlcHJlc2VudHMgdGhlIGNvbnRleHQgbWVudSBldmVudCBzdWJqZWN0LlxuICAgKlxuICAgKiBAbmFtZSBjb250ZXh0bWVudVxuICAgKiBAdHlwZSB7U3ViamVjdDxHZU1vdXNlRXZlbnQ+fVxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIGBjb250ZXh0bWVudWAgdmFyaWFibGUgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGBTdWJqZWN0YCBjbGFzcyBmcm9tIHRoZSAncnhqcycgbGlicmFyeS5cbiAgICogSXQgaXMgdXNlZCBmb3IgYnJvYWRjYXN0aW5nIGNvbnRleHQgbWVudSBldmVudHMgb2YgdHlwZSBgR2VNb3VzZUV2ZW50YC5cbiAgICogT3RoZXIgcGFydHMgb2YgdGhlIGNvZGUgY2FuIHN1YnNjcmliZSB0byB0aGlzIHN1YmplY3QgdG8gYmUgbm90aWZpZWQgd2hlbiBhIGNvbnRleHQgbWVudSBldmVudCBvY2N1cnMuXG4gICAqIFRoZSBzdWJqZWN0IGFsbG93cyBtdWx0aXBsZSBvYnNlcnZlcnMgdG8gcmVjZWl2ZSB0aGUgZXZlbnQgc2ltdWx0YW5lb3VzbHkuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgY29udGV4dG1lbnU6IFN1YmplY3Q8R2VNb3VzZUV2ZW50PiA9IG5ldyBTdWJqZWN0PEdlTW91c2VFdmVudD4oKTtcblxuICAvKipcbiAgICogUmVwcmVzZW50cyBhIHN0cmVhbSBvZiBtb3VzZSBjbGljayBldmVudHMuXG4gICAqXG4gICAqIEB0eXBlIHtTdWJqZWN0PEdlTW91c2VFdmVudD59XG4gICAqL1xuICBAT3V0cHV0KClcbiAgbW91c2VDbGlja2VkOiBTdWJqZWN0PEdlTW91c2VFdmVudD4gPSBuZXcgU3ViamVjdDxHZU1vdXNlRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIEEgdmFyaWFibGUgcmVwcmVzZW50aW5nIGFuIG9ic2VydmFibGUgc3ViamVjdCBmb3IgbW9kZWwgY2hhbmdlIGV2ZW50cy5cbiAgICpcbiAgICogQHR5cGUge1N1YmplY3Q8R2VNb2RlbENoYW5nZUV2ZW50Pn1cbiAgICovXG4gIEBPdXRwdXQoKVxuICBtb2RlbENoYW5nZWQ6IFN1YmplY3Q8R2VNb2RlbENoYW5nZUV2ZW50PiA9IG5ldyBTdWJqZWN0PEdlTW9kZWxDaGFuZ2VFdmVudD4oKTtcblxuICAvKipcbiAgICogUmVwcmVzZW50cyBhIFN1YmplY3QgdGhhdCBlbWl0cyBhbiBhcnJheSBvZiBhbnkgdHlwZSB3aGVuIGEgY2hlY2tib3ggaXMgY2hhbmdlZC5cbiAgICpcbiAgICogQHR5cGUge1N1YmplY3Q8YW55W10+fVxuICAgKi9cbiAgQE91dHB1dCgpXG4gIGNoZWNrYm94Q2hhbmdlZDogU3ViamVjdDxhbnlbXT4gPSBuZXcgU3ViamVjdDxhbnlbXT4oKTtcblxuICAvKipcbiAgICogUmVwcmVzZW50cyBhIHRhYmxlIG1vZGVsLlxuICAgKlxuICAgKiBAdHlwZWRlZiB7b2JqZWN0fSBUYWJsZU1vZGVsXG4gICAqIEBwcm9wZXJ0eSB7YW55W119IFtkYXRhXSAtIEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGRhdGEgZm9yIHRoZSB0YWJsZSByb3dzLlxuICAgKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbaGVhZGVyc10gLSBBbiBhcnJheSBjb250YWluaW5nIHRoZSB0YWJsZSBjb2x1bW4gaGVhZGVycy5cbiAgICogQHByb3BlcnR5IHtmdW5jdGlvbn0gW3VwZGF0ZURhdGFdIC0gQSBmdW5jdGlvbiB0aGF0IHVwZGF0ZXMgdGhlIGRhdGEgaW4gdGhlIHRhYmxlLlxuICAgKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBbdXBkYXRlSGVhZGVyc10gLSBBIGZ1bmN0aW9uIHRoYXQgdXBkYXRlcyB0aGUgY29sdW1uIGhlYWRlcnMgaW4gdGhlIHRhYmxlLlxuICAgKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBbZ2V0RGF0YV0gLSBBIGZ1bmN0aW9uIHRoYXQgcmV0cmlldmVzIHRoZSBjdXJyZW50IGRhdGEgaW4gdGhlIHRhYmxlLlxuICAgKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBbZ2V0SGVhZGVyc10gLSBBIGZ1bmN0aW9uIHRoYXQgcmV0cmlldmVzIHRoZSBjb2x1bW4gaGVhZGVycyBpbiB0aGUgdGFibGUuXG4gICAqL1xuICBASW5wdXQoKVxuICB0YWJsZU1vZGVsPzogVGFibGVNb2RlbElmO1xuXG4gIC8qKlxuICAgKiBSZXByZXNlbnRzIHRoZSBvcHRpb25zIGZvciBjb25maWd1cmluZyBhIHRhYmxlLlxuICAgKlxuICAgKiBAdHlwZWRlZiB7T2JqZWN0fSBUYWJsZU9wdGlvbnNcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IFtvcHRpb24xXSAtIE9wdGlvbmFsIHByb3BlcnR5IHRvIGNvbmZpZ3VyZSBvcHRpb24xLlxuICAgKiBAcHJvcGVydHkge251bWJlcn0gW29wdGlvbjJdIC0gT3B0aW9uYWwgcHJvcGVydHkgdG8gY29uZmlndXJlIG9wdGlvbjIuXG4gICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW29wdGlvbjNdIC0gT3B0aW9uYWwgcHJvcGVydHkgdG8gY29uZmlndXJlIG9wdGlvbjMuXG4gICAqIEBwcm9wZXJ0eSB7YW55W119IFtvcHRpb240XSAtIE9wdGlvbmFsIHByb3BlcnR5IHRvIGNvbmZpZ3VyZSBvcHRpb240LlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCB0YWJsZU9wdGlvbnM6IFRhYmxlT3B0aW9ucyA9IG5ldyBUYWJsZU9wdGlvbnMoKTtcbiAgICogdGFibGVPcHRpb25zLm9wdGlvbjEgPSAndmFsdWUxJztcbiAgICogdGFibGVPcHRpb25zLm9wdGlvbjIgPSA1O1xuICAgKiB0YWJsZU9wdGlvbnMub3B0aW9uMyA9IHRydWU7XG4gICAqIHRhYmxlT3B0aW9ucy5vcHRpb240ID0gWzEsIDIsIDNdO1xuICAgKi9cbiAgQElucHV0KClcbiAgdGFibGVPcHRpb25zOiBUYWJsZU9wdGlvbnNJZiA9IG5ldyBUYWJsZU9wdGlvbnMoKTtcblxuICAvKipcbiAgICogVGhlIGRlYm91bmNlTW91c2VDbGlja0RlbGF5IHZhcmlhYmxlIHJlcHJlc2VudHMgdGhlIGRlbGF5IGluIG1pbGxpc2Vjb25kcyBmb3IgZGVib3VuY2luZyBtb3VzZSBjbGlja3MuXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBASW5wdXQoKVxuICBkZWJvdW5jZU1vdXNlQ2xpY2tEZWxheTogbnVtYmVyID0gMTUwO1xuXG5cbiAgcHJpdmF0ZSBkZWJvdW5jZU1vdXNlQ2xpY2s6IFN1YmplY3Q8R2VNb3VzZUV2ZW50PiA9IG5ldyBTdWJqZWN0PEdlTW91c2VFdmVudD4oKTtcblxuICBwcml2YXRlIHRhYmxlU2NvcGU/OiBUYWJsZVNjb3BlO1xuICBwcml2YXRlIGFsaXZlID0gdHJ1ZTtcblxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSByZWFkb25seSB6b25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb21TZXJ2aWNlOiBEb21TZXJ2aWNlXG4gICkge1xuICB9XG5cblxuICBvbkNvbnRleHRtZW51KGV2dDogR2VNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5jb250ZXh0bWVudS5uZXh0KGV2dCk7XG4gIH1cblxuICBvbk1vdXNlTW92ZWQoZXZ0OiBHZU1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLm1vdXNlTW92ZWQubmV4dChldnQpO1xuICB9XG5cbiAgLy8gd2lsbCBiZSBjYWxsZWQgYnkgdGFibGUtc2NvcGU6XG4gIG9uTW91c2VDbGlja2VkKGV2dDogR2VNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5kZWJvdW5jZU1vdXNlQ2xpY2submV4dChldnQpO1xuICB9XG5cbiAgb25DaGVja2JveENoYW5nZWQoYXJyOiBhbnlbXSk6IHZvaWQge1xuICAgIHRoaXMuY2hlY2tib3hDaGFuZ2VkLm5leHQoYXJyKTtcbiAgfVxuXG4gIG9uTW9kZWxDaGFuZ2VkKGV2dDogR2VNb2RlbENoYW5nZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbENoYW5nZWQubmV4dChldnQpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0TW9kZWwoKTtcbiAgICB0aGlzLmRlYm91bmNlTW91c2VDbGlja1xuICAgICAgLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlTW91c2VDbGlja0RlbGF5KSxcbiAgICAgICAgdGFrZVdoaWxlKCgpID0+IHRoaXMuYWxpdmUpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4gdGhpcy5tb3VzZUNsaWNrZWQubmV4dCh2YWx1ZSkpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5hbGl2ZSA9IGZhbHNlO1xuICB9XG5cblxuICBvbk1vdXNlRHJhZ2dpbmcoZXZ0OiBHZU1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLm1vdXNlRHJhZ2dpbmcubmV4dChldnQpO1xuICB9XG5cbiAgb25Nb3VzZURyYWdnaW5nRW5kKGV2dDogR2VNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5tb3VzZURyYWdnaW5nRW5kZWQubmV4dChldnQpO1xuICB9XG5cblxuICBwcml2YXRlIGluaXRNb2RlbCgpIHtcbiAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIodGhpcy5pbml0LmJpbmQodGhpcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0KCkge1xuICAgIGlmICh0aGlzLnRhYmxlTW9kZWwpIHtcbiAgICAgIHRoaXMudGFibGVTY29wZSA9IG5ldyBUYWJsZVNjb3BlKFxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgdGhpcy50YWJsZU1vZGVsLCB0aGlzLmRvbVNlcnZpY2UsIHRoaXMudGFibGVPcHRpb25zLCB0aGlzXG4gICAgICApO1xuICAgICAgdGhpcy50YWJsZVNjb3BlLmZpcnN0SW5pdCgpO1xuICAgICAgdGhpcy50YWJsZVJlYWR5Lm5leHQodGhpcy50YWJsZVNjb3BlLmdldEFwaSgpKTtcbiAgICB9XG4gIH1cblxuXG59XG4iXX0=
@@ -1,8 +1,8 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, Component, ViewEncapsulation, ChangeDetectionStrategy, Output, Input, EventEmitter, createComponent } from '@angular/core';
2
+ import { Injectable, Component, ViewEncapsulation, ChangeDetectionStrategy, Input, Output, EventEmitter, createComponent } from '@angular/core';
3
3
  import { CommonModule } from '@angular/common';
4
4
  import { Subject, debounceTime, takeWhile, takeUntil } from 'rxjs';
5
- import { TableOptions, TableScope } from '@guiexpert/table';
5
+ import { LicenseManager, TableOptions, TableScope } from '@guiexpert/table';
6
6
 
7
7
  class DomService {
8
8
  renderer;
@@ -59,21 +59,141 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.2", ngImpor
59
59
  }]
60
60
  }], ctorParameters: () => [{ type: i0.Renderer2 }] });
61
61
 
62
+ /**
63
+ * TableComponent is a reusable GUI component that displays tabular data.
64
+ * It provides various event outputs for user interactions such as mouse movement, dragging, clicking, etc.
65
+ * It requires a TableModelIf instance to specify the data and TableOptionsIf instance to configure the appearance and behavior.
66
+ *
67
+ * @example
68
+ * <guiexpert-table
69
+ * [licenseKey]="licenseKey"
70
+ * [tableModel]="tableModel"
71
+ * [tableOptions]="tableOptions"
72
+ * [debounceMouseClickDelay]="150"
73
+ * (tableReady)="handleTableReady($event)"
74
+ * (mouseMoved)="handleMouseMoved($event)"
75
+ * (mouseDragging)="handleMouseDragging($event)"
76
+ * (mouseDraggingEnded)="handleMouseDraggingEnded($event)"
77
+ * (contextmenu)="handleContextMenu($event)"
78
+ * (mouseClicked)="handleMouseClicked($event)"
79
+ * (modelChanged)="handleModelChanged($event)"
80
+ * (checkboxChanged)="handleCheckboxChanged($event)">
81
+ * </guiexpert-table>
82
+ *
83
+ * @requires CommonModule from '@angular/common'
84
+ * @requires DomService
85
+ *
86
+ * @remarks
87
+ * This component is designed to be standalone and should not have any parent components wrapping it.
88
+ * It uses OnPush change detection strategy and has ViewEncapsulation.None encapsulation.
89
+ *
90
+ * @publicApi
91
+ */
62
92
  class TableComponent {
63
93
  renderer;
64
94
  elementRef;
65
95
  zone;
66
96
  domService;
97
+ /**
98
+ * Set the license key for the LicenseManager.
99
+ *
100
+ * @param {string} key - The license key to set.
101
+ * @returns {void}
102
+ */
103
+ set licenseKey(key) {
104
+ LicenseManager.getInstance().setLicenseKey(key);
105
+ }
106
+ /**
107
+ * Represents a Subject variable used to notify subscribers when a table is ready.
108
+ *
109
+ * @type {Subject<TableApi>}
110
+ */
67
111
  tableReady = new Subject();
112
+ /**
113
+ * Represents the event emitter for the mouse moved event.
114
+ *
115
+ * @type {Subject<GeMouseEvent>}
116
+ * @memberOf MyApplication
117
+ */
68
118
  mouseMoved = new Subject();
119
+ /**
120
+ * Represents a variable for tracking mouse dragging events.
121
+ *
122
+ * @type {Subject<GeMouseEvent>}
123
+ */
69
124
  mouseDragging = new Subject();
125
+ /**
126
+ * An instance of `Subject` that represents the event when mouse dragging has ended.
127
+ *
128
+ * @type {Subject<GeMouseEvent>}
129
+ * @memberof [Your Object/Class/Module]
130
+ */
70
131
  mouseDraggingEnded = new Subject();
132
+ /**
133
+ * Represents the context menu event subject.
134
+ *
135
+ * @name contextmenu
136
+ * @type {Subject<GeMouseEvent>}
137
+ *
138
+ * @description
139
+ * The `contextmenu` variable is an instance of the `Subject` class from the 'rxjs' library.
140
+ * It is used for broadcasting context menu events of type `GeMouseEvent`.
141
+ * Other parts of the code can subscribe to this subject to be notified when a context menu event occurs.
142
+ * The subject allows multiple observers to receive the event simultaneously.
143
+ */
71
144
  contextmenu = new Subject();
145
+ /**
146
+ * Represents a stream of mouse click events.
147
+ *
148
+ * @type {Subject<GeMouseEvent>}
149
+ */
72
150
  mouseClicked = new Subject();
151
+ /**
152
+ * A variable representing an observable subject for model change events.
153
+ *
154
+ * @type {Subject<GeModelChangeEvent>}
155
+ */
73
156
  modelChanged = new Subject();
157
+ /**
158
+ * Represents a Subject that emits an array of any type when a checkbox is changed.
159
+ *
160
+ * @type {Subject<any[]>}
161
+ */
74
162
  checkboxChanged = new Subject();
163
+ /**
164
+ * Represents a table model.
165
+ *
166
+ * @typedef {object} TableModel
167
+ * @property {any[]} [data] - An array containing the data for the table rows.
168
+ * @property {string[]} [headers] - An array containing the table column headers.
169
+ * @property {function} [updateData] - A function that updates the data in the table.
170
+ * @property {function} [updateHeaders] - A function that updates the column headers in the table.
171
+ * @property {function} [getData] - A function that retrieves the current data in the table.
172
+ * @property {function} [getHeaders] - A function that retrieves the column headers in the table.
173
+ */
75
174
  tableModel;
175
+ /**
176
+ * Represents the options for configuring a table.
177
+ *
178
+ * @typedef {Object} TableOptions
179
+ * @property {string} [option1] - Optional property to configure option1.
180
+ * @property {number} [option2] - Optional property to configure option2.
181
+ * @property {boolean} [option3] - Optional property to configure option3.
182
+ * @property {any[]} [option4] - Optional property to configure option4.
183
+ *
184
+ * @example
185
+ * const tableOptions: TableOptions = new TableOptions();
186
+ * tableOptions.option1 = 'value1';
187
+ * tableOptions.option2 = 5;
188
+ * tableOptions.option3 = true;
189
+ * tableOptions.option4 = [1, 2, 3];
190
+ */
76
191
  tableOptions = new TableOptions();
192
+ /**
193
+ * The debounceMouseClickDelay variable represents the delay in milliseconds for debouncing mouse clicks.
194
+ *
195
+ * @type {number}
196
+ */
77
197
  debounceMouseClickDelay = 150;
78
198
  debounceMouseClick = new Subject();
79
199
  tableScope;
@@ -126,12 +246,14 @@ class TableComponent {
126
246
  }
127
247
  }
128
248
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: TableComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: DomService }], target: i0.ɵɵFactoryTarget.Component });
129
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.2", type: TableComponent, isStandalone: true, selector: "guiexpert-table", inputs: { tableModel: "tableModel", tableOptions: "tableOptions", debounceMouseClickDelay: "debounceMouseClickDelay" }, outputs: { tableReady: "tableReady", mouseMoved: "mouseMoved", mouseDragging: "mouseDragging", mouseDraggingEnded: "mouseDraggingEnded", contextmenu: "contextmenu", mouseClicked: "mouseClicked", modelChanged: "modelChanged", checkboxChanged: "checkboxChanged" }, providers: [DomService], ngImport: i0, template: "", isInline: true, styles: ["@import\"../../../../table/css/table-classes.css\";@import\"../../../../table/css/table-tree.css\";@import\"../../../../table/css/table-color-vars.css\";@import\"../../../../table/css/table-color-classes.css\";\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
249
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.2", type: TableComponent, isStandalone: true, selector: "guiexpert-table", inputs: { licenseKey: "licenseKey", tableModel: "tableModel", tableOptions: "tableOptions", debounceMouseClickDelay: "debounceMouseClickDelay" }, outputs: { tableReady: "tableReady", mouseMoved: "mouseMoved", mouseDragging: "mouseDragging", mouseDraggingEnded: "mouseDraggingEnded", contextmenu: "contextmenu", mouseClicked: "mouseClicked", modelChanged: "modelChanged", checkboxChanged: "checkboxChanged" }, providers: [DomService], ngImport: i0, template: "", isInline: true, styles: ["@import\"../../../../table/css/table-classes.css\";@import\"../../../../table/css/table-tree.css\";@import\"../../../../table/css/table-color-vars.css\";@import\"../../../../table/css/table-color-classes.css\";\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
130
250
  }
131
251
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: TableComponent, decorators: [{
132
252
  type: Component,
133
253
  args: [{ selector: "guiexpert-table", standalone: true, imports: [CommonModule], providers: [DomService], template: "", encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["@import\"../../../../table/css/table-classes.css\";@import\"../../../../table/css/table-tree.css\";@import\"../../../../table/css/table-color-vars.css\";@import\"../../../../table/css/table-color-classes.css\";\n"] }]
134
- }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: DomService }], propDecorators: { tableReady: [{
254
+ }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: DomService }], propDecorators: { licenseKey: [{
255
+ type: Input
256
+ }], tableReady: [{
135
257
  type: Output
136
258
  }], mouseMoved: [{
137
259
  type: Output
@@ -1 +1 @@
1
- {"version":3,"file":"guiexpert-angular-table.mjs","sources":["../../../../libs/angular-table/src/lib/angular-table/service/dom-service.ts","../../../../libs/angular-table/src/lib/angular-table/table.component.ts","../../../../libs/angular-table/src/lib/angular-table/service/renderer-wrapper.ts","../../../../libs/angular-table/src/lib/angular-table/service/render-wrapper-factory.ts","../../../../libs/angular-table/src/guiexpert-angular-table.ts"],"sourcesContent":["import {Injectable, Renderer2} from \"@angular/core\";\nimport {DomServiceIf} from \"@guiexpert/table\";\n\n\n@Injectable({\n providedIn: \"root\"\n})\nexport class DomService implements DomServiceIf {\n\n constructor(\n readonly renderer: Renderer2,\n ) {\n }\n\n setStyle(el: any, style: string, value: any): any {\n this.renderer.setStyle(el, style, value);\n return el;\n };\n\n\n appendText(parent: HTMLDivElement, text: string): HTMLDivElement {\n const div = this.renderer.createText(text);\n this.renderer.appendChild(parent, div);\n return div;\n }\n\n\n addClass(div: HTMLDivElement, clazz: string) {\n if (clazz.includes(' ')) {\n clazz.split(' ').forEach(c => this.renderer.addClass(div, c))\n } else {\n this.renderer.addClass(div, clazz);\n }\n return div;\n }\n\n removeClass(div: HTMLDivElement, clazz: string) {\n if (clazz.includes(\" \")) {\n clazz.split(\" \").forEach(c => div.classList.remove(c));\n } else {\n div.classList.remove(clazz);\n }\n return div;\n }\n\n appendChild(parent: HTMLElement, child: HTMLElement): void {\n this.renderer.appendChild(parent, child);\n }\n\n createElement<T>(name: string): T {\n return this.renderer.createElement(name);\n }\n\n createText(text: string): HTMLElement {\n return this.renderer.createText(text);\n }\n\n setAttribute(ele: HTMLElement, key: string, value: string): void {\n this.renderer.setAttribute(ele, key, value);\n }\n\n\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n ViewEncapsulation\n} from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { debounceTime, Subject, takeWhile } from \"rxjs\";\nimport {\n EventListenerIf,\n GeModelChangeEvent,\n GeMouseEvent,\n TableApi,\n TableModelIf,\n TableOptions,\n TableOptionsIf,\n TableScope\n} from \"@guiexpert/table\";\nimport { DomService } from \"./service/dom-service\";\n\n\n@Component({\n selector: \"guiexpert-table\",\n standalone: true,\n imports: [CommonModule],\n providers: [DomService],\n template: \"\",\n styleUrls: [\n \"./table.component.css\"\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TableComponent implements OnInit, OnDestroy, EventListenerIf {\n\n @Output()\n tableReady = new Subject<TableApi>();\n\n @Output()\n mouseMoved: Subject<GeMouseEvent> = new Subject<GeMouseEvent>();\n\n @Output()\n mouseDragging: Subject<GeMouseEvent> = new Subject<GeMouseEvent>();\n\n @Output()\n mouseDraggingEnded: Subject<GeMouseEvent> = new Subject<GeMouseEvent>();\n\n @Output()\n contextmenu: Subject<GeMouseEvent> = new Subject<GeMouseEvent>();\n\n @Output()\n mouseClicked: Subject<GeMouseEvent> = new Subject<GeMouseEvent>();\n\n @Output()\n modelChanged: Subject<GeModelChangeEvent> = new Subject<GeModelChangeEvent>();\n\n @Output()\n checkboxChanged: Subject<any[]> = new Subject<any[]>();\n\n @Input()\n tableModel?: TableModelIf;\n\n @Input()\n tableOptions: TableOptionsIf = new TableOptions();\n\n @Input()\n debounceMouseClickDelay: number = 150;\n\n private debounceMouseClick: Subject<GeMouseEvent> = new Subject<GeMouseEvent>();\n\n private tableScope?: TableScope;\n private alive = true;\n\n\n constructor(\n private readonly renderer: Renderer2,\n private readonly elementRef: ElementRef,\n private readonly zone: NgZone,\n private readonly domService: DomService\n ) {\n }\n\n\n onContextmenu(evt: GeMouseEvent): void {\n this.contextmenu.next(evt);\n }\n\n onMouseMoved(evt: GeMouseEvent): void {\n this.mouseMoved.next(evt);\n }\n\n // will be called by table-scope:\n onMouseClicked(evt: GeMouseEvent): void {\n this.debounceMouseClick.next(evt);\n }\n\n onCheckboxChanged(arr: any[]): void {\n this.checkboxChanged.next(arr);\n }\n\n onModelChanged(evt: GeModelChangeEvent): void {\n this.modelChanged.next(evt);\n }\n\n ngOnInit(): void {\n this.initModel();\n this.debounceMouseClick\n .pipe(\n debounceTime(this.debounceMouseClickDelay),\n takeWhile(() => this.alive)\n )\n .subscribe((value) => this.mouseClicked.next(value));\n }\n\n ngOnDestroy(): void {\n this.alive = false;\n }\n\n\n onMouseDragging(evt: GeMouseEvent): void {\n this.mouseDragging.next(evt);\n }\n\n onMouseDraggingEnd(evt: GeMouseEvent): void {\n this.mouseDraggingEnded.next(evt);\n }\n\n\n private initModel() {\n this.zone.runOutsideAngular(this.init.bind(this));\n }\n\n private init() {\n if (this.tableModel) {\n this.tableScope = new TableScope(\n this.elementRef.nativeElement, this.tableModel, this.domService, this.tableOptions, this\n );\n this.tableScope.firstInit();\n this.tableReady.next(this.tableScope.getApi());\n }\n }\n\n\n}\n","import {AreaIdent, AreaModelIf, CellRendererIf, DomServiceIf, RendererCleanupFnType} from \"@guiexpert/table\";\nimport {\n ApplicationRef,\n ChangeDetectorRef,\n createComponent,\n EnvironmentInjector,\n EventEmitter,\n NgZone,\n Type\n} from \"@angular/core\";\nimport {ComponentRendererIf} from \"../component-renderer.if\";\nimport {Subject, takeUntil} from \"rxjs\";\nimport {Observable} from \"rxjs/internal/Observable\";\n\n\nexport class RendererWrapper<T extends ComponentRendererIf<T>>\n implements CellRendererIf {\n\n public readonly event$ = new EventEmitter<any>();\n private readonly closed$ = new Subject<number>();\n\n constructor(\n private componentType: Type<ComponentRendererIf<T>>,\n private appRef: ApplicationRef,\n private injector: EnvironmentInjector,\n private cdr: ChangeDetectorRef,\n private readonly zone: NgZone\n ) {\n }\n\n render(\n cellDiv: HTMLDivElement,\n rowIndex: number,\n columnIndex: number,\n areaIdent: AreaIdent,\n areaModel: AreaModelIf,\n cellValue: any,\n domService: DomServiceIf): RendererCleanupFnType | undefined {\n\n const componentRef = createComponent(this.componentType, {\n environmentInjector: this.injector\n });\n componentRef.instance.setData(\n rowIndex,\n columnIndex,\n areaIdent,\n areaModel,\n cellValue);\n\n\n const emmiterNames = Object.keys(componentRef.instance)\n .filter(key => {\n // @ts-ignore\n const t = componentRef.instance[key];\n return t['subscribe']\n });\n\n // @ts-ignore\n const observables: Observable[] = (emmiterNames.map(key => (componentRef.instance[key] as Observable)));\n observables.forEach(obs => obs\n .pipe(\n takeUntil(this.closed$)\n )\n .subscribe((event: any) => {\n console.info('RendererWrapper event >', event); // TODO hmm?\n this.event$.next(event);\n })\n );\n\n cellDiv.appendChild(componentRef.location.nativeElement);\n\n this.appRef.attachView(componentRef.hostView);\n\n this.zone.run(() => {\n this.cdr.detectChanges();\n });\n\n return () => {\n // clean up:\n this.appRef.detachView(componentRef.hostView);\n this.closed$.next(Date.now());\n };\n }\n\n\n}\n","import {ApplicationRef, ChangeDetectorRef, EnvironmentInjector, Injectable, NgZone, Type} from \"@angular/core\";\nimport {ComponentRendererIf} from \"../component-renderer.if\";\nimport {RendererWrapper} from \"./renderer-wrapper\";\n\n@Injectable({\n providedIn: \"root\"\n})\nexport class RenderWrapperFactory {\n\n constructor(\n private readonly appRef: ApplicationRef,\n private readonly injector: EnvironmentInjector,\n private readonly zone: NgZone\n ) {\n }\n\n create<T>(\n componentType: Type<ComponentRendererIf<T>>,\n cdr: ChangeDetectorRef\n ) {\n return new RendererWrapper(componentType, this.appRef, this.injector, cdr, this.zone);\n }\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.DomService"],"mappings":";;;;;;MAOa,UAAU,CAAA;AAGV,IAAA,QAAA,CAAA;AADX,IAAA,WAAA,CACW,QAAmB,EAAA;QAAnB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAW;KAE7B;AAED,IAAA,QAAQ,CAAC,EAAO,EAAE,KAAa,EAAE,KAAU,EAAA;QACzC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AACzC,QAAA,OAAO,EAAE,CAAC;KACX;;IAGD,UAAU,CAAC,MAAsB,EAAE,IAAY,EAAA;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACvC,QAAA,OAAO,GAAG,CAAC;KACZ;IAGD,QAAQ,CAAC,GAAmB,EAAE,KAAa,EAAA;AACzC,QAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACvB,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;AAC9D,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACpC,SAAA;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;IAED,WAAW,CAAC,GAAmB,EAAE,KAAa,EAAA;AAC5C,QAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACvB,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACxD,SAAA;AAAM,aAAA;AACL,YAAA,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC7B,SAAA;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;IAED,WAAW,CAAC,MAAmB,EAAE,KAAkB,EAAA;QACjD,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;KAC1C;AAED,IAAA,aAAa,CAAI,IAAY,EAAA;QAC3B,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;KAC1C;AAED,IAAA,UAAU,CAAC,IAAY,EAAA;QACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;KACvC;AAED,IAAA,YAAY,CAAC,GAAgB,EAAE,GAAW,EAAE,KAAa,EAAA;QACvD,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;KAC7C;uGApDU,UAAU,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAV,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,cAFT,MAAM,EAAA,CAAA,CAAA;;2FAEP,UAAU,EAAA,UAAA,EAAA,CAAA;kBAHtB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCiCY,cAAc,CAAA;AA0CN,IAAA,QAAA,CAAA;AACA,IAAA,UAAA,CAAA;AACA,IAAA,IAAA,CAAA;AACA,IAAA,UAAA,CAAA;AA1CnB,IAAA,UAAU,GAAG,IAAI,OAAO,EAAY,CAAC;AAGrC,IAAA,UAAU,GAA0B,IAAI,OAAO,EAAgB,CAAC;AAGhE,IAAA,aAAa,GAA0B,IAAI,OAAO,EAAgB,CAAC;AAGnE,IAAA,kBAAkB,GAA0B,IAAI,OAAO,EAAgB,CAAC;AAGxE,IAAA,WAAW,GAA0B,IAAI,OAAO,EAAgB,CAAC;AAGjE,IAAA,YAAY,GAA0B,IAAI,OAAO,EAAgB,CAAC;AAGlE,IAAA,YAAY,GAAgC,IAAI,OAAO,EAAsB,CAAC;AAG9E,IAAA,eAAe,GAAmB,IAAI,OAAO,EAAS,CAAC;AAGvD,IAAA,UAAU,CAAgB;AAG1B,IAAA,YAAY,GAAmB,IAAI,YAAY,EAAE,CAAC;IAGlD,uBAAuB,GAAW,GAAG,CAAC;AAE9B,IAAA,kBAAkB,GAA0B,IAAI,OAAO,EAAgB,CAAC;AAExE,IAAA,UAAU,CAAc;IACxB,KAAK,GAAG,IAAI,CAAC;AAGrB,IAAA,WAAA,CACmB,QAAmB,EACnB,UAAsB,EACtB,IAAY,EACZ,UAAsB,EAAA;QAHtB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAW;QACnB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;QACtB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAQ;QACZ,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;KAExC;AAGD,IAAA,aAAa,CAAC,GAAiB,EAAA;AAC7B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAC5B;AAED,IAAA,YAAY,CAAC,GAAiB,EAAA;AAC5B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAC3B;;AAGD,IAAA,cAAc,CAAC,GAAiB,EAAA;AAC9B,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACnC;AAED,IAAA,iBAAiB,CAAC,GAAU,EAAA;AAC1B,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAChC;AAED,IAAA,cAAc,CAAC,GAAuB,EAAA;AACpC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAC7B;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,QAAA,IAAI,CAAC,kBAAkB;AACpB,aAAA,IAAI,CACH,YAAY,CAAC,IAAI,CAAC,uBAAuB,CAAC,EAC1C,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAC5B;AACA,aAAA,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;KACxD;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;AAGD,IAAA,eAAe,CAAC,GAAiB,EAAA;AAC/B,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAC9B;AAED,IAAA,kBAAkB,CAAC,GAAiB,EAAA;AAClC,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACnC;IAGO,SAAS,GAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;KACnD;IAEO,IAAI,GAAA;QACV,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAC9B,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CACzF,CAAC;AACF,YAAA,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;AAChD,SAAA;KACF;uGA3GU,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,6bARd,CAAC,UAAU,CAAC,EACb,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAE,6RAFF,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FASX,cAAc,EAAA,UAAA,EAAA,CAAA;kBAZ1B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,cACf,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,aACZ,CAAC,UAAU,CAAC,EACb,QAAA,EAAA,EAAE,iBAIG,iBAAiB,CAAC,IAAI,EACpB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,sNAAA,CAAA,EAAA,CAAA;kJAK/C,UAAU,EAAA,CAAA;sBADT,MAAM;gBAIP,UAAU,EAAA,CAAA;sBADT,MAAM;gBAIP,aAAa,EAAA,CAAA;sBADZ,MAAM;gBAIP,kBAAkB,EAAA,CAAA;sBADjB,MAAM;gBAIP,WAAW,EAAA,CAAA;sBADV,MAAM;gBAIP,YAAY,EAAA,CAAA;sBADX,MAAM;gBAIP,YAAY,EAAA,CAAA;sBADX,MAAM;gBAIP,eAAe,EAAA,CAAA;sBADd,MAAM;gBAIP,UAAU,EAAA,CAAA;sBADT,KAAK;gBAIN,YAAY,EAAA,CAAA;sBADX,KAAK;gBAIN,uBAAuB,EAAA,CAAA;sBADtB,KAAK;;;MCxDK,eAAe,CAAA;AAOhB,IAAA,aAAA,CAAA;AACA,IAAA,MAAA,CAAA;AACA,IAAA,QAAA,CAAA;AACA,IAAA,GAAA,CAAA;AACS,IAAA,IAAA,CAAA;AARH,IAAA,MAAM,GAAG,IAAI,YAAY,EAAO,CAAC;AAChC,IAAA,OAAO,GAAG,IAAI,OAAO,EAAU,CAAC;IAEjD,WACU,CAAA,aAA2C,EAC3C,MAAsB,EACtB,QAA6B,EAC7B,GAAsB,EACb,IAAY,EAAA;QAJrB,IAAa,CAAA,aAAA,GAAb,aAAa,CAA8B;QAC3C,IAAM,CAAA,MAAA,GAAN,MAAM,CAAgB;QACtB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAqB;QAC7B,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QACb,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAQ;KAE9B;AAED,IAAA,MAAM,CACJ,OAAuB,EACvB,QAAgB,EAChB,WAAmB,EACnB,SAAoB,EACpB,SAAsB,EACtB,SAAc,EACd,UAAwB,EAAA;AAExB,QAAA,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,CAAC,aAAa,EAAE;YACvD,mBAAmB,EAAE,IAAI,CAAC,QAAQ;AACnC,SAAA,CAAC,CAAC;AACH,QAAA,YAAY,CAAC,QAAQ,CAAC,OAAO,CAC3B,QAAQ,EACR,WAAW,EACX,SAAS,EACT,SAAS,EACT,SAAS,CAAC,CAAC;QAGb,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;aACpD,MAAM,CAAC,GAAG,IAAG;;YAEZ,MAAM,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACrC,YAAA,OAAO,CAAC,CAAC,WAAW,CAAC,CAAA;AACvB,SAAC,CAAC,CAAC;;AAGL,QAAA,MAAM,WAAW,IAAkB,YAAY,CAAC,GAAG,CAAC,GAAG,IAAK,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAgB,CAAC,CAAC,CAAC;AACxG,QAAA,WAAW,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG;AAC3B,aAAA,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CACxB;AACA,aAAA,SAAS,CAAC,CAAC,KAAU,KAAI;YACxB,OAAO,CAAC,IAAI,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;AAC/C,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACzB,CAAC,CACH,CAAC;QAEF,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QAEzD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AAE9C,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;AAC3B,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,MAAK;;YAEV,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YAC9C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AAChC,SAAC,CAAC;KACH;AAGF;;MC9EY,oBAAoB,CAAA;AAGZ,IAAA,MAAA,CAAA;AACA,IAAA,QAAA,CAAA;AACA,IAAA,IAAA,CAAA;AAHnB,IAAA,WAAA,CACmB,MAAsB,EACtB,QAA6B,EAC7B,IAAY,EAAA;QAFZ,IAAM,CAAA,MAAA,GAAN,MAAM,CAAgB;QACtB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAqB;QAC7B,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAQ;KAE9B;IAED,MAAM,CACJ,aAA2C,EAC3C,GAAsB,EAAA;AAEtB,QAAA,OAAO,IAAI,eAAe,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;KACvF;uGAdU,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAApB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cAFnB,MAAM,EAAA,CAAA,CAAA;;2FAEP,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ACND;;AAEG;;;;"}
1
+ {"version":3,"file":"guiexpert-angular-table.mjs","sources":["../../../../libs/angular-table/src/lib/angular-table/service/dom-service.ts","../../../../libs/angular-table/src/lib/angular-table/table.component.ts","../../../../libs/angular-table/src/lib/angular-table/service/renderer-wrapper.ts","../../../../libs/angular-table/src/lib/angular-table/service/render-wrapper-factory.ts","../../../../libs/angular-table/src/guiexpert-angular-table.ts"],"sourcesContent":["import {Injectable, Renderer2} from \"@angular/core\";\nimport {DomServiceIf} from \"@guiexpert/table\";\n\n\n@Injectable({\n providedIn: \"root\"\n})\nexport class DomService implements DomServiceIf {\n\n constructor(\n readonly renderer: Renderer2,\n ) {\n }\n\n setStyle(el: any, style: string, value: any): any {\n this.renderer.setStyle(el, style, value);\n return el;\n };\n\n\n appendText(parent: HTMLDivElement, text: string): HTMLDivElement {\n const div = this.renderer.createText(text);\n this.renderer.appendChild(parent, div);\n return div;\n }\n\n\n addClass(div: HTMLDivElement, clazz: string) {\n if (clazz.includes(' ')) {\n clazz.split(' ').forEach(c => this.renderer.addClass(div, c))\n } else {\n this.renderer.addClass(div, clazz);\n }\n return div;\n }\n\n removeClass(div: HTMLDivElement, clazz: string) {\n if (clazz.includes(\" \")) {\n clazz.split(\" \").forEach(c => div.classList.remove(c));\n } else {\n div.classList.remove(clazz);\n }\n return div;\n }\n\n appendChild(parent: HTMLElement, child: HTMLElement): void {\n this.renderer.appendChild(parent, child);\n }\n\n createElement<T>(name: string): T {\n return this.renderer.createElement(name);\n }\n\n createText(text: string): HTMLElement {\n return this.renderer.createText(text);\n }\n\n setAttribute(ele: HTMLElement, key: string, value: string): void {\n this.renderer.setAttribute(ele, key, value);\n }\n\n\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n ViewEncapsulation\n} from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { debounceTime, Subject, takeWhile } from \"rxjs\";\nimport {\n EventListenerIf,\n GeModelChangeEvent,\n GeMouseEvent, LicenseManager,\n TableApi,\n TableModelIf,\n TableOptions,\n TableOptionsIf,\n TableScope\n} from '@guiexpert/table';\nimport { DomService } from \"./service/dom-service\";\n\n\n/**\n * TableComponent is a reusable GUI component that displays tabular data.\n * It provides various event outputs for user interactions such as mouse movement, dragging, clicking, etc.\n * It requires a TableModelIf instance to specify the data and TableOptionsIf instance to configure the appearance and behavior.\n *\n * @example\n * <guiexpert-table\n * [licenseKey]=\"licenseKey\"\n * [tableModel]=\"tableModel\"\n * [tableOptions]=\"tableOptions\"\n * [debounceMouseClickDelay]=\"150\"\n * (tableReady)=\"handleTableReady($event)\"\n * (mouseMoved)=\"handleMouseMoved($event)\"\n * (mouseDragging)=\"handleMouseDragging($event)\"\n * (mouseDraggingEnded)=\"handleMouseDraggingEnded($event)\"\n * (contextmenu)=\"handleContextMenu($event)\"\n * (mouseClicked)=\"handleMouseClicked($event)\"\n * (modelChanged)=\"handleModelChanged($event)\"\n * (checkboxChanged)=\"handleCheckboxChanged($event)\">\n * </guiexpert-table>\n *\n * @requires CommonModule from '@angular/common'\n * @requires DomService\n *\n * @remarks\n * This component is designed to be standalone and should not have any parent components wrapping it.\n * It uses OnPush change detection strategy and has ViewEncapsulation.None encapsulation.\n *\n * @publicApi\n */\n@Component({\n selector: \"guiexpert-table\",\n standalone: true,\n imports: [CommonModule],\n providers: [DomService],\n template: \"\",\n styleUrls: [\n \"./table.component.css\"\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TableComponent implements OnInit, OnDestroy, EventListenerIf {\n\n /**\n * Set the license key for the LicenseManager.\n *\n * @param {string} key - The license key to set.\n * @returns {void}\n */\n @Input()\n set licenseKey(key: string) {\n LicenseManager.getInstance().setLicenseKey(key);\n }\n\n /**\n * Represents a Subject variable used to notify subscribers when a table is ready.\n *\n * @type {Subject<TableApi>}\n */\n @Output()\n tableReady = new Subject<TableApi>();\n\n /**\n * Represents the event emitter for the mouse moved event.\n *\n * @type {Subject<GeMouseEvent>}\n * @memberOf MyApplication\n */\n @Output()\n mouseMoved: Subject<GeMouseEvent> = new Subject<GeMouseEvent>();\n\n /**\n * Represents a variable for tracking mouse dragging events.\n *\n * @type {Subject<GeMouseEvent>}\n */\n @Output()\n mouseDragging: Subject<GeMouseEvent> = new Subject<GeMouseEvent>();\n\n /**\n * An instance of `Subject` that represents the event when mouse dragging has ended.\n *\n * @type {Subject<GeMouseEvent>}\n * @memberof [Your Object/Class/Module]\n */\n @Output()\n mouseDraggingEnded: Subject<GeMouseEvent> = new Subject<GeMouseEvent>();\n\n /**\n * Represents the context menu event subject.\n *\n * @name contextmenu\n * @type {Subject<GeMouseEvent>}\n *\n * @description\n * The `contextmenu` variable is an instance of the `Subject` class from the 'rxjs' library.\n * It is used for broadcasting context menu events of type `GeMouseEvent`.\n * Other parts of the code can subscribe to this subject to be notified when a context menu event occurs.\n * The subject allows multiple observers to receive the event simultaneously.\n */\n @Output()\n contextmenu: Subject<GeMouseEvent> = new Subject<GeMouseEvent>();\n\n /**\n * Represents a stream of mouse click events.\n *\n * @type {Subject<GeMouseEvent>}\n */\n @Output()\n mouseClicked: Subject<GeMouseEvent> = new Subject<GeMouseEvent>();\n\n /**\n * A variable representing an observable subject for model change events.\n *\n * @type {Subject<GeModelChangeEvent>}\n */\n @Output()\n modelChanged: Subject<GeModelChangeEvent> = new Subject<GeModelChangeEvent>();\n\n /**\n * Represents a Subject that emits an array of any type when a checkbox is changed.\n *\n * @type {Subject<any[]>}\n */\n @Output()\n checkboxChanged: Subject<any[]> = new Subject<any[]>();\n\n /**\n * Represents a table model.\n *\n * @typedef {object} TableModel\n * @property {any[]} [data] - An array containing the data for the table rows.\n * @property {string[]} [headers] - An array containing the table column headers.\n * @property {function} [updateData] - A function that updates the data in the table.\n * @property {function} [updateHeaders] - A function that updates the column headers in the table.\n * @property {function} [getData] - A function that retrieves the current data in the table.\n * @property {function} [getHeaders] - A function that retrieves the column headers in the table.\n */\n @Input()\n tableModel?: TableModelIf;\n\n /**\n * Represents the options for configuring a table.\n *\n * @typedef {Object} TableOptions\n * @property {string} [option1] - Optional property to configure option1.\n * @property {number} [option2] - Optional property to configure option2.\n * @property {boolean} [option3] - Optional property to configure option3.\n * @property {any[]} [option4] - Optional property to configure option4.\n *\n * @example\n * const tableOptions: TableOptions = new TableOptions();\n * tableOptions.option1 = 'value1';\n * tableOptions.option2 = 5;\n * tableOptions.option3 = true;\n * tableOptions.option4 = [1, 2, 3];\n */\n @Input()\n tableOptions: TableOptionsIf = new TableOptions();\n\n /**\n * The debounceMouseClickDelay variable represents the delay in milliseconds for debouncing mouse clicks.\n *\n * @type {number}\n */\n @Input()\n debounceMouseClickDelay: number = 150;\n\n\n private debounceMouseClick: Subject<GeMouseEvent> = new Subject<GeMouseEvent>();\n\n private tableScope?: TableScope;\n private alive = true;\n\n\n constructor(\n private readonly renderer: Renderer2,\n private readonly elementRef: ElementRef,\n private readonly zone: NgZone,\n private readonly domService: DomService\n ) {\n }\n\n\n onContextmenu(evt: GeMouseEvent): void {\n this.contextmenu.next(evt);\n }\n\n onMouseMoved(evt: GeMouseEvent): void {\n this.mouseMoved.next(evt);\n }\n\n // will be called by table-scope:\n onMouseClicked(evt: GeMouseEvent): void {\n this.debounceMouseClick.next(evt);\n }\n\n onCheckboxChanged(arr: any[]): void {\n this.checkboxChanged.next(arr);\n }\n\n onModelChanged(evt: GeModelChangeEvent): void {\n this.modelChanged.next(evt);\n }\n\n ngOnInit(): void {\n this.initModel();\n this.debounceMouseClick\n .pipe(\n debounceTime(this.debounceMouseClickDelay),\n takeWhile(() => this.alive)\n )\n .subscribe((value) => this.mouseClicked.next(value));\n }\n\n ngOnDestroy(): void {\n this.alive = false;\n }\n\n\n onMouseDragging(evt: GeMouseEvent): void {\n this.mouseDragging.next(evt);\n }\n\n onMouseDraggingEnd(evt: GeMouseEvent): void {\n this.mouseDraggingEnded.next(evt);\n }\n\n\n private initModel() {\n this.zone.runOutsideAngular(this.init.bind(this));\n }\n\n private init() {\n if (this.tableModel) {\n this.tableScope = new TableScope(\n this.elementRef.nativeElement, this.tableModel, this.domService, this.tableOptions, this\n );\n this.tableScope.firstInit();\n this.tableReady.next(this.tableScope.getApi());\n }\n }\n\n\n}\n","import {AreaIdent, AreaModelIf, CellRendererIf, DomServiceIf, RendererCleanupFnType} from \"@guiexpert/table\";\nimport {\n ApplicationRef,\n ChangeDetectorRef,\n createComponent,\n EnvironmentInjector,\n EventEmitter,\n NgZone,\n Type\n} from \"@angular/core\";\nimport {ComponentRendererIf} from \"../component-renderer.if\";\nimport {Subject, takeUntil} from \"rxjs\";\nimport {Observable} from \"rxjs/internal/Observable\";\n\n\nexport class RendererWrapper<T extends ComponentRendererIf<T>>\n implements CellRendererIf {\n\n public readonly event$ = new EventEmitter<any>();\n private readonly closed$ = new Subject<number>();\n\n constructor(\n private componentType: Type<ComponentRendererIf<T>>,\n private appRef: ApplicationRef,\n private injector: EnvironmentInjector,\n private cdr: ChangeDetectorRef,\n private readonly zone: NgZone\n ) {\n }\n\n render(\n cellDiv: HTMLDivElement,\n rowIndex: number,\n columnIndex: number,\n areaIdent: AreaIdent,\n areaModel: AreaModelIf,\n cellValue: any,\n domService: DomServiceIf): RendererCleanupFnType | undefined {\n\n const componentRef = createComponent(this.componentType, {\n environmentInjector: this.injector\n });\n componentRef.instance.setData(\n rowIndex,\n columnIndex,\n areaIdent,\n areaModel,\n cellValue);\n\n\n const emmiterNames = Object.keys(componentRef.instance)\n .filter(key => {\n // @ts-ignore\n const t = componentRef.instance[key];\n return t['subscribe']\n });\n\n // @ts-ignore\n const observables: Observable[] = (emmiterNames.map(key => (componentRef.instance[key] as Observable)));\n observables.forEach(obs => obs\n .pipe(\n takeUntil(this.closed$)\n )\n .subscribe((event: any) => {\n console.info('RendererWrapper event >', event); // TODO hmm?\n this.event$.next(event);\n })\n );\n\n cellDiv.appendChild(componentRef.location.nativeElement);\n\n this.appRef.attachView(componentRef.hostView);\n\n this.zone.run(() => {\n this.cdr.detectChanges();\n });\n\n return () => {\n // clean up:\n this.appRef.detachView(componentRef.hostView);\n this.closed$.next(Date.now());\n };\n }\n\n\n}\n","import {ApplicationRef, ChangeDetectorRef, EnvironmentInjector, Injectable, NgZone, Type} from \"@angular/core\";\nimport {ComponentRendererIf} from \"../component-renderer.if\";\nimport {RendererWrapper} from \"./renderer-wrapper\";\n\n@Injectable({\n providedIn: \"root\"\n})\nexport class RenderWrapperFactory {\n\n constructor(\n private readonly appRef: ApplicationRef,\n private readonly injector: EnvironmentInjector,\n private readonly zone: NgZone\n ) {\n }\n\n create<T>(\n componentType: Type<ComponentRendererIf<T>>,\n cdr: ChangeDetectorRef\n ) {\n return new RendererWrapper(componentType, this.appRef, this.injector, cdr, this.zone);\n }\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.DomService"],"mappings":"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"}
@@ -1,23 +1,141 @@
1
1
  import { ElementRef, NgZone, OnDestroy, OnInit, Renderer2 } from "@angular/core";
2
2
  import { Subject } from "rxjs";
3
- import { EventListenerIf, GeModelChangeEvent, GeMouseEvent, TableApi, TableModelIf, TableOptionsIf } from "@guiexpert/table";
3
+ import { EventListenerIf, GeModelChangeEvent, GeMouseEvent, TableApi, TableModelIf, TableOptionsIf } from '@guiexpert/table';
4
4
  import { DomService } from "./service/dom-service";
5
5
  import * as i0 from "@angular/core";
6
+ /**
7
+ * TableComponent is a reusable GUI component that displays tabular data.
8
+ * It provides various event outputs for user interactions such as mouse movement, dragging, clicking, etc.
9
+ * It requires a TableModelIf instance to specify the data and TableOptionsIf instance to configure the appearance and behavior.
10
+ *
11
+ * @example
12
+ * <guiexpert-table
13
+ * [licenseKey]="licenseKey"
14
+ * [tableModel]="tableModel"
15
+ * [tableOptions]="tableOptions"
16
+ * [debounceMouseClickDelay]="150"
17
+ * (tableReady)="handleTableReady($event)"
18
+ * (mouseMoved)="handleMouseMoved($event)"
19
+ * (mouseDragging)="handleMouseDragging($event)"
20
+ * (mouseDraggingEnded)="handleMouseDraggingEnded($event)"
21
+ * (contextmenu)="handleContextMenu($event)"
22
+ * (mouseClicked)="handleMouseClicked($event)"
23
+ * (modelChanged)="handleModelChanged($event)"
24
+ * (checkboxChanged)="handleCheckboxChanged($event)">
25
+ * </guiexpert-table>
26
+ *
27
+ * @requires CommonModule from '@angular/common'
28
+ * @requires DomService
29
+ *
30
+ * @remarks
31
+ * This component is designed to be standalone and should not have any parent components wrapping it.
32
+ * It uses OnPush change detection strategy and has ViewEncapsulation.None encapsulation.
33
+ *
34
+ * @publicApi
35
+ */
6
36
  export declare class TableComponent implements OnInit, OnDestroy, EventListenerIf {
7
37
  private readonly renderer;
8
38
  private readonly elementRef;
9
39
  private readonly zone;
10
40
  private readonly domService;
41
+ /**
42
+ * Set the license key for the LicenseManager.
43
+ *
44
+ * @param {string} key - The license key to set.
45
+ * @returns {void}
46
+ */
47
+ set licenseKey(key: string);
48
+ /**
49
+ * Represents a Subject variable used to notify subscribers when a table is ready.
50
+ *
51
+ * @type {Subject<TableApi>}
52
+ */
11
53
  tableReady: Subject<TableApi>;
54
+ /**
55
+ * Represents the event emitter for the mouse moved event.
56
+ *
57
+ * @type {Subject<GeMouseEvent>}
58
+ * @memberOf MyApplication
59
+ */
12
60
  mouseMoved: Subject<GeMouseEvent>;
61
+ /**
62
+ * Represents a variable for tracking mouse dragging events.
63
+ *
64
+ * @type {Subject<GeMouseEvent>}
65
+ */
13
66
  mouseDragging: Subject<GeMouseEvent>;
67
+ /**
68
+ * An instance of `Subject` that represents the event when mouse dragging has ended.
69
+ *
70
+ * @type {Subject<GeMouseEvent>}
71
+ * @memberof [Your Object/Class/Module]
72
+ */
14
73
  mouseDraggingEnded: Subject<GeMouseEvent>;
74
+ /**
75
+ * Represents the context menu event subject.
76
+ *
77
+ * @name contextmenu
78
+ * @type {Subject<GeMouseEvent>}
79
+ *
80
+ * @description
81
+ * The `contextmenu` variable is an instance of the `Subject` class from the 'rxjs' library.
82
+ * It is used for broadcasting context menu events of type `GeMouseEvent`.
83
+ * Other parts of the code can subscribe to this subject to be notified when a context menu event occurs.
84
+ * The subject allows multiple observers to receive the event simultaneously.
85
+ */
15
86
  contextmenu: Subject<GeMouseEvent>;
87
+ /**
88
+ * Represents a stream of mouse click events.
89
+ *
90
+ * @type {Subject<GeMouseEvent>}
91
+ */
16
92
  mouseClicked: Subject<GeMouseEvent>;
93
+ /**
94
+ * A variable representing an observable subject for model change events.
95
+ *
96
+ * @type {Subject<GeModelChangeEvent>}
97
+ */
17
98
  modelChanged: Subject<GeModelChangeEvent>;
99
+ /**
100
+ * Represents a Subject that emits an array of any type when a checkbox is changed.
101
+ *
102
+ * @type {Subject<any[]>}
103
+ */
18
104
  checkboxChanged: Subject<any[]>;
105
+ /**
106
+ * Represents a table model.
107
+ *
108
+ * @typedef {object} TableModel
109
+ * @property {any[]} [data] - An array containing the data for the table rows.
110
+ * @property {string[]} [headers] - An array containing the table column headers.
111
+ * @property {function} [updateData] - A function that updates the data in the table.
112
+ * @property {function} [updateHeaders] - A function that updates the column headers in the table.
113
+ * @property {function} [getData] - A function that retrieves the current data in the table.
114
+ * @property {function} [getHeaders] - A function that retrieves the column headers in the table.
115
+ */
19
116
  tableModel?: TableModelIf;
117
+ /**
118
+ * Represents the options for configuring a table.
119
+ *
120
+ * @typedef {Object} TableOptions
121
+ * @property {string} [option1] - Optional property to configure option1.
122
+ * @property {number} [option2] - Optional property to configure option2.
123
+ * @property {boolean} [option3] - Optional property to configure option3.
124
+ * @property {any[]} [option4] - Optional property to configure option4.
125
+ *
126
+ * @example
127
+ * const tableOptions: TableOptions = new TableOptions();
128
+ * tableOptions.option1 = 'value1';
129
+ * tableOptions.option2 = 5;
130
+ * tableOptions.option3 = true;
131
+ * tableOptions.option4 = [1, 2, 3];
132
+ */
20
133
  tableOptions: TableOptionsIf;
134
+ /**
135
+ * The debounceMouseClickDelay variable represents the delay in milliseconds for debouncing mouse clicks.
136
+ *
137
+ * @type {number}
138
+ */
21
139
  debounceMouseClickDelay: number;
22
140
  private debounceMouseClick;
23
141
  private tableScope?;
@@ -35,5 +153,5 @@ export declare class TableComponent implements OnInit, OnDestroy, EventListenerI
35
153
  private initModel;
36
154
  private init;
37
155
  static ɵfac: i0.ɵɵFactoryDeclaration<TableComponent, never>;
38
- static ɵcmp: i0.ɵɵComponentDeclaration<TableComponent, "guiexpert-table", never, { "tableModel": { "alias": "tableModel"; "required": false; }; "tableOptions": { "alias": "tableOptions"; "required": false; }; "debounceMouseClickDelay": { "alias": "debounceMouseClickDelay"; "required": false; }; }, { "tableReady": "tableReady"; "mouseMoved": "mouseMoved"; "mouseDragging": "mouseDragging"; "mouseDraggingEnded": "mouseDraggingEnded"; "contextmenu": "contextmenu"; "mouseClicked": "mouseClicked"; "modelChanged": "modelChanged"; "checkboxChanged": "checkboxChanged"; }, never, never, true, never>;
156
+ static ɵcmp: i0.ɵɵComponentDeclaration<TableComponent, "guiexpert-table", never, { "licenseKey": { "alias": "licenseKey"; "required": false; }; "tableModel": { "alias": "tableModel"; "required": false; }; "tableOptions": { "alias": "tableOptions"; "required": false; }; "debounceMouseClickDelay": { "alias": "debounceMouseClickDelay"; "required": false; }; }, { "tableReady": "tableReady"; "mouseMoved": "mouseMoved"; "mouseDragging": "mouseDragging"; "mouseDraggingEnded": "mouseDraggingEnded"; "contextmenu": "contextmenu"; "mouseClicked": "mouseClicked"; "modelChanged": "modelChanged"; "checkboxChanged": "checkboxChanged"; }, never, never, true, never>;
39
157
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@guiexpert/angular-table",
3
- "version": "16.0.7",
3
+ "version": "16.0.9",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^16.0.0",
6
6
  "@angular/core": "^16.0.0"