@handsontable/angular-wrapper 17.0.1 → 17.1.0-rc3
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/fesm2022/handsontable-angular-wrapper.mjs +51 -42
- 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
- package/esm2022/handsontable-angular-wrapper.mjs +0 -5
- package/esm2022/lib/editor/base-editor-adapter.mjs +0 -180
- package/esm2022/lib/editor/custom-editor-placeholder.component.mjs +0 -89
- package/esm2022/lib/editor/editor-factory-adapter.mjs +0 -140
- package/esm2022/lib/editor/hot-cell-editor-advanced.component.mjs +0 -92
- package/esm2022/lib/editor/hot-cell-editor.component.mjs +0 -95
- package/esm2022/lib/editor/models/factory-editor-properties.mjs +0 -2
- package/esm2022/lib/editor/models/keyboard-shortcut-config.mjs +0 -2
- package/esm2022/lib/hot-table.component.mjs +0 -157
- package/esm2022/lib/hot-table.module.mjs +0 -29
- package/esm2022/lib/models/column-settings.mjs +0 -2
- package/esm2022/lib/models/grid-settings.mjs +0 -2
- package/esm2022/lib/renderer/hot-cell-renderer-advanced.component.mjs +0 -55
- package/esm2022/lib/renderer/hot-cell-renderer.component.mjs +0 -55
- package/esm2022/lib/renderer/hot-dynamic-renderer-component.service.mjs +0 -203
- package/esm2022/lib/services/hot-global-config.service.mjs +0 -107
- package/esm2022/lib/services/hot-settings-resolver.service.mjs +0 -170
- package/esm2022/public-api.mjs +0 -14
|
@@ -1,203 +0,0 @@
|
|
|
1
|
-
import { createComponent, Injectable } from '@angular/core';
|
|
2
|
-
import { baseRenderer, registerRenderer, rendererFactory } from 'handsontable/renderers';
|
|
3
|
-
import Handsontable from 'handsontable/base';
|
|
4
|
-
import { HotCellRendererComponent } from './hot-cell-renderer.component';
|
|
5
|
-
import { HotCellRendererAdvancedComponent } from './hot-cell-renderer-advanced.component';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
export const INVALID_RENDERER_WARNING = 'The provided renderer component was not recognized as a valid custom renderer. ' +
|
|
8
|
-
'It must either extend HotCellRendererComponent or be a valid TemplateRef. ' +
|
|
9
|
-
'Please ensure that your custom renderer is implemented correctly and imported from the proper source.';
|
|
10
|
-
export const INVALID_ADVANCED_RENDERER_WARNING = 'The provided renderer component was not recognized as a valid custom renderer. ' +
|
|
11
|
-
'It must either extend HotCellRendererAdvancedComponent. ' +
|
|
12
|
-
'Please ensure that your custom renderer is implemented correctly and imported from the proper source.';
|
|
13
|
-
/**
|
|
14
|
-
* Type guard that checks if the given object is a TemplateRef.
|
|
15
|
-
*
|
|
16
|
-
* @param obj - The object to check.
|
|
17
|
-
* @returns True if the object is a TemplateRef; otherwise, false.
|
|
18
|
-
*/
|
|
19
|
-
export function isTemplateRef(obj) {
|
|
20
|
-
return obj && typeof obj.createEmbeddedView === 'function';
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Type guard to check if an object is an instance of HotCellRendererComponent.
|
|
24
|
-
*
|
|
25
|
-
* @param obj - The object to check.
|
|
26
|
-
* @returns True if the object is a HotCellRendererComponent, false otherwise.
|
|
27
|
-
*/
|
|
28
|
-
export function isHotCellRendererComponent(obj) {
|
|
29
|
-
return obj?.RENDERER_MARKER === HotCellRendererComponent.RENDERER_MARKER;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Type guard to check if an object is an instance of HotCellRendererAdvancedComponent.
|
|
33
|
-
*
|
|
34
|
-
* @param obj - The object to check.
|
|
35
|
-
* @returns True if the object is a HotCellRendererAdvancedComponent, false otherwise.
|
|
36
|
-
*/
|
|
37
|
-
export function isAdvancedHotCellRendererComponent(obj) {
|
|
38
|
-
return obj?.RENDERER_MARKER === HotCellRendererAdvancedComponent.RENDERER_MARKER;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Service for dynamically creating Angular components or templates as custom renderers for Handsontable.
|
|
42
|
-
*
|
|
43
|
-
* This service allows you to create a renderer function that wraps a given Angular component or TemplateRef
|
|
44
|
-
* so that it can be used as a Handsontable renderer.
|
|
45
|
-
*
|
|
46
|
-
* @example
|
|
47
|
-
* const customRenderer = dynamicComponentService.createRendererFromComponent(MyRendererComponent, { someProp: value });
|
|
48
|
-
* // Use customRenderer in your Handsontable configuration
|
|
49
|
-
*/
|
|
50
|
-
export class DynamicComponentService {
|
|
51
|
-
appRef;
|
|
52
|
-
environmentInjector;
|
|
53
|
-
constructor(appRef, environmentInjector) {
|
|
54
|
-
this.appRef = appRef;
|
|
55
|
-
this.environmentInjector = environmentInjector;
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Creates a custom renderer function for Handsontable from an Angular component or TemplateRef.
|
|
59
|
-
* The generated renderer function will be used by Handsontable to render cell content.
|
|
60
|
-
*
|
|
61
|
-
* @param component - The Angular component type or TemplateRef to use as renderer.
|
|
62
|
-
* @param componentProps - An object containing additional properties to use by the renderer.
|
|
63
|
-
* @param register - If true, registers the renderer with Handsontable using the component's name.
|
|
64
|
-
* @returns A renderer function that can be used in Handsontable's configuration.
|
|
65
|
-
*/
|
|
66
|
-
createRendererFromComponent(component, componentProps = {}, register = false) {
|
|
67
|
-
return (instance, td, row, col, prop, value, cellProperties) => {
|
|
68
|
-
const properties = {
|
|
69
|
-
value,
|
|
70
|
-
instance,
|
|
71
|
-
td,
|
|
72
|
-
row,
|
|
73
|
-
col,
|
|
74
|
-
prop,
|
|
75
|
-
cellProperties,
|
|
76
|
-
};
|
|
77
|
-
if (componentProps) {
|
|
78
|
-
Object.assign(cellProperties, { rendererProps: componentProps });
|
|
79
|
-
}
|
|
80
|
-
const rendererParameters = [instance, td, row, col, prop, value, cellProperties];
|
|
81
|
-
baseRenderer.apply(this, rendererParameters);
|
|
82
|
-
td.innerHTML = '';
|
|
83
|
-
if (isTemplateRef(component)) {
|
|
84
|
-
this.attachTemplateToElement(component, td, properties);
|
|
85
|
-
}
|
|
86
|
-
else if (isHotCellRendererComponent(component)) {
|
|
87
|
-
const componentRef = this.createComponent(component, properties);
|
|
88
|
-
this.attachComponentToElement(componentRef, td);
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
console.warn(INVALID_RENDERER_WARNING);
|
|
92
|
-
}
|
|
93
|
-
if (register && isHotCellRendererComponent(component)) {
|
|
94
|
-
Handsontable.renderers.registerRenderer(component.constructor.name, component);
|
|
95
|
-
}
|
|
96
|
-
return td;
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Creates a custom renderer function using rendererFactory from Handsontable.
|
|
101
|
-
* This is an alternative implementation that uses the factory pattern.
|
|
102
|
-
*
|
|
103
|
-
* @param component - The Angular component type to use as renderer.
|
|
104
|
-
* @param componentProps - An object containing additional properties to use by the renderer.
|
|
105
|
-
* @param register - If true, registers the renderer with Handsontable using the component's name.
|
|
106
|
-
* @returns A renderer function that can be used in Handsontable's configuration.
|
|
107
|
-
*/
|
|
108
|
-
createRendererWithFactory(component, componentProps = {}, register = false) {
|
|
109
|
-
return rendererFactory(({ instance, td, row, column, prop, value, cellProperties }) => {
|
|
110
|
-
const properties = {
|
|
111
|
-
value,
|
|
112
|
-
instance,
|
|
113
|
-
td,
|
|
114
|
-
row,
|
|
115
|
-
col: column,
|
|
116
|
-
prop,
|
|
117
|
-
cellProperties,
|
|
118
|
-
};
|
|
119
|
-
if (componentProps) {
|
|
120
|
-
Object.assign(cellProperties, { rendererProps: componentProps });
|
|
121
|
-
}
|
|
122
|
-
td.innerHTML = '';
|
|
123
|
-
if (isAdvancedHotCellRendererComponent(component)) {
|
|
124
|
-
const componentRef = this.createComponent(component, properties);
|
|
125
|
-
this.attachComponentToElement(componentRef, td);
|
|
126
|
-
}
|
|
127
|
-
else {
|
|
128
|
-
console.warn(INVALID_ADVANCED_RENDERER_WARNING);
|
|
129
|
-
}
|
|
130
|
-
if (register && isAdvancedHotCellRendererComponent(component)) {
|
|
131
|
-
registerRenderer(component.constructor.name, component);
|
|
132
|
-
}
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Attaches an embedded view created from a TemplateRef to a given DOM element.
|
|
137
|
-
*
|
|
138
|
-
* @param template - The TemplateRef to create an embedded view from.
|
|
139
|
-
* @param tdEl - The target DOM element (a table cell) to which the view will be appended.
|
|
140
|
-
* @param properties - Context object providing properties to be used within the template.
|
|
141
|
-
*/
|
|
142
|
-
attachTemplateToElement(template, tdEl, properties) {
|
|
143
|
-
const embeddedView = template.createEmbeddedView({
|
|
144
|
-
$implicit: properties.value,
|
|
145
|
-
...properties,
|
|
146
|
-
});
|
|
147
|
-
embeddedView.detectChanges();
|
|
148
|
-
embeddedView.rootNodes.forEach((node) => {
|
|
149
|
-
tdEl.appendChild(node);
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Dynamically creates an Angular component of the given type.
|
|
154
|
-
*
|
|
155
|
-
* @param component - The Angular component type to be created.
|
|
156
|
-
* @param rendererParameters - An object containing input properties to assign to the component instance.
|
|
157
|
-
* @returns The ComponentRef of the dynamically created component.
|
|
158
|
-
*/
|
|
159
|
-
createComponent(component, rendererParameters) {
|
|
160
|
-
const componentRef = createComponent(component, {
|
|
161
|
-
environmentInjector: this.environmentInjector,
|
|
162
|
-
});
|
|
163
|
-
Object.keys(rendererParameters).forEach((key) => {
|
|
164
|
-
if (rendererParameters.hasOwnProperty(key)) {
|
|
165
|
-
componentRef.setInput(key, rendererParameters[key]);
|
|
166
|
-
}
|
|
167
|
-
else {
|
|
168
|
-
console.warn(`Input property "${key}" does not exist on component instance: ${component?.name}.`);
|
|
169
|
-
}
|
|
170
|
-
});
|
|
171
|
-
componentRef.changeDetectorRef.detectChanges();
|
|
172
|
-
this.appRef.attachView(componentRef.hostView);
|
|
173
|
-
return componentRef;
|
|
174
|
-
}
|
|
175
|
-
/**
|
|
176
|
-
* Attaches a dynamically created component's view to a specified DOM container element.
|
|
177
|
-
*
|
|
178
|
-
* @param componentRef - The reference to the dynamically created component.
|
|
179
|
-
* @param container - The target DOM element to which the component's root node will be appended.
|
|
180
|
-
*/
|
|
181
|
-
attachComponentToElement(componentRef, container) {
|
|
182
|
-
const domElem = componentRef.hostView.rootNodes[0];
|
|
183
|
-
container.appendChild(domElem);
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* Destroys a dynamically created component and detaches its view from the Angular application.
|
|
187
|
-
*
|
|
188
|
-
* @param componentRef - The reference to the component to be destroyed.
|
|
189
|
-
*/
|
|
190
|
-
destroyComponent(componentRef) {
|
|
191
|
-
this.appRef.detachView(componentRef.hostView);
|
|
192
|
-
componentRef.destroy();
|
|
193
|
-
}
|
|
194
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DynamicComponentService, deps: [{ token: i0.ApplicationRef }, { token: i0.EnvironmentInjector }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
195
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DynamicComponentService, providedIn: 'root' });
|
|
196
|
-
}
|
|
197
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DynamicComponentService, decorators: [{
|
|
198
|
-
type: Injectable,
|
|
199
|
-
args: [{
|
|
200
|
-
providedIn: 'root',
|
|
201
|
-
}]
|
|
202
|
-
}], ctorParameters: function () { return [{ type: i0.ApplicationRef }, { type: i0.EnvironmentInjector }]; } });
|
|
203
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90LWR5bmFtaWMtcmVuZGVyZXItY29tcG9uZW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ob3QtdGFibGUvc3JjL2xpYi9yZW5kZXJlci9ob3QtZHluYW1pYy1yZW5kZXJlci1jb21wb25lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsZUFBZSxFQUdmLFVBQVUsRUFHWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFnQixnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RyxPQUFPLFlBQVksTUFBTSxtQkFBbUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7QUFJMUYsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQ25DLGlGQUFpRjtJQUNqRiw0RUFBNEU7SUFDNUUsdUdBQXVHLENBQUM7QUFFMUcsTUFBTSxDQUFDLE1BQU0saUNBQWlDLEdBQzVDLGlGQUFpRjtJQUNqRiwwREFBMEQ7SUFDMUQsdUdBQXVHLENBQUM7QUFlMUc7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUFJLEdBQVE7SUFDdkMsT0FBTyxHQUFHLElBQUksT0FBTyxHQUFHLENBQUMsa0JBQWtCLEtBQUssVUFBVSxDQUFDO0FBQzdELENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSwwQkFBMEIsQ0FBQyxHQUFRO0lBQ2pELE9BQU8sR0FBRyxFQUFFLGVBQWUsS0FBSyx3QkFBd0IsQ0FBQyxlQUFlLENBQUM7QUFDM0UsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGtDQUFrQyxDQUFDLEdBQVE7SUFDekQsT0FBTyxHQUFHLEVBQUUsZUFBZSxLQUFLLGdDQUFn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QUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDckQ7aUJBQU07Z0JBQ0wsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsR0FBRywyQ0FBMkMsU0FBUyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUM7YUFDbkc7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUUvQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFOUMsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssd0JBQXdCLENBQUksWUFBNkIsRUFBRSxTQUFzQjtRQUN2RixNQUFNLE9BQU8sR0FBSSxZQUFZLENBQUMsUUFBK0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFnQixDQUFDO1FBQzFGLFNBQVMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxnQkFBZ0IsQ0FBSSxZQUE2QjtRQUMvQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3pCLENBQUM7d0dBdExVLHVCQUF1Qjs0R0FBdkIsdUJBQXVCLGNBRnRCLE1BQU07OzRGQUVQLHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBcHBsaWNhdGlvblJlZixcbiAgQ29tcG9uZW50UmVmLFxuICBjcmVhdGVDb21wb25lbnQsXG4gIEVtYmVkZGVkVmlld1JlZixcbiAgRW52aXJvbm1lbnRJbmplY3RvcixcbiAgSW5qZWN0YWJsZSxcbiAgVGVtcGxhdGVSZWYsXG4gIFR5cGVcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBiYXNlUmVuZGVyZXIsIEJhc2VSZW5kZXJlciwgcmVnaXN0ZXJSZW5kZXJlciwgcmVuZGVyZXJGYWN0b3J5IH0gZnJvbSAnaGFuZHNvbnRhYmxlL3JlbmRlcmVycyc7XG5pbXBvcnQgSGFuZHNvbnRhYmxlIGZyb20gJ2hhbmRzb250YWJsZS9iYXNlJztcbmltcG9ydCB7IEhvdENlbGxSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4vaG90LWNlbGwtcmVuZGVyZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEhvdENlbGxSZW5kZXJlckFkdmFuY2VkQ29tcG9uZW50IH0gZnJvbSAnLi9ob3QtY2VsbC1yZW5kZXJlci1hZHZhbmNlZC5jb21wb25lbnQnO1xuXG50eXBlIEJhc2VSZW5kZXJlclBhcmFtZXRlcnMgPSBQYXJhbWV0ZXJzPEJhc2VSZW5kZXJlcj47XG5cbmV4cG9ydCBjb25zdCBJTlZBTElEX1JFTkRFUkVSX1dBUk5JTkcgPVxuICAnVGhlIHByb3ZpZGVkIHJlbmRlcmVyIGNvbXBvbmVudCB3YXMgbm90IHJlY29nbml6ZWQgYXMgYSB2YWxpZCBjdXN0b20gcmVuZGVyZXIuICcgK1xuICAnSXQgbXVzdCBlaXRoZXIgZXh0ZW5kIEhvdENlbGxSZW5kZXJlckNvbXBvbmVudCBvciBiZSBhIHZhbGlkIFRlbXBsYXRlUmVmLiAnICtcbiAgJ1BsZWFzZSBlbnN1cmUgdGhhdCB5b3VyIGN1c3RvbSByZW5kZXJlciBpcyBpbXBsZW1lbnRlZCBjb3JyZWN0bHkgYW5kIGltcG9ydGVkIGZyb20gdGhlIHByb3BlciBzb3VyY2UuJztcblxuZXhwb3J0IGNvbnN0IElOVkFMSURfQURWQU5DRURfUkVOREVSRVJfV0FSTklORyA9XG4gICdUaGUgcHJvdmlkZWQgcmVuZGVyZXIgY29tcG9uZW50IHdhcyBub3QgcmVjb2duaXplZCBhcyBhIHZhbGlkIGN1c3RvbSByZW5kZXJlci4gJyArXG4gICdJdCBtdXN0IGVpdGhlciBleHRlbmQgSG90Q2VsbFJlbmRlcmVyQWR2YW5jZWRDb21wb25lbnQuICcgK1xuICAnUGxlYXNlIGVuc3VyZSB0aGF0IHlvdXIgY3VzdG9tIHJlbmRlcmVyIGlzIGltcGxlbWVudGVkIGNvcnJlY3RseSBhbmQgaW1wb3J0ZWQgZnJvbSB0aGUgcHJvcGVyIHNvdXJjZS4nO1xuXG4vKipcbiAqIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBhcmFtZXRlcnMgcGFzc2VkIHRvIGEgSGFuZHNvbnRhYmxlIHJlbmRlcmVyLlxuICovXG5pbnRlcmZhY2UgQmFzZVJlbmRlcmVyUGFyYW1ldGVyc09iamVjdCB7XG4gIGluc3RhbmNlOiBIYW5kc29udGFibGUuQ29yZTtcbiAgdGQ6IEhUTUxUYWJsZUNlbGxFbGVtZW50O1xuICByb3c6IG51bWJlcjtcbiAgY29sOiBudW1iZXI7XG4gIHByb3A6IHN0cmluZyB8IG51bWJlcjtcbiAgdmFsdWU6IGFueTtcbiAgY2VsbFByb3BlcnRpZXM6IEhhbmRzb250YWJsZS5DZWxsUHJvcGVydGllcztcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRoYXQgY2hlY2tzIGlmIHRoZSBnaXZlbiBvYmplY3QgaXMgYSBUZW1wbGF0ZVJlZi5cbiAqXG4gKiBAcGFyYW0gb2JqIC0gVGhlIG9iamVjdCB0byBjaGVjay5cbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIG9iamVjdCBpcyBhIFRlbXBsYXRlUmVmOyBvdGhlcndpc2UsIGZhbHNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNUZW1wbGF0ZVJlZjxUPihvYmo6IGFueSk6IG9iaiBpcyBUZW1wbGF0ZVJlZjxUPiB7XG4gIHJldHVybiBvYmogJiYgdHlwZW9mIG9iai5jcmVhdGVFbWJlZGRlZFZpZXcgPT09ICdmdW5jdGlvbic7XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaXMgYW4gaW5zdGFuY2Ugb2YgSG90Q2VsbFJlbmRlcmVyQ29tcG9uZW50LlxuICpcbiAqIEBwYXJhbSBvYmogLSBUaGUgb2JqZWN0IHRvIGNoZWNrLlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGEgSG90Q2VsbFJlbmRlcmVyQ29tcG9uZW50LCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0hvdENlbGxSZW5kZXJlckNvbXBvbmVudChvYmo6IGFueSk6IG9iaiBpcyBUeXBlPEhvdENlbGxSZW5kZXJlckNvbXBvbmVudD4ge1xuICByZXR1cm4gb2JqPy5SRU5ERVJFUl9NQVJLRVIgPT09IEhvdENlbGxSZW5kZXJlckNvbXBvbmVudC5SRU5ERVJFUl9NQVJLRVI7XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaXMgYW4gaW5zdGFuY2Ugb2YgSG90Q2VsbFJlbmRlcmVyQWR2YW5jZWRDb21wb25lbnQuXG4gKlxuICogQHBhcmFtIG9iaiAtIFRoZSBvYmplY3QgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBvYmplY3QgaXMgYSBIb3RDZWxsUmVuZGVyZXJBZHZhbmNlZENvbXBvbmVudCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBZHZhbmNlZEhvdENlbGxSZW5kZXJlckNvbXBvbmVudChvYmo6IGFueSk6IG9iaiBpcyBUeXBlPEhvdENlbGxSZW5kZXJlckFkdmFuY2VkQ29tcG9uZW50PiB7XG4gIHJldHVybiBvYmo/LlJFTkRFUkVSX01BUktFUiA9PT0gSG90Q2VsbFJlbmRlcmVyQWR2YW5jZWRDb21wb25lbnQuUkVOREVSRVJfTUFSS0VSO1xufVxuXG4vKipcbiAqIFNlcnZpY2UgZm9yIGR5bmFtaWNhbGx5IGNyZWF0aW5nIEFuZ3VsYXIgY29tcG9uZW50cyBvciB0ZW1wbGF0ZXMgYXMgY3VzdG9tIHJlbmRlcmVycyBmb3IgSGFuZHNvbnRhYmxlLlxuICpcbiAqIFRoaXMgc2VydmljZSBhbGxvd3MgeW91IHRvIGNyZWF0ZSBhIHJlbmRlcmVyIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYSBnaXZlbiBBbmd1bGFyIGNvbXBvbmVudCBvciBUZW1wbGF0ZVJlZlxuICogc28gdGhhdCBpdCBjYW4gYmUgdXNlZCBhcyBhIEhhbmRzb250YWJsZSByZW5kZXJlci5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgY3VzdG9tUmVuZGVyZXIgPSBkeW5hbWljQ29tcG9uZW50U2VydmljZS5jcmVhdGVSZW5kZXJlckZyb21Db21wb25lbnQoTXlSZW5kZXJlckNvbXBvbmVudCwgeyBzb21lUHJvcDogdmFsdWUgfSk7XG4gKiAvLyBVc2UgY3VzdG9tUmVuZGVyZXIgaW4geW91ciBIYW5kc29udGFibGUgY29uZmlndXJhdGlvblxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgRHluYW1pY0NvbXBvbmVudFNlcnZpY2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFwcFJlZjogQXBwbGljYXRpb25SZWYsIHByaXZhdGUgZW52aXJvbm1lbnRJbmplY3RvcjogRW52aXJvbm1lbnRJbmplY3Rvcikge31cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGN1c3RvbSByZW5kZXJlciBmdW5jdGlvbiBmb3IgSGFuZHNvbnRhYmxlIGZyb20gYW4gQW5ndWxhciBjb21wb25lbnQgb3IgVGVtcGxhdGVSZWYuXG4gICAqIFRoZSBnZW5lcmF0ZWQgcmVuZGVyZXIgZnVuY3Rpb24gd2lsbCBiZSB1c2VkIGJ5IEhhbmRzb250YWJsZSB0byByZW5kZXIgY2VsbCBjb250ZW50LlxuICAgKlxuICAgKiBAcGFyYW0gY29tcG9uZW50IC0gVGhlIEFuZ3VsYXIgY29tcG9uZW50IHR5cGUgb3IgVGVtcGxhdGVSZWYgdG8gdXNlIGFzIHJlbmRlcmVyLlxuICAgKiBAcGFyYW0gY29tcG9uZW50UHJvcHMgLSBBbiBvYmplY3QgY29udGFpbmluZyBhZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gdXNlIGJ5IHRoZSByZW5kZXJlci5cbiAgICogQHBhcmFtIHJlZ2lzdGVyIC0gSWYgdHJ1ZSwgcmVnaXN0ZXJzIHRoZSByZW5kZXJlciB3aXRoIEhhbmRzb250YWJsZSB1c2luZyB0aGUgY29tcG9uZW50J3MgbmFtZS5cbiAgICogQHJldHVybnMgQSByZW5kZXJlciBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIGluIEhhbmRzb250YWJsZSdzIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBjcmVhdGVSZW5kZXJlckZyb21Db21wb25lbnQoXG4gICAgY29tcG9uZW50OiBUeXBlPEhvdENlbGxSZW5kZXJlckNvbXBvbmVudD4gfCBUZW1wbGF0ZVJlZjxhbnk+LFxuICAgIGNvbXBvbmVudFByb3BzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30sXG4gICAgcmVnaXN0ZXI6IGJvb2xlYW4gPSBmYWxzZVxuICApIHtcbiAgICByZXR1cm4gKFxuICAgICAgaW5zdGFuY2U6IEhhbmRzb250YWJsZS5Db3JlLFxuICAgICAgdGQ6IEhUTUxUYWJsZUNlbGxFbGVtZW50LFxuICAgICAgcm93OiBudW1iZXIsXG4gICAgICBjb2w6IG51bWJlcixcbiAgICAgIHByb3A6IHN0cmluZyB8IG51bWJlcixcbiAgICAgIHZhbHVlOiBhbnksXG4gICAgICBjZWxsUHJvcGVydGllczogSGFuZHNvbnRhYmxlLkNlbGxQcm9wZXJ0aWVzXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzOiBCYXNlUmVuZGVyZXJQYXJhbWV0ZXJzT2JqZWN0ID0ge1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgIHRkLFxuICAgICAgICByb3csXG4gICAgICAgIGNvbCxcbiAgICAgICAgcHJvcCxcbiAgICAgICAgY2VsbFByb3BlcnRpZXMsXG4gICAgICB9O1xuXG4gICAgICBpZiAoY29tcG9uZW50UHJvcHMpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihjZWxsUHJvcGVydGllcywgeyByZW5kZXJlclByb3BzOiBjb21wb25lbnRQcm9wcyB9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVuZGVyZXJQYXJhbWV0ZXJzOiBCYXNlUmVuZGVyZXJQYXJhbWV0ZXJzID0gW2luc3RhbmNlLCB0ZCwgcm93LCBjb2wsIHByb3AsIHZhbHVlLCBjZWxsUHJvcGVydGllc107XG5cbiAgICAgIGJhc2VSZW5kZXJlci5hcHBseSh0aGlzLCByZW5kZXJlclBhcmFtZXRlcnMpO1xuXG4gICAgICB0ZC5pbm5lckhUTUwgPSAnJztcblxuICAgICAgaWYgKGlzVGVtcGxhdGVSZWYoY29tcG9uZW50KSkge1xuICAgICAgICB0aGlzLmF0dGFjaFRlbXBsYXRlVG9FbGVtZW50KGNvbXBvbmVudCwgdGQsIHByb3BlcnRpZXMpO1xuICAgICAgfSBlbHNlIGlmIChpc0hvdENlbGxSZW5kZXJlckNvbXBvbmVudChjb21wb25lbnQpKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudCwgcHJvcGVydGllcyk7XG4gICAgICAgIHRoaXMuYXR0YWNoQ29tcG9uZW50VG9FbGVtZW50KGNvbXBvbmVudFJlZiwgdGQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKElOVkFMSURfUkVOREVSRVJfV0FSTklORyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWdpc3RlciAmJiBpc0hvdENlbGxSZW5kZXJlckNvbXBvbmVudChjb21wb25lbnQpKSB7XG4gICAgICAgIEhhbmRzb250YWJsZS5yZW5kZXJlcnMucmVnaXN0ZXJSZW5kZXJlcihjb21wb25lbnQuY29uc3RydWN0b3IubmFtZSwgY29tcG9uZW50IGFzIGFueSBhcyBCYXNlUmVuZGVyZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGQ7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY3VzdG9tIHJlbmRlcmVyIGZ1bmN0aW9uIHVzaW5nIHJlbmRlcmVyRmFjdG9yeSBmcm9tIEhhbmRzb250YWJsZS5cbiAgICogVGhpcyBpcyBhbiBhbHRlcm5hdGl2ZSBpbXBsZW1lbnRhdGlvbiB0aGF0IHVzZXMgdGhlIGZhY3RvcnkgcGF0dGVybi5cbiAgICpcbiAgICogQHBhcmFtIGNvbXBvbmVudCAtIFRoZSBBbmd1bGFyIGNvbXBvbmVudCB0eXBlIHRvIHVzZSBhcyByZW5kZXJlci5cbiAgICogQHBhcmFtIGNvbXBvbmVudFByb3BzIC0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIHVzZSBieSB0aGUgcmVuZGVyZXIuXG4gICAqIEBwYXJhbSByZWdpc3RlciAtIElmIHRydWUsIHJlZ2lzdGVycyB0aGUgcmVuZGVyZXIgd2l0aCBIYW5kc29udGFibGUgdXNpbmcgdGhlIGNvbXBvbmVudCdzIG5hbWUuXG4gICAqIEByZXR1cm5zIEEgcmVuZGVyZXIgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCBpbiBIYW5kc29udGFibGUncyBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgY3JlYXRlUmVuZGVyZXJXaXRoRmFjdG9yeShcbiAgICBjb21wb25lbnQ6IFR5cGU8SG90Q2VsbFJlbmRlcmVyQWR2YW5jZWRDb21wb25lbnQ+LFxuICAgIGNvbXBvbmVudFByb3BzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30sXG4gICAgcmVnaXN0ZXI6IGJvb2xlYW4gPSBmYWxzZVxuICApIHtcbiAgICByZXR1cm4gcmVuZGVyZXJGYWN0b3J5KCh7XG4gICAgICBpbnN0YW5jZSxcbiAgICAgIHRkLFxuICAgICAgcm93LFxuICAgICAgY29sdW1uLFxuICAgICAgcHJvcCxcbiAgICAgIHZhbHVlLFxuICAgICAgY2VsbFByb3BlcnRpZXNcbiAgICB9KSA9PiB7XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzOiBCYXNlUmVuZGVyZXJQYXJhbWV0ZXJzT2JqZWN0ID0ge1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgIHRkLFxuICAgICAgICByb3csXG4gICAgICAgIGNvbDogY29sdW1uLFxuICAgICAgICBwcm9wLFxuICAgICAgICBjZWxsUHJvcGVydGllcyxcbiAgICAgIH07XG5cbiAgICAgIGlmIChjb21wb25lbnRQcm9wcykge1xuICAgICAgICBPYmplY3QuYXNzaWduKGNlbGxQcm9wZXJ0aWVzLCB7IHJlbmRlcmVyUHJvcHM6IGNvbXBvbmVudFByb3BzIH0pO1xuICAgICAgfVxuXG4gICAgICB0ZC5pbm5lckhUTUwgPSAnJztcblxuICAgICAgaWYgKGlzQWR2YW5jZWRIb3RDZWxsUmVuZGVyZXJDb21wb25lbnQoY29tcG9uZW50KSkge1xuICAgICAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnQsIHByb3BlcnRpZXMpO1xuICAgICAgICB0aGlzLmF0dGFjaENvbXBvbmVudFRvRWxlbWVudChjb21wb25lbnRSZWYsIHRkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihJTlZBTElEX0FEVkFOQ0VEX1JFTkRFUkVSX1dBUk5JTkcpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVnaXN0ZXIgJiYgaXNBZHZhbmNlZEhvdENlbGxSZW5kZXJlckNvbXBvbmVudChjb21wb25lbnQpKSB7XG4gICAgICAgIHJlZ2lzdGVyUmVuZGVyZXIoY29tcG9uZW50LmNvbnN0cnVjdG9yLm5hbWUsIGNvbXBvbmVudCBhcyBhbnkgYXMgQmFzZVJlbmRlcmVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRhY2hlcyBhbiBlbWJlZGRlZCB2aWV3IGNyZWF0ZWQgZnJvbSBhIFRlbXBsYXRlUmVmIHRvIGEgZ2l2ZW4gRE9NIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB0ZW1wbGF0ZSAtIFRoZSBUZW1wbGF0ZVJlZiB0byBjcmVhdGUgYW4gZW1iZWRkZWQgdmlldyBmcm9tLlxuICAgKiBAcGFyYW0gdGRFbCAtIFRoZSB0YXJnZXQgRE9NIGVsZW1lbnQgKGEgdGFibGUgY2VsbCkgdG8gd2hpY2ggdGhlIHZpZXcgd2lsbCBiZSBhcHBlbmRlZC5cbiAgICogQHBhcmFtIHByb3BlcnRpZXMgLSBDb250ZXh0IG9iamVjdCBwcm92aWRpbmcgcHJvcGVydGllcyB0byBiZSB1c2VkIHdpdGhpbiB0aGUgdGVtcGxhdGUuXG4gICAqL1xuICBwcml2YXRlIGF0dGFjaFRlbXBsYXRlVG9FbGVtZW50KHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+LCB0ZEVsOiBIVE1MVGFibGVDZWxsRWxlbWVudCwgcHJvcGVydGllczogQmFzZVJlbmRlcmVyUGFyYW1ldGVyc09iamVjdCkge1xuICAgIGNvbnN0IGVtYmVkZGVkVmlldzogRW1iZWRkZWRWaWV3UmVmPGFueT4gPSB0ZW1wbGF0ZS5jcmVhdGVFbWJlZGRlZFZpZXcoe1xuICAgICAgJGltcGxpY2l0OiBwcm9wZXJ0aWVzLnZhbHVlLFxuICAgICAgLi4ucHJvcGVydGllcyxcbiAgICB9KTtcbiAgICBlbWJlZGRlZFZpZXcuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgZW1iZWRkZWRWaWV3LnJvb3ROb2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICB0ZEVsLmFwcGVuZENoaWxkKG5vZGUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIER5bmFtaWNhbGx5IGNyZWF0ZXMgYW4gQW5ndWxhciBjb21wb25lbnQgb2YgdGhlIGdpdmVuIHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSBjb21wb25lbnQgLSBUaGUgQW5ndWxhciBjb21wb25lbnQgdHlwZSB0byBiZSBjcmVhdGVkLlxuICAgKiBAcGFyYW0gcmVuZGVyZXJQYXJhbWV0ZXJzIC0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgaW5wdXQgcHJvcGVydGllcyB0byBhc3NpZ24gdG8gdGhlIGNvbXBvbmVudCBpbnN0YW5jZS5cbiAgICogQHJldHVybnMgVGhlIENvbXBvbmVudFJlZiBvZiB0aGUgZHluYW1pY2FsbHkgY3JlYXRlZCBjb21wb25lbnQuXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUNvbXBvbmVudDxUIGV4dGVuZHMgSG90Q2VsbFJlbmRlcmVyQ29tcG9uZW50PihcbiAgICBjb21wb25lbnQ6IFR5cGU8VD4sXG4gICAgcmVuZGVyZXJQYXJhbWV0ZXJzOiBCYXNlUmVuZGVyZXJQYXJhbWV0ZXJzT2JqZWN0XG4gICk6IENvbXBvbmVudFJlZjxUPiB7XG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudCwge1xuICAgICAgZW52aXJvbm1lbnRJbmplY3RvcjogdGhpcy5lbnZpcm9ubWVudEluamVjdG9yLFxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmtleXMocmVuZGVyZXJQYXJhbWV0ZXJzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGlmIChyZW5kZXJlclBhcmFtZXRlcnMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoa2V5LCByZW5kZXJlclBhcmFtZXRlcnNba2V5XSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oYElucHV0IHByb3BlcnR5IFwiJHtrZXl9XCIgZG9lcyBub3QgZXhpc3Qgb24gY29tcG9uZW50IGluc3RhbmNlOiAke2NvbXBvbmVudD8ubmFtZX0uYCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcblxuICAgIHRoaXMuYXBwUmVmLmF0dGFjaFZpZXcoY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcblxuICAgIHJldHVybiBjb21wb25lbnRSZWY7XG4gIH1cblxuICAvKipcbiAgICogQXR0YWNoZXMgYSBkeW5hbWljYWxseSBjcmVhdGVkIGNvbXBvbmVudCdzIHZpZXcgdG8gYSBzcGVjaWZpZWQgRE9NIGNvbnRhaW5lciBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0gY29tcG9uZW50UmVmIC0gVGhlIHJlZmVyZW5jZSB0byB0aGUgZHluYW1pY2FsbHkgY3JlYXRlZCBjb21wb25lbnQuXG4gICAqIEBwYXJhbSBjb250YWluZXIgLSBUaGUgdGFyZ2V0IERPTSBlbGVtZW50IHRvIHdoaWNoIHRoZSBjb21wb25lbnQncyByb290IG5vZGUgd2lsbCBiZSBhcHBlbmRlZC5cbiAgICovXG4gIHByaXZhdGUgYXR0YWNoQ29tcG9uZW50VG9FbGVtZW50PFQ+KGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPFQ+LCBjb250YWluZXI6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3QgZG9tRWxlbSA9IChjb21wb25lbnRSZWYuaG9zdFZpZXcgYXMgRW1iZWRkZWRWaWV3UmVmPFQ+KS5yb290Tm9kZXNbMF0gYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGRvbUVsZW0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIGEgZHluYW1pY2FsbHkgY3JlYXRlZCBjb21wb25lbnQgYW5kIGRldGFjaGVzIGl0cyB2aWV3IGZyb20gdGhlIEFuZ3VsYXIgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBjb21wb25lbnRSZWYgLSBUaGUgcmVmZXJlbmNlIHRvIHRoZSBjb21wb25lbnQgdG8gYmUgZGVzdHJveWVkLlxuICAgKi9cbiAgZGVzdHJveUNvbXBvbmVudDxUPihjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxUPik6IHZvaWQge1xuICAgIHRoaXMuYXBwUmVmLmRldGFjaFZpZXcoY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcbiAgICBjb21wb25lbnRSZWYuZGVzdHJveSgpO1xuICB9XG59XG4iXX0=
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
import { Injectable, InjectionToken, Inject } from '@angular/core';
|
|
2
|
-
import { BehaviorSubject } from 'rxjs';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
/**
|
|
5
|
-
* A constant representing the non-commercial and evaluation license.
|
|
6
|
-
* */
|
|
7
|
-
export const NON_COMMERCIAL_LICENSE = 'non-commercial-and-evaluation';
|
|
8
|
-
/**
|
|
9
|
-
* Type representing a theme name.
|
|
10
|
-
* Possible values include predefined themes and any custom string.
|
|
11
|
-
*/
|
|
12
|
-
export var PredefinedTheme;
|
|
13
|
-
(function (PredefinedTheme) {
|
|
14
|
-
PredefinedTheme["Main"] = "ht-theme-main";
|
|
15
|
-
PredefinedTheme["MainDark"] = "ht-theme-main-dark";
|
|
16
|
-
PredefinedTheme["MainDarkAuto"] = "ht-theme-main-dark-auto";
|
|
17
|
-
PredefinedTheme["Horizon"] = "ht-theme-horizon";
|
|
18
|
-
PredefinedTheme["HorizonDark"] = "ht-theme-horizon-dark";
|
|
19
|
-
PredefinedTheme["HorizonDarkAuto"] = "ht-theme-horizon-dark-auto";
|
|
20
|
-
})(PredefinedTheme || (PredefinedTheme = {}));
|
|
21
|
-
/**
|
|
22
|
-
* Injection token for providing a global default configuration.
|
|
23
|
-
*/
|
|
24
|
-
export const HOT_GLOBAL_CONFIG = new InjectionToken('HOT_GLOBAL_CONFIG', {
|
|
25
|
-
providedIn: 'root',
|
|
26
|
-
factory: () => ({})
|
|
27
|
-
});
|
|
28
|
-
/**
|
|
29
|
-
* Service for configuring Handsontable settings.
|
|
30
|
-
* This service allows setting and retrieving global configuration.
|
|
31
|
-
*/
|
|
32
|
-
export class HotGlobalConfigService {
|
|
33
|
-
/**
|
|
34
|
-
* The default configuration object for Handsontable.
|
|
35
|
-
*
|
|
36
|
-
* This object is used as the initial value for the configuration BehaviorSubject.
|
|
37
|
-
* It can be overridden by a global configuration provided through the
|
|
38
|
-
* {@link HOT_GLOBAL_CONFIG} injection token.
|
|
39
|
-
*
|
|
40
|
-
* @private
|
|
41
|
-
* @type {HotGlobalConfig}
|
|
42
|
-
*/
|
|
43
|
-
defaultConfig = {
|
|
44
|
-
license: undefined,
|
|
45
|
-
};
|
|
46
|
-
/**
|
|
47
|
-
* A BehaviorSubject that holds the current Handsontable configuration.
|
|
48
|
-
*
|
|
49
|
-
* New configuration values can be emitted by calling next() on this subject.
|
|
50
|
-
* This allows subscribers to react to configuration changes dynamically.
|
|
51
|
-
*
|
|
52
|
-
* @private
|
|
53
|
-
* @type {BehaviorSubject<HotGlobalConfig>}
|
|
54
|
-
*/
|
|
55
|
-
configSubject = new BehaviorSubject(this.defaultConfig);
|
|
56
|
-
/**
|
|
57
|
-
* An Observable stream of the current Handsontable configuration.
|
|
58
|
-
*
|
|
59
|
-
* Components can subscribe to this observable to receive updates whenever the configuration changes.
|
|
60
|
-
*
|
|
61
|
-
* @returns The configuration as an observable stream.
|
|
62
|
-
*/
|
|
63
|
-
get config$() {
|
|
64
|
-
return this.configSubject.asObservable();
|
|
65
|
-
}
|
|
66
|
-
constructor(globalConfig) {
|
|
67
|
-
// Merge global configuration (if provided) into defaultConfig immutably.
|
|
68
|
-
this.defaultConfig = { ...this.defaultConfig, ...globalConfig };
|
|
69
|
-
this.configSubject.next(this.defaultConfig);
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Sets the global configuration for Handsontable.
|
|
73
|
-
*
|
|
74
|
-
* @param config - An object containing configuration options.
|
|
75
|
-
* Each Handsontable instance can override this configuration by providing its own settings.
|
|
76
|
-
*/
|
|
77
|
-
setConfig(config) {
|
|
78
|
-
this.configSubject.next({ ...this.defaultConfig, ...config });
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Retrieves the current Handsontable configuration.
|
|
82
|
-
*
|
|
83
|
-
* @returns An object with the current settings.
|
|
84
|
-
*/
|
|
85
|
-
getConfig() {
|
|
86
|
-
return this.configSubject.value;
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Resets the configuration to the default settings.
|
|
90
|
-
* This method updates the configuration BehaviorSubject with the default configuration.
|
|
91
|
-
*/
|
|
92
|
-
resetConfig() {
|
|
93
|
-
this.configSubject.next({ ...this.defaultConfig });
|
|
94
|
-
}
|
|
95
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HotGlobalConfigService, deps: [{ token: HOT_GLOBAL_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
96
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HotGlobalConfigService, providedIn: 'root' });
|
|
97
|
-
}
|
|
98
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HotGlobalConfigService, decorators: [{
|
|
99
|
-
type: Injectable,
|
|
100
|
-
args: [{
|
|
101
|
-
providedIn: 'root',
|
|
102
|
-
}]
|
|
103
|
-
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
104
|
-
type: Inject,
|
|
105
|
-
args: [HOT_GLOBAL_CONFIG]
|
|
106
|
-
}] }]; } });
|
|
107
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90LWdsb2JhbC1jb25maWcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2hvdC10YWJsZS9zcmMvbGliL3NlcnZpY2VzL2hvdC1nbG9iYWwtY29uZmlnLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBQyxlQUFlLEVBQWEsTUFBTSxNQUFNLENBQUM7O0FBRWpEOztLQUVLO0FBQ0wsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsK0JBQStCLENBQUM7QUFFdEU7OztHQUdHO0FBQ0gsTUFBTSxDQUFOLElBQVksZUFPWDtBQVBELFdBQVksZUFBZTtJQUN6Qix5Q0FBc0IsQ0FBQTtJQUN0QixrREFBK0IsQ0FBQTtJQUMvQiwyREFBd0MsQ0FBQTtJQUN4QywrQ0FBNEIsQ0FBQTtJQUM1Qix3REFBcUMsQ0FBQTtJQUNyQyxpRUFBOEMsQ0FBQTtBQUNoRCxDQUFDLEVBUFcsZUFBZSxLQUFmLGVBQWUsUUFPMUI7QUF1Q0Q7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLGNBQWMsQ0FBa0IsbUJBQW1CLEVBQUU7SUFDeEYsVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQ3BCLENBQUMsQ0FBQztBQUVIOzs7R0FHRztBQUlILE1BQU0sT0FBTyxzQkFBc0I7SUFFakM7Ozs7Ozs7OztPQVNHO0lBQ0ssYUFBYSxHQUFvQjtRQUN2QyxPQUFPLEVBQUUsU0FBUztLQUNuQixDQUFDO0lBRUY7Ozs7Ozs7O09BUUc7SUFDSyxhQUFhLEdBQUcsSUFBSSxlQUFlLENBQWtCLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUVqRjs7Ozs7O09BTUc7SUFDSCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVELFlBQzZCLFlBQTZCO1FBRXhELHlFQUF5RTtRQUN6RSxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLEdBQUcsWUFBWSxFQUFFLENBQUM7UUFDaEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFNBQVMsQ0FBQyxNQUF1QjtRQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztJQUNsQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsV0FBVztRQUNULElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO3dHQXZFVSxzQkFBc0Isa0JBdUN2QixpQkFBaUI7NEdBdkNoQixzQkFBc0IsY0FGckIsTUFBTTs7NEZBRVAsc0JBQXNCO2tCQUhsQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBd0NJLE1BQU07MkJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgSW5qZWN0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBBIGNvbnN0YW50IHJlcHJlc2VudGluZyB0aGUgbm9uLWNvbW1lcmNpYWwgYW5kIGV2YWx1YXRpb24gbGljZW5zZS5cbiAqICovXG5leHBvcnQgY29uc3QgTk9OX0NPTU1FUkNJQUxfTElDRU5TRSA9ICdub24tY29tbWVyY2lhbC1hbmQtZXZhbHVhdGlvbic7XG5cbi8qKlxuICogVHlwZSByZXByZXNlbnRpbmcgYSB0aGVtZSBuYW1lLlxuICogUG9zc2libGUgdmFsdWVzIGluY2x1ZGUgcHJlZGVmaW5lZCB0aGVtZXMgYW5kIGFueSBjdXN0b20gc3RyaW5nLlxuICovXG5leHBvcnQgZW51bSBQcmVkZWZpbmVkVGhlbWUge1xuICBNYWluID0gJ2h0LXRoZW1lLW1haW4nLFxuICBNYWluRGFyayA9ICdodC10aGVtZS1tYWluLWRhcmsnLFxuICBNYWluRGFya0F1dG8gPSAnaHQtdGhlbWUtbWFpbi1kYXJrLWF1dG8nLFxuICBIb3Jpem9uID0gJ2h0LXRoZW1lLWhvcml6b24nLFxuICBIb3Jpem9uRGFyayA9ICdodC10aGVtZS1ob3Jpem9uLWRhcmsnLFxuICBIb3Jpem9uRGFya0F1dG8gPSAnaHQtdGhlbWUtaG9yaXpvbi1kYXJrLWF1dG8nXG59XG5cbmV4cG9ydCB0eXBlIFRoZW1lTmFtZSA9IFByZWRlZmluZWRUaGVtZSB8IHN0cmluZztcblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIHRoZSBIYW5kc29udGFibGUgZ2xvYmFsIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSG90R2xvYmFsQ29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlLlxuICAgKi9cbiAgbGljZW5zZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHRoZW1lIHRvIGJlIHVzZWQuXG4gICAqL1xuICB0aGVtZU5hbWU/OiBUaGVtZU5hbWU7XG5cbiAgLyoqXG4gICAqIFRoZSB0aGVtZSB0byBiZSB1c2VkIChUaGVtZUJ1aWxkZXIgaW5zdGFuY2Ugb3IgdGhlbWUgbmFtZSBzdHJpbmcpLlxuICAgKiBXaGVuIHNldCwgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGB0aGVtZU5hbWVgIGZvciBIYW5kc29udGFibGUgMTcrLlxuICAgKi9cbiAgdGhlbWU/OiBvYmplY3QgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBsYW5ndWFnZSBjb2RlIHRvIGJlIHVzZWQgZm9yIGxvY2FsaXphdGlvbi5cbiAgICogRm9yIGV4YW1wbGUsICdlbi1VUycsICdwbC1QTCcsIGV0Yy5cbiAgICogKipOb3RlOioqIFRoZSBsYW5ndWFnZSBtdXN0IGJlIGNob3NlbiBmcm9tIHRoZSBsYW5ndWFnZXMgc3VwcG9ydGVkIGJ5IEhhbmRzb250YWJsZSBhbmQgcmVnaXN0ZXJlZCBpbiB0aGUgYXBwbGljYXRpb24uXG4gICAqL1xuICBsYW5ndWFnZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGxheW91dCBkaXJlY3Rpb24gZm9yIHRoZSBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAqIFRoaXMgcHJvcGVydHkgZGVmaW5lcyB3aGV0aGVyIHRoZSBsYXlvdXQgc2hvdWxkIGJlIGxlZnQtdG8tcmlnaHQgKCdsdHInKSwgcmlnaHQtdG8tbGVmdCAoJ3J0bCcpLFxuICAgKiBvciBpbmhlcml0IHRoZSBkaXJlY3Rpb24gZnJvbSB0aGUgcGFyZW50IGVsZW1lbnQgKCdpbmhlcml0JykuXG4gICAqL1xuICBsYXlvdXREaXJlY3Rpb24/OiAnbHRyJyB8ICdydGwnIHwgJ2luaGVyaXQnO1xufVxuXG4vKipcbiAqIEluamVjdGlvbiB0b2tlbiBmb3IgcHJvdmlkaW5nIGEgZ2xvYmFsIGRlZmF1bHQgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IEhPVF9HTE9CQUxfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPEhvdEdsb2JhbENvbmZpZz4oJ0hPVF9HTE9CQUxfQ09ORklHJywge1xuICBwcm92aWRlZEluOiAncm9vdCcsXG4gIGZhY3Rvcnk6ICgpID0+ICh7fSlcbn0pO1xuXG4vKipcbiAqIFNlcnZpY2UgZm9yIGNvbmZpZ3VyaW5nIEhhbmRzb250YWJsZSBzZXR0aW5ncy5cbiAqIFRoaXMgc2VydmljZSBhbGxvd3Mgc2V0dGluZyBhbmQgcmV0cmlldmluZyBnbG9iYWwgY29uZmlndXJhdGlvbi5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEhvdEdsb2JhbENvbmZpZ1NlcnZpY2Uge1xuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIG9iamVjdCBmb3IgSGFuZHNvbnRhYmxlLlxuICAgKlxuICAgKiBUaGlzIG9iamVjdCBpcyB1c2VkIGFzIHRoZSBpbml0aWFsIHZhbHVlIGZvciB0aGUgY29uZmlndXJhdGlvbiBCZWhhdmlvclN1YmplY3QuXG4gICAqIEl0IGNhbiBiZSBvdmVycmlkZGVuIGJ5IGEgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gcHJvdmlkZWQgdGhyb3VnaCB0aGVcbiAgICoge0BsaW5rIEhPVF9HTE9CQUxfQ09ORklHfSBpbmplY3Rpb24gdG9rZW4uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtIb3RHbG9iYWxDb25maWd9XG4gICAqL1xuICBwcml2YXRlIGRlZmF1bHRDb25maWc6IEhvdEdsb2JhbENvbmZpZyA9IHtcbiAgICBsaWNlbnNlOiB1bmRlZmluZWQsXG4gIH07XG5cbiAgLyoqXG4gICAqIEEgQmVoYXZpb3JTdWJqZWN0IHRoYXQgaG9sZHMgdGhlIGN1cnJlbnQgSGFuZHNvbnRhYmxlIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIE5ldyBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZW1pdHRlZCBieSBjYWxsaW5nIG5leHQoKSBvbiB0aGlzIHN1YmplY3QuXG4gICAqIFRoaXMgYWxsb3dzIHN1YnNjcmliZXJzIHRvIHJlYWN0IHRvIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBkeW5hbWljYWxseS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge0JlaGF2aW9yU3ViamVjdDxIb3RHbG9iYWxDb25maWc+fVxuICAgKi9cbiAgcHJpdmF0ZSBjb25maWdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxIb3RHbG9iYWxDb25maWc+KHRoaXMuZGVmYXVsdENvbmZpZyk7XG5cbiAgLyoqXG4gICAqIEFuIE9ic2VydmFibGUgc3RyZWFtIG9mIHRoZSBjdXJyZW50IEhhbmRzb250YWJsZSBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBDb21wb25lbnRzIGNhbiBzdWJzY3JpYmUgdG8gdGhpcyBvYnNlcnZhYmxlIHRvIHJlY2VpdmUgdXBkYXRlcyB3aGVuZXZlciB0aGUgY29uZmlndXJhdGlvbiBjaGFuZ2VzLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgY29uZmlndXJhdGlvbiBhcyBhbiBvYnNlcnZhYmxlIHN0cmVhbS5cbiAgICovXG4gIGdldCBjb25maWckKCk6IE9ic2VydmFibGU8SG90R2xvYmFsQ29uZmlnPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoSE9UX0dMT0JBTF9DT05GSUcpIGdsb2JhbENvbmZpZzogSG90R2xvYmFsQ29uZmlnXG4gICkge1xuICAgIC8vIE1lcmdlIGdsb2JhbCBjb25maWd1cmF0aW9uIChpZiBwcm92aWRlZCkgaW50byBkZWZhdWx0Q29uZmlnIGltbXV0YWJseS5cbiAgICB0aGlzLmRlZmF1bHRDb25maWcgPSB7IC4uLnRoaXMuZGVmYXVsdENvbmZpZywgLi4uZ2xvYmFsQ29uZmlnIH07XG4gICAgdGhpcy5jb25maWdTdWJqZWN0Lm5leHQodGhpcy5kZWZhdWx0Q29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBnbG9iYWwgY29uZmlndXJhdGlvbiBmb3IgSGFuZHNvbnRhYmxlLlxuICAgKlxuICAgKiBAcGFyYW0gY29uZmlnIC0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuICAgKiAgICAgICAgICAgICAgICAgRWFjaCBIYW5kc29udGFibGUgaW5zdGFuY2UgY2FuIG92ZXJyaWRlIHRoaXMgY29uZmlndXJhdGlvbiBieSBwcm92aWRpbmcgaXRzIG93biBzZXR0aW5ncy5cbiAgICovXG4gIHNldENvbmZpZyhjb25maWc6IEhvdEdsb2JhbENvbmZpZykge1xuICAgIHRoaXMuY29uZmlnU3ViamVjdC5uZXh0KHsgLi4udGhpcy5kZWZhdWx0Q29uZmlnLCAuLi5jb25maWcgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBjdXJyZW50IEhhbmRzb250YWJsZSBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCB0aGUgY3VycmVudCBzZXR0aW5ncy5cbiAgICovXG4gIGdldENvbmZpZygpOiBIb3RHbG9iYWxDb25maWcge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZ1N1YmplY3QudmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBjb25maWd1cmF0aW9uIHRvIHRoZSBkZWZhdWx0IHNldHRpbmdzLlxuICAgKiBUaGlzIG1ldGhvZCB1cGRhdGVzIHRoZSBjb25maWd1cmF0aW9uIEJlaGF2aW9yU3ViamVjdCB3aXRoIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICByZXNldENvbmZpZygpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZ1N1YmplY3QubmV4dCh7IC4uLnRoaXMuZGVmYXVsdENvbmZpZyB9KTtcbiAgfVxufVxuIl19
|
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
import { createComponent, Injectable } from '@angular/core';
|
|
2
|
-
import { BaseEditorAdapter } from '../editor/base-editor-adapter';
|
|
3
|
-
import { HotCellRendererComponent } from '../renderer/hot-cell-renderer.component';
|
|
4
|
-
import { HotCellEditorComponent } from '../editor/hot-cell-editor.component';
|
|
5
|
-
import Handsontable from 'handsontable/base';
|
|
6
|
-
import { FactoryEditorAdapter } from '../editor/editor-factory-adapter';
|
|
7
|
-
import { HotCellRendererAdvancedComponent } from '../renderer/hot-cell-renderer-advanced.component';
|
|
8
|
-
import { HotCellEditorAdvancedComponent } from '../editor/hot-cell-editor-advanced.component';
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
import * as i1 from "../renderer/hot-dynamic-renderer-component.service";
|
|
11
|
-
const AVAILABLE_OPTIONS = Object.keys(Handsontable.DefaultSettings);
|
|
12
|
-
const AVAILABLE_HOOKS = Handsontable.hooks.getRegistered();
|
|
13
|
-
/**
|
|
14
|
-
* Service to resolve and apply custom settings for Handsontable settings object.
|
|
15
|
-
*/
|
|
16
|
-
export class HotSettingsResolver {
|
|
17
|
-
dynamicComponentService;
|
|
18
|
-
environmentInjector;
|
|
19
|
-
constructor(dynamicComponentService, environmentInjector) {
|
|
20
|
-
this.dynamicComponentService = dynamicComponentService;
|
|
21
|
-
this.environmentInjector = environmentInjector;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Applies custom settings to the provided GridSettings.
|
|
25
|
-
* @param settings The original grid settings.
|
|
26
|
-
* @param ngZone The NgZone instance to run hooks inside the zone context.
|
|
27
|
-
* @returns The merged grid settings with custom settings applied.
|
|
28
|
-
*/
|
|
29
|
-
applyCustomSettings(settings, ngZone) {
|
|
30
|
-
const mergedSettings = settings;
|
|
31
|
-
this.updateColumnRendererForGivenCustomRenderer(mergedSettings);
|
|
32
|
-
this.updateColumnEditorForGivenCustomEditor(mergedSettings);
|
|
33
|
-
this.updateColumnValidatorForGivenCustomValidator(mergedSettings);
|
|
34
|
-
this.wrapHooksInNgZone(mergedSettings, ngZone);
|
|
35
|
-
return mergedSettings ?? {};
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Ensures that hook callbacks in the provided grid settings run inside Angular's zone.
|
|
39
|
-
*
|
|
40
|
-
* @param settings The original grid settings.
|
|
41
|
-
* @param ngZone The NgZone instance to run hooks inside the zone context.
|
|
42
|
-
*/
|
|
43
|
-
wrapHooksInNgZone(settings, ngZone) {
|
|
44
|
-
const options = AVAILABLE_HOOKS.concat(AVAILABLE_OPTIONS);
|
|
45
|
-
options.forEach((key) => {
|
|
46
|
-
const isHook = AVAILABLE_HOOKS.indexOf(key) > -1;
|
|
47
|
-
let option;
|
|
48
|
-
if (isHook) {
|
|
49
|
-
option = settings[key];
|
|
50
|
-
}
|
|
51
|
-
if (option === void 0) {
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
else if (!!ngZone && typeof option === 'function' && isHook) {
|
|
55
|
-
settings[key] = function (...args) {
|
|
56
|
-
return ngZone.run(() => option.apply(this, args));
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
settings[key] = option;
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Updates the column renderer for columns with a custom renderer.
|
|
66
|
-
* @param mergedSettings The merged grid settings.
|
|
67
|
-
*/
|
|
68
|
-
updateColumnRendererForGivenCustomRenderer(mergedSettings) {
|
|
69
|
-
if (!Array.isArray(mergedSettings?.columns)) {
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
mergedSettings?.columns
|
|
73
|
-
?.filter((settings) => this.isCustomRenderer(settings.renderer))
|
|
74
|
-
?.forEach((cellSettings) => {
|
|
75
|
-
const renderer = cellSettings.renderer;
|
|
76
|
-
const props = cellSettings.rendererProps ?? {};
|
|
77
|
-
if (this.isAdvancedRendererComponentRefType(renderer)) {
|
|
78
|
-
cellSettings.renderer = this.dynamicComponentService.createRendererWithFactory(renderer, props);
|
|
79
|
-
}
|
|
80
|
-
else if (this.isRendererComponentRefType(renderer) || this.isTemplateRef(renderer)) {
|
|
81
|
-
cellSettings.renderer = this.dynamicComponentService.createRendererFromComponent(renderer, props);
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Updates the column editor for columns with a custom editor.
|
|
87
|
-
* @param mergedSettings The merged grid settings.
|
|
88
|
-
*/
|
|
89
|
-
updateColumnEditorForGivenCustomEditor(mergedSettings) {
|
|
90
|
-
if (!Array.isArray(mergedSettings?.columns)) {
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
mergedSettings?.columns
|
|
94
|
-
?.filter((settings) => this.isEditorComponentRefType(settings.editor) || this.isAdvancedEditorComponentRefType(settings.editor))
|
|
95
|
-
?.forEach((cellSettings) => {
|
|
96
|
-
if (this.isAdvancedEditorComponentRefType(cellSettings.editor)) {
|
|
97
|
-
const component = createComponent(cellSettings.editor, {
|
|
98
|
-
environmentInjector: this.environmentInjector,
|
|
99
|
-
});
|
|
100
|
-
cellSettings.editor = FactoryEditorAdapter(component);
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
103
|
-
const component = createComponent(cellSettings.editor, {
|
|
104
|
-
environmentInjector: this.environmentInjector,
|
|
105
|
-
});
|
|
106
|
-
cellSettings['_editorComponentReference'] = component;
|
|
107
|
-
cellSettings['_environmentInjector'] = this.environmentInjector;
|
|
108
|
-
cellSettings.editor = BaseEditorAdapter;
|
|
109
|
-
}
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Updates the column validator for columns with a custom validator.
|
|
114
|
-
* @param mergedSettings The merged grid settings.
|
|
115
|
-
*/
|
|
116
|
-
updateColumnValidatorForGivenCustomValidator(mergedSettings) {
|
|
117
|
-
if (!Array.isArray(mergedSettings?.columns)) {
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
mergedSettings?.columns
|
|
121
|
-
?.filter((settings) => this.isCustomValidatorFn(settings.validator))
|
|
122
|
-
?.forEach((cellSettings) => {
|
|
123
|
-
const customValidatorFn = cellSettings.validator;
|
|
124
|
-
cellSettings.validator = (value, callback) => {
|
|
125
|
-
callback(customValidatorFn(value));
|
|
126
|
-
};
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
isCustomValidatorFn(validator) {
|
|
130
|
-
return typeof validator === 'function' && validator.length === 1;
|
|
131
|
-
}
|
|
132
|
-
isEditorComponentRefType(editor) {
|
|
133
|
-
// ecmp - we need it to check if the editor is a component
|
|
134
|
-
return typeof editor === 'function' &&
|
|
135
|
-
!!editor?.ɵcmp &&
|
|
136
|
-
editor?.EDITOR_MARKER === HotCellEditorComponent.EDITOR_MARKER;
|
|
137
|
-
}
|
|
138
|
-
isAdvancedEditorComponentRefType(editor) {
|
|
139
|
-
// ecmp - we need it to check if the editor is a component
|
|
140
|
-
return typeof editor === 'function' &&
|
|
141
|
-
!!editor?.ɵcmp &&
|
|
142
|
-
editor?.EDITOR_MARKER === HotCellEditorAdvancedComponent.EDITOR_MARKER;
|
|
143
|
-
}
|
|
144
|
-
isRendererComponentRefType(renderer) {
|
|
145
|
-
// ecmp - we need it to check if the renderer is a component
|
|
146
|
-
return typeof renderer === 'function' &&
|
|
147
|
-
!!renderer?.ɵcmp &&
|
|
148
|
-
renderer?.RENDERER_MARKER === HotCellRendererComponent.RENDERER_MARKER;
|
|
149
|
-
}
|
|
150
|
-
isAdvancedRendererComponentRefType(renderer) {
|
|
151
|
-
// ecmp - we need it to check if the renderer is a component
|
|
152
|
-
return typeof renderer === 'function' &&
|
|
153
|
-
!!renderer?.ɵcmp &&
|
|
154
|
-
renderer?.RENDERER_MARKER === HotCellRendererAdvancedComponent.RENDERER_MARKER;
|
|
155
|
-
}
|
|
156
|
-
isTemplateRef(renderer) {
|
|
157
|
-
return renderer && typeof renderer.createEmbeddedView === 'function';
|
|
158
|
-
}
|
|
159
|
-
isCustomRenderer(renderer) {
|
|
160
|
-
return this.isRendererComponentRefType(renderer) ||
|
|
161
|
-
this.isTemplateRef(renderer) ||
|
|
162
|
-
this.isAdvancedRendererComponentRefType(renderer);
|
|
163
|
-
}
|
|
164
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HotSettingsResolver, deps: [{ token: i1.DynamicComponentService }, { token: i0.EnvironmentInjector }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
165
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HotSettingsResolver });
|
|
166
|
-
}
|
|
167
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HotSettingsResolver, decorators: [{
|
|
168
|
-
type: Injectable
|
|
169
|
-
}], ctorParameters: function () { return [{ type: i1.DynamicComponentService }, { type: i0.EnvironmentInjector }]; } });
|
|
170
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90LXNldHRpbmdzLXJlc29sdmVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ob3QtdGFibGUvc3JjL2xpYi9zZXJ2aWNlcy9ob3Qtc2V0dGluZ3MtcmVzb2x2ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUF1QixVQUFVLEVBQTZCLE1BQU0sZUFBZSxDQUFDO0FBRTVHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBR2xFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzdFLE9BQU8sWUFBWSxNQUFNLG1CQUFtQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3BHLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDOzs7QUFFOUYsTUFBTSxpQkFBaUIsR0FBYSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUM5RSxNQUFNLGVBQWUsR0FBYSxZQUFZLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO0FBRXJFOztHQUVHO0FBRUgsTUFBTSxPQUFPLG1CQUFtQjtJQUNWO0lBQW1FO0lBQXZGLFlBQW9CLHVCQUFnRCxFQUFtQixtQkFBd0M7UUFBM0csNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtRQUFtQix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO0lBQUcsQ0FBQztJQUVuSTs7Ozs7T0FLRztJQUNILG1CQUFtQixDQUFDLFFBQXNCLEVBQUUsTUFBYztRQUN4RCxNQUFNLGNBQWMsR0FBaUIsUUFBUSxD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LGVBQWUsQ0FBQztJQUM1RixDQUFDO0lBRU8sYUFBYSxDQUFDLFFBQWE7UUFDakMsT0FBTyxRQUFRLElBQUksT0FBTyxRQUFRLENBQUMsa0JBQWtCLEtBQUssVUFBVSxDQUFDO0lBQ3ZFLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxRQUFhO1FBR3BDLE9BQU8sSUFBSSxDQUFDLDBCQUEwQixDQUFDLFFBQVEsQ0FBQztZQUM5QyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQztZQUM1QixJQUFJLENBQUMsa0NBQWtDLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdEQsQ0FBQzt3R0FuS1UsbUJBQW1COzRHQUFuQixtQkFBbUI7OzRGQUFuQixtQkFBbUI7a0JBRC9CLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVDb21wb25lbnQsIEVudmlyb25tZW50SW5qZWN0b3IsIEluamVjdGFibGUsIE5nWm9uZSwgVGVtcGxhdGVSZWYsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IER5bmFtaWNDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vcmVuZGVyZXIvaG90LWR5bmFtaWMtcmVuZGVyZXItY29tcG9uZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFzZUVkaXRvckFkYXB0ZXIgfSBmcm9tICcuLi9lZGl0b3IvYmFzZS1lZGl0b3ItYWRhcHRlcic7XG5pbXBvcnQgeyBHcmlkU2V0dGluZ3MsIEdyaWRTZXR0aW5nc0ludGVybmFsIH0gZnJvbSAnLi4vbW9kZWxzL2dyaWQtc2V0dGluZ3MnO1xuaW1wb3J0IHsgQ3VzdG9tVmFsaWRhdG9yRm4sIENvbHVtblNldHRpbmdzIH0gZnJvbSAnLi4vbW9kZWxzL2NvbHVtbi1zZXR0aW5ncyc7XG5pbXBvcnQgeyBIb3RDZWxsUmVuZGVyZXJDb21wb25lbnQgfSBmcm9tICcuLi9yZW5kZXJlci9ob3QtY2VsbC1yZW5kZXJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSG90Q2VsbEVkaXRvckNvbXBvbmVudCB9IGZyb20gJy4uL2VkaXRvci9ob3QtY2VsbC1lZGl0b3IuY29tcG9uZW50JztcbmltcG9ydCBIYW5kc29udGFibGUgZnJvbSAnaGFuZHNvbnRhYmxlL2Jhc2UnO1xuaW1wb3J0IHsgRmFjdG9yeUVkaXRvckFkYXB0ZXIgfSBmcm9tICcuLi9lZGl0b3IvZWRpdG9yLWZhY3RvcnktYWRhcHRlcic7XG5pbXBvcnQgeyBIb3RDZWxsUmVuZGVyZXJBZHZhbmNlZENvbXBvbmVudCB9IGZyb20gJy4uL3JlbmRlcmVyL2hvdC1jZWxsLXJlbmRlcmVyLWFkdmFuY2VkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBIb3RDZWxsRWRpdG9yQWR2YW5jZWRDb21wb25lbnQgfSBmcm9tICcuLi9lZGl0b3IvaG90LWNlbGwtZWRpdG9yLWFkdmFuY2VkLmNvbXBvbmVudCc7XG5cbmNvbnN0IEFWQUlMQUJMRV9PUFRJT05TOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKEhhbmRzb250YWJsZS5EZWZhdWx0U2V0dGluZ3MpO1xuY29uc3QgQVZBSUxBQkxFX0hPT0tTOiBzdHJpbmdbXSA9IEhhbmRzb250YWJsZS5ob29rcy5nZXRSZWdpc3RlcmVkKCk7XG5cbi8qKlxuICogU2VydmljZSB0byByZXNvbHZlIGFuZCBhcHBseSBjdXN0b20gc2V0dGluZ3MgZm9yIEhhbmRzb250YWJsZSBzZXR0aW5ncyBvYmplY3QuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBIb3RTZXR0aW5nc1Jlc29sdmVyIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkeW5hbWljQ29tcG9uZW50U2VydmljZTogRHluYW1pY0NvbXBvbmVudFNlcnZpY2UsIHByaXZhdGUgcmVhZG9ubHkgZW52aXJvbm1lbnRJbmplY3RvcjogRW52aXJvbm1lbnRJbmplY3Rvcikge31cblxuICAvKipcbiAgICogQXBwbGllcyBjdXN0b20gc2V0dGluZ3MgdG8gdGhlIHByb3ZpZGVkIEdyaWRTZXR0aW5ncy5cbiAgICogQHBhcmFtIHNldHRpbmdzIFRoZSBvcmlnaW5hbCBncmlkIHNldHRpbmdzLlxuICAgKiBAcGFyYW0gbmdab25lIFRoZSBOZ1pvbmUgaW5zdGFuY2UgdG8gcnVuIGhvb2tzIGluc2lkZSB0aGUgem9uZSBjb250ZXh0LlxuICAgKiBAcmV0dXJucyBUaGUgbWVyZ2VkIGdyaWQgc2V0dGluZ3Mgd2l0aCBjdXN0b20gc2V0dGluZ3MgYXBwbGllZC5cbiAgICovXG4gIGFwcGx5Q3VzdG9tU2V0dGluZ3Moc2V0dGluZ3M6IEdyaWRTZXR0aW5ncywgbmdab25lOiBOZ1pvbmUpOiBHcmlkU2V0dGluZ3NJbnRlcm5hbCB7XG4gICAgY29uc3QgbWVyZ2VkU2V0dGluZ3M6IEdyaWRTZXR0aW5ncyA9IHNldHRpbmdzO1xuXG4gICAgdGhpcy51cGRhdGVDb2x1bW5SZW5kZXJlckZvckdpdmVuQ3VzdG9tUmVuZGVyZXIobWVyZ2VkU2V0dGluZ3MpO1xuICAgIHRoaXMudXBkYXRlQ29sdW1uRWRpdG9yRm9yR2l2ZW5DdXN0b21FZGl0b3IobWVyZ2VkU2V0dGluZ3MpO1xuICAgIHRoaXMudXBkYXRlQ29sdW1uVmFsaWRhdG9yRm9yR2l2ZW5DdXN0b21WYWxpZGF0b3IobWVyZ2VkU2V0dGluZ3MpO1xuXG4gICAgdGhpcy53cmFwSG9va3NJbk5nWm9uZShtZXJnZWRTZXR0aW5ncywgbmdab25lKTtcblxuICAgIHJldHVybiAobWVyZ2VkU2V0dGluZ3MgYXMgR3JpZFNldHRpbmdzSW50ZXJuYWwpID8/IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZXMgdGhhdCBob29rIGNhbGxiYWNrcyBpbiB0aGUgcHJvdmlkZWQgZ3JpZCBzZXR0aW5ncyBydW4gaW5zaWRlIEFuZ3VsYXIncyB6b25lLlxuICAgKlxuICAgKiBAcGFyYW0gc2V0dGluZ3MgVGhlIG9yaWdpbmFsIGdyaWQgc2V0dGluZ3MuXG4gICAqIEBwYXJhbSBuZ1pvbmUgVGhlIE5nWm9uZSBpbnN0YW5jZSB0byBydW4gaG9va3MgaW5zaWRlIHRoZSB6b25lIGNvbnRleHQuXG4gICAqL1xuICBwcml2YXRlIHdyYXBIb29rc0luTmdab25lKHNldHRpbmdzOiBHcmlkU2V0dGluZ3MsIG5nWm9uZTogTmdab25lKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IEFWQUlMQUJMRV9IT09LUy5jb25jYXQoQVZBSUxBQkxFX09QVElPTlMpO1xuXG4gICAgb3B0aW9ucy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGNvbnN0IGlzSG9vayA9IEFWQUlMQUJMRV9IT09LUy5pbmRleE9mKGtleSkgPiAtMTtcbiAgICAgIGxldCBvcHRpb247XG5cbiAgICAgIGlmIChpc0hvb2spIHtcbiAgICAgICAgb3B0aW9uID0gc2V0dGluZ3Nba2V5XTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbiA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSBpZiAoISFuZ1pvbmUgJiYgdHlwZW9mIG9wdGlvbiA9PT0gJ2Z1bmN0aW9uJyAmJiBpc0hvb2spIHtcbiAgICAgICAgc2V0dGluZ3Nba2V5XSA9IGZ1bmN0aW9uICguLi5hcmdzOiBhbnkpIHtcbiAgICAgICAgICByZXR1cm4gbmdab25lLnJ1bigoKSA9PiBvcHRpb24uYXBwbHkodGhpcywgYXJncykpO1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0dGluZ3Nba2V5XSA9IG9wdGlvbjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBjb2x1bW4gcmVuZGVyZXIgZm9yIGNvbHVtbnMgd2l0aCBhIGN1c3RvbSByZW5kZXJlci5cbiAgICogQHBhcmFtIG1lcmdlZFNldHRpbmdzIFRoZSBtZXJnZWQgZ3JpZCBzZXR0aW5ncy5cbiAgICovXG4gIHByaXZhdGUgdXBkYXRlQ29sdW1uUmVuZGVyZXJGb3JHaXZlbkN1c3RvbVJlbmRlcmVyKG1lcmdlZFNldHRpbmdzOiBHcmlkU2V0dGluZ3MpOiB2b2lkIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVyZ2VkU2V0dGluZ3M/LmNvbHVtbnMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgKG1lcmdlZFNldHRpbmdzPy5jb2x1bW5zIGFzIENvbHVtblNldHRpbmdzW10pXG4gICAgICA/LmZpbHRlcigoc2V0dGluZ3MpID0+IHRoaXMuaXNDdXN0b21SZW5kZXJlcihzZXR0aW5ncy5yZW5kZXJlcikpXG4gICAgICA/LmZvckVhY2goKGNlbGxTZXR0aW5ncykgPT4ge1xuICAgICAgICBjb25zdCByZW5kZXJlciA9IGNlbGxTZXR0aW5ncy5yZW5kZXJlcjtcbiAgICAgICAgY29uc3QgcHJvcHM6IGFueSA9IGNlbGxTZXR0aW5ncy5yZW5kZXJlclByb3BzID8/IHt9O1xuXG4gICAgICAgIGlmICh0aGlzLmlzQWR2YW5jZWRSZW5kZXJlckNvbXBvbmVudFJlZlR5cGUocmVuZGVyZXIpKSB7XG4gICAgICAgICAgY2VsbFNldHRpbmdzLnJlbmRlcmVyID0gdGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5jcmVhdGVSZW5kZXJlcldpdGhGYWN0b3J5KHJlbmRlcmVyLCBwcm9wcyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1JlbmRlcmVyQ29tcG9uZW50UmVmVHlwZShyZW5kZXJlcikgfHwgdGhpcy5pc1RlbXBsYXRlUmVmKHJlbmRlcmVyKSkge1xuICAgICAgICAgIGNlbGxTZXR0aW5ncy5yZW5kZXJlciA9IHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UuY3JlYXRlUmVuZGVyZXJGcm9tQ29tcG9uZW50KHJlbmRlcmVyLCBwcm9wcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGNvbHVtbiBlZGl0b3IgZm9yIGNvbHVtbnMgd2l0aCBhIGN1c3RvbSBlZGl0b3IuXG4gICAqIEBwYXJhbSBtZXJnZWRTZXR0aW5ncyBUaGUgbWVyZ2VkIGdyaWQgc2V0dGluZ3MuXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUNvbHVtbkVkaXRvckZvckdpdmVuQ3VzdG9tRWRpdG9yKG1lcmdlZFNldHRpbmdzOiBHcmlkU2V0dGluZ3MpOiB2b2lkIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVyZ2VkU2V0dGluZ3M/LmNvbHVtbnMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgKG1lcmdlZFNldHRpbmdzPy5jb2x1bW5zIGFzIENvbHVtblNldHRpbmdzW10pXG4gICAgICA/LmZpbHRlcigoc2V0dGluZ3MpID0+IHRoaXMuaXNFZGl0b3JDb21wb25lbnRSZWZUeXBlKHNldHRpbmdzLmVkaXRvcikgfHwgdGhpcy5pc0FkdmFuY2VkRWRpdG9yQ29tcG9uZW50UmVmVHlwZShzZXR0aW5ncy5lZGl0b3IpKVxuICAgICAgPy5mb3JFYWNoKChjZWxsU2V0dGluZ3MpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNBZHZhbmNlZEVkaXRvckNvbXBvbmVudFJlZlR5cGUoY2VsbFNldHRpbmdzLmVkaXRvcikpIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjcmVhdGVDb21wb25lbnQoY2VsbFNldHRpbmdzLmVkaXRvciwge1xuICAgICAgICAgICAgZW52aXJvbm1lbnRJbmplY3RvcjogdGhpcy5lbnZpcm9ubWVudEluamVjdG9yLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNlbGxTZXR0aW5ncy5lZGl0b3IgPSBGYWN0b3J5RWRpdG9yQWRhcHRlcihjb21wb25lbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNyZWF0ZUNvbXBvbmVudChjZWxsU2V0dGluZ3MuZWRpdG9yIGFzIFR5cGU8SG90Q2VsbEVkaXRvckNvbXBvbmVudDxhbnk+Piwge1xuICAgICAgICAgICAgZW52aXJvbm1lbnRJbmplY3RvcjogdGhpcy5lbnZpcm9ubWVudEluamVjdG9yLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNlbGxTZXR0aW5nc1snX2VkaXRvckNvbXBvbmVudFJlZmVyZW5jZSddID0gY29tcG9uZW50O1xuICAgICAgICAgIGNlbGxTZXR0aW5nc1snX2Vudmlyb25tZW50SW5qZWN0b3InXSA9IHRoaXMuZW52aXJvbm1lbnRJbmplY3RvcjtcbiAgICAgICAgICBjZWxsU2V0dGluZ3MuZWRpdG9yID0gQmFzZUVkaXRvckFkYXB0ZXI7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGNvbHVtbiB2YWxpZGF0b3IgZm9yIGNvbHVtbnMgd2l0aCBhIGN1c3RvbSB2YWxpZGF0b3IuXG4gICAqIEBwYXJhbSBtZXJnZWRTZXR0aW5ncyBUaGUgbWVyZ2VkIGdyaWQgc2V0dGluZ3MuXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUNvbHVtblZhbGlkYXRvckZvckdpdmVuQ3VzdG9tVmFsaWRhdG9yKG1lcmdlZFNldHRpbmdzOiBHcmlkU2V0dGluZ3MpOiB2b2lkIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVyZ2VkU2V0dGluZ3M/LmNvbHVtbnMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgKG1lcmdlZFNldHRpbmdzPy5jb2x1bW5zIGFzIENvbHVtblNldHRpbmdzW10pXG4gICAgICA/LmZpbHRlcigoc2V0dGluZ3MpID0+IHRoaXMuaXNDdXN0b21WYWxpZGF0b3JGbihzZXR0aW5ncy52YWxpZGF0b3IpKVxuICAgICAgPy5mb3JFYWNoKChjZWxsU2V0dGluZ3MpID0+IHtcbiAgICAgICAgY29uc3QgY3VzdG9tVmFsaWRhdG9yRm4gPSBjZWxsU2V0dGluZ3MudmFsaWRhdG9yIGFzIEN1c3RvbVZhbGlkYXRvckZuPGFueT47XG5cbiAgICAgICAgY2VsbFNldHRpbmdzLnZhbGlkYXRvciA9ICh2YWx1ZTogYW55LCBjYWxsYmFjazogKHJlc3VsdDogYm9vbGVhbikgPT4gdm9pZCkgPT4ge1xuICAgICAgICAgIGNhbGxiYWNrKGN1c3RvbVZhbGlkYXRvckZuKHZhbHVlKSk7XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaXNDdXN0b21WYWxpZGF0b3JGbih2YWxpZGF0b3I6IHVua25vd24pOiB2YWxpZGF0b3IgaXMgQ3VzdG9tVmFsaWRhdG9yRm48YW55PiB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWxpZGF0b3IgPT09ICdmdW5jdGlvbicgJiYgdmFsaWRhdG9yLmxlbmd0aCA9PT0gMTtcbiAgfVxuXG4gIHByaXZhdGUgaXNFZGl0b3JDb21wb25lbnRSZWZUeXBlKGVkaXRvcjogYW55KTogZWRpdG9yIGlzIFR5cGU8SG90Q2VsbEVkaXRvckNvbXBvbmVudDxhbnk+PiB7XG4gICAgLy8gZWNtcCAtIHdlIG5lZWQgaXQgdG8gY2hlY2sgaWYgdGhlIGVkaXRvciBpcyBhIGNvbXBvbmVudFxuICAgIHJldHVybiB0eXBlb2YgZWRpdG9yID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAhIShlZGl0b3IgYXMgYW55KT8uybVjbXAgJiZcbiAgICAgIChlZGl0b3IgYXMgYW55KT8uRURJVE9SX01BUktFUiA9PT0gSG90Q2VsbEVkaXRvckNvbXBvbmVudC5FRElUT1JfTUFSS0VSO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0FkdmFuY2VkRWRpdG9yQ29tcG9uZW50UmVmVHlwZShlZGl0b3I6IGFueSk6IGVkaXRvciBpcyBUeXBlPEhvdENlbGxFZGl0b3JBZHZhbmNlZENvbXBvbmVudDxhbnk+PiB7XG4gICAgLy8gZWNtcCAtIHdlIG5lZWQgaXQgdG8gY2hlY2sgaWYgdGhlIGVkaXRvciBpcyBhIGNvbXBvbmVudFxuICAgIHJldHVybiB0eXBlb2YgZWRpdG9yID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAhIShlZGl0b3IgYXMgYW55KT8uybVjbXAgJiZcbiAgICAgIChlZGl0b3IgYXMgYW55KT8uRURJVE9SX01BUktFUiA9PT0gSG90Q2VsbEVkaXRvckFkdmFuY2VkQ29tcG9uZW50LkVESVRPUl9NQVJLRVI7XG4gIH1cblxuICBwcml2YXRlIGlzUmVuZGVyZXJDb21wb25lbnRSZWZUeXBlKHJlbmRlcmVyOiBhbnkpOiByZW5kZXJlciBpcyBUeXBlPEhvdENlbGxSZW5kZXJlckNvbXBvbmVudDxhbnksIGFueT4+IHtcbiAgICAvLyBlY21wIC0gd2UgbmVlZCBpdCB0byBjaGVjayBpZiB0aGUgcmVuZGVyZXIgaXMgYSBjb21wb25lbnRcbiAgICByZXR1cm4gdHlwZW9mIHJlbmRlcmVyID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAhIShyZW5kZXJlciBhcyBhbnkpPy7JtWNtcCAmJlxuICAgICAgKHJlbmRlcmVyIGFzIGFueSk/LlJFTkRFUkVSX01BUktFUiA9PT0gSG90Q2VsbFJlbmRlcmVyQ29tcG9uZW50LlJFTkRFUkVSX01BUktFUjtcbiAgfVxuXG4gIHByaXZhdGUgaXNBZHZhbmNlZFJlbmRlcmVyQ29tcG9uZW50UmVmVHlwZShyZW5kZXJlcjogYW55KTogcmVuZGVyZXIgaXMgVHlwZTxIb3RDZWxsUmVuZGVyZXJBZHZhbmNlZENvbXBvbmVudDxhbnksIGFueT4+IHtcbiAgICAvLyBlY21wIC0gd2UgbmVlZCBpdCB0byBjaGVjayBpZiB0aGUgcmVuZGVyZXIgaXMgYSBjb21wb25lbnRcbiAgICByZXR1cm4gdHlwZW9mIHJlbmRlcmVyID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAhIShyZW5kZXJlciBhcyBhbnkpPy7JtWNtcCAmJlxuICAgICAgKHJlbmRlcmVyIGFzIGFueSk/LlJFTkRFUkVSX01BUktFUiA9PT0gSG90Q2VsbFJlbmRlcmVyQWR2YW5jZWRDb21wb25lbnQuUkVOREVSRVJfTUFSS0VSO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1RlbXBsYXRlUmVmKHJlbmRlcmVyOiBhbnkpOiByZW5kZXJlciBpcyBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICByZXR1cm4gcmVuZGVyZXIgJiYgdHlwZW9mIHJlbmRlcmVyLmNyZWF0ZUVtYmVkZGVkVmlldyA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIHByaXZhdGUgaXNDdXN0b21SZW5kZXJlcihyZW5kZXJlcjogYW55KTogcmVuZGVyZXIgaXMgVHlwZTxIb3RDZWxsUmVuZGVyZXJDb21wb25lbnQ8YW55LCBhbnk+PiB8XG4gICAgVGVtcGxhdGVSZWY8YW55PiB8XG4gICAgVHlwZTxIb3RDZWxsUmVuZGVyZXJBZHZhbmNlZENvbXBvbmVudDxhbnksIGFueT4+IHtcbiAgICByZXR1cm4gdGhpcy5pc1JlbmRlcmVyQ29tcG9uZW50UmVmVHlwZShyZW5kZXJlcikgfHxcbiAgICAgIHRoaXMuaXNUZW1wbGF0ZVJlZihyZW5kZXJlcikgfHxcbiAgICAgIHRoaXMuaXNBZHZhbmNlZFJlbmRlcmVyQ29tcG9uZW50UmVmVHlwZShyZW5kZXJlcik7XG4gIH1cbn1cbiJdfQ==
|
package/esm2022/public-api.mjs
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Public API Surface of hot-table
|
|
3
|
-
*/
|
|
4
|
-
export * from './lib/hot-table.component';
|
|
5
|
-
export * from './lib/services/hot-settings-resolver.service';
|
|
6
|
-
export * from './lib/hot-table.module';
|
|
7
|
-
export * from './lib/services/hot-global-config.service';
|
|
8
|
-
export * from './lib/renderer/hot-dynamic-renderer-component.service';
|
|
9
|
-
export * from './lib/renderer/hot-cell-renderer.component';
|
|
10
|
-
export * from './lib/editor/hot-cell-editor.component';
|
|
11
|
-
export * from './lib/renderer/hot-cell-renderer-advanced.component';
|
|
12
|
-
export * from './lib/editor/hot-cell-editor-advanced.component';
|
|
13
|
-
export * from './lib/editor/models/keyboard-shortcut-config';
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2hvdC10YWJsZS9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyw4Q0FBOEMsQ0FBQztBQUM3RCxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsMENBQTBDLENBQUM7QUFDekQsY0FBYyx1REFBdUQsQ0FBQztBQUN0RSxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYyxxREFBcUQsQ0FBQztBQUNwRSxjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMsOENBQThDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIGhvdC10YWJsZVxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL2hvdC10YWJsZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvaG90LXNldHRpbmdzLXJlc29sdmVyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaG90LXRhYmxlLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9ob3QtZ2xvYmFsLWNvbmZpZy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3JlbmRlcmVyL2hvdC1keW5hbWljLXJlbmRlcmVyLWNvbXBvbmVudC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3JlbmRlcmVyL2hvdC1jZWxsLXJlbmRlcmVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9lZGl0b3IvaG90LWNlbGwtZWRpdG9yLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9yZW5kZXJlci9ob3QtY2VsbC1yZW5kZXJlci1hZHZhbmNlZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZWRpdG9yL2hvdC1jZWxsLWVkaXRvci1hZHZhbmNlZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZWRpdG9yL21vZGVscy9rZXlib2FyZC1zaG9ydGN1dC1jb25maWcnO1xuZXhwb3J0IHsgR3JpZFNldHRpbmdzIH0gZnJvbSAnLi9saWIvbW9kZWxzL2dyaWQtc2V0dGluZ3MnO1xuZXhwb3J0IHsgQ29sdW1uU2V0dGluZ3MsIEN1c3RvbVZhbGlkYXRvckZuIH0gZnJvbSAnLi9saWIvbW9kZWxzL2NvbHVtbi1zZXR0aW5ncyc7XG4iXX0=
|