@handsontable/angular-wrapper 0.0.0-next-f3a2373-20250401 → 0.0.0-next-d9b3885-20250415
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/hot-table.component.mjs +16 -11
- package/esm2022/lib/hot-table.module.mjs +2 -2
- package/esm2022/lib/models/column-settings.mjs +1 -1
- package/esm2022/lib/models/grid-settings.mjs +1 -1
- package/esm2022/lib/services/hot-config.service.mjs +14 -1
- package/esm2022/lib/services/hot-settings-resolver.service.mjs +63 -13
- package/esm2022/public-api.mjs +1 -1
- package/fesm2022/handsontable-angular-wrapper.mjs +90 -23
- package/fesm2022/handsontable-angular-wrapper.mjs.map +1 -1
- package/lib/hot-table.component.d.ts +3 -1
- package/lib/models/column-settings.d.ts +8 -10
- package/lib/models/grid-settings.d.ts +1 -1
- package/lib/services/hot-config.service.d.ts +9 -1
- package/lib/services/hot-settings-resolver.service.d.ts +14 -2
- package/package.json +1 -1
- package/public-api.d.ts +1 -1
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
import { Component, Input, ViewChild, ViewEncapsulation
|
|
1
|
+
import { Component, Input, ViewChild, ViewEncapsulation } from '@angular/core';
|
|
2
2
|
import Handsontable from 'handsontable/base';
|
|
3
3
|
import { HotSettingsResolver } from './services/hot-settings-resolver.service';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import * as i1 from "./services/hot-settings-resolver.service";
|
|
6
6
|
import * as i2 from "./services/hot-config.service";
|
|
7
|
-
export const HOT_DESTROYED_WARNING = 'The Handsontable instance bound to this component was destroyed and cannot be' +
|
|
8
|
-
' used properly.';
|
|
7
|
+
export const HOT_DESTROYED_WARNING = 'The Handsontable instance bound to this component was destroyed and cannot be' + ' used properly.';
|
|
9
8
|
export class HotTableComponent {
|
|
10
9
|
_hotSettingsResolver;
|
|
11
10
|
_hotConfig;
|
|
12
11
|
ngZone;
|
|
13
12
|
// component inputs
|
|
13
|
+
/** The data for the Handsontable instance. */
|
|
14
|
+
data = [];
|
|
14
15
|
/** The settings for the Handsontable instance. */
|
|
15
16
|
settings;
|
|
16
17
|
/** The container element for the Handsontable instance. */
|
|
@@ -28,8 +29,7 @@ export class HotTableComponent {
|
|
|
28
29
|
* @returns The Handsontable instance or `null` if it's not yet been created or has been destroyed.
|
|
29
30
|
*/
|
|
30
31
|
get hotInstance() {
|
|
31
|
-
if (!this.__hotInstance ||
|
|
32
|
-
(this.__hotInstance && !this.__hotInstance.isDestroyed)) {
|
|
32
|
+
if (!this.__hotInstance || (this.__hotInstance && !this.__hotInstance.isDestroyed)) {
|
|
33
33
|
// Will return the Handsontable instance or `null` if it's not yet been created.
|
|
34
34
|
return this.__hotInstance;
|
|
35
35
|
}
|
|
@@ -50,9 +50,9 @@ export class HotTableComponent {
|
|
|
50
50
|
* The initial settings of the table are also prepared here
|
|
51
51
|
*/
|
|
52
52
|
ngAfterViewInit() {
|
|
53
|
-
let options = this._hotSettingsResolver.applyCustomSettings(this.settings);
|
|
53
|
+
let options = this._hotSettingsResolver.applyCustomSettings(this.settings, this.ngZone);
|
|
54
54
|
const negotiatedSettings = this.getNegotiatedSettings(options);
|
|
55
|
-
options = { ...options, ...negotiatedSettings };
|
|
55
|
+
options = { ...options, ...negotiatedSettings, data: this.data };
|
|
56
56
|
this.ngZone.runOutsideAngular(() => {
|
|
57
57
|
this.hotInstance = new Handsontable.Core(this.container.nativeElement, options);
|
|
58
58
|
// @ts-ignore
|
|
@@ -70,9 +70,12 @@ export class HotTableComponent {
|
|
|
70
70
|
return;
|
|
71
71
|
}
|
|
72
72
|
if (changes.settings && !changes.settings.firstChange) {
|
|
73
|
-
const newOptions = this._hotSettingsResolver.applyCustomSettings(changes.settings.currentValue);
|
|
73
|
+
const newOptions = this._hotSettingsResolver.applyCustomSettings(changes.settings.currentValue, this.ngZone);
|
|
74
74
|
this.updateHotTable(newOptions);
|
|
75
75
|
}
|
|
76
|
+
if (changes.data && !changes.data.firstChange) {
|
|
77
|
+
this.hotInstance?.updateData(changes.data.currentValue);
|
|
78
|
+
}
|
|
76
79
|
}
|
|
77
80
|
/**
|
|
78
81
|
* Destroys the Handsontable instance and clears the columns from custom editors.
|
|
@@ -125,15 +128,17 @@ export class HotTableComponent {
|
|
|
125
128
|
return negotiatedSettings;
|
|
126
129
|
}
|
|
127
130
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HotTableComponent, deps: [{ token: i1.HotSettingsResolver }, { token: i2.HotConfigService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
|
|
128
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: HotTableComponent, selector: "hot-table", inputs: { settings: "settings" }, providers: [HotSettingsResolver], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: '<div #container></div>', isInline: true, styles: [":host{display:block}\n"], encapsulation: i0.ViewEncapsulation.None });
|
|
131
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: HotTableComponent, selector: "hot-table", inputs: { data: "data", settings: "settings" }, providers: [HotSettingsResolver], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: '<div #container></div>', isInline: true, styles: [":host{display:block}\n"], encapsulation: i0.ViewEncapsulation.None });
|
|
129
132
|
}
|
|
130
133
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HotTableComponent, decorators: [{
|
|
131
134
|
type: Component,
|
|
132
135
|
args: [{ selector: 'hot-table', template: '<div #container></div>', encapsulation: ViewEncapsulation.None, providers: [HotSettingsResolver], styles: [":host{display:block}\n"] }]
|
|
133
|
-
}], ctorParameters: function () { return [{ type: i1.HotSettingsResolver }, { type: i2.HotConfigService }, { type: i0.NgZone }]; }, propDecorators: {
|
|
136
|
+
}], ctorParameters: function () { return [{ type: i1.HotSettingsResolver }, { type: i2.HotConfigService }, { type: i0.NgZone }]; }, propDecorators: { data: [{
|
|
137
|
+
type: Input
|
|
138
|
+
}], settings: [{
|
|
134
139
|
type: Input
|
|
135
140
|
}], container: [{
|
|
136
141
|
type: ViewChild,
|
|
137
142
|
args: ['container', { static: false }]
|
|
138
143
|
}] } });
|
|
139
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90LXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2hvdC10YWJsZS9zcmMvbGliL2hvdC10YWJsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFFVCxLQUFLLEVBS0wsU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLFlBQVksTUFBTSxtQkFBbUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7OztBQU0vRSxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FDaEMsK0VBQStFO0lBQy9FLGlCQUFpQixDQUFDO0FBZXBCLE1BQU0sT0FBTyxpQkFBaUI7SUFjbEI7SUFDQTtJQUNEO0lBZlQsbUJBQW1CO0lBQ25CLGtEQUFrRDtJQUN6QyxRQUFRLENBQWU7SUFFaEMsMkRBQTJEO0lBRXBELFNBQVMsQ0FBNkI7SUFFN0MsaUNBQWlDO0lBQ3pCLGFBQWEsR0FBd0IsSUFBSSxDQUFDO0lBQzFDLGtCQUFrQixDQUFlO0lBRXpDLFlBQ1Usb0JBQXlDLEVBQ3pDLFVBQTRCLEVBQzdCLE1BQWM7UUFGYix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXFCO1FBQ3pDLGVBQVUsR0FBVixVQUFVLENBQWtCO1FBQzdCLFdBQU0sR0FBTixNQUFNLENBQVE7SUFDcEIsQ0FBQztJQUVKOzs7T0FHRztJQUNILElBQVcsV0FBVztRQUNwQixJQUNFLENBQUMsSUFBSSxDQUFDLGFBQWE7WUFDbkIsQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsRUFDdkQ7WUFDQSxnRkFBZ0Y7WUFDaEYsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO1NBQzNCO2FBQU07WUFDTCxPQUFPLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENB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SUFDSyxxQkFBcUIsQ0FBQyxRQUFtQztRQUMvRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzlDLE1BQU0sa0JBQWtCLEdBQThCLEVBQUUsQ0FBQTtRQUV4RCxrQkFBa0IsQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLFVBQVUsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDO1FBQ3pFLGtCQUFrQixDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxTQUFTLENBQUM7UUFDekUsa0JBQWtCLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQztRQUV0RSxnRkFBZ0Y7UUFDaEYsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdkIsa0JBQWtCLENBQUMsZUFBZSxHQUFHLFFBQVEsQ0FBQyxlQUFlLElBQUksU0FBUyxDQUFDLGVBQWUsQ0FBQztTQUM1RjtRQUVELE9BQU8sa0JBQWtCLENBQUM7SUFDNUIsQ0FBQzt3R0FoSlUsaUJBQWlCOzRGQUFqQixpQkFBaUIsc0VBVGpCLENBQUMsbUJBQW1CLENBQUMsdUpBRnRCLHdCQUF3Qjs7NEZBV3ZCLGlCQUFpQjtrQkFiN0IsU0FBUzsrQkFDRSxXQUFXLFlBQ1gsd0JBQXdCLGlCQUNuQixpQkFBaUIsQ0FBQyxJQUFJLGFBQzFCLENBQUMsbUJBQW1CLENBQUM7OEpBWXZCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBSUMsU0FBUztzQkFEZixTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBIYW5kc29udGFibGUgZnJvbSAnaGFuZHNvbnRhYmxlL2Jhc2UnO1xuaW1wb3J0IHsgSG90U2V0dGluZ3NSZXNvbHZlciB9IGZyb20gJy4vc2VydmljZXMvaG90LXNldHRpbmdzLXJlc29sdmVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgSG90Q29uZmlnU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvaG90LWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IEdyaWRTZXR0aW5ncyB9IGZyb20gJy4vbW9kZWxzL2dyaWQtc2V0dGluZ3MnO1xuaW1wb3J0IHsgQ29sdW1uU2V0dGluZ3NJbnRlcm5hbCB9IGZyb20gJy4vbW9kZWxzL2NvbHVtbi1zZXR0aW5ncyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGNvbnN0IEhPVF9ERVNUUk9ZRURfV0FSTklORyA9XG4gICdUaGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlIGJvdW5kIHRvIHRoaXMgY29tcG9uZW50IHdhcyBkZXN0cm95ZWQgYW5kIGNhbm5vdCBiZScgK1xuICAnIHVzZWQgcHJvcGVybHkuJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaG90LXRhYmxlJyxcbiAgdGVtcGxhdGU6ICc8ZGl2ICNjb250YWluZXI+PC9kaXY+JyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgcHJvdmlkZXJzOiBbSG90U2V0dGluZ3NSZXNvbHZlcl0sXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgSG90VGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIC8vIGNvbXBvbmVudCBpbnB1dHNcbiAgLyoqIFRoZSBzZXR0aW5ncyBmb3IgdGhlIEhhbmRzb250YWJsZSBpbnN0YW5jZS4gKi9cbiAgQElucHV0KCkgc2V0dGluZ3M6IEdyaWRTZXR0aW5ncztcblxuICAvKiogVGhlIGNvbnRhaW5lciBlbGVtZW50IGZvciB0aGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlLiAqL1xuICBAVmlld0NoaWxkKCdjb250YWluZXInLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgcHVibGljIGNvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgLyoqIFRoZSBIYW5kc29udGFibGUgaW5zdGFuY2UuICovXG4gIHByaXZhdGUgX19ob3RJbnN0YW5jZTogSGFuZHNvbnRhYmxlIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY29uZmlnU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfaG90U2V0dGluZ3NSZXNvbHZlcjogSG90U2V0dGluZ3NSZXNvbHZlcixcbiAgICBwcml2YXRlIF9ob3RDb25maWc6IEhvdENvbmZpZ1NlcnZpY2UsXG4gICAgcHVibGljIG5nWm9uZTogTmdab25lXG4gICkge31cblxuICAvKipcbiAgICogR2V0cyB0aGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICAgKiBAcmV0dXJucyBUaGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlIG9yIGBudWxsYCBpZiBpdCdzIG5vdCB5ZXQgYmVlbiBjcmVhdGVkIG9yIGhhcyBiZWVuIGRlc3Ryb3llZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaG90SW5zdGFuY2UoKTogSGFuZHNvbnRhYmxlIHwgbnVsbCB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuX19ob3RJbnN0YW5jZSB8fFxuICAgICAgKHRoaXMuX19ob3RJbnN0YW5jZSAmJiAhdGhpcy5fX2hvdEluc3RhbmNlLmlzRGVzdHJveWVkKVxuICAgICkge1xuICAgICAgLy8gV2lsbCByZXR1cm4gdGhlIEhhbmRzb250YWJsZSBpbnN0YW5jZSBvciBgbnVsbGAgaWYgaXQncyBub3QgeWV0IGJlZW4gY3JlYXRlZC5cbiAgICAgIHJldHVybiB0aGlzLl9faG90SW5zdGFuY2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihIT1RfREVTVFJPWUVEX1dBUk5JTkcpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAgICogQHBhcmFtIGhvdEluc3RhbmNlIFRoZSBIYW5kc29udGFibGUgaW5zdGFuY2UgdG8gc2V0LlxuICAgKi9cbiAgcHJpdmF0ZSBzZXQgaG90SW5zdGFuY2UoaG90SW5zdGFuY2UpIHtcbiAgICB0aGlzLl9faG90SW5zdGFuY2UgPSBob3RJbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlIGFmdGVyIHRoZSB2aWV3IGhhcyBiZWVuIGluaXRpYWxpemVkLlxuICAgKiBUaGUgaW5pdGlhbCBzZXR0aW5ncyBvZiB0aGUgdGFibGUgYXJlIGFsc28gcHJlcGFyZWQgaGVyZVxuICAgKi9cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGxldCBvcHRpb25zOiBIYW5kc29udGFibGUuR3JpZFNldHRpbmdzID1cbiAgICAgIHRoaXMuX2hvdFNldHRpbmdzUmVzb2x2ZXIuYXBwbHlDdXN0b21TZXR0aW5ncyh0aGlzLnNldHRpbmdzKTtcblxuICAgIGNvbnN0IG5lZ290aWF0ZWRTZXR0aW5ncyA9IHRoaXMuZ2V0TmVnb3RpYXRlZFNldHRpbmdzKG9wdGlvbnMpO1xuICAgIG9wdGlvbnMgPSB7Li4ub3B0aW9ucywgLi4ubmVnb3RpYXRlZFNldHRpbmdzfTtcblxuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRoaXMuaG90SW5zdGFuY2UgPSBuZXcgSGFuZHNvbnRhYmxlLkNvcmUoXG4gICAgICAgIHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIG9wdGlvbnNcbiAgICAgICk7XG5cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHRoaXMuaG90SW5zdGFuY2UuaW5pdCgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5jb25maWdTdWJzY3JpcHRpb24gPSB0aGlzLl9ob3RDb25maWcuY29uZmlnJC5zdWJzY3JpYmUoKGNvbmZpZykgPT4ge1xuICAgICAgaWYgKHRoaXMuaG90SW5zdGFuY2UpIHtcbiAgICAgICAgY29uc3QgbmVnb3RpYXRlZFNldHRpbmdzID0gdGhpcy5nZXROZWdvdGlhdGVkU2V0dGluZ3ModGhpcy5zZXR0aW5ncyk7XG4gICAgICAgIHRoaXMudXBkYXRlSG90VGFibGUobmVnb3RpYXRlZFNldHRpbmdzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5ob3RJbnN0YW5jZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLnNldHRpbmdzICYmICFjaGFuZ2VzLnNldHRpbmdzLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCBuZXdPcHRpb25zOiBIYW5kc29udGFibGUuR3JpZFNldHRpbmdzID1cbiAgICAgICAgdGhpcy5faG90U2V0dGluZ3NSZXNvbHZlci5hcHBseUN1c3RvbVNldHRpbmdzKFxuICAgICAgICAgIGNoYW5nZXMuc2V0dGluZ3MuY3VycmVudFZhbHVlXG4gICAgICAgICk7XG5cbiAgICAgIHRoaXMudXBkYXRlSG90VGFibGUobmV3T3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIHRoZSBIYW5kc29udGFibGUgaW5zdGFuY2UgYW5kIGNsZWFycyB0aGUgY29sdW1ucyBmcm9tIGN1c3RvbSBlZGl0b3JzLlxuICAgKi9cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaG90SW5zdGFuY2UpIHtcbiAgICAgICAgKHRoaXMuaG90SW5zdGFuY2UuZ2V0U2V0dGluZ3MoKS5jb2x1bW5zIGFzIENvbHVtblNldHRpbmdzSW50ZXJuYWxbXSlcbiAgICAgICAgICA/LmZpbHRlcigoY29sdW1uKSA9PiBjb2x1bW4uX2VkaXRvckNvbXBvbmVudFJlZmVyZW5jZSlcbiAgICAgICAgICAuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBjb2x1bW4uX2VkaXRvckNvbXBvbmVudFJlZmVyZW5jZT8uZGVzdHJveSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB0aGlzLmhvdEluc3RhbmNlLmRlc3Ryb3koKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuY29uZmlnU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlIHdpdGggbmV3IHNldHRpbmdzLlxuICAgKiBAcGFyYW0gbmV3U2V0dGluZ3MgVGhlIG5ldyBzZXR0aW5ncyB0byBhcHBseSB0byB0aGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVIb3RUYWJsZShuZXdTZXR0aW5nczogSGFuZHNvbnRhYmxlLkdyaWRTZXR0aW5ncyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5ob3RJbnN0YW5jZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRoaXMuaG90SW5zdGFuY2U/LnVwZGF0ZVNldHRpbmdzKG5ld1NldHRpbmdzLCBmYWxzZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWVyZ2VzIHRoZSBwcm92aWRlZCBIYW5kc29udGFibGUgZ3JpZCBzZXR0aW5ncyB3aXRoIHRoZSBnbG9iYWwgY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgcmV0cmlldmVzIHRoZSBnbG9iYWwgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBIb3RDb25maWdTZXJ2aWNlIGFuZCBuZWdvdGlhdGVzIHRoZSBmaW5hbFxuICAgKiBIYW5kc29udGFibGUgc2V0dGluZ3MgYnkgZ2l2aW5nIHByZWNlZGVuY2UgdG8gdGhlIHByb3ZpZGVkIHNldHRpbmdzLlxuICAgKiBBZGRpdGlvbmFsbHksIHRoZSBgbGF5b3V0RGlyZWN0aW9uYCBpcyBvbmx5IG1lcmdlZCBpZiB0aGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlIGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQuXG4gICAqXG4gICAqIEBwYXJhbSBzZXR0aW5ncyAtIFRoZSBncmlkIHNldHRpbmdzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIG9yIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIGZpbmFsIG5lZ290aWF0ZWQgZ3JpZCBzZXR0aW5ncyBhZnRlciBtZXJnaW5nIHdpdGggZ2xvYmFsIGRlZmF1bHRzLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXROZWdvdGlhdGVkU2V0dGluZ3Moc2V0dGluZ3M6IEhhbmRzb250YWJsZS5HcmlkU2V0dGluZ3MpOiBIYW5kc29udGFibGUuR3JpZFNldHRpbmdzIHtcbiAgICBjb25zdCBob3RDb25maWcgPSB0aGlzLl9ob3RDb25maWcuZ2V0Q29uZmlnKCk7XG4gICAgY29uc3QgbmVnb3RpYXRlZFNldHRpbmdzOiBIYW5kc29udGFibGUuR3JpZFNldHRpbmdzID0ge31cblxuICAgIG5lZ290aWF0ZWRTZXR0aW5ncy5saWNlbnNlS2V5ID0gc2V0dGluZ3MubGljZW5zZUtleSA/PyBob3RDb25maWcubGljZW5zZTtcbiAgICBuZWdvdGlhdGVkU2V0dGluZ3MudGhlbWVOYW1lID0gc2V0dGluZ3MudGhlbWVOYW1lID8/IGhvdENvbmZpZy50aGVtZU5hbWU7XG4gICAgbmVnb3RpYXRlZFNldHRpbmdzLmxhbmd1YWdlID0gc2V0dGluZ3MubGFuZ3VhZ2UgPz8gaG90Q29uZmlnLmxhbmd1YWdlO1xuXG4gICAgLy8gc2V0dGluZ3MgdGhhdCBjYW4gYmUgc2V0IG9ubHkgYmVmb3JlIHRoZSBIYW5kc29udGFibGUgaW5zdGFuY2UgaXMgaW5pdGlhbGl6ZWRcbiAgICBpZiAoIXRoaXMuX19ob3RJbnN0YW5jZSkge1xuICAgICAgbmVnb3RpYXRlZFNldHRpbmdzLmxheW91dERpcmVjdGlvbiA9IHNldHRpbmdzLmxheW91dERpcmVjdGlvbiA/PyBob3RDb25maWcubGF5b3V0RGlyZWN0aW9uO1xuICAgIH1cblxuICAgIHJldHVybiBuZWdvdGlhdGVkU2V0dGluZ3M7XG4gIH1cbn1cbiJdfQ==
|
|
144
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90LXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2hvdC10YWJsZS9zcmMvbGliL2hvdC10YWJsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWMsS0FBSyxFQUErQyxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkosT0FBTyxZQUFZLE1BQU0sbUJBQW1CLENBQUM7QUFDN0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMENBQTBDLENBQUM7Ozs7QUFNL0UsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsK0VBQStFLEdBQUcsaUJBQWlCLENBQUM7QUFlekksTUFBTSxPQUFPLGlCQUFpQjtJQWVSO0lBQW1EO0lBQXFDO0lBZDVHLG1CQUFtQjtJQUNuQiw4Q0FBOEM7SUFDckMsSUFBSSxHQUE2QyxFQUFFLENBQUM7SUFDN0Qsa0RBQWtEO0lBQ3pDLFFBQVEsQ0FBZTtJQUVoQywyREFBMkQ7SUFFcEQsU0FBUyxDQUE2QjtJQUU3QyxpQ0FBaUM7SUFDekIsYUFBYSxHQUF3QixJQUFJLENBQUM7SUFDMUMsa0JBQWtCLENBQWU7SUFFekMsWUFBb0Isb0JBQXlDLEVBQVUsVUFBNEIsRUFBUyxNQUFjO1FBQXRHLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBcUI7UUFBVSxlQUFVLEdBQVYsVUFBVSxDQUFrQjtRQUFTLFdBQU0sR0FBTixNQUFNLENBQVE7SUFBRyxDQUFDO0lBRTlIOzs7T0FHRztJQUNILElBQVcsV0FBVztRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ2xGLGdGQUFnRjtZQUNoRixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7U0FDM0I7YUFBTTtZ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QUFaLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFJQyxTQUFTO3NCQURmLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE5nWm9uZSwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBIYW5kc29udGFibGUgZnJvbSAnaGFuZHNvbnRhYmxlL2Jhc2UnO1xuaW1wb3J0IHsgSG90U2V0dGluZ3NSZXNvbHZlciB9IGZyb20gJy4vc2VydmljZXMvaG90LXNldHRpbmdzLXJlc29sdmVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgSG90Q29uZmlnU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvaG90LWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IEdyaWRTZXR0aW5ncyB9IGZyb20gJy4vbW9kZWxzL2dyaWQtc2V0dGluZ3MnO1xuaW1wb3J0IHsgQ29sdW1uU2V0dGluZ3NJbnRlcm5hbCB9IGZyb20gJy4vbW9kZWxzL2NvbHVtbi1zZXR0aW5ncyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGNvbnN0IEhPVF9ERVNUUk9ZRURfV0FSTklORyA9ICdUaGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlIGJvdW5kIHRvIHRoaXMgY29tcG9uZW50IHdhcyBkZXN0cm95ZWQgYW5kIGNhbm5vdCBiZScgKyAnIHVzZWQgcHJvcGVybHkuJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaG90LXRhYmxlJyxcbiAgdGVtcGxhdGU6ICc8ZGl2ICNjb250YWluZXI+PC9kaXY+JyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgcHJvdmlkZXJzOiBbSG90U2V0dGluZ3NSZXNvbHZlcl0sXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgSG90VGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIC8vIGNvbXBvbmVudCBpbnB1dHNcbiAgLyoqIFRoZSBkYXRhIGZvciB0aGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlLiAqL1xuICBASW5wdXQoKSBkYXRhOiBIYW5kc29udGFibGUuR3JpZFNldHRpbmdzWydkYXRhJ10gfCBudWxsID0gW107XG4gIC8qKiBUaGUgc2V0dGluZ3MgZm9yIHRoZSBIYW5kc29udGFibGUgaW5zdGFuY2UuICovXG4gIEBJbnB1dCgpIHNldHRpbmdzOiBHcmlkU2V0dGluZ3M7XG5cbiAgLyoqIFRoZSBjb250YWluZXIgZWxlbWVudCBmb3IgdGhlIEhhbmRzb250YWJsZSBpbnN0YW5jZS4gKi9cbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIHB1YmxpYyBjb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIC8qKiBUaGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlLiAqL1xuICBwcml2YXRlIF9faG90SW5zdGFuY2U6IEhhbmRzb250YWJsZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGNvbmZpZ1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2hvdFNldHRpbmdzUmVzb2x2ZXI6IEhvdFNldHRpbmdzUmVzb2x2ZXIsIHByaXZhdGUgX2hvdENvbmZpZzogSG90Q29uZmlnU2VydmljZSwgcHVibGljIG5nWm9uZTogTmdab25lKSB7fVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAqIEByZXR1cm5zIFRoZSBIYW5kc29udGFibGUgaW5zdGFuY2Ugb3IgYG51bGxgIGlmIGl0J3Mgbm90IHlldCBiZWVuIGNyZWF0ZWQgb3IgaGFzIGJlZW4gZGVzdHJveWVkLlxuICAgKi9cbiAgcHVibGljIGdldCBob3RJbnN0YW5jZSgpOiBIYW5kc29udGFibGUgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuX19ob3RJbnN0YW5jZSB8fCAodGhpcy5fX2hvdEluc3RhbmNlICYmICF0aGlzLl9faG90SW5zdGFuY2UuaXNEZXN0cm95ZWQpKSB7XG4gICAgICAvLyBXaWxsIHJldHVybiB0aGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlIG9yIGBudWxsYCBpZiBpdCdzIG5vdCB5ZXQgYmVlbiBjcmVhdGVkLlxuICAgICAgcmV0dXJuIHRoaXMuX19ob3RJbnN0YW5jZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKEhPVF9ERVNUUk9ZRURfV0FSTklORyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gaG90SW5zdGFuY2UgVGhlIEhhbmRzb250YWJsZSBpbnN0YW5jZSB0byBzZXQuXG4gICAqL1xuICBwcml2YXRlIHNldCBob3RJbnN0YW5jZShob3RJbnN0YW5jZSkge1xuICAgIHRoaXMuX19ob3RJbnN0YW5jZSA9IGhvdEluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBIYW5kc29udGFibGUgaW5zdGFuY2UgYWZ0ZXIgdGhlIHZpZXcgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuXG4gICAqIFRoZSBpbml0aWFsIHNldHRpbmdzIG9mIHRoZSB0YWJsZSBhcmUgYWxzbyBwcmVwYXJlZCBoZXJlXG4gICAqL1xuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgbGV0IG9wdGlvbnM6IEhhbmRzb250YWJsZS5HcmlkU2V0dGluZ3MgPSB0aGlzLl9ob3RTZXR0aW5nc1Jlc29sdmVyLmFwcGx5Q3VzdG9tU2V0dGluZ3ModGhpcy5zZXR0aW5ncywgdGhpcy5uZ1pvbmUpO1xuXG4gICAgY29uc3QgbmVnb3RpYXRlZFNldHRpbmdzID0gdGhpcy5nZXROZWdvdGlhdGVkU2V0dGluZ3Mob3B0aW9ucyk7XG4gICAgb3B0aW9ucyA9IHsgLi4ub3B0aW9ucywgLi4ubmVnb3RpYXRlZFNldHRpbmdzLCBkYXRhOiB0aGlzLmRhdGEgfTtcblxuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRoaXMuaG90SW5zdGFuY2UgPSBuZXcgSGFuZHNvbnRhYmxlLkNvcmUodGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudCwgb3B0aW9ucyk7XG5cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHRoaXMuaG90SW5zdGFuY2UuaW5pdCgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5jb25maWdTdWJzY3JpcHRpb24gPSB0aGlzLl9ob3RDb25maWcuY29uZmlnJC5zdWJzY3JpYmUoKGNvbmZpZykgPT4ge1xuICAgICAgaWYgKHRoaXMuaG90SW5zdGFuY2UpIHtcbiAgICAgICAgY29uc3QgbmVnb3RpYXRlZFNldHRpbmdzID0gdGhpcy5nZXROZWdvdGlhdGVkU2V0dGluZ3ModGhpcy5zZXR0aW5ncyk7XG4gICAgICAgIHRoaXMudXBkYXRlSG90VGFibGUobmVnb3RpYXRlZFNldHRpbmdzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5ob3RJbnN0YW5jZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLnNldHRpbmdzICYmICFjaGFuZ2VzLnNldHRpbmdzLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCBuZXdPcHRpb25zOiBIYW5kc29udGFibGUuR3JpZFNldHRpbmdzID0gdGhpcy5faG90U2V0dGluZ3NSZXNvbHZlci5hcHBseUN1c3RvbVNldHRpbmdzKGNoYW5nZXMuc2V0dGluZ3MuY3VycmVudFZhbHVlLCB0aGlzLm5nWm9uZSk7XG5cbiAgICAgIHRoaXMudXBkYXRlSG90VGFibGUobmV3T3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXMuZGF0YSAmJiAhY2hhbmdlcy5kYXRhLmZpcnN0Q2hhbmdlKSB7XG4gICAgICB0aGlzLmhvdEluc3RhbmNlPy51cGRhdGVEYXRhKGNoYW5nZXMuZGF0YS5jdXJyZW50VmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95cyB0aGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlIGFuZCBjbGVhcnMgdGhlIGNvbHVtbnMgZnJvbSBjdXN0b20gZWRpdG9ycy5cbiAgICovXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmhvdEluc3RhbmNlKSB7XG4gICAgICAgICh0aGlzLmhvdEluc3RhbmNlLmdldFNldHRpbmdzKCkuY29sdW1ucyBhcyBDb2x1bW5TZXR0aW5nc0ludGVybmFsW10pXG4gICAgICAgICAgPy5maWx0ZXIoKGNvbHVtbikgPT4gY29sdW1uLl9lZGl0b3JDb21wb25lbnRSZWZlcmVuY2UpXG4gICAgICAgICAgLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgY29sdW1uLl9lZGl0b3JDb21wb25lbnRSZWZlcmVuY2U/LmRlc3Ryb3koKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5ob3RJbnN0YW5jZS5kZXN0cm95KCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmNvbmZpZ1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIEhhbmRzb250YWJsZSBpbnN0YW5jZSB3aXRoIG5ldyBzZXR0aW5ncy5cbiAgICogQHBhcmFtIG5ld1NldHRpbmdzIFRoZSBuZXcgc2V0dGluZ3MgdG8gYXBwbHkgdG8gdGhlIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAgICovXG4gIHByaXZhdGUgdXBkYXRlSG90VGFibGUobmV3U2V0dGluZ3M6IEhhbmRzb250YWJsZS5HcmlkU2V0dGluZ3MpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaG90SW5zdGFuY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLmhvdEluc3RhbmNlPy51cGRhdGVTZXR0aW5ncyhuZXdTZXR0aW5ncywgZmFsc2UpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1lcmdlcyB0aGUgcHJvdmlkZWQgSGFuZHNvbnRhYmxlIGdyaWQgc2V0dGluZ3Mgd2l0aCB0aGUgZ2xvYmFsIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIHJldHJpZXZlcyB0aGUgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgSG90Q29uZmlnU2VydmljZSBhbmQgbmVnb3RpYXRlcyB0aGUgZmluYWxcbiAgICogSGFuZHNvbnRhYmxlIHNldHRpbmdzIGJ5IGdpdmluZyBwcmVjZWRlbmNlIHRvIHRoZSBwcm92aWRlZCBzZXR0aW5ncy5cbiAgICogQWRkaXRpb25hbGx5LCB0aGUgYGxheW91dERpcmVjdGlvbmAgaXMgb25seSBtZXJnZWQgaWYgdGhlIEhhbmRzb250YWJsZSBpbnN0YW5jZSBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLlxuICAgKlxuICAgKiBAcGFyYW0gc2V0dGluZ3MgLSBUaGUgZ3JpZCBzZXR0aW5ncyBwcm92aWRlZCBieSB0aGUgdXNlciBvciBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIFRoZSBmaW5hbCBuZWdvdGlhdGVkIGdyaWQgc2V0dGluZ3MgYWZ0ZXIgbWVyZ2luZyB3aXRoIGdsb2JhbCBkZWZhdWx0cy5cbiAgICovXG4gIHByaXZhdGUgZ2V0TmVnb3RpYXRlZFNldHRpbmdzKHNldHRpbmdzOiBHcmlkU2V0dGluZ3MpOiBIYW5kc29udGFibGUuR3JpZFNldHRpbmdzIHtcbiAgICBjb25zdCBob3RDb25maWcgPSB0aGlzLl9ob3RDb25maWcuZ2V0Q29uZmlnKCk7XG4gICAgY29uc3QgbmVnb3RpYXRlZFNldHRpbmdzOiBIYW5kc29udGFibGUuR3JpZFNldHRpbmdzID0ge307XG5cbiAgICBuZWdvdGlhdGVkU2V0dGluZ3MubGljZW5zZUtleSA9IHNldHRpbmdzLmxpY2Vuc2VLZXkgPz8gaG90Q29uZmlnLmxpY2Vuc2U7XG4gICAgbmVnb3RpYXRlZFNldHRpbmdzLnRoZW1lTmFtZSA9IHNldHRpbmdzLnRoZW1lTmFtZSA/PyBob3RDb25maWcudGhlbWVOYW1lO1xuICAgIG5lZ290aWF0ZWRTZXR0aW5ncy5sYW5ndWFnZSA9IHNldHRpbmdzLmxhbmd1YWdlID8/IGhvdENvbmZpZy5sYW5ndWFnZTtcblxuICAgIC8vIHNldHRpbmdzIHRoYXQgY2FuIGJlIHNldCBvbmx5IGJlZm9yZSB0aGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlIGlzIGluaXRpYWxpemVkXG4gICAgaWYgKCF0aGlzLl9faG90SW5zdGFuY2UpIHtcbiAgICAgIG5lZ290aWF0ZWRTZXR0aW5ncy5sYXlvdXREaXJlY3Rpb24gPSBzZXR0aW5ncy5sYXlvdXREaXJlY3Rpb24gPz8gaG90Q29uZmlnLmxheW91dERpcmVjdGlvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gbmVnb3RpYXRlZFNldHRpbmdzO1xuICB9XG59XG4iXX0=
|
|
@@ -3,7 +3,7 @@ import { HotTableComponent } from './hot-table.component';
|
|
|
3
3
|
import { CustomEditorPlaceholderComponent } from './editor/custom-editor-placeholder.component';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export class HotTableModule {
|
|
6
|
-
static version = '0.0.0-next-
|
|
6
|
+
static version = '0.0.0-next-d9b3885-20250415';
|
|
7
7
|
constructor() { }
|
|
8
8
|
static forRoot() {
|
|
9
9
|
return {
|
|
@@ -22,4 +22,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
22
22
|
exports: [HotTableComponent],
|
|
23
23
|
}]
|
|
24
24
|
}], ctorParameters: function () { return []; } });
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90LXRhYmxlLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2hvdC10YWJsZS9zcmMvbGliL2hvdC10YWJsZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sOENBQThDLENBQUM7O0FBT2hHLE1BQU0sT0FBTyxjQUFjO0lBQ3pCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsNkJBQTZCLENBQUM7SUFFL0MsZ0JBQWUsQ0FBQztJQUVULE1BQU0sQ0FBQyxPQUFPO1FBQ25CLE9BQU87WUFDTCxRQUFRLEVBQUUsY0FBYztTQUN6QixDQUFDO0lBQ0osQ0FBQzt3R0FUVSxjQUFjO3lHQUFkLGNBQWMsaUJBSlYsaUJBQWlCLEVBQUUsZ0NBQWdDLGFBRXhELGlCQUFpQjt5R0FFaEIsY0FBYzs7NEZBQWQsY0FBYztrQkFMMUIsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxnQ0FBZ0MsQ0FBQztvQkFDbkUsT0FBTyxFQUFFLEVBQUU7b0JBQ1gsT0FBTyxFQUFFLENBQUMsaUJBQWlCLENBQUM7aUJBQzdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUsIE1vZHVsZVdpdGhQcm92aWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEhvdFRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi9ob3QtdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IEN1c3RvbUVkaXRvclBsYWNlaG9sZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9lZGl0b3IvY3VzdG9tLWVkaXRvci1wbGFjZWhvbGRlci5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtIb3RUYWJsZUNvbXBvbmVudCwgQ3VzdG9tRWRpdG9yUGxhY2Vob2xkZXJDb21wb25lbnRdLFxuICBpbXBvcnRzOiBbXSxcbiAgZXhwb3J0czogW0hvdFRhYmxlQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgSG90VGFibGVNb2R1bGUge1xuICBzdGF0aWMgdmVyc2lvbiA9ICcwLjAuMC1uZXh0LWQ5YjM4ODUtMjAyNTA0MTUnO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBwdWJsaWMgc3RhdGljIGZvclJvb3QoKTogTW9kdWxlV2l0aFByb3ZpZGVyczxIb3RUYWJsZU1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogSG90VGFibGVNb2R1bGUsXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLXNldHRpbmdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaG90LXRhYmxlL3NyYy9saWIvbW9kZWxzL2NvbHVtbi1zZXR0aW5ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50UmVmLCBFbnZpcm9ubWVudEluamVjdG9yLCBUeXBlLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IEhhbmRzb250YWJsZSBmcm9tICdoYW5kc29udGFibGUnO1xuaW1wb3J0IHsgSG90Q2VsbFJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vcmVuZGVyZXIvaG90LWNlbGwtcmVuZGVyZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEhvdENlbGxFZGl0b3JDb21wb25lbnQgfSBmcm9tICcuLi9lZGl0b3IvaG90LWNlbGwtZWRpdG9yLmNvbXBvbmVudCc7XG5cbmV4cG9ydCB0eXBlIEN1c3RvbVZhbGlkYXRvckZuPFQ+ID0gKHZhbHVlOiBUKSA9PiBib29sZWFuO1xuXG5leHBvcnQgdHlwZSBDb2x1bW5TZXR0aW5ncyA9XG4gIHwgSGFuZHNvbnRhYmxlLkNvbHVtblNldHRpbmdzXG4gIHwge1xuICAgICAgZWRpdG9yPzogVHlwZTxIb3RDZWxsRWRpdG9yQ29tcG9uZW50PGFueT4+IHwgIEhhbmRzb250YWJsZS5Db2x1bW5TZXR0aW5nc1snZWRpdG9yJ107XG4gICAgICByZW5kZXJlcj86IFR5cGU8SG90Q2VsbFJlbmRlcmVyQ29tcG9uZW50PGFueSwgYW55Pj4gfCBUZW1wbGF0ZVJlZjxhbnk+IHwgSGFuZHNvbnRhYmxlLkNvbHVtblNldHRpbmdzWydyZW5kZXJlciddO1xuICAgICAgdmFsaWRhdG9yPzogQ3VzdG9tVmFsaWRhdG9yRm48YW55PiB8IEhhbmRzb250YWJsZS5Db2x1bW5TZXR0aW5nc1sndmFsaWRhdG9yJ107XG4gICAgICByZW5kZXJlclByb3BzPzogYW55O1xuICAgIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgRWRpdG9yUmVmZXJlbmNlSW50ZXJuYWwge1xuICBfZWRpdG9yQ29tcG9uZW50UmVmZXJlbmNlPzogQ29tcG9uZW50UmVmPEhvdENlbGxFZGl0b3JDb21wb25lbnQ8YW55Pj47XG4gIF9lbnZpcm9ubWVudEluamVjdG9yPzogRW52aXJvbm1lbnRJbmplY3Rvcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb2x1bW5TZXR0aW5nc0ludGVybmFsIGV4dGVuZHMgSGFuZHNvbnRhYmxlLkNvbHVtblNldHRpbmdzLCBFZGl0b3JSZWZlcmVuY2VJbnRlcm5hbCB7fVxuIl19
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1zZXR0aW5ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2hvdC10YWJsZS9zcmMvbGliL21vZGVscy9ncmlkLXNldHRpbmdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgSGFuZHNvbnRhYmxlIGZyb20gJ2hhbmRzb250YWJsZSc7XG5pbXBvcnQgeyBDb2x1bW5TZXR0aW5ncywgQ29sdW1uU2V0dGluZ3NJbnRlcm5hbCB9IGZyb20gJy4vY29sdW1uLXNldHRpbmdzJztcblxuZXhwb3J0IGludGVyZmFjZSBHcmlkU2V0dGluZ3MgZXh0ZW5kcyBPbWl0PEhhbmRzb250YWJsZS5HcmlkU2V0dGluZ3MsICdjb2x1bW5zJyB8ICdkYXRhJz4ge1xuICBjb2x1bW5zPzogQ29sdW1uU2V0dGluZ3NbXSB8ICgoaW5kZXg6IG51bWJlcikgPT4gQ29sdW1uU2V0dGluZ3MpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdyaWRTZXR0aW5nc0ludGVybmFsIGV4dGVuZHMgT21pdDxHcmlkU2V0dGluZ3MsICdjb2x1bW5zJz4ge1xuICBjb2x1bW5zPzogQ29sdW1uU2V0dGluZ3NJbnRlcm5hbFtdIHwgKChpbmRleDogbnVtYmVyKSA9PiBDb2x1bW5TZXR0aW5nc0ludGVybmFsKTtcbn1cbiJdfQ==
|
|
@@ -5,6 +5,19 @@ import * as i0 from "@angular/core";
|
|
|
5
5
|
* A constant representing the non-commercial and evaluation license.
|
|
6
6
|
* */
|
|
7
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 = {}));
|
|
8
21
|
/**
|
|
9
22
|
* Injection token for providing a global default configuration.
|
|
10
23
|
*/
|
|
@@ -94,4 +107,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
94
107
|
type: Inject,
|
|
95
108
|
args: [HOT_GLOBAL_CONFIG]
|
|
96
109
|
}] }]; } });
|
|
97
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
110
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90LWNvbmZpZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaG90LXRhYmxlL3NyYy9saWIvc2VydmljZXMvaG90LWNvbmZpZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUMsZUFBZSxFQUFhLE1BQU0sTUFBTSxDQUFDOztBQUVqRDs7S0FFSztBQUNMLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLCtCQUErQixDQUFDO0FBRXRFOzs7R0FHRztBQUNILE1BQU0sQ0FBTixJQUFZLGVBT1g7QUFQRCxXQUFZLGVBQWU7SUFDekIseUNBQXNCLENBQUE7SUFDdEIsa0RBQStCLENBQUE7SUFDL0IsMkRBQXdDLENBQUE7SUFDeEMsK0NBQTRCLENBQUE7SUFDNUIsd0RBQXFDLENBQUE7SUFDckMsaUVBQThDLENBQUE7QUFDaEQsQ0FBQyxFQVBXLGVBQWUsS0FBZixlQUFlLFFBTzFCO0FBaUNEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxjQUFjLENBQVksbUJBQW1CLEVBQUU7SUFDbEYsVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQ3BCLENBQUMsQ0FBQztBQUVIOzs7R0FHRztBQUlILE1BQU0sT0FBTyxnQkFBZ0I7SUFFM0I7Ozs7Ozs7OztPQVNHO0lBQ0ssYUFBYSxHQUFjO1FBQ2pDLE9BQU8sRUFBRSxTQUFTO1FBQ2xCLFNBQVMsRUFBRSxFQUFFO0tBQ2QsQ0FBQztJQUVGOzs7Ozs7OztPQVFHO0lBQ0ssYUFBYSxHQUFHLElBQUksZUFBZSxDQUFZLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUUzRTs7Ozs7O09BTUc7SUFDSCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVELFlBQzZCLFlBQXVCO1FBRWxELHlFQUF5RTtRQUN6RSxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLEdBQUcsWUFBWSxFQUFFLENBQUM7UUFDaEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFNBQVMsQ0FBQyxNQUFpQjtRQUN6QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztRQUMvQyxNQUFNLFNBQVMsR0FBRyxFQUFFLEdBQUcsYUFBYSxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUM7UUFFbEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztJQUNsQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsV0FBVztRQUNULElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO3dHQTNFVSxnQkFBZ0Isa0JBd0NqQixpQkFBaUI7NEdBeENoQixnQkFBZ0IsY0FGZixNQUFNOzs0RkFFUCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkF5Q0ksTUFBTTsyQkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIEluamVjdGlvblRva2VuLCBJbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqIEEgY29uc3RhbnQgcmVwcmVzZW50aW5nIHRoZSBub24tY29tbWVyY2lhbCBhbmQgZXZhbHVhdGlvbiBsaWNlbnNlLlxuICogKi9cbmV4cG9ydCBjb25zdCBOT05fQ09NTUVSQ0lBTF9MSUNFTlNFID0gJ25vbi1jb21tZXJjaWFsLWFuZC1ldmFsdWF0aW9uJztcblxuLyoqXG4gKiBUeXBlIHJlcHJlc2VudGluZyBhIHRoZW1lIG5hbWUuXG4gKiBQb3NzaWJsZSB2YWx1ZXMgaW5jbHVkZSBwcmVkZWZpbmVkIHRoZW1lcyBhbmQgYW55IGN1c3RvbSBzdHJpbmcuXG4gKi9cbmV4cG9ydCBlbnVtIFByZWRlZmluZWRUaGVtZSB7XG4gIE1haW4gPSAnaHQtdGhlbWUtbWFpbicsXG4gIE1haW5EYXJrID0gJ2h0LXRoZW1lLW1haW4tZGFyaycsXG4gIE1haW5EYXJrQXV0byA9ICdodC10aGVtZS1tYWluLWRhcmstYXV0bycsXG4gIEhvcml6b24gPSAnaHQtdGhlbWUtaG9yaXpvbicsXG4gIEhvcml6b25EYXJrID0gJ2h0LXRoZW1lLWhvcml6b24tZGFyaycsXG4gIEhvcml6b25EYXJrQXV0byA9ICdodC10aGVtZS1ob3Jpem9uLWRhcmstYXV0bydcbn1cblxuZXhwb3J0IHR5cGUgVGhlbWVOYW1lID0gUHJlZGVmaW5lZFRoZW1lIHwgc3RyaW5nO1xuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgdGhlIEhhbmRzb250YWJsZSBnbG9iYWwgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIb3RDb25maWcge1xuICAvKipcbiAgICogVGhlIGxpY2Vuc2Uga2V5IGZvciBIYW5kc29udGFibGUuXG4gICAqL1xuICBsaWNlbnNlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgdGhlbWUgdG8gYmUgdXNlZC5cbiAgICovXG4gIHRoZW1lTmFtZT86IFRoZW1lTmFtZTtcblxuICAvKipcbiAgICogVGhlIGxhbmd1YWdlIGNvZGUgdG8gYmUgdXNlZCBmb3IgbG9jYWxpemF0aW9uLlxuICAgKiBGb3IgZXhhbXBsZSwgJ2VuLVVTJywgJ3BsLVBMJywgZXRjLlxuICAgKiAqKk5vdGU6KiogVGhlIGxhbmd1YWdlIG11c3QgYmUgY2hvc2VuIGZyb20gdGhlIGxhbmd1YWdlcyBzdXBwb3J0ZWQgYnkgSGFuZHNvbnRhYmxlIGFuZCByZWdpc3RlcmVkIGluIHRoZSBhcHBsaWNhdGlvbi5cbiAgICovXG4gIGxhbmd1YWdlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbGF5b3V0IGRpcmVjdGlvbiBmb3IgdGhlIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAgICogVGhpcyBwcm9wZXJ0eSBkZWZpbmVzIHdoZXRoZXIgdGhlIGxheW91dCBzaG91bGQgYmUgbGVmdC10by1yaWdodCAoJ2x0cicpLCByaWdodC10by1sZWZ0ICgncnRsJyksXG4gICAqIG9yIGluaGVyaXQgdGhlIGRpcmVjdGlvbiBmcm9tIHRoZSBwYXJlbnQgZWxlbWVudCAoJ2luaGVyaXQnKS5cbiAgICovXG4gIGxheW91dERpcmVjdGlvbj86ICdsdHInIHwgJ3J0bCcgfCAnaW5oZXJpdCc7XG59XG5cbi8qKlxuICogSW5qZWN0aW9uIHRva2VuIGZvciBwcm92aWRpbmcgYSBnbG9iYWwgZGVmYXVsdCBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgY29uc3QgSE9UX0dMT0JBTF9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48SG90Q29uZmlnPignSE9UX0dMT0JBTF9DT05GSUcnLCB7XG4gIHByb3ZpZGVkSW46ICdyb290JyxcbiAgZmFjdG9yeTogKCkgPT4gKHt9KVxufSk7XG5cbi8qKlxuICogU2VydmljZSBmb3IgY29uZmlndXJpbmcgSGFuZHNvbnRhYmxlIHNldHRpbmdzLlxuICogVGhpcyBzZXJ2aWNlIGFsbG93cyBzZXR0aW5nIGFuZCByZXRyaWV2aW5nIGdsb2JhbCBjb25maWd1cmF0aW9uLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgSG90Q29uZmlnU2VydmljZSB7XG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciBIYW5kc29udGFibGUuXG4gICAqXG4gICAqIFRoaXMgb2JqZWN0IGlzIHVzZWQgYXMgdGhlIGluaXRpYWwgdmFsdWUgZm9yIHRoZSBjb25maWd1cmF0aW9uIEJlaGF2aW9yU3ViamVjdC5cbiAgICogSXQgY2FuIGJlIG92ZXJyaWRkZW4gYnkgYSBnbG9iYWwgY29uZmlndXJhdGlvbiBwcm92aWRlZCB0aHJvdWdoIHRoZVxuICAgKiB7QGxpbmsgSE9UX0dMT0JBTF9DT05GSUd9IGluamVjdGlvbiB0b2tlbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge0hvdENvbmZpZ31cbiAgICovXG4gIHByaXZhdGUgZGVmYXVsdENvbmZpZzogSG90Q29uZmlnID0ge1xuICAgIGxpY2Vuc2U6IHVuZGVmaW5lZCxcbiAgICB0aGVtZU5hbWU6ICcnXG4gIH07XG5cbiAgLyoqXG4gICAqIEEgQmVoYXZpb3JTdWJqZWN0IHRoYXQgaG9sZHMgdGhlIGN1cnJlbnQgSGFuZHNvbnRhYmxlIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIE5ldyBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZW1pdHRlZCBieSBjYWxsaW5nIG5leHQoKSBvbiB0aGlzIHN1YmplY3QuXG4gICAqIFRoaXMgYWxsb3dzIHN1YnNjcmliZXJzIHRvIHJlYWN0IHRvIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBkeW5hbWljYWxseS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge0JlaGF2aW9yU3ViamVjdDxIb3RDb25maWc+fVxuICAgKi9cbiAgcHJpdmF0ZSBjb25maWdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxIb3RDb25maWc+KHRoaXMuZGVmYXVsdENvbmZpZyk7XG5cbiAgLyoqXG4gICAqIEFuIE9ic2VydmFibGUgc3RyZWFtIG9mIHRoZSBjdXJyZW50IEhhbmRzb250YWJsZSBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBDb21wb25lbnRzIGNhbiBzdWJzY3JpYmUgdG8gdGhpcyBvYnNlcnZhYmxlIHRvIHJlY2VpdmUgdXBkYXRlcyB3aGVuZXZlciB0aGUgY29uZmlndXJhdGlvbiBjaGFuZ2VzLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgY29uZmlndXJhdGlvbiBhcyBhbiBvYnNlcnZhYmxlIHN0cmVhbS5cbiAgICovXG4gIGdldCBjb25maWckKCk6IE9ic2VydmFibGU8SG90Q29uZmlnPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoSE9UX0dMT0JBTF9DT05GSUcpIGdsb2JhbENvbmZpZzogSG90Q29uZmlnXG4gICkge1xuICAgIC8vIE1lcmdlIGdsb2JhbCBjb25maWd1cmF0aW9uIChpZiBwcm92aWRlZCkgaW50byBkZWZhdWx0Q29uZmlnIGltbXV0YWJseS5cbiAgICB0aGlzLmRlZmF1bHRDb25maWcgPSB7IC4uLnRoaXMuZGVmYXVsdENvbmZpZywgLi4uZ2xvYmFsQ29uZmlnIH07XG4gICAgdGhpcy5jb25maWdTdWJqZWN0Lm5leHQodGhpcy5kZWZhdWx0Q29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjb25maWd1cmF0aW9uIGZvciBIYW5kc29udGFibGUuXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWcgLSBBbiBvYmplY3QgY29udGFpbmluZyBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG4gICAqICAgICAgICAgICAgICAgICBJZiBhIHNvbWUgcGFyYW1ldGVyIGlzIHByb3ZpZGVkLCBpdCB3aWxsIG92ZXJyaWRlIHRoZSBjdXJyZW50IHNldHRpbmdzLlxuICAgKi9cbiAgc2V0Q29uZmlnKGNvbmZpZzogSG90Q29uZmlnKSB7XG4gICAgY29uc3QgY3VycmVudENvbmZpZyA9IHRoaXMuY29uZmlnU3ViamVjdC52YWx1ZTtcbiAgICBjb25zdCBuZXdDb25maWcgPSB7IC4uLmN1cnJlbnRDb25maWcsIC4uLmNvbmZpZyB9O1xuXG4gICAgdGhpcy5jb25maWdTdWJqZWN0Lm5leHQobmV3Q29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgSGFuZHNvbnRhYmxlIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIHRoZSBjdXJyZW50IHNldHRpbmdzLlxuICAgKi9cbiAgZ2V0Q29uZmlnKCk6IEhvdENvbmZpZyB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnU3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIGNvbmZpZ3VyYXRpb24gdG8gdGhlIGRlZmF1bHQgc2V0dGluZ3MuXG4gICAqIFRoaXMgbWV0aG9kIHVwZGF0ZXMgdGhlIGNvbmZpZ3VyYXRpb24gQmVoYXZpb3JTdWJqZWN0IHdpdGggdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHJlc2V0Q29uZmlnKCk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlnU3ViamVjdC5uZXh0KHsgLi4udGhpcy5kZWZhdWx0Q29uZmlnIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
import { createComponent, Injectable, } from '@angular/core';
|
|
1
|
+
import { createComponent, Injectable, TemplateRef } from '@angular/core';
|
|
2
2
|
import { BaseEditorAdapter } from '../editor/base-editor-adapter';
|
|
3
|
+
import Handsontable from 'handsontable/base';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
import * as i1 from "../renderer/hot-dynamic-renderer-component.service";
|
|
6
|
+
const AVAILABLE_OPTIONS = Object.keys(Handsontable.DefaultSettings);
|
|
7
|
+
const AVAILABLE_HOOKS = Handsontable.hooks.getRegistered();
|
|
5
8
|
/**
|
|
6
9
|
* Service to resolve and apply custom settings for Handsontable settings object.
|
|
7
10
|
*/
|
|
@@ -15,15 +18,44 @@ export class HotSettingsResolver {
|
|
|
15
18
|
/**
|
|
16
19
|
* Applies custom settings to the provided GridSettings.
|
|
17
20
|
* @param settings The original grid settings.
|
|
21
|
+
* @param ngZone The NgZone instance to run hooks inside the zone context.
|
|
18
22
|
* @returns The merged grid settings with custom settings applied.
|
|
19
23
|
*/
|
|
20
|
-
applyCustomSettings(settings) {
|
|
24
|
+
applyCustomSettings(settings, ngZone) {
|
|
21
25
|
const mergedSettings = settings;
|
|
22
26
|
this.updateColumnRendererForGivenCustomRenderer(mergedSettings);
|
|
23
27
|
this.updateColumnEditorForGivenCustomEditor(mergedSettings);
|
|
24
28
|
this.updateColumnValidatorForGivenCustomValidator(mergedSettings);
|
|
29
|
+
this.wrapHooksInNgZone(mergedSettings, ngZone);
|
|
25
30
|
return mergedSettings ?? {};
|
|
26
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Ensures that hook callbacks in the provided grid settings run inside Angular's zone.
|
|
34
|
+
*
|
|
35
|
+
* @param settings The original grid settings.
|
|
36
|
+
* @param ngZone The NgZone instance to run hooks inside the zone context.
|
|
37
|
+
*/
|
|
38
|
+
wrapHooksInNgZone(settings, ngZone) {
|
|
39
|
+
const options = AVAILABLE_HOOKS.concat(AVAILABLE_OPTIONS);
|
|
40
|
+
options.forEach(key => {
|
|
41
|
+
const isHook = AVAILABLE_HOOKS.indexOf(key) > -1;
|
|
42
|
+
let option;
|
|
43
|
+
if (isHook) {
|
|
44
|
+
option = settings[key];
|
|
45
|
+
}
|
|
46
|
+
if (option === void 0) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
else if (!!ngZone && (typeof option === 'function' && isHook)) {
|
|
50
|
+
settings[key] = function (...args) {
|
|
51
|
+
return ngZone.run(() => option.apply(this, args));
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
settings[key] = option;
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
}
|
|
27
59
|
/**
|
|
28
60
|
* Updates the column renderer for columns with a custom renderer.
|
|
29
61
|
* @param mergedSettings The merged grid settings.
|
|
@@ -33,11 +65,13 @@ export class HotSettingsResolver {
|
|
|
33
65
|
return;
|
|
34
66
|
}
|
|
35
67
|
mergedSettings?.columns
|
|
36
|
-
?.filter((settings) => settings.
|
|
68
|
+
?.filter((settings) => this.isRendererComponentRefType(settings.renderer) || this.isTemplateRef(settings.renderer))
|
|
37
69
|
?.forEach((cellSettings) => {
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
70
|
+
const renderer = this.isTemplateRef(cellSettings.renderer)
|
|
71
|
+
? cellSettings.renderer
|
|
72
|
+
: cellSettings.renderer;
|
|
73
|
+
const props = cellSettings.rendererProps ?? {};
|
|
74
|
+
cellSettings.renderer = this.dynamicComponentService.createRendererFromComponent(renderer, props);
|
|
41
75
|
});
|
|
42
76
|
}
|
|
43
77
|
/**
|
|
@@ -49,13 +83,14 @@ export class HotSettingsResolver {
|
|
|
49
83
|
return;
|
|
50
84
|
}
|
|
51
85
|
mergedSettings?.columns
|
|
52
|
-
?.filter((settings) => settings.
|
|
86
|
+
?.filter((settings) => this.isEditorComponentRefType(settings.editor))
|
|
53
87
|
?.forEach((cellSettings) => {
|
|
54
|
-
cellSettings.editor
|
|
55
|
-
cellSettings
|
|
88
|
+
const customEditor = cellSettings.editor;
|
|
89
|
+
cellSettings['_editorComponentReference'] = createComponent(customEditor, {
|
|
56
90
|
environmentInjector: this.environmentInjector,
|
|
57
91
|
});
|
|
58
|
-
cellSettings
|
|
92
|
+
cellSettings['_environmentInjector'] = this.environmentInjector;
|
|
93
|
+
cellSettings.editor = BaseEditorAdapter;
|
|
59
94
|
});
|
|
60
95
|
}
|
|
61
96
|
/**
|
|
@@ -67,17 +102,32 @@ export class HotSettingsResolver {
|
|
|
67
102
|
return;
|
|
68
103
|
}
|
|
69
104
|
mergedSettings?.columns
|
|
70
|
-
?.filter((settings) => settings.
|
|
105
|
+
?.filter((settings) => this.isCustomValidatorFn(settings.validator))
|
|
71
106
|
?.forEach((cellSettings) => {
|
|
107
|
+
const customValidatorFn = cellSettings.validator;
|
|
72
108
|
cellSettings.validator = (value, callback) => {
|
|
73
|
-
callback(
|
|
109
|
+
callback(customValidatorFn(value));
|
|
74
110
|
};
|
|
75
111
|
});
|
|
76
112
|
}
|
|
113
|
+
isCustomValidatorFn(validator) {
|
|
114
|
+
return typeof validator === 'function' && validator.length === 1;
|
|
115
|
+
}
|
|
116
|
+
isEditorComponentRefType(editor) {
|
|
117
|
+
// ecmp - we need it to check if the editor is a component
|
|
118
|
+
return typeof editor === 'function' && !!editor?.ɵcmp;
|
|
119
|
+
}
|
|
120
|
+
isRendererComponentRefType(renderer) {
|
|
121
|
+
// ecmp - we need it to check if the renderer is a component
|
|
122
|
+
return typeof renderer === 'function' && !!renderer?.ɵcmp;
|
|
123
|
+
}
|
|
124
|
+
isTemplateRef(renderer) {
|
|
125
|
+
return renderer instanceof TemplateRef;
|
|
126
|
+
}
|
|
77
127
|
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 });
|
|
78
128
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HotSettingsResolver });
|
|
79
129
|
}
|
|
80
130
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HotSettingsResolver, decorators: [{
|
|
81
131
|
type: Injectable
|
|
82
132
|
}], ctorParameters: function () { return [{ type: i1.DynamicComponentService }, { type: i0.EnvironmentInjector }]; } });
|
|
83
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90LXNldHRpbmdzLXJlc29sdmVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ob3QtdGFibGUvc3JjL2xpYi9zZXJ2aWNlcy9ob3Qtc2V0dGluZ3MtcmVzb2x2ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZUFBZSxFQUVmLFVBQVUsR0FDWCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7O0FBT2xFOztHQUVHO0FBRUgsTUFBTSxPQUFPLG1CQUFtQjtJQUVwQjtJQUNTO0lBRm5CLFlBQ1UsdUJBQWdELEVBQ3ZDLG1CQUF3QztRQURqRCw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBQ3ZDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7SUFDeEQsQ0FBQztJQUVKOzs7O09BSUc7SUFDSCxtQkFBbUIsQ0FBQyxRQUFzQjtRQUN4QyxNQUFNLGNBQWMsR0FBeUIsUUFBUSxDQUFDO1FBRXRELElBQUksQ0FBQywwQ0FBMEMsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsc0NBQXNDLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLDRDQUE0QyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRWxFLE9BQU8sY0FBYyxJQUFJLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssMENBQTBDLENBQ2hELGNBQW9DO1FBRXBDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMsRUFBRTtZQUMzQyxPQUFPO1NBQ1I7UUFFQSxjQUFjLEVBQUUsT0FBb0M7WUFDbkQsRUFBRSxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztZQUNsRCxFQUFFLE9BQU8sQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFO1lBQ3pCLE1BQU0sS0FBSyxHQUFRLFlBQVksQ0FBQyxzQkFBc0IsSUFBSSxFQUFFLENBQUM7WUFDN0QsWUFBWSxDQUFDLFFBQVE7Z0JBQ25CLElBQUksQ0FBQyx1QkFBdUIsQ0FBQywyQkFBMkIsQ0FDdEQsWUFBWSxDQUFDLGlCQUFpQixFQUM5QixLQUFLLENBQ04sQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7T0FHRztJQUNLLHNDQUFzQyxDQUM1QyxjQUFvQztRQUVwQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLEVBQUU7WUFDM0MsT0FBTztTQUNSO1FBRUEsY0FBYyxFQUFFLE9BQTRCO1lBQzNDLEVBQUUsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO1lBQzdDLEVBQUUsT0FBTyxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUU7WUFDekIsWUFBWSxDQUFDLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQztZQUN4QyxZQUFZLENBQUMseUJBQXlCLEdBQUcsZUFBZSxDQUN0RCxZQUFZLENBQUMsWUFBWSxFQUN6QjtnQkFDRSxtQkFBbUIsRUFBRSxJQUFJLENBQUMsbUJBQW1CO2FBQzlDLENBQ0YsQ0FBQztZQUNGLFlBQVksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFDL0QsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssNENBQTRDLENBQ2xELGNBQW9DO1FBRXBDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMsRUFBRTtZQUMzQyxPQUFPO1NBQ1I7UUFFQSxjQUFjLEVBQUUsT0FBb0M7WUFDbkQsRUFBRSxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUM7WUFDaEQsRUFBRSxPQUFPLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRTtZQUN6QixZQUFZLENBQUMsU0FBUyxHQUFHLENBQ3ZCLEtBQVUsRUFDVixRQUFtQyxFQUNuQyxFQUFFO2dCQUNGLFFBQVEsQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDaEQsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO3dHQTFGVSxtQkFBbUI7NEdBQW5CLG1CQUFtQjs7NEZBQW5CLG1CQUFtQjtrQkFEL0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNyZWF0ZUNvbXBvbmVudCxcbiAgRW52aXJvbm1lbnRJbmplY3RvcixcbiAgSW5qZWN0YWJsZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEeW5hbWljQ29tcG9uZW50U2VydmljZSB9IGZyb20gJy4uL3JlbmRlcmVyL2hvdC1keW5hbWljLXJlbmRlcmVyLWNvbXBvbmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEJhc2VFZGl0b3JBZGFwdGVyIH0gZnJvbSAnLi4vZWRpdG9yL2Jhc2UtZWRpdG9yLWFkYXB0ZXInO1xuaW1wb3J0IHsgR3JpZFNldHRpbmdzLCBHcmlkU2V0dGluZ3NJbnRlcm5hbCB9IGZyb20gJy4uL21vZGVscy9ncmlkLXNldHRpbmdzJztcbmltcG9ydCB7XG4gIENvbHVtblNldHRpbmdzLFxuICBDb2x1bW5TZXR0aW5nc0ludGVybmFsLFxufSBmcm9tICcuLi9tb2RlbHMvY29sdW1uLXNldHRpbmdzJztcblxuLyoqXG4gKiBTZXJ2aWNlIHRvIHJlc29sdmUgYW5kIGFwcGx5IGN1c3RvbSBzZXR0aW5ncyBmb3IgSGFuZHNvbnRhYmxlIHNldHRpbmdzIG9iamVjdC5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEhvdFNldHRpbmdzUmVzb2x2ZXIge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGR5bmFtaWNDb21wb25lbnRTZXJ2aWNlOiBEeW5hbWljQ29tcG9uZW50U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVudmlyb25tZW50SW5qZWN0b3I6IEVudmlyb25tZW50SW5qZWN0b3JcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIGN1c3RvbSBzZXR0aW5ncyB0byB0aGUgcHJvdmlkZWQgR3JpZFNldHRpbmdzLlxuICAgKiBAcGFyYW0gc2V0dGluZ3MgVGhlIG9yaWdpbmFsIGdyaWQgc2V0dGluZ3MuXG4gICAqIEByZXR1cm5zIFRoZSBtZXJnZWQgZ3JpZCBzZXR0aW5ncyB3aXRoIGN1c3RvbSBzZXR0aW5ncyBhcHBsaWVkLlxuICAgKi9cbiAgYXBwbHlDdXN0b21TZXR0aW5ncyhzZXR0aW5nczogR3JpZFNldHRpbmdzKTogR3JpZFNldHRpbmdzSW50ZXJuYWwge1xuICAgIGNvbnN0IG1lcmdlZFNldHRpbmdzOiBHcmlkU2V0dGluZ3NJbnRlcm5hbCA9IHNldHRpbmdzO1xuXG4gICAgdGhpcy51cGRhdGVDb2x1bW5SZW5kZXJlckZvckdpdmVuQ3VzdG9tUmVuZGVyZXIobWVyZ2VkU2V0dGluZ3MpO1xuICAgIHRoaXMudXBkYXRlQ29sdW1uRWRpdG9yRm9yR2l2ZW5DdXN0b21FZGl0b3IobWVyZ2VkU2V0dGluZ3MpO1xuICAgIHRoaXMudXBkYXRlQ29sdW1uVmFsaWRhdG9yRm9yR2l2ZW5DdXN0b21WYWxpZGF0b3IobWVyZ2VkU2V0dGluZ3MpO1xuXG4gICAgcmV0dXJuIG1lcmdlZFNldHRpbmdzID8/IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGNvbHVtbiByZW5kZXJlciBmb3IgY29sdW1ucyB3aXRoIGEgY3VzdG9tIHJlbmRlcmVyLlxuICAgKiBAcGFyYW0gbWVyZ2VkU2V0dGluZ3MgVGhlIG1lcmdlZCBncmlkIHNldHRpbmdzLlxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVDb2x1bW5SZW5kZXJlckZvckdpdmVuQ3VzdG9tUmVuZGVyZXIoXG4gICAgbWVyZ2VkU2V0dGluZ3M6IEdyaWRTZXR0aW5nc0ludGVybmFsXG4gICk6IHZvaWQge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShtZXJnZWRTZXR0aW5ncz8uY29sdW1ucykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAobWVyZ2VkU2V0dGluZ3M/LmNvbHVtbnMgYXMgQ29sdW1uU2V0dGluZ3NJbnRlcm5hbFtdKVxuICAgICAgPy5maWx0ZXIoKHNldHRpbmdzKSA9PiBzZXR0aW5ncy5jb21wb25lbnRSZW5kZXJlcilcbiAgICAgID8uZm9yRWFjaCgoY2VsbFNldHRpbmdzKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb3BzOiBhbnkgPSBjZWxsU2V0dGluZ3MuY29tcG9uZW50UmVuZGVyZXJQcm9wcyA/PyB7fTtcbiAgICAgICAgY2VsbFNldHRpbmdzLnJlbmRlcmVyID1cbiAgICAgICAgICB0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLmNyZWF0ZVJlbmRlcmVyRnJvbUNvbXBvbmVudChcbiAgICAgICAgICAgIGNlbGxTZXR0aW5ncy5jb21wb25lbnRSZW5kZXJlcixcbiAgICAgICAgICAgIHByb3BzXG4gICAgICAgICAgKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGNvbHVtbiBlZGl0b3IgZm9yIGNvbHVtbnMgd2l0aCBhIGN1c3RvbSBlZGl0b3IuXG4gICAqIEBwYXJhbSBtZXJnZWRTZXR0aW5ncyBUaGUgbWVyZ2VkIGdyaWQgc2V0dGluZ3MuXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUNvbHVtbkVkaXRvckZvckdpdmVuQ3VzdG9tRWRpdG9yKFxuICAgIG1lcmdlZFNldHRpbmdzOiBHcmlkU2V0dGluZ3NJbnRlcm5hbFxuICApOiB2b2lkIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVyZ2VkU2V0dGluZ3M/LmNvbHVtbnMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgKG1lcmdlZFNldHRpbmdzPy5jb2x1bW5zIGFzIENvbHVtblNldHRpbmdzW10pXG4gICAgICA/LmZpbHRlcigoc2V0dGluZ3MpID0+IHNldHRpbmdzLmN1c3RvbUVkaXRvcilcbiAgICAgID8uZm9yRWFjaCgoY2VsbFNldHRpbmdzKSA9PiB7XG4gICAgICAgIGNlbGxTZXR0aW5ncy5lZGl0b3IgPSBCYXNlRWRpdG9yQWRhcHRlcjtcbiAgICAgICAgY2VsbFNldHRpbmdzLl9lZGl0b3JDb21wb25lbnRSZWZlcmVuY2UgPSBjcmVhdGVDb21wb25lbnQoXG4gICAgICAgICAgY2VsbFNldHRpbmdzLmN1c3RvbUVkaXRvcixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBlbnZpcm9ubWVudEluamVjdG9yOiB0aGlzLmVudmlyb25tZW50SW5qZWN0b3IsXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICBjZWxsU2V0dGluZ3MuX2Vudmlyb25tZW50SW5qZWN0b3IgPSB0aGlzLmVudmlyb25tZW50SW5qZWN0b3I7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBjb2x1bW4gdmFsaWRhdG9yIGZvciBjb2x1bW5zIHdpdGggYSBjdXN0b20gdmFsaWRhdG9yLlxuICAgKiBAcGFyYW0gbWVyZ2VkU2V0dGluZ3MgVGhlIG1lcmdlZCBncmlkIHNldHRpbmdzLlxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVDb2x1bW5WYWxpZGF0b3JGb3JHaXZlbkN1c3RvbVZhbGlkYXRvcihcbiAgICBtZXJnZWRTZXR0aW5nczogR3JpZFNldHRpbmdzSW50ZXJuYWxcbiAgKTogdm9pZCB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG1lcmdlZFNldHRpbmdzPy5jb2x1bW5zKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIChtZXJnZWRTZXR0aW5ncz8uY29sdW1ucyBhcyBDb2x1bW5TZXR0aW5nc0ludGVybmFsW10pXG4gICAgICA/LmZpbHRlcigoc2V0dGluZ3MpID0+IHNldHRpbmdzLmN1c3RvbVZhbGlkYXRvcilcbiAgICAgID8uZm9yRWFjaCgoY2VsbFNldHRpbmdzKSA9PiB7XG4gICAgICAgIGNlbGxTZXR0aW5ncy52YWxpZGF0b3IgPSAoXG4gICAgICAgICAgdmFsdWU6IGFueSxcbiAgICAgICAgICBjYWxsYmFjazogKHJlc3VsdDogYm9vbGVhbikgPT4gdm9pZFxuICAgICAgICApID0+IHtcbiAgICAgICAgICBjYWxsYmFjayhjZWxsU2V0dGluZ3MuY3VzdG9tVmFsaWRhdG9yKHZhbHVlKSk7XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgfVxufVxuIl19
|
|
133
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90LXNldHRpbmdzLXJlc29sdmVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ob3QtdGFibGUvc3JjL2xpYi9zZXJ2aWNlcy9ob3Qtc2V0dGluZ3MtcmVzb2x2ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsZUFBZSxFQUF1QixVQUFVLEVBQVUsV0FBVyxFQUFPLE1BQU0sZUFBZSxDQUFDO0FBRTFHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBS2xFLE9BQU8sWUFBWSxNQUFNLG1CQUFtQixDQUFDOzs7QUFFN0MsTUFBTSxpQkFBaUIsR0FBYSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUM5RSxNQUFNLGVBQWUsR0FBYSxZQUFZLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO0FBRXJFOztHQUVHO0FBRUgsTUFBTSxPQUFPLG1CQUFtQjtJQUNWO0lBQW1FO0lBQXZGLFlBQW9CLHVCQUFnRCxFQUFtQixtQkFBd0M7UUFBM0csNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtRQUFtQix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO0lBQUcsQ0FBQztJQUVuSTs7Ozs7T0FLRztJQUNILG1CQUFtQixDQUFDLFFBQXNCLEVBQUUsTUFBYztRQUN4RCxNQUFNLGNBQWMsR0FBaUIsUUFBUSxDQUFDO1FBRTlDLElBQUksQ0FBQywwQ0FBMEMsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsc0NBQXNDLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLDRDQUE0QyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRWxFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFL0MsT0FBUSxjQUF1QyxJQUFJLEVBQUUsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxpQkFBaUIsQ0FBQyxRQUFzQixFQUFFLE1BQWM7UUFDOUQsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRTFELE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDcEIsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNqRCxJQUFJLE1BQU0sQ0FBQztZQUVYLElBQUksTUFBTSxFQUFFO2dCQUNWLE1BQU0sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDeEI7WUFFRCxJQUFJLE1BQU0sS0FBSyxLQUFLLENBQUMsRUFBRTtnQkFDckIsT0FBTzthQUVSO2lCQUFNLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLE9BQU8sTUFBTSxLQUFLLFVBQVUsSUFBSSxNQUFNLENBQUMsRUFBRTtnQkFDL0QsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVMsR0FBRyxJQUFTO29CQUNuQyxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDcEQsQ0FBQyxDQUFDO2FBRUg7aUJBQU07Z0JBQ0wsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQzthQUN4QjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNLLDBDQUEwQyxDQUFDLGNBQTRCO1FBQzdFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMsRUFBRTtZQUMzQyxPQUFPO1NBQ1I7UUFFQSxjQUFjLEVBQUUsT0FBNEI7WUFDM0MsRUFBRSxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbkgsRUFBRSxPQUFPLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRTtZQUN6QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUM7Z0JBQ3hELENBQUMsQ0FBRSxZQUFZLENBQUMsUUFBNkI7Z0JBQzdDLENBQUMsQ0FBRSxZQUFZLENBQUMsUUFBcUQsQ0FBQztZQUN4RSxNQUFNLEtBQUssR0FBUSxZQUFZLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQztZQUNwRCxZQUFZLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDcEcsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssc0NBQXNDLENBQUMsY0FBNEI7UUFDekUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxFQUFFO1lBQzNDLE9BQU87U0FDUjtRQUVBLGNBQWMsRUFBRSxPQUE0QjtZQUMzQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN0RSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFO1lBQ3pCLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxNQUEyQyxDQUFDO1lBQzlFLFlBQVksQ0FBQywyQkFBMkIsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxZQUFZLEVBQUU7Z0JBQ3hFLG1CQUFtQixFQUFFLElBQUksQ0FBQyxtQkFBbUI7YUFDOUMsQ0FBQyxDQUFDO1lBQ0gsWUFBWSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1lBQ2hFLFlBQVksQ0FBQyxNQUFNLEdBQUcsaUJBQWlCLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssNENBQTRDLENBQUMsY0FBNEI7UUFDL0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxFQUFFO1lBQzNDLE9BQU87U0FDUjtRQUVBLGNBQWMsRUFBRSxPQUE0QjtZQUMzQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNwRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFO1lBQ3pCLE1BQU0saUJBQWlCLEdBQUcsWUFBWSxDQUFDLFNBQW1DLENBQUM7WUFFM0UsWUFBWSxDQUFDLFNBQVMsR0FBRyxDQUFDLEtBQVUsRUFBRSxRQUFtQyxFQUFFLEVBQUU7Z0JBQzNFLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLG1CQUFtQixDQUFDLFNBQWtCO1FBQzVDLE9BQU8sT0FBTyxTQUFTLEtBQUssVUFBVSxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFTyx3QkFBd0IsQ0FBQyxNQUFXO1FBQzFDLDBEQUEwRDtRQUMxRCxPQUFPLE9BQU8sTUFBTSxLQUFLLFVBQVUsSUFBSSxDQUFDLENBQUUsTUFBYyxFQUFFLElBQUksQ0FBQztJQUNqRSxDQUFDO0lBRU8sMEJBQTBCLENBQUMsUUFBYTtRQUM5Qyw0REFBNEQ7UUFDNUQsT0FBTyxPQUFPLFFBQVEsS0FBSyxVQUFVLElBQUksQ0FBQyxDQUFFLFFBQWdCLEVBQUUsSUFBSSxDQUFDO0lBQ3JFLENBQUM7SUFFTyxhQUFhLENBQUMsUUFBYTtRQUNqQyxPQUFPLFFBQVEsWUFBWSxXQUFXLENBQUM7SUFDekMsQ0FBQzt3R0FqSVUsbUJBQW1COzRHQUFuQixtQkFBbUI7OzRGQUFuQixtQkFBbUI7a0JBRC9CLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2NyZWF0ZUNvbXBvbmVudCwgRW52aXJvbm1lbnRJbmplY3RvciwgSW5qZWN0YWJsZSwgTmdab25lLCBUZW1wbGF0ZVJlZiwgVHlwZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEeW5hbWljQ29tcG9uZW50U2VydmljZSB9IGZyb20gJy4uL3JlbmRlcmVyL2hvdC1keW5hbWljLXJlbmRlcmVyLWNvbXBvbmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEJhc2VFZGl0b3JBZGFwdGVyIH0gZnJvbSAnLi4vZWRpdG9yL2Jhc2UtZWRpdG9yLWFkYXB0ZXInO1xuaW1wb3J0IHsgR3JpZFNldHRpbmdzLCBHcmlkU2V0dGluZ3NJbnRlcm5hbCB9IGZyb20gJy4uL21vZGVscy9ncmlkLXNldHRpbmdzJztcbmltcG9ydCB7IEN1c3RvbVZhbGlkYXRvckZuLCBDb2x1bW5TZXR0aW5ncyB9IGZyb20gJy4uL21vZGVscy9jb2x1bW4tc2V0dGluZ3MnO1xuaW1wb3J0IHsgSG90Q2VsbFJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vcmVuZGVyZXIvaG90LWNlbGwtcmVuZGVyZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEhvdENlbGxFZGl0b3JDb21wb25lbnQgfSBmcm9tICcuLi9lZGl0b3IvaG90LWNlbGwtZWRpdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgSGFuZHNvbnRhYmxlIGZyb20gJ2hhbmRzb250YWJsZS9iYXNlJztcblxuY29uc3QgQVZBSUxBQkxFX09QVElPTlM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMoSGFuZHNvbnRhYmxlLkRlZmF1bHRTZXR0aW5ncyk7XG5jb25zdCBBVkFJTEFCTEVfSE9PS1M6IHN0cmluZ1tdID0gSGFuZHNvbnRhYmxlLmhvb2tzLmdldFJlZ2lzdGVyZWQoKTtcblxuLyoqXG4gKiBTZXJ2aWNlIHRvIHJlc29sdmUgYW5kIGFwcGx5IGN1c3RvbSBzZXR0aW5ncyBmb3IgSGFuZHNvbnRhYmxlIHNldHRpbmdzIG9iamVjdC5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEhvdFNldHRpbmdzUmVzb2x2ZXIge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGR5bmFtaWNDb21wb25lbnRTZXJ2aWNlOiBEeW5hbWljQ29tcG9uZW50U2VydmljZSwgcHJpdmF0ZSByZWFkb25seSBlbnZpcm9ubWVudEluamVjdG9yOiBFbnZpcm9ubWVudEluamVjdG9yKSB7fVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIGN1c3RvbSBzZXR0aW5ncyB0byB0aGUgcHJvdmlkZWQgR3JpZFNldHRpbmdzLlxuICAgKiBAcGFyYW0gc2V0dGluZ3MgVGhlIG9yaWdpbmFsIGdyaWQgc2V0dGluZ3MuXG4gICAqIEBwYXJhbSBuZ1pvbmUgVGhlIE5nWm9uZSBpbnN0YW5jZSB0byBydW4gaG9va3MgaW5zaWRlIHRoZSB6b25lIGNvbnRleHQuXG4gICAqIEByZXR1cm5zIFRoZSBtZXJnZWQgZ3JpZCBzZXR0aW5ncyB3aXRoIGN1c3RvbSBzZXR0aW5ncyBhcHBsaWVkLlxuICAgKi9cbiAgYXBwbHlDdXN0b21TZXR0aW5ncyhzZXR0aW5nczogR3JpZFNldHRpbmdzLCBuZ1pvbmU6IE5nWm9uZSk6IEdyaWRTZXR0aW5nc0ludGVybmFsIHtcbiAgICBjb25zdCBtZXJnZWRTZXR0aW5nczogR3JpZFNldHRpbmdzID0gc2V0dGluZ3M7XG5cbiAgICB0aGlzLnVwZGF0ZUNvbHVtblJlbmRlcmVyRm9yR2l2ZW5DdXN0b21SZW5kZXJlcihtZXJnZWRTZXR0aW5ncyk7XG4gICAgdGhpcy51cGRhdGVDb2x1bW5FZGl0b3JGb3JHaXZlbkN1c3RvbUVkaXRvcihtZXJnZWRTZXR0aW5ncyk7XG4gICAgdGhpcy51cGRhdGVDb2x1bW5WYWxpZGF0b3JGb3JHaXZlbkN1c3RvbVZhbGlkYXRvcihtZXJnZWRTZXR0aW5ncyk7XG5cbiAgICB0aGlzLndyYXBIb29rc0luTmdab25lKG1lcmdlZFNldHRpbmdzLCBuZ1pvbmUpO1xuXG4gICAgcmV0dXJuIChtZXJnZWRTZXR0aW5ncyBhcyBHcmlkU2V0dGluZ3NJbnRlcm5hbCkgPz8ge307XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlcyB0aGF0IGhvb2sgY2FsbGJhY2tzIGluIHRoZSBwcm92aWRlZCBncmlkIHNldHRpbmdzIHJ1biBpbnNpZGUgQW5ndWxhcidzIHpvbmUuXG4gICAqXG4gICAqIEBwYXJhbSBzZXR0aW5ncyBUaGUgb3JpZ2luYWwgZ3JpZCBzZXR0aW5ncy5cbiAgICogQHBhcmFtIG5nWm9uZSBUaGUgTmdab25lIGluc3RhbmNlIHRvIHJ1biBob29rcyBpbnNpZGUgdGhlIHpvbmUgY29udGV4dC5cbiAgICovXG4gIHByaXZhdGUgd3JhcEhvb2tzSW5OZ1pvbmUoc2V0dGluZ3M6IEdyaWRTZXR0aW5ncywgbmdab25lOiBOZ1pvbmUpIHtcbiAgICBjb25zdCBvcHRpb25zID0gQVZBSUxBQkxFX0hPT0tTLmNvbmNhdChBVkFJTEFCTEVfT1BUSU9OUyk7XG5cbiAgICBvcHRpb25zLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGNvbnN0IGlzSG9vayA9IEFWQUlMQUJMRV9IT09LUy5pbmRleE9mKGtleSkgPiAtMTtcbiAgICAgIGxldCBvcHRpb247XG5cbiAgICAgIGlmIChpc0hvb2spIHtcbiAgICAgICAgb3B0aW9uID0gc2V0dGluZ3Nba2V5XTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbiA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHJldHVybjtcblxuICAgICAgfSBlbHNlIGlmICghIW5nWm9uZSAmJiAodHlwZW9mIG9wdGlvbiA9PT0gJ2Z1bmN0aW9uJyAmJiBpc0hvb2spKSB7XG4gICAgICAgIHNldHRpbmdzW2tleV0gPSBmdW5jdGlvbiguLi5hcmdzOiBhbnkpIHtcbiAgICAgICAgICByZXR1cm4gbmdab25lLnJ1bigoKSA9PiBvcHRpb24uYXBwbHkodGhpcywgYXJncykpO1xuICAgICAgICB9O1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXR0aW5nc1trZXldID0gb3B0aW9uO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGNvbHVtbiByZW5kZXJlciBmb3IgY29sdW1ucyB3aXRoIGEgY3VzdG9tIHJlbmRlcmVyLlxuICAgKiBAcGFyYW0gbWVyZ2VkU2V0dGluZ3MgVGhlIG1lcmdlZCBncmlkIHNldHRpbmdzLlxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVDb2x1bW5SZW5kZXJlckZvckdpdmVuQ3VzdG9tUmVuZGVyZXIobWVyZ2VkU2V0dGluZ3M6IEdyaWRTZXR0aW5ncyk6IHZvaWQge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShtZXJnZWRTZXR0aW5ncz8uY29sdW1ucykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAobWVyZ2VkU2V0dGluZ3M/LmNvbHVtbnMgYXMgQ29sdW1uU2V0dGluZ3NbXSlcbiAgICAgID8uZmlsdGVyKChzZXR0aW5ncykgPT4gdGhpcy5pc1JlbmRlcmVyQ29tcG9uZW50UmVmVHlwZShzZXR0aW5ncy5yZW5kZXJlcikgfHwgdGhpcy5pc1RlbXBsYXRlUmVmKHNldHRpbmdzLnJlbmRlcmVyKSlcbiAgICAgID8uZm9yRWFjaCgoY2VsbFNldHRpbmdzKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlbmRlcmVyID0gdGhpcy5pc1RlbXBsYXRlUmVmKGNlbGxTZXR0aW5ncy5yZW5kZXJlcilcbiAgICAgICAgICA/IChjZWxsU2V0dGluZ3MucmVuZGVyZXIgYXMgVGVtcGxhdGVSZWY8YW55PilcbiAgICAgICAgICA6IChjZWxsU2V0dGluZ3MucmVuZGVyZXIgYXMgVHlwZTxIb3RDZWxsUmVuZGVyZXJDb21wb25lbnQ8YW55LCBhbnk+Pik7XG4gICAgICAgIGNvbnN0IHByb3BzOiBhbnkgPSBjZWxsU2V0dGluZ3MucmVuZGVyZXJQcm9wcyA/PyB7fTtcbiAgICAgICAgY2VsbFNldHRpbmdzLnJlbmRlcmVyID0gdGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5jcmVhdGVSZW5kZXJlckZyb21Db21wb25lbnQocmVuZGVyZXIsIHByb3BzKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGNvbHVtbiBlZGl0b3IgZm9yIGNvbHVtbnMgd2l0aCBhIGN1c3RvbSBlZGl0b3IuXG4gICAqIEBwYXJhbSBtZXJnZWRTZXR0aW5ncyBUaGUgbWVyZ2VkIGdyaWQgc2V0dGluZ3MuXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUNvbHVtbkVkaXRvckZvckdpdmVuQ3VzdG9tRWRpdG9yKG1lcmdlZFNldHRpbmdzOiBHcmlkU2V0dGluZ3MpOiB2b2lkIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVyZ2VkU2V0dGluZ3M/LmNvbHVtbnMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgKG1lcmdlZFNldHRpbmdzPy5jb2x1bW5zIGFzIENvbHVtblNldHRpbmdzW10pXG4gICAgICA/LmZpbHRlcigoc2V0dGluZ3MpID0+IHRoaXMuaXNFZGl0b3JDb21wb25lbnRSZWZUeXBlKHNldHRpbmdzLmVkaXRvcikpXG4gICAgICA/LmZvckVhY2goKGNlbGxTZXR0aW5ncykgPT4ge1xuICAgICAgICBjb25zdCBjdXN0b21FZGl0b3IgPSBjZWxsU2V0dGluZ3MuZWRpdG9yIGFzIFR5cGU8SG90Q2VsbEVkaXRvckNvbXBvbmVudDxhbnk+PjtcbiAgICAgICAgY2VsbFNldHRpbmdzWydfZWRpdG9yQ29tcG9uZW50UmVmZXJlbmNlJ10gPSBjcmVhdGVDb21wb25lbnQoY3VzdG9tRWRpdG9yLCB7XG4gICAgICAgICAgZW52aXJvbm1lbnRJbmplY3RvcjogdGhpcy5lbnZpcm9ubWVudEluamVjdG9yLFxuICAgICAgICB9KTtcbiAgICAgICAgY2VsbFNldHRpbmdzWydfZW52aXJvbm1lbnRJbmplY3RvciddID0gdGhpcy5lbnZpcm9ubWVudEluamVjdG9yO1xuICAgICAgICBjZWxsU2V0dGluZ3MuZWRpdG9yID0gQmFzZUVkaXRvckFkYXB0ZXI7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBjb2x1bW4gdmFsaWRhdG9yIGZvciBjb2x1bW5zIHdpdGggYSBjdXN0b20gdmFsaWRhdG9yLlxuICAgKiBAcGFyYW0gbWVyZ2VkU2V0dGluZ3MgVGhlIG1lcmdlZCBncmlkIHNldHRpbmdzLlxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVDb2x1bW5WYWxpZGF0b3JGb3JHaXZlbkN1c3RvbVZhbGlkYXRvcihtZXJnZWRTZXR0aW5nczogR3JpZFNldHRpbmdzKTogdm9pZCB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG1lcmdlZFNldHRpbmdzPy5jb2x1bW5zKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIChtZXJnZWRTZXR0aW5ncz8uY29sdW1ucyBhcyBDb2x1bW5TZXR0aW5nc1tdKVxuICAgICAgPy5maWx0ZXIoKHNldHRpbmdzKSA9PiB0aGlzLmlzQ3VzdG9tVmFsaWRhdG9yRm4oc2V0dGluZ3MudmFsaWRhdG9yKSlcbiAgICAgID8uZm9yRWFjaCgoY2VsbFNldHRpbmdzKSA9PiB7XG4gICAgICAgIGNvbnN0IGN1c3RvbVZhbGlkYXRvckZuID0gY2VsbFNldHRpbmdzLnZhbGlkYXRvciBhcyBDdXN0b21WYWxpZGF0b3JGbjxhbnk+O1xuXG4gICAgICAgIGNlbGxTZXR0aW5ncy52YWxpZGF0b3IgPSAodmFsdWU6IGFueSwgY2FsbGJhY2s6IChyZXN1bHQ6IGJvb2xlYW4pID0+IHZvaWQpID0+IHtcbiAgICAgICAgICBjYWxsYmFjayhjdXN0b21WYWxpZGF0b3JGbih2YWx1ZSkpO1xuICAgICAgICB9O1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGlzQ3VzdG9tVmFsaWRhdG9yRm4odmFsaWRhdG9yOiB1bmtub3duKTogdmFsaWRhdG9yIGlzIEN1c3RvbVZhbGlkYXRvckZuPGFueT4ge1xuICAgIHJldHVybiB0eXBlb2YgdmFsaWRhdG9yID09PSAnZnVuY3Rpb24nICYmIHZhbGlkYXRvci5sZW5ndGggPT09IDE7XG4gIH1cblxuICBwcml2YXRlIGlzRWRpdG9yQ29tcG9uZW50UmVmVHlwZShlZGl0b3I6IGFueSk6IGVkaXRvciBpcyBUeXBlPEhvdENlbGxFZGl0b3JDb21wb25lbnQ8YW55Pj4ge1xuICAgIC8vIGVjbXAgLSB3ZSBuZWVkIGl0IHRvIGNoZWNrIGlmIHRoZSBlZGl0b3IgaXMgYSBjb21wb25lbnRcbiAgICByZXR1cm4gdHlwZW9mIGVkaXRvciA9PT0gJ2Z1bmN0aW9uJyAmJiAhIShlZGl0b3IgYXMgYW55KT8uybVjbXA7XG4gIH1cblxuICBwcml2YXRlIGlzUmVuZGVyZXJDb21wb25lbnRSZWZUeXBlKHJlbmRlcmVyOiBhbnkpOiByZW5kZXJlciBpcyBUeXBlPEhvdENlbGxSZW5kZXJlckNvbXBvbmVudDxhbnksIGFueT4+IHtcbiAgICAvLyBlY21wIC0gd2UgbmVlZCBpdCB0byBjaGVjayBpZiB0aGUgcmVuZGVyZXIgaXMgYSBjb21wb25lbnRcbiAgICByZXR1cm4gdHlwZW9mIHJlbmRlcmVyID09PSAnZnVuY3Rpb24nICYmICEhKHJlbmRlcmVyIGFzIGFueSk/Lsm1Y21wO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1RlbXBsYXRlUmVmKHJlbmRlcmVyOiBhbnkpOiByZW5kZXJlciBpcyBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICByZXR1cm4gcmVuZGVyZXIgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZjtcbiAgfVxufVxuIl19
|
package/esm2022/public-api.mjs
CHANGED
|
@@ -8,4 +8,4 @@ export * from './lib/services/hot-config.service';
|
|
|
8
8
|
export * from './lib/renderer/hot-dynamic-renderer-component.service';
|
|
9
9
|
export * from './lib/renderer/hot-cell-renderer.component';
|
|
10
10
|
export * from './lib/editor/hot-cell-editor.component';
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2hvdC10YWJsZS9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyw4Q0FBOEMsQ0FBQztBQUM3RCxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyx1REFBdUQsQ0FBQztBQUN0RSxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMsd0NBQXdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIGhvdC10YWJsZVxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL2hvdC10YWJsZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvaG90LXNldHRpbmdzLXJlc29sdmVyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaG90LXRhYmxlLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9ob3QtY29uZmlnLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcmVuZGVyZXIvaG90LWR5bmFtaWMtcmVuZGVyZXItY29tcG9uZW50LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcmVuZGVyZXIvaG90LWNlbGwtcmVuZGVyZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2VkaXRvci9ob3QtY2VsbC1lZGl0b3IuY29tcG9uZW50JztcbmV4cG9ydCB7IEdyaWRTZXR0aW5ncyB9IGZyb20gJy4vbGliL21vZGVscy9ncmlkLXNldHRpbmdzJztcbmV4cG9ydCB7IENvbHVtblNldHRpbmdzLCBDdXN0b21WYWxpZGF0b3JGbiB9IGZyb20gJy4vbGliL21vZGVscy9jb2x1bW4tc2V0dGluZ3MnO1xuIl19
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { ViewContainerRef, Component, ChangeDetectionStrategy, Input, ViewChild, createComponent, Injectable, InjectionToken, Inject, ViewEncapsulation, NgModule, EventEmitter, Directive, HostBinding, Output } from '@angular/core';
|
|
2
|
+
import { ViewContainerRef, Component, ChangeDetectionStrategy, Input, ViewChild, createComponent, Injectable, TemplateRef, InjectionToken, Inject, ViewEncapsulation, NgModule, EventEmitter, Directive, HostBinding, Output } from '@angular/core';
|
|
3
3
|
import Handsontable$1 from 'handsontable/base';
|
|
4
4
|
import Handsontable from 'handsontable';
|
|
5
5
|
import { take, BehaviorSubject } from 'rxjs';
|
|
@@ -464,6 +464,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
464
464
|
}]
|
|
465
465
|
}], ctorParameters: function () { return [{ type: i0.ApplicationRef }, { type: i0.EnvironmentInjector }]; } });
|
|
466
466
|
|
|
467
|
+
const AVAILABLE_OPTIONS = Object.keys(Handsontable$1.DefaultSettings);
|
|
468
|
+
const AVAILABLE_HOOKS = Handsontable$1.hooks.getRegistered();
|
|
467
469
|
/**
|
|
468
470
|
* Service to resolve and apply custom settings for Handsontable settings object.
|
|
469
471
|
*/
|
|
@@ -477,15 +479,44 @@ class HotSettingsResolver {
|
|
|
477
479
|
/**
|
|
478
480
|
* Applies custom settings to the provided GridSettings.
|
|
479
481
|
* @param settings The original grid settings.
|
|
482
|
+
* @param ngZone The NgZone instance to run hooks inside the zone context.
|
|
480
483
|
* @returns The merged grid settings with custom settings applied.
|
|
481
484
|
*/
|
|
482
|
-
applyCustomSettings(settings) {
|
|
485
|
+
applyCustomSettings(settings, ngZone) {
|
|
483
486
|
const mergedSettings = settings;
|
|
484
487
|
this.updateColumnRendererForGivenCustomRenderer(mergedSettings);
|
|
485
488
|
this.updateColumnEditorForGivenCustomEditor(mergedSettings);
|
|
486
489
|
this.updateColumnValidatorForGivenCustomValidator(mergedSettings);
|
|
490
|
+
this.wrapHooksInNgZone(mergedSettings, ngZone);
|
|
487
491
|
return mergedSettings ?? {};
|
|
488
492
|
}
|
|
493
|
+
/**
|
|
494
|
+
* Ensures that hook callbacks in the provided grid settings run inside Angular's zone.
|
|
495
|
+
*
|
|
496
|
+
* @param settings The original grid settings.
|
|
497
|
+
* @param ngZone The NgZone instance to run hooks inside the zone context.
|
|
498
|
+
*/
|
|
499
|
+
wrapHooksInNgZone(settings, ngZone) {
|
|
500
|
+
const options = AVAILABLE_HOOKS.concat(AVAILABLE_OPTIONS);
|
|
501
|
+
options.forEach(key => {
|
|
502
|
+
const isHook = AVAILABLE_HOOKS.indexOf(key) > -1;
|
|
503
|
+
let option;
|
|
504
|
+
if (isHook) {
|
|
505
|
+
option = settings[key];
|
|
506
|
+
}
|
|
507
|
+
if (option === void 0) {
|
|
508
|
+
return;
|
|
509
|
+
}
|
|
510
|
+
else if (!!ngZone && (typeof option === 'function' && isHook)) {
|
|
511
|
+
settings[key] = function (...args) {
|
|
512
|
+
return ngZone.run(() => option.apply(this, args));
|
|
513
|
+
};
|
|
514
|
+
}
|
|
515
|
+
else {
|
|
516
|
+
settings[key] = option;
|
|
517
|
+
}
|
|
518
|
+
});
|
|
519
|
+
}
|
|
489
520
|
/**
|
|
490
521
|
* Updates the column renderer for columns with a custom renderer.
|
|
491
522
|
* @param mergedSettings The merged grid settings.
|
|
@@ -495,11 +526,13 @@ class HotSettingsResolver {
|
|
|
495
526
|
return;
|
|
496
527
|
}
|
|
497
528
|
mergedSettings?.columns
|
|
498
|
-
?.filter((settings) => settings.
|
|
529
|
+
?.filter((settings) => this.isRendererComponentRefType(settings.renderer) || this.isTemplateRef(settings.renderer))
|
|
499
530
|
?.forEach((cellSettings) => {
|
|
500
|
-
const
|
|
501
|
-
|
|
502
|
-
|
|
531
|
+
const renderer = this.isTemplateRef(cellSettings.renderer)
|
|
532
|
+
? cellSettings.renderer
|
|
533
|
+
: cellSettings.renderer;
|
|
534
|
+
const props = cellSettings.rendererProps ?? {};
|
|
535
|
+
cellSettings.renderer = this.dynamicComponentService.createRendererFromComponent(renderer, props);
|
|
503
536
|
});
|
|
504
537
|
}
|
|
505
538
|
/**
|
|
@@ -511,13 +544,14 @@ class HotSettingsResolver {
|
|
|
511
544
|
return;
|
|
512
545
|
}
|
|
513
546
|
mergedSettings?.columns
|
|
514
|
-
?.filter((settings) => settings.
|
|
547
|
+
?.filter((settings) => this.isEditorComponentRefType(settings.editor))
|
|
515
548
|
?.forEach((cellSettings) => {
|
|
516
|
-
cellSettings.editor
|
|
517
|
-
cellSettings
|
|
549
|
+
const customEditor = cellSettings.editor;
|
|
550
|
+
cellSettings['_editorComponentReference'] = createComponent(customEditor, {
|
|
518
551
|
environmentInjector: this.environmentInjector,
|
|
519
552
|
});
|
|
520
|
-
cellSettings
|
|
553
|
+
cellSettings['_environmentInjector'] = this.environmentInjector;
|
|
554
|
+
cellSettings.editor = BaseEditorAdapter;
|
|
521
555
|
});
|
|
522
556
|
}
|
|
523
557
|
/**
|
|
@@ -529,13 +563,28 @@ class HotSettingsResolver {
|
|
|
529
563
|
return;
|
|
530
564
|
}
|
|
531
565
|
mergedSettings?.columns
|
|
532
|
-
?.filter((settings) => settings.
|
|
566
|
+
?.filter((settings) => this.isCustomValidatorFn(settings.validator))
|
|
533
567
|
?.forEach((cellSettings) => {
|
|
568
|
+
const customValidatorFn = cellSettings.validator;
|
|
534
569
|
cellSettings.validator = (value, callback) => {
|
|
535
|
-
callback(
|
|
570
|
+
callback(customValidatorFn(value));
|
|
536
571
|
};
|
|
537
572
|
});
|
|
538
573
|
}
|
|
574
|
+
isCustomValidatorFn(validator) {
|
|
575
|
+
return typeof validator === 'function' && validator.length === 1;
|
|
576
|
+
}
|
|
577
|
+
isEditorComponentRefType(editor) {
|
|
578
|
+
// ecmp - we need it to check if the editor is a component
|
|
579
|
+
return typeof editor === 'function' && !!editor?.ɵcmp;
|
|
580
|
+
}
|
|
581
|
+
isRendererComponentRefType(renderer) {
|
|
582
|
+
// ecmp - we need it to check if the renderer is a component
|
|
583
|
+
return typeof renderer === 'function' && !!renderer?.ɵcmp;
|
|
584
|
+
}
|
|
585
|
+
isTemplateRef(renderer) {
|
|
586
|
+
return renderer instanceof TemplateRef;
|
|
587
|
+
}
|
|
539
588
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HotSettingsResolver, deps: [{ token: DynamicComponentService }, { token: i0.EnvironmentInjector }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
540
589
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HotSettingsResolver });
|
|
541
590
|
}
|
|
@@ -547,6 +596,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
547
596
|
* A constant representing the non-commercial and evaluation license.
|
|
548
597
|
* */
|
|
549
598
|
const NON_COMMERCIAL_LICENSE = 'non-commercial-and-evaluation';
|
|
599
|
+
/**
|
|
600
|
+
* Type representing a theme name.
|
|
601
|
+
* Possible values include predefined themes and any custom string.
|
|
602
|
+
*/
|
|
603
|
+
var PredefinedTheme;
|
|
604
|
+
(function (PredefinedTheme) {
|
|
605
|
+
PredefinedTheme["Main"] = "ht-theme-main";
|
|
606
|
+
PredefinedTheme["MainDark"] = "ht-theme-main-dark";
|
|
607
|
+
PredefinedTheme["MainDarkAuto"] = "ht-theme-main-dark-auto";
|
|
608
|
+
PredefinedTheme["Horizon"] = "ht-theme-horizon";
|
|
609
|
+
PredefinedTheme["HorizonDark"] = "ht-theme-horizon-dark";
|
|
610
|
+
PredefinedTheme["HorizonDarkAuto"] = "ht-theme-horizon-dark-auto";
|
|
611
|
+
})(PredefinedTheme || (PredefinedTheme = {}));
|
|
550
612
|
/**
|
|
551
613
|
* Injection token for providing a global default configuration.
|
|
552
614
|
*/
|
|
@@ -637,13 +699,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
637
699
|
args: [HOT_GLOBAL_CONFIG]
|
|
638
700
|
}] }]; } });
|
|
639
701
|
|
|
640
|
-
const HOT_DESTROYED_WARNING = 'The Handsontable instance bound to this component was destroyed and cannot be' +
|
|
641
|
-
' used properly.';
|
|
702
|
+
const HOT_DESTROYED_WARNING = 'The Handsontable instance bound to this component was destroyed and cannot be' + ' used properly.';
|
|
642
703
|
class HotTableComponent {
|
|
643
704
|
_hotSettingsResolver;
|
|
644
705
|
_hotConfig;
|
|
645
706
|
ngZone;
|
|
646
707
|
// component inputs
|
|
708
|
+
/** The data for the Handsontable instance. */
|
|
709
|
+
data = [];
|
|
647
710
|
/** The settings for the Handsontable instance. */
|
|
648
711
|
settings;
|
|
649
712
|
/** The container element for the Handsontable instance. */
|
|
@@ -661,8 +724,7 @@ class HotTableComponent {
|
|
|
661
724
|
* @returns The Handsontable instance or `null` if it's not yet been created or has been destroyed.
|
|
662
725
|
*/
|
|
663
726
|
get hotInstance() {
|
|
664
|
-
if (!this.__hotInstance ||
|
|
665
|
-
(this.__hotInstance && !this.__hotInstance.isDestroyed)) {
|
|
727
|
+
if (!this.__hotInstance || (this.__hotInstance && !this.__hotInstance.isDestroyed)) {
|
|
666
728
|
// Will return the Handsontable instance or `null` if it's not yet been created.
|
|
667
729
|
return this.__hotInstance;
|
|
668
730
|
}
|
|
@@ -683,9 +745,9 @@ class HotTableComponent {
|
|
|
683
745
|
* The initial settings of the table are also prepared here
|
|
684
746
|
*/
|
|
685
747
|
ngAfterViewInit() {
|
|
686
|
-
let options = this._hotSettingsResolver.applyCustomSettings(this.settings);
|
|
748
|
+
let options = this._hotSettingsResolver.applyCustomSettings(this.settings, this.ngZone);
|
|
687
749
|
const negotiatedSettings = this.getNegotiatedSettings(options);
|
|
688
|
-
options = { ...options, ...negotiatedSettings };
|
|
750
|
+
options = { ...options, ...negotiatedSettings, data: this.data };
|
|
689
751
|
this.ngZone.runOutsideAngular(() => {
|
|
690
752
|
this.hotInstance = new Handsontable$1.Core(this.container.nativeElement, options);
|
|
691
753
|
// @ts-ignore
|
|
@@ -703,9 +765,12 @@ class HotTableComponent {
|
|
|
703
765
|
return;
|
|
704
766
|
}
|
|
705
767
|
if (changes.settings && !changes.settings.firstChange) {
|
|
706
|
-
const newOptions = this._hotSettingsResolver.applyCustomSettings(changes.settings.currentValue);
|
|
768
|
+
const newOptions = this._hotSettingsResolver.applyCustomSettings(changes.settings.currentValue, this.ngZone);
|
|
707
769
|
this.updateHotTable(newOptions);
|
|
708
770
|
}
|
|
771
|
+
if (changes.data && !changes.data.firstChange) {
|
|
772
|
+
this.hotInstance?.updateData(changes.data.currentValue);
|
|
773
|
+
}
|
|
709
774
|
}
|
|
710
775
|
/**
|
|
711
776
|
* Destroys the Handsontable instance and clears the columns from custom editors.
|
|
@@ -758,12 +823,14 @@ class HotTableComponent {
|
|
|
758
823
|
return negotiatedSettings;
|
|
759
824
|
}
|
|
760
825
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HotTableComponent, deps: [{ token: HotSettingsResolver }, { token: HotConfigService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
|
|
761
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: HotTableComponent, selector: "hot-table", inputs: { settings: "settings" }, providers: [HotSettingsResolver], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: '<div #container></div>', isInline: true, styles: [":host{display:block}\n"], encapsulation: i0.ViewEncapsulation.None });
|
|
826
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: HotTableComponent, selector: "hot-table", inputs: { data: "data", settings: "settings" }, providers: [HotSettingsResolver], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: '<div #container></div>', isInline: true, styles: [":host{display:block}\n"], encapsulation: i0.ViewEncapsulation.None });
|
|
762
827
|
}
|
|
763
828
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HotTableComponent, decorators: [{
|
|
764
829
|
type: Component,
|
|
765
830
|
args: [{ selector: 'hot-table', template: '<div #container></div>', encapsulation: ViewEncapsulation.None, providers: [HotSettingsResolver], styles: [":host{display:block}\n"] }]
|
|
766
|
-
}], ctorParameters: function () { return [{ type: HotSettingsResolver }, { type: HotConfigService }, { type: i0.NgZone }]; }, propDecorators: {
|
|
831
|
+
}], ctorParameters: function () { return [{ type: HotSettingsResolver }, { type: HotConfigService }, { type: i0.NgZone }]; }, propDecorators: { data: [{
|
|
832
|
+
type: Input
|
|
833
|
+
}], settings: [{
|
|
767
834
|
type: Input
|
|
768
835
|
}], container: [{
|
|
769
836
|
type: ViewChild,
|
|
@@ -771,7 +838,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
771
838
|
}] } });
|
|
772
839
|
|
|
773
840
|
class HotTableModule {
|
|
774
|
-
static version = '0.0.0-next-
|
|
841
|
+
static version = '0.0.0-next-d9b3885-20250415';
|
|
775
842
|
constructor() { }
|
|
776
843
|
static forRoot() {
|
|
777
844
|
return {
|
|
@@ -891,5 +958,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
891
958
|
* Generated bundle index. Do not edit.
|
|
892
959
|
*/
|
|
893
960
|
|
|
894
|
-
export { DynamicComponentService, HOT_DESTROYED_WARNING, HOT_GLOBAL_CONFIG, HotCellEditorComponent, HotCellRendererComponent, HotConfigService, HotSettingsResolver, HotTableComponent, HotTableModule, INVALID_RENDERER_WARNING, NON_COMMERCIAL_LICENSE, isHotCellRendererComponent, isTemplateRef };
|
|
961
|
+
export { DynamicComponentService, HOT_DESTROYED_WARNING, HOT_GLOBAL_CONFIG, HotCellEditorComponent, HotCellRendererComponent, HotConfigService, HotSettingsResolver, HotTableComponent, HotTableModule, INVALID_RENDERER_WARNING, NON_COMMERCIAL_LICENSE, PredefinedTheme, isHotCellRendererComponent, isTemplateRef };
|
|
895
962
|
//# sourceMappingURL=handsontable-angular-wrapper.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handsontable-angular-wrapper.mjs","sources":["../../../projects/hot-table/src/lib/editor/custom-editor-placeholder.component.ts","../../../projects/hot-table/src/lib/editor/base-editor-adapter.ts","../../../projects/hot-table/src/lib/renderer/hot-cell-renderer.component.ts","../../../projects/hot-table/src/lib/renderer/hot-dynamic-renderer-component.service.ts","../../../projects/hot-table/src/lib/services/hot-settings-resolver.service.ts","../../../projects/hot-table/src/lib/services/hot-config.service.ts","../../../projects/hot-table/src/lib/hot-table.component.ts","../../../projects/hot-table/src/lib/hot-table.module.ts","../../../projects/hot-table/src/lib/editor/hot-cell-editor.component.ts","../../../projects/hot-table/src/public-api.ts","../../../projects/hot-table/src/handsontable-angular-wrapper.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ComponentRef,\n Input,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { HotCellEditorComponent } from './hot-cell-editor.component';\n\n/**\n * Component representing a placeholder for a custom editor in Handsontable.\n * It is used only within the wrapper.\n */\n@Component({\n template: ` <div\n class=\"handsontableInputHolder ht_clone_master\"\n [style.display]=\"display\"\n [style.width.px]=\"width\"\n [style.height.px]=\"height\"\n [style.maxWidth.px]=\"width\"\n [style.maxHeight.px]=\"height\"\n [style.top.px]=\"top\"\n [style.left.px]=\"left\"\n >\n <ng-template #inputPlaceholder></ng-template>\n </div>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class CustomEditorPlaceholderComponent {\n /** The top position of the editor. */\n @Input() top: number;\n\n /** The left position of the editor. */\n @Input() left: number;\n\n /** The height of the editor. */\n @Input() height: number;\n\n /** The width of the editor. */\n @Input() width: number;\n\n @Input()\n set isVisible(value: boolean) {\n this._isVisible = value;\n }\n\n /** The reference to the component instance of the editor. */\n @Input() set componentRef(\n hotEditorComponentRef: ComponentRef<HotCellEditorComponent<any>>\n ) {\n if (hotEditorComponentRef) {\n this.container.insert(hotEditorComponentRef.hostView);\n }\n }\n\n /** The container for the editor's input placeholder. */\n @ViewChild('inputPlaceholder', { read: ViewContainerRef, static: true }) container: ViewContainerRef;\n\n /** The display style of the editor. */\n get display(): string {\n return this._isVisible ? 'block' : 'none';\n }\n\n private _isVisible = false;\n\n /**\n * Detaches the container from the Handsontable.\n */\n detachEditor(): void {\n this.container.detach();\n }\n}\n","import Handsontable from 'handsontable';\nimport {\n ComponentRef,\n createComponent,\n EnvironmentInjector,\n} from '@angular/core';\nimport { CustomEditorPlaceholderComponent } from './custom-editor-placeholder.component';\nimport { ColumnSettingsInternal } from '../models/column-settings';\nimport { HotCellEditorComponent } from './hot-cell-editor.component';\nimport { Subscription, take } from 'rxjs';\n\n/**\n * Adapter for BaseEditor from Handsontable.\n */\nexport class BaseEditorAdapter extends Handsontable.editors.BaseEditor {\n /** Reference to the custom editor component. */\n private _componentRef?: ComponentRef<HotCellEditorComponent<any>>;\n\n /** Reference to the editor placeholder component. */\n private _editorPlaceHolderRef: ComponentRef<CustomEditorPlaceholderComponent>;\n\n /** Flag indicating whether the placeholder is ready. */\n private _isPlaceholderReady = false;\n\n /** Subscription for the finish edit event. */\n private _finishEditSubscription?: Subscription;\n\n /** Subscription for the cancel edit event. */\n private _cancelEditSubscription?: Subscription;\n\n /**\n * Creates an instance of BaseEditorAdapter.\n * @param instance The Handsontable instance.\n */\n constructor(instance: Handsontable.Core) {\n super(instance);\n\n this.hot.addHook('afterRowResize', this.onAfterRowResize.bind(this));\n this.hot.addHook('afterColumnResize', this.onAfterColumnResize.bind(this));\n this.hot.addHook('afterDestroy', this.onAfterDestroy.bind(this));\n }\n\n /**\n * Prepares the editor for editing. Parameters are passed from Handsontable.\n * @param row The row index.\n * @param column The column index.\n * @param prop The property name.\n * @param TD The table cell element.\n * @param originalValue The original value of the cell.\n * @param cellProperties The cell properties.\n */\n override prepare(\n row: number,\n column: number,\n prop: string | number,\n TD: HTMLTableCellElement,\n originalValue: any,\n cellProperties: Handsontable.CellProperties\n ): void {\n if (!this.isOpened()) {\n super.prepare(row, column, prop, TD, originalValue, cellProperties);\n const columnMeta: ColumnSettingsInternal = this.hot.getColumnMeta(\n column\n ) as ColumnSettingsInternal;\n\n if (!this._isPlaceholderReady) {\n this.createEditorPlaceholder(columnMeta._environmentInjector);\n this._isPlaceholderReady = true;\n }\n\n this._componentRef = columnMeta._editorComponentReference;\n\n if (this._finishEditSubscription) {\n this._finishEditSubscription.unsubscribe();\n this._finishEditSubscription = undefined;\n }\n\n if (this._cancelEditSubscription) {\n this._cancelEditSubscription.unsubscribe();\n this._cancelEditSubscription = undefined;\n }\n\n this._finishEditSubscription = this._componentRef.instance.finishEdit\n .pipe(take(1))\n .subscribe(() => {\n this.finishEditing();\n });\n\n this._cancelEditSubscription = this._componentRef.instance.cancelEdit\n .pipe(take(1))\n .subscribe(() => {\n this.cancelChanges();\n });\n }\n }\n\n /**\n * Closes the editor. This event is triggered by Handsontable.\n */\n close(): void {\n if (this.isOpened()) {\n this.resetEditorState();\n this._editorPlaceHolderRef.changeDetectorRef.detectChanges();\n this._editorPlaceHolderRef.instance.detachEditor();\n this._componentRef.instance.onClose();\n }\n }\n\n /**\n * Focuses the editor. This event is triggered by Handsontable.\n */\n focus(): void {\n this._componentRef.instance.onFocus();\n }\n\n /**\n * Gets the value from the editor.\n * @returns The value from the editor.\n */\n getValue(): any {\n return this._componentRef.instance?.getValue();\n }\n\n /**\n * Opens the editor. This event is triggered by Handsontable.\n * When opening, we set the shortcut context to 'editor'.\n * This allows the built-in keyboard shortcuts to operate within the editor.\n * @param event The event that triggered the opening of the editor.\n * @remarks When entering edit mode using double-click, keyboard shortcuts do not work.\n */\n open(event?: Event): void {\n this.hot.getShortcutManager().setActiveContextName('editor');\n this.applyPropsToEditor();\n this._componentRef.instance.onOpen(event);\n }\n\n /**\n * Sets the value for the custom editor.\n * @param newValue The value to set.\n */\n setValue(newValue?: any): void {\n this._componentRef.instance?.setValue(newValue);\n this._componentRef.changeDetectorRef.detectChanges();\n }\n\n /**\n * Applies properties to the custom editor and editor placeholder.\n */\n private applyPropsToEditor(): void {\n const rect = this.getEditedCellRect();\n\n if (!this.isInFullEditMode()) {\n this._componentRef.instance.setValue(null);\n }\n\n this._componentRef.setInput('originalValue', this.originalValue);\n this._componentRef.setInput('row', this.row);\n this._componentRef.setInput('column', this.col);\n this._componentRef.setInput('prop', this.prop);\n this._componentRef.setInput('cellProperties', this.cellProperties);\n\n this._editorPlaceHolderRef.setInput('top', rect.top);\n this._editorPlaceHolderRef.setInput('left', rect.start);\n this._editorPlaceHolderRef.setInput('height', rect.height);\n this._editorPlaceHolderRef.setInput('width', rect.width);\n this._editorPlaceHolderRef.setInput('isVisible', true);\n this._editorPlaceHolderRef.setInput('componentRef', this._componentRef);\n this._editorPlaceHolderRef.changeDetectorRef.detectChanges();\n }\n\n /**\n * Creates the editor placeholder and append it to hot rootElement.\n * @param injector The environment injector.\n */\n private createEditorPlaceholder(injector: EnvironmentInjector): void {\n this._editorPlaceHolderRef = createComponent(\n CustomEditorPlaceholderComponent,\n {\n environmentInjector: injector as EnvironmentInjector,\n }\n );\n\n this.hot.rootElement.appendChild(\n this._editorPlaceHolderRef.location.nativeElement\n );\n }\n\n /**\n * Handles the after column resize event.\n * Helps adjust the editor size to the column size and update its position.\n */\n private onAfterColumnResize(): void {\n if (this.isOpened()) {\n this.applyPropsToEditor();\n }\n }\n\n /**\n * Handles the after row resize event.\n * Helps adjust the editor size to the column size and update its position.\n */\n private onAfterRowResize(): void {\n if (this.isOpened()) {\n this.applyPropsToEditor();\n }\n }\n\n /**\n * Handles the after destroy event.\n */\n private onAfterDestroy(): void {\n this._editorPlaceHolderRef?.destroy();\n }\n\n /**\n * Resets the editor placeholder state.\n * We need to reset the editor placeholder state because we use it\n * to store multiple references to the custom editor.\n */\n private resetEditorState(): void {\n this._editorPlaceHolderRef.setInput('top', undefined);\n this._editorPlaceHolderRef.setInput('left', undefined);\n this._editorPlaceHolderRef.setInput('height', undefined);\n this._editorPlaceHolderRef.setInput('width', undefined);\n this._editorPlaceHolderRef.setInput('isVisible', false);\n this._editorPlaceHolderRef.setInput('componentRef', undefined);\n }\n}\n","import Handsontable from 'handsontable/base';\nimport {Component, Input} from '@angular/core';\n\n/**\n * Abstract base component for creating custom cell renderer components for Handsontable.\n *\n * This class provides a common interface and properties required by any custom cell renderer.\n *\n * @template TValue - The type of the component renderer.\n * @template TProps - The type of additional renderer properties.\n */\n@Component({\n selector: 'hot-cell-renderer',\n template: `<!-- This is an abstract component. Extend this component and provide your own template. -->`\n})\nexport abstract class HotCellRendererComponent<TValue extends string | number | boolean = string, TProps extends {} = any> {\n static readonly RENDERER_MARKER = Symbol('HotCellRendererComponent');\n\n @Input() value: TValue = '' as TValue;\n\n @Input() instance: Handsontable;\n @Input() td: HTMLTableCellElement;\n @Input() row: number;\n @Input() col: number;\n @Input() prop: string;\n\n /**\n * The cell properties provided by Handsontable, extended with optional renderer-specific properties.\n */\n @Input() cellProperties: Handsontable.CellProperties & { rendererProps?: TProps };\n\n /**\n * Retrieves the renderer-specific properties from the cell properties.\n *\n * @returns The additional properties for the renderer.\n */\n public getProps(): TProps {\n return this.cellProperties?.rendererProps ?? ({} as TProps);\n }\n}\n","import {\n ApplicationRef, ComponentRef, createComponent,\n EmbeddedViewRef, EnvironmentInjector, Injectable,\n TemplateRef, Type\n} from '@angular/core';\nimport {BaseRenderer, baseRenderer} from 'handsontable/renderers';\nimport Handsontable from 'handsontable';\nimport {HotCellRendererComponent} from './hot-cell-renderer.component';\n\ntype BaseRendererParameters = Parameters<BaseRenderer>;\n\nexport const INVALID_RENDERER_WARNING =\n 'The provided renderer component was not recognized as a valid custom renderer. ' +\n 'It must either extend HotCellRendererComponent or be a valid TemplateRef. ' +\n 'Please ensure that your custom renderer is implemented correctly and imported from the proper source.';\n\n/**\n * An object representing the parameters passed to a Handsontable renderer.\n */\ninterface BaseRendererParametersObject {\n instance: Handsontable.Core;\n td: HTMLTableCellElement;\n row: number;\n col: number;\n prop: string | number;\n value: any;\n cellProperties: Handsontable.CellProperties;\n}\n\n/**\n * Type guard that checks if the given object is a TemplateRef.\n *\n * @param obj - The object to check.\n * @returns True if the object is a TemplateRef; otherwise, false.\n */\nexport function isTemplateRef<T>(obj: any): obj is TemplateRef<T> {\n return obj && typeof obj.createEmbeddedView === 'function';\n}\n\n/**\n * Type guard to check if an object is an instance of HotCellRendererComponent.\n *\n * @param obj - The object to check.\n * @returns True if the object is a HotCellRendererComponent, false otherwise.\n */\nexport function isHotCellRendererComponent(obj: any): obj is Type<HotCellRendererComponent> {\n return obj?.RENDERER_MARKER === HotCellRendererComponent.RENDERER_MARKER;\n}\n\n/**\n * Service for dynamically creating Angular components or templates as custom renderers for Handsontable.\n *\n * This service allows you to create a renderer function that wraps a given Angular component or TemplateRef\n * so that it can be used as a Handsontable renderer.\n *\n * @example\n * const customRenderer = dynamicComponentService.createRendererFromComponent(MyRendererComponent, { someProp: value });\n * // Use customRenderer in your Handsontable configuration\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class DynamicComponentService {\n constructor(\n private appRef: ApplicationRef,\n private environmentInjector: EnvironmentInjector\n ) {}\n\n /**\n * Creates a custom renderer function for Handsontable from an Angular component or TemplateRef.\n * The generated renderer function will be used by Handsontable to render cell content.\n *\n * @param component - The Angular component type or TemplateRef to use as renderer.\n * @param componentProps - An object containing additional properties to use by the renderer.\n * @param register - If true, registers the renderer with Handsontable using the component's name.\n * @returns A renderer function that can be used in Handsontable's configuration.\n */\n createRendererFromComponent(\n component: Type<HotCellRendererComponent> | TemplateRef<any>,\n componentProps: Record<string, any> = {},\n register: boolean = false\n ) {\n return (\n instance: Handsontable.Core,\n td: HTMLTableCellElement,\n row: number,\n col: number,\n prop: string | number,\n value: any,\n cellProperties: Handsontable.CellProperties\n ) => {\n const properties: BaseRendererParametersObject = {\n value, instance, td, row, col, prop, cellProperties\n };\n\n if (componentProps) {\n Object.assign(cellProperties, {rendererProps: componentProps});\n }\n\n const rendererParameters: BaseRendererParameters = [\n instance, td, row, col, prop, value, cellProperties\n ];\n\n baseRenderer.apply(this, rendererParameters);\n\n td.innerHTML = '';\n\n if (isTemplateRef(component)) {\n this.attachTemplateToElement(component, td, properties);\n } else if (isHotCellRendererComponent(component)){\n const componentRef = this.createComponent(component, properties);\n this.attachComponentToElement(componentRef, td);\n } else {\n console.warn(INVALID_RENDERER_WARNING)\n }\n\n if (register && isHotCellRendererComponent(component)) {\n Handsontable.renderers.registerRenderer(\n component.constructor.name,\n component as any as BaseRenderer\n );\n }\n\n return td;\n };\n }\n\n /**\n * Attaches an embedded view created from a TemplateRef to a given DOM element.\n *\n * @param template - The TemplateRef to create an embedded view from.\n * @param tdEl - The target DOM element (a table cell) to which the view will be appended.\n * @param properties - Context object providing properties to be used within the template.\n */\n private attachTemplateToElement(\n template: TemplateRef<any>,\n tdEl: HTMLTableCellElement,\n properties: BaseRendererParametersObject\n ) {\n const embeddedView: EmbeddedViewRef<any> = template.createEmbeddedView({\n $implicit: properties.value,\n ...properties,\n });\n embeddedView.detectChanges();\n\n embeddedView.rootNodes.forEach((node) => {\n tdEl.appendChild(node);\n });\n }\n\n /**\n * Dynamically creates an Angular component of the given type.\n *\n * @param component - The Angular component type to be created.\n * @param rendererParameters - An object containing input properties to assign to the component instance.\n * @returns The ComponentRef of the dynamically created component.\n */\n private createComponent<T extends HotCellRendererComponent>(\n component: Type<T>,\n rendererParameters: BaseRendererParametersObject\n ): ComponentRef<T> {\n const componentRef = createComponent(component, {\n environmentInjector: this.environmentInjector\n });\n\n Object.keys(rendererParameters).forEach(key => {\n if (rendererParameters.hasOwnProperty(key)) {\n componentRef.setInput(key, rendererParameters[key])\n } else {\n console.warn(`Input property \"${key}\" does not exist on component instance: ${component?.name}.`);\n }\n })\n componentRef.changeDetectorRef.detectChanges();\n\n this.appRef.attachView(componentRef.hostView);\n\n return componentRef;\n }\n\n /**\n * Attaches a dynamically created component's view to a specified DOM container element.\n *\n * @param componentRef - The reference to the dynamically created component.\n * @param container - The target DOM element to which the component's root node will be appended.\n */\n private attachComponentToElement<T>(\n componentRef: ComponentRef<T>,\n container: HTMLElement\n ): void {\n const domElem = (componentRef.hostView as EmbeddedViewRef<T>)\n .rootNodes[0] as HTMLElement;\n container.appendChild(domElem);\n }\n\n /**\n * Destroys a dynamically created component and detaches its view from the Angular application.\n *\n * @param componentRef - The reference to the component to be destroyed.\n */\n destroyComponent<T>(componentRef: ComponentRef<T>): void {\n this.appRef.detachView(componentRef.hostView);\n componentRef.destroy();\n }\n}\n","import {\n createComponent,\n EnvironmentInjector,\n Injectable,\n} from '@angular/core';\nimport { DynamicComponentService } from '../renderer/hot-dynamic-renderer-component.service';\nimport { BaseEditorAdapter } from '../editor/base-editor-adapter';\nimport { GridSettings, GridSettingsInternal } from '../models/grid-settings';\nimport {\n ColumnSettings,\n ColumnSettingsInternal,\n} from '../models/column-settings';\n\n/**\n * Service to resolve and apply custom settings for Handsontable settings object.\n */\n@Injectable()\nexport class HotSettingsResolver {\n constructor(\n private dynamicComponentService: DynamicComponentService,\n private readonly environmentInjector: EnvironmentInjector\n ) {}\n\n /**\n * Applies custom settings to the provided GridSettings.\n * @param settings The original grid settings.\n * @returns The merged grid settings with custom settings applied.\n */\n applyCustomSettings(settings: GridSettings): GridSettingsInternal {\n const mergedSettings: GridSettingsInternal = settings;\n\n this.updateColumnRendererForGivenCustomRenderer(mergedSettings);\n this.updateColumnEditorForGivenCustomEditor(mergedSettings);\n this.updateColumnValidatorForGivenCustomValidator(mergedSettings);\n\n return mergedSettings ?? {};\n }\n\n /**\n * Updates the column renderer for columns with a custom renderer.\n * @param mergedSettings The merged grid settings.\n */\n private updateColumnRendererForGivenCustomRenderer(\n mergedSettings: GridSettingsInternal\n ): void {\n if (!Array.isArray(mergedSettings?.columns)) {\n return;\n }\n\n (mergedSettings?.columns as ColumnSettingsInternal[])\n ?.filter((settings) => settings.componentRenderer)\n ?.forEach((cellSettings) => {\n const props: any = cellSettings.componentRendererProps ?? {};\n cellSettings.renderer =\n this.dynamicComponentService.createRendererFromComponent(\n cellSettings.componentRenderer,\n props\n );\n });\n }\n\n /**\n * Updates the column editor for columns with a custom editor.\n * @param mergedSettings The merged grid settings.\n */\n private updateColumnEditorForGivenCustomEditor(\n mergedSettings: GridSettingsInternal\n ): void {\n if (!Array.isArray(mergedSettings?.columns)) {\n return;\n }\n\n (mergedSettings?.columns as ColumnSettings[])\n ?.filter((settings) => settings.customEditor)\n ?.forEach((cellSettings) => {\n cellSettings.editor = BaseEditorAdapter;\n cellSettings._editorComponentReference = createComponent(\n cellSettings.customEditor,\n {\n environmentInjector: this.environmentInjector,\n }\n );\n cellSettings._environmentInjector = this.environmentInjector;\n });\n }\n\n /**\n * Updates the column validator for columns with a custom validator.\n * @param mergedSettings The merged grid settings.\n */\n private updateColumnValidatorForGivenCustomValidator(\n mergedSettings: GridSettingsInternal\n ): void {\n if (!Array.isArray(mergedSettings?.columns)) {\n return;\n }\n\n (mergedSettings?.columns as ColumnSettingsInternal[])\n ?.filter((settings) => settings.customValidator)\n ?.forEach((cellSettings) => {\n cellSettings.validator = (\n value: any,\n callback: (result: boolean) => void\n ) => {\n callback(cellSettings.customValidator(value));\n };\n });\n }\n}\n","import {Injectable, InjectionToken, Inject} from '@angular/core';\nimport {BehaviorSubject, Observable} from 'rxjs';\n\n/**\n * A constant representing the non-commercial and evaluation license.\n * */\nexport const NON_COMMERCIAL_LICENSE = 'non-commercial-and-evaluation';\n\n/**\n * Type representing a theme name.\n * Possible values include predefined themes and any custom string.\n */\nexport type ThemeName =\n 'ht-theme-main'\n | 'ht-theme-main-dark'\n | 'ht-theme-horizon'\n | 'ht-theme-horizon-dark'\n | string;\n\n/**\n * Interface for the Handsontable global configuration.\n */\nexport interface HotConfig {\n /**\n * The license key for Handsontable.\n */\n license?: string;\n\n /**\n * The name of the theme to be used.\n */\n themeName?: ThemeName;\n\n /**\n * The language code to be used for localization.\n * For example, 'en-US', 'pl-PL', etc.\n * **Note:** The language must be chosen from the languages supported by Handsontable and registered in the application.\n */\n language?: string;\n\n /**\n * The layout direction for the Handsontable instance.\n * This property defines whether the layout should be left-to-right ('ltr'), right-to-left ('rtl'),\n * or inherit the direction from the parent element ('inherit').\n */\n layoutDirection?: 'ltr' | 'rtl' | 'inherit';\n}\n\n/**\n * Injection token for providing a global default configuration.\n */\nexport const HOT_GLOBAL_CONFIG = new InjectionToken<HotConfig>('HOT_GLOBAL_CONFIG', {\n providedIn: 'root',\n factory: () => ({})\n});\n\n/**\n * Service for configuring Handsontable settings.\n * This service allows setting and retrieving global configuration.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class HotConfigService {\n\n /**\n * The default configuration object for Handsontable.\n *\n * This object is used as the initial value for the configuration BehaviorSubject.\n * It can be overridden by a global configuration provided through the\n * {@link HOT_GLOBAL_CONFIG} injection token.\n *\n * @private\n * @type {HotConfig}\n */\n private defaultConfig: HotConfig = {\n license: undefined,\n themeName: ''\n };\n\n /**\n * A BehaviorSubject that holds the current Handsontable configuration.\n *\n * New configuration values can be emitted by calling next() on this subject.\n * This allows subscribers to react to configuration changes dynamically.\n *\n * @private\n * @type {BehaviorSubject<HotConfig>}\n */\n private configSubject = new BehaviorSubject<HotConfig>(this.defaultConfig);\n\n /**\n * An Observable stream of the current Handsontable configuration.\n *\n * Components can subscribe to this observable to receive updates whenever the configuration changes.\n *\n * @returns The configuration as an observable stream.\n */\n get config$(): Observable<HotConfig> {\n return this.configSubject.asObservable();\n }\n\n constructor(\n @Inject(HOT_GLOBAL_CONFIG) globalConfig: HotConfig\n ) {\n // Merge global configuration (if provided) into defaultConfig immutably.\n this.defaultConfig = { ...this.defaultConfig, ...globalConfig };\n this.configSubject.next(this.defaultConfig);\n }\n\n /**\n * Sets the configuration for Handsontable.\n *\n * @param config - An object containing configuration options.\n * If a some parameter is provided, it will override the current settings.\n */\n setConfig(config: HotConfig) {\n const currentConfig = this.configSubject.value;\n const newConfig = { ...currentConfig, ...config };\n\n this.configSubject.next(newConfig);\n }\n\n /**\n * Retrieves the current Handsontable configuration.\n *\n * @returns An object with the current settings.\n */\n getConfig(): HotConfig {\n return this.configSubject.value;\n }\n\n /**\n * Resets the configuration to the default settings.\n * This method updates the configuration BehaviorSubject with the default configuration.\n */\n resetConfig(): void {\n this.configSubject.next({ ...this.defaultConfig });\n }\n}\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport Handsontable from 'handsontable/base';\nimport { HotSettingsResolver } from './services/hot-settings-resolver.service';\nimport { HotConfigService } from './services/hot-config.service';\nimport { GridSettings } from './models/grid-settings';\nimport { ColumnSettingsInternal } from './models/column-settings';\nimport { Subscription } from 'rxjs';\n\nexport const HOT_DESTROYED_WARNING =\n 'The Handsontable instance bound to this component was destroyed and cannot be' +\n ' used properly.';\n\n@Component({\n selector: 'hot-table',\n template: '<div #container></div>',\n encapsulation: ViewEncapsulation.None,\n providers: [HotSettingsResolver],\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class HotTableComponent implements AfterViewInit, OnChanges, OnDestroy {\n // component inputs\n /** The settings for the Handsontable instance. */\n @Input() settings: GridSettings;\n\n /** The container element for the Handsontable instance. */\n @ViewChild('container', { static: false })\n public container: ElementRef<HTMLDivElement>;\n\n /** The Handsontable instance. */\n private __hotInstance: Handsontable | null = null;\n private configSubscription: Subscription;\n\n constructor(\n private _hotSettingsResolver: HotSettingsResolver,\n private _hotConfig: HotConfigService,\n public ngZone: NgZone\n ) {}\n\n /**\n * Gets the Handsontable instance.\n * @returns The Handsontable instance or `null` if it's not yet been created or has been destroyed.\n */\n public get hotInstance(): Handsontable | null {\n if (\n !this.__hotInstance ||\n (this.__hotInstance && !this.__hotInstance.isDestroyed)\n ) {\n // Will return the Handsontable instance or `null` if it's not yet been created.\n return this.__hotInstance;\n } else {\n console.warn(HOT_DESTROYED_WARNING);\n return null;\n }\n }\n\n /**\n * Sets the Handsontable instance.\n * @param hotInstance The Handsontable instance to set.\n */\n private set hotInstance(hotInstance) {\n this.__hotInstance = hotInstance;\n }\n\n /**\n * Initializes the Handsontable instance after the view has been initialized.\n * The initial settings of the table are also prepared here\n */\n ngAfterViewInit(): void {\n let options: Handsontable.GridSettings =\n this._hotSettingsResolver.applyCustomSettings(this.settings);\n\n const negotiatedSettings = this.getNegotiatedSettings(options);\n options = {...options, ...negotiatedSettings};\n\n this.ngZone.runOutsideAngular(() => {\n this.hotInstance = new Handsontable.Core(\n this.container.nativeElement,\n options\n );\n\n // @ts-ignore\n this.hotInstance.init();\n });\n\n this.configSubscription = this._hotConfig.config$.subscribe((config) => {\n if (this.hotInstance) {\n const negotiatedSettings = this.getNegotiatedSettings(this.settings);\n this.updateHotTable(negotiatedSettings);\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this.hotInstance === null) {\n return;\n }\n\n if (changes.settings && !changes.settings.firstChange) {\n const newOptions: Handsontable.GridSettings =\n this._hotSettingsResolver.applyCustomSettings(\n changes.settings.currentValue\n );\n\n this.updateHotTable(newOptions);\n }\n }\n\n /**\n * Destroys the Handsontable instance and clears the columns from custom editors.\n */\n ngOnDestroy(): void {\n this.ngZone.runOutsideAngular(() => {\n if (this.hotInstance) {\n (this.hotInstance.getSettings().columns as ColumnSettingsInternal[])\n ?.filter((column) => column._editorComponentReference)\n .forEach((column) => {\n column._editorComponentReference?.destroy();\n });\n this.hotInstance.destroy();\n }\n });\n\n this.configSubscription.unsubscribe();\n }\n\n /**\n * Updates the Handsontable instance with new settings.\n * @param newSettings The new settings to apply to the Handsontable instance.\n */\n private updateHotTable(newSettings: Handsontable.GridSettings): void {\n if (!this.hotInstance) {\n return;\n }\n\n this.ngZone.runOutsideAngular(() => {\n this.hotInstance?.updateSettings(newSettings, false);\n });\n }\n\n /**\n * Merges the provided Handsontable grid settings with the global configuration.\n *\n * This method retrieves the global configuration from the HotConfigService and negotiates the final\n * Handsontable settings by giving precedence to the provided settings.\n * Additionally, the `layoutDirection` is only merged if the Handsontable instance has not yet been initialized.\n *\n * @param settings - The grid settings provided by the user or component.\n * @returns The final negotiated grid settings after merging with global defaults.\n */\n private getNegotiatedSettings(settings: Handsontable.GridSettings): Handsontable.GridSettings {\n const hotConfig = this._hotConfig.getConfig();\n const negotiatedSettings: Handsontable.GridSettings = {}\n\n negotiatedSettings.licenseKey = settings.licenseKey ?? hotConfig.license;\n negotiatedSettings.themeName = settings.themeName ?? hotConfig.themeName;\n negotiatedSettings.language = settings.language ?? hotConfig.language;\n\n // settings that can be set only before the Handsontable instance is initialized\n if (!this.__hotInstance) {\n negotiatedSettings.layoutDirection = settings.layoutDirection ?? hotConfig.layoutDirection;\n }\n\n return negotiatedSettings;\n }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { HotTableComponent } from './hot-table.component';\nimport { CustomEditorPlaceholderComponent } from './editor/custom-editor-placeholder.component';\n\n@NgModule({\n declarations: [HotTableComponent, CustomEditorPlaceholderComponent],\n imports: [],\n exports: [HotTableComponent],\n})\nexport class HotTableModule {\n static version = '0.0.0-next-f3a2373-20250401';\n\n constructor() {}\n\n public static forRoot(): ModuleWithProviders<HotTableModule> {\n return {\n ngModule: HotTableModule,\n };\n }\n}\n","import { Directive, EventEmitter, HostBinding, Input, Output } from '@angular/core';\nimport { CellProperties } from 'handsontable/settings';\n\n/**\n * Abstract class representing a Handsontable editor in angular.\n */\n@Directive()\nexport abstract class HotCellEditorComponent<T extends string | number | boolean> {\n /** The tabindex attribute for the editor. */\n @HostBinding('attr.tabindex') protected tabindex = -1;\n\n /** The data-hot-input attribute for the editor. */\n @HostBinding('attr.data-hot-input') protected dataHotInput = '';\n\n /** The handsontableInput class for the editor. */\n @HostBinding('class.handsontableInput') protected handsontableInputClass = true;\n\n /** The height of the editor as a percentage of the parent container. */\n @HostBinding('style.height.%') protected heightFitParentContainer = 100;\n\n /** The width of the editor as a percentage of the parent container. */\n @HostBinding('style.width.%') protected widthFitParentContainer = 100;\n\n /** The row index of the cell being edited. */\n @Input() row: number;\n\n /** The column index of the cell being edited. */\n @Input() column: number;\n\n /** The property name of the cell being edited. */\n @Input() prop: string | number;\n\n /** The original value of the cell being edited. */\n @Input() originalValue: T;\n\n /** The cell properties of the cell being edited. */\n @Input() cellProperties: CellProperties;\n\n /** Event emitted when the edit is finished.\n * The data will be saved to the model.\n */\n @Output() finishEdit = new EventEmitter<void>();\n\n /** Event emitted when the edit is canceled.\n * The entered data will be reverted to the original value.\n */\n @Output() cancelEdit = new EventEmitter<void>();\n\n /** The current value of the editor. */\n private _value: T;\n\n /** Event triggered by Handsontable on closing the editor.\n * The user can define their own actions for\n * the custom editor to be called after the base logic. */\n onClose(): void {}\n\n /** Event triggered by Handsontable on open the editor.\n * The user can define their own actions for\n * the custom editor to be called after the base logic. */\n onOpen(event?: Event): void {}\n\n /** Event triggered by Handsontable on focus the editor.\n * The user have to define focus logic.\n * @example\n * ```typescript\n * component({\n * template: `<input #inputElement>`\n * })\n * class CustomEditor extends HotEditor<string> {\n * @ViewChild('inputElement') inputElement!: ElementRef;\n *\n * onFocus(): void {\n * this.inputElement.nativeElement.focus();\n * }\n * }\n * ```\n */\n abstract onFocus(): void;\n\n /**\n * Gets the current value of the editor.\n * @returns The current value of the editor.\n */\n getValue(): T {\n return this._value;\n }\n\n /**\n * Sets the current value of the editor.\n * @param value The value to set.\n */\n setValue(value: T): void {\n this._value = value;\n }\n}\n","/*\n * Public API Surface of hot-table\n */\n\nexport * from './lib/hot-table.component';\nexport * from './lib/services/hot-settings-resolver.service';\nexport * from './lib/hot-table.module';\nexport * from './lib/services/hot-config.service';\nexport * from './lib/renderer/hot-dynamic-renderer-component.service';\nexport * from './lib/renderer/hot-cell-renderer.component';\nexport * from './lib/editor/hot-cell-editor.component';\nexport { GridSettings } from './lib/models/grid-settings';\nexport {\n ColumnSettings,\n CustomValidatorFn,\n CustomColumnProperties,\n} from './lib/models/column-settings';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.DynamicComponentService","Handsontable","i1.HotSettingsResolver","i2.HotConfigService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"handsontable-angular-wrapper.mjs","sources":["../../../projects/hot-table/src/lib/editor/custom-editor-placeholder.component.ts","../../../projects/hot-table/src/lib/editor/base-editor-adapter.ts","../../../projects/hot-table/src/lib/renderer/hot-cell-renderer.component.ts","../../../projects/hot-table/src/lib/renderer/hot-dynamic-renderer-component.service.ts","../../../projects/hot-table/src/lib/services/hot-settings-resolver.service.ts","../../../projects/hot-table/src/lib/services/hot-config.service.ts","../../../projects/hot-table/src/lib/hot-table.component.ts","../../../projects/hot-table/src/lib/hot-table.module.ts","../../../projects/hot-table/src/lib/editor/hot-cell-editor.component.ts","../../../projects/hot-table/src/public-api.ts","../../../projects/hot-table/src/handsontable-angular-wrapper.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ComponentRef,\n Input,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { HotCellEditorComponent } from './hot-cell-editor.component';\n\n/**\n * Component representing a placeholder for a custom editor in Handsontable.\n * It is used only within the wrapper.\n */\n@Component({\n template: ` <div\n class=\"handsontableInputHolder ht_clone_master\"\n [style.display]=\"display\"\n [style.width.px]=\"width\"\n [style.height.px]=\"height\"\n [style.maxWidth.px]=\"width\"\n [style.maxHeight.px]=\"height\"\n [style.top.px]=\"top\"\n [style.left.px]=\"left\"\n >\n <ng-template #inputPlaceholder></ng-template>\n </div>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class CustomEditorPlaceholderComponent {\n /** The top position of the editor. */\n @Input() top: number;\n\n /** The left position of the editor. */\n @Input() left: number;\n\n /** The height of the editor. */\n @Input() height: number;\n\n /** The width of the editor. */\n @Input() width: number;\n\n @Input()\n set isVisible(value: boolean) {\n this._isVisible = value;\n }\n\n /** The reference to the component instance of the editor. */\n @Input() set componentRef(\n hotEditorComponentRef: ComponentRef<HotCellEditorComponent<any>>\n ) {\n if (hotEditorComponentRef) {\n this.container.insert(hotEditorComponentRef.hostView);\n }\n }\n\n /** The container for the editor's input placeholder. */\n @ViewChild('inputPlaceholder', { read: ViewContainerRef, static: true }) container: ViewContainerRef;\n\n /** The display style of the editor. */\n get display(): string {\n return this._isVisible ? 'block' : 'none';\n }\n\n private _isVisible = false;\n\n /**\n * Detaches the container from the Handsontable.\n */\n detachEditor(): void {\n this.container.detach();\n }\n}\n","import Handsontable from 'handsontable';\nimport {\n ComponentRef,\n createComponent,\n EnvironmentInjector,\n} from '@angular/core';\nimport { CustomEditorPlaceholderComponent } from './custom-editor-placeholder.component';\nimport { ColumnSettingsInternal } from '../models/column-settings';\nimport { HotCellEditorComponent } from './hot-cell-editor.component';\nimport { Subscription, take } from 'rxjs';\n\n/**\n * Adapter for BaseEditor from Handsontable.\n */\nexport class BaseEditorAdapter extends Handsontable.editors.BaseEditor {\n /** Reference to the custom editor component. */\n private _componentRef?: ComponentRef<HotCellEditorComponent<any>>;\n\n /** Reference to the editor placeholder component. */\n private _editorPlaceHolderRef: ComponentRef<CustomEditorPlaceholderComponent>;\n\n /** Flag indicating whether the placeholder is ready. */\n private _isPlaceholderReady = false;\n\n /** Subscription for the finish edit event. */\n private _finishEditSubscription?: Subscription;\n\n /** Subscription for the cancel edit event. */\n private _cancelEditSubscription?: Subscription;\n\n /**\n * Creates an instance of BaseEditorAdapter.\n * @param instance The Handsontable instance.\n */\n constructor(instance: Handsontable.Core) {\n super(instance);\n\n this.hot.addHook('afterRowResize', this.onAfterRowResize.bind(this));\n this.hot.addHook('afterColumnResize', this.onAfterColumnResize.bind(this));\n this.hot.addHook('afterDestroy', this.onAfterDestroy.bind(this));\n }\n\n /**\n * Prepares the editor for editing. Parameters are passed from Handsontable.\n * @param row The row index.\n * @param column The column index.\n * @param prop The property name.\n * @param TD The table cell element.\n * @param originalValue The original value of the cell.\n * @param cellProperties The cell properties.\n */\n override prepare(\n row: number,\n column: number,\n prop: string | number,\n TD: HTMLTableCellElement,\n originalValue: any,\n cellProperties: Handsontable.CellProperties\n ): void {\n if (!this.isOpened()) {\n super.prepare(row, column, prop, TD, originalValue, cellProperties);\n const columnMeta: ColumnSettingsInternal = this.hot.getColumnMeta(\n column\n ) as ColumnSettingsInternal;\n\n if (!this._isPlaceholderReady) {\n this.createEditorPlaceholder(columnMeta._environmentInjector);\n this._isPlaceholderReady = true;\n }\n\n this._componentRef = columnMeta._editorComponentReference;\n\n if (this._finishEditSubscription) {\n this._finishEditSubscription.unsubscribe();\n this._finishEditSubscription = undefined;\n }\n\n if (this._cancelEditSubscription) {\n this._cancelEditSubscription.unsubscribe();\n this._cancelEditSubscription = undefined;\n }\n\n this._finishEditSubscription = this._componentRef.instance.finishEdit\n .pipe(take(1))\n .subscribe(() => {\n this.finishEditing();\n });\n\n this._cancelEditSubscription = this._componentRef.instance.cancelEdit\n .pipe(take(1))\n .subscribe(() => {\n this.cancelChanges();\n });\n }\n }\n\n /**\n * Closes the editor. This event is triggered by Handsontable.\n */\n close(): void {\n if (this.isOpened()) {\n this.resetEditorState();\n this._editorPlaceHolderRef.changeDetectorRef.detectChanges();\n this._editorPlaceHolderRef.instance.detachEditor();\n this._componentRef.instance.onClose();\n }\n }\n\n /**\n * Focuses the editor. This event is triggered by Handsontable.\n */\n focus(): void {\n this._componentRef.instance.onFocus();\n }\n\n /**\n * Gets the value from the editor.\n * @returns The value from the editor.\n */\n getValue(): any {\n return this._componentRef.instance?.getValue();\n }\n\n /**\n * Opens the editor. This event is triggered by Handsontable.\n * When opening, we set the shortcut context to 'editor'.\n * This allows the built-in keyboard shortcuts to operate within the editor.\n * @param event The event that triggered the opening of the editor.\n * @remarks When entering edit mode using double-click, keyboard shortcuts do not work.\n */\n open(event?: Event): void {\n this.hot.getShortcutManager().setActiveContextName('editor');\n this.applyPropsToEditor();\n this._componentRef.instance.onOpen(event);\n }\n\n /**\n * Sets the value for the custom editor.\n * @param newValue The value to set.\n */\n setValue(newValue?: any): void {\n this._componentRef.instance?.setValue(newValue);\n this._componentRef.changeDetectorRef.detectChanges();\n }\n\n /**\n * Applies properties to the custom editor and editor placeholder.\n */\n private applyPropsToEditor(): void {\n const rect = this.getEditedCellRect();\n\n if (!this.isInFullEditMode()) {\n this._componentRef.instance.setValue(null);\n }\n\n this._componentRef.setInput('originalValue', this.originalValue);\n this._componentRef.setInput('row', this.row);\n this._componentRef.setInput('column', this.col);\n this._componentRef.setInput('prop', this.prop);\n this._componentRef.setInput('cellProperties', this.cellProperties);\n\n this._editorPlaceHolderRef.setInput('top', rect.top);\n this._editorPlaceHolderRef.setInput('left', rect.start);\n this._editorPlaceHolderRef.setInput('height', rect.height);\n this._editorPlaceHolderRef.setInput('width', rect.width);\n this._editorPlaceHolderRef.setInput('isVisible', true);\n this._editorPlaceHolderRef.setInput('componentRef', this._componentRef);\n this._editorPlaceHolderRef.changeDetectorRef.detectChanges();\n }\n\n /**\n * Creates the editor placeholder and append it to hot rootElement.\n * @param injector The environment injector.\n */\n private createEditorPlaceholder(injector: EnvironmentInjector): void {\n this._editorPlaceHolderRef = createComponent(\n CustomEditorPlaceholderComponent,\n {\n environmentInjector: injector as EnvironmentInjector,\n }\n );\n\n this.hot.rootElement.appendChild(\n this._editorPlaceHolderRef.location.nativeElement\n );\n }\n\n /**\n * Handles the after column resize event.\n * Helps adjust the editor size to the column size and update its position.\n */\n private onAfterColumnResize(): void {\n if (this.isOpened()) {\n this.applyPropsToEditor();\n }\n }\n\n /**\n * Handles the after row resize event.\n * Helps adjust the editor size to the column size and update its position.\n */\n private onAfterRowResize(): void {\n if (this.isOpened()) {\n this.applyPropsToEditor();\n }\n }\n\n /**\n * Handles the after destroy event.\n */\n private onAfterDestroy(): void {\n this._editorPlaceHolderRef?.destroy();\n }\n\n /**\n * Resets the editor placeholder state.\n * We need to reset the editor placeholder state because we use it\n * to store multiple references to the custom editor.\n */\n private resetEditorState(): void {\n this._editorPlaceHolderRef.setInput('top', undefined);\n this._editorPlaceHolderRef.setInput('left', undefined);\n this._editorPlaceHolderRef.setInput('height', undefined);\n this._editorPlaceHolderRef.setInput('width', undefined);\n this._editorPlaceHolderRef.setInput('isVisible', false);\n this._editorPlaceHolderRef.setInput('componentRef', undefined);\n }\n}\n","import Handsontable from 'handsontable/base';\nimport {Component, Input} from '@angular/core';\n\n/**\n * Abstract base component for creating custom cell renderer components for Handsontable.\n *\n * This class provides a common interface and properties required by any custom cell renderer.\n *\n * @template TValue - The type of the component renderer.\n * @template TProps - The type of additional renderer properties.\n */\n@Component({\n selector: 'hot-cell-renderer',\n template: `<!-- This is an abstract component. Extend this component and provide your own template. -->`\n})\nexport abstract class HotCellRendererComponent<TValue extends string | number | boolean = string, TProps extends {} = any> {\n static readonly RENDERER_MARKER = Symbol('HotCellRendererComponent');\n\n @Input() value: TValue = '' as TValue;\n\n @Input() instance: Handsontable;\n @Input() td: HTMLTableCellElement;\n @Input() row: number;\n @Input() col: number;\n @Input() prop: string;\n\n /**\n * The cell properties provided by Handsontable, extended with optional renderer-specific properties.\n */\n @Input() cellProperties: Handsontable.CellProperties & { rendererProps?: TProps };\n\n /**\n * Retrieves the renderer-specific properties from the cell properties.\n *\n * @returns The additional properties for the renderer.\n */\n public getProps(): TProps {\n return this.cellProperties?.rendererProps ?? ({} as TProps);\n }\n}\n","import {\n ApplicationRef, ComponentRef, createComponent,\n EmbeddedViewRef, EnvironmentInjector, Injectable,\n TemplateRef, Type\n} from '@angular/core';\nimport {BaseRenderer, baseRenderer} from 'handsontable/renderers';\nimport Handsontable from 'handsontable';\nimport {HotCellRendererComponent} from './hot-cell-renderer.component';\n\ntype BaseRendererParameters = Parameters<BaseRenderer>;\n\nexport const INVALID_RENDERER_WARNING =\n 'The provided renderer component was not recognized as a valid custom renderer. ' +\n 'It must either extend HotCellRendererComponent or be a valid TemplateRef. ' +\n 'Please ensure that your custom renderer is implemented correctly and imported from the proper source.';\n\n/**\n * An object representing the parameters passed to a Handsontable renderer.\n */\ninterface BaseRendererParametersObject {\n instance: Handsontable.Core;\n td: HTMLTableCellElement;\n row: number;\n col: number;\n prop: string | number;\n value: any;\n cellProperties: Handsontable.CellProperties;\n}\n\n/**\n * Type guard that checks if the given object is a TemplateRef.\n *\n * @param obj - The object to check.\n * @returns True if the object is a TemplateRef; otherwise, false.\n */\nexport function isTemplateRef<T>(obj: any): obj is TemplateRef<T> {\n return obj && typeof obj.createEmbeddedView === 'function';\n}\n\n/**\n * Type guard to check if an object is an instance of HotCellRendererComponent.\n *\n * @param obj - The object to check.\n * @returns True if the object is a HotCellRendererComponent, false otherwise.\n */\nexport function isHotCellRendererComponent(obj: any): obj is Type<HotCellRendererComponent> {\n return obj?.RENDERER_MARKER === HotCellRendererComponent.RENDERER_MARKER;\n}\n\n/**\n * Service for dynamically creating Angular components or templates as custom renderers for Handsontable.\n *\n * This service allows you to create a renderer function that wraps a given Angular component or TemplateRef\n * so that it can be used as a Handsontable renderer.\n *\n * @example\n * const customRenderer = dynamicComponentService.createRendererFromComponent(MyRendererComponent, { someProp: value });\n * // Use customRenderer in your Handsontable configuration\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class DynamicComponentService {\n constructor(\n private appRef: ApplicationRef,\n private environmentInjector: EnvironmentInjector\n ) {}\n\n /**\n * Creates a custom renderer function for Handsontable from an Angular component or TemplateRef.\n * The generated renderer function will be used by Handsontable to render cell content.\n *\n * @param component - The Angular component type or TemplateRef to use as renderer.\n * @param componentProps - An object containing additional properties to use by the renderer.\n * @param register - If true, registers the renderer with Handsontable using the component's name.\n * @returns A renderer function that can be used in Handsontable's configuration.\n */\n createRendererFromComponent(\n component: Type<HotCellRendererComponent> | TemplateRef<any>,\n componentProps: Record<string, any> = {},\n register: boolean = false\n ) {\n return (\n instance: Handsontable.Core,\n td: HTMLTableCellElement,\n row: number,\n col: number,\n prop: string | number,\n value: any,\n cellProperties: Handsontable.CellProperties\n ) => {\n const properties: BaseRendererParametersObject = {\n value, instance, td, row, col, prop, cellProperties\n };\n\n if (componentProps) {\n Object.assign(cellProperties, {rendererProps: componentProps});\n }\n\n const rendererParameters: BaseRendererParameters = [\n instance, td, row, col, prop, value, cellProperties\n ];\n\n baseRenderer.apply(this, rendererParameters);\n\n td.innerHTML = '';\n\n if (isTemplateRef(component)) {\n this.attachTemplateToElement(component, td, properties);\n } else if (isHotCellRendererComponent(component)){\n const componentRef = this.createComponent(component, properties);\n this.attachComponentToElement(componentRef, td);\n } else {\n console.warn(INVALID_RENDERER_WARNING)\n }\n\n if (register && isHotCellRendererComponent(component)) {\n Handsontable.renderers.registerRenderer(\n component.constructor.name,\n component as any as BaseRenderer\n );\n }\n\n return td;\n };\n }\n\n /**\n * Attaches an embedded view created from a TemplateRef to a given DOM element.\n *\n * @param template - The TemplateRef to create an embedded view from.\n * @param tdEl - The target DOM element (a table cell) to which the view will be appended.\n * @param properties - Context object providing properties to be used within the template.\n */\n private attachTemplateToElement(\n template: TemplateRef<any>,\n tdEl: HTMLTableCellElement,\n properties: BaseRendererParametersObject\n ) {\n const embeddedView: EmbeddedViewRef<any> = template.createEmbeddedView({\n $implicit: properties.value,\n ...properties,\n });\n embeddedView.detectChanges();\n\n embeddedView.rootNodes.forEach((node) => {\n tdEl.appendChild(node);\n });\n }\n\n /**\n * Dynamically creates an Angular component of the given type.\n *\n * @param component - The Angular component type to be created.\n * @param rendererParameters - An object containing input properties to assign to the component instance.\n * @returns The ComponentRef of the dynamically created component.\n */\n private createComponent<T extends HotCellRendererComponent>(\n component: Type<T>,\n rendererParameters: BaseRendererParametersObject\n ): ComponentRef<T> {\n const componentRef = createComponent(component, {\n environmentInjector: this.environmentInjector\n });\n\n Object.keys(rendererParameters).forEach(key => {\n if (rendererParameters.hasOwnProperty(key)) {\n componentRef.setInput(key, rendererParameters[key])\n } else {\n console.warn(`Input property \"${key}\" does not exist on component instance: ${component?.name}.`);\n }\n })\n componentRef.changeDetectorRef.detectChanges();\n\n this.appRef.attachView(componentRef.hostView);\n\n return componentRef;\n }\n\n /**\n * Attaches a dynamically created component's view to a specified DOM container element.\n *\n * @param componentRef - The reference to the dynamically created component.\n * @param container - The target DOM element to which the component's root node will be appended.\n */\n private attachComponentToElement<T>(\n componentRef: ComponentRef<T>,\n container: HTMLElement\n ): void {\n const domElem = (componentRef.hostView as EmbeddedViewRef<T>)\n .rootNodes[0] as HTMLElement;\n container.appendChild(domElem);\n }\n\n /**\n * Destroys a dynamically created component and detaches its view from the Angular application.\n *\n * @param componentRef - The reference to the component to be destroyed.\n */\n destroyComponent<T>(componentRef: ComponentRef<T>): void {\n this.appRef.detachView(componentRef.hostView);\n componentRef.destroy();\n }\n}\n","import {createComponent, EnvironmentInjector, Injectable, NgZone, TemplateRef, Type} from '@angular/core';\nimport { DynamicComponentService } from '../renderer/hot-dynamic-renderer-component.service';\nimport { BaseEditorAdapter } from '../editor/base-editor-adapter';\nimport { GridSettings, GridSettingsInternal } from '../models/grid-settings';\nimport { CustomValidatorFn, ColumnSettings } from '../models/column-settings';\nimport { HotCellRendererComponent } from '../renderer/hot-cell-renderer.component';\nimport { HotCellEditorComponent } from '../editor/hot-cell-editor.component';\nimport Handsontable from 'handsontable/base';\n\nconst AVAILABLE_OPTIONS: string[] = Object.keys(Handsontable.DefaultSettings);\nconst AVAILABLE_HOOKS: string[] = Handsontable.hooks.getRegistered();\n\n/**\n * Service to resolve and apply custom settings for Handsontable settings object.\n */\n@Injectable()\nexport class HotSettingsResolver {\n constructor(private dynamicComponentService: DynamicComponentService, private readonly environmentInjector: EnvironmentInjector) {}\n\n /**\n * Applies custom settings to the provided GridSettings.\n * @param settings The original grid settings.\n * @param ngZone The NgZone instance to run hooks inside the zone context.\n * @returns The merged grid settings with custom settings applied.\n */\n applyCustomSettings(settings: GridSettings, ngZone: NgZone): GridSettingsInternal {\n const mergedSettings: GridSettings = settings;\n\n this.updateColumnRendererForGivenCustomRenderer(mergedSettings);\n this.updateColumnEditorForGivenCustomEditor(mergedSettings);\n this.updateColumnValidatorForGivenCustomValidator(mergedSettings);\n\n this.wrapHooksInNgZone(mergedSettings, ngZone);\n\n return (mergedSettings as GridSettingsInternal) ?? {};\n }\n\n /**\n * Ensures that hook callbacks in the provided grid settings run inside Angular's zone.\n *\n * @param settings The original grid settings.\n * @param ngZone The NgZone instance to run hooks inside the zone context.\n */\n private wrapHooksInNgZone(settings: GridSettings, ngZone: NgZone) {\n const options = AVAILABLE_HOOKS.concat(AVAILABLE_OPTIONS);\n\n options.forEach(key => {\n const isHook = AVAILABLE_HOOKS.indexOf(key) > -1;\n let option;\n\n if (isHook) {\n option = settings[key];\n }\n\n if (option === void 0) {\n return;\n\n } else if (!!ngZone && (typeof option === 'function' && isHook)) {\n settings[key] = function(...args: any) {\n return ngZone.run(() => option.apply(this, args));\n };\n\n } else {\n settings[key] = option;\n }\n });\n }\n\n /**\n * Updates the column renderer for columns with a custom renderer.\n * @param mergedSettings The merged grid settings.\n */\n private updateColumnRendererForGivenCustomRenderer(mergedSettings: GridSettings): void {\n if (!Array.isArray(mergedSettings?.columns)) {\n return;\n }\n\n (mergedSettings?.columns as ColumnSettings[])\n ?.filter((settings) => this.isRendererComponentRefType(settings.renderer) || this.isTemplateRef(settings.renderer))\n ?.forEach((cellSettings) => {\n const renderer = this.isTemplateRef(cellSettings.renderer)\n ? (cellSettings.renderer as TemplateRef<any>)\n : (cellSettings.renderer as Type<HotCellRendererComponent<any, any>>);\n const props: any = cellSettings.rendererProps ?? {};\n cellSettings.renderer = this.dynamicComponentService.createRendererFromComponent(renderer, props);\n });\n }\n\n /**\n * Updates the column editor for columns with a custom editor.\n * @param mergedSettings The merged grid settings.\n */\n private updateColumnEditorForGivenCustomEditor(mergedSettings: GridSettings): void {\n if (!Array.isArray(mergedSettings?.columns)) {\n return;\n }\n\n (mergedSettings?.columns as ColumnSettings[])\n ?.filter((settings) => this.isEditorComponentRefType(settings.editor))\n ?.forEach((cellSettings) => {\n const customEditor = cellSettings.editor as Type<HotCellEditorComponent<any>>;\n cellSettings['_editorComponentReference'] = createComponent(customEditor, {\n environmentInjector: this.environmentInjector,\n });\n cellSettings['_environmentInjector'] = this.environmentInjector;\n cellSettings.editor = BaseEditorAdapter;\n });\n }\n\n /**\n * Updates the column validator for columns with a custom validator.\n * @param mergedSettings The merged grid settings.\n */\n private updateColumnValidatorForGivenCustomValidator(mergedSettings: GridSettings): void {\n if (!Array.isArray(mergedSettings?.columns)) {\n return;\n }\n\n (mergedSettings?.columns as ColumnSettings[])\n ?.filter((settings) => this.isCustomValidatorFn(settings.validator))\n ?.forEach((cellSettings) => {\n const customValidatorFn = cellSettings.validator as CustomValidatorFn<any>;\n\n cellSettings.validator = (value: any, callback: (result: boolean) => void) => {\n callback(customValidatorFn(value));\n };\n });\n }\n\n private isCustomValidatorFn(validator: unknown): validator is CustomValidatorFn<any> {\n return typeof validator === 'function' && validator.length === 1;\n }\n\n private isEditorComponentRefType(editor: any): editor is Type<HotCellEditorComponent<any>> {\n // ecmp - we need it to check if the editor is a component\n return typeof editor === 'function' && !!(editor as any)?.ɵcmp;\n }\n\n private isRendererComponentRefType(renderer: any): renderer is Type<HotCellRendererComponent<any, any>> {\n // ecmp - we need it to check if the renderer is a component\n return typeof renderer === 'function' && !!(renderer as any)?.ɵcmp;\n }\n\n private isTemplateRef(renderer: any): renderer is TemplateRef<any> {\n return renderer instanceof TemplateRef;\n }\n}\n","import {Injectable, InjectionToken, Inject} from '@angular/core';\nimport {BehaviorSubject, Observable} from 'rxjs';\n\n/**\n * A constant representing the non-commercial and evaluation license.\n * */\nexport const NON_COMMERCIAL_LICENSE = 'non-commercial-and-evaluation';\n\n/**\n * Type representing a theme name.\n * Possible values include predefined themes and any custom string.\n */\nexport enum PredefinedTheme {\n Main = 'ht-theme-main',\n MainDark = 'ht-theme-main-dark',\n MainDarkAuto = 'ht-theme-main-dark-auto',\n Horizon = 'ht-theme-horizon',\n HorizonDark = 'ht-theme-horizon-dark',\n HorizonDarkAuto = 'ht-theme-horizon-dark-auto'\n}\n\nexport type ThemeName = PredefinedTheme | string;\n\n/**\n * Interface for the Handsontable global configuration.\n */\nexport interface HotConfig {\n /**\n * The license key for Handsontable.\n */\n license?: string;\n\n /**\n * The name of the theme to be used.\n */\n themeName?: ThemeName;\n\n /**\n * The language code to be used for localization.\n * For example, 'en-US', 'pl-PL', etc.\n * **Note:** The language must be chosen from the languages supported by Handsontable and registered in the application.\n */\n language?: string;\n\n /**\n * The layout direction for the Handsontable instance.\n * This property defines whether the layout should be left-to-right ('ltr'), right-to-left ('rtl'),\n * or inherit the direction from the parent element ('inherit').\n */\n layoutDirection?: 'ltr' | 'rtl' | 'inherit';\n}\n\n/**\n * Injection token for providing a global default configuration.\n */\nexport const HOT_GLOBAL_CONFIG = new InjectionToken<HotConfig>('HOT_GLOBAL_CONFIG', {\n providedIn: 'root',\n factory: () => ({})\n});\n\n/**\n * Service for configuring Handsontable settings.\n * This service allows setting and retrieving global configuration.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class HotConfigService {\n\n /**\n * The default configuration object for Handsontable.\n *\n * This object is used as the initial value for the configuration BehaviorSubject.\n * It can be overridden by a global configuration provided through the\n * {@link HOT_GLOBAL_CONFIG} injection token.\n *\n * @private\n * @type {HotConfig}\n */\n private defaultConfig: HotConfig = {\n license: undefined,\n themeName: ''\n };\n\n /**\n * A BehaviorSubject that holds the current Handsontable configuration.\n *\n * New configuration values can be emitted by calling next() on this subject.\n * This allows subscribers to react to configuration changes dynamically.\n *\n * @private\n * @type {BehaviorSubject<HotConfig>}\n */\n private configSubject = new BehaviorSubject<HotConfig>(this.defaultConfig);\n\n /**\n * An Observable stream of the current Handsontable configuration.\n *\n * Components can subscribe to this observable to receive updates whenever the configuration changes.\n *\n * @returns The configuration as an observable stream.\n */\n get config$(): Observable<HotConfig> {\n return this.configSubject.asObservable();\n }\n\n constructor(\n @Inject(HOT_GLOBAL_CONFIG) globalConfig: HotConfig\n ) {\n // Merge global configuration (if provided) into defaultConfig immutably.\n this.defaultConfig = { ...this.defaultConfig, ...globalConfig };\n this.configSubject.next(this.defaultConfig);\n }\n\n /**\n * Sets the configuration for Handsontable.\n *\n * @param config - An object containing configuration options.\n * If a some parameter is provided, it will override the current settings.\n */\n setConfig(config: HotConfig) {\n const currentConfig = this.configSubject.value;\n const newConfig = { ...currentConfig, ...config };\n\n this.configSubject.next(newConfig);\n }\n\n /**\n * Retrieves the current Handsontable configuration.\n *\n * @returns An object with the current settings.\n */\n getConfig(): HotConfig {\n return this.configSubject.value;\n }\n\n /**\n * Resets the configuration to the default settings.\n * This method updates the configuration BehaviorSubject with the default configuration.\n */\n resetConfig(): void {\n this.configSubject.next({ ...this.defaultConfig });\n }\n}\n","import { AfterViewInit, Component, ElementRef, Input, NgZone, OnChanges, OnDestroy, SimpleChanges, ViewChild, ViewEncapsulation } from '@angular/core';\nimport Handsontable from 'handsontable/base';\nimport { HotSettingsResolver } from './services/hot-settings-resolver.service';\nimport { HotConfigService } from './services/hot-config.service';\nimport { GridSettings } from './models/grid-settings';\nimport { ColumnSettingsInternal } from './models/column-settings';\nimport { Subscription } from 'rxjs';\n\nexport const HOT_DESTROYED_WARNING = 'The Handsontable instance bound to this component was destroyed and cannot be' + ' used properly.';\n\n@Component({\n selector: 'hot-table',\n template: '<div #container></div>',\n encapsulation: ViewEncapsulation.None,\n providers: [HotSettingsResolver],\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class HotTableComponent implements AfterViewInit, OnChanges, OnDestroy {\n // component inputs\n /** The data for the Handsontable instance. */\n @Input() data: Handsontable.GridSettings['data'] | null = [];\n /** The settings for the Handsontable instance. */\n @Input() settings: GridSettings;\n\n /** The container element for the Handsontable instance. */\n @ViewChild('container', { static: false })\n public container: ElementRef<HTMLDivElement>;\n\n /** The Handsontable instance. */\n private __hotInstance: Handsontable | null = null;\n private configSubscription: Subscription;\n\n constructor(private _hotSettingsResolver: HotSettingsResolver, private _hotConfig: HotConfigService, public ngZone: NgZone) {}\n\n /**\n * Gets the Handsontable instance.\n * @returns The Handsontable instance or `null` if it's not yet been created or has been destroyed.\n */\n public get hotInstance(): Handsontable | null {\n if (!this.__hotInstance || (this.__hotInstance && !this.__hotInstance.isDestroyed)) {\n // Will return the Handsontable instance or `null` if it's not yet been created.\n return this.__hotInstance;\n } else {\n console.warn(HOT_DESTROYED_WARNING);\n return null;\n }\n }\n\n /**\n * Sets the Handsontable instance.\n * @param hotInstance The Handsontable instance to set.\n */\n private set hotInstance(hotInstance) {\n this.__hotInstance = hotInstance;\n }\n\n /**\n * Initializes the Handsontable instance after the view has been initialized.\n * The initial settings of the table are also prepared here\n */\n ngAfterViewInit(): void {\n let options: Handsontable.GridSettings = this._hotSettingsResolver.applyCustomSettings(this.settings, this.ngZone);\n\n const negotiatedSettings = this.getNegotiatedSettings(options);\n options = { ...options, ...negotiatedSettings, data: this.data };\n\n this.ngZone.runOutsideAngular(() => {\n this.hotInstance = new Handsontable.Core(this.container.nativeElement, options);\n\n // @ts-ignore\n this.hotInstance.init();\n });\n\n this.configSubscription = this._hotConfig.config$.subscribe((config) => {\n if (this.hotInstance) {\n const negotiatedSettings = this.getNegotiatedSettings(this.settings);\n this.updateHotTable(negotiatedSettings);\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this.hotInstance === null) {\n return;\n }\n\n if (changes.settings && !changes.settings.firstChange) {\n const newOptions: Handsontable.GridSettings = this._hotSettingsResolver.applyCustomSettings(changes.settings.currentValue, this.ngZone);\n\n this.updateHotTable(newOptions);\n }\n\n if (changes.data && !changes.data.firstChange) {\n this.hotInstance?.updateData(changes.data.currentValue);\n }\n }\n\n /**\n * Destroys the Handsontable instance and clears the columns from custom editors.\n */\n ngOnDestroy(): void {\n this.ngZone.runOutsideAngular(() => {\n if (this.hotInstance) {\n (this.hotInstance.getSettings().columns as ColumnSettingsInternal[])\n ?.filter((column) => column._editorComponentReference)\n .forEach((column) => {\n column._editorComponentReference?.destroy();\n });\n this.hotInstance.destroy();\n }\n });\n\n this.configSubscription.unsubscribe();\n }\n\n /**\n * Updates the Handsontable instance with new settings.\n * @param newSettings The new settings to apply to the Handsontable instance.\n */\n private updateHotTable(newSettings: Handsontable.GridSettings): void {\n if (!this.hotInstance) {\n return;\n }\n\n this.ngZone.runOutsideAngular(() => {\n this.hotInstance?.updateSettings(newSettings, false);\n });\n }\n\n /**\n * Merges the provided Handsontable grid settings with the global configuration.\n *\n * This method retrieves the global configuration from the HotConfigService and negotiates the final\n * Handsontable settings by giving precedence to the provided settings.\n * Additionally, the `layoutDirection` is only merged if the Handsontable instance has not yet been initialized.\n *\n * @param settings - The grid settings provided by the user or component.\n * @returns The final negotiated grid settings after merging with global defaults.\n */\n private getNegotiatedSettings(settings: GridSettings): Handsontable.GridSettings {\n const hotConfig = this._hotConfig.getConfig();\n const negotiatedSettings: Handsontable.GridSettings = {};\n\n negotiatedSettings.licenseKey = settings.licenseKey ?? hotConfig.license;\n negotiatedSettings.themeName = settings.themeName ?? hotConfig.themeName;\n negotiatedSettings.language = settings.language ?? hotConfig.language;\n\n // settings that can be set only before the Handsontable instance is initialized\n if (!this.__hotInstance) {\n negotiatedSettings.layoutDirection = settings.layoutDirection ?? hotConfig.layoutDirection;\n }\n\n return negotiatedSettings;\n }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { HotTableComponent } from './hot-table.component';\nimport { CustomEditorPlaceholderComponent } from './editor/custom-editor-placeholder.component';\n\n@NgModule({\n declarations: [HotTableComponent, CustomEditorPlaceholderComponent],\n imports: [],\n exports: [HotTableComponent],\n})\nexport class HotTableModule {\n static version = '0.0.0-next-d9b3885-20250415';\n\n constructor() {}\n\n public static forRoot(): ModuleWithProviders<HotTableModule> {\n return {\n ngModule: HotTableModule,\n };\n }\n}\n","import { Directive, EventEmitter, HostBinding, Input, Output } from '@angular/core';\nimport { CellProperties } from 'handsontable/settings';\n\n/**\n * Abstract class representing a Handsontable editor in angular.\n */\n@Directive()\nexport abstract class HotCellEditorComponent<T extends string | number | boolean> {\n /** The tabindex attribute for the editor. */\n @HostBinding('attr.tabindex') protected tabindex = -1;\n\n /** The data-hot-input attribute for the editor. */\n @HostBinding('attr.data-hot-input') protected dataHotInput = '';\n\n /** The handsontableInput class for the editor. */\n @HostBinding('class.handsontableInput') protected handsontableInputClass = true;\n\n /** The height of the editor as a percentage of the parent container. */\n @HostBinding('style.height.%') protected heightFitParentContainer = 100;\n\n /** The width of the editor as a percentage of the parent container. */\n @HostBinding('style.width.%') protected widthFitParentContainer = 100;\n\n /** The row index of the cell being edited. */\n @Input() row: number;\n\n /** The column index of the cell being edited. */\n @Input() column: number;\n\n /** The property name of the cell being edited. */\n @Input() prop: string | number;\n\n /** The original value of the cell being edited. */\n @Input() originalValue: T;\n\n /** The cell properties of the cell being edited. */\n @Input() cellProperties: CellProperties;\n\n /** Event emitted when the edit is finished.\n * The data will be saved to the model.\n */\n @Output() finishEdit = new EventEmitter<void>();\n\n /** Event emitted when the edit is canceled.\n * The entered data will be reverted to the original value.\n */\n @Output() cancelEdit = new EventEmitter<void>();\n\n /** The current value of the editor. */\n private _value: T;\n\n /** Event triggered by Handsontable on closing the editor.\n * The user can define their own actions for\n * the custom editor to be called after the base logic. */\n onClose(): void {}\n\n /** Event triggered by Handsontable on open the editor.\n * The user can define their own actions for\n * the custom editor to be called after the base logic. */\n onOpen(event?: Event): void {}\n\n /** Event triggered by Handsontable on focus the editor.\n * The user have to define focus logic.\n * @example\n * ```typescript\n * component({\n * template: `<input #inputElement>`\n * })\n * class CustomEditor extends HotEditor<string> {\n * @ViewChild('inputElement') inputElement!: ElementRef;\n *\n * onFocus(): void {\n * this.inputElement.nativeElement.focus();\n * }\n * }\n * ```\n */\n abstract onFocus(): void;\n\n /**\n * Gets the current value of the editor.\n * @returns The current value of the editor.\n */\n getValue(): T {\n return this._value;\n }\n\n /**\n * Sets the current value of the editor.\n * @param value The value to set.\n */\n setValue(value: T): void {\n this._value = value;\n }\n}\n","/*\n * Public API Surface of hot-table\n */\n\nexport * from './lib/hot-table.component';\nexport * from './lib/services/hot-settings-resolver.service';\nexport * from './lib/hot-table.module';\nexport * from './lib/services/hot-config.service';\nexport * from './lib/renderer/hot-dynamic-renderer-component.service';\nexport * from './lib/renderer/hot-cell-renderer.component';\nexport * from './lib/editor/hot-cell-editor.component';\nexport { GridSettings } from './lib/models/grid-settings';\nexport { ColumnSettings, CustomValidatorFn } from './lib/models/column-settings';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["Handsontable","i1.DynamicComponentService","i1.HotSettingsResolver","i2.HotConfigService"],"mappings":"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"}
|
|
@@ -9,6 +9,8 @@ export declare class HotTableComponent implements AfterViewInit, OnChanges, OnDe
|
|
|
9
9
|
private _hotSettingsResolver;
|
|
10
10
|
private _hotConfig;
|
|
11
11
|
ngZone: NgZone;
|
|
12
|
+
/** The data for the Handsontable instance. */
|
|
13
|
+
data: Handsontable.GridSettings['data'] | null;
|
|
12
14
|
/** The settings for the Handsontable instance. */
|
|
13
15
|
settings: GridSettings;
|
|
14
16
|
/** The container element for the Handsontable instance. */
|
|
@@ -54,5 +56,5 @@ export declare class HotTableComponent implements AfterViewInit, OnChanges, OnDe
|
|
|
54
56
|
*/
|
|
55
57
|
private getNegotiatedSettings;
|
|
56
58
|
static ɵfac: i0.ɵɵFactoryDeclaration<HotTableComponent, never>;
|
|
57
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<HotTableComponent, "hot-table", never, { "settings": { "alias": "settings"; "required": false; }; }, {}, never, never, false, never>;
|
|
59
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<HotTableComponent, "hot-table", never, { "data": { "alias": "data"; "required": false; }; "settings": { "alias": "settings"; "required": false; }; }, {}, never, never, false, never>;
|
|
58
60
|
}
|
|
@@ -1,19 +1,17 @@
|
|
|
1
|
-
import { ComponentRef, EnvironmentInjector, Type } from '@angular/core';
|
|
1
|
+
import { ComponentRef, EnvironmentInjector, Type, TemplateRef } from '@angular/core';
|
|
2
2
|
import Handsontable from 'handsontable';
|
|
3
3
|
import { HotCellRendererComponent } from '../renderer/hot-cell-renderer.component';
|
|
4
4
|
import { HotCellEditorComponent } from '../editor/hot-cell-editor.component';
|
|
5
5
|
export type CustomValidatorFn<T> = (value: T) => boolean;
|
|
6
|
-
export
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
customValidator?: CustomValidatorFn<any>;
|
|
13
|
-
}
|
|
6
|
+
export type ColumnSettings = Handsontable.ColumnSettings | {
|
|
7
|
+
editor?: Type<HotCellEditorComponent<any>> | Handsontable.ColumnSettings['editor'];
|
|
8
|
+
renderer?: Type<HotCellRendererComponent<any, any>> | TemplateRef<any> | Handsontable.ColumnSettings['renderer'];
|
|
9
|
+
validator?: CustomValidatorFn<any> | Handsontable.ColumnSettings['validator'];
|
|
10
|
+
rendererProps?: any;
|
|
11
|
+
};
|
|
14
12
|
export interface EditorReferenceInternal {
|
|
15
13
|
_editorComponentReference?: ComponentRef<HotCellEditorComponent<any>>;
|
|
16
14
|
_environmentInjector?: EnvironmentInjector;
|
|
17
15
|
}
|
|
18
|
-
export interface ColumnSettingsInternal extends
|
|
16
|
+
export interface ColumnSettingsInternal extends Handsontable.ColumnSettings, EditorReferenceInternal {
|
|
19
17
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import Handsontable from 'handsontable';
|
|
2
2
|
import { ColumnSettings, ColumnSettingsInternal } from './column-settings';
|
|
3
|
-
export interface GridSettings extends Handsontable.GridSettings {
|
|
3
|
+
export interface GridSettings extends Omit<Handsontable.GridSettings, 'columns' | 'data'> {
|
|
4
4
|
columns?: ColumnSettings[] | ((index: number) => ColumnSettings);
|
|
5
5
|
}
|
|
6
6
|
export interface GridSettingsInternal extends Omit<GridSettings, 'columns'> {
|
|
@@ -9,7 +9,15 @@ export declare const NON_COMMERCIAL_LICENSE = "non-commercial-and-evaluation";
|
|
|
9
9
|
* Type representing a theme name.
|
|
10
10
|
* Possible values include predefined themes and any custom string.
|
|
11
11
|
*/
|
|
12
|
-
export
|
|
12
|
+
export declare enum PredefinedTheme {
|
|
13
|
+
Main = "ht-theme-main",
|
|
14
|
+
MainDark = "ht-theme-main-dark",
|
|
15
|
+
MainDarkAuto = "ht-theme-main-dark-auto",
|
|
16
|
+
Horizon = "ht-theme-horizon",
|
|
17
|
+
HorizonDark = "ht-theme-horizon-dark",
|
|
18
|
+
HorizonDarkAuto = "ht-theme-horizon-dark-auto"
|
|
19
|
+
}
|
|
20
|
+
export type ThemeName = PredefinedTheme | string;
|
|
13
21
|
/**
|
|
14
22
|
* Interface for the Handsontable global configuration.
|
|
15
23
|
*/
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EnvironmentInjector } from '@angular/core';
|
|
1
|
+
import { EnvironmentInjector, NgZone } from '@angular/core';
|
|
2
2
|
import { DynamicComponentService } from '../renderer/hot-dynamic-renderer-component.service';
|
|
3
3
|
import { GridSettings, GridSettingsInternal } from '../models/grid-settings';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
@@ -12,9 +12,17 @@ export declare class HotSettingsResolver {
|
|
|
12
12
|
/**
|
|
13
13
|
* Applies custom settings to the provided GridSettings.
|
|
14
14
|
* @param settings The original grid settings.
|
|
15
|
+
* @param ngZone The NgZone instance to run hooks inside the zone context.
|
|
15
16
|
* @returns The merged grid settings with custom settings applied.
|
|
16
17
|
*/
|
|
17
|
-
applyCustomSettings(settings: GridSettings): GridSettingsInternal;
|
|
18
|
+
applyCustomSettings(settings: GridSettings, ngZone: NgZone): GridSettingsInternal;
|
|
19
|
+
/**
|
|
20
|
+
* Ensures that hook callbacks in the provided grid settings run inside Angular's zone.
|
|
21
|
+
*
|
|
22
|
+
* @param settings The original grid settings.
|
|
23
|
+
* @param ngZone The NgZone instance to run hooks inside the zone context.
|
|
24
|
+
*/
|
|
25
|
+
private wrapHooksInNgZone;
|
|
18
26
|
/**
|
|
19
27
|
* Updates the column renderer for columns with a custom renderer.
|
|
20
28
|
* @param mergedSettings The merged grid settings.
|
|
@@ -30,6 +38,10 @@ export declare class HotSettingsResolver {
|
|
|
30
38
|
* @param mergedSettings The merged grid settings.
|
|
31
39
|
*/
|
|
32
40
|
private updateColumnValidatorForGivenCustomValidator;
|
|
41
|
+
private isCustomValidatorFn;
|
|
42
|
+
private isEditorComponentRefType;
|
|
43
|
+
private isRendererComponentRefType;
|
|
44
|
+
private isTemplateRef;
|
|
33
45
|
static ɵfac: i0.ɵɵFactoryDeclaration<HotSettingsResolver, never>;
|
|
34
46
|
static ɵprov: i0.ɵɵInjectableDeclaration<HotSettingsResolver>;
|
|
35
47
|
}
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@handsontable/angular-wrapper","version":"0.0.0-next-
|
|
1
|
+
{"name":"@handsontable/angular-wrapper","version":"0.0.0-next-d9b3885-20250415","description":"Best Data Grid for Angular with Spreadsheet Look and Feel.","author":"Handsoncode <hello@handsoncode.net> (https://handsoncode.net)","license":"SEE LICENSE IN LICENSE.txt","homepage":"https://handsontable.com","keywords":["handsontable","component","data","table","grid","data table","data grid","spreadsheet","sheet","excel","angular","angular component","angular grid","wrapper","pro","enterprise","sort","formulas","filter","search","conditional formatting","csv"],"repository":{"type":"git","url":"https://github.com/handsontable/handsontable.git"},"bugs":{"url":"https://github.com/handsontable/handsontable/issues"},"peerDependencies":{"@angular/animations":">=16.0.0","@angular/common":">=16.0.0","@angular/compiler":">=16.0.0","@angular/core":">=16.0.0","@angular/forms":">=16.0.0","@angular/platform-browser":">=16.0.0","@angular/platform-browser-dynamic":">=16.0.0","@angular/router":">=16.0.0","handsontable":"0.0.0-next-d9b3885-20250415"},"module":"fesm2022/handsontable-angular-wrapper.mjs","typings":"index.d.ts","exports":{"./package.json":{"default":"./package.json"},".":{"types":"./index.d.ts","esm2022":"./esm2022/handsontable-angular-wrapper.mjs","esm":"./esm2022/handsontable-angular-wrapper.mjs","default":"./fesm2022/handsontable-angular-wrapper.mjs"}},"sideEffects":false,"optionalDependencies":{"tslib":"^2.3.0"}}
|
package/public-api.d.ts
CHANGED
|
@@ -6,4 +6,4 @@ export * from './lib/renderer/hot-dynamic-renderer-component.service';
|
|
|
6
6
|
export * from './lib/renderer/hot-cell-renderer.component';
|
|
7
7
|
export * from './lib/editor/hot-cell-editor.component';
|
|
8
8
|
export { GridSettings } from './lib/models/grid-settings';
|
|
9
|
-
export { ColumnSettings, CustomValidatorFn
|
|
9
|
+
export { ColumnSettings, CustomValidatorFn } from './lib/models/column-settings';
|