@handsontable/angular-wrapper 0.0.0-next-2645bc1-20260401 → 0.0.0-next-e3f6190-20260401
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/handsontable-angular-wrapper.mjs +5 -0
- package/esm2022/lib/editor/base-editor-adapter.mjs +180 -0
- package/esm2022/lib/editor/custom-editor-placeholder.component.mjs +89 -0
- package/esm2022/lib/editor/editor-factory-adapter.mjs +140 -0
- package/esm2022/lib/editor/hot-cell-editor-advanced.component.mjs +92 -0
- package/esm2022/lib/editor/hot-cell-editor.component.mjs +95 -0
- package/esm2022/lib/editor/models/factory-editor-properties.mjs +2 -0
- package/esm2022/lib/editor/models/keyboard-shortcut-config.mjs +2 -0
- package/esm2022/lib/hot-table.component.mjs +157 -0
- package/esm2022/lib/hot-table.module.mjs +29 -0
- package/esm2022/lib/models/column-settings.mjs +2 -0
- package/esm2022/lib/models/grid-settings.mjs +2 -0
- package/esm2022/lib/renderer/hot-cell-renderer-advanced.component.mjs +55 -0
- package/esm2022/lib/renderer/hot-cell-renderer.component.mjs +55 -0
- package/esm2022/lib/renderer/hot-dynamic-renderer-component.service.mjs +203 -0
- package/esm2022/lib/services/hot-global-config.service.mjs +107 -0
- package/esm2022/lib/services/hot-settings-resolver.service.mjs +170 -0
- package/esm2022/public-api.mjs +14 -0
- package/fesm2022/handsontable-angular-wrapper.mjs +41 -43
- package/fesm2022/handsontable-angular-wrapper.mjs.map +1 -1
- package/lib/editor/hot-cell-editor-advanced.component.d.ts +1 -1
- package/lib/editor/hot-cell-editor.component.d.ts +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZHNvbnRhYmxlLWFuZ3VsYXItd3JhcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2hvdC10YWJsZS9zcmMvaGFuZHNvbnRhYmxlLWFuZ3VsYXItd3JhcHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import Handsontable from 'handsontable/base';
|
|
2
|
+
import { createComponent, } from '@angular/core';
|
|
3
|
+
import { CustomEditorPlaceholderComponent } from './custom-editor-placeholder.component';
|
|
4
|
+
import { take } from 'rxjs/operators';
|
|
5
|
+
/**
|
|
6
|
+
* Adapter for BaseEditor from Handsontable.
|
|
7
|
+
*/
|
|
8
|
+
export class BaseEditorAdapter extends Handsontable.editors.BaseEditor {
|
|
9
|
+
/** Reference to the custom editor component. */
|
|
10
|
+
_componentRef;
|
|
11
|
+
/** Reference to the editor placeholder component. */
|
|
12
|
+
_editorPlaceHolderRef;
|
|
13
|
+
/** Flag indicating whether the placeholder is ready. */
|
|
14
|
+
_isPlaceholderReady = false;
|
|
15
|
+
/** Subscription for the finish edit event. */
|
|
16
|
+
_finishEditSubscription;
|
|
17
|
+
/** Subscription for the cancel edit event. */
|
|
18
|
+
_cancelEditSubscription;
|
|
19
|
+
/**
|
|
20
|
+
* Creates an instance of BaseEditorAdapter.
|
|
21
|
+
* @param instance The Handsontable instance.
|
|
22
|
+
*/
|
|
23
|
+
constructor(instance) {
|
|
24
|
+
super(instance);
|
|
25
|
+
this.hot.addHook('afterRowResize', this.onAfterRowResize.bind(this));
|
|
26
|
+
this.hot.addHook('afterColumnResize', this.onAfterColumnResize.bind(this));
|
|
27
|
+
this.hot.addHook('afterDestroy', this.onAfterDestroy.bind(this));
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Prepares the editor for editing. Parameters are passed from Handsontable.
|
|
31
|
+
* @param row The row index.
|
|
32
|
+
* @param column The column index.
|
|
33
|
+
* @param prop The property name.
|
|
34
|
+
* @param TD The table cell element.
|
|
35
|
+
* @param originalValue The original value of the cell.
|
|
36
|
+
* @param cellProperties The cell properties.
|
|
37
|
+
*/
|
|
38
|
+
prepare(row, column, prop, TD, originalValue, cellProperties) {
|
|
39
|
+
if (!this.isOpened()) {
|
|
40
|
+
super.prepare(row, column, prop, TD, originalValue, cellProperties);
|
|
41
|
+
const columnMeta = this.hot.getColumnMeta(column);
|
|
42
|
+
if (!this._isPlaceholderReady) {
|
|
43
|
+
this.createEditorPlaceholder(columnMeta._environmentInjector);
|
|
44
|
+
this._isPlaceholderReady = true;
|
|
45
|
+
}
|
|
46
|
+
this._componentRef = columnMeta._editorComponentReference;
|
|
47
|
+
if (this._finishEditSubscription) {
|
|
48
|
+
this._finishEditSubscription.unsubscribe();
|
|
49
|
+
this._finishEditSubscription = undefined;
|
|
50
|
+
}
|
|
51
|
+
if (this._cancelEditSubscription) {
|
|
52
|
+
this._cancelEditSubscription.unsubscribe();
|
|
53
|
+
this._cancelEditSubscription = undefined;
|
|
54
|
+
}
|
|
55
|
+
this._finishEditSubscription = this._componentRef.instance.finishEdit
|
|
56
|
+
.pipe(take(1))
|
|
57
|
+
.subscribe(() => {
|
|
58
|
+
this.finishEditing();
|
|
59
|
+
});
|
|
60
|
+
this._cancelEditSubscription = this._componentRef.instance.cancelEdit
|
|
61
|
+
.pipe(take(1))
|
|
62
|
+
.subscribe(() => {
|
|
63
|
+
this.cancelChanges();
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Closes the editor. This event is triggered by Handsontable.
|
|
69
|
+
*/
|
|
70
|
+
close() {
|
|
71
|
+
if (this.isOpened()) {
|
|
72
|
+
this.resetEditorState();
|
|
73
|
+
this._editorPlaceHolderRef.changeDetectorRef.detectChanges();
|
|
74
|
+
this._editorPlaceHolderRef.instance.detachEditor();
|
|
75
|
+
this._componentRef.instance.onClose();
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Focuses the editor. This event is triggered by Handsontable.
|
|
80
|
+
*/
|
|
81
|
+
focus() {
|
|
82
|
+
this._componentRef.instance.onFocus();
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Gets the value from the editor.
|
|
86
|
+
* @returns The value from the editor.
|
|
87
|
+
*/
|
|
88
|
+
getValue() {
|
|
89
|
+
return this._componentRef.instance?.getValue();
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Opens the editor. This event is triggered by Handsontable.
|
|
93
|
+
* When opening, we set the shortcut context to 'editor'.
|
|
94
|
+
* This allows the built-in keyboard shortcuts to operate within the editor.
|
|
95
|
+
* @param event The event that triggered the opening of the editor.
|
|
96
|
+
* @remarks When entering edit mode using double-click, keyboard shortcuts do not work.
|
|
97
|
+
*/
|
|
98
|
+
open(event) {
|
|
99
|
+
this.hot.getShortcutManager().setActiveContextName('editor');
|
|
100
|
+
this.applyPropsToEditor();
|
|
101
|
+
this._componentRef.instance.onOpen(event);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Sets the value for the custom editor.
|
|
105
|
+
* @param newValue The value to set.
|
|
106
|
+
*/
|
|
107
|
+
setValue(newValue) {
|
|
108
|
+
this._componentRef.instance?.setValue(newValue);
|
|
109
|
+
this._componentRef.changeDetectorRef.detectChanges();
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Applies properties to the custom editor and editor placeholder.
|
|
113
|
+
*/
|
|
114
|
+
applyPropsToEditor() {
|
|
115
|
+
const rect = this.getEditedCellRect();
|
|
116
|
+
if (!this.isInFullEditMode()) {
|
|
117
|
+
this._componentRef.instance.setValue(null);
|
|
118
|
+
}
|
|
119
|
+
this._componentRef.setInput('originalValue', this.originalValue);
|
|
120
|
+
this._componentRef.setInput('row', this.row);
|
|
121
|
+
this._componentRef.setInput('column', this.col);
|
|
122
|
+
this._componentRef.setInput('prop', this.prop);
|
|
123
|
+
this._componentRef.setInput('cellProperties', this.cellProperties);
|
|
124
|
+
this._editorPlaceHolderRef.setInput('top', rect.top);
|
|
125
|
+
this._editorPlaceHolderRef.setInput('left', rect.start);
|
|
126
|
+
this._editorPlaceHolderRef.setInput('height', rect.height);
|
|
127
|
+
this._editorPlaceHolderRef.setInput('width', rect.width);
|
|
128
|
+
this._editorPlaceHolderRef.setInput('isVisible', true);
|
|
129
|
+
this._editorPlaceHolderRef.setInput('componentRef', this._componentRef);
|
|
130
|
+
this._editorPlaceHolderRef.changeDetectorRef.detectChanges();
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Creates the editor placeholder and append it to hot rootElement.
|
|
134
|
+
* @param injector The environment injector.
|
|
135
|
+
*/
|
|
136
|
+
createEditorPlaceholder(injector) {
|
|
137
|
+
this._editorPlaceHolderRef = createComponent(CustomEditorPlaceholderComponent, {
|
|
138
|
+
environmentInjector: injector,
|
|
139
|
+
});
|
|
140
|
+
this.hot.rootElement.appendChild(this._editorPlaceHolderRef.location.nativeElement);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Handles the after column resize event.
|
|
144
|
+
* Helps adjust the editor size to the column size and update its position.
|
|
145
|
+
*/
|
|
146
|
+
onAfterColumnResize() {
|
|
147
|
+
if (this.isOpened()) {
|
|
148
|
+
this.applyPropsToEditor();
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Handles the after row resize event.
|
|
153
|
+
* Helps adjust the editor size to the column size and update its position.
|
|
154
|
+
*/
|
|
155
|
+
onAfterRowResize() {
|
|
156
|
+
if (this.isOpened()) {
|
|
157
|
+
this.applyPropsToEditor();
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Handles the after destroy event.
|
|
162
|
+
*/
|
|
163
|
+
onAfterDestroy() {
|
|
164
|
+
this._editorPlaceHolderRef?.destroy();
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Resets the editor placeholder state.
|
|
168
|
+
* We need to reset the editor placeholder state because we use it
|
|
169
|
+
* to store multiple references to the custom editor.
|
|
170
|
+
*/
|
|
171
|
+
resetEditorState() {
|
|
172
|
+
this._editorPlaceHolderRef.setInput('top', undefined);
|
|
173
|
+
this._editorPlaceHolderRef.setInput('left', undefined);
|
|
174
|
+
this._editorPlaceHolderRef.setInput('height', undefined);
|
|
175
|
+
this._editorPlaceHolderRef.setInput('width', undefined);
|
|
176
|
+
this._editorPlaceHolderRef.setInput('isVisible', false);
|
|
177
|
+
this._editorPlaceHolderRef.setInput('componentRef', undefined);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1lZGl0b3ItYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2hvdC10YWJsZS9zcmMvbGliL2VkaXRvci9iYXNlLWVkaXRvci1hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sWUFBWSxNQUFNLG1CQUFtQixDQUFDO0FBQzdDLE9BQU8sRUFFTCxlQUFlLEdBRWhCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBSXpGLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0Qzs7R0FFRztBQUNILE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVU7SUFDcEUsZ0RBQWdEO0lBQ3hDLGFBQWEsQ0FBNkM7SUFFbEUscURBQXFEO0lBQzdDLHFCQUFxQixDQUFpRDtJQUU5RSx3REFBd0Q7SUFDaEQsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0lBRXBDLDhDQUE4QztJQUN0Qyx1QkFBdUIsQ0FBZ0I7SUFFL0MsOENBQThDO0lBQ3RDLHVCQUF1QixDQUFnQjtJQUUvQzs7O09BR0c7SUFDSCxZQUFZLFFBQTJCO1FBQ3JDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVoQixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJ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QUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDakUsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEhhbmRzb250YWJsZSBmcm9tICdoYW5kc29udGFibGUvYmFzZSc7XG5pbXBvcnQge1xuICBDb21wb25lbnRSZWYsXG4gIGNyZWF0ZUNvbXBvbmVudCxcbiAgRW52aXJvbm1lbnRJbmplY3Rvcixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDdXN0b21FZGl0b3JQbGFjZWhvbGRlckNvbXBvbmVudCB9IGZyb20gJy4vY3VzdG9tLWVkaXRvci1wbGFjZWhvbGRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29sdW1uU2V0dGluZ3NJbnRlcm5hbCB9IGZyb20gJy4uL21vZGVscy9jb2x1bW4tc2V0dGluZ3MnO1xuaW1wb3J0IHsgSG90Q2VsbEVkaXRvckNvbXBvbmVudCB9IGZyb20gJy4vaG90LWNlbGwtZWRpdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbi8qKlxuICogQWRhcHRlciBmb3IgQmFzZUVkaXRvciBmcm9tIEhhbmRzb250YWJsZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEJhc2VFZGl0b3JBZGFwdGVyIGV4dGVuZHMgSGFuZHNvbnRhYmxlLmVkaXRvcnMuQmFzZUVkaXRvciB7XG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIGN1c3RvbSBlZGl0b3IgY29tcG9uZW50LiAqL1xuICBwcml2YXRlIF9jb21wb25lbnRSZWY/OiBDb21wb25lbnRSZWY8SG90Q2VsbEVkaXRvckNvbXBvbmVudDxhbnk+PjtcblxuICAvKiogUmVmZXJlbmNlIHRvIHRoZSBlZGl0b3IgcGxhY2Vob2xkZXIgY29tcG9uZW50LiAqL1xuICBwcml2YXRlIF9lZGl0b3JQbGFjZUhvbGRlclJlZjogQ29tcG9uZW50UmVmPEN1c3RvbUVkaXRvclBsYWNlaG9sZGVyQ29tcG9uZW50PjtcblxuICAvKiogRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHBsYWNlaG9sZGVyIGlzIHJlYWR5LiAqL1xuICBwcml2YXRlIF9pc1BsYWNlaG9sZGVyUmVhZHkgPSBmYWxzZTtcblxuICAvKiogU3Vic2NyaXB0aW9uIGZvciB0aGUgZmluaXNoIGVkaXQgZXZlbnQuICovXG4gIHByaXZhdGUgX2ZpbmlzaEVkaXRTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgLyoqIFN1YnNjcmlwdGlvbiBmb3IgdGhlIGNhbmNlbCBlZGl0IGV2ZW50LiAqL1xuICBwcml2YXRlIF9jYW5jZWxFZGl0U3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIEJhc2VFZGl0b3JBZGFwdGVyLlxuICAgKiBAcGFyYW0gaW5zdGFuY2UgVGhlIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGluc3RhbmNlOiBIYW5kc29udGFibGUuQ29yZSkge1xuICAgIHN1cGVyKGluc3RhbmNlKTtcblxuICAgIHRoaXMuaG90LmFkZEhvb2soJ2FmdGVyUm93UmVzaXplJywgdGhpcy5vbkFmdGVyUm93UmVzaXplLmJpbmQodGhpcykpO1xuICAgIHRoaXMuaG90LmFkZEhvb2soJ2FmdGVyQ29sdW1uUmVzaXplJywgdGhpcy5vbkFmdGVyQ29sdW1uUmVzaXplLmJpbmQodGhpcykpO1xuICAgIHRoaXMuaG90LmFkZEhvb2soJ2FmdGVyRGVzdHJveScsIHRoaXMub25BZnRlckRlc3Ryb3kuYmluZCh0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZXMgdGhlIGVkaXRvciBmb3IgZWRpdGluZy4gUGFyYW1ldGVycyBhcmUgcGFzc2VkIGZyb20gSGFuZHNvbnRhYmxlLlxuICAgKiBAcGFyYW0gcm93IFRoZSByb3cgaW5kZXguXG4gICAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBpbmRleC5cbiAgICogQHBhcmFtIHByb3AgVGhlIHByb3BlcnR5IG5hbWUuXG4gICAqIEBwYXJhbSBURCBUaGUgdGFibGUgY2VsbCBlbGVtZW50LlxuICAgKiBAcGFyYW0gb3JpZ2luYWxWYWx1ZSBUaGUgb3JpZ2luYWwgdmFsdWUgb2YgdGhlIGNlbGwuXG4gICAqIEBwYXJhbSBjZWxsUHJvcGVydGllcyBUaGUgY2VsbCBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgb3ZlcnJpZGUgcHJlcGFyZShcbiAgICByb3c6IG51bWJlcixcbiAgICBjb2x1bW46IG51bWJlcixcbiAgICBwcm9wOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgVEQ6IEhUTUxUYWJsZUNlbGxFbGVtZW50LFxuICAgIG9yaWdpbmFsVmFsdWU6IGFueSxcbiAgICBjZWxsUHJvcGVydGllczogSGFuZHNvbnRhYmxlLkNlbGxQcm9wZXJ0aWVzXG4gICk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc09wZW5lZCgpKSB7XG4gICAgICBzdXBlci5wcmVwYXJlKHJvdywgY29sdW1uLCBwcm9wLCBURCwgb3JpZ2luYWxWYWx1ZSwgY2VsbFByb3BlcnRpZXMpO1xuICAgICAgY29uc3QgY29sdW1uTWV0YTogQ29sdW1uU2V0dGluZ3NJbnRlcm5hbCA9IHRoaXMuaG90LmdldENvbHVtbk1ldGEoXG4gICAgICAgIGNvbHVtblxuICAgICAgKSBhcyBDb2x1bW5TZXR0aW5nc0ludGVybmFsO1xuXG4gICAgICBpZiAoIXRoaXMuX2lzUGxhY2Vob2xkZXJSZWFkeSkge1xuICAgICAgICB0aGlzLmNyZWF0ZUVkaXRvclBsYWNlaG9sZGVyKGNvbHVtbk1ldGEuX2Vudmlyb25tZW50SW5qZWN0b3IpO1xuICAgICAgICB0aGlzLl9pc1BsYWNlaG9sZGVyUmVhZHkgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jb21wb25lbnRSZWYgPSBjb2x1bW5NZXRhLl9lZGl0b3JDb21wb25lbnRSZWZlcmVuY2U7XG5cbiAgICAgIGlmICh0aGlzLl9maW5pc2hFZGl0U3Vic2NyaXB0aW9uKSB7XG4gICAgICAgIHRoaXMuX2ZpbmlzaEVkaXRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5fZmluaXNoRWRpdFN1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2NhbmNlbEVkaXRTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgdGhpcy5fY2FuY2VsRWRpdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLl9jYW5jZWxFZGl0U3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9maW5pc2hFZGl0U3Vic2NyaXB0aW9uID0gdGhpcy5fY29tcG9uZW50UmVmLmluc3RhbmNlLmZpbmlzaEVkaXRcbiAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5maW5pc2hFZGl0aW5nKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICB0aGlzLl9jYW5jZWxFZGl0U3Vic2NyaXB0aW9uID0gdGhpcy5fY29tcG9uZW50UmVmLmluc3RhbmNlLmNhbmNlbEVkaXRcbiAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jYW5jZWxDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIGVkaXRvci4gVGhpcyBldmVudCBpcyB0cmlnZ2VyZWQgYnkgSGFuZHNvbnRhYmxlLlxuICAgKi9cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNPcGVuZWQoKSkge1xuICAgICAgdGhpcy5yZXNldEVkaXRvclN0YXRlKCk7XG4gICAgICB0aGlzLl9lZGl0b3JQbGFjZUhvbGRlclJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB0aGlzLl9lZGl0b3JQbGFjZUhvbGRlclJlZi5pbnN0YW5jZS5kZXRhY2hFZGl0b3IoKTtcbiAgICAgIHRoaXMuX2NvbXBvbmVudFJlZi5pbnN0YW5jZS5vbkNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZvY3VzZXMgdGhlIGVkaXRvci4gVGhpcyBldmVudCBpcyB0cmlnZ2VyZWQgYnkgSGFuZHNvbnRhYmxlLlxuICAgKi9cbiAgZm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5fY29tcG9uZW50UmVmLmluc3RhbmNlLm9uRm9jdXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB2YWx1ZSBmcm9tIHRoZSBlZGl0b3IuXG4gICAqIEByZXR1cm5zIFRoZSB2YWx1ZSBmcm9tIHRoZSBlZGl0b3IuXG4gICAqL1xuICBnZXRWYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9jb21wb25lbnRSZWYuaW5zdGFuY2U/LmdldFZhbHVlKCk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgdGhlIGVkaXRvci4gVGhpcyBldmVudCBpcyB0cmlnZ2VyZWQgYnkgSGFuZHNvbnRhYmxlLlxuICAgKiBXaGVuIG9wZW5pbmcsIHdlIHNldCB0aGUgc2hvcnRjdXQgY29udGV4dCB0byAnZWRpdG9yJy5cbiAgICogVGhpcyBhbGxvd3MgdGhlIGJ1aWx0LWluIGtleWJvYXJkIHNob3J0Y3V0cyB0byBvcGVyYXRlIHdpdGhpbiB0aGUgZWRpdG9yLlxuICAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IHRoYXQgdHJpZ2dlcmVkIHRoZSBvcGVuaW5nIG9mIHRoZSBlZGl0b3IuXG4gICAqIEByZW1hcmtzIFdoZW4gZW50ZXJpbmcgZWRpdCBtb2RlIHVzaW5nIGRvdWJsZS1jbGljaywga2V5Ym9hcmQgc2hvcnRjdXRzIGRvIG5vdCB3b3JrLlxuICAgKi9cbiAgb3BlbihldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuc2V0QWN0aXZlQ29udGV4dE5hbWUoJ2VkaXRvcicpO1xuICAgIHRoaXMuYXBwbHlQcm9wc1RvRWRpdG9yKCk7XG4gICAgdGhpcy5fY29tcG9uZW50UmVmLmluc3RhbmNlLm9uT3BlbihldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgdmFsdWUgZm9yIHRoZSBjdXN0b20gZWRpdG9yLlxuICAgKiBAcGFyYW0gbmV3VmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAgICovXG4gIHNldFZhbHVlKG5ld1ZhbHVlPzogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fY29tcG9uZW50UmVmLmluc3RhbmNlPy5zZXRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgdGhpcy5fY29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIHByb3BlcnRpZXMgdG8gdGhlIGN1c3RvbSBlZGl0b3IgYW5kIGVkaXRvciBwbGFjZWhvbGRlci5cbiAgICovXG4gIHByaXZhdGUgYXBwbHlQcm9wc1RvRWRpdG9yKCk6IHZvaWQge1xuICAgIGNvbnN0IHJlY3QgPSB0aGlzLmdldEVkaXRlZENlbGxSZWN0KCk7XG5cbiAgICBpZiAoIXRoaXMuaXNJbkZ1bGxFZGl0TW9kZSgpKSB7XG4gICAgICB0aGlzLl9jb21wb25lbnRSZWYuaW5zdGFuY2Uuc2V0VmFsdWUobnVsbCk7XG4gICAgfVxuXG4gICAgdGhpcy5fY29tcG9uZW50UmVmLnNldElucHV0KCdvcmlnaW5hbFZhbHVlJywgdGhpcy5vcmlnaW5hbFZhbHVlKTtcbiAgICB0aGlzLl9jb21wb25lbnRSZWYuc2V0SW5wdXQoJ3JvdycsIHRoaXMucm93KTtcbiAgICB0aGlzLl9jb21wb25lbnRSZWYuc2V0SW5wdXQoJ2NvbHVtbicsIHRoaXMuY29sKTtcbiAgICB0aGlzLl9jb21wb25lbnRSZWYuc2V0SW5wdXQoJ3Byb3AnLCB0aGlzLnByb3ApO1xuICAgIHRoaXMuX2NvbXBvbmVudFJlZi5zZXRJbnB1dCgnY2VsbFByb3BlcnRpZXMnLCB0aGlzLmNlbGxQcm9wZXJ0aWVzKTtcblxuICAgIHRoaXMuX2VkaXRvclBsYWNlSG9sZGVyUmVmLnNldElucHV0KCd0b3AnLCByZWN0LnRvcCk7XG4gICAgdGhpcy5fZWRpdG9yUGxhY2VIb2xkZXJSZWYuc2V0SW5wdXQoJ2xlZnQnLCByZWN0LnN0YXJ0KTtcbiAgICB0aGlzLl9lZGl0b3JQbGFjZUhvbGRlclJlZi5zZXRJbnB1dCgnaGVpZ2h0JywgcmVjdC5oZWlnaHQpO1xuICAgIHRoaXMuX2VkaXRvclBsYWNlSG9sZGVyUmVmLnNldElucHV0KCd3aWR0aCcsIHJlY3Qud2lkdGgpO1xuICAgIHRoaXMuX2VkaXRvclBsYWNlSG9sZGVyUmVmLnNldElucHV0KCdpc1Zpc2libGUnLCB0cnVlKTtcbiAgICB0aGlzLl9lZGl0b3JQbGFjZUhvbGRlclJlZi5zZXRJbnB1dCgnY29tcG9uZW50UmVmJywgdGhpcy5fY29tcG9uZW50UmVmKTtcbiAgICB0aGlzLl9lZGl0b3JQbGFjZUhvbGRlclJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgZWRpdG9yIHBsYWNlaG9sZGVyIGFuZCBhcHBlbmQgaXQgdG8gaG90IHJvb3RFbGVtZW50LlxuICAgKiBAcGFyYW0gaW5qZWN0b3IgVGhlIGVudmlyb25tZW50IGluamVjdG9yLlxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVFZGl0b3JQbGFjZWhvbGRlcihpbmplY3RvcjogRW52aXJvbm1lbnRJbmplY3Rvcik6IHZvaWQge1xuICAgIHRoaXMuX2VkaXRvclBsYWNlSG9sZGVyUmVmID0gY3JlYXRlQ29tcG9uZW50KFxuICAgICAgQ3VzdG9tRWRpdG9yUGxhY2Vob2xkZXJDb21wb25lbnQsXG4gICAgICB7XG4gICAgICAgIGVudmlyb25tZW50SW5qZWN0b3I6IGluamVjdG9yIGFzIEVudmlyb25tZW50SW5qZWN0b3IsXG4gICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKFxuICAgICAgdGhpcy5fZWRpdG9yUGxhY2VIb2xkZXJSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgYWZ0ZXIgY29sdW1uIHJlc2l6ZSBldmVudC5cbiAgICogSGVscHMgYWRqdXN0IHRoZSBlZGl0b3Igc2l6ZSB0byB0aGUgY29sdW1uIHNpemUgYW5kIHVwZGF0ZSBpdHMgcG9zaXRpb24uXG4gICAqL1xuICBwcml2YXRlIG9uQWZ0ZXJDb2x1bW5SZXNpemUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNPcGVuZWQoKSkge1xuICAgICAgdGhpcy5hcHBseVByb3BzVG9FZGl0b3IoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgYWZ0ZXIgcm93IHJlc2l6ZSBldmVudC5cbiAgICogSGVscHMgYWRqdXN0IHRoZSBlZGl0b3Igc2l6ZSB0byB0aGUgY29sdW1uIHNpemUgYW5kIHVwZGF0ZSBpdHMgcG9zaXRpb24uXG4gICAqL1xuICBwcml2YXRlIG9uQWZ0ZXJSb3dSZXNpemUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNPcGVuZWQoKSkge1xuICAgICAgdGhpcy5hcHBseVByb3BzVG9FZGl0b3IoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgYWZ0ZXIgZGVzdHJveSBldmVudC5cbiAgICovXG4gIHByaXZhdGUgb25BZnRlckRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fZWRpdG9yUGxhY2VIb2xkZXJSZWY/LmRlc3Ryb3koKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIGVkaXRvciBwbGFjZWhvbGRlciBzdGF0ZS5cbiAgICogV2UgbmVlZCB0byByZXNldCB0aGUgZWRpdG9yIHBsYWNlaG9sZGVyIHN0YXRlIGJlY2F1c2Ugd2UgdXNlIGl0XG4gICAqIHRvIHN0b3JlIG11bHRpcGxlIHJlZmVyZW5jZXMgdG8gdGhlIGN1c3RvbSBlZGl0b3IuXG4gICAqL1xuICBwcml2YXRlIHJlc2V0RWRpdG9yU3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5fZWRpdG9yUGxhY2VIb2xkZXJSZWYuc2V0SW5wdXQoJ3RvcCcsIHVuZGVmaW5lZCk7XG4gICAgdGhpcy5fZWRpdG9yUGxhY2VIb2xkZXJSZWYuc2V0SW5wdXQoJ2xlZnQnLCB1bmRlZmluZWQpO1xuICAgIHRoaXMuX2VkaXRvclBsYWNlSG9sZGVyUmVmLnNldElucHV0KCdoZWlnaHQnLCB1bmRlZmluZWQpO1xuICAgIHRoaXMuX2VkaXRvclBsYWNlSG9sZGVyUmVmLnNldElucHV0KCd3aWR0aCcsIHVuZGVmaW5lZCk7XG4gICAgdGhpcy5fZWRpdG9yUGxhY2VIb2xkZXJSZWYuc2V0SW5wdXQoJ2lzVmlzaWJsZScsIGZhbHNlKTtcbiAgICB0aGlzLl9lZGl0b3JQbGFjZUhvbGRlclJlZi5zZXRJbnB1dCgnY29tcG9uZW50UmVmJywgdW5kZWZpbmVkKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Input, ViewChild, ViewContainerRef } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* Component representing a placeholder for a custom editor in Handsontable.
|
|
5
|
+
* It is used only within the wrapper.
|
|
6
|
+
*/
|
|
7
|
+
export class CustomEditorPlaceholderComponent {
|
|
8
|
+
/** The top position of the editor. */
|
|
9
|
+
top;
|
|
10
|
+
/** The left position of the editor. */
|
|
11
|
+
left;
|
|
12
|
+
/** The height of the editor. */
|
|
13
|
+
height;
|
|
14
|
+
/** The width of the editor. */
|
|
15
|
+
width;
|
|
16
|
+
set isVisible(value) {
|
|
17
|
+
this._isVisible = value;
|
|
18
|
+
}
|
|
19
|
+
placeholderCustomClass = 'handsontableInputHolder ht_clone_master';
|
|
20
|
+
/** The reference to the component instance of the editor. */
|
|
21
|
+
set componentRef(hotEditorComponentRef) {
|
|
22
|
+
if (hotEditorComponentRef) {
|
|
23
|
+
this.container.insert(hotEditorComponentRef.hostView);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/** The container for the editor's input placeholder. */
|
|
27
|
+
container;
|
|
28
|
+
/** The display style of the editor. */
|
|
29
|
+
get display() {
|
|
30
|
+
return this._isVisible ? 'block' : 'none';
|
|
31
|
+
}
|
|
32
|
+
_isVisible = false;
|
|
33
|
+
/**
|
|
34
|
+
* Detaches the container from the Handsontable.
|
|
35
|
+
*/
|
|
36
|
+
detachEditor() {
|
|
37
|
+
this.container.detach();
|
|
38
|
+
}
|
|
39
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CustomEditorPlaceholderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
40
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CustomEditorPlaceholderComponent, selector: "ng-component", inputs: { top: "top", left: "left", height: "height", width: "width", isVisible: "isVisible", placeholderCustomClass: "placeholderCustomClass", componentRef: "componentRef" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["inputPlaceholder"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: ` <div
|
|
41
|
+
[class]="placeholderCustomClass"
|
|
42
|
+
[style.display]="display"
|
|
43
|
+
[style.width.px]="width"
|
|
44
|
+
[style.height.px]="height"
|
|
45
|
+
[style.maxWidth.px]="width"
|
|
46
|
+
[style.maxHeight.px]="height"
|
|
47
|
+
[style.top.px]="top"
|
|
48
|
+
[style.left.px]="left"
|
|
49
|
+
>
|
|
50
|
+
<ng-template #inputPlaceholder></ng-template>
|
|
51
|
+
</div>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
52
|
+
}
|
|
53
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CustomEditorPlaceholderComponent, decorators: [{
|
|
54
|
+
type: Component,
|
|
55
|
+
args: [{
|
|
56
|
+
template: ` <div
|
|
57
|
+
[class]="placeholderCustomClass"
|
|
58
|
+
[style.display]="display"
|
|
59
|
+
[style.width.px]="width"
|
|
60
|
+
[style.height.px]="height"
|
|
61
|
+
[style.maxWidth.px]="width"
|
|
62
|
+
[style.maxHeight.px]="height"
|
|
63
|
+
[style.top.px]="top"
|
|
64
|
+
[style.left.px]="left"
|
|
65
|
+
>
|
|
66
|
+
<ng-template #inputPlaceholder></ng-template>
|
|
67
|
+
</div>`,
|
|
68
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
69
|
+
standalone: false,
|
|
70
|
+
}]
|
|
71
|
+
}], propDecorators: { top: [{
|
|
72
|
+
type: Input
|
|
73
|
+
}], left: [{
|
|
74
|
+
type: Input
|
|
75
|
+
}], height: [{
|
|
76
|
+
type: Input
|
|
77
|
+
}], width: [{
|
|
78
|
+
type: Input
|
|
79
|
+
}], isVisible: [{
|
|
80
|
+
type: Input
|
|
81
|
+
}], placeholderCustomClass: [{
|
|
82
|
+
type: Input
|
|
83
|
+
}], componentRef: [{
|
|
84
|
+
type: Input
|
|
85
|
+
}], container: [{
|
|
86
|
+
type: ViewChild,
|
|
87
|
+
args: ['inputPlaceholder', { read: ViewContainerRef, static: true }]
|
|
88
|
+
}] } });
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWVkaXRvci1wbGFjZWhvbGRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ob3QtdGFibGUvc3JjL2xpYi9lZGl0b3IvY3VzdG9tLWVkaXRvci1wbGFjZWhvbGRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBZ0IsS0FBSyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFJckg7OztHQUdHO0FBaUJILE1BQU0sT0FBTyxnQ0FBZ0M7SUFDM0Msc0NBQXNDO0lBQzdCLEdBQUcsQ0FBUztJQUVyQix1Q0FBdUM7SUFDOUIsSUFBSSxDQUFTO0lBRXRCLGdDQUFnQztJQUN2QixNQUFNLENBQVM7SUFFeEIsK0JBQStCO0lBQ3RCLEtBQUssQ0FBUztJQUV2QixJQUNJLFNBQVMsQ0FBQyxLQUFjO1FBQzFCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFFUSxzQkFBc0IsR0FBRyx5Q0FBeUMsQ0FBQztJQUU1RSw2REFBNkQ7SUFDN0QsSUFBYSxZQUFZLENBQ3ZCLHFCQUNpRDtRQUNqRCxJQUFJLHFCQUFxQixFQUFFO1lBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3ZEO0lBQ0gsQ0FBQztJQUVELHdEQUF3RDtJQUNpQixTQUFTLENBQW1CO0lBRXJHLHVDQUF1QztJQUN2QyxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzVDLENBQUM7SUFFTyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBRTNCOztPQUVHO0lBQ0gsWUFBWTtRQUNWLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDMUIsQ0FBQzt3R0E1Q1UsZ0NBQWdDOzRGQUFoQyxnQ0FBZ0MsOFRBOEJKLGdCQUFnQiwyQ0E3QzdDOzs7Ozs7Ozs7OztTQVdIOzs0RkFJSSxnQ0FBZ0M7a0JBaEI1QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7U0FXSDtvQkFDUCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsVUFBVSxFQUFFLEtBQUs7aUJBQ2xCOzhCQUdVLEdBQUc7c0JBQVgsS0FBSztnQkFHRyxJQUFJO3NCQUFaLEtBQUs7Z0JBR0csTUFBTTtzQkFBZCxLQUFLO2dCQUdHLEtBQUs7c0JBQWIsS0FBSztnQkFHRixTQUFTO3NCQURaLEtBQUs7Z0JBS0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUdPLFlBQVk7c0JBQXhCLEtBQUs7Z0JBU21FLFNBQVM7c0JBQWpGLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIENvbXBvbmVudFJlZiwgSW5wdXQsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSG90Q2VsbEVkaXRvckNvbXBvbmVudCB9IGZyb20gJy4vaG90LWNlbGwtZWRpdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBIb3RDZWxsRWRpdG9yQWR2YW5jZWRDb21wb25lbnQgfSBmcm9tICcuL2hvdC1jZWxsLWVkaXRvci1hZHZhbmNlZC5jb21wb25lbnQnO1xuXG4vKipcbiAqIENvbXBvbmVudCByZXByZXNlbnRpbmcgYSBwbGFjZWhvbGRlciBmb3IgYSBjdXN0b20gZWRpdG9yIGluIEhhbmRzb250YWJsZS5cbiAqIEl0IGlzIHVzZWQgb25seSB3aXRoaW4gdGhlIHdyYXBwZXIuXG4gKi9cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZTogYCA8ZGl2XG4gICAgW2NsYXNzXT1cInBsYWNlaG9sZGVyQ3VzdG9tQ2xhc3NcIlxuICAgIFtzdHlsZS5kaXNwbGF5XT1cImRpc3BsYXlcIlxuICAgIFtzdHlsZS53aWR0aC5weF09XCJ3aWR0aFwiXG4gICAgW3N0eWxlLmhlaWdodC5weF09XCJoZWlnaHRcIlxuICAgIFtzdHlsZS5tYXhXaWR0aC5weF09XCJ3aWR0aFwiXG4gICAgW3N0eWxlLm1heEhlaWdodC5weF09XCJoZWlnaHRcIlxuICAgIFtzdHlsZS50b3AucHhdPVwidG9wXCJcbiAgICBbc3R5bGUubGVmdC5weF09XCJsZWZ0XCJcbiAgPlxuICAgIDxuZy10ZW1wbGF0ZSAjaW5wdXRQbGFjZWhvbGRlcj48L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5gLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIEN1c3RvbUVkaXRvclBsYWNlaG9sZGVyQ29tcG9uZW50IHtcbiAgLyoqIFRoZSB0b3AgcG9zaXRpb24gb2YgdGhlIGVkaXRvci4gKi9cbiAgQElucHV0KCkgdG9wOiBudW1iZXI7XG5cbiAgLyoqIFRoZSBsZWZ0IHBvc2l0aW9uIG9mIHRoZSBlZGl0b3IuICovXG4gIEBJbnB1dCgpIGxlZnQ6IG51bWJlcjtcblxuICAvKiogVGhlIGhlaWdodCBvZiB0aGUgZWRpdG9yLiAqL1xuICBASW5wdXQoKSBoZWlnaHQ6IG51bWJlcjtcblxuICAvKiogVGhlIHdpZHRoIG9mIHRoZSBlZGl0b3IuICovXG4gIEBJbnB1dCgpIHdpZHRoOiBudW1iZXI7XG5cbiAgQElucHV0KClcbiAgc2V0IGlzVmlzaWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2lzVmlzaWJsZSA9IHZhbHVlO1xuICB9XG5cbiAgQElucHV0KCkgcGxhY2Vob2xkZXJDdXN0b21DbGFzcyA9ICdoYW5kc29udGFibGVJbnB1dEhvbGRlciBodF9jbG9uZV9tYXN0ZXInO1xuXG4gIC8qKiBUaGUgcmVmZXJlbmNlIHRvIHRoZSBjb21wb25lbnQgaW5zdGFuY2Ugb2YgdGhlIGVkaXRvci4gKi9cbiAgQElucHV0KCkgc2V0IGNvbXBvbmVudFJlZihcbiAgICBob3RFZGl0b3JDb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxIb3RDZWxsRWRpdG9yQ29tcG9uZW50PGFueT4+IHxcbiAgICBDb21wb25lbnRSZWY8SG90Q2VsbEVkaXRvckFkdmFuY2VkQ29tcG9uZW50PGFueT4+KSB7XG4gICAgaWYgKGhvdEVkaXRvckNvbXBvbmVudFJlZikge1xuICAgICAgdGhpcy5jb250YWluZXIuaW5zZXJ0KGhvdEVkaXRvckNvbXBvbmVudFJlZi5ob3N0Vmlldyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFRoZSBjb250YWluZXIgZm9yIHRoZSBlZGl0b3IncyBpbnB1dCBwbGFjZWhvbGRlci4gKi9cbiAgQFZpZXdDaGlsZCgnaW5wdXRQbGFjZWhvbGRlcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiB0cnVlIH0pIGNvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZjtcblxuICAvKiogVGhlIGRpc3BsYXkgc3R5bGUgb2YgdGhlIGVkaXRvci4gKi9cbiAgZ2V0IGRpc3BsYXkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5faXNWaXNpYmxlID8gJ2Jsb2NrJyA6ICdub25lJztcbiAgfVxuXG4gIHByaXZhdGUgX2lzVmlzaWJsZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEZXRhY2hlcyB0aGUgY29udGFpbmVyIGZyb20gdGhlIEhhbmRzb250YWJsZS5cbiAgICovXG4gIGRldGFjaEVkaXRvcigpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRhaW5lci5kZXRhY2goKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { createComponent } from '@angular/core';
|
|
2
|
+
import { CustomEditorPlaceholderComponent } from './custom-editor-placeholder.component';
|
|
3
|
+
import { editorFactory } from 'handsontable/editors/factory';
|
|
4
|
+
import { take } from 'rxjs/operators';
|
|
5
|
+
/**
|
|
6
|
+
* Factory function to create a custom Handsontable editor adapter for Angular components.
|
|
7
|
+
*
|
|
8
|
+
* This adapter integrates Angular components with Handsontable's editor system using the new
|
|
9
|
+
* editorFactory API, allowing you to use Angular components as custom cell editors while
|
|
10
|
+
* maintaining full Angular lifecycle management and change detection.
|
|
11
|
+
*
|
|
12
|
+
* @returns A custom editor class that can be used in Handsontable column settings.
|
|
13
|
+
*
|
|
14
|
+
*/
|
|
15
|
+
export const FactoryEditorAdapter = (componentRef) => editorFactory({
|
|
16
|
+
position: componentRef.instance.position,
|
|
17
|
+
shortcuts: componentRef.instance.shortcuts,
|
|
18
|
+
config: componentRef.instance.config,
|
|
19
|
+
init(editor) {
|
|
20
|
+
editor._componentRef = componentRef;
|
|
21
|
+
editor._editorPlaceHolderRef = undefined;
|
|
22
|
+
editor._finishEditSubscription = undefined;
|
|
23
|
+
editor._cancelEditSubscription = undefined;
|
|
24
|
+
createEditorPlaceholder(editor, editor.hot._angularEnvironmentInjector);
|
|
25
|
+
editor.input = editor._editorPlaceHolderRef.location.nativeElement;
|
|
26
|
+
editor._afterRowResizeCallback = () => {
|
|
27
|
+
if (editor.isOpened()) {
|
|
28
|
+
applyPropsToEditor(editor);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
editor._afterColumnResizeCallback = () => {
|
|
32
|
+
if (editor.isOpened()) {
|
|
33
|
+
applyPropsToEditor(editor);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
editor._afterDestroyCallback = () => {
|
|
37
|
+
if (editor._editorPlaceHolderRef) {
|
|
38
|
+
editor._editorPlaceHolderRef.destroy();
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
// Hooks are automatically removed by Handsontable on table destroy
|
|
42
|
+
editor.hot.addHook('afterRowResize', editor._afterRowResizeCallback);
|
|
43
|
+
editor.hot.addHook('afterColumnResize', editor._afterColumnResizeCallback);
|
|
44
|
+
editor.hot.addHook('afterDestroy', editor._afterDestroyCallback);
|
|
45
|
+
},
|
|
46
|
+
afterInit: (editor) => editor._componentRef.instance.afterInit?.(editor),
|
|
47
|
+
beforeOpen: (editor, context) => {
|
|
48
|
+
cleanupSubscriptions(editor);
|
|
49
|
+
applyPropsToEditor(editor);
|
|
50
|
+
editor._finishEditSubscription = editor._componentRef.instance.finishEdit.pipe(take(1)).subscribe(() => {
|
|
51
|
+
editor.finishEditing();
|
|
52
|
+
});
|
|
53
|
+
editor._cancelEditSubscription = editor._componentRef.instance.cancelEdit.pipe(take(1)).subscribe(() => {
|
|
54
|
+
editor.cancelChanges();
|
|
55
|
+
});
|
|
56
|
+
editor._componentRef.instance.beforeOpen?.(editor, context);
|
|
57
|
+
},
|
|
58
|
+
afterOpen: (editor, event) => {
|
|
59
|
+
editor._componentRef.instance.afterOpen?.(editor, event);
|
|
60
|
+
},
|
|
61
|
+
onFocus: (editor) => editor._componentRef.instance.onFocus?.(editor),
|
|
62
|
+
afterClose: (editor) => {
|
|
63
|
+
resetEditorState(editor);
|
|
64
|
+
editor._editorPlaceHolderRef.changeDetectorRef.detectChanges();
|
|
65
|
+
editor._editorPlaceHolderRef.instance.detachEditor();
|
|
66
|
+
editor._componentRef.instance.afterClose?.(editor);
|
|
67
|
+
},
|
|
68
|
+
getValue: (editor) => editor._componentRef.instance.getValue(),
|
|
69
|
+
setValue: (editor, value) => {
|
|
70
|
+
editor.value = value;
|
|
71
|
+
editor._componentRef.instance.setValue(value);
|
|
72
|
+
editor._componentRef.changeDetectorRef.detectChanges();
|
|
73
|
+
},
|
|
74
|
+
});
|
|
75
|
+
/**
|
|
76
|
+
* Creates the editor placeholder component.
|
|
77
|
+
* @param editor The editor instance.
|
|
78
|
+
* @param injector The environment injector from Angular.
|
|
79
|
+
*/
|
|
80
|
+
function createEditorPlaceholder(editor, injector) {
|
|
81
|
+
if (!injector) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
editor._editorPlaceHolderRef = createComponent(CustomEditorPlaceholderComponent, {
|
|
85
|
+
environmentInjector: injector,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Applies properties to the custom Angular editor and editor placeholder.
|
|
90
|
+
* Updates position, size, and cell context information.
|
|
91
|
+
* @param editor The editor instance.
|
|
92
|
+
*/
|
|
93
|
+
function applyPropsToEditor(editor) {
|
|
94
|
+
if (!editor._componentRef || !editor._editorPlaceHolderRef) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
editor._componentRef.setInput('originalValue', editor.originalValue);
|
|
98
|
+
editor._componentRef.setInput('row', editor.row);
|
|
99
|
+
editor._componentRef.setInput('column', editor.col);
|
|
100
|
+
editor._componentRef.setInput('prop', editor.prop);
|
|
101
|
+
editor._componentRef.setInput('cellProperties', editor.cellProperties);
|
|
102
|
+
const rect = editor.hot.getCell(editor.row, editor.col)?.getBoundingClientRect();
|
|
103
|
+
editor._editorPlaceHolderRef.setInput('placeholderCustomClass', '');
|
|
104
|
+
editor._editorPlaceHolderRef.setInput('height', rect.height);
|
|
105
|
+
editor._editorPlaceHolderRef.setInput('width', rect.width);
|
|
106
|
+
editor._editorPlaceHolderRef.setInput('isVisible', true);
|
|
107
|
+
editor._editorPlaceHolderRef.setInput('componentRef', editor._componentRef);
|
|
108
|
+
editor._editorPlaceHolderRef.changeDetectorRef.detectChanges();
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Resets the editor placeholder state.
|
|
112
|
+
* Clears all positioning and visibility settings.
|
|
113
|
+
* @param editor The editor instance.
|
|
114
|
+
*/
|
|
115
|
+
function resetEditorState(editor) {
|
|
116
|
+
if (!editor._editorPlaceHolderRef) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
editor._editorPlaceHolderRef.setInput('top', undefined);
|
|
120
|
+
editor._editorPlaceHolderRef.setInput('left', undefined);
|
|
121
|
+
editor._editorPlaceHolderRef.setInput('height', undefined);
|
|
122
|
+
editor._editorPlaceHolderRef.setInput('width', undefined);
|
|
123
|
+
editor._editorPlaceHolderRef.setInput('isVisible', false);
|
|
124
|
+
editor._editorPlaceHolderRef.setInput('componentRef', undefined);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Cleans up existing subscriptions.
|
|
128
|
+
* @param editor The editor instance.
|
|
129
|
+
*/
|
|
130
|
+
function cleanupSubscriptions(editor) {
|
|
131
|
+
if (editor._finishEditSubscription) {
|
|
132
|
+
editor._finishEditSubscription.unsubscribe();
|
|
133
|
+
editor._finishEditSubscription = undefined;
|
|
134
|
+
}
|
|
135
|
+
if (editor._cancelEditSubscription) {
|
|
136
|
+
editor._cancelEditSubscription.unsubscribe();
|
|
137
|
+
editor._cancelEditSubscription = undefined;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLWZhY3RvcnktYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2hvdC10YWJsZS9zcmMvbGliL2VkaXRvci9lZGl0b3ItZmFjdG9yeS1hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsZUFBZSxFQUF1QixNQUFNLGVBQWUsQ0FBQztBQUNuRixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUV6RixPQUFPLEVBQUUsYUFBYSxFQUFrQixNQUFNLDhCQUE4QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVN0Qzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLFlBQStELEVBQUUsRUFBRSxDQUN0RyxhQUFhLENBQXNCO0lBQ2pDLFFBQVEsRUFBRSxZQUFZLENBQUMsUUFBUSxDQUFDLFFBQVE7SUFDeEMsU0FBUyxFQUFFLFlBQVksQ0FBQyxRQUFRLENBQUMsU0FBUztJQUMxQyxNQUFNLEVBQUUsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNO0lBQ3BDLElBQUksQ0FBQyxNQUFzQjtRQUN6QixNQUFNLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQztRQUNwQyxNQUFNLENBQUMscUJBQXFCLEdBQUcsU0FBUyxDQUFDO1FBQ3pDLE1BQU0sQ0FBQyx1QkFBdUIsR0FBRyxTQUFTLENBQUM7UUFDM0MsTUFBTSxDQUFDLHVCQUF1QixHQUFHLFNBQVMsQ0FBQztRQUUzQyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUcsTUFBTSxDQUFDLEdBQVcsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQ2pGLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUM7UUFFbkUsTUFBTSxDQUFDLHVCQUF1QixHQUFHLEdBQVMs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QUFxQixDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDMUQsTUFBTSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDbkUsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsb0JBQW9CLENBQUMsTUFBc0I7SUFDbEQsSUFBSSxNQUFNLENBQUMsdUJBQXVCLEVBQUU7UUFDbEMsTUFBTSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzdDLE1BQU0sQ0FBQyx1QkFBdUIsR0FBRyxTQUFTLENBQUM7S0FDNUM7SUFFRCxJQUFJLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRTtRQUNsQyxNQUFNLENBQUMsdUJBQXVCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDN0MsTUFBTSxDQUFDLHVCQUF1QixHQUFHLFNBQVMsQ0FBQztLQUM1QztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRSZWYsIGNyZWF0ZUNvbXBvbmVudCwgRW52aXJvbm1lbnRJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ3VzdG9tRWRpdG9yUGxhY2Vob2xkZXJDb21wb25lbnQgfSBmcm9tICcuL2N1c3RvbS1lZGl0b3ItcGxhY2Vob2xkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEFuZ3VsYXJFZGl0b3JQcm9wZXJ0aWVzIH0gZnJvbSAnLi9tb2RlbHMvZmFjdG9yeS1lZGl0b3ItcHJvcGVydGllcyc7XG5pbXBvcnQgeyBlZGl0b3JGYWN0b3J5LCBFeHRlbmRlZEVkaXRvciB9IGZyb20gJ2hhbmRzb250YWJsZS9lZGl0b3JzL2ZhY3RvcnknO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEhvdENlbGxFZGl0b3JBZHZhbmNlZENvbXBvbmVudCB9IGZyb20gJy4vaG90LWNlbGwtZWRpdG9yLWFkdmFuY2VkLmNvbXBvbmVudCc7XG5cbi8qKlxuICogQ29tYmluZWQgdHlwZSByZXByZXNlbnRpbmcgYW4gZXh0ZW5kZWQgZWRpdG9yIHdpdGggQW5ndWxhciBjb21wb25lbnQgcHJvcGVydGllcy5cbiAqIFVzZWQgaW50ZXJuYWxseSBieSB0aGUgZmFjdG9yeSBhZGFwdGVyIHRvIGJyaWRnZSBBbmd1bGFyIGFuZCBIYW5kc29udGFibGUuXG4gKi9cbnR5cGUgRWRpdG9ySW5zdGFuY2UgPSBFeHRlbmRlZEVkaXRvcjxBbmd1bGFyRWRpdG9yUHJvcGVydGllcyAmIEhvdENlbGxFZGl0b3JBZHZhbmNlZENvbXBvbmVudDxhbnk+PjtcblxuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIGN1c3RvbSBIYW5kc29udGFibGUgZWRpdG9yIGFkYXB0ZXIgZm9yIEFuZ3VsYXIgY29tcG9uZW50cy5cbiAqXG4gKiBUaGlzIGFkYXB0ZXIgaW50ZWdyYXRlcyBBbmd1bGFyIGNvbXBvbmVudHMgd2l0aCBIYW5kc29udGFibGUncyBlZGl0b3Igc3lzdGVtIHVzaW5nIHRoZSBuZXdcbiAqIGVkaXRvckZhY3RvcnkgQVBJLCBhbGxvd2luZyB5b3UgdG8gdXNlIEFuZ3VsYXIgY29tcG9uZW50cyBhcyBjdXN0b20gY2VsbCBlZGl0b3JzIHdoaWxlXG4gKiBtYWludGFpbmluZyBmdWxsIEFuZ3VsYXIgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgYW5kIGNoYW5nZSBkZXRlY3Rpb24uXG4gKlxuICogQHJldHVybnMgQSBjdXN0b20gZWRpdG9yIGNsYXNzIHRoYXQgY2FuIGJlIHVzZWQgaW4gSGFuZHNvbnRhYmxlIGNvbHVtbiBzZXR0aW5ncy5cbiAqXG4gKi9cbmV4cG9ydCBjb25zdCBGYWN0b3J5RWRpdG9yQWRhcHRlciA9IChjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxIb3RDZWxsRWRpdG9yQWR2YW5jZWRDb21wb25lbnQ8YW55Pj4pID0+XG4gIGVkaXRvckZhY3Rvcnk8RXh0ZW5kZWRFZGl0b3I8YW55Pj4oe1xuICAgIHBvc2l0aW9uOiBjb21wb25lbnRSZWYuaW5zdGFuY2UucG9zaXRpb24sXG4gICAgc2hvcnRjdXRzOiBjb21wb25lbnRSZWYuaW5zdGFuY2Uuc2hvcnRjdXRzLFxuICAgIGNvbmZpZzogY29tcG9uZW50UmVmLmluc3RhbmNlLmNvbmZpZyxcbiAgICBpbml0KGVkaXRvcjogRWRpdG9ySW5zdGFuY2UpOiB2b2lkIHtcbiAgICAgIGVkaXRvci5fY29tcG9uZW50UmVmID0gY29tcG9uZW50UmVmO1xuICAgICAgZWRpdG9yLl9lZGl0b3JQbGFjZUhvbGRlclJlZiA9IHVuZGVmaW5lZDtcbiAgICAgIGVkaXRvci5fZmluaXNoRWRpdFN1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgIGVkaXRvci5fY2FuY2VsRWRpdFN1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcblxuICAgICAgY3JlYXRlRWRpdG9yUGxhY2Vob2xkZXIoZWRpdG9yLCAoZWRpdG9yLmhvdCBhcyBhbnkpLl9hbmd1bGFyRW52aXJvbm1lbnRJbmplY3Rvcik7XG4gICAgICBlZGl0b3IuaW5wdXQgPSBlZGl0b3IuX2VkaXRvclBsYWNlSG9sZGVyUmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgIGVkaXRvci5fYWZ0ZXJSb3dSZXNpemVDYWxsYmFjayA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKGVkaXRvci5pc09wZW5lZCgpKSB7XG4gICAgICAgICAgYXBwbHlQcm9wc1RvRWRpdG9yKGVkaXRvcik7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGVkaXRvci5fYWZ0ZXJDb2x1bW5SZXNpemVDYWxsYmFjayA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKGVkaXRvci5pc09wZW5lZCgpKSB7XG4gICAgICAgICAgYXBwbHlQcm9wc1RvRWRpdG9yKGVkaXRvcik7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGVkaXRvci5fYWZ0ZXJEZXN0cm95Q2FsbGJhY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIGlmIChlZGl0b3IuX2VkaXRvclBsYWNlSG9sZGVyUmVmKSB7XG4gICAgICAgICAgZWRpdG9yLl9lZGl0b3JQbGFjZUhvbGRlclJlZi5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIC8vIEhvb2tzIGFyZSBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgYnkgSGFuZHNvbnRhYmxlIG9uIHRhYmxlIGRlc3Ryb3lcbiAgICAgIGVkaXRvci5ob3QuYWRkSG9vaygnYWZ0ZXJSb3dSZXNpemUnLCBlZGl0b3IuX2FmdGVyUm93UmVzaXplQ2FsbGJhY2spO1xuICAgICAgZWRpdG9yLmhvdC5hZGRIb29rKCdhZnRlckNvbHVtblJlc2l6ZScsIGVkaXRvci5fYWZ0ZXJDb2x1bW5SZXNpemVDYWxsYmFjayk7XG4gICAgICBlZGl0b3IuaG90LmFkZEhvb2soJ2FmdGVyRGVzdHJveScsIGVkaXRvci5fYWZ0ZXJEZXN0cm95Q2FsbGJhY2spO1xuICAgIH0sXG5cbiAgICBhZnRlckluaXQ6IChlZGl0b3IpID0+IGVkaXRvci5fY29tcG9uZW50UmVmLmluc3RhbmNlLmFmdGVySW5pdD8uKGVkaXRvciksXG4gICAgYmVmb3JlT3BlbjogKGVkaXRvcjogRWRpdG9ySW5zdGFuY2UsIGNvbnRleHQpID0+IHtcbiAgICAgIGNsZWFudXBTdWJzY3JpcHRpb25zKGVkaXRvcik7XG5cbiAgICAgIGFwcGx5UHJvcHNUb0VkaXRvcihlZGl0b3IpO1xuXG4gICAgICBlZGl0b3IuX2ZpbmlzaEVkaXRTdWJzY3JpcHRpb24gPSBlZGl0b3IuX2NvbXBvbmVudFJlZi5pbnN0YW5jZS5maW5pc2hFZGl0LnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpOiB2b2lkID0+IHtcbiAgICAgICAgZWRpdG9yLmZpbmlzaEVkaXRpbmcoKTtcbiAgICAgIH0pO1xuXG4gICAgICBlZGl0b3IuX2NhbmNlbEVkaXRTdWJzY3JpcHRpb24gPSBlZGl0b3IuX2NvbXBvbmVudFJlZi5pbnN0YW5jZS5jYW5jZWxFZGl0LnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpOiB2b2lkID0+IHtcbiAgICAgICAgZWRpdG9yLmNhbmNlbENoYW5nZXMoKTtcbiAgICAgIH0pO1xuICAgICAgZWRpdG9yLl9jb21wb25lbnRSZWYuaW5zdGFuY2UuYmVmb3JlT3Blbj8uKGVkaXRvciwgY29udGV4dCk7XG4gICAgfSxcbiAgICBhZnRlck9wZW46IChlZGl0b3IsIGV2ZW50KSA9PiB7XG4gICAgICBlZGl0b3IuX2NvbXBvbmVudFJlZi5pbnN0YW5jZS5hZnRlck9wZW4/LihlZGl0b3IsIGV2ZW50KTtcbiAgICB9LFxuICAgIG9uRm9jdXM6IChlZGl0b3IpID0+IGVkaXRvci5fY29tcG9uZW50UmVmLmluc3RhbmNlLm9uRm9jdXM/LihlZGl0b3IpLFxuICAgIGFmdGVyQ2xvc2U6IChlZGl0b3I6IEVkaXRvckluc3RhbmNlKSA9PiB7XG4gICAgICByZXNldEVkaXRvclN0YXRlKGVkaXRvcik7XG4gICAgICBlZGl0b3IuX2VkaXRvclBsYWNlSG9sZGVyUmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIGVkaXRvci5fZWRpdG9yUGxhY2VIb2xkZXJSZWYuaW5zdGFuY2UuZGV0YWNoRWRpdG9yKCk7XG4gICAgICBlZGl0b3IuX2NvbXBvbmVudFJlZi5pbnN0YW5jZS5hZnRlckNsb3NlPy4oZWRpdG9yKTtcbiAgICB9LFxuICAgIGdldFZhbHVlOiAoZWRpdG9yKSA9PiBlZGl0b3IuX2NvbXBvbmVudFJlZi5pbnN0YW5jZS5nZXRWYWx1ZSgpLFxuICAgIHNldFZhbHVlOiAoZWRpdG9yOiBFZGl0b3JJbnN0YW5jZSwgdmFsdWUpID0+IHtcbiAgICAgIGVkaXRvci52YWx1ZSA9IHZhbHVlO1xuICAgICAgZWRpdG9yLl9jb21wb25lbnRSZWYuaW5zdGFuY2Uuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgZWRpdG9yLl9jb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sXG4gIH0pO1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGVkaXRvciBwbGFjZWhvbGRlciBjb21wb25lbnQuXG4gKiBAcGFyYW0gZWRpdG9yIFRoZSBlZGl0b3IgaW5zdGFuY2UuXG4gKiBAcGFyYW0gaW5qZWN0b3IgVGhlIGVudmlyb25tZW50IGluamVjdG9yIGZyb20gQW5ndWxhci5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRWRpdG9yUGxhY2Vob2xkZXIoZWRpdG9yOiBFZGl0b3JJbnN0YW5jZSwgaW5qZWN0b3I6IEVudmlyb25tZW50SW5qZWN0b3IgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgaWYgKCFpbmplY3Rvcikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGVkaXRvci5fZWRpdG9yUGxhY2VIb2xkZXJSZWYgPSBjcmVhdGVDb21wb25lbnQoQ3VzdG9tRWRpdG9yUGxhY2Vob2xkZXJDb21wb25lbnQsIHtcbiAgICBlbnZpcm9ubWVudEluamVjdG9yOiBpbmplY3RvcixcbiAgfSk7XG59XG5cbi8qKlxuICogQXBwbGllcyBwcm9wZXJ0aWVzIHRvIHRoZSBjdXN0b20gQW5ndWxhciBlZGl0b3IgYW5kIGVkaXRvciBwbGFjZWhvbGRlci5cbiAqIFVwZGF0ZXMgcG9zaXRpb24sIHNpemUsIGFuZCBjZWxsIGNvbnRleHQgaW5mb3JtYXRpb24uXG4gKiBAcGFyYW0gZWRpdG9yIFRoZSBlZGl0b3IgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5UHJvcHNUb0VkaXRvcihlZGl0b3I6IEVkaXRvckluc3RhbmNlKTogdm9pZCB7XG4gIGlmICghZWRpdG9yLl9jb21wb25lbnRSZWYgfHwgIWVkaXRvci5fZWRpdG9yUGxhY2VIb2xkZXJSZWYpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBlZGl0b3IuX2NvbXBvbmVudFJlZi5zZXRJbnB1dCgnb3JpZ2luYWxWYWx1ZScsIGVkaXRvci5vcmlnaW5hbFZhbHVlKTtcbiAgZWRpdG9yLl9jb21wb25lbnRSZWYuc2V0SW5wdXQoJ3JvdycsIGVkaXRvci5yb3cpO1xuICBlZGl0b3IuX2NvbXBvbmVudFJlZi5zZXRJbnB1dCgnY29sdW1uJywgZWRpdG9yLmNvbCk7XG4gIGVkaXRvci5fY29tcG9uZW50UmVmLnNldElucHV0KCdwcm9wJywgZWRpdG9yLnByb3ApO1xuICBlZGl0b3IuX2NvbXBvbmVudFJlZi5zZXRJbnB1dCgnY2VsbFByb3BlcnRpZXMnLCBlZGl0b3IuY2VsbFByb3BlcnRpZXMpO1xuXG4gIGNvbnN0IHJlY3QgPSBlZGl0b3IuaG90LmdldENlbGwoZWRpdG9yLnJvdywgZWRpdG9yLmNvbCk/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gIGVkaXRvci5fZWRpdG9yUGxhY2VIb2xkZXJSZWYuc2V0SW5wdXQoJ3BsYWNlaG9sZGVyQ3VzdG9tQ2xhc3MnLCAnJyk7XG4gIGVkaXRvci5fZWRpdG9yUGxhY2VIb2xkZXJSZWYuc2V0SW5wdXQoJ2hlaWdodCcsIHJlY3QuaGVpZ2h0KTtcbiAgZWRpdG9yLl9lZGl0b3JQbGFjZUhvbGRlclJlZi5zZXRJbnB1dCgnd2lkdGgnLCByZWN0LndpZHRoKTtcbiAgZWRpdG9yLl9lZGl0b3JQbGFjZUhvbGRlclJlZi5zZXRJbnB1dCgnaXNWaXNpYmxlJywgdHJ1ZSk7XG4gIGVkaXRvci5fZWRpdG9yUGxhY2VIb2xkZXJSZWYuc2V0SW5wdXQoJ2NvbXBvbmVudFJlZicsIGVkaXRvci5fY29tcG9uZW50UmVmKTtcblxuICBlZGl0b3IuX2VkaXRvclBsYWNlSG9sZGVyUmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbn1cblxuLyoqXG4gKiBSZXNldHMgdGhlIGVkaXRvciBwbGFjZWhvbGRlciBzdGF0ZS5cbiAqIENsZWFycyBhbGwgcG9zaXRpb25pbmcgYW5kIHZpc2liaWxpdHkgc2V0dGluZ3MuXG4gKiBAcGFyYW0gZWRpdG9yIFRoZSBlZGl0b3IgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIHJlc2V0RWRpdG9yU3RhdGUoZWRpdG9yOiBFZGl0b3JJbnN0YW5jZSk6IHZvaWQge1xuICBpZiAoIWVkaXRvci5fZWRpdG9yUGxhY2VIb2xkZXJSZWYpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBlZGl0b3IuX2VkaXRvclBsYWNlSG9sZGVyUmVmLnNldElucHV0KCd0b3AnLCB1bmRlZmluZWQpO1xuICBlZGl0b3IuX2VkaXRvclBsYWNlSG9sZGVyUmVmLnNldElucHV0KCdsZWZ0JywgdW5kZWZpbmVkKTtcbiAgZWRpdG9yLl9lZGl0b3JQbGFjZUhvbGRlclJlZi5zZXRJbnB1dCgnaGVpZ2h0JywgdW5kZWZpbmVkKTtcbiAgZWRpdG9yLl9lZGl0b3JQbGFjZUhvbGRlclJlZi5zZXRJbnB1dCgnd2lkdGgnLCB1bmRlZmluZWQpO1xuICBlZGl0b3IuX2VkaXRvclBsYWNlSG9sZGVyUmVmLnNldElucHV0KCdpc1Zpc2libGUnLCBmYWxzZSk7XG4gIGVkaXRvci5fZWRpdG9yUGxhY2VIb2xkZXJSZWYuc2V0SW5wdXQoJ2NvbXBvbmVudFJlZicsIHVuZGVmaW5lZCk7XG59XG5cbi8qKlxuICogQ2xlYW5zIHVwIGV4aXN0aW5nIHN1YnNjcmlwdGlvbnMuXG4gKiBAcGFyYW0gZWRpdG9yIFRoZSBlZGl0b3IgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGNsZWFudXBTdWJzY3JpcHRpb25zKGVkaXRvcjogRWRpdG9ySW5zdGFuY2UpOiB2b2lkIHtcbiAgaWYgKGVkaXRvci5fZmluaXNoRWRpdFN1YnNjcmlwdGlvbikge1xuICAgIGVkaXRvci5fZmluaXNoRWRpdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIGVkaXRvci5fZmluaXNoRWRpdFN1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChlZGl0b3IuX2NhbmNlbEVkaXRTdWJzY3JpcHRpb24pIHtcbiAgICBlZGl0b3IuX2NhbmNlbEVkaXRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICBlZGl0b3IuX2NhbmNlbEVkaXRTdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { Directive, EventEmitter, HostBinding, Input, Output } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* Abstract class representing a Handsontable editor in angular.
|
|
5
|
+
*/
|
|
6
|
+
export class HotCellEditorAdvancedComponent {
|
|
7
|
+
static EDITOR_MARKER = Symbol('HotCellEditorAdvancedComponent');
|
|
8
|
+
/** The height of the editor as a percentage of the parent container. */
|
|
9
|
+
heightFitParentContainer = 100;
|
|
10
|
+
/** The width of the editor as a percentage of the parent container. */
|
|
11
|
+
widthFitParentContainer = 100;
|
|
12
|
+
/** The row index of the cell being edited. */
|
|
13
|
+
row;
|
|
14
|
+
/** The column index of the cell being edited. */
|
|
15
|
+
column;
|
|
16
|
+
/** The property name of the cell being edited. */
|
|
17
|
+
prop;
|
|
18
|
+
/** The original value of the cell being edited. */
|
|
19
|
+
originalValue;
|
|
20
|
+
/** The cell properties of the cell being edited. */
|
|
21
|
+
cellProperties;
|
|
22
|
+
/** Event emitted when the edit is finished.
|
|
23
|
+
* The data will be saved to the model.
|
|
24
|
+
*/
|
|
25
|
+
finishEdit = new EventEmitter();
|
|
26
|
+
/** Event emitted when the edit is canceled.
|
|
27
|
+
* The entered data will be reverted to the original value.
|
|
28
|
+
*/
|
|
29
|
+
cancelEdit = new EventEmitter();
|
|
30
|
+
/** The current value of the editor. */
|
|
31
|
+
value;
|
|
32
|
+
/** Event triggered by Handsontable on focus the editor.
|
|
33
|
+
* The user have to define focus logic.
|
|
34
|
+
*/
|
|
35
|
+
onFocus(editor) { }
|
|
36
|
+
/**
|
|
37
|
+
* Gets the current value of the editor.
|
|
38
|
+
* @returns The current value of the editor.
|
|
39
|
+
*/
|
|
40
|
+
getValue() {
|
|
41
|
+
return this.value;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Sets the current value of the editor.
|
|
45
|
+
* @param value The value to set.
|
|
46
|
+
*/
|
|
47
|
+
setValue(value) {
|
|
48
|
+
this.value = value;
|
|
49
|
+
}
|
|
50
|
+
/** The position of the editor in the DOM. Used by Handsontable API. Available in advanced mode. */
|
|
51
|
+
position = 'container';
|
|
52
|
+
/** The shortcuts available for the editor. Available in advanced mode. */
|
|
53
|
+
shortcuts;
|
|
54
|
+
/** The group name for the shortcuts. Available in advanced mode.*/
|
|
55
|
+
shortcutsGroup;
|
|
56
|
+
/** Configuration. Available in advanced mode. */
|
|
57
|
+
config;
|
|
58
|
+
/** Lifecycle hook called after the editor is opened. Available in advanced mode.*/
|
|
59
|
+
afterOpen(editor, event) { }
|
|
60
|
+
/** Lifecycle hook called after the editor is closed. Available in advanced mode. */
|
|
61
|
+
afterClose(editor) { }
|
|
62
|
+
/** Lifecycle hook called after the editor is initialized. Available in advanced mode.*/
|
|
63
|
+
afterInit(editor) { }
|
|
64
|
+
/** Lifecycle hook called before the editor is opened. Available in advanced mode. */
|
|
65
|
+
beforeOpen(editor, { row, col, prop, td, originalValue, cellProperties, }) { }
|
|
66
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HotCellEditorAdvancedComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
67
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: HotCellEditorAdvancedComponent, inputs: { row: "row", column: "column", prop: "prop", originalValue: "originalValue", cellProperties: "cellProperties" }, outputs: { finishEdit: "finishEdit", cancelEdit: "cancelEdit" }, host: { properties: { "style.height.%": "this.heightFitParentContainer", "style.width.%": "this.widthFitParentContainer" } }, ngImport: i0 });
|
|
68
|
+
}
|
|
69
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HotCellEditorAdvancedComponent, decorators: [{
|
|
70
|
+
type: Directive
|
|
71
|
+
}], propDecorators: { heightFitParentContainer: [{
|
|
72
|
+
type: HostBinding,
|
|
73
|
+
args: ['style.height.%']
|
|
74
|
+
}], widthFitParentContainer: [{
|
|
75
|
+
type: HostBinding,
|
|
76
|
+
args: ['style.width.%']
|
|
77
|
+
}], row: [{
|
|
78
|
+
type: Input
|
|
79
|
+
}], column: [{
|
|
80
|
+
type: Input
|
|
81
|
+
}], prop: [{
|
|
82
|
+
type: Input
|
|
83
|
+
}], originalValue: [{
|
|
84
|
+
type: Input
|
|
85
|
+
}], cellProperties: [{
|
|
86
|
+
type: Input
|
|
87
|
+
}], finishEdit: [{
|
|
88
|
+
type: Output
|
|
89
|
+
}], cancelEdit: [{
|
|
90
|
+
type: Output
|
|
91
|
+
}] } });
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90LWNlbGwtZWRpdG9yLWFkdmFuY2VkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2hvdC10YWJsZS9zcmMvbGliL2VkaXRvci9ob3QtY2VsbC1lZGl0b3ItYWR2YW5jZWQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUtwRjs7R0FFRztBQUVILE1BQU0sT0FBZ0IsOEJBQThCO0lBQ2xELE1BQU0sQ0FBVSxhQUFhLEdBQUcsTUFBTSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7SUFFekUsd0VBQXdFO0lBQy9CLHdCQUF3QixHQUFHLEdBQUcsQ0FBQztJQUV4RSx1RUFBdUU7SUFDL0IsdUJBQXVCLEdBQUcsR0FBRyxDQUFDO0lBRXRFLDhDQUE4QztJQUNyQyxHQUFHLENBQVM7SUFFckIsaURBQWlEO0lBQ3hDLE1BQU0sQ0FBUztJQUV4QixrREFBa0Q7SUFDekMsSUFBSSxDQUFrQjtJQUUvQixtREFBbUQ7SUFDMUMsYUFBYSxDQUFJO0lBRTFCLG9EQUFvRDtJQUMzQyxjQUFjLENBQWlCO0lBRXhDOztPQUVHO0lBQ08sVUFBVSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFFaEQ7O09BRUc7SUFDTyxVQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztJQUVoRCx1Q0FBdUM7SUFDN0IsS0FBSyxDQUFJO0lBRW5COztPQUVHO0lBQ0gsT0FBTyxDQUFDLE1BQTBCLElBQVMsQ0FBQztJQUU1Qzs7O09BR0c7SUFDSCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxRQUFRLENBQUMsS0FBUTtRQUNmLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxtR0FBbUc7SUFDbkcsUUFBUSxHQUEyQixXQUFXLENBQUM7SUFFL0MsMEVBQTBFO0lBQzFFLFNBQVMsQ0FBNEI7SUFFckMsbUVBQW1FO0lBQ25FLGNBQWMsQ0FBVTtJQUV4QixpREFBaUQ7SUFDakQsTUFBTSxDQUFPO0lBRWIsbUZBQW1GO0lBQ25GLFNBQVMsQ0FBQyxNQUF5QixFQUFFLEtBQWEsSUFBUyxDQUFDO0lBRTVELG9GQUFvRjtJQUNwRixVQUFVLENBQUMsTUFBeUIsSUFBUyxDQUFDO0lBRTlDLHdGQUF3RjtJQUN4RixTQUFTLENBQUMsTUFBeUIsSUFBUyxDQUFDO0lBRTdDLHFGQUFxRjtJQUNyRixVQUFVLENBQ1IsTUFBeUIsRUFDekIsRUFDRSxHQUFHLEVBQ0gsR0FBRyxFQUNILElBQUksRUFDSixFQUFFLEVBQ0YsYUFBYSxFQUNiLGNBQWMsR0FRZixJQUNNLENBQUM7d0dBakdVLDhCQUE4Qjs0RkFBOUIsOEJBQThCOzs0RkFBOUIsOEJBQThCO2tCQURuRCxTQUFTOzhCQUtpQyx3QkFBd0I7c0JBQWhFLFdBQVc7dUJBQUMsZ0JBQWdCO2dCQUdXLHVCQUF1QjtzQkFBOUQsV0FBVzt1QkFBQyxlQUFlO2dCQUduQixHQUFHO3NCQUFYLEtBQUs7Z0JBR0csTUFBTTtzQkFBZCxLQUFLO2dCQUdHLElBQUk7c0JBQVosS0FBSztnQkFHRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBS0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFLRyxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFeHRlbmRlZEVkaXRvciB9IGZyb20gJ2hhbmRzb250YWJsZS9lZGl0b3JzL2ZhY3RvcnknO1xuaW1wb3J0IHsgQ2VsbFByb3BlcnRpZXMgfSBmcm9tICdoYW5kc29udGFibGUvc2V0dGluZ3MnO1xuaW1wb3J0IHsgS2V5Ym9hcmRTaG9ydGN1dENvbmZpZyB9IGZyb20gJy4vbW9kZWxzL2tleWJvYXJkLXNob3J0Y3V0LWNvbmZpZyc7XG5cbi8qKlxuICogQWJzdHJhY3QgY2xhc3MgcmVwcmVzZW50aW5nIGEgSGFuZHNvbnRhYmxlIGVkaXRvciBpbiBhbmd1bGFyLlxuICovXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBIb3RDZWxsRWRpdG9yQWR2YW5jZWRDb21wb25lbnQ8VCBleHRlbmRzIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgQXJyYXk8YW55Pj4ge1xuICBzdGF0aWMgcmVhZG9ubHkgRURJVE9SX01BUktFUiA9IFN5bWJvbCgnSG90Q2VsbEVkaXRvckFkdmFuY2VkQ29tcG9uZW50Jyk7XG5cbiAgLyoqIFRoZSBoZWlnaHQgb2YgdGhlIGVkaXRvciBhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIHBhcmVudCBjb250YWluZXIuICovXG4gIEBIb3N0QmluZGluZygnc3R5bGUuaGVpZ2h0LiUnKSBwcm90ZWN0ZWQgaGVpZ2h0Rml0UGFyZW50Q29udGFpbmVyID0gMTAwO1xuXG4gIC8qKiBUaGUgd2lkdGggb2YgdGhlIGVkaXRvciBhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIHBhcmVudCBjb250YWluZXIuICovXG4gIEBIb3N0QmluZGluZygnc3R5bGUud2lkdGguJScpIHByb3RlY3RlZCB3aWR0aEZpdFBhcmVudENvbnRhaW5lciA9IDEwMDtcblxuICAvKiogVGhlIHJvdyBpbmRleCBvZiB0aGUgY2VsbCBiZWluZyBlZGl0ZWQuICovXG4gIEBJbnB1dCgpIHJvdzogbnVtYmVyO1xuXG4gIC8qKiBUaGUgY29sdW1uIGluZGV4IG9mIHRoZSBjZWxsIGJlaW5nIGVkaXRlZC4gKi9cbiAgQElucHV0KCkgY29sdW1uOiBudW1iZXI7XG5cbiAgLyoqIFRoZSBwcm9wZXJ0eSBuYW1lIG9mIHRoZSBjZWxsIGJlaW5nIGVkaXRlZC4gKi9cbiAgQElucHV0KCkgcHJvcDogc3RyaW5nIHwgbnVtYmVyO1xuXG4gIC8qKiBUaGUgb3JpZ2luYWwgdmFsdWUgb2YgdGhlIGNlbGwgYmVpbmcgZWRpdGVkLiAqL1xuICBASW5wdXQoKSBvcmlnaW5hbFZhbHVlOiBUO1xuXG4gIC8qKiBUaGUgY2VsbCBwcm9wZXJ0aWVzIG9mIHRoZSBjZWxsIGJlaW5nIGVkaXRlZC4gKi9cbiAgQElucHV0KCkgY2VsbFByb3BlcnRpZXM6IENlbGxQcm9wZXJ0aWVzO1xuXG4gIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGVkaXQgaXMgZmluaXNoZWQuXG4gICAqIFRoZSBkYXRhIHdpbGwgYmUgc2F2ZWQgdG8gdGhlIG1vZGVsLlxuICAgKi9cbiAgQE91dHB1dCgpIGZpbmlzaEVkaXQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgZWRpdCBpcyBjYW5jZWxlZC5cbiAgICogVGhlIGVudGVyZWQgZGF0YSB3aWxsIGJlIHJldmVydGVkIHRvIHRoZSBvcmlnaW5hbCB2YWx1ZS5cbiAgICovXG4gIEBPdXRwdXQoKSBjYW5jZWxFZGl0ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKiBUaGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZWRpdG9yLiAqL1xuICBwcm90ZWN0ZWQgdmFsdWU6IFQ7XG5cbiAgLyoqIEV2ZW50IHRyaWdnZXJlZCBieSBIYW5kc29udGFibGUgb24gZm9jdXMgdGhlIGVkaXRvci5cbiAgICogVGhlIHVzZXIgaGF2ZSB0byBkZWZpbmUgZm9jdXMgbG9naWMuXG4gICAqL1xuICBvbkZvY3VzKGVkaXRvcj86IEV4dGVuZGVkRWRpdG9yPFQ+KTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBlZGl0b3IuXG4gICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBlZGl0b3IuXG4gICAqL1xuICBnZXRWYWx1ZSgpOiBUIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBlZGl0b3IuXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICAgKi9cbiAgc2V0VmFsdWUodmFsdWU6IFQpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICAvKiogVGhlIHBvc2l0aW9uIG9mIHRoZSBlZGl0b3IgaW4gdGhlIERPTS4gVXNlZCBieSBIYW5kc29udGFibGUgQVBJLiBBdmFpbGFibGUgaW4gYWR2YW5jZWQgbW9kZS4gKi9cbiAgcG9zaXRpb246ICdjb250YWluZXInIHwgJ3BvcnRhbCcgPSAnY29udGFpbmVyJztcblxuICAvKiogVGhlIHNob3J0Y3V0cyBhdmFpbGFibGUgZm9yIHRoZSBlZGl0b3IuIEF2YWlsYWJsZSBpbiBhZHZhbmNlZCBtb2RlLiAqL1xuICBzaG9ydGN1dHM/OiBLZXlib2FyZFNob3J0Y3V0Q29uZmlnW107XG5cbiAgLyoqIFRoZSBncm91cCBuYW1lIGZvciB0aGUgc2hvcnRjdXRzLiBBdmFpbGFibGUgaW4gYWR2YW5jZWQgbW9kZS4qL1xuICBzaG9ydGN1dHNHcm91cD86IHN0cmluZztcblxuICAvKiogQ29uZmlndXJhdGlvbi4gQXZhaWxhYmxlIGluIGFkdmFuY2VkIG1vZGUuICovXG4gIGNvbmZpZz86IGFueTtcblxuICAvKiogTGlmZWN5Y2xlIGhvb2sgY2FsbGVkIGFmdGVyIHRoZSBlZGl0b3IgaXMgb3BlbmVkLiBBdmFpbGFibGUgaW4gYWR2YW5jZWQgbW9kZS4qL1xuICBhZnRlck9wZW4oZWRpdG9yOiBFeHRlbmRlZEVkaXRvcjxUPiwgZXZlbnQ/OiBFdmVudCk6IHZvaWQge31cblxuICAvKiogTGlmZWN5Y2xlIGhvb2sgY2FsbGVkIGFmdGVyIHRoZSBlZGl0b3IgaXMgY2xvc2VkLiBBdmFpbGFibGUgaW4gYWR2YW5jZWQgbW9kZS4gKi9cbiAgYWZ0ZXJDbG9zZShlZGl0b3I6IEV4dGVuZGVkRWRpdG9yPFQ+KTogdm9pZCB7fVxuXG4gIC8qKiBMaWZlY3ljbGUgaG9vayBjYWxsZWQgYWZ0ZXIgdGhlIGVkaXRvciBpcyBpbml0aWFsaXplZC4gQXZhaWxhYmxlIGluIGFkdmFuY2VkIG1vZGUuKi9cbiAgYWZ0ZXJJbml0KGVkaXRvcjogRXh0ZW5kZWRFZGl0b3I8VD4pOiB2b2lkIHt9XG5cbiAgLyoqIExpZmVjeWNsZSBob29rIGNhbGxlZCBiZWZvcmUgdGhlIGVkaXRvciBpcyBvcGVuZWQuIEF2YWlsYWJsZSBpbiBhZHZhbmNlZCBtb2RlLiAqL1xuICBiZWZvcmVPcGVuKFxuICAgIGVkaXRvcjogRXh0ZW5kZWRFZGl0b3I8VD4sXG4gICAge1xuICAgICAgcm93LFxuICAgICAgY29sLFxuICAgICAgcHJvcCxcbiAgICAgIHRkLFxuICAgICAgb3JpZ2luYWxWYWx1ZSxcbiAgICAgIGNlbGxQcm9wZXJ0aWVzLFxuICAgIH06IHtcbiAgICAgIHJvdzogbnVtYmVyO1xuICAgICAgY29sOiBudW1iZXI7XG4gICAgICBwcm9wOiBzdHJpbmcgfCBudW1iZXI7XG4gICAgICB0ZDogSFRNTFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICBvcmlnaW5hbFZhbHVlOiBhbnk7XG4gICAgICBjZWxsUHJvcGVydGllczogQ2VsbFByb3BlcnRpZXM7XG4gICAgfVxuICApOiB2b2lkIHt9XG59XG4iXX0=
|