@toolbox-web/grid-angular 0.7.2 → 0.8.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.
package/README.md CHANGED
@@ -14,6 +14,7 @@ Angular adapter for `@toolbox-web/grid` data grid component. Provides directives
14
14
  - ✅ **Template-driven editors** - Use `<ng-template>` for custom cell editors
15
15
  - ✅ **Component-class column config** - Specify component classes directly in `gridConfig.columns`
16
16
  - ✅ **Type-level defaults** - App-wide renderers/editors via `provideGridTypeDefaults()`
17
+ - ✅ **Icon configuration** - App-wide icon overrides via `provideGridIcons()`
17
18
  - ✅ **Reactive Forms integration** - Use `formControlName` and `formControl` bindings
18
19
  - ✅ **Auto-wiring** - Editor components just emit events, no manual binding needed
19
20
  - ✅ **Full type safety** - Typed template contexts (`GridCellContext`, `GridEditorContext`)
@@ -359,6 +360,68 @@ export class MyGridComponent {
359
360
  | `GridTypeRegistry` | Injectable service for dynamic registration |
360
361
  | `GRID_TYPE_DEFAULTS` | Injection token for type defaults |
361
362
 
363
+ ## App-Wide Icon Configuration
364
+
365
+ Customize grid icons at the application level using `provideGridIcons()`:
366
+
367
+ ```typescript
368
+ // app.config.ts
369
+ import { ApplicationConfig } from '@angular/core';
370
+ import { provideGridIcons } from '@toolbox-web/grid-angular';
371
+
372
+ export const appConfig: ApplicationConfig = {
373
+ providers: [
374
+ provideGridIcons({
375
+ expand: '➕',
376
+ collapse: '➖',
377
+ sortAsc: '↑',
378
+ sortDesc: '↓',
379
+ filter: '<svg viewBox="0 0 16 16">...</svg>',
380
+ }),
381
+ ],
382
+ };
383
+ ```
384
+
385
+ **Dynamic Icon Registration:**
386
+
387
+ ```typescript
388
+ import { Component, inject, OnInit } from '@angular/core';
389
+ import { GridIconRegistry } from '@toolbox-web/grid-angular';
390
+
391
+ @Component({ ... })
392
+ export class AppComponent implements OnInit {
393
+ private iconRegistry = inject(GridIconRegistry);
394
+
395
+ ngOnInit() {
396
+ // Dynamically set icons
397
+ this.iconRegistry.set('expand', '▶');
398
+ this.iconRegistry.set('collapse', '▼');
399
+ }
400
+ }
401
+ ```
402
+
403
+ **Available Icons:**
404
+
405
+ | Icon | Default | Description |
406
+ | -------------- | ------- | ------------------------------------ |
407
+ | `expand` | `▶` | Expand icon for trees/groups/details |
408
+ | `collapse` | `▼` | Collapse icon |
409
+ | `sortAsc` | `▲` | Sort ascending indicator |
410
+ | `sortDesc` | `▼` | Sort descending indicator |
411
+ | `sortNone` | `⇅` | Unsorted indicator |
412
+ | `filter` | SVG | Filter icon in headers |
413
+ | `filterActive` | SVG | Filter icon when active |
414
+ | `submenuArrow` | `▶` | Context menu submenu arrow |
415
+ | `dragHandle` | `⋮⋮` | Drag handle for reordering |
416
+ | `toolPanel` | `☰` | Tool panel toggle icon |
417
+ | `print` | `🖨️` | Print button icon |
418
+
419
+ **Precedence (highest wins):**
420
+
421
+ 1. `gridConfig.icons` - Per-grid overrides
422
+ 2. `provideGridIcons()` - App-level defaults
423
+ 3. Built-in defaults
424
+
362
425
  ## Component-Class Column Config
363
426
 
364
427
  For maximum flexibility and type safety, you can specify Angular component classes directly in your `gridConfig.columns`. This approach gives you full control over the component lifecycle while keeping your grid configuration clean and concise.
@@ -782,6 +845,14 @@ if (context?.hasFormGroups) {
782
845
  | `GridTypeRegistry` | Injectable service for dynamic registration |
783
846
  | `GRID_TYPE_DEFAULTS` | Injection token for type defaults |
784
847
 
848
+ ### Icon Registry
849
+
850
+ | Export | Description |
851
+ | -------------------- | ------------------------------------------------ |
852
+ | `provideGridIcons()` | Provider factory for app-level icon overrides |
853
+ | `GridIconRegistry` | Injectable service for dynamic icon registration |
854
+ | `GRID_ICONS` | Injection token for icon overrides |
855
+
785
856
  ### Grid Directive Inputs
786
857
 
787
858
  | Input | Type | Description |
@@ -1612,6 +1612,149 @@ class AngularGridAdapter {
1612
1612
  }
1613
1613
  }
1614
1614
 
1615
+ /**
1616
+ * Icon configuration registry for Angular applications.
1617
+ *
1618
+ * Provides application-wide icon overrides for all grids via
1619
+ * Angular's dependency injection.
1620
+ */
1621
+ /**
1622
+ * Injection token for providing icon overrides at app level.
1623
+ */
1624
+ const GRID_ICONS = new InjectionToken('GRID_ICONS');
1625
+ /**
1626
+ * Injectable service for managing grid icons.
1627
+ *
1628
+ * Use `provideGridIcons()` in your app config to set up icons,
1629
+ * or inject this service for dynamic registration.
1630
+ *
1631
+ * @example
1632
+ * ```typescript
1633
+ * // App-level setup (app.config.ts)
1634
+ * export const appConfig: ApplicationConfig = {
1635
+ * providers: [
1636
+ * provideGridIcons({
1637
+ * expand: '➕',
1638
+ * collapse: '➖',
1639
+ * sortAsc: '↑',
1640
+ * sortDesc: '↓',
1641
+ * })
1642
+ * ]
1643
+ * };
1644
+ *
1645
+ * // Dynamic registration
1646
+ * @Component({ ... })
1647
+ * export class AppComponent {
1648
+ * private registry = inject(GridIconRegistry);
1649
+ *
1650
+ * ngOnInit() {
1651
+ * this.registry.set('filter', '<svg>...</svg>');
1652
+ * }
1653
+ * }
1654
+ * ```
1655
+ */
1656
+ class GridIconRegistry {
1657
+ icons = new Map();
1658
+ constructor() {
1659
+ // Merge any initial icons from provider
1660
+ const initial = inject(GRID_ICONS, { optional: true });
1661
+ if (initial) {
1662
+ for (const [key, value] of Object.entries(initial)) {
1663
+ this.icons.set(key, value);
1664
+ }
1665
+ }
1666
+ }
1667
+ /**
1668
+ * Set an icon override.
1669
+ *
1670
+ * @param name - The icon name (e.g., 'expand', 'collapse', 'filter')
1671
+ * @param value - The icon value (string text or SVG markup)
1672
+ */
1673
+ set(name, value) {
1674
+ this.icons.set(name, value);
1675
+ }
1676
+ /**
1677
+ * Get an icon value.
1678
+ */
1679
+ get(name) {
1680
+ return this.icons.get(name);
1681
+ }
1682
+ /**
1683
+ * Remove an icon override.
1684
+ */
1685
+ remove(name) {
1686
+ this.icons.delete(name);
1687
+ }
1688
+ /**
1689
+ * Check if an icon has an override.
1690
+ */
1691
+ has(name) {
1692
+ return this.icons.has(name);
1693
+ }
1694
+ /**
1695
+ * Get all icon overrides as a GridIcons partial.
1696
+ * Used internally by the adapter.
1697
+ *
1698
+ * @internal
1699
+ */
1700
+ getAll() {
1701
+ const result = {};
1702
+ for (const [key, value] of this.icons) {
1703
+ result[key] = value;
1704
+ }
1705
+ return result;
1706
+ }
1707
+ /**
1708
+ * Get all registered icon names.
1709
+ */
1710
+ getRegisteredIcons() {
1711
+ return Array.from(this.icons.keys());
1712
+ }
1713
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: GridIconRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1714
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: GridIconRegistry, providedIn: 'root' });
1715
+ }
1716
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: GridIconRegistry, decorators: [{
1717
+ type: Injectable,
1718
+ args: [{ providedIn: 'root' }]
1719
+ }], ctorParameters: () => [] });
1720
+ /**
1721
+ * Provides application-level icon overrides for all grids.
1722
+ *
1723
+ * Available icons to override:
1724
+ * - `expand` - Expand icon for collapsed items (trees, groups, details)
1725
+ * - `collapse` - Collapse icon for expanded items
1726
+ * - `sortAsc` - Sort ascending indicator
1727
+ * - `sortDesc` - Sort descending indicator
1728
+ * - `sortNone` - Sort neutral/unsorted indicator
1729
+ * - `submenuArrow` - Submenu arrow for context menus
1730
+ * - `dragHandle` - Drag handle icon for reordering
1731
+ * - `toolPanel` - Tool panel toggle icon in toolbar
1732
+ * - `filter` - Filter icon in column headers
1733
+ * - `filterActive` - Filter icon when filter is active
1734
+ * - `print` - Print icon for print button
1735
+ *
1736
+ * @example
1737
+ * ```typescript
1738
+ * // app.config.ts
1739
+ * import { provideGridIcons } from '@toolbox-web/grid-angular';
1740
+ *
1741
+ * export const appConfig: ApplicationConfig = {
1742
+ * providers: [
1743
+ * provideGridIcons({
1744
+ * expand: '➕',
1745
+ * collapse: '➖',
1746
+ * sortAsc: '↑',
1747
+ * sortDesc: '↓',
1748
+ * filter: '<svg viewBox="0 0 16 16">...</svg>',
1749
+ * })
1750
+ * ]
1751
+ * };
1752
+ * ```
1753
+ */
1754
+ function provideGridIcons(icons) {
1755
+ return makeEnvironmentProviders([{ provide: GRID_ICONS, useValue: icons }]);
1756
+ }
1757
+
1615
1758
  /**
1616
1759
  * Angular inject function for programmatic access to a grid instance.
1617
1760
  *
@@ -2186,6 +2329,7 @@ class Grid {
2186
2329
  injector = inject(EnvironmentInjector);
2187
2330
  appRef = inject(ApplicationRef);
2188
2331
  viewContainerRef = inject(ViewContainerRef);
2332
+ iconRegistry = inject(GridIconRegistry, { optional: true });
2189
2333
  adapter = null;
2190
2334
  constructor() {
2191
2335
  // Effect to process angularConfig and apply to grid
@@ -2215,6 +2359,13 @@ class Grid {
2215
2359
  if (selectableValue !== undefined) {
2216
2360
  coreConfigOverrides['selectable'] = selectableValue;
2217
2361
  }
2362
+ // Merge icon overrides from registry with any existing icons in config
2363
+ // Registry icons are base, config.icons override them
2364
+ const registryIcons = this.iconRegistry?.getAll();
2365
+ if (registryIcons && Object.keys(registryIcons).length > 0) {
2366
+ const existingIcons = processedConfig?.icons || config?.icons || {};
2367
+ coreConfigOverrides['icons'] = { ...registryIcons, ...existingIcons };
2368
+ }
2218
2369
  // Apply to the grid element
2219
2370
  const grid = this.elementRef.nativeElement;
2220
2371
  grid.gridConfig = {
@@ -2223,6 +2374,14 @@ class Grid {
2223
2374
  plugins: mergedPlugins.length > 0 ? mergedPlugins : undefined,
2224
2375
  };
2225
2376
  });
2377
+ // Effect to sync loading state to the grid element
2378
+ effect(() => {
2379
+ const loadingValue = this.loading();
2380
+ if (loadingValue === undefined)
2381
+ return;
2382
+ const grid = this.elementRef.nativeElement;
2383
+ grid.loading = loadingValue;
2384
+ });
2226
2385
  }
2227
2386
  /**
2228
2387
  * Custom CSS styles to inject into the grid.
@@ -2303,6 +2462,34 @@ class Grid {
2303
2462
  * ```
2304
2463
  */
2305
2464
  selectable = input(...(ngDevMode ? [undefined, { debugName: "selectable" }] : []));
2465
+ /**
2466
+ * Show a loading overlay on the grid.
2467
+ * Use this during initial data fetch or refresh operations.
2468
+ *
2469
+ * For row/cell loading states, access the grid element directly:
2470
+ * - `grid.setRowLoading(rowId, true/false)`
2471
+ * - `grid.setCellLoading(rowId, field, true/false)`
2472
+ *
2473
+ * @default false
2474
+ *
2475
+ * @example
2476
+ * ```html
2477
+ * <!-- Show loading during data fetch -->
2478
+ * <tbw-grid [loading]="isLoading" [rows]="rows" />
2479
+ * ```
2480
+ *
2481
+ * ```typescript
2482
+ * isLoading = true;
2483
+ *
2484
+ * ngOnInit() {
2485
+ * this.dataService.fetchData().subscribe(data => {
2486
+ * this.rows = data;
2487
+ * this.isLoading = false;
2488
+ * });
2489
+ * }
2490
+ * ```
2491
+ */
2492
+ loading = input(...(ngDevMode ? [undefined, { debugName: "loading" }] : []));
2306
2493
  /**
2307
2494
  * Angular-specific grid configuration that supports component classes for renderers/editors.
2308
2495
  *
@@ -3167,12 +3354,12 @@ class Grid {
3167
3354
  }
3168
3355
  }
3169
3356
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: Grid, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3170
- 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 }, 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: "exportFeature", 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 });
3357
+ 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 }, 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: "exportFeature", 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 });
3171
3358
  }
3172
3359
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: Grid, decorators: [{
3173
3360
  type: Directive,
3174
3361
  args: [{ selector: 'tbw-grid' }]
3175
- }], 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 }] }], 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: "exportFeature", 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"] }] } });
3362
+ }], 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 }] }], 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: "exportFeature", 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"] }] } });
3176
3363
 
3177
3364
  /**
3178
3365
  * @packageDocumentation
@@ -3185,5 +3372,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
3185
3372
  * Generated bundle index. Do not edit.
3186
3373
  */
3187
3374
 
3188
- export { AngularGridAdapter, BaseGridEditor, GRID_TYPE_DEFAULTS, Grid, GridColumnEditor, GridColumnView, GridDetailView, GridFormArray, GridResponsiveCard, GridToolPanel, GridTypeRegistry, TbwEditor as TbwCellEditor, TbwRenderer as TbwCellView, TbwEditor, TbwRenderer, clearFeatureRegistry, createPluginFromFeature, getFeatureFactory, getFormArrayContext, getRegisteredFeatures, injectGrid, isComponentClass, isFeatureRegistered, provideGridTypeDefaults, registerFeature };
3375
+ export { AngularGridAdapter, BaseGridEditor, GRID_ICONS, GRID_TYPE_DEFAULTS, Grid, GridColumnEditor, GridColumnView, GridDetailView, GridFormArray, GridIconRegistry, GridResponsiveCard, GridToolPanel, GridTypeRegistry, TbwEditor as TbwCellEditor, TbwRenderer as TbwCellView, TbwEditor, TbwRenderer, clearFeatureRegistry, createPluginFromFeature, getFeatureFactory, getFormArrayContext, getRegisteredFeatures, injectGrid, isComponentClass, isFeatureRegistered, provideGridIcons, provideGridTypeDefaults, registerFeature };
3189
3376
  //# sourceMappingURL=toolbox-web-grid-angular.mjs.map