@handsontable/angular-wrapper 17.1.0-rc3 → 17.1.0-rc5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +74 -0
- package/fesm2022/handsontable-angular-wrapper.mjs +66 -83
- package/fesm2022/handsontable-angular-wrapper.mjs.map +1 -1
- package/lib/editor/custom-editor-placeholder.component.d.ts +1 -1
- package/lib/hot-table.component.d.ts +10 -10
- package/lib/hot-table.module.d.ts +2 -6
- package/lib/renderer/hot-cell-renderer-advanced.component.d.ts +1 -1
- package/lib/renderer/hot-cell-renderer.component.d.ts +1 -1
- package/lib/services/hot-settings-resolver.service.d.ts +4 -5
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -55,6 +55,9 @@
|
|
|
55
55
|
✅ [Hiding columns](https://handsontable.com/docs/angular-data-grid/column-hiding/) <br>
|
|
56
56
|
✅ [Right-click context menu](https://handsontable.com/docs/angular-data-grid/context-menu/) <br>
|
|
57
57
|
✅ [Row pagination](https://handsontable.com/docs/angular-data-grid/rows-pagination/) <br>
|
|
58
|
+
✅ [Server-side data](https://handsontable.com/docs/angular-data-grid/server-side-data/) <br>
|
|
59
|
+
✅ [Notifications](https://handsontable.com/docs/angular-data-grid/notification/) <br>
|
|
60
|
+
✅ [Export to Excel](https://handsontable.com/docs/angular-data-grid/export-to-excel/) <br>
|
|
58
61
|
|
|
59
62
|
<div id="installation">
|
|
60
63
|
|
|
@@ -134,6 +137,77 @@ export class HotTableWrapperComponent {
|
|
|
134
137
|
|
|
135
138
|
<br>
|
|
136
139
|
|
|
140
|
+
## ⏳ Lazy loading with `@defer` (Angular 17+)
|
|
141
|
+
|
|
142
|
+
`HotTableComponent` is a standalone component and works with Angular's built-in
|
|
143
|
+
`@defer` block out of the box — no extra configuration required.
|
|
144
|
+
|
|
145
|
+
### Recommended pattern
|
|
146
|
+
|
|
147
|
+
```ts
|
|
148
|
+
import { Component, signal } from '@angular/core';
|
|
149
|
+
import { HotTableComponent } from '@handsontable/angular-wrapper';
|
|
150
|
+
|
|
151
|
+
@Component({
|
|
152
|
+
standalone: true,
|
|
153
|
+
imports: [HotTableComponent],
|
|
154
|
+
template: `
|
|
155
|
+
<button (click)="show.set(true)">Load grid</button>
|
|
156
|
+
|
|
157
|
+
@defer (when show()) {
|
|
158
|
+
<hot-table [data]="data" [settings]="settings"></hot-table>
|
|
159
|
+
} @placeholder {
|
|
160
|
+
<p>Click the button to load the grid.</p>
|
|
161
|
+
} @loading (minimum 300ms) {
|
|
162
|
+
<p>Loading…</p>
|
|
163
|
+
} @error {
|
|
164
|
+
<p>Failed to load the grid.</p>
|
|
165
|
+
}
|
|
166
|
+
`,
|
|
167
|
+
})
|
|
168
|
+
export class PageComponent {
|
|
169
|
+
show = signal(false);
|
|
170
|
+
data = [['Alice', 'has'], ['Bob', 'data']];
|
|
171
|
+
settings = { rowHeaders: true, colHeaders: ['Name', 'Note'] };
|
|
172
|
+
}
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### How it works
|
|
176
|
+
|
|
177
|
+
| Block | When shown |
|
|
178
|
+
|---|---|
|
|
179
|
+
| `@defer (when show())` | renders `<hot-table>` after the signal becomes `true` |
|
|
180
|
+
| `@placeholder` | shown immediately before the trigger fires |
|
|
181
|
+
| `@loading (minimum 300ms)` | shown while the JS chunk is being fetched |
|
|
182
|
+
| `@error` | shown if the dynamic import fails |
|
|
183
|
+
|
|
184
|
+
### Other trigger options
|
|
185
|
+
|
|
186
|
+
```html
|
|
187
|
+
<!-- on viewport — loads when the placeholder scrolls into view -->
|
|
188
|
+
@defer (on viewport) { <hot-table …> }
|
|
189
|
+
|
|
190
|
+
<!-- on interaction — loads on first click/focus inside the placeholder -->
|
|
191
|
+
@defer (on interaction) { <hot-table …> }
|
|
192
|
+
|
|
193
|
+
<!-- on idle — loads during browser idle time -->
|
|
194
|
+
@defer (on idle) { <hot-table …> }
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
### Important: `registerAllModules()`
|
|
198
|
+
|
|
199
|
+
Call `registerAllModules()` in `app.config.ts` **before** the deferred block
|
|
200
|
+
triggers — it is synchronous and must run before any Handsontable instance is
|
|
201
|
+
created. The recommended place is at module level, outside any component:
|
|
202
|
+
|
|
203
|
+
```ts
|
|
204
|
+
// app.config.ts
|
|
205
|
+
import { registerAllModules } from 'handsontable/registry';
|
|
206
|
+
registerAllModules(); // runs once at app startup, safe with @defer
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
<br>
|
|
210
|
+
|
|
137
211
|
## 🎨 Themes
|
|
138
212
|
|
|
139
213
|
Handsontable themes control how your data table looks: colors, spacing, typography, borders, and overall visual style.
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { ViewContainerRef, ViewChild, Input, ChangeDetectionStrategy, Component, createComponent, EventEmitter, Output, HostBinding, Directive, Injectable, InjectionToken, Inject, ViewEncapsulation, NgModule } from '@angular/core';
|
|
3
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
3
4
|
import Handsontable from 'handsontable/base';
|
|
4
|
-
import { take } from 'rxjs/operators';
|
|
5
|
+
import { take, skip } from 'rxjs/operators';
|
|
5
6
|
import { editorFactory } from 'handsontable/editors/factory';
|
|
6
7
|
import { baseRenderer, rendererFactory, registerRenderer } from 'handsontable/renderers';
|
|
7
8
|
import { BehaviorSubject } from 'rxjs';
|
|
@@ -43,7 +44,7 @@ class CustomEditorPlaceholderComponent {
|
|
|
43
44
|
this.container.detach();
|
|
44
45
|
}
|
|
45
46
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: CustomEditorPlaceholderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
46
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.21", type: CustomEditorPlaceholderComponent, isStandalone:
|
|
47
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.21", type: CustomEditorPlaceholderComponent, isStandalone: true, selector: "ng-component", inputs: { top: "top", left: "left", height: "height", width: "width", isVisible: "isVisible", placeholderCustomClass: "placeholderCustomClass", componentRef: "componentRef" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["inputPlaceholder"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: ` <div
|
|
47
48
|
[class]="placeholderCustomClass"
|
|
48
49
|
[style.display]="display"
|
|
49
50
|
[style.width.px]="width"
|
|
@@ -72,7 +73,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImpo
|
|
|
72
73
|
<ng-template #inputPlaceholder></ng-template>
|
|
73
74
|
</div>`,
|
|
74
75
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
75
|
-
standalone:
|
|
76
|
+
standalone: true,
|
|
76
77
|
}]
|
|
77
78
|
}], propDecorators: { top: [{
|
|
78
79
|
type: Input
|
|
@@ -298,14 +299,15 @@ class HotCellRendererComponent {
|
|
|
298
299
|
return this.cellProperties?.rendererProps ?? {};
|
|
299
300
|
}
|
|
300
301
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: HotCellRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
301
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.21", type: HotCellRendererComponent, isStandalone:
|
|
302
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.21", type: HotCellRendererComponent, isStandalone: true, selector: "hot-cell-renderer", inputs: { value: "value", instance: "instance", td: "td", row: "row", col: "col", prop: "prop", cellProperties: "cellProperties" }, ngImport: i0, template: `<!-- This is an abstract component. Extend this component and provide your own template. -->`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
302
303
|
}
|
|
303
304
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: HotCellRendererComponent, decorators: [{
|
|
304
305
|
type: Component,
|
|
305
306
|
args: [{
|
|
306
307
|
selector: 'hot-cell-renderer',
|
|
307
308
|
template: `<!-- This is an abstract component. Extend this component and provide your own template. -->`,
|
|
308
|
-
standalone:
|
|
309
|
+
standalone: true,
|
|
310
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
309
311
|
}]
|
|
310
312
|
}], propDecorators: { value: [{
|
|
311
313
|
type: Input
|
|
@@ -515,8 +517,8 @@ function applyPropsToEditor(editor) {
|
|
|
515
517
|
editor._componentRef.setInput('cellProperties', editor.cellProperties);
|
|
516
518
|
const rect = editor.hot.getCell(editor.row, editor.col)?.getBoundingClientRect();
|
|
517
519
|
editor._editorPlaceHolderRef.setInput('placeholderCustomClass', '');
|
|
518
|
-
editor._editorPlaceHolderRef.setInput('height', rect
|
|
519
|
-
editor._editorPlaceHolderRef.setInput('width', rect
|
|
520
|
+
editor._editorPlaceHolderRef.setInput('height', rect?.height ?? 0);
|
|
521
|
+
editor._editorPlaceHolderRef.setInput('width', rect?.width ?? 0);
|
|
520
522
|
editor._editorPlaceHolderRef.setInput('isVisible', true);
|
|
521
523
|
editor._editorPlaceHolderRef.setInput('componentRef', editor._componentRef);
|
|
522
524
|
editor._editorPlaceHolderRef.changeDetectorRef.detectChanges();
|
|
@@ -581,14 +583,15 @@ class HotCellRendererAdvancedComponent {
|
|
|
581
583
|
return this.cellProperties?.rendererProps ?? {};
|
|
582
584
|
}
|
|
583
585
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: HotCellRendererAdvancedComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
584
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.21", type: HotCellRendererAdvancedComponent, isStandalone:
|
|
586
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.21", type: HotCellRendererAdvancedComponent, isStandalone: true, selector: "hot-cell-renderer-advanced", inputs: { value: "value", instance: "instance", td: "td", row: "row", col: "col", prop: "prop", cellProperties: "cellProperties" }, ngImport: i0, template: `<!-- This is an abstract component. Extend this component and provide your own template. -->`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
585
587
|
}
|
|
586
588
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: HotCellRendererAdvancedComponent, decorators: [{
|
|
587
589
|
type: Component,
|
|
588
590
|
args: [{
|
|
589
591
|
selector: 'hot-cell-renderer-advanced',
|
|
590
592
|
template: `<!-- This is an abstract component. Extend this component and provide your own template. -->`,
|
|
591
|
-
standalone:
|
|
593
|
+
standalone: true,
|
|
594
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
592
595
|
}]
|
|
593
596
|
}], propDecorators: { value: [{
|
|
594
597
|
type: Input
|
|
@@ -853,7 +856,7 @@ class DynamicComponentService {
|
|
|
853
856
|
environmentInjector: this.environmentInjector,
|
|
854
857
|
});
|
|
855
858
|
Object.keys(rendererParameters).forEach((key) => {
|
|
856
|
-
if (
|
|
859
|
+
if (Object.prototype.hasOwnProperty.call(rendererParameters, key)) {
|
|
857
860
|
componentRef.setInput(key, rendererParameters[key]);
|
|
858
861
|
}
|
|
859
862
|
else {
|
|
@@ -893,57 +896,46 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImpo
|
|
|
893
896
|
}]
|
|
894
897
|
}], ctorParameters: () => [{ type: i0.ApplicationRef }, { type: i0.EnvironmentInjector }] });
|
|
895
898
|
|
|
896
|
-
const
|
|
897
|
-
const AVAILABLE_HOOKS = Handsontable.hooks.getRegistered();
|
|
899
|
+
const AVAILABLE_HOOKS_SET = new Set(Handsontable.hooks.getRegistered());
|
|
898
900
|
/**
|
|
899
901
|
* Service to resolve and apply custom settings for Handsontable settings object.
|
|
900
902
|
*/
|
|
901
903
|
class HotSettingsResolver {
|
|
902
904
|
dynamicComponentService;
|
|
903
905
|
environmentInjector;
|
|
904
|
-
|
|
906
|
+
ngZone;
|
|
907
|
+
constructor(dynamicComponentService, environmentInjector, ngZone) {
|
|
905
908
|
this.dynamicComponentService = dynamicComponentService;
|
|
906
909
|
this.environmentInjector = environmentInjector;
|
|
910
|
+
this.ngZone = ngZone;
|
|
907
911
|
}
|
|
908
912
|
/**
|
|
909
913
|
* Applies custom settings to the provided GridSettings.
|
|
910
914
|
* @param settings The original grid settings.
|
|
911
|
-
* @param ngZone The NgZone instance to run hooks inside the zone context.
|
|
912
915
|
* @returns The merged grid settings with custom settings applied.
|
|
913
916
|
*/
|
|
914
|
-
applyCustomSettings(settings
|
|
917
|
+
applyCustomSettings(settings) {
|
|
915
918
|
const mergedSettings = settings;
|
|
916
919
|
this.updateColumnRendererForGivenCustomRenderer(mergedSettings);
|
|
917
920
|
this.updateColumnEditorForGivenCustomEditor(mergedSettings);
|
|
918
921
|
this.updateColumnValidatorForGivenCustomValidator(mergedSettings);
|
|
919
|
-
this.wrapHooksInNgZone(mergedSettings
|
|
922
|
+
this.wrapHooksInNgZone(mergedSettings);
|
|
920
923
|
return mergedSettings ?? {};
|
|
921
924
|
}
|
|
922
925
|
/**
|
|
923
926
|
* Ensures that hook callbacks in the provided grid settings run inside Angular's zone.
|
|
924
927
|
*
|
|
925
928
|
* @param settings The original grid settings.
|
|
926
|
-
* @param ngZone The NgZone instance to run hooks inside the zone context.
|
|
927
929
|
*/
|
|
928
|
-
wrapHooksInNgZone(settings
|
|
929
|
-
const
|
|
930
|
-
|
|
931
|
-
const
|
|
932
|
-
|
|
933
|
-
if (isHook) {
|
|
934
|
-
option = settings[key];
|
|
935
|
-
}
|
|
936
|
-
if (option === void 0) {
|
|
937
|
-
return;
|
|
938
|
-
}
|
|
939
|
-
else if (!!ngZone && typeof option === 'function' && isHook) {
|
|
930
|
+
wrapHooksInNgZone(settings) {
|
|
931
|
+
const ngZone = this.ngZone;
|
|
932
|
+
AVAILABLE_HOOKS_SET.forEach((key) => {
|
|
933
|
+
const option = settings[key];
|
|
934
|
+
if (typeof option === 'function') {
|
|
940
935
|
settings[key] = function (...args) {
|
|
941
936
|
return ngZone.run(() => option.apply(this, args));
|
|
942
937
|
};
|
|
943
938
|
}
|
|
944
|
-
else {
|
|
945
|
-
settings[key] = option;
|
|
946
|
-
}
|
|
947
939
|
});
|
|
948
940
|
}
|
|
949
941
|
/**
|
|
@@ -1046,12 +1038,12 @@ class HotSettingsResolver {
|
|
|
1046
1038
|
this.isTemplateRef(renderer) ||
|
|
1047
1039
|
this.isAdvancedRendererComponentRefType(renderer);
|
|
1048
1040
|
}
|
|
1049
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: HotSettingsResolver, deps: [{ token: DynamicComponentService }, { token: i0.EnvironmentInjector }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1041
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: HotSettingsResolver, deps: [{ token: DynamicComponentService }, { token: i0.EnvironmentInjector }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1050
1042
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: HotSettingsResolver });
|
|
1051
1043
|
}
|
|
1052
1044
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: HotSettingsResolver, decorators: [{
|
|
1053
1045
|
type: Injectable
|
|
1054
|
-
}], ctorParameters: () => [{ type: DynamicComponentService }, { type: i0.EnvironmentInjector }] });
|
|
1046
|
+
}], ctorParameters: () => [{ type: DynamicComponentService }, { type: i0.EnvironmentInjector }, { type: i0.NgZone }] });
|
|
1055
1047
|
|
|
1056
1048
|
/**
|
|
1057
1049
|
* A constant representing the non-commercial and evaluation license.
|
|
@@ -1092,9 +1084,7 @@ class HotGlobalConfigService {
|
|
|
1092
1084
|
* @private
|
|
1093
1085
|
* @type {HotGlobalConfig}
|
|
1094
1086
|
*/
|
|
1095
|
-
defaultConfig = {
|
|
1096
|
-
license: undefined,
|
|
1097
|
-
};
|
|
1087
|
+
defaultConfig = {};
|
|
1098
1088
|
/**
|
|
1099
1089
|
* A BehaviorSubject that holds the current Handsontable configuration.
|
|
1100
1090
|
*
|
|
@@ -1157,41 +1147,37 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImpo
|
|
|
1157
1147
|
args: [HOT_GLOBAL_CONFIG]
|
|
1158
1148
|
}] }] });
|
|
1159
1149
|
|
|
1160
|
-
const HOT_DESTROYED_WARNING = 'The Handsontable instance bound to this component was destroyed and cannot be
|
|
1150
|
+
const HOT_DESTROYED_WARNING = 'The Handsontable instance bound to this component was destroyed and cannot be used properly.';
|
|
1161
1151
|
class HotTableComponent {
|
|
1162
1152
|
_hotSettingsResolver;
|
|
1163
1153
|
_hotConfig;
|
|
1164
1154
|
ngZone;
|
|
1165
1155
|
environmentInjector;
|
|
1166
|
-
|
|
1156
|
+
destroyRef;
|
|
1167
1157
|
/** The data for the Handsontable instance. */
|
|
1168
1158
|
data = null;
|
|
1169
1159
|
/** The settings for the Handsontable instance. */
|
|
1170
1160
|
settings = {};
|
|
1171
|
-
/** The container element for the Handsontable instance. */
|
|
1172
1161
|
container;
|
|
1173
1162
|
/** The Handsontable instance. */
|
|
1174
1163
|
__hotInstance = null;
|
|
1175
|
-
|
|
1176
|
-
constructor(_hotSettingsResolver, _hotConfig, ngZone, environmentInjector) {
|
|
1164
|
+
constructor(_hotSettingsResolver, _hotConfig, ngZone, environmentInjector, destroyRef) {
|
|
1177
1165
|
this._hotSettingsResolver = _hotSettingsResolver;
|
|
1178
1166
|
this._hotConfig = _hotConfig;
|
|
1179
1167
|
this.ngZone = ngZone;
|
|
1180
1168
|
this.environmentInjector = environmentInjector;
|
|
1169
|
+
this.destroyRef = destroyRef;
|
|
1181
1170
|
}
|
|
1182
1171
|
/**
|
|
1183
1172
|
* Gets the Handsontable instance.
|
|
1184
1173
|
* @returns The Handsontable instance or `null` if it's not yet been created or has been destroyed.
|
|
1185
1174
|
*/
|
|
1186
1175
|
get hotInstance() {
|
|
1187
|
-
if (
|
|
1188
|
-
// Will return the Handsontable instance or `null` if it's not yet been created.
|
|
1189
|
-
return this.__hotInstance;
|
|
1190
|
-
}
|
|
1191
|
-
else {
|
|
1176
|
+
if (this.__hotInstance?.isDestroyed) {
|
|
1192
1177
|
console.warn(HOT_DESTROYED_WARNING);
|
|
1193
1178
|
return null;
|
|
1194
1179
|
}
|
|
1180
|
+
return this.__hotInstance;
|
|
1195
1181
|
}
|
|
1196
1182
|
/**
|
|
1197
1183
|
* Sets the Handsontable instance.
|
|
@@ -1205,7 +1191,7 @@ class HotTableComponent {
|
|
|
1205
1191
|
* The initial settings of the table are also prepared here
|
|
1206
1192
|
*/
|
|
1207
1193
|
ngAfterViewInit() {
|
|
1208
|
-
let options = this._hotSettingsResolver.applyCustomSettings(this.settings
|
|
1194
|
+
let options = this._hotSettingsResolver.applyCustomSettings(this.settings);
|
|
1209
1195
|
const negotiatedSettings = this.getNegotiatedSettings(options);
|
|
1210
1196
|
options = { ...options, ...negotiatedSettings, data: this.data };
|
|
1211
1197
|
this.ngZone.runOutsideAngular(() => {
|
|
@@ -1213,7 +1199,7 @@ class HotTableComponent {
|
|
|
1213
1199
|
this.hotInstance._angularEnvironmentInjector = this.environmentInjector;
|
|
1214
1200
|
this.hotInstance.init();
|
|
1215
1201
|
});
|
|
1216
|
-
this.
|
|
1202
|
+
this._hotConfig.config$.pipe(skip(1), takeUntilDestroyed(this.destroyRef)).subscribe(() => {
|
|
1217
1203
|
if (this.hotInstance) {
|
|
1218
1204
|
const negotiatedSettings = this.getNegotiatedSettings(this.settings);
|
|
1219
1205
|
this.updateHotTable(negotiatedSettings);
|
|
@@ -1225,32 +1211,36 @@ class HotTableComponent {
|
|
|
1225
1211
|
return;
|
|
1226
1212
|
}
|
|
1227
1213
|
if (changes.settings && !changes.settings.firstChange) {
|
|
1228
|
-
|
|
1229
|
-
this.
|
|
1214
|
+
this.destroyEditorComponentRefs();
|
|
1215
|
+
const newOptions = this._hotSettingsResolver.applyCustomSettings(changes.settings.currentValue);
|
|
1216
|
+
const dataChanged = changes.data && !changes.data.firstChange;
|
|
1217
|
+
this.updateHotTable(dataChanged ? { ...newOptions, data: changes.data.currentValue } : newOptions);
|
|
1218
|
+
return;
|
|
1230
1219
|
}
|
|
1231
1220
|
if (changes.data && !changes.data.firstChange) {
|
|
1232
|
-
this.
|
|
1221
|
+
this.ngZone.runOutsideAngular(() => {
|
|
1222
|
+
this.hotInstance.updateData(changes.data.currentValue);
|
|
1223
|
+
});
|
|
1233
1224
|
}
|
|
1234
1225
|
}
|
|
1235
1226
|
/**
|
|
1236
1227
|
* Destroys the Handsontable instance and clears the columns from custom editors.
|
|
1237
1228
|
*/
|
|
1238
1229
|
ngOnDestroy() {
|
|
1230
|
+
if (!this.hotInstance) {
|
|
1231
|
+
return;
|
|
1232
|
+
}
|
|
1233
|
+
this.destroyEditorComponentRefs();
|
|
1239
1234
|
this.ngZone.runOutsideAngular(() => {
|
|
1240
|
-
if (!this.hotInstance) {
|
|
1241
|
-
return;
|
|
1242
|
-
}
|
|
1243
|
-
const columns = this.hotInstance.getSettings().columns;
|
|
1244
|
-
if (columns && Array.isArray(columns)) {
|
|
1245
|
-
columns.forEach((column) => {
|
|
1246
|
-
if (column._editorComponentReference) {
|
|
1247
|
-
column._editorComponentReference.destroy();
|
|
1248
|
-
}
|
|
1249
|
-
});
|
|
1250
|
-
}
|
|
1251
1235
|
this.hotInstance.destroy();
|
|
1236
|
+
this.hotInstance = null;
|
|
1252
1237
|
});
|
|
1253
|
-
|
|
1238
|
+
}
|
|
1239
|
+
destroyEditorComponentRefs() {
|
|
1240
|
+
const columns = this.hotInstance.getSettings().columns;
|
|
1241
|
+
if (Array.isArray(columns)) {
|
|
1242
|
+
columns.forEach((column) => column._editorComponentReference?.destroy());
|
|
1243
|
+
}
|
|
1254
1244
|
}
|
|
1255
1245
|
/**
|
|
1256
1246
|
* Updates the Handsontable instance with new settings.
|
|
@@ -1260,15 +1250,15 @@ class HotTableComponent {
|
|
|
1260
1250
|
if (!this.hotInstance) {
|
|
1261
1251
|
return;
|
|
1262
1252
|
}
|
|
1263
|
-
const initOnlySettingKeys = this.hotInstance.getSettings()?._initOnlySettings
|
|
1253
|
+
const initOnlySettingKeys = new Set(this.hotInstance.getSettings()?._initOnlySettings ?? []);
|
|
1264
1254
|
const filteredSettings = {};
|
|
1265
1255
|
for (const key of Object.keys(newSettings)) {
|
|
1266
|
-
if (!initOnlySettingKeys.
|
|
1256
|
+
if (!initOnlySettingKeys.has(key)) {
|
|
1267
1257
|
filteredSettings[key] = newSettings[key];
|
|
1268
1258
|
}
|
|
1269
1259
|
}
|
|
1270
1260
|
this.ngZone.runOutsideAngular(() => {
|
|
1271
|
-
this.hotInstance
|
|
1261
|
+
this.hotInstance.updateSettings(filteredSettings, false);
|
|
1272
1262
|
});
|
|
1273
1263
|
}
|
|
1274
1264
|
/**
|
|
@@ -1300,19 +1290,19 @@ class HotTableComponent {
|
|
|
1300
1290
|
}
|
|
1301
1291
|
return negotiatedSettings;
|
|
1302
1292
|
}
|
|
1303
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: HotTableComponent, deps: [{ token: HotSettingsResolver }, { token: HotGlobalConfigService }, { token: i0.NgZone }, { token: i0.EnvironmentInjector }], target: i0.ɵɵFactoryTarget.Component });
|
|
1304
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.21", type: HotTableComponent, isStandalone:
|
|
1293
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: HotTableComponent, deps: [{ token: HotSettingsResolver }, { token: HotGlobalConfigService }, { token: i0.NgZone }, { token: i0.EnvironmentInjector }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
1294
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.21", type: HotTableComponent, isStandalone: true, 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"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
1305
1295
|
}
|
|
1306
1296
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: HotTableComponent, decorators: [{
|
|
1307
1297
|
type: Component,
|
|
1308
|
-
args: [{ selector: 'hot-table', template: '<div #container></div>', standalone:
|
|
1309
|
-
}], ctorParameters: () => [{ type: HotSettingsResolver }, { type: HotGlobalConfigService }, { type: i0.NgZone }, { type: i0.EnvironmentInjector }], propDecorators: { data: [{
|
|
1298
|
+
args: [{ selector: 'hot-table', template: '<div #container></div>', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [HotSettingsResolver], styles: [":host{display:block}\n"] }]
|
|
1299
|
+
}], ctorParameters: () => [{ type: HotSettingsResolver }, { type: HotGlobalConfigService }, { type: i0.NgZone }, { type: i0.EnvironmentInjector }, { type: i0.DestroyRef }], propDecorators: { data: [{
|
|
1310
1300
|
type: Input
|
|
1311
1301
|
}], settings: [{
|
|
1312
1302
|
type: Input
|
|
1313
1303
|
}], container: [{
|
|
1314
1304
|
type: ViewChild,
|
|
1315
|
-
args: ['container'
|
|
1305
|
+
args: ['container']
|
|
1316
1306
|
}] } });
|
|
1317
1307
|
|
|
1318
1308
|
class HotTableModule {
|
|
@@ -1320,25 +1310,18 @@ class HotTableModule {
|
|
|
1320
1310
|
* Placeholder for the library version.
|
|
1321
1311
|
* Replaced automatically during the pre-build/post-build process.
|
|
1322
1312
|
*/
|
|
1323
|
-
static version = '17.1.0-
|
|
1324
|
-
constructor() { }
|
|
1325
|
-
static forRoot() {
|
|
1326
|
-
return {
|
|
1327
|
-
ngModule: HotTableModule,
|
|
1328
|
-
};
|
|
1329
|
-
}
|
|
1313
|
+
static version = '17.1.0-rc5';
|
|
1330
1314
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: HotTableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
1331
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.21", ngImport: i0, type: HotTableModule,
|
|
1315
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.21", ngImport: i0, type: HotTableModule, imports: [HotTableComponent], exports: [HotTableComponent] });
|
|
1332
1316
|
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: HotTableModule });
|
|
1333
1317
|
}
|
|
1334
1318
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: HotTableModule, decorators: [{
|
|
1335
1319
|
type: NgModule,
|
|
1336
1320
|
args: [{
|
|
1337
|
-
|
|
1338
|
-
imports: [],
|
|
1321
|
+
imports: [HotTableComponent],
|
|
1339
1322
|
exports: [HotTableComponent],
|
|
1340
1323
|
}]
|
|
1341
|
-
}]
|
|
1324
|
+
}] });
|
|
1342
1325
|
|
|
1343
1326
|
/*
|
|
1344
1327
|
* Public API Surface of hot-table
|
|
@@ -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/editor/hot-cell-editor.component.ts","../../../projects/hot-table/src/lib/editor/editor-factory-adapter.ts","../../../projects/hot-table/src/lib/renderer/hot-cell-renderer-advanced.component.ts","../../../projects/hot-table/src/lib/editor/hot-cell-editor-advanced.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-global-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/public-api.ts","../../../projects/hot-table/src/handsontable-angular-wrapper.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, ComponentRef, Input, ViewChild, ViewContainerRef } from '@angular/core';\nimport { HotCellEditorComponent } from './hot-cell-editor.component';\nimport { HotCellEditorAdvancedComponent } from './hot-cell-editor-advanced.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]=\"placeholderCustomClass\"\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 @Input() placeholderCustomClass = 'handsontableInputHolder ht_clone_master';\n\n /** The reference to the component instance of the editor. */\n @Input() set componentRef(\n hotEditorComponentRef: ComponentRef<HotCellEditorComponent<any>> |\n ComponentRef<HotCellEditorAdvancedComponent<any>>) {\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/base';\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 } from 'rxjs';\nimport { take } from 'rxjs/operators';\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 standalone: false,\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 { 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 static readonly EDITOR_MARKER = Symbol('HotCellEditorComponent');\n\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","import { ComponentRef, createComponent, EnvironmentInjector } from '@angular/core';\nimport { CustomEditorPlaceholderComponent } from './custom-editor-placeholder.component';\nimport { AngularEditorProperties } from './models/factory-editor-properties';\nimport { editorFactory, ExtendedEditor } from 'handsontable/editors/factory';\nimport { take } from 'rxjs/operators';\nimport { HotCellEditorAdvancedComponent } from './hot-cell-editor-advanced.component';\n\n/**\n * Combined type representing an extended editor with Angular component properties.\n * Used internally by the factory adapter to bridge Angular and Handsontable.\n */\ntype EditorInstance = ExtendedEditor<AngularEditorProperties & HotCellEditorAdvancedComponent<any>>;\n\n/**\n * Factory function to create a custom Handsontable editor adapter for Angular components.\n *\n * This adapter integrates Angular components with Handsontable's editor system using the new\n * editorFactory API, allowing you to use Angular components as custom cell editors while\n * maintaining full Angular lifecycle management and change detection.\n *\n * @returns A custom editor class that can be used in Handsontable column settings.\n *\n */\nexport const FactoryEditorAdapter = (componentRef: ComponentRef<HotCellEditorAdvancedComponent<any>>) =>\n editorFactory<ExtendedEditor<any>>({\n position: componentRef.instance.position,\n shortcuts: componentRef.instance.shortcuts,\n config: componentRef.instance.config,\n init(editor: EditorInstance): void {\n editor._componentRef = componentRef;\n editor._editorPlaceHolderRef = undefined;\n editor._finishEditSubscription = undefined;\n editor._cancelEditSubscription = undefined;\n\n createEditorPlaceholder(editor, (editor.hot as any)._angularEnvironmentInjector);\n editor.input = editor._editorPlaceHolderRef.location.nativeElement;\n\n editor._afterRowResizeCallback = (): void => {\n if (editor.isOpened()) {\n applyPropsToEditor(editor);\n }\n };\n\n editor._afterColumnResizeCallback = (): void => {\n if (editor.isOpened()) {\n applyPropsToEditor(editor);\n }\n };\n\n editor._afterDestroyCallback = (): void => {\n if (editor._editorPlaceHolderRef) {\n editor._editorPlaceHolderRef.destroy();\n }\n };\n\n // Hooks are automatically removed by Handsontable on table destroy\n editor.hot.addHook('afterRowResize', editor._afterRowResizeCallback);\n editor.hot.addHook('afterColumnResize', editor._afterColumnResizeCallback);\n editor.hot.addHook('afterDestroy', editor._afterDestroyCallback);\n },\n\n afterInit: (editor) => editor._componentRef.instance.afterInit?.(editor),\n beforeOpen: (editor: EditorInstance, context) => {\n cleanupSubscriptions(editor);\n\n applyPropsToEditor(editor);\n\n editor._finishEditSubscription = editor._componentRef.instance.finishEdit.pipe(take(1)).subscribe((): void => {\n editor.finishEditing();\n });\n\n editor._cancelEditSubscription = editor._componentRef.instance.cancelEdit.pipe(take(1)).subscribe((): void => {\n editor.cancelChanges();\n });\n editor._componentRef.instance.beforeOpen?.(editor, context);\n },\n afterOpen: (editor, event) => {\n editor._componentRef.instance.afterOpen?.(editor, event);\n },\n onFocus: (editor) => editor._componentRef.instance.onFocus?.(editor),\n afterClose: (editor: EditorInstance) => {\n resetEditorState(editor);\n editor._editorPlaceHolderRef.changeDetectorRef.detectChanges();\n editor._editorPlaceHolderRef.instance.detachEditor();\n editor._componentRef.instance.afterClose?.(editor);\n },\n getValue: (editor) => editor._componentRef.instance.getValue(),\n setValue: (editor: EditorInstance, value) => {\n editor.value = value;\n editor._componentRef.instance.setValue(value);\n editor._componentRef.changeDetectorRef.detectChanges();\n },\n });\n\n/**\n * Creates the editor placeholder component.\n * @param editor The editor instance.\n * @param injector The environment injector from Angular.\n */\nfunction createEditorPlaceholder(editor: EditorInstance, injector: EnvironmentInjector | undefined): void {\n if (!injector) {\n return;\n }\n\n editor._editorPlaceHolderRef = createComponent(CustomEditorPlaceholderComponent, {\n environmentInjector: injector,\n });\n}\n\n/**\n * Applies properties to the custom Angular editor and editor placeholder.\n * Updates position, size, and cell context information.\n * @param editor The editor instance.\n */\nfunction applyPropsToEditor(editor: EditorInstance): void {\n if (!editor._componentRef || !editor._editorPlaceHolderRef) {\n return;\n }\n\n editor._componentRef.setInput('originalValue', editor.originalValue);\n editor._componentRef.setInput('row', editor.row);\n editor._componentRef.setInput('column', editor.col);\n editor._componentRef.setInput('prop', editor.prop);\n editor._componentRef.setInput('cellProperties', editor.cellProperties);\n\n const rect = editor.hot.getCell(editor.row, editor.col)?.getBoundingClientRect();\n\n editor._editorPlaceHolderRef.setInput('placeholderCustomClass', '');\n editor._editorPlaceHolderRef.setInput('height', rect.height);\n editor._editorPlaceHolderRef.setInput('width', rect.width);\n editor._editorPlaceHolderRef.setInput('isVisible', true);\n editor._editorPlaceHolderRef.setInput('componentRef', editor._componentRef);\n\n editor._editorPlaceHolderRef.changeDetectorRef.detectChanges();\n}\n\n/**\n * Resets the editor placeholder state.\n * Clears all positioning and visibility settings.\n * @param editor The editor instance.\n */\nfunction resetEditorState(editor: EditorInstance): void {\n if (!editor._editorPlaceHolderRef) {\n return;\n }\n\n editor._editorPlaceHolderRef.setInput('top', undefined);\n editor._editorPlaceHolderRef.setInput('left', undefined);\n editor._editorPlaceHolderRef.setInput('height', undefined);\n editor._editorPlaceHolderRef.setInput('width', undefined);\n editor._editorPlaceHolderRef.setInput('isVisible', false);\n editor._editorPlaceHolderRef.setInput('componentRef', undefined);\n}\n\n/**\n * Cleans up existing subscriptions.\n * @param editor The editor instance.\n */\nfunction cleanupSubscriptions(editor: EditorInstance): void {\n if (editor._finishEditSubscription) {\n editor._finishEditSubscription.unsubscribe();\n editor._finishEditSubscription = undefined;\n }\n\n if (editor._cancelEditSubscription) {\n editor._cancelEditSubscription.unsubscribe();\n editor._cancelEditSubscription = undefined;\n }\n}\n","import Handsontable from 'handsontable/base';\nimport { Component, Input } from '@angular/core';\n\n/**\n * Abstract base component for creating advanced 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-advanced',\n template: `<!-- This is an abstract component. Extend this component and provide your own template. -->`,\n standalone: false,\n})\nexport abstract class HotCellRendererAdvancedComponent<\n TValue extends string |\n number |\n boolean |\n Record<string, any> | Array<any> = string,\n TProps extends {} = any\n> {\n static readonly RENDERER_MARKER = Symbol('HotCellRendererAdvancedComponent');\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 { Directive, EventEmitter, HostBinding, Input, Output } from '@angular/core';\nimport { ExtendedEditor } from 'handsontable/editors/factory';\nimport { CellProperties } from 'handsontable/settings';\nimport { KeyboardShortcutConfig } from './models/keyboard-shortcut-config';\n\n/**\n * Abstract class representing a Handsontable editor in angular.\n */\n@Directive()\nexport abstract class HotCellEditorAdvancedComponent<T extends string | number | boolean | Record<string, any> | Array<any>> {\n static readonly EDITOR_MARKER = Symbol('HotCellEditorAdvancedComponent');\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 protected value: T;\n\n /** Event triggered by Handsontable on focus the editor.\n * The user have to define focus logic.\n */\n onFocus(editor?: ExtendedEditor<T>): 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 /** The position of the editor in the DOM. Used by Handsontable API. Available in advanced mode. */\n position: 'container' | 'portal' = 'container';\n\n /** The shortcuts available for the editor. Available in advanced mode. */\n shortcuts?: KeyboardShortcutConfig[];\n\n /** The group name for the shortcuts. Available in advanced mode.*/\n shortcutsGroup?: string;\n\n /** Configuration. Available in advanced mode. */\n config?: any;\n\n /** Lifecycle hook called after the editor is opened. Available in advanced mode.*/\n afterOpen(editor: ExtendedEditor<T>, event?: Event): void {}\n\n /** Lifecycle hook called after the editor is closed. Available in advanced mode. */\n afterClose(editor: ExtendedEditor<T>): void {}\n\n /** Lifecycle hook called after the editor is initialized. Available in advanced mode.*/\n afterInit(editor: ExtendedEditor<T>): void {}\n\n /** Lifecycle hook called before the editor is opened. Available in advanced mode. */\n beforeOpen(\n editor: ExtendedEditor<T>,\n {\n row,\n col,\n prop,\n td,\n originalValue,\n cellProperties,\n }: {\n row: number;\n col: number;\n prop: string | number;\n td: HTMLTableCellElement;\n originalValue: any;\n cellProperties: CellProperties;\n }\n ): void {}\n}\n","import {\n ApplicationRef,\n ComponentRef,\n createComponent,\n EmbeddedViewRef,\n EnvironmentInjector,\n Injectable,\n TemplateRef,\n Type\n} from '@angular/core';\nimport { baseRenderer, BaseRenderer, registerRenderer, rendererFactory } from 'handsontable/renderers';\nimport Handsontable from 'handsontable/base';\nimport { HotCellRendererComponent } from './hot-cell-renderer.component';\nimport { HotCellRendererAdvancedComponent } from './hot-cell-renderer-advanced.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\nexport const INVALID_ADVANCED_RENDERER_WARNING =\n 'The provided renderer component was not recognized as a valid custom renderer. ' +\n 'It must either extend HotCellRendererAdvancedComponent. ' +\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 * Type guard to check if an object is an instance of HotCellRendererAdvancedComponent.\n *\n * @param obj - The object to check.\n * @returns True if the object is a HotCellRendererAdvancedComponent, false otherwise.\n */\nexport function isAdvancedHotCellRendererComponent(obj: any): obj is Type<HotCellRendererAdvancedComponent> {\n return obj?.RENDERER_MARKER === HotCellRendererAdvancedComponent.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(private appRef: ApplicationRef, private environmentInjector: EnvironmentInjector) {}\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,\n instance,\n td,\n row,\n col,\n prop,\n cellProperties,\n };\n\n if (componentProps) {\n Object.assign(cellProperties, { rendererProps: componentProps });\n }\n\n const rendererParameters: BaseRendererParameters = [instance, td, row, col, prop, value, cellProperties];\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(component.constructor.name, component as any as BaseRenderer);\n }\n\n return td;\n };\n }\n\n /**\n * Creates a custom renderer function using rendererFactory from Handsontable.\n * This is an alternative implementation that uses the factory pattern.\n *\n * @param component - The Angular component type 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 createRendererWithFactory(\n component: Type<HotCellRendererAdvancedComponent>,\n componentProps: Record<string, any> = {},\n register: boolean = false\n ) {\n return rendererFactory(({\n instance,\n td,\n row,\n column,\n prop,\n value,\n cellProperties\n }) => {\n const properties: BaseRendererParametersObject = {\n value,\n instance,\n td,\n row,\n col: column,\n prop,\n cellProperties,\n };\n\n if (componentProps) {\n Object.assign(cellProperties, { rendererProps: componentProps });\n }\n\n td.innerHTML = '';\n\n if (isAdvancedHotCellRendererComponent(component)) {\n const componentRef = this.createComponent(component, properties);\n this.attachComponentToElement(componentRef, td);\n } else {\n console.warn(INVALID_ADVANCED_RENDERER_WARNING);\n }\n\n if (register && isAdvancedHotCellRendererComponent(component)) {\n registerRenderer(component.constructor.name, component as any as BaseRenderer);\n }\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(template: TemplateRef<any>, tdEl: HTMLTableCellElement, properties: BaseRendererParametersObject) {\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>(componentRef: ComponentRef<T>, container: HTMLElement): void {\n const domElem = (componentRef.hostView as EmbeddedViewRef<T>).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';\nimport { FactoryEditorAdapter } from '../editor/editor-factory-adapter';\nimport { HotCellRendererAdvancedComponent } from '../renderer/hot-cell-renderer-advanced.component';\nimport { HotCellEditorAdvancedComponent } from '../editor/hot-cell-editor-advanced.component';\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 } else if (!!ngZone && typeof option === 'function' && isHook) {\n settings[key] = function (...args: any) {\n return ngZone.run(() => option.apply(this, args));\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.isCustomRenderer(settings.renderer))\n ?.forEach((cellSettings) => {\n const renderer = cellSettings.renderer;\n const props: any = cellSettings.rendererProps ?? {};\n\n if (this.isAdvancedRendererComponentRefType(renderer)) {\n cellSettings.renderer = this.dynamicComponentService.createRendererWithFactory(renderer, props);\n } else if (this.isRendererComponentRefType(renderer) || this.isTemplateRef(renderer)) {\n cellSettings.renderer = this.dynamicComponentService.createRendererFromComponent(renderer, 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(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) || this.isAdvancedEditorComponentRefType(settings.editor))\n ?.forEach((cellSettings) => {\n if (this.isAdvancedEditorComponentRefType(cellSettings.editor)) {\n const component = createComponent(cellSettings.editor, {\n environmentInjector: this.environmentInjector,\n });\n cellSettings.editor = FactoryEditorAdapter(component);\n } else {\n const component = createComponent(cellSettings.editor as Type<HotCellEditorComponent<any>>, {\n environmentInjector: this.environmentInjector,\n });\n cellSettings['_editorComponentReference'] = component;\n cellSettings['_environmentInjector'] = this.environmentInjector;\n cellSettings.editor = BaseEditorAdapter;\n }\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' &&\n !!(editor as any)?.ɵcmp &&\n (editor as any)?.EDITOR_MARKER === HotCellEditorComponent.EDITOR_MARKER;\n }\n\n private isAdvancedEditorComponentRefType(editor: any): editor is Type<HotCellEditorAdvancedComponent<any>> {\n // ecmp - we need it to check if the editor is a component\n return typeof editor === 'function' &&\n !!(editor as any)?.ɵcmp &&\n (editor as any)?.EDITOR_MARKER === HotCellEditorAdvancedComponent.EDITOR_MARKER;\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' &&\n !!(renderer as any)?.ɵcmp &&\n (renderer as any)?.RENDERER_MARKER === HotCellRendererComponent.RENDERER_MARKER;\n }\n\n private isAdvancedRendererComponentRefType(renderer: any): renderer is Type<HotCellRendererAdvancedComponent<any, any>> {\n // ecmp - we need it to check if the renderer is a component\n return typeof renderer === 'function' &&\n !!(renderer as any)?.ɵcmp &&\n (renderer as any)?.RENDERER_MARKER === HotCellRendererAdvancedComponent.RENDERER_MARKER;\n }\n\n private isTemplateRef(renderer: any): renderer is TemplateRef<any> {\n return renderer && typeof renderer.createEmbeddedView === 'function';\n }\n\n private isCustomRenderer(renderer: any): renderer is Type<HotCellRendererComponent<any, any>> |\n TemplateRef<any> |\n Type<HotCellRendererAdvancedComponent<any, any>> {\n return this.isRendererComponentRefType(renderer) ||\n this.isTemplateRef(renderer) ||\n this.isAdvancedRendererComponentRefType(renderer);\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 HotGlobalConfig {\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 theme to be used (ThemeBuilder instance or theme name string).\n * When set, takes precedence over `themeName` for Handsontable 17+.\n */\n theme?: object | string;\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<HotGlobalConfig>('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 HotGlobalConfigService {\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 {HotGlobalConfig}\n */\n private defaultConfig: HotGlobalConfig = {\n license: undefined,\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<HotGlobalConfig>}\n */\n private configSubject = new BehaviorSubject<HotGlobalConfig>(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<HotGlobalConfig> {\n return this.configSubject.asObservable();\n }\n\n constructor(\n @Inject(HOT_GLOBAL_CONFIG) globalConfig: HotGlobalConfig\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 global configuration for Handsontable.\n *\n * @param config - An object containing configuration options.\n * Each Handsontable instance can override this configuration by providing its own settings.\n */\n setConfig(config: HotGlobalConfig) {\n this.configSubject.next({ ...this.defaultConfig, ...config });\n }\n\n /**\n * Retrieves the current Handsontable configuration.\n *\n * @returns An object with the current settings.\n */\n getConfig(): HotGlobalConfig {\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 EnvironmentInjector,\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 { HotGlobalConfigService } from './services/hot-global-config.service';\nimport { GridSettings } from './models/grid-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 standalone: false,\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 = 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(\n private _hotSettingsResolver: HotSettingsResolver,\n private _hotConfig: HotGlobalConfigService,\n public ngZone: NgZone,\n private readonly environmentInjector: EnvironmentInjector\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 (!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 (this.hotInstance as any)._angularEnvironmentInjector = this.environmentInjector;\n\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(\n changes.settings.currentValue,\n this.ngZone\n );\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 return;\n }\n\n const columns = this.hotInstance.getSettings().columns;\n\n if (columns && Array.isArray(columns)) {\n columns.forEach((column) => {\n if (column._editorComponentReference) {\n column._editorComponentReference.destroy();\n }\n });\n }\n\n this.hotInstance.destroy();\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 const initOnlySettingKeys: string[] =\n (this.hotInstance.getSettings() as any)?._initOnlySettings || [];\n const filteredSettings: Handsontable.GridSettings = {};\n\n for (const key of Object.keys(newSettings)) {\n if (!initOnlySettingKeys.includes(key)) {\n (filteredSettings as any)[key] = (newSettings as any)[key];\n }\n }\n\n this.ngZone.runOutsideAngular(() => {\n this.hotInstance?.updateSettings(filteredSettings, 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 HotGlobalConfigService 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.language = settings.language ?? hotConfig.language;\n\n const theme = settings.theme ?? hotConfig.theme;\n const themeName = settings.themeName ?? hotConfig.themeName;\n\n if (theme !== undefined) {\n negotiatedSettings.theme = theme as Handsontable.GridSettings['theme'];\n } else if (themeName) {\n negotiatedSettings.themeName = themeName;\n }\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 /**\n * Placeholder for the library version.\n * Replaced automatically during the pre-build/post-build process.\n */\n static version = '17.1.0-rc3';\n\n constructor() {}\n\n public static forRoot(): ModuleWithProviders<HotTableModule> {\n return {\n ngModule: HotTableModule,\n };\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-global-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 * from './lib/renderer/hot-cell-renderer-advanced.component';\nexport * from './lib/editor/hot-cell-editor-advanced.component';\nexport * from './lib/editor/models/keyboard-shortcut-config';\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":["i1.DynamicComponentService","i1.HotSettingsResolver","i2.HotGlobalConfigService"],"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/editor/hot-cell-editor.component.ts","../../../projects/hot-table/src/lib/editor/editor-factory-adapter.ts","../../../projects/hot-table/src/lib/renderer/hot-cell-renderer-advanced.component.ts","../../../projects/hot-table/src/lib/editor/hot-cell-editor-advanced.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-global-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/public-api.ts","../../../projects/hot-table/src/handsontable-angular-wrapper.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, ComponentRef, Input, ViewChild, ViewContainerRef } from '@angular/core';\nimport { HotCellEditorComponent } from './hot-cell-editor.component';\nimport { HotCellEditorAdvancedComponent } from './hot-cell-editor-advanced.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]=\"placeholderCustomClass\"\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: true,\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 @Input() placeholderCustomClass = 'handsontableInputHolder ht_clone_master';\n\n /** The reference to the component instance of the editor. */\n @Input() set componentRef(\n hotEditorComponentRef: ComponentRef<HotCellEditorComponent<any>> |\n ComponentRef<HotCellEditorAdvancedComponent<any>>) {\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/base';\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 } from 'rxjs';\nimport { take } from 'rxjs/operators';\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 { ChangeDetectionStrategy, 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 standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\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 { 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 static readonly EDITOR_MARKER = Symbol('HotCellEditorComponent');\n\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","import { ComponentRef, createComponent, EnvironmentInjector } from '@angular/core';\nimport { CustomEditorPlaceholderComponent } from './custom-editor-placeholder.component';\nimport { AngularEditorProperties } from './models/factory-editor-properties';\nimport { editorFactory, ExtendedEditor } from 'handsontable/editors/factory';\nimport { take } from 'rxjs/operators';\nimport { HotCellEditorAdvancedComponent } from './hot-cell-editor-advanced.component';\n\n/**\n * Combined type representing an extended editor with Angular component properties.\n * Used internally by the factory adapter to bridge Angular and Handsontable.\n */\ntype EditorInstance = ExtendedEditor<AngularEditorProperties & HotCellEditorAdvancedComponent<any>>;\n\n/**\n * Factory function to create a custom Handsontable editor adapter for Angular components.\n *\n * This adapter integrates Angular components with Handsontable's editor system using the new\n * editorFactory API, allowing you to use Angular components as custom cell editors while\n * maintaining full Angular lifecycle management and change detection.\n *\n * @returns A custom editor class that can be used in Handsontable column settings.\n *\n */\nexport const FactoryEditorAdapter = (componentRef: ComponentRef<HotCellEditorAdvancedComponent<any>>) =>\n editorFactory<ExtendedEditor<any>>({\n position: componentRef.instance.position,\n shortcuts: componentRef.instance.shortcuts,\n config: componentRef.instance.config,\n init(editor: EditorInstance): void {\n editor._componentRef = componentRef;\n editor._editorPlaceHolderRef = undefined;\n editor._finishEditSubscription = undefined;\n editor._cancelEditSubscription = undefined;\n\n createEditorPlaceholder(editor, (editor.hot as any)._angularEnvironmentInjector);\n editor.input = editor._editorPlaceHolderRef.location.nativeElement;\n\n editor._afterRowResizeCallback = (): void => {\n if (editor.isOpened()) {\n applyPropsToEditor(editor);\n }\n };\n\n editor._afterColumnResizeCallback = (): void => {\n if (editor.isOpened()) {\n applyPropsToEditor(editor);\n }\n };\n\n editor._afterDestroyCallback = (): void => {\n if (editor._editorPlaceHolderRef) {\n editor._editorPlaceHolderRef.destroy();\n }\n };\n\n // Hooks are automatically removed by Handsontable on table destroy\n editor.hot.addHook('afterRowResize', editor._afterRowResizeCallback);\n editor.hot.addHook('afterColumnResize', editor._afterColumnResizeCallback);\n editor.hot.addHook('afterDestroy', editor._afterDestroyCallback);\n },\n\n afterInit: (editor) => editor._componentRef.instance.afterInit?.(editor),\n beforeOpen: (editor: EditorInstance, context) => {\n cleanupSubscriptions(editor);\n\n applyPropsToEditor(editor);\n\n editor._finishEditSubscription = editor._componentRef.instance.finishEdit.pipe(take(1)).subscribe((): void => {\n editor.finishEditing();\n });\n\n editor._cancelEditSubscription = editor._componentRef.instance.cancelEdit.pipe(take(1)).subscribe((): void => {\n editor.cancelChanges();\n });\n editor._componentRef.instance.beforeOpen?.(editor, context);\n },\n afterOpen: (editor, event) => {\n editor._componentRef.instance.afterOpen?.(editor, event);\n },\n onFocus: (editor) => editor._componentRef.instance.onFocus?.(editor),\n afterClose: (editor: EditorInstance) => {\n resetEditorState(editor);\n editor._editorPlaceHolderRef.changeDetectorRef.detectChanges();\n editor._editorPlaceHolderRef.instance.detachEditor();\n editor._componentRef.instance.afterClose?.(editor);\n },\n getValue: (editor) => editor._componentRef.instance.getValue(),\n setValue: (editor: EditorInstance, value) => {\n editor.value = value;\n editor._componentRef.instance.setValue(value);\n editor._componentRef.changeDetectorRef.detectChanges();\n },\n });\n\n/**\n * Creates the editor placeholder component.\n * @param editor The editor instance.\n * @param injector The environment injector from Angular.\n */\nfunction createEditorPlaceholder(editor: EditorInstance, injector: EnvironmentInjector | undefined): void {\n if (!injector) {\n return;\n }\n\n editor._editorPlaceHolderRef = createComponent(CustomEditorPlaceholderComponent, {\n environmentInjector: injector,\n });\n}\n\n/**\n * Applies properties to the custom Angular editor and editor placeholder.\n * Updates position, size, and cell context information.\n * @param editor The editor instance.\n */\nfunction applyPropsToEditor(editor: EditorInstance): void {\n if (!editor._componentRef || !editor._editorPlaceHolderRef) {\n return;\n }\n\n editor._componentRef.setInput('originalValue', editor.originalValue);\n editor._componentRef.setInput('row', editor.row);\n editor._componentRef.setInput('column', editor.col);\n editor._componentRef.setInput('prop', editor.prop);\n editor._componentRef.setInput('cellProperties', editor.cellProperties);\n\n const rect = editor.hot.getCell(editor.row, editor.col)?.getBoundingClientRect();\n\n editor._editorPlaceHolderRef.setInput('placeholderCustomClass', '');\n editor._editorPlaceHolderRef.setInput('height', rect?.height ?? 0);\n editor._editorPlaceHolderRef.setInput('width', rect?.width ?? 0);\n editor._editorPlaceHolderRef.setInput('isVisible', true);\n editor._editorPlaceHolderRef.setInput('componentRef', editor._componentRef);\n\n editor._editorPlaceHolderRef.changeDetectorRef.detectChanges();\n}\n\n/**\n * Resets the editor placeholder state.\n * Clears all positioning and visibility settings.\n * @param editor The editor instance.\n */\nfunction resetEditorState(editor: EditorInstance): void {\n if (!editor._editorPlaceHolderRef) {\n return;\n }\n\n editor._editorPlaceHolderRef.setInput('top', undefined);\n editor._editorPlaceHolderRef.setInput('left', undefined);\n editor._editorPlaceHolderRef.setInput('height', undefined);\n editor._editorPlaceHolderRef.setInput('width', undefined);\n editor._editorPlaceHolderRef.setInput('isVisible', false);\n editor._editorPlaceHolderRef.setInput('componentRef', undefined);\n}\n\n/**\n * Cleans up existing subscriptions.\n * @param editor The editor instance.\n */\nfunction cleanupSubscriptions(editor: EditorInstance): void {\n if (editor._finishEditSubscription) {\n editor._finishEditSubscription.unsubscribe();\n editor._finishEditSubscription = undefined;\n }\n\n if (editor._cancelEditSubscription) {\n editor._cancelEditSubscription.unsubscribe();\n editor._cancelEditSubscription = undefined;\n }\n}\n","import Handsontable from 'handsontable/base';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n/**\n * Abstract base component for creating advanced 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-advanced',\n template: `<!-- This is an abstract component. Extend this component and provide your own template. -->`,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport abstract class HotCellRendererAdvancedComponent<\n TValue extends string |\n number |\n boolean |\n Record<string, any> | Array<any> = string,\n TProps extends {} = any\n> {\n static readonly RENDERER_MARKER = Symbol('HotCellRendererAdvancedComponent');\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 { Directive, EventEmitter, HostBinding, Input, Output } from '@angular/core';\nimport { ExtendedEditor } from 'handsontable/editors/factory';\nimport { CellProperties } from 'handsontable/settings';\nimport { KeyboardShortcutConfig } from './models/keyboard-shortcut-config';\n\n/**\n * Abstract class representing a Handsontable editor in angular.\n */\n@Directive()\nexport abstract class HotCellEditorAdvancedComponent<T extends string | number | boolean | Record<string, any> | Array<any>> {\n static readonly EDITOR_MARKER = Symbol('HotCellEditorAdvancedComponent');\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 protected value: T;\n\n /** Event triggered by Handsontable on focus the editor.\n * The user have to define focus logic.\n */\n onFocus(editor?: ExtendedEditor<T>): 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 /** The position of the editor in the DOM. Used by Handsontable API. Available in advanced mode. */\n position: 'container' | 'portal' = 'container';\n\n /** The shortcuts available for the editor. Available in advanced mode. */\n shortcuts?: KeyboardShortcutConfig[];\n\n /** The group name for the shortcuts. Available in advanced mode.*/\n shortcutsGroup?: string;\n\n /** Configuration. Available in advanced mode. */\n config?: any;\n\n /** Lifecycle hook called after the editor is opened. Available in advanced mode.*/\n afterOpen(editor: ExtendedEditor<T>, event?: Event): void {}\n\n /** Lifecycle hook called after the editor is closed. Available in advanced mode. */\n afterClose(editor: ExtendedEditor<T>): void {}\n\n /** Lifecycle hook called after the editor is initialized. Available in advanced mode.*/\n afterInit(editor: ExtendedEditor<T>): void {}\n\n /** Lifecycle hook called before the editor is opened. Available in advanced mode. */\n beforeOpen(\n editor: ExtendedEditor<T>,\n {\n row,\n col,\n prop,\n td,\n originalValue,\n cellProperties,\n }: {\n row: number;\n col: number;\n prop: string | number;\n td: HTMLTableCellElement;\n originalValue: any;\n cellProperties: CellProperties;\n }\n ): void {}\n}\n","import {\n ApplicationRef,\n ComponentRef,\n createComponent,\n EmbeddedViewRef,\n EnvironmentInjector,\n Injectable,\n TemplateRef,\n Type\n} from '@angular/core';\nimport { baseRenderer, BaseRenderer, registerRenderer, rendererFactory } from 'handsontable/renderers';\nimport Handsontable from 'handsontable/base';\nimport { HotCellRendererComponent } from './hot-cell-renderer.component';\nimport { HotCellRendererAdvancedComponent } from './hot-cell-renderer-advanced.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\nexport const INVALID_ADVANCED_RENDERER_WARNING =\n 'The provided renderer component was not recognized as a valid custom renderer. ' +\n 'It must either extend HotCellRendererAdvancedComponent. ' +\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 * Type guard to check if an object is an instance of HotCellRendererAdvancedComponent.\n *\n * @param obj - The object to check.\n * @returns True if the object is a HotCellRendererAdvancedComponent, false otherwise.\n */\nexport function isAdvancedHotCellRendererComponent(obj: any): obj is Type<HotCellRendererAdvancedComponent> {\n return obj?.RENDERER_MARKER === HotCellRendererAdvancedComponent.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(private appRef: ApplicationRef, private environmentInjector: EnvironmentInjector) {}\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,\n instance,\n td,\n row,\n col,\n prop,\n cellProperties,\n };\n\n if (componentProps) {\n Object.assign(cellProperties, { rendererProps: componentProps });\n }\n\n const rendererParameters: BaseRendererParameters = [instance, td, row, col, prop, value, cellProperties];\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(component.constructor.name, component as any as BaseRenderer);\n }\n\n return td;\n };\n }\n\n /**\n * Creates a custom renderer function using rendererFactory from Handsontable.\n * This is an alternative implementation that uses the factory pattern.\n *\n * @param component - The Angular component type 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 createRendererWithFactory(\n component: Type<HotCellRendererAdvancedComponent>,\n componentProps: Record<string, any> = {},\n register: boolean = false\n ) {\n return rendererFactory(({\n instance,\n td,\n row,\n column,\n prop,\n value,\n cellProperties\n }) => {\n const properties: BaseRendererParametersObject = {\n value,\n instance,\n td,\n row,\n col: column,\n prop,\n cellProperties,\n };\n\n if (componentProps) {\n Object.assign(cellProperties, { rendererProps: componentProps });\n }\n\n td.innerHTML = '';\n\n if (isAdvancedHotCellRendererComponent(component)) {\n const componentRef = this.createComponent(component, properties);\n this.attachComponentToElement(componentRef, td);\n } else {\n console.warn(INVALID_ADVANCED_RENDERER_WARNING);\n }\n\n if (register && isAdvancedHotCellRendererComponent(component)) {\n registerRenderer(component.constructor.name, component as any as BaseRenderer);\n }\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(template: TemplateRef<any>, tdEl: HTMLTableCellElement, properties: BaseRendererParametersObject) {\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 (Object.prototype.hasOwnProperty.call(rendererParameters, 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>(componentRef: ComponentRef<T>, container: HTMLElement): void {\n const domElem = (componentRef.hostView as EmbeddedViewRef<T>).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';\nimport { FactoryEditorAdapter } from '../editor/editor-factory-adapter';\nimport { HotCellRendererAdvancedComponent } from '../renderer/hot-cell-renderer-advanced.component';\nimport { HotCellEditorAdvancedComponent } from '../editor/hot-cell-editor-advanced.component';\n\nconst AVAILABLE_HOOKS_SET = new Set<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(\n private readonly dynamicComponentService: DynamicComponentService,\n private readonly environmentInjector: EnvironmentInjector,\n private readonly ngZone: NgZone,\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: GridSettings = settings;\n\n this.updateColumnRendererForGivenCustomRenderer(mergedSettings);\n this.updateColumnEditorForGivenCustomEditor(mergedSettings);\n this.updateColumnValidatorForGivenCustomValidator(mergedSettings);\n\n this.wrapHooksInNgZone(mergedSettings);\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 */\n private wrapHooksInNgZone(settings: GridSettings): void {\n const ngZone = this.ngZone;\n\n AVAILABLE_HOOKS_SET.forEach((key) => {\n const option = settings[key];\n\n if (typeof option === 'function') {\n settings[key] = function (...args: any) {\n return ngZone.run(() => option.apply(this, args));\n };\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.isCustomRenderer(settings.renderer))\n ?.forEach((cellSettings) => {\n const renderer = cellSettings.renderer;\n const props: any = cellSettings.rendererProps ?? {};\n\n if (this.isAdvancedRendererComponentRefType(renderer)) {\n cellSettings.renderer = this.dynamicComponentService.createRendererWithFactory(renderer, props);\n } else if (this.isRendererComponentRefType(renderer) || this.isTemplateRef(renderer)) {\n cellSettings.renderer = this.dynamicComponentService.createRendererFromComponent(renderer, 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(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) || this.isAdvancedEditorComponentRefType(settings.editor))\n ?.forEach((cellSettings) => {\n if (this.isAdvancedEditorComponentRefType(cellSettings.editor)) {\n const component = createComponent(cellSettings.editor, {\n environmentInjector: this.environmentInjector,\n });\n cellSettings.editor = FactoryEditorAdapter(component);\n } else {\n const component = createComponent(cellSettings.editor as Type<HotCellEditorComponent<any>>, {\n environmentInjector: this.environmentInjector,\n });\n cellSettings['_editorComponentReference'] = component;\n cellSettings['_environmentInjector'] = this.environmentInjector;\n cellSettings.editor = BaseEditorAdapter;\n }\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' &&\n !!(editor as any)?.ɵcmp &&\n (editor as any)?.EDITOR_MARKER === HotCellEditorComponent.EDITOR_MARKER;\n }\n\n private isAdvancedEditorComponentRefType(editor: any): editor is Type<HotCellEditorAdvancedComponent<any>> {\n // ecmp - we need it to check if the editor is a component\n return typeof editor === 'function' &&\n !!(editor as any)?.ɵcmp &&\n (editor as any)?.EDITOR_MARKER === HotCellEditorAdvancedComponent.EDITOR_MARKER;\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' &&\n !!(renderer as any)?.ɵcmp &&\n (renderer as any)?.RENDERER_MARKER === HotCellRendererComponent.RENDERER_MARKER;\n }\n\n private isAdvancedRendererComponentRefType(renderer: any): renderer is Type<HotCellRendererAdvancedComponent<any, any>> {\n // ecmp - we need it to check if the renderer is a component\n return typeof renderer === 'function' &&\n !!(renderer as any)?.ɵcmp &&\n (renderer as any)?.RENDERER_MARKER === HotCellRendererAdvancedComponent.RENDERER_MARKER;\n }\n\n private isTemplateRef(renderer: any): renderer is TemplateRef<any> {\n return renderer && typeof renderer.createEmbeddedView === 'function';\n }\n\n private isCustomRenderer(renderer: any): renderer is Type<HotCellRendererComponent<any, any>> |\n TemplateRef<any> |\n Type<HotCellRendererAdvancedComponent<any, any>> {\n return this.isRendererComponentRefType(renderer) ||\n this.isTemplateRef(renderer) ||\n this.isAdvancedRendererComponentRefType(renderer);\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 HotGlobalConfig {\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 theme to be used (ThemeBuilder instance or theme name string).\n * When set, takes precedence over `themeName` for Handsontable 17+.\n */\n theme?: object | string;\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<HotGlobalConfig>('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 HotGlobalConfigService {\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 {HotGlobalConfig}\n */\n private defaultConfig: HotGlobalConfig = {};\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<HotGlobalConfig>}\n */\n private configSubject = new BehaviorSubject<HotGlobalConfig>(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<HotGlobalConfig> {\n return this.configSubject.asObservable();\n }\n\n constructor(\n @Inject(HOT_GLOBAL_CONFIG) globalConfig: HotGlobalConfig\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 global configuration for Handsontable.\n *\n * @param config - An object containing configuration options.\n * Each Handsontable instance can override this configuration by providing its own settings.\n */\n setConfig(config: HotGlobalConfig) {\n this.configSubject.next({ ...this.defaultConfig, ...config });\n }\n\n /**\n * Retrieves the current Handsontable configuration.\n *\n * @returns An object with the current settings.\n */\n getConfig(): HotGlobalConfig {\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 ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n EnvironmentInjector,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport Handsontable from 'handsontable/base';\nimport { HotSettingsResolver } from './services/hot-settings-resolver.service';\nimport { HotGlobalConfigService } from './services/hot-global-config.service';\nimport { GridSettings } from './models/grid-settings';\nimport { skip } from 'rxjs/operators';\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 standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\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 /** The data for the Handsontable instance. */\n @Input() data: Handsontable.GridSettings['data'] | null = null;\n /** The settings for the Handsontable instance. */\n @Input() settings: GridSettings = {};\n\n @ViewChild('container')\n private container: ElementRef<HTMLDivElement>;\n\n /** The Handsontable instance. */\n private __hotInstance: Handsontable | null = null;\n\n constructor(\n private readonly _hotSettingsResolver: HotSettingsResolver,\n private readonly _hotConfig: HotGlobalConfigService,\n private readonly ngZone: NgZone,\n private readonly environmentInjector: EnvironmentInjector,\n private readonly destroyRef: DestroyRef,\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 (this.__hotInstance?.isDestroyed) {\n console.warn(HOT_DESTROYED_WARNING);\n return null;\n }\n\n return this.__hotInstance;\n }\n\n /**\n * Sets the Handsontable instance.\n * @param hotInstance The Handsontable instance to set.\n */\n private set hotInstance(hotInstance: Handsontable | null) {\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);\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 (this.hotInstance as any)._angularEnvironmentInjector = this.environmentInjector;\n\n this.hotInstance.init();\n });\n\n this._hotConfig.config$.pipe(skip(1), takeUntilDestroyed(this.destroyRef)).subscribe(() => {\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 this.destroyEditorComponentRefs();\n const newOptions: Handsontable.GridSettings = this._hotSettingsResolver.applyCustomSettings(\n changes.settings.currentValue\n );\n\n const dataChanged = changes.data && !changes.data.firstChange;\n this.updateHotTable(dataChanged ? { ...newOptions, data: changes.data.currentValue } : newOptions);\n return;\n }\n\n if (changes.data && !changes.data.firstChange) {\n this.ngZone.runOutsideAngular(() => {\n this.hotInstance.updateData(changes.data.currentValue);\n });\n }\n }\n\n /**\n * Destroys the Handsontable instance and clears the columns from custom editors.\n */\n ngOnDestroy(): void {\n if (!this.hotInstance) {\n return;\n }\n\n this.destroyEditorComponentRefs();\n\n this.ngZone.runOutsideAngular(() => {\n this.hotInstance.destroy();\n this.hotInstance = null;\n });\n }\n\n private destroyEditorComponentRefs(): void {\n const columns = this.hotInstance.getSettings().columns;\n\n if (Array.isArray(columns)) {\n columns.forEach((column) => column._editorComponentReference?.destroy());\n }\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 const initOnlySettingKeys = new Set<string>(\n (this.hotInstance.getSettings() as any)?._initOnlySettings ?? []\n );\n const filteredSettings: Handsontable.GridSettings = {};\n\n for (const key of Object.keys(newSettings)) {\n if (!initOnlySettingKeys.has(key)) {\n (filteredSettings as any)[key] = (newSettings as any)[key];\n }\n }\n\n this.ngZone.runOutsideAngular(() => {\n this.hotInstance.updateSettings(filteredSettings, 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 HotGlobalConfigService 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.language = settings.language ?? hotConfig.language;\n\n const theme = settings.theme ?? hotConfig.theme;\n const themeName = settings.themeName ?? hotConfig.themeName;\n\n if (theme !== undefined) {\n negotiatedSettings.theme = theme as Handsontable.GridSettings['theme'];\n } else if (themeName) {\n negotiatedSettings.themeName = themeName;\n }\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 } from '@angular/core';\nimport { HotTableComponent } from './hot-table.component';\n\n@NgModule({\n imports: [HotTableComponent],\n exports: [HotTableComponent],\n})\nexport class HotTableModule {\n /**\n * Placeholder for the library version.\n * Replaced automatically during the pre-build/post-build process.\n */\n static readonly version = '17.1.0-rc5';\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-global-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 * from './lib/renderer/hot-cell-renderer-advanced.component';\nexport * from './lib/editor/hot-cell-editor-advanced.component';\nexport * from './lib/editor/models/keyboard-shortcut-config';\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":["i1.DynamicComponentService","i1.HotSettingsResolver","i2.HotGlobalConfigService"],"mappings":"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"}
|
|
@@ -29,5 +29,5 @@ export declare class CustomEditorPlaceholderComponent {
|
|
|
29
29
|
*/
|
|
30
30
|
detachEditor(): void;
|
|
31
31
|
static ɵfac: i0.ɵɵFactoryDeclaration<CustomEditorPlaceholderComponent, never>;
|
|
32
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<CustomEditorPlaceholderComponent, "ng-component", never, { "top": { "alias": "top"; "required": false; }; "left": { "alias": "left"; "required": false; }; "height": { "alias": "height"; "required": false; }; "width": { "alias": "width"; "required": false; }; "isVisible": { "alias": "isVisible"; "required": false; }; "placeholderCustomClass": { "alias": "placeholderCustomClass"; "required": false; }; "componentRef": { "alias": "componentRef"; "required": false; }; }, {}, never, never,
|
|
32
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CustomEditorPlaceholderComponent, "ng-component", never, { "top": { "alias": "top"; "required": false; }; "left": { "alias": "left"; "required": false; }; "height": { "alias": "height"; "required": false; }; "width": { "alias": "width"; "required": false; }; "isVisible": { "alias": "isVisible"; "required": false; }; "placeholderCustomClass": { "alias": "placeholderCustomClass"; "required": false; }; "componentRef": { "alias": "componentRef"; "required": false; }; }, {}, never, never, true, never>;
|
|
33
33
|
}
|
|
@@ -1,25 +1,24 @@
|
|
|
1
|
-
import { AfterViewInit,
|
|
1
|
+
import { AfterViewInit, DestroyRef, EnvironmentInjector, NgZone, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';
|
|
2
2
|
import Handsontable from 'handsontable/base';
|
|
3
3
|
import { HotSettingsResolver } from './services/hot-settings-resolver.service';
|
|
4
4
|
import { HotGlobalConfigService } from './services/hot-global-config.service';
|
|
5
5
|
import { GridSettings } from './models/grid-settings';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
|
-
export declare const HOT_DESTROYED_WARNING
|
|
7
|
+
export declare const HOT_DESTROYED_WARNING = "The Handsontable instance bound to this component was destroyed and cannot be used properly.";
|
|
8
8
|
export declare class HotTableComponent implements AfterViewInit, OnChanges, OnDestroy {
|
|
9
|
-
private _hotSettingsResolver;
|
|
10
|
-
private _hotConfig;
|
|
11
|
-
ngZone
|
|
9
|
+
private readonly _hotSettingsResolver;
|
|
10
|
+
private readonly _hotConfig;
|
|
11
|
+
private readonly ngZone;
|
|
12
12
|
private readonly environmentInjector;
|
|
13
|
+
private readonly destroyRef;
|
|
13
14
|
/** The data for the Handsontable instance. */
|
|
14
15
|
data: Handsontable.GridSettings['data'] | null;
|
|
15
16
|
/** The settings for the Handsontable instance. */
|
|
16
17
|
settings: GridSettings;
|
|
17
|
-
|
|
18
|
-
container: ElementRef<HTMLDivElement>;
|
|
18
|
+
private container;
|
|
19
19
|
/** The Handsontable instance. */
|
|
20
20
|
private __hotInstance;
|
|
21
|
-
|
|
22
|
-
constructor(_hotSettingsResolver: HotSettingsResolver, _hotConfig: HotGlobalConfigService, ngZone: NgZone, environmentInjector: EnvironmentInjector);
|
|
21
|
+
constructor(_hotSettingsResolver: HotSettingsResolver, _hotConfig: HotGlobalConfigService, ngZone: NgZone, environmentInjector: EnvironmentInjector, destroyRef: DestroyRef);
|
|
23
22
|
/**
|
|
24
23
|
* Gets the Handsontable instance.
|
|
25
24
|
* @returns The Handsontable instance or `null` if it's not yet been created or has been destroyed.
|
|
@@ -40,6 +39,7 @@ export declare class HotTableComponent implements AfterViewInit, OnChanges, OnDe
|
|
|
40
39
|
* Destroys the Handsontable instance and clears the columns from custom editors.
|
|
41
40
|
*/
|
|
42
41
|
ngOnDestroy(): void;
|
|
42
|
+
private destroyEditorComponentRefs;
|
|
43
43
|
/**
|
|
44
44
|
* Updates the Handsontable instance with new settings.
|
|
45
45
|
* @param newSettings The new settings to apply to the Handsontable instance.
|
|
@@ -57,5 +57,5 @@ export declare class HotTableComponent implements AfterViewInit, OnChanges, OnDe
|
|
|
57
57
|
*/
|
|
58
58
|
private getNegotiatedSettings;
|
|
59
59
|
static ɵfac: i0.ɵɵFactoryDeclaration<HotTableComponent, never>;
|
|
60
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<HotTableComponent, "hot-table", never, { "data": { "alias": "data"; "required": false; }; "settings": { "alias": "settings"; "required": false; }; }, {}, never, never,
|
|
60
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<HotTableComponent, "hot-table", never, { "data": { "alias": "data"; "required": false; }; "settings": { "alias": "settings"; "required": false; }; }, {}, never, never, true, never>;
|
|
61
61
|
}
|
|
@@ -1,16 +1,12 @@
|
|
|
1
|
-
import { ModuleWithProviders } from '@angular/core';
|
|
2
1
|
import * as i0 from "@angular/core";
|
|
3
2
|
import * as i1 from "./hot-table.component";
|
|
4
|
-
import * as i2 from "./editor/custom-editor-placeholder.component";
|
|
5
3
|
export declare class HotTableModule {
|
|
6
4
|
/**
|
|
7
5
|
* Placeholder for the library version.
|
|
8
6
|
* Replaced automatically during the pre-build/post-build process.
|
|
9
7
|
*/
|
|
10
|
-
static version
|
|
11
|
-
constructor();
|
|
12
|
-
static forRoot(): ModuleWithProviders<HotTableModule>;
|
|
8
|
+
static readonly version = "17.1.0-rc5";
|
|
13
9
|
static ɵfac: i0.ɵɵFactoryDeclaration<HotTableModule, never>;
|
|
14
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<HotTableModule, [typeof i1.HotTableComponent
|
|
10
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<HotTableModule, never, [typeof i1.HotTableComponent], [typeof i1.HotTableComponent]>;
|
|
15
11
|
static ɵinj: i0.ɵɵInjectorDeclaration<HotTableModule>;
|
|
16
12
|
}
|
|
@@ -29,5 +29,5 @@ export declare abstract class HotCellRendererAdvancedComponent<TValue extends st
|
|
|
29
29
|
*/
|
|
30
30
|
getProps(): TProps;
|
|
31
31
|
static ɵfac: i0.ɵɵFactoryDeclaration<HotCellRendererAdvancedComponent<any, any>, never>;
|
|
32
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<HotCellRendererAdvancedComponent<any, any>, "hot-cell-renderer-advanced", never, { "value": { "alias": "value"; "required": false; }; "instance": { "alias": "instance"; "required": false; }; "td": { "alias": "td"; "required": false; }; "row": { "alias": "row"; "required": false; }; "col": { "alias": "col"; "required": false; }; "prop": { "alias": "prop"; "required": false; }; "cellProperties": { "alias": "cellProperties"; "required": false; }; }, {}, never, never,
|
|
32
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<HotCellRendererAdvancedComponent<any, any>, "hot-cell-renderer-advanced", never, { "value": { "alias": "value"; "required": false; }; "instance": { "alias": "instance"; "required": false; }; "td": { "alias": "td"; "required": false; }; "row": { "alias": "row"; "required": false; }; "col": { "alias": "col"; "required": false; }; "prop": { "alias": "prop"; "required": false; }; "cellProperties": { "alias": "cellProperties"; "required": false; }; }, {}, never, never, true, never>;
|
|
33
33
|
}
|
|
@@ -29,5 +29,5 @@ export declare abstract class HotCellRendererComponent<TValue extends string | n
|
|
|
29
29
|
*/
|
|
30
30
|
getProps(): TProps;
|
|
31
31
|
static ɵfac: i0.ɵɵFactoryDeclaration<HotCellRendererComponent<any, any>, never>;
|
|
32
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<HotCellRendererComponent<any, any>, "hot-cell-renderer", never, { "value": { "alias": "value"; "required": false; }; "instance": { "alias": "instance"; "required": false; }; "td": { "alias": "td"; "required": false; }; "row": { "alias": "row"; "required": false; }; "col": { "alias": "col"; "required": false; }; "prop": { "alias": "prop"; "required": false; }; "cellProperties": { "alias": "cellProperties"; "required": false; }; }, {}, never, never,
|
|
32
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<HotCellRendererComponent<any, any>, "hot-cell-renderer", never, { "value": { "alias": "value"; "required": false; }; "instance": { "alias": "instance"; "required": false; }; "td": { "alias": "td"; "required": false; }; "row": { "alias": "row"; "required": false; }; "col": { "alias": "col"; "required": false; }; "prop": { "alias": "prop"; "required": false; }; "cellProperties": { "alias": "cellProperties"; "required": false; }; }, {}, never, never, true, never>;
|
|
33
33
|
}
|
|
@@ -6,21 +6,20 @@ import * as i0 from "@angular/core";
|
|
|
6
6
|
* Service to resolve and apply custom settings for Handsontable settings object.
|
|
7
7
|
*/
|
|
8
8
|
export declare class HotSettingsResolver {
|
|
9
|
-
private dynamicComponentService;
|
|
9
|
+
private readonly dynamicComponentService;
|
|
10
10
|
private readonly environmentInjector;
|
|
11
|
-
|
|
11
|
+
private readonly ngZone;
|
|
12
|
+
constructor(dynamicComponentService: DynamicComponentService, environmentInjector: EnvironmentInjector, ngZone: NgZone);
|
|
12
13
|
/**
|
|
13
14
|
* Applies custom settings to the provided GridSettings.
|
|
14
15
|
* @param settings The original grid settings.
|
|
15
|
-
* @param ngZone The NgZone instance to run hooks inside the zone context.
|
|
16
16
|
* @returns The merged grid settings with custom settings applied.
|
|
17
17
|
*/
|
|
18
|
-
applyCustomSettings(settings: GridSettings
|
|
18
|
+
applyCustomSettings(settings: GridSettings): GridSettingsInternal;
|
|
19
19
|
/**
|
|
20
20
|
* Ensures that hook callbacks in the provided grid settings run inside Angular's zone.
|
|
21
21
|
*
|
|
22
22
|
* @param settings The original grid settings.
|
|
23
|
-
* @param ngZone The NgZone instance to run hooks inside the zone context.
|
|
24
23
|
*/
|
|
25
24
|
private wrapHooksInNgZone;
|
|
26
25
|
/**
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@handsontable/angular-wrapper","version":"17.1.0-
|
|
1
|
+
{"name":"@handsontable/angular-wrapper","version":"17.1.0-rc5","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/core":">=16.0.0 <22.0.0","handsontable":"^17.0.0","rxjs":"^7.0.0"},"publishConfig":{"directory":"dist/hot-table","linkDirectory":true},"module":"fesm2022/handsontable-angular-wrapper.mjs","typings":"index.d.ts","exports":{"./package.json":{"default":"./package.json"},".":{"types":"./index.d.ts","default":"./fesm2022/handsontable-angular-wrapper.mjs"}},"sideEffects":false,"optionalDependencies":{"tslib":"^2.3.0"}}
|