@toolbox-web/grid-angular 0.16.2 → 0.18.0

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.
Files changed (63) hide show
  1. package/README.md +130 -2
  2. package/fesm2022/toolbox-web-grid-angular-features-clipboard.mjs +1 -8
  3. package/fesm2022/toolbox-web-grid-angular-features-clipboard.mjs.map +1 -1
  4. package/fesm2022/toolbox-web-grid-angular-features-column-virtualization.mjs +1 -8
  5. package/fesm2022/toolbox-web-grid-angular-features-column-virtualization.mjs.map +1 -1
  6. package/fesm2022/toolbox-web-grid-angular-features-context-menu.mjs +1 -8
  7. package/fesm2022/toolbox-web-grid-angular-features-context-menu.mjs.map +1 -1
  8. package/fesm2022/toolbox-web-grid-angular-features-editing.mjs +1 -13
  9. package/fesm2022/toolbox-web-grid-angular-features-editing.mjs.map +1 -1
  10. package/fesm2022/toolbox-web-grid-angular-features-export.mjs +1 -8
  11. package/fesm2022/toolbox-web-grid-angular-features-export.mjs.map +1 -1
  12. package/fesm2022/toolbox-web-grid-angular-features-filtering.mjs +1 -8
  13. package/fesm2022/toolbox-web-grid-angular-features-filtering.mjs.map +1 -1
  14. package/fesm2022/toolbox-web-grid-angular-features-grouping-columns.mjs +1 -8
  15. package/fesm2022/toolbox-web-grid-angular-features-grouping-columns.mjs.map +1 -1
  16. package/fesm2022/toolbox-web-grid-angular-features-grouping-rows.mjs +1 -5
  17. package/fesm2022/toolbox-web-grid-angular-features-grouping-rows.mjs.map +1 -1
  18. package/fesm2022/toolbox-web-grid-angular-features-master-detail.mjs +1 -5
  19. package/fesm2022/toolbox-web-grid-angular-features-master-detail.mjs.map +1 -1
  20. package/fesm2022/toolbox-web-grid-angular-features-multi-sort.mjs +1 -14
  21. package/fesm2022/toolbox-web-grid-angular-features-multi-sort.mjs.map +1 -1
  22. package/fesm2022/toolbox-web-grid-angular-features-pinned-columns.mjs +1 -5
  23. package/fesm2022/toolbox-web-grid-angular-features-pinned-columns.mjs.map +1 -1
  24. package/fesm2022/toolbox-web-grid-angular-features-pinned-rows.mjs +1 -8
  25. package/fesm2022/toolbox-web-grid-angular-features-pinned-rows.mjs.map +1 -1
  26. package/fesm2022/toolbox-web-grid-angular-features-pivot.mjs +1 -5
  27. package/fesm2022/toolbox-web-grid-angular-features-pivot.mjs.map +1 -1
  28. package/fesm2022/toolbox-web-grid-angular-features-print.mjs +1 -8
  29. package/fesm2022/toolbox-web-grid-angular-features-print.mjs.map +1 -1
  30. package/fesm2022/toolbox-web-grid-angular-features-reorder-columns.mjs +21 -0
  31. package/fesm2022/toolbox-web-grid-angular-features-reorder-columns.mjs.map +1 -0
  32. package/fesm2022/toolbox-web-grid-angular-features-reorder-rows.mjs +21 -0
  33. package/fesm2022/toolbox-web-grid-angular-features-reorder-rows.mjs.map +1 -0
  34. package/fesm2022/toolbox-web-grid-angular-features-reorder.mjs +3 -20
  35. package/fesm2022/toolbox-web-grid-angular-features-reorder.mjs.map +1 -1
  36. package/fesm2022/toolbox-web-grid-angular-features-responsive.mjs +1 -8
  37. package/fesm2022/toolbox-web-grid-angular-features-responsive.mjs.map +1 -1
  38. package/fesm2022/toolbox-web-grid-angular-features-row-reorder.mjs +3 -20
  39. package/fesm2022/toolbox-web-grid-angular-features-row-reorder.mjs.map +1 -1
  40. package/fesm2022/toolbox-web-grid-angular-features-selection.mjs +1 -10
  41. package/fesm2022/toolbox-web-grid-angular-features-selection.mjs.map +1 -1
  42. package/fesm2022/toolbox-web-grid-angular-features-server-side.mjs +1 -5
  43. package/fesm2022/toolbox-web-grid-angular-features-server-side.mjs.map +1 -1
  44. package/fesm2022/toolbox-web-grid-angular-features-tree.mjs +1 -8
  45. package/fesm2022/toolbox-web-grid-angular-features-tree.mjs.map +1 -1
  46. package/fesm2022/toolbox-web-grid-angular-features-undo-redo.mjs +1 -8
  47. package/fesm2022/toolbox-web-grid-angular-features-undo-redo.mjs.map +1 -1
  48. package/fesm2022/toolbox-web-grid-angular-features-visibility.mjs +1 -8
  49. package/fesm2022/toolbox-web-grid-angular-features-visibility.mjs.map +1 -1
  50. package/fesm2022/toolbox-web-grid-angular.mjs +291 -117
  51. package/fesm2022/toolbox-web-grid-angular.mjs.map +1 -1
  52. package/package.json +9 -1
  53. package/types/toolbox-web-grid-angular-features-export.d.ts.map +1 -1
  54. package/types/toolbox-web-grid-angular-features-filtering.d.ts.map +1 -1
  55. package/types/toolbox-web-grid-angular-features-print.d.ts.map +1 -1
  56. package/types/toolbox-web-grid-angular-features-reorder-columns.d.ts +3 -0
  57. package/types/toolbox-web-grid-angular-features-reorder-columns.d.ts.map +1 -0
  58. package/types/toolbox-web-grid-angular-features-reorder-rows.d.ts +3 -0
  59. package/types/toolbox-web-grid-angular-features-reorder-rows.d.ts.map +1 -0
  60. package/types/toolbox-web-grid-angular-features-selection.d.ts.map +1 -1
  61. package/types/toolbox-web-grid-angular-features-undo-redo.d.ts.map +1 -1
  62. package/types/toolbox-web-grid-angular.d.ts +131 -79
  63. package/types/toolbox-web-grid-angular.d.ts.map +1 -1
@@ -3,6 +3,8 @@ import { inject, ElementRef, contentChild, TemplateRef, effect, Directive, input
3
3
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
4
  import { FormGroup } from '@angular/forms';
5
5
  import { startWith, debounceTime } from 'rxjs/operators';
6
+ import { createPluginFromFeature } from '@toolbox-web/grid/features/registry';
7
+ export { clearFeatureRegistry, createPluginFromFeature, getFeatureFactory, getRegisteredFeatures, isFeatureRegistered, registerFeature } from '@toolbox-web/grid/features/registry';
6
8
  import { DataGridElement } from '@toolbox-web/grid';
7
9
 
8
10
  // #endregion
@@ -1573,6 +1575,10 @@ class GridAdapter {
1573
1575
  if (config.typeDefaults) {
1574
1576
  result.typeDefaults = this.processTypeDefaults(config.typeDefaults);
1575
1577
  }
1578
+ // Process loadingRenderer - convert Angular component class to function
1579
+ if (config.loadingRenderer && isComponentClass(config.loadingRenderer)) {
1580
+ result.loadingRenderer = this.createComponentLoadingRenderer(config.loadingRenderer);
1581
+ }
1576
1582
  return result;
1577
1583
  }
1578
1584
  /**
@@ -1619,6 +1625,14 @@ class GridAdapter {
1619
1625
  if (column.editor && isComponentClass(column.editor)) {
1620
1626
  processed.editor = this.createComponentEditor(column.editor);
1621
1627
  }
1628
+ // Convert headerRenderer component class to function
1629
+ if (column.headerRenderer && isComponentClass(column.headerRenderer)) {
1630
+ processed.headerRenderer = this.createComponentHeaderRenderer(column.headerRenderer);
1631
+ }
1632
+ // Convert headerLabelRenderer component class to function
1633
+ if (column.headerLabelRenderer && isComponentClass(column.headerLabelRenderer)) {
1634
+ processed.headerLabelRenderer = this.createComponentHeaderLabelRenderer(column.headerLabelRenderer);
1635
+ }
1622
1636
  return processed;
1623
1637
  }
1624
1638
  /**
@@ -2092,6 +2106,222 @@ class GridAdapter {
2092
2106
  return hostElement;
2093
2107
  };
2094
2108
  }
2109
+ /**
2110
+ * Creates a header renderer function from an Angular component class.
2111
+ * Mounts the component with full header context (column, value, sortState, etc.).
2112
+ * @internal
2113
+ */
2114
+ createComponentHeaderRenderer(componentClass) {
2115
+ return (ctx) => {
2116
+ const hostElement = document.createElement('span');
2117
+ hostElement.style.display = 'contents';
2118
+ const componentRef = createComponent(componentClass, {
2119
+ environmentInjector: this.injector,
2120
+ hostElement,
2121
+ });
2122
+ this.setComponentInputs(componentRef, {
2123
+ column: ctx.column,
2124
+ value: ctx.value,
2125
+ sortState: ctx.sortState,
2126
+ filterActive: ctx.filterActive,
2127
+ renderSortIcon: ctx.renderSortIcon,
2128
+ renderFilterButton: ctx.renderFilterButton,
2129
+ });
2130
+ this.appRef.attachView(componentRef.hostView);
2131
+ this.componentRefs.push(componentRef);
2132
+ componentRef.changeDetectorRef.detectChanges();
2133
+ return hostElement;
2134
+ };
2135
+ }
2136
+ /**
2137
+ * Creates a header label renderer function from an Angular component class.
2138
+ * Mounts the component with label context (column, value).
2139
+ * @internal
2140
+ */
2141
+ createComponentHeaderLabelRenderer(componentClass) {
2142
+ return (ctx) => {
2143
+ const hostElement = document.createElement('span');
2144
+ hostElement.style.display = 'contents';
2145
+ const componentRef = createComponent(componentClass, {
2146
+ environmentInjector: this.injector,
2147
+ hostElement,
2148
+ });
2149
+ this.setComponentInputs(componentRef, {
2150
+ column: ctx.column,
2151
+ value: ctx.value,
2152
+ });
2153
+ this.appRef.attachView(componentRef.hostView);
2154
+ this.componentRefs.push(componentRef);
2155
+ componentRef.changeDetectorRef.detectChanges();
2156
+ return hostElement;
2157
+ };
2158
+ }
2159
+ /**
2160
+ * Creates a group header renderer function from an Angular component class.
2161
+ *
2162
+ * The component should accept group header inputs (id, label, columns, firstIndex, isImplicit).
2163
+ * Returns the host element directly (groupHeaderRenderer returns an element, not void).
2164
+ * @internal
2165
+ */
2166
+ createComponentGroupHeaderRenderer(componentClass) {
2167
+ return (params) => {
2168
+ const hostElement = document.createElement('span');
2169
+ hostElement.style.display = 'contents';
2170
+ const componentRef = createComponent(componentClass, {
2171
+ environmentInjector: this.injector,
2172
+ hostElement,
2173
+ });
2174
+ this.setComponentInputs(componentRef, {
2175
+ id: params.id,
2176
+ label: params.label,
2177
+ columns: params.columns,
2178
+ firstIndex: params.firstIndex,
2179
+ isImplicit: params.isImplicit,
2180
+ });
2181
+ this.appRef.attachView(componentRef.hostView);
2182
+ this.componentRefs.push(componentRef);
2183
+ componentRef.changeDetectorRef.detectChanges();
2184
+ return hostElement;
2185
+ };
2186
+ }
2187
+ /**
2188
+ * Processes a GroupingColumnsConfig, converting component class references
2189
+ * to actual renderer functions.
2190
+ *
2191
+ * @param config - Angular grouping columns configuration with possible component class references
2192
+ * @returns Processed GroupingColumnsConfig with actual renderer functions
2193
+ */
2194
+ processGroupingColumnsConfig(config) {
2195
+ if (config.groupHeaderRenderer && isComponentClass(config.groupHeaderRenderer)) {
2196
+ return {
2197
+ ...config,
2198
+ groupHeaderRenderer: this.createComponentGroupHeaderRenderer(config.groupHeaderRenderer),
2199
+ };
2200
+ }
2201
+ return config;
2202
+ }
2203
+ /**
2204
+ * Processes a GroupingRowsConfig, converting component class references
2205
+ * to actual renderer functions.
2206
+ *
2207
+ * @param config - Angular grouping rows configuration with possible component class references
2208
+ * @returns Processed GroupingRowsConfig with actual renderer functions
2209
+ */
2210
+ processGroupingRowsConfig(config) {
2211
+ if (config.groupRowRenderer && isComponentClass(config.groupRowRenderer)) {
2212
+ return {
2213
+ ...config,
2214
+ groupRowRenderer: this.createComponentGroupRowRenderer(config.groupRowRenderer),
2215
+ };
2216
+ }
2217
+ return config;
2218
+ }
2219
+ /**
2220
+ * Processes a PinnedRowsConfig, converting component class references
2221
+ * in `customPanels[].render` to actual renderer functions.
2222
+ *
2223
+ * @param config - Angular pinned rows configuration with possible component class references
2224
+ * @returns Processed PinnedRowsConfig with actual renderer functions
2225
+ */
2226
+ processPinnedRowsConfig(config) {
2227
+ if (!Array.isArray(config.customPanels))
2228
+ return config;
2229
+ const hasComponentRender = config.customPanels.some((panel) => isComponentClass(panel.render));
2230
+ if (!hasComponentRender)
2231
+ return config;
2232
+ return {
2233
+ ...config,
2234
+ customPanels: config.customPanels.map((panel) => {
2235
+ if (!isComponentClass(panel.render))
2236
+ return panel;
2237
+ return {
2238
+ ...panel,
2239
+ render: this.createComponentPinnedRowsPanelRenderer(panel.render),
2240
+ };
2241
+ }),
2242
+ };
2243
+ }
2244
+ /**
2245
+ * Creates a pinned rows panel renderer function from an Angular component class.
2246
+ *
2247
+ * The component should accept inputs from PinnedRowsContext (totalRows, filteredRows,
2248
+ * selectedRows, columns, rows, grid).
2249
+ * @internal
2250
+ */
2251
+ createComponentPinnedRowsPanelRenderer(componentClass) {
2252
+ return (ctx) => {
2253
+ const hostElement = document.createElement('span');
2254
+ hostElement.style.display = 'contents';
2255
+ const componentRef = createComponent(componentClass, {
2256
+ environmentInjector: this.injector,
2257
+ hostElement,
2258
+ });
2259
+ this.setComponentInputs(componentRef, {
2260
+ totalRows: ctx.totalRows,
2261
+ filteredRows: ctx.filteredRows,
2262
+ selectedRows: ctx.selectedRows,
2263
+ columns: ctx.columns,
2264
+ rows: ctx.rows,
2265
+ grid: ctx.grid,
2266
+ });
2267
+ this.appRef.attachView(componentRef.hostView);
2268
+ this.componentRefs.push(componentRef);
2269
+ componentRef.changeDetectorRef.detectChanges();
2270
+ return hostElement;
2271
+ };
2272
+ }
2273
+ /**
2274
+ * Creates a loading renderer function from an Angular component class.
2275
+ *
2276
+ * The component should accept a `size` input ('large' | 'small').
2277
+ * @internal
2278
+ */
2279
+ createComponentLoadingRenderer(componentClass) {
2280
+ return (ctx) => {
2281
+ const hostElement = document.createElement('span');
2282
+ hostElement.style.display = 'contents';
2283
+ const componentRef = createComponent(componentClass, {
2284
+ environmentInjector: this.injector,
2285
+ hostElement,
2286
+ });
2287
+ this.setComponentInputs(componentRef, {
2288
+ size: ctx.size,
2289
+ });
2290
+ this.appRef.attachView(componentRef.hostView);
2291
+ this.componentRefs.push(componentRef);
2292
+ componentRef.changeDetectorRef.detectChanges();
2293
+ return hostElement;
2294
+ };
2295
+ }
2296
+ /**
2297
+ * Creates a group row renderer function from an Angular component class.
2298
+ *
2299
+ * The component should accept group row inputs (key, value, depth, rows, expanded, toggleExpand).
2300
+ * Returns the host element directly (groupRowRenderer returns an element, not void).
2301
+ * @internal
2302
+ */
2303
+ createComponentGroupRowRenderer(componentClass) {
2304
+ return (params) => {
2305
+ const hostElement = document.createElement('span');
2306
+ hostElement.style.display = 'contents';
2307
+ const componentRef = createComponent(componentClass, {
2308
+ environmentInjector: this.injector,
2309
+ hostElement,
2310
+ });
2311
+ this.setComponentInputs(componentRef, {
2312
+ key: params.key,
2313
+ value: params.value,
2314
+ depth: params.depth,
2315
+ rows: params.rows,
2316
+ expanded: params.expanded,
2317
+ toggleExpand: params.toggleExpand,
2318
+ });
2319
+ this.appRef.attachView(componentRef.hostView);
2320
+ this.componentRefs.push(componentRef);
2321
+ componentRef.changeDetectorRef.detectChanges();
2322
+ return hostElement;
2323
+ };
2324
+ }
2095
2325
  /**
2096
2326
  * Creates a filter panel renderer function from an Angular component class.
2097
2327
  *
@@ -2552,9 +2782,9 @@ function injectGrid() {
2552
2782
  /**
2553
2783
  * Feature Registry for @toolbox-web/grid-angular
2554
2784
  *
2555
- * This module provides a synchronous registry for plugin factories.
2556
- * Features are registered via side-effect imports, enabling tree-shaking
2557
- * while maintaining the clean input-based API.
2785
+ * Delegates to the core registry at `@toolbox-web/grid/features/registry`.
2786
+ * This module re-exports core functions so existing feature modules continue
2787
+ * to work without changing their import paths.
2558
2788
  *
2559
2789
  * @example
2560
2790
  * ```typescript
@@ -2566,96 +2796,7 @@ function injectGrid() {
2566
2796
  * <tbw-grid [selection]="'range'" [filtering]="{ debounceMs: 200 }" />
2567
2797
  * ```
2568
2798
  */
2569
- /**
2570
- * Central registry mapping feature names to their plugin factories.
2571
- * Populated by side-effect feature imports.
2572
- */
2573
- const featureRegistry = new Map();
2574
- /**
2575
- * Set of features that have been used without being registered.
2576
- * Used to show helpful warnings only once per feature.
2577
- */
2578
- const warnedFeatures = new Set();
2579
- /**
2580
- * Register a feature's plugin factory.
2581
- * Called by side-effect feature imports.
2582
- *
2583
- * @param name - The feature name (matches the input name on Grid directive)
2584
- * @param factory - Function that creates the plugin instance
2585
- *
2586
- * @example
2587
- * ```ts
2588
- * // features/selection.ts
2589
- * import { SelectionPlugin } from '@toolbox-web/grid/plugins/selection';
2590
- * import { registerFeature } from '../lib/feature-registry';
2591
- *
2592
- * registerFeature('selection', (config) => new SelectionPlugin(config));
2593
- * ```
2594
- */
2595
- function registerFeature(name, factory) {
2596
- featureRegistry.set(name, {
2597
- factory: factory,
2598
- name,
2599
- });
2600
- }
2601
- /**
2602
- * Check if a feature is registered.
2603
- */
2604
- function isFeatureRegistered(name) {
2605
- return featureRegistry.has(name);
2606
- }
2607
- /**
2608
- * Get a registered feature's factory.
2609
- * Returns undefined if not registered.
2610
- */
2611
- function getFeatureFactory(name) {
2612
- return featureRegistry.get(name)?.factory;
2613
- }
2614
- /**
2615
- * Get all registered feature names.
2616
- * Useful for debugging.
2617
- */
2618
- function getRegisteredFeatures() {
2619
- return Array.from(featureRegistry.keys());
2620
- }
2621
- /**
2622
- * Create a plugin instance for a feature.
2623
- * Shows a helpful warning if the feature is not registered.
2624
- *
2625
- * @param name - Feature name
2626
- * @param config - Plugin configuration
2627
- * @returns Plugin instance or undefined if not registered
2628
- */
2629
- function createPluginFromFeature(name, config) {
2630
- const entry = featureRegistry.get(name);
2631
- if (!entry) {
2632
- // Show warning only once per feature in development
2633
- const isDev = typeof window !== 'undefined' &&
2634
- (window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1');
2635
- if (!warnedFeatures.has(name) && isDev) {
2636
- warnedFeatures.add(name);
2637
- console.warn(`[tbw-grid] Feature "${name}" input is set but the feature is not registered.\n` +
2638
- `Add this import to enable it:\n\n` +
2639
- ` import '@toolbox-web/grid-angular/features/${toKebabCase(name)}';\n`);
2640
- }
2641
- return undefined;
2642
- }
2643
- return entry.factory(config);
2644
- }
2645
- /**
2646
- * Convert camelCase to kebab-case for import paths.
2647
- */
2648
- function toKebabCase(str) {
2649
- return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
2650
- }
2651
- /**
2652
- * Clear the registry. For testing only.
2653
- * @internal
2654
- */
2655
- function clearFeatureRegistry() {
2656
- featureRegistry.clear();
2657
- warnedFeatures.clear();
2658
- }
2799
+ // Re-export core registry — all adapters share the same registry Map
2659
2800
 
2660
2801
  /**
2661
2802
  * Base class for Angular filter panel components.
@@ -2667,7 +2808,7 @@ function clearFeatureRegistry() {
2667
2808
  * ## Usage
2668
2809
  *
2669
2810
  * ```typescript
2670
- * import { Component } from '@angular/core';
2811
+ * import { Component, viewChild, ElementRef } from '@angular/core';
2671
2812
  * import { BaseFilterPanel } from '@toolbox-web/grid-angular';
2672
2813
  *
2673
2814
  * @Component({
@@ -2679,10 +2820,10 @@ function clearFeatureRegistry() {
2679
2820
  * `
2680
2821
  * })
2681
2822
  * export class TextFilterComponent extends BaseFilterPanel {
2682
- * @ViewChild('input') input!: ElementRef<HTMLInputElement>;
2823
+ * input = viewChild.required<ElementRef<HTMLInputElement>>('input');
2683
2824
  *
2684
2825
  * applyFilter(): void {
2685
- * this.params().applyTextFilter('contains', this.input.nativeElement.value);
2826
+ * this.params().applyTextFilter('contains', this.input().nativeElement.value);
2686
2827
  * }
2687
2828
  * }
2688
2829
  * ```
@@ -3275,7 +3416,7 @@ let anchorCounter = 0;
3275
3416
  * ## Usage
3276
3417
  *
3277
3418
  * ```typescript
3278
- * import { Component, ViewChild, ElementRef } from '@angular/core';
3419
+ * import { Component, viewChild, ElementRef, effect } from '@angular/core';
3279
3420
  * import { BaseOverlayEditor } from '@toolbox-web/grid-angular';
3280
3421
  *
3281
3422
  * @Component({
@@ -3298,18 +3439,22 @@ let anchorCounter = 0;
3298
3439
  * `
3299
3440
  * })
3300
3441
  * export class DateEditorComponent extends BaseOverlayEditor<MyRow, string> {
3301
- * @ViewChild('panel') panelRef!: ElementRef<HTMLElement>;
3302
- * @ViewChild('inlineInput') inputRef!: ElementRef<HTMLInputElement>;
3442
+ * panelRef = viewChild.required<ElementRef<HTMLElement>>('panel');
3443
+ * inputRef = viewChild.required<ElementRef<HTMLInputElement>>('inlineInput');
3303
3444
  *
3304
3445
  * protected override overlayPosition = 'below' as const;
3305
3446
  *
3306
- * ngAfterViewInit(): void {
3307
- * this.initOverlay(this.panelRef.nativeElement);
3308
- * if (this.isCellFocused()) this.showOverlay();
3447
+ * constructor() {
3448
+ * super();
3449
+ * effect(() => {
3450
+ * const panel = this.panelRef().nativeElement;
3451
+ * this.initOverlay(panel);
3452
+ * if (this.isCellFocused()) this.showOverlay();
3453
+ * });
3309
3454
  * }
3310
3455
  *
3311
3456
  * protected getInlineInput(): HTMLInputElement | null {
3312
- * return this.inputRef?.nativeElement ?? null;
3457
+ * return this.inputRef()?.nativeElement ?? null;
3313
3458
  * }
3314
3459
  *
3315
3460
  * protected onOverlayOutsideClick(): void {
@@ -3370,7 +3515,7 @@ class BaseOverlayEditor extends BaseGridEditor {
3370
3515
  /**
3371
3516
  * Initialise the overlay with the panel element.
3372
3517
  *
3373
- * Call this in `ngAfterViewInit` with your `@ViewChild` panel reference.
3518
+ * Call this in an `effect()` or `afterNextRender()` with your `viewChild` panel reference.
3374
3519
  * The panel is moved to `<body>` and hidden until {@link showOverlay} is called.
3375
3520
  *
3376
3521
  * @param panel - The overlay panel DOM element
@@ -4796,14 +4941,18 @@ class Grid {
4796
4941
  *
4797
4942
  * **Requires feature import:**
4798
4943
  * ```typescript
4799
- * import '@toolbox-web/grid-angular/features/reorder';
4944
+ * import '@toolbox-web/grid-angular/features/reorder-columns';
4800
4945
  * ```
4801
4946
  *
4802
4947
  * @example
4803
4948
  * ```html
4804
- * <tbw-grid [reorder]="true" />
4949
+ * <tbw-grid [reorderColumns]="true" />
4805
4950
  * ```
4806
4951
  */
4952
+ reorderColumns = input(...(ngDevMode ? [undefined, { debugName: "reorderColumns" }] : []));
4953
+ /**
4954
+ * @deprecated Use `reorderColumns` instead. Will be removed in v2.0.
4955
+ */
4807
4956
  reorder = input(...(ngDevMode ? [undefined, { debugName: "reorder" }] : []));
4808
4957
  /**
4809
4958
  * Enable column visibility toggle panel.
@@ -4848,7 +4997,7 @@ class Grid {
4848
4997
  *
4849
4998
  * @example
4850
4999
  * ```html
4851
- * <tbw-grid [groupingColumns]="{ columnGroups: [...] }" />
5000
+ * <tbw-grid [groupingColumns]="true" />
4852
5001
  * ```
4853
5002
  */
4854
5003
  groupingColumns = input(...(ngDevMode ? [undefined, { debugName: "groupingColumns" }] : []));
@@ -4871,14 +5020,18 @@ class Grid {
4871
5020
  *
4872
5021
  * **Requires feature import:**
4873
5022
  * ```typescript
4874
- * import '@toolbox-web/grid-angular/features/row-reorder';
5023
+ * import '@toolbox-web/grid-angular/features/reorder-rows';
4875
5024
  * ```
4876
5025
  *
4877
5026
  * @example
4878
5027
  * ```html
4879
- * <tbw-grid [rowReorder]="true" />
5028
+ * <tbw-grid [reorderRows]="true" />
4880
5029
  * ```
4881
5030
  */
5031
+ reorderRows = input(...(ngDevMode ? [undefined, { debugName: "reorderRows" }] : []));
5032
+ /**
5033
+ * @deprecated Use `reorderRows` instead. Will be removed in v2.0.
5034
+ */
4882
5035
  rowReorder = input(...(ngDevMode ? [undefined, { debugName: "rowReorder" }] : []));
4883
5036
  /**
4884
5037
  * Enable row grouping by field values.
@@ -5387,14 +5540,35 @@ class Grid {
5387
5540
  // multiSort is the primary input; sorting is a deprecated alias
5388
5541
  addPlugin('multiSort', this.multiSort() ?? this.sorting());
5389
5542
  addPlugin('filtering', this.filtering());
5390
- addPlugin('reorder', this.reorder());
5543
+ addPlugin('reorderColumns', this.reorderColumns() ?? this.reorder());
5391
5544
  addPlugin('visibility', this.visibility());
5392
5545
  addPlugin('pinnedColumns', this.pinnedColumns());
5393
- addPlugin('groupingColumns', this.groupingColumns());
5546
+ // Pre-process groupingColumns config to bridge Angular component classes
5547
+ const gcConfig = this.groupingColumns();
5548
+ if (gcConfig && typeof gcConfig === 'object' && this.adapter) {
5549
+ addPlugin('groupingColumns', this.adapter.processGroupingColumnsConfig(gcConfig));
5550
+ }
5551
+ else {
5552
+ addPlugin('groupingColumns', gcConfig);
5553
+ }
5394
5554
  addPlugin('columnVirtualization', this.columnVirtualization());
5395
- addPlugin('rowReorder', this.rowReorder());
5396
- addPlugin('groupingRows', this.groupingRows());
5397
- addPlugin('pinnedRows', this.pinnedRows());
5555
+ addPlugin('reorderRows', this.reorderRows() ?? this.rowReorder());
5556
+ // Pre-process groupingRows config to bridge Angular component classes
5557
+ const grConfig = this.groupingRows();
5558
+ if (grConfig && typeof grConfig === 'object' && this.adapter) {
5559
+ addPlugin('groupingRows', this.adapter.processGroupingRowsConfig(grConfig));
5560
+ }
5561
+ else {
5562
+ addPlugin('groupingRows', grConfig);
5563
+ }
5564
+ // Pre-process pinnedRows config to bridge Angular component classes in customPanels
5565
+ const prConfig = this.pinnedRows();
5566
+ if (prConfig && typeof prConfig === 'object' && this.adapter) {
5567
+ addPlugin('pinnedRows', this.adapter.processPinnedRowsConfig(prConfig));
5568
+ }
5569
+ else {
5570
+ addPlugin('pinnedRows', prConfig);
5571
+ }
5398
5572
  addPlugin('tree', this.tree());
5399
5573
  addPlugin('masterDetail', this.masterDetail());
5400
5574
  addPlugin('responsive', this.responsive());
@@ -5543,12 +5717,12 @@ class Grid {
5543
5717
  }
5544
5718
  }
5545
5719
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: Grid, deps: [], target: i0.ɵɵFactoryTarget.Directive });
5546
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.1", type: Grid, isStandalone: true, selector: "tbw-grid", inputs: { customStyles: { classPropertyName: "customStyles", publicName: "customStyles", isSignal: true, isRequired: false, transformFunction: null }, sortable: { classPropertyName: "sortable", publicName: "sortable", isSignal: true, isRequired: false, transformFunction: null }, filterable: { classPropertyName: "filterable", publicName: "filterable", isSignal: true, isRequired: false, transformFunction: null }, selectable: { classPropertyName: "selectable", publicName: "selectable", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, fitMode: { classPropertyName: "fitMode", publicName: "fitMode", isSignal: true, isRequired: false, transformFunction: null }, gridConfig: { classPropertyName: "gridConfig", publicName: "gridConfig", isSignal: true, isRequired: false, transformFunction: null }, angularConfig: { classPropertyName: "angularConfig", publicName: "angularConfig", isSignal: true, isRequired: false, transformFunction: null }, selection: { classPropertyName: "selection", publicName: "selection", isSignal: true, isRequired: false, transformFunction: null }, editing: { classPropertyName: "editing", publicName: "editing", isSignal: true, isRequired: false, transformFunction: null }, clipboard: { classPropertyName: "clipboard", publicName: "clipboard", isSignal: true, isRequired: false, transformFunction: null }, contextMenu: { classPropertyName: "contextMenu", publicName: "contextMenu", isSignal: true, isRequired: false, transformFunction: null }, multiSort: { classPropertyName: "multiSort", publicName: "multiSort", isSignal: true, isRequired: false, transformFunction: null }, sorting: { classPropertyName: "sorting", publicName: "sorting", isSignal: true, isRequired: false, transformFunction: null }, filtering: { classPropertyName: "filtering", publicName: "filtering", isSignal: true, isRequired: false, transformFunction: null }, reorder: { classPropertyName: "reorder", publicName: "reorder", isSignal: true, isRequired: false, transformFunction: null }, visibility: { classPropertyName: "visibility", publicName: "visibility", isSignal: true, isRequired: false, transformFunction: null }, pinnedColumns: { classPropertyName: "pinnedColumns", publicName: "pinnedColumns", isSignal: true, isRequired: false, transformFunction: null }, groupingColumns: { classPropertyName: "groupingColumns", publicName: "groupingColumns", isSignal: true, isRequired: false, transformFunction: null }, columnVirtualization: { classPropertyName: "columnVirtualization", publicName: "columnVirtualization", isSignal: true, isRequired: false, transformFunction: null }, rowReorder: { classPropertyName: "rowReorder", publicName: "rowReorder", isSignal: true, isRequired: false, transformFunction: null }, groupingRows: { classPropertyName: "groupingRows", publicName: "groupingRows", isSignal: true, isRequired: false, transformFunction: null }, pinnedRows: { classPropertyName: "pinnedRows", publicName: "pinnedRows", isSignal: true, isRequired: false, transformFunction: null }, tree: { classPropertyName: "tree", publicName: "tree", isSignal: true, isRequired: false, transformFunction: null }, masterDetail: { classPropertyName: "masterDetail", publicName: "masterDetail", isSignal: true, isRequired: false, transformFunction: null }, responsive: { classPropertyName: "responsive", publicName: "responsive", isSignal: true, isRequired: false, transformFunction: null }, undoRedo: { classPropertyName: "undoRedo", publicName: "undoRedo", isSignal: true, isRequired: false, transformFunction: null }, exportFeature: { classPropertyName: "exportFeature", publicName: "export", isSignal: true, isRequired: false, transformFunction: null }, print: { classPropertyName: "print", publicName: "print", isSignal: true, isRequired: false, transformFunction: null }, pivot: { classPropertyName: "pivot", publicName: "pivot", isSignal: true, isRequired: false, transformFunction: null }, serverSide: { classPropertyName: "serverSide", publicName: "serverSide", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { cellClick: "cellClick", rowClick: "rowClick", cellActivate: "cellActivate", cellChange: "cellChange", cellCommit: "cellCommit", rowCommit: "rowCommit", changedRowsReset: "changedRowsReset", sortChange: "sortChange", filterChange: "filterChange", columnResize: "columnResize", columnMove: "columnMove", columnVisibility: "columnVisibility", columnStateChange: "columnStateChange", selectionChange: "selectionChange", rowMove: "rowMove", groupToggle: "groupToggle", treeExpand: "treeExpand", detailExpand: "detailExpand", responsiveChange: "responsiveChange", copy: "copy", paste: "paste", undoRedoAction: "undoRedoAction", exportComplete: "exportComplete", printStart: "printStart", printComplete: "printComplete" }, ngImport: i0 });
5720
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.1", type: Grid, isStandalone: true, selector: "tbw-grid", inputs: { customStyles: { classPropertyName: "customStyles", publicName: "customStyles", isSignal: true, isRequired: false, transformFunction: null }, sortable: { classPropertyName: "sortable", publicName: "sortable", isSignal: true, isRequired: false, transformFunction: null }, filterable: { classPropertyName: "filterable", publicName: "filterable", isSignal: true, isRequired: false, transformFunction: null }, selectable: { classPropertyName: "selectable", publicName: "selectable", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, fitMode: { classPropertyName: "fitMode", publicName: "fitMode", isSignal: true, isRequired: false, transformFunction: null }, gridConfig: { classPropertyName: "gridConfig", publicName: "gridConfig", isSignal: true, isRequired: false, transformFunction: null }, angularConfig: { classPropertyName: "angularConfig", publicName: "angularConfig", isSignal: true, isRequired: false, transformFunction: null }, selection: { classPropertyName: "selection", publicName: "selection", isSignal: true, isRequired: false, transformFunction: null }, editing: { classPropertyName: "editing", publicName: "editing", isSignal: true, isRequired: false, transformFunction: null }, clipboard: { classPropertyName: "clipboard", publicName: "clipboard", isSignal: true, isRequired: false, transformFunction: null }, contextMenu: { classPropertyName: "contextMenu", publicName: "contextMenu", isSignal: true, isRequired: false, transformFunction: null }, multiSort: { classPropertyName: "multiSort", publicName: "multiSort", isSignal: true, isRequired: false, transformFunction: null }, sorting: { classPropertyName: "sorting", publicName: "sorting", isSignal: true, isRequired: false, transformFunction: null }, filtering: { classPropertyName: "filtering", publicName: "filtering", isSignal: true, isRequired: false, transformFunction: null }, reorderColumns: { classPropertyName: "reorderColumns", publicName: "reorderColumns", isSignal: true, isRequired: false, transformFunction: null }, reorder: { classPropertyName: "reorder", publicName: "reorder", isSignal: true, isRequired: false, transformFunction: null }, visibility: { classPropertyName: "visibility", publicName: "visibility", isSignal: true, isRequired: false, transformFunction: null }, pinnedColumns: { classPropertyName: "pinnedColumns", publicName: "pinnedColumns", isSignal: true, isRequired: false, transformFunction: null }, groupingColumns: { classPropertyName: "groupingColumns", publicName: "groupingColumns", isSignal: true, isRequired: false, transformFunction: null }, columnVirtualization: { classPropertyName: "columnVirtualization", publicName: "columnVirtualization", isSignal: true, isRequired: false, transformFunction: null }, reorderRows: { classPropertyName: "reorderRows", publicName: "reorderRows", isSignal: true, isRequired: false, transformFunction: null }, rowReorder: { classPropertyName: "rowReorder", publicName: "rowReorder", isSignal: true, isRequired: false, transformFunction: null }, groupingRows: { classPropertyName: "groupingRows", publicName: "groupingRows", isSignal: true, isRequired: false, transformFunction: null }, pinnedRows: { classPropertyName: "pinnedRows", publicName: "pinnedRows", isSignal: true, isRequired: false, transformFunction: null }, tree: { classPropertyName: "tree", publicName: "tree", isSignal: true, isRequired: false, transformFunction: null }, masterDetail: { classPropertyName: "masterDetail", publicName: "masterDetail", isSignal: true, isRequired: false, transformFunction: null }, responsive: { classPropertyName: "responsive", publicName: "responsive", isSignal: true, isRequired: false, transformFunction: null }, undoRedo: { classPropertyName: "undoRedo", publicName: "undoRedo", isSignal: true, isRequired: false, transformFunction: null }, exportFeature: { classPropertyName: "exportFeature", publicName: "export", isSignal: true, isRequired: false, transformFunction: null }, print: { classPropertyName: "print", publicName: "print", isSignal: true, isRequired: false, transformFunction: null }, pivot: { classPropertyName: "pivot", publicName: "pivot", isSignal: true, isRequired: false, transformFunction: null }, serverSide: { classPropertyName: "serverSide", publicName: "serverSide", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { cellClick: "cellClick", rowClick: "rowClick", cellActivate: "cellActivate", cellChange: "cellChange", cellCommit: "cellCommit", rowCommit: "rowCommit", changedRowsReset: "changedRowsReset", sortChange: "sortChange", filterChange: "filterChange", columnResize: "columnResize", columnMove: "columnMove", columnVisibility: "columnVisibility", columnStateChange: "columnStateChange", selectionChange: "selectionChange", rowMove: "rowMove", groupToggle: "groupToggle", treeExpand: "treeExpand", detailExpand: "detailExpand", responsiveChange: "responsiveChange", copy: "copy", paste: "paste", undoRedoAction: "undoRedoAction", exportComplete: "exportComplete", printStart: "printStart", printComplete: "printComplete" }, ngImport: i0 });
5547
5721
  }
5548
5722
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: Grid, decorators: [{
5549
5723
  type: Directive,
5550
5724
  args: [{ selector: 'tbw-grid' }]
5551
- }], ctorParameters: () => [], propDecorators: { customStyles: [{ type: i0.Input, args: [{ isSignal: true, alias: "customStyles", required: false }] }], sortable: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortable", required: false }] }], filterable: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterable", required: false }] }], selectable: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectable", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], rows: [{ type: i0.Input, args: [{ isSignal: true, alias: "rows", required: false }] }], columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }], fitMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "fitMode", required: false }] }], gridConfig: [{ type: i0.Input, args: [{ isSignal: true, alias: "gridConfig", required: false }] }], angularConfig: [{ type: i0.Input, args: [{ isSignal: true, alias: "angularConfig", required: false }] }], selection: [{ type: i0.Input, args: [{ isSignal: true, alias: "selection", required: false }] }], editing: [{ type: i0.Input, args: [{ isSignal: true, alias: "editing", required: false }] }], clipboard: [{ type: i0.Input, args: [{ isSignal: true, alias: "clipboard", required: false }] }], contextMenu: [{ type: i0.Input, args: [{ isSignal: true, alias: "contextMenu", required: false }] }], multiSort: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiSort", required: false }] }], sorting: [{ type: i0.Input, args: [{ isSignal: true, alias: "sorting", required: false }] }], filtering: [{ type: i0.Input, args: [{ isSignal: true, alias: "filtering", required: false }] }], reorder: [{ type: i0.Input, args: [{ isSignal: true, alias: "reorder", required: false }] }], visibility: [{ type: i0.Input, args: [{ isSignal: true, alias: "visibility", required: false }] }], pinnedColumns: [{ type: i0.Input, args: [{ isSignal: true, alias: "pinnedColumns", required: false }] }], groupingColumns: [{ type: i0.Input, args: [{ isSignal: true, alias: "groupingColumns", required: false }] }], columnVirtualization: [{ type: i0.Input, args: [{ isSignal: true, alias: "columnVirtualization", required: false }] }], rowReorder: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowReorder", required: false }] }], groupingRows: [{ type: i0.Input, args: [{ isSignal: true, alias: "groupingRows", required: false }] }], pinnedRows: [{ type: i0.Input, args: [{ isSignal: true, alias: "pinnedRows", required: false }] }], tree: [{ type: i0.Input, args: [{ isSignal: true, alias: "tree", required: false }] }], masterDetail: [{ type: i0.Input, args: [{ isSignal: true, alias: "masterDetail", required: false }] }], responsive: [{ type: i0.Input, args: [{ isSignal: true, alias: "responsive", required: false }] }], undoRedo: [{ type: i0.Input, args: [{ isSignal: true, alias: "undoRedo", required: false }] }], exportFeature: [{ type: i0.Input, args: [{ isSignal: true, alias: "export", required: false }] }], print: [{ type: i0.Input, args: [{ isSignal: true, alias: "print", required: false }] }], pivot: [{ type: i0.Input, args: [{ isSignal: true, alias: "pivot", required: false }] }], serverSide: [{ type: i0.Input, args: [{ isSignal: true, alias: "serverSide", required: false }] }], cellClick: [{ type: i0.Output, args: ["cellClick"] }], rowClick: [{ type: i0.Output, args: ["rowClick"] }], cellActivate: [{ type: i0.Output, args: ["cellActivate"] }], cellChange: [{ type: i0.Output, args: ["cellChange"] }], cellCommit: [{ type: i0.Output, args: ["cellCommit"] }], rowCommit: [{ type: i0.Output, args: ["rowCommit"] }], changedRowsReset: [{ type: i0.Output, args: ["changedRowsReset"] }], sortChange: [{ type: i0.Output, args: ["sortChange"] }], filterChange: [{ type: i0.Output, args: ["filterChange"] }], columnResize: [{ type: i0.Output, args: ["columnResize"] }], columnMove: [{ type: i0.Output, args: ["columnMove"] }], columnVisibility: [{ type: i0.Output, args: ["columnVisibility"] }], columnStateChange: [{ type: i0.Output, args: ["columnStateChange"] }], selectionChange: [{ type: i0.Output, args: ["selectionChange"] }], rowMove: [{ type: i0.Output, args: ["rowMove"] }], groupToggle: [{ type: i0.Output, args: ["groupToggle"] }], treeExpand: [{ type: i0.Output, args: ["treeExpand"] }], detailExpand: [{ type: i0.Output, args: ["detailExpand"] }], responsiveChange: [{ type: i0.Output, args: ["responsiveChange"] }], copy: [{ type: i0.Output, args: ["copy"] }], paste: [{ type: i0.Output, args: ["paste"] }], undoRedoAction: [{ type: i0.Output, args: ["undoRedoAction"] }], exportComplete: [{ type: i0.Output, args: ["exportComplete"] }], printStart: [{ type: i0.Output, args: ["printStart"] }], printComplete: [{ type: i0.Output, args: ["printComplete"] }] } });
5725
+ }], ctorParameters: () => [], propDecorators: { customStyles: [{ type: i0.Input, args: [{ isSignal: true, alias: "customStyles", required: false }] }], sortable: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortable", required: false }] }], filterable: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterable", required: false }] }], selectable: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectable", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], rows: [{ type: i0.Input, args: [{ isSignal: true, alias: "rows", required: false }] }], columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }], fitMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "fitMode", required: false }] }], gridConfig: [{ type: i0.Input, args: [{ isSignal: true, alias: "gridConfig", required: false }] }], angularConfig: [{ type: i0.Input, args: [{ isSignal: true, alias: "angularConfig", required: false }] }], selection: [{ type: i0.Input, args: [{ isSignal: true, alias: "selection", required: false }] }], editing: [{ type: i0.Input, args: [{ isSignal: true, alias: "editing", required: false }] }], clipboard: [{ type: i0.Input, args: [{ isSignal: true, alias: "clipboard", required: false }] }], contextMenu: [{ type: i0.Input, args: [{ isSignal: true, alias: "contextMenu", required: false }] }], multiSort: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiSort", required: false }] }], sorting: [{ type: i0.Input, args: [{ isSignal: true, alias: "sorting", required: false }] }], filtering: [{ type: i0.Input, args: [{ isSignal: true, alias: "filtering", required: false }] }], reorderColumns: [{ type: i0.Input, args: [{ isSignal: true, alias: "reorderColumns", required: false }] }], reorder: [{ type: i0.Input, args: [{ isSignal: true, alias: "reorder", required: false }] }], visibility: [{ type: i0.Input, args: [{ isSignal: true, alias: "visibility", required: false }] }], pinnedColumns: [{ type: i0.Input, args: [{ isSignal: true, alias: "pinnedColumns", required: false }] }], groupingColumns: [{ type: i0.Input, args: [{ isSignal: true, alias: "groupingColumns", required: false }] }], columnVirtualization: [{ type: i0.Input, args: [{ isSignal: true, alias: "columnVirtualization", required: false }] }], reorderRows: [{ type: i0.Input, args: [{ isSignal: true, alias: "reorderRows", required: false }] }], rowReorder: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowReorder", required: false }] }], groupingRows: [{ type: i0.Input, args: [{ isSignal: true, alias: "groupingRows", required: false }] }], pinnedRows: [{ type: i0.Input, args: [{ isSignal: true, alias: "pinnedRows", required: false }] }], tree: [{ type: i0.Input, args: [{ isSignal: true, alias: "tree", required: false }] }], masterDetail: [{ type: i0.Input, args: [{ isSignal: true, alias: "masterDetail", required: false }] }], responsive: [{ type: i0.Input, args: [{ isSignal: true, alias: "responsive", required: false }] }], undoRedo: [{ type: i0.Input, args: [{ isSignal: true, alias: "undoRedo", required: false }] }], exportFeature: [{ type: i0.Input, args: [{ isSignal: true, alias: "export", required: false }] }], print: [{ type: i0.Input, args: [{ isSignal: true, alias: "print", required: false }] }], pivot: [{ type: i0.Input, args: [{ isSignal: true, alias: "pivot", required: false }] }], serverSide: [{ type: i0.Input, args: [{ isSignal: true, alias: "serverSide", required: false }] }], cellClick: [{ type: i0.Output, args: ["cellClick"] }], rowClick: [{ type: i0.Output, args: ["rowClick"] }], cellActivate: [{ type: i0.Output, args: ["cellActivate"] }], cellChange: [{ type: i0.Output, args: ["cellChange"] }], cellCommit: [{ type: i0.Output, args: ["cellCommit"] }], rowCommit: [{ type: i0.Output, args: ["rowCommit"] }], changedRowsReset: [{ type: i0.Output, args: ["changedRowsReset"] }], sortChange: [{ type: i0.Output, args: ["sortChange"] }], filterChange: [{ type: i0.Output, args: ["filterChange"] }], columnResize: [{ type: i0.Output, args: ["columnResize"] }], columnMove: [{ type: i0.Output, args: ["columnMove"] }], columnVisibility: [{ type: i0.Output, args: ["columnVisibility"] }], columnStateChange: [{ type: i0.Output, args: ["columnStateChange"] }], selectionChange: [{ type: i0.Output, args: ["selectionChange"] }], rowMove: [{ type: i0.Output, args: ["rowMove"] }], groupToggle: [{ type: i0.Output, args: ["groupToggle"] }], treeExpand: [{ type: i0.Output, args: ["treeExpand"] }], detailExpand: [{ type: i0.Output, args: ["detailExpand"] }], responsiveChange: [{ type: i0.Output, args: ["responsiveChange"] }], copy: [{ type: i0.Output, args: ["copy"] }], paste: [{ type: i0.Output, args: ["paste"] }], undoRedoAction: [{ type: i0.Output, args: ["undoRedoAction"] }], exportComplete: [{ type: i0.Output, args: ["exportComplete"] }], printStart: [{ type: i0.Output, args: ["printStart"] }], printComplete: [{ type: i0.Output, args: ["printComplete"] }] } });
5552
5726
 
5553
5727
  /**
5554
5728
  * @packageDocumentation
@@ -5562,5 +5736,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
5562
5736
  * Generated bundle index. Do not edit.
5563
5737
  */
5564
5738
 
5565
- export { AngularGridAdapter, BaseFilterPanel, BaseGridEditor, BaseGridEditorCVA, BaseOverlayEditor, GRID_ICONS, GRID_TYPE_DEFAULTS, Grid, GridAdapter, GridColumnEditor, GridColumnView, GridDetailView, GridFormArray, GridIconRegistry, GridLazyForm, GridResponsiveCard, GridToolPanel, GridTypeRegistry, TbwEditor as TbwCellEditor, TbwRenderer as TbwCellView, TbwEditor, TbwGridColumn, TbwGridHeader, TbwGridToolButtons, TbwRenderer, clearFeatureRegistry, createPluginFromFeature, getFeatureFactory, getFormArrayContext, getLazyFormContext, getRegisteredFeatures, injectGrid, isComponentClass, isFeatureRegistered, provideGridIcons, provideGridTypeDefaults, registerFeature };
5739
+ export { AngularGridAdapter, BaseFilterPanel, BaseGridEditor, BaseGridEditorCVA, BaseOverlayEditor, GRID_ICONS, GRID_TYPE_DEFAULTS, Grid, GridAdapter, GridColumnEditor, GridColumnView, GridDetailView, GridFormArray, GridIconRegistry, GridLazyForm, GridResponsiveCard, GridToolPanel, GridTypeRegistry, TbwEditor as TbwCellEditor, TbwRenderer as TbwCellView, TbwEditor, TbwGridColumn, TbwGridHeader, TbwGridToolButtons, TbwRenderer, getFormArrayContext, getLazyFormContext, injectGrid, isComponentClass, provideGridIcons, provideGridTypeDefaults };
5566
5740
  //# sourceMappingURL=toolbox-web-grid-angular.mjs.map