@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.
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1lZGl0b3ItYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2hvdC10YWJsZS9zcmMvbGliL2VkaXRvci9iYXNlLWVkaXRvci1hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sWUFBWSxNQUFNLG1CQUFtQixDQUFDO0FBQzdDLE9BQU8sRUFFTCxlQUFlLEdBRWhCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBSXpGLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0Qzs7R0FFRztBQUNILE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVU7SUFDcEUsZ0RBQWdEO0lBQ3hDLGFBQWEsQ0FBNkM7SUFFbEUscURBQXFEO0lBQzdDLHFCQUFxQixDQUFpRDtJQUU5RSx3REFBd0Q7SUFDaEQsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0lBRXBDLDhDQUE4QztJQUN0Qyx1QkFBdUIsQ0FBZ0I7SUFFL0MsOENBQThDO0lBQ3RDLHVCQUF1QixDQUFnQjtJQUUvQzs7O09BR0c7SUFDSCxZQUFZLFFBQTJCO1FBQ3JDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVoQixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNNLE9BQU8sQ0FDZCxHQUFXLEVBQ1gsTUFBYyxFQUNkLElBQXFCLEVBQ3JCLEVBQXdCLEVBQ3hCLGFBQWtCLEVBQ2xCLGNBQTJDO1FBRTNDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDcEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQ3BFLE1BQU0sVUFBVSxHQUEyQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FDL0QsTUFBTSxDQUNtQixDQUFDO1lBRTVCLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7Z0JBQzdCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFDOUQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQzthQUNqQztZQUVELElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDLHlCQUF5QixDQUFDO1lBRTFELElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFO2dCQUNoQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQzNDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxTQUFTLENBQUM7YUFDMUM7WUFFRCxJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtnQkFDaEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUMzQyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsU0FBUyxDQUFDO2FBQzFDO1lBRUQsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFVBQVU7aUJBQ2xFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ2IsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkIsQ0FBQyxDQUFDLENBQUM7WUFFTCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsVUFBVTtpQkFDbEUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDYixTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSztRQUNILElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ25CLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM3RCxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ25ELElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ3ZDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSztRQUNILElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsSUFBSSxDQUFDLEtBQWE7UUFDaEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsUUFBUSxDQUFDLFFBQWM7UUFDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkQsQ0FBQztJQUVEOztPQUVHO0lBQ0ssa0JBQWtCO1FBQ3hCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRXRDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRTtZQUM1QixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDNUM7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUVuRSxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMvRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssdUJBQXVCLENBQUMsUUFBNkI7UUFDM0QsSUFBSSxDQUFDLHFCQUFxQixHQUFHLGVBQWUsQ0FDMUMsZ0NBQWdDLEVBQ2hDO1lBQ0UsbUJBQW1CLEVBQUUsUUFBK0I7U0FDckQsQ0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUM5QixJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FDbEQsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSyxtQkFBbUI7UUFDekIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDbkIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7U0FDM0I7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssZ0JBQWdCO1FBQ3RCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ25CLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1NBQzNCO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssY0FBYztRQUNwQixJQUFJLENBQUMscUJBQXFCLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxnQkFBZ0I7UUFDdEIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDakUsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEhhbmRzb250YWJsZSBmcm9tICdoYW5kc29udGFibGUvYmFzZSc7XG5pbXBvcnQge1xuICBDb21wb25lbnRSZWYsXG4gIGNyZWF0ZUNvbXBvbmVudCxcbiAgRW52aXJvbm1lbnRJbmplY3Rvcixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDdXN0b21FZGl0b3JQbGFjZWhvbGRlckNvbXBvbmVudCB9IGZyb20gJy4vY3VzdG9tLWVkaXRvci1wbGFjZWhvbGRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29sdW1uU2V0dGluZ3NJbnRlcm5hbCB9IGZyb20gJy4uL21vZGVscy9jb2x1bW4tc2V0dGluZ3MnO1xuaW1wb3J0IHsgSG90Q2VsbEVkaXRvckNvbXBvbmVudCB9IGZyb20gJy4vaG90LWNlbGwtZWRpdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbi8qKlxuICogQWRhcHRlciBmb3IgQmFzZUVkaXRvciBmcm9tIEhhbmRzb250YWJsZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEJhc2VFZGl0b3JBZGFwdGVyIGV4dGVuZHMgSGFuZHNvbnRhYmxlLmVkaXRvcnMuQmFzZUVkaXRvciB7XG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIGN1c3RvbSBlZGl0b3IgY29tcG9uZW50LiAqL1xuICBwcml2YXRlIF9jb21wb25lbnRSZWY/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLWZhY3RvcnktYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2hvdC10YWJsZS9zcmMvbGliL2VkaXRvci9lZGl0b3ItZmFjdG9yeS1hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsZUFBZSxFQUF1QixNQUFNLGVBQWUsQ0FBQztBQUNuRixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUV6RixPQUFPLEVBQUUsYUFBYSxFQUFrQixNQUFNLDhCQUE4QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVN0Qzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLFlBQStELEVBQUUsRUFBRSxDQUN0RyxhQUFhLENBQXNCO0lBQ2pDLFFBQVEsRUFBRSxZQUFZLENBQUMsUUFBUSxDQUFDLFFBQVE7SUFDeEMsU0FBUyxFQUFFLFlBQVksQ0FBQyxRQUFRLENBQUMsU0FBUztJQUMxQyxNQUFNLEVBQUUsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNO0lBQ3BDLElBQUksQ0FBQyxNQUFzQjtRQUN6QixNQUFNLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQztRQUNwQyxNQUFNLENBQUMscUJBQXFCLEdBQUcsU0FBUyxDQUFDO1FBQ3pDLE1BQU0sQ0FBQyx1QkFBdUIsR0FBRyxTQUFTLENBQUM7UUFDM0MsTUFBTSxDQUFDLHVCQUF1QixHQUFHLFNBQVMsQ0FBQztRQUUzQyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUcsTUFBTSxDQUFDLEdBQVcsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQ2pGLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUM7UUFFbkUsTUFBTSxDQUFDLHVCQUF1QixHQUFHLEdBQVMsRUFBRTtZQUMxQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDckIsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDNUI7UUFDSCxDQUFDLENBQUM7UUFFRixNQUFNLENBQUMsMEJBQTBCLEdBQUcsR0FBUyxFQUFFO1lBQzdDLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUNyQixrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUM1QjtRQUNILENBQUMsQ0FBQztRQUVGLE1BQU0sQ0FBQyxxQkFBcUIsR0FBRyxHQUFTLEVBQUU7WUFDeEMsSUFBSSxNQUFNLENBQUMscUJBQXFCLEVBQUU7Z0JBQ2hDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUN4QztRQUNILENBQUMsQ0FBQztRQUVGLG1FQUFtRTtRQUNuRSxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUNyRSxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxNQUFNLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUMzRSxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELFNBQVMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFDO0lBQ3hFLFVBQVUsRUFBRSxDQUFDLE1BQXNCLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDOUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFN0Isa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFM0IsTUFBTSxDQUFDLHVCQUF1QixHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQVMsRUFBRTtZQUMzRyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsdUJBQXVCLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBUyxFQUFFO1lBQzNHLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBQ0QsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQzNCLE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBQ0QsT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDcEUsVUFBVSxFQUFFLENBQUMsTUFBc0IsRUFBRSxFQUFFO1FBQ3JDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMvRCxNQUFNLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3JELE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFDRCxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtJQUM5RCxRQUFRLEVBQUUsQ0FBQyxNQUFzQixFQUFFLEtBQUssRUFBRSxFQUFFO1FBQzFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxNQUFNLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3pELENBQUM7Q0FDRixDQUFDLENBQUM7QUFFTDs7OztHQUlHO0FBQ0gsU0FBUyx1QkFBdUIsQ0FBQyxNQUFzQixFQUFFLFFBQXlDO0lBQ2hHLElBQUksQ0FBQyxRQUFRLEVBQUU7UUFDYixPQUFPO0tBQ1I7SUFFRCxNQUFNLENBQUMscUJBQXFCLEdBQUcsZUFBZSxDQUFDLGdDQUFnQyxFQUFFO1FBQy9FLG1CQUFtQixFQUFFLFFBQVE7S0FDOUIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLGtCQUFrQixDQUFDLE1BQXNCO0lBQ2hELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQixFQUFFO1FBQzFELE9BQU87S0FDUjtJQUVELE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDckUsTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqRCxNQUFNLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRXZFLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLHFCQUFxQixFQUFFLENBQUM7SUFFakYsTUFBTSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNwRSxNQUFNLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0QsTUFBTSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNELE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3pELE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUU1RSxNQUFNLENBQUMscUJBQXFCLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDakUsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLGdCQUFnQixDQUFDLE1BQXNCO0lBQzlDLElBQUksQ0FBQyxNQUFNLENBQUMscUJBQXFCLEVBQUU7UUFDakMsT0FBTztLQUNSO0lBRUQsTUFBTSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDeEQsTUFBTSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDekQsTUFBTSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDM0QsTUFBTSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDMUQsTUFBTSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDMUQsTUFBTSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDbkUsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsb0JBQW9CLENBQUMsTUFBc0I7SUFDbEQsSUFBSSxNQUFNLENBQUMsdUJBQXVCLEVBQUU7UUFDbEMsTUFBTSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzdDLE1BQU0sQ0FBQyx1QkFBdUIsR0FBRyxTQUFTLENBQUM7S0FDNUM7SUFFRCxJQUFJLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRTtRQUNsQyxNQUFNLENBQUMsdUJBQXVCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDN0MsTUFBTSxDQUFDLHVCQUF1QixHQUFHLFNBQVMsQ0FBQztLQUM1QztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRSZWYsIGNyZWF0ZUNvbXBvbmVudCwgRW52aXJvbm1lbnRJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ3VzdG9tRWRpdG9yUGxhY2Vob2xkZXJDb21wb25lbnQgfSBmcm9tICcuL2N1c3RvbS1lZGl0b3ItcGxhY2Vob2xkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEFuZ3VsYXJFZGl0b3JQcm9wZXJ0aWVzIH0gZnJvbSAnLi9tb2RlbHMvZmFjdG9yeS1lZGl0b3ItcHJvcGVydGllcyc7XG5pbXBvcnQgeyBlZGl0b3JGYWN0b3J5LCBFeHRlbmRlZEVkaXRvciB9IGZyb20gJ2hhbmRzb250YWJsZS9lZGl0b3JzL2ZhY3RvcnknO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEhvdENlbGxFZGl0b3JBZHZhbmNlZENvbXBvbmVudCB9IGZyb20gJy4vaG90LWNlbGwtZWRpdG9yLWFkdmFuY2VkLmNvbXBvbmVudCc7XG5cbi8qKlxuICogQ29tYmluZWQgdHlwZSByZXByZXNlbnRpbmcgYW4gZXh0ZW5kZWQgZWRpdG9yIHdpdGggQW5ndWxhciBjb21wb25lbnQgcHJvcGVydGllcy5cbiAqIFVzZWQgaW50ZXJuYWxseSBieSB0aGUgZmFjdG9yeSBhZGFwdGVyIHRvIGJyaWRnZSBBbmd1bGFyIGFuZCBIYW5kc29udGFibGUuXG4gKi9cbnR5cGUgRWRpdG9ySW5zdGFuY2UgPSBFeHRlbmRlZEVkaXRvcjxBbmd1bGFyRWRpdG9yUHJvcGVydGllcyAmIEhvdENlbGxFZGl0b3JBZHZhbmNlZENvbXBvbmVudDxhbnk+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=