@toolbox-web/grid-angular 1.3.0 → 1.4.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 (102) hide show
  1. package/README.md +146 -54
  2. package/fesm2022/toolbox-web-grid-angular-features-clipboard.mjs +58 -0
  3. package/fesm2022/toolbox-web-grid-angular-features-clipboard.mjs.map +1 -1
  4. package/fesm2022/toolbox-web-grid-angular-features-column-virtualization.mjs +37 -0
  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 +51 -0
  7. package/fesm2022/toolbox-web-grid-angular-features-context-menu.mjs.map +1 -1
  8. package/fesm2022/toolbox-web-grid-angular-features-editing.mjs +115 -1
  9. package/fesm2022/toolbox-web-grid-angular-features-editing.mjs.map +1 -1
  10. package/fesm2022/toolbox-web-grid-angular-features-export.mjs +55 -2
  11. package/fesm2022/toolbox-web-grid-angular-features-export.mjs.map +1 -1
  12. package/fesm2022/toolbox-web-grid-angular-features-filtering.mjs +159 -5
  13. package/fesm2022/toolbox-web-grid-angular-features-filtering.mjs.map +1 -1
  14. package/fesm2022/toolbox-web-grid-angular-features-grouping-columns.mjs +83 -0
  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 +82 -0
  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 +109 -2
  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 +38 -0
  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 +37 -0
  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 +103 -0
  25. package/fesm2022/toolbox-web-grid-angular-features-pinned-rows.mjs.map +1 -1
  26. package/fesm2022/toolbox-web-grid-angular-features-pivot.mjs +36 -0
  27. package/fesm2022/toolbox-web-grid-angular-features-pivot.mjs.map +1 -1
  28. package/fesm2022/toolbox-web-grid-angular-features-print.mjs +58 -2
  29. package/fesm2022/toolbox-web-grid-angular-features-print.mjs.map +1 -1
  30. package/fesm2022/toolbox-web-grid-angular-features-reorder-columns.mjs +52 -0
  31. package/fesm2022/toolbox-web-grid-angular-features-reorder-columns.mjs.map +1 -1
  32. package/fesm2022/toolbox-web-grid-angular-features-reorder-rows.mjs +41 -0
  33. package/fesm2022/toolbox-web-grid-angular-features-reorder-rows.mjs.map +1 -1
  34. package/fesm2022/toolbox-web-grid-angular-features-responsive.mjs +105 -2
  35. package/fesm2022/toolbox-web-grid-angular-features-responsive.mjs.map +1 -1
  36. package/fesm2022/toolbox-web-grid-angular-features-row-drag-drop.mjs +77 -0
  37. package/fesm2022/toolbox-web-grid-angular-features-row-drag-drop.mjs.map +1 -1
  38. package/fesm2022/toolbox-web-grid-angular-features-selection.mjs +52 -2
  39. package/fesm2022/toolbox-web-grid-angular-features-selection.mjs.map +1 -1
  40. package/fesm2022/toolbox-web-grid-angular-features-server-side.mjs +36 -0
  41. package/fesm2022/toolbox-web-grid-angular-features-server-side.mjs.map +1 -1
  42. package/fesm2022/toolbox-web-grid-angular-features-tooltip.mjs +36 -0
  43. package/fesm2022/toolbox-web-grid-angular-features-tooltip.mjs.map +1 -1
  44. package/fesm2022/toolbox-web-grid-angular-features-tree.mjs +53 -0
  45. package/fesm2022/toolbox-web-grid-angular-features-tree.mjs.map +1 -1
  46. package/fesm2022/toolbox-web-grid-angular-features-undo-redo.mjs +57 -2
  47. package/fesm2022/toolbox-web-grid-angular-features-undo-redo.mjs.map +1 -1
  48. package/fesm2022/toolbox-web-grid-angular-features-visibility.mjs +53 -0
  49. package/fesm2022/toolbox-web-grid-angular-features-visibility.mjs.map +1 -1
  50. package/fesm2022/toolbox-web-grid-angular.mjs +1238 -682
  51. package/fesm2022/toolbox-web-grid-angular.mjs.map +1 -1
  52. package/package.json +1 -1
  53. package/types/toolbox-web-grid-angular-features-clipboard.d.ts +23 -0
  54. package/types/toolbox-web-grid-angular-features-clipboard.d.ts.map +1 -1
  55. package/types/toolbox-web-grid-angular-features-column-virtualization.d.ts +19 -0
  56. package/types/toolbox-web-grid-angular-features-column-virtualization.d.ts.map +1 -1
  57. package/types/toolbox-web-grid-angular-features-context-menu.d.ts +22 -0
  58. package/types/toolbox-web-grid-angular-features-context-menu.d.ts.map +1 -1
  59. package/types/toolbox-web-grid-angular-features-editing.d.ts +32 -0
  60. package/types/toolbox-web-grid-angular-features-editing.d.ts.map +1 -1
  61. package/types/toolbox-web-grid-angular-features-export.d.ts +21 -3
  62. package/types/toolbox-web-grid-angular-features-export.d.ts.map +1 -1
  63. package/types/toolbox-web-grid-angular-features-filtering.d.ts +67 -6
  64. package/types/toolbox-web-grid-angular-features-filtering.d.ts.map +1 -1
  65. package/types/toolbox-web-grid-angular-features-grouping-columns.d.ts +19 -0
  66. package/types/toolbox-web-grid-angular-features-grouping-columns.d.ts.map +1 -1
  67. package/types/toolbox-web-grid-angular-features-grouping-rows.d.ts +25 -0
  68. package/types/toolbox-web-grid-angular-features-grouping-rows.d.ts.map +1 -1
  69. package/types/toolbox-web-grid-angular-features-master-detail.d.ts +23 -0
  70. package/types/toolbox-web-grid-angular-features-master-detail.d.ts.map +1 -1
  71. package/types/toolbox-web-grid-angular-features-multi-sort.d.ts +19 -0
  72. package/types/toolbox-web-grid-angular-features-multi-sort.d.ts.map +1 -1
  73. package/types/toolbox-web-grid-angular-features-pinned-columns.d.ts +18 -0
  74. package/types/toolbox-web-grid-angular-features-pinned-columns.d.ts.map +1 -1
  75. package/types/toolbox-web-grid-angular-features-pinned-rows.d.ts +19 -0
  76. package/types/toolbox-web-grid-angular-features-pinned-rows.d.ts.map +1 -1
  77. package/types/toolbox-web-grid-angular-features-pivot.d.ts +19 -0
  78. package/types/toolbox-web-grid-angular-features-pivot.d.ts.map +1 -1
  79. package/types/toolbox-web-grid-angular-features-print.d.ts +22 -3
  80. package/types/toolbox-web-grid-angular-features-print.d.ts.map +1 -1
  81. package/types/toolbox-web-grid-angular-features-reorder-columns.d.ts +22 -0
  82. package/types/toolbox-web-grid-angular-features-reorder-columns.d.ts.map +1 -1
  83. package/types/toolbox-web-grid-angular-features-reorder-rows.d.ts +19 -0
  84. package/types/toolbox-web-grid-angular-features-reorder-rows.d.ts.map +1 -1
  85. package/types/toolbox-web-grid-angular-features-responsive.d.ts +22 -0
  86. package/types/toolbox-web-grid-angular-features-responsive.d.ts.map +1 -1
  87. package/types/toolbox-web-grid-angular-features-row-drag-drop.d.ts +27 -0
  88. package/types/toolbox-web-grid-angular-features-row-drag-drop.d.ts.map +1 -1
  89. package/types/toolbox-web-grid-angular-features-selection.d.ts +21 -3
  90. package/types/toolbox-web-grid-angular-features-selection.d.ts.map +1 -1
  91. package/types/toolbox-web-grid-angular-features-server-side.d.ts +19 -0
  92. package/types/toolbox-web-grid-angular-features-server-side.d.ts.map +1 -1
  93. package/types/toolbox-web-grid-angular-features-tooltip.d.ts +19 -0
  94. package/types/toolbox-web-grid-angular-features-tooltip.d.ts.map +1 -1
  95. package/types/toolbox-web-grid-angular-features-tree.d.ts +22 -0
  96. package/types/toolbox-web-grid-angular-features-tree.d.ts.map +1 -1
  97. package/types/toolbox-web-grid-angular-features-undo-redo.d.ts +22 -3
  98. package/types/toolbox-web-grid-angular-features-undo-redo.d.ts.map +1 -1
  99. package/types/toolbox-web-grid-angular-features-visibility.d.ts +22 -0
  100. package/types/toolbox-web-grid-angular-features-visibility.d.ts.map +1 -1
  101. package/types/toolbox-web-grid-angular.d.ts +865 -107
  102. package/types/toolbox-web-grid-angular.d.ts.map +1 -1
@@ -1,13 +1,10 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { Type, EnvironmentInjector, ApplicationRef, ViewContainerRef, InjectionToken, EnvironmentProviders, Signal, ElementRef, TemplateRef, OnInit, OnDestroy, AfterContentInit } from '@angular/core';
3
- import { GridConfig as GridConfig$1, ColumnConfig as ColumnConfig$1, FrameworkAdapter, TypeDefault as TypeDefault$1, ColumnViewRenderer, ColumnEditorSpec, GridIcons, DataGridElement, ExpandCollapseAnimation, FitMode, CellClickDetail, RowClickDetail, CellActivateDetail, CellChangeDetail, SortChangeDetail, ColumnResizeDetail, GridColumnState, TbwScrollDetail } from '@toolbox-web/grid';
4
- import { GroupingColumnsConfig } from '@toolbox-web/grid/plugins/grouping-columns';
5
- import { GroupingRowsConfig } from '@toolbox-web/grid/plugins/grouping-rows';
6
- import { PinnedRowsConfig } from '@toolbox-web/grid/plugins/pinned-rows';
2
+ import { Type, EnvironmentInjector, ApplicationRef, ViewContainerRef, ComponentRef, TemplateRef, EmbeddedViewRef, InjectionToken, EnvironmentProviders, Signal, ElementRef, OnInit, OnDestroy, AfterContentInit } from '@angular/core';
3
+ import { GridConfig as GridConfig$1, ColumnConfig as ColumnConfig$1, TypeDefault as TypeDefault$1, FrameworkAdapter, ColumnViewRenderer, ColumnEditorSpec, GridIcons, DataGridElement, ExpandCollapseAnimation, FitMode, CellClickDetail, RowClickDetail, CellActivateDetail, CellChangeDetail, SortChangeDetail, ColumnResizeDetail, GridColumnState, TbwScrollDetail, DataGridEventMap } from '@toolbox-web/grid';
7
4
  import { FilterPanelRenderer, FilterPanelParams } from '@toolbox-web/grid/plugins/filtering';
8
- import { AbstractControl, ControlValueAccessor, FormGroup, FormArray } from '@angular/forms';
9
- import { EditingConfig, ChangedRowsResetDetail } from '@toolbox-web/grid/plugins/editing';
10
- import { SelectionConfig, ClipboardConfig, ContextMenuConfig, MultiSortConfig, FilterConfig, ReorderConfig, VisibilityConfig, GroupingColumnsConfig as GroupingColumnsConfig$1, ColumnVirtualizationConfig, RowReorderConfig, RowDragDropConfig, GroupingRowsConfig as GroupingRowsConfig$1, PinnedRowsConfig as PinnedRowsConfig$1, TreeConfig, MasterDetailConfig, ResponsivePluginConfig, UndoRedoConfig, ExportConfig, PrintConfig, PivotConfig, ServerSideConfig, TooltipConfig, FilterChangeDetail, ColumnMoveDetail, ColumnVisibilityDetail, SelectionChangeDetail, RowMoveDetail, RowDragStartDetail, RowDragEndDetail, RowDropDetail, RowTransferDetail, GroupToggleDetail, TreeExpandDetail, DetailExpandDetail, ResponsiveChangeDetail, CopyDetail, PasteDetail, UndoRedoDetail, ExportCompleteDetail, PrintStartDetail, PrintCompleteDetail } from '@toolbox-web/grid/all';
5
+ import { AbstractControl, ControlValueAccessor, FormArray, FormGroup } from '@angular/forms';
6
+ import { EditingConfig, CellCancelDetail, EditOpenDetail, BeforeEditCloseDetail, EditCloseDetail, DirtyChangeDetail, ChangedRowsResetDetail } from '@toolbox-web/grid/plugins/editing';
7
+ import { SelectionConfig, ClipboardConfig, ContextMenuConfig, MultiSortConfig, FilterConfig, ReorderConfig, VisibilityConfig, GroupingColumnsConfig, ColumnVirtualizationConfig, RowReorderConfig, RowDragDropConfig, GroupingRowsConfig, PinnedRowsConfig, TreeConfig, MasterDetailConfig, ResponsivePluginConfig, UndoRedoConfig, ExportConfig, PrintConfig, PivotConfig, ServerSideConfig, TooltipConfig, DataChangeDetail, FilterChangeDetail, ColumnResizeResetDetail, ColumnMoveDetail, ColumnVisibilityDetail, SelectionChangeDetail, RowMoveDetail, RowDragStartDetail, RowDragEndDetail, RowDropDetail, RowTransferDetail, GroupToggleDetail, GroupExpandDetail, GroupCollapseDetail, TreeExpandDetail, DetailExpandDetail, ResponsiveChangeDetail, ContextMenuOpenDetail, CopyDetail, PasteDetail, UndoRedoDetail, ExportCompleteDetail, PrintStartDetail, PrintCompleteDetail } from '@toolbox-web/grid/all';
11
8
  export { PluginFactory, clearFeatureRegistry, createPluginFromFeature, getFeatureFactory, getRegisteredFeatures, isFeatureRegistered, registerFeature } from '@toolbox-web/grid/features/registry';
12
9
 
13
10
  /**
@@ -267,6 +264,98 @@ interface GridConfig<TRow = unknown> extends Omit<GridConfig$1<TRow>, 'columns'
267
264
  */
268
265
  declare function isComponentClass(value: unknown): value is Type<unknown>;
269
266
 
267
+ /**
268
+ * Editor mount hook registry — append-only hooks called when an Angular-managed
269
+ * editor host is mounted into the DOM with a known owner grid.
270
+ *
271
+ * This is the augmentation point that lets feature secondary entries
272
+ * (e.g. `@toolbox-web/grid-angular/features/editing`) install per-editor
273
+ * lifecycle behaviour (such as the `before-edit-close` blur bridge)
274
+ * without coupling the central adapter file to the editing feature.
275
+ * Mirrors React's and Vue's `editor-mount-hooks` and how core grid plugins
276
+ * augment the grid via `registerPlugin()`.
277
+ *
278
+ * @packageDocumentation
279
+ * @internal
280
+ */
281
+ /**
282
+ * Hook called when an editor host is mounted. Returning a function
283
+ * registers a teardown that runs when the editor is released.
284
+ */
285
+ type EditorMountHook = (ctx: {
286
+ container: HTMLElement;
287
+ gridEl: HTMLElement;
288
+ }) => (() => void) | void;
289
+ /**
290
+ * Install an editor-mount hook. Called by feature secondary entries
291
+ * (e.g. `features/editing`) on import.
292
+ *
293
+ * @internal Plugin API
294
+ */
295
+ declare function registerEditorMountHook(hook: EditorMountHook): void;
296
+ /**
297
+ * Returns a function that, when invoked, blurs the focused input/textarea/select
298
+ * inside `host` (if any). Used by the `before-edit-close` bridge installed by
299
+ * `@toolbox-web/grid-angular/features/editing` so editors that commit on
300
+ * `(blur)` flush their pending value before the cell DOM is torn down by Tab /
301
+ * programmatic row exit.
302
+ * @internal
303
+ */
304
+ declare function makeFlushFocusedInput(host: HTMLElement): () => void;
305
+
306
+ /**
307
+ * Append-only bridge registries used by `@toolbox-web/grid-angular`.
308
+ *
309
+ * These let feature secondary entries plug into the central `GridAdapter`
310
+ * without the adapter needing to know about them. Mirrors React's and Vue's
311
+ * `register*Bridge` modules and how core grid plugins augment the grid via
312
+ * `registerPlugin()`.
313
+ *
314
+ * This module is deliberately framework-free: it holds plain module-level
315
+ * `let` state and never imports from `@angular/core` or from
316
+ * `@toolbox-web/grid/plugins/...`. Feature subpaths import the setters via
317
+ * the `@toolbox-web/grid-angular` package barrel (relative imports outside
318
+ * a secondary entry's `rootDir` are forbidden by ng-packagr).
319
+ *
320
+ * @internal
321
+ */
322
+
323
+ /**
324
+ * Installer signature: given a grid element + adapter, returns the row-renderer
325
+ * the adapter should expose, or undefined if no Angular template is registered
326
+ * for that grid. Used by `features/master-detail` and `features/responsive`.
327
+ * @internal
328
+ */
329
+ type RowRendererBridge = <TRow = unknown>(gridElement: HTMLElement, adapter: GridAdapter) => ((row: TRow, rowIndex: number) => HTMLElement) | undefined;
330
+ /**
331
+ * Installer signature for the type-default `filterPanelRenderer` wrapper.
332
+ * Receives the user-supplied component class loosely typed as `unknown`
333
+ * (so the adapter does not depend on filtering types) and returns the
334
+ * imperative `(container, params) => void` form required by core.
335
+ * @internal
336
+ */
337
+ type FilterPanelTypeDefaultBridge = (rendererValue: unknown, adapter: GridAdapter) => NonNullable<TypeDefault$1['filterPanelRenderer']> | undefined;
338
+ /**
339
+ * Install the master-detail row-renderer bridge. Called once on import by
340
+ * `@toolbox-web/grid-angular/features/master-detail`.
341
+ * @internal Plugin API
342
+ */
343
+ declare function registerDetailRendererBridge(bridge: RowRendererBridge): void;
344
+ /**
345
+ * Install the responsive-card row-renderer bridge. Called once on import by
346
+ * `@toolbox-web/grid-angular/features/responsive`.
347
+ * @internal Plugin API
348
+ */
349
+ declare function registerResponsiveCardRendererBridge(bridge: RowRendererBridge): void;
350
+ /**
351
+ * Install the type-default `filterPanelRenderer` wrapper. Called once on import
352
+ * by `@toolbox-web/grid-angular/features/filtering`. Without this bridge,
353
+ * type-default and grid-config-level component-class filterPanelRenderers are
354
+ * silently dropped — same precondition as the FilteringPlugin (TBW031).
355
+ * @internal Plugin API
356
+ */
357
+ declare function registerFilterPanelTypeDefaultBridge(bridge: FilterPanelTypeDefaultBridge): void;
358
+
270
359
  declare class GridAdapter implements FrameworkAdapter {
271
360
  private injector;
272
361
  private appRef;
@@ -277,6 +366,17 @@ declare class GridAdapter implements FrameworkAdapter {
277
366
  private editorViewRefs;
278
367
  /** Editor-specific component refs tracked separately for per-cell cleanup via releaseCell. */
279
368
  private editorComponentRefs;
369
+ /**
370
+ * Per-editor mount-hook teardown functions, keyed by editor host element.
371
+ *
372
+ * Populated by {@link runEditorMountHooks} (which invokes
373
+ * {@link notifyEditorMounted}) and torn down per-cell from
374
+ * {@link releaseCell}, with full sweep on {@link destroy}. The actual
375
+ * lifecycle behaviour is supplied by feature secondary entries (e.g.
376
+ * `@toolbox-web/grid-angular/features/editing` installs the
377
+ * `before-edit-close` blur bridge).
378
+ */
379
+ private editorMountTeardowns;
280
380
  private typeRegistry;
281
381
  constructor(injector: EnvironmentInjector, appRef: ApplicationRef, viewContainerRef: ViewContainerRef);
282
382
  /**
@@ -360,32 +460,25 @@ declare class GridAdapter implements FrameworkAdapter {
360
460
  */
361
461
  createEditor<TRow = unknown, TValue = unknown>(element: HTMLElement): ColumnEditorSpec<TRow, TValue> | undefined;
362
462
  /**
363
- * Creates a detail renderer function for MasterDetailPlugin.
364
- * Renders Angular templates for expandable detail rows.
463
+ * Creates a detail renderer function for MasterDetailPlugin. Delegates to
464
+ * the bridge installed by `@toolbox-web/grid-angular/features/master-detail`.
465
+ * Returns undefined if the feature is not imported or no `<tbw-grid-detail>`
466
+ * template is registered for this grid.
365
467
  */
366
468
  createDetailRenderer<TRow = unknown>(gridElement: HTMLElement): ((row: TRow) => HTMLElement) | undefined;
367
469
  /**
368
- * Framework adapter hook called by MasterDetailPlugin during attach().
369
- * Parses the <tbw-grid-detail> element and returns an Angular template-based renderer.
370
- *
371
- * This enables MasterDetailPlugin to automatically use Angular templates
372
- * without manual configuration in the Grid directive.
470
+ * FrameworkAdapter hook called by MasterDetailPlugin during attach(). Delegates
471
+ * to {@link createDetailRenderer} (bridge installed by master-detail feature).
373
472
  */
374
473
  parseDetailElement<TRow = unknown>(detailElement: Element): ((row: TRow, rowIndex: number) => HTMLElement | string) | undefined;
375
474
  /**
376
- * Creates a responsive card renderer function for ResponsivePlugin.
377
- * Renders Angular templates for card layout in responsive mode.
378
- *
379
- * @param gridElement - The grid element to look up the template for
380
- * @returns A card renderer function or undefined if no template is found
475
+ * Creates a responsive card renderer function for ResponsivePlugin. Delegates
476
+ * to the bridge installed by `@toolbox-web/grid-angular/features/responsive`.
381
477
  */
382
478
  createResponsiveCardRenderer<TRow = unknown>(gridElement: HTMLElement): ((row: TRow, rowIndex: number) => HTMLElement) | undefined;
383
479
  /**
384
- * FrameworkAdapter hook called by ResponsivePlugin during attach().
385
- * Parses the `<tbw-grid-responsive-card>` element and delegates to
386
- * {@link createResponsiveCardRenderer}. Required for parity with the Vue
387
- * adapter so ResponsivePlugin's standard lookup path works for Angular
388
- * users without relying on imperative `refreshCardRenderer` calls.
480
+ * FrameworkAdapter hook called by ResponsivePlugin during attach(). Delegates
481
+ * to {@link createResponsiveCardRenderer} (bridge installed by responsive feature).
389
482
  */
390
483
  parseResponsiveCardElement<TRow = unknown>(cardElement: Element): ((row: TRow, rowIndex: number) => HTMLElement) | undefined;
391
484
  /**
@@ -422,18 +515,38 @@ declare class GridAdapter implements FrameworkAdapter {
422
515
  */
423
516
  getTypeDefault<TRow = unknown>(type: string, _gridEl?: HTMLElement): TypeDefault$1<TRow> | undefined;
424
517
  /**
425
- * Creates and mounts an Angular component dynamically.
426
- * Shared logic between renderer and editor component creation.
518
+ * Generalized component-mount primitive. All `createComponent*Renderer` methods
519
+ * are thin wrappers around this. Returns a function `(ctx) => { hostElement, componentRef }`
520
+ * so callers that need the `componentRef` (editor wiring, value-change subscription)
521
+ * still have it; callers that only need the host element use `.hostElement`.
522
+ *
523
+ * Public so feature secondary entries can compose their own component renderers
524
+ * without re-implementing the mount/track plumbing.
525
+ *
526
+ * @param componentClass Angular component class to instantiate per call.
527
+ * @param mapInputs Maps the renderer context to a `setInput()` bag.
528
+ * @param pool Which `componentRefs[]` array tracks the instance for cleanup.
529
+ * `'render'` (default) is the long-lived pool cleared at `dispose()`.
530
+ * `'editor'` is the per-cell pool swept by `releaseCell()`.
427
531
  * @internal
428
532
  */
429
- private mountComponent;
533
+ mountComponentRenderer<TCtx>(componentClass: Type<unknown>, mapInputs: (ctx: TCtx) => Record<string, unknown>, pool?: 'render' | 'editor'): (ctx: TCtx) => {
534
+ hostElement: HTMLSpanElement;
535
+ componentRef: ComponentRef<unknown>;
536
+ };
430
537
  /**
431
538
  * Creates a renderer function from an Angular component class.
539
+ * Wraps {@link mountComponentRenderer} with a per-cell `WeakMap` cache so
540
+ * scroll-recycled cells reuse the existing component (just refresh inputs)
541
+ * instead of mounting a fresh one.
432
542
  * @internal
433
543
  */
434
544
  private createComponentRenderer;
435
545
  /**
436
546
  * Creates an editor function from an Angular component class.
547
+ * Wraps {@link mountComponentRenderer} (using the `'editor'` pool for per-cell
548
+ * cleanup) plus editor-specific wiring: callback bridge, mount-hook fan-out
549
+ * (see {@link runEditorMountHooks}), and external value-change subscription.
437
550
  * @internal
438
551
  */
439
552
  private createComponentEditor;
@@ -450,68 +563,45 @@ declare class GridAdapter implements FrameworkAdapter {
450
563
  */
451
564
  private createComponentHeaderLabelRenderer;
452
565
  /**
453
- * Creates a group header renderer function from an Angular component class.
566
+ * Creates a loading renderer function from an Angular component class.
454
567
  *
455
- * The component should accept group header inputs (id, label, columns, firstIndex, isImplicit).
456
- * Returns the host element directly (groupHeaderRenderer returns an element, not void).
568
+ * The component should accept a `size` input ('large' | 'small').
457
569
  * @internal
458
570
  */
459
- private createComponentGroupHeaderRenderer;
571
+ private createComponentLoadingRenderer;
460
572
  /**
461
- * Processes a GroupingColumnsConfig, converting component class references
462
- * to actual renderer functions.
463
- *
464
- * @param config - Angular grouping columns configuration with possible component class references
465
- * @returns Processed GroupingColumnsConfig with actual renderer functions
573
+ * Create an embedded view from a `TemplateRef` and append-track it on the
574
+ * adapter's view-ref pool so it is cleaned up on `destroy()` / `unmount()`.
575
+ * Public so feature secondary entries can mount Angular templates (e.g.
576
+ * master-detail rows, responsive cards) without reaching into the adapter's
577
+ * private `viewContainerRef` / `viewRefs`.
578
+ * @internal
466
579
  */
467
- processGroupingColumnsConfig(config: GroupingColumnsConfig): GroupingColumnsConfig;
580
+ createTrackedEmbeddedView<TCtx>(template: TemplateRef<TCtx>, context: TCtx): EmbeddedViewRef<TCtx>;
468
581
  /**
469
- * Processes a GroupingRowsConfig, converting component class references
470
- * to actual renderer functions.
471
- *
472
- * @param config - Angular grouping rows configuration with possible component class references
473
- * @returns Processed GroupingRowsConfig with actual renderer functions
582
+ * Processes a GroupingColumnsConfig. Delegates to the feature config
583
+ * preprocessor installed by `@toolbox-web/grid-angular/features/grouping-columns`,
584
+ * which handles converting Angular component class references to actual
585
+ * renderer functions. Returns the input config unchanged if the feature
586
+ * is not imported.
474
587
  */
475
- processGroupingRowsConfig(config: GroupingRowsConfig): GroupingRowsConfig;
588
+ processGroupingColumnsConfig<TConfig>(config: TConfig): TConfig;
476
589
  /**
477
- * Processes a PinnedRowsConfig, converting component class references
478
- * in `customPanels[].render` to actual renderer functions.
479
- *
480
- * @param config - Angular pinned rows configuration with possible component class references
481
- * @returns Processed PinnedRowsConfig with actual renderer functions
590
+ * Processes a GroupingRowsConfig. Delegates to the feature config preprocessor
591
+ * installed by `@toolbox-web/grid-angular/features/grouping-rows`.
482
592
  */
483
- processPinnedRowsConfig(config: PinnedRowsConfig): PinnedRowsConfig;
593
+ processGroupingRowsConfig<TConfig>(config: TConfig): TConfig;
484
594
  /**
485
- * Creates a pinned rows panel renderer function from an Angular component class.
486
- *
487
- * The component should accept inputs from PinnedRowsContext (totalRows, filteredRows,
488
- * selectedRows, columns, rows, grid).
489
- * @internal
595
+ * Processes a PinnedRowsConfig. Delegates to the feature config preprocessor
596
+ * installed by `@toolbox-web/grid-angular/features/pinned-rows`.
490
597
  */
491
- private createComponentPinnedRowsPanelRenderer;
598
+ processPinnedRowsConfig<TConfig>(config: TConfig): TConfig;
492
599
  /**
493
- * Creates a loading renderer function from an Angular component class.
494
- *
495
- * The component should accept a `size` input ('large' | 'small').
496
- * @internal
497
- */
498
- private createComponentLoadingRenderer;
499
- /**
500
- * Creates a group row renderer function from an Angular component class.
501
- *
502
- * The component should accept group row inputs (key, value, depth, rows, expanded, toggleExpand).
503
- * Returns the host element directly (groupRowRenderer returns an element, not void).
504
- * @internal
505
- */
506
- private createComponentGroupRowRenderer;
507
- /**
508
- * Creates a filter panel renderer function from an Angular component class.
509
- *
510
- * The component must implement `FilterPanel` (i.e., have a `params` input).
511
- * The component is mounted into the filter panel container element.
600
+ * Run a registered feature-config preprocessor against `config`, returning
601
+ * the original config unchanged when the feature is not imported.
512
602
  * @internal
513
603
  */
514
- private createComponentFilterPanelRenderer;
604
+ private applyFeatureConfigPreprocessor;
515
605
  /**
516
606
  * Sets component inputs using Angular's setInput API.
517
607
  * @internal
@@ -538,6 +628,20 @@ declare class GridAdapter implements FrameworkAdapter {
538
628
  * Call this when your app/component is destroyed.
539
629
  */
540
630
  destroy(): void;
631
+ /**
632
+ * Runs every registered {@link EditorMountHook} against a freshly mounted
633
+ * editor host once it has been parented to the grid. The grid is resolved
634
+ * lazily via `queueMicrotask` because the host is appended to the cell
635
+ * *after* the editor wrapper returns. Mirror of Vue's
636
+ * `attachBeforeEditCloseFlush` and React's `wrapReactEditor`
637
+ * queueMicrotask bridge.
638
+ *
639
+ * Without any feature imports the hook list is empty and this is a no-op
640
+ * — `before-edit-close` blur handling lives in
641
+ * `@toolbox-web/grid-angular/features/editing`.
642
+ * @internal
643
+ */
644
+ private runEditorMountHooks;
541
645
  }
542
646
 
543
647
  /**
@@ -811,6 +915,16 @@ interface InjectGridReturn<TRow = unknown> {
811
915
  unregisterStyles: (id: string) => void;
812
916
  /** Get current visible columns */
813
917
  visibleColumns: Signal<ColumnConfig$1<TRow>[]>;
918
+ /**
919
+ * Look up a plugin instance by its class constructor.
920
+ * Returns `undefined` if the plugin is not registered or the grid is not yet ready.
921
+ */
922
+ getPlugin: <T>(pluginClass: new (...args: unknown[]) => T) => T | undefined;
923
+ /**
924
+ * Look up a plugin instance by its registered name (e.g. `'tooltip'`, `'undoRedo'`).
925
+ * Returns `undefined` if the plugin is not registered or the grid is not yet ready.
926
+ */
927
+ getPluginByName: DataGridElement<TRow>['getPluginByName'];
814
928
  }
815
929
  /**
816
930
  * Angular inject function for programmatic access to a grid instance.
@@ -921,6 +1035,11 @@ type FeatureName = 'selection' | 'editing' | 'clipboard' | 'contextMenu' | 'mult
921
1035
  * ```
922
1036
  *
923
1037
  * @typeParam TRow - The row data type (available via `params().column`)
1038
+ *
1039
+ * MOVE-IN-V2: this class will physically move into
1040
+ * `@toolbox-web/grid-angular/features/filtering` in v2.0.0; the deprecated
1041
+ * re-export from the main `@toolbox-web/grid-angular` entry will be removed at
1042
+ * the same time. Consumers should already be importing from the feature entry.
924
1043
  */
925
1044
  declare abstract class BaseFilterPanel implements FilterPanel {
926
1045
  /**
@@ -1029,6 +1148,11 @@ declare abstract class BaseFilterPanel implements FilterPanel {
1029
1148
  *
1030
1149
  * @typeParam TRow - The row data type
1031
1150
  * @typeParam TValue - The cell value type
1151
+ *
1152
+ * MOVE-IN-V2: this class will physically move into
1153
+ * `@toolbox-web/grid-angular/features/editing` in v2.0.0; the deprecated
1154
+ * re-export from the main `@toolbox-web/grid-angular` entry will be removed at
1155
+ * the same time. Consumers should already be importing from the feature entry.
1032
1156
  */
1033
1157
  declare abstract class BaseGridEditor<TRow = unknown, TValue = unknown> {
1034
1158
  protected readonly elementRef: ElementRef<any>;
@@ -1215,6 +1339,11 @@ declare abstract class BaseGridEditor<TRow = unknown, TValue = unknown> {
1215
1339
  *
1216
1340
  * @typeParam TRow - The row data type
1217
1341
  * @typeParam TValue - The cell/control value type
1342
+ *
1343
+ * MOVE-IN-V2: this class will physically move into
1344
+ * `@toolbox-web/grid-angular/features/editing` in v2.0.0; the deprecated
1345
+ * re-export from the main `@toolbox-web/grid-angular` entry will be removed at
1346
+ * the same time. Consumers should already be importing from the feature entry.
1218
1347
  */
1219
1348
  declare abstract class BaseGridEditorCVA<TRow = unknown, TValue = unknown> extends BaseGridEditor<TRow, TValue> implements ControlValueAccessor {
1220
1349
  /** Internal onChange callback registered by the form control. */
@@ -1378,6 +1507,12 @@ type OverlayPosition = 'below' | 'above' | 'below-right' | 'over-top-left' | 'ov
1378
1507
  *
1379
1508
  * @typeParam TRow - The row data type
1380
1509
  * @typeParam TValue - The cell value type
1510
+ *
1511
+ * MOVE-IN-V2: this class (and its companion `OverlayPosition` type) will
1512
+ * physically move into `@toolbox-web/grid-angular/features/editing` in v2.0.0;
1513
+ * the deprecated re-export from the main `@toolbox-web/grid-angular` entry
1514
+ * will be removed at the same time. Consumers should already be importing
1515
+ * from the feature entry.
1381
1516
  */
1382
1517
  declare abstract class BaseOverlayEditor<TRow = unknown, TValue = unknown> extends BaseGridEditor<TRow, TValue> {
1383
1518
  private readonly _elementRef;
@@ -1636,6 +1771,13 @@ interface GridEditorContext<TValue = unknown, TRow = unknown> {
1636
1771
  * ```
1637
1772
  *
1638
1773
  * @category Directive
1774
+ *
1775
+ * MOVE-IN-V2: this directive (and its companion `GridEditorContext` type and
1776
+ * `getEditorTemplate` helper) will physically move into
1777
+ * `@toolbox-web/grid-angular/features/editing` in v2.0.0; the deprecated
1778
+ * re-exports from the main `@toolbox-web/grid-angular` entry will be removed
1779
+ * at the same time. Consumers should already be importing from the feature
1780
+ * entry.
1639
1781
  */
1640
1782
  declare class GridColumnEditor {
1641
1783
  private elementRef;
@@ -1766,6 +1908,11 @@ interface GridDetailContext<TRow = unknown> {
1766
1908
  /** The row data (explicit binding) */
1767
1909
  row: TRow;
1768
1910
  }
1911
+ /**
1912
+ * Gets the detail template registered for a given grid element.
1913
+ * Used by AngularGridAdapter to retrieve templates at render time.
1914
+ */
1915
+ declare function getDetailTemplate(gridElement: HTMLElement): TemplateRef<GridDetailContext> | undefined;
1769
1916
  /**
1770
1917
  * Directive that captures an `<ng-template>` for use as a master-detail row renderer.
1771
1918
  *
@@ -1787,10 +1934,10 @@ interface GridDetailContext<TRow = unknown> {
1787
1934
  * The template context provides:
1788
1935
  * - `$implicit` / `row`: The full row data object
1789
1936
  *
1790
- * Import the directive in your component:
1937
+ * Import the directive from the master-detail feature entry:
1791
1938
  *
1792
1939
  * ```typescript
1793
- * import { GridDetailView } from '@toolbox-web/grid-angular';
1940
+ * import { GridDetailView } from '@toolbox-web/grid-angular/features/master-detail';
1794
1941
  *
1795
1942
  * @Component({
1796
1943
  * imports: [GridDetailView],
@@ -1798,6 +1945,10 @@ interface GridDetailContext<TRow = unknown> {
1798
1945
  * })
1799
1946
  * ```
1800
1947
  *
1948
+ * > Note: `GridDetailView` is also re-exported from `@toolbox-web/grid-angular`
1949
+ * > for backwards compatibility, but that re-export is deprecated and will be
1950
+ * > removed in v2.0.0. Always import from the feature entry.
1951
+ *
1801
1952
  * @example
1802
1953
  * ```html
1803
1954
  * <tbw-grid [rows]="rows" [gridConfig]="config">
@@ -1962,6 +2113,13 @@ declare function getFormArrayContext(gridElement: HTMLElement): FormArrayContext
1962
2113
  * ```
1963
2114
  *
1964
2115
  * @category Directive
2116
+ *
2117
+ * MOVE-IN-V2: this directive (and its `FormArrayContext` type and
2118
+ * `getFormArrayContext` helper) will physically move into
2119
+ * `@toolbox-web/grid-angular/features/editing` in v2.0.0; the deprecated
2120
+ * re-exports from the main `@toolbox-web/grid-angular` entry will be removed
2121
+ * at the same time. Consumers should already be importing from the feature
2122
+ * entry.
1965
2123
  */
1966
2124
  declare class GridFormArray implements OnInit, OnDestroy {
1967
2125
  #private;
@@ -2141,6 +2299,13 @@ interface RowFormChangeEvent<TRow = unknown> {
2141
2299
  *
2142
2300
  * @see GridFormArray For small datasets with full upfront validation
2143
2301
  * @category Directive
2302
+ *
2303
+ * MOVE-IN-V2: this directive (and its `LazyFormFactory`, `RowFormChangeEvent`
2304
+ * types and `getLazyFormContext` helper) will physically move into
2305
+ * `@toolbox-web/grid-angular/features/editing` in v2.0.0; the deprecated
2306
+ * re-exports from the main `@toolbox-web/grid-angular` entry will be removed
2307
+ * at the same time. Consumers should already be importing from the feature
2308
+ * entry.
2144
2309
  */
2145
2310
  declare class GridLazyForm<TRow = unknown> implements OnInit, OnDestroy {
2146
2311
  #private;
@@ -2253,6 +2418,13 @@ interface GridResponsiveCardContext<TRow = unknown> {
2253
2418
  */
2254
2419
  index: number;
2255
2420
  }
2421
+ /**
2422
+ * Retrieves the responsive card template for a grid element.
2423
+ *
2424
+ * @param gridElement - The grid element to look up
2425
+ * @returns The template reference or undefined if not found
2426
+ */
2427
+ declare function getResponsiveCardTemplate(gridElement: HTMLElement): TemplateRef<GridResponsiveCardContext> | undefined;
2256
2428
  /**
2257
2429
  * Directive for providing custom Angular templates for responsive card layout.
2258
2430
  *
@@ -2288,6 +2460,15 @@ interface GridResponsiveCardContext<TRow = unknown> {
2288
2460
  */
2289
2461
  declare class GridResponsiveCard<TRow = unknown> {
2290
2462
  private elementRef;
2463
+ /**
2464
+ * Card row height in pixels. Use `'auto'` for dynamic height based on content.
2465
+ *
2466
+ * Mirrors to the `card-row-height` attribute on the underlying
2467
+ * `<tbw-grid-responsive-card>` element which the ResponsivePlugin reads.
2468
+ *
2469
+ * @default 'auto'
2470
+ */
2471
+ cardRowHeight: _angular_core.InputSignal<number | "auto" | undefined>;
2291
2472
  /**
2292
2473
  * The ng-template containing the card content.
2293
2474
  */
@@ -2296,12 +2477,17 @@ declare class GridResponsiveCard<TRow = unknown> {
2296
2477
  * Effect that registers the template when it becomes available.
2297
2478
  */
2298
2479
  private onTemplateReceived;
2480
+ /**
2481
+ * Effect that mirrors the `cardRowHeight` input to the kebab-cased attribute
2482
+ * read by the ResponsivePlugin.
2483
+ */
2484
+ private onCardRowHeightChange;
2299
2485
  /**
2300
2486
  * Type guard for template context inference.
2301
2487
  */
2302
2488
  static ngTemplateContextGuard<T>(_directive: GridResponsiveCard<T>, context: unknown): context is GridResponsiveCardContext<T>;
2303
2489
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<GridResponsiveCard<any>, never>;
2304
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<GridResponsiveCard<any>, "tbw-grid-responsive-card", never, {}, {}, ["template"], never, true, never>;
2490
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<GridResponsiveCard<any>, "tbw-grid-responsive-card", never, { "cardRowHeight": { "alias": "cardRowHeight"; "required": false; "isSignal": true; }; }, {}, ["template"], never, true, never>;
2305
2491
  }
2306
2492
 
2307
2493
  /**
@@ -2433,6 +2619,62 @@ declare class GridToolPanel {
2433
2619
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<GridToolPanel, "tbw-grid-tool-panel", never, { "id": { "alias": "id"; "required": true; "isSignal": true; }; "title": { "alias": "title"; "required": true; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "order": { "alias": "order"; "required": false; "isSignal": true; }; }, {}, ["template"], never, true, never>;
2434
2620
  }
2435
2621
 
2622
+ /**
2623
+ * Column shorthand parsing for `@toolbox-web/grid-angular`.
2624
+ *
2625
+ * Intentionally duplicated across the React, Vue, and Angular adapters so each
2626
+ * adapter has zero shared-runtime dependency. Do not extract into a shared
2627
+ * package: the helpers are tiny (~100 lines), the duplication keeps each
2628
+ * adapter independently tree-shakeable, and a shared package would force
2629
+ * consumers to install an extra dep just to import shorthand support.
2630
+ *
2631
+ * If you change behavior here, mirror the change in `grid-react` and
2632
+ * `grid-vue`. The three implementations are kept byte-equivalent.
2633
+ */
2634
+
2635
+ /**
2636
+ * Type for column shorthand notation.
2637
+ *
2638
+ * Supports:
2639
+ * - Simple string: `'name'` → `{ field: 'name', header: 'Name' }`
2640
+ * - With type: `'salary:number'` → `{ field: 'salary', header: 'Salary', type: 'number' }`
2641
+ * - Full config object: `{ field: 'id', header: 'ID', width: 80 }` (passed through)
2642
+ *
2643
+ * @example
2644
+ * ```typescript
2645
+ * // All equivalent:
2646
+ * const cols1 = ['id', 'name', 'email'];
2647
+ * const cols2 = ['id:number', 'name:string', 'email'];
2648
+ * const cols3 = [{ field: 'id' }, { field: 'name' }, { field: 'email' }];
2649
+ * ```
2650
+ */
2651
+ type ColumnShorthand<TRow = unknown> = string | ColumnConfig$1<TRow>;
2652
+ /**
2653
+ * Parse a column shorthand string into a ColumnConfig.
2654
+ *
2655
+ * Supports formats:
2656
+ * - `'fieldName'` → `{ field: 'fieldName', header: 'Field Name' }`
2657
+ * - `'fieldName:type'` → `{ field: 'fieldName', header: 'Field Name', type: 'type' }`
2658
+ *
2659
+ * @param shorthand - The shorthand string (e.g., 'name', 'salary:number')
2660
+ * @returns A ColumnConfig object
2661
+ */
2662
+ declare function parseColumnShorthand<TRow = unknown>(shorthand: string): ColumnConfig$1<TRow>;
2663
+ /**
2664
+ * Normalize an array of column shorthands to ColumnConfig objects.
2665
+ *
2666
+ * @param columns - Array of column shorthands (strings or ColumnConfig objects)
2667
+ * @returns Array of ColumnConfig objects
2668
+ */
2669
+ declare function normalizeColumns<TRow = unknown>(columns: ColumnShorthand<TRow>[]): ColumnConfig$1<TRow>[];
2670
+ /**
2671
+ * Apply column defaults to a list of columns. Individual column properties
2672
+ * override defaults.
2673
+ */
2674
+ declare function applyColumnDefaults<TRow = unknown>(columns: ColumnConfig$1<TRow>[], defaults: Partial<ColumnConfig$1<TRow>> | undefined): ColumnConfig$1<TRow>[];
2675
+ /** Check if an array of columns contains any shorthand strings. */
2676
+ declare function hasColumnShorthands<TRow>(columns: ColumnShorthand<TRow>[]): boolean;
2677
+
2436
2678
  /**
2437
2679
  * Event detail for cell commit events.
2438
2680
  */
@@ -2633,20 +2875,33 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
2633
2875
  /**
2634
2876
  * Column configuration array.
2635
2877
  *
2878
+ * Accepts either full `ColumnConfig` objects or shorthand strings such as
2879
+ * `'name'` or `'salary:number'`. Shorthands auto-generate human-readable
2880
+ * headers from the field name.
2881
+ *
2636
2882
  * Shorthand for setting columns without wrapping them in a full `gridConfig`.
2637
2883
  * If both `columns` and `gridConfig.columns` are set, `columns` takes precedence
2638
2884
  * (see configuration precedence system).
2639
2885
  *
2640
2886
  * @example
2641
2887
  * ```html
2642
- * <tbw-grid [rows]="data" [columns]="[
2643
- * { field: 'id', header: 'ID', pinned: 'left', width: 80 },
2644
- * { field: 'name', header: 'Name' },
2645
- * { field: 'email', header: 'Email' }
2646
- * ]" />
2888
+ * <tbw-grid [rows]="data" [columns]="['id:number', 'name', { field: 'status', editable: true }]" />
2647
2889
  * ```
2648
2890
  */
2649
- columns: _angular_core.InputSignal<ColumnConfig<any>[] | undefined>;
2891
+ columns: _angular_core.InputSignal<ColumnShorthand<any>[] | undefined>;
2892
+ /**
2893
+ * Default column properties applied to every column in `columns`.
2894
+ * Individual column properties override these defaults.
2895
+ *
2896
+ * @example
2897
+ * ```html
2898
+ * <tbw-grid
2899
+ * [columnDefaults]="{ sortable: true, resizable: true }"
2900
+ * [columns]="[{ field: 'id', sortable: false }, { field: 'name' }]"
2901
+ * />
2902
+ * ```
2903
+ */
2904
+ columnDefaults: _angular_core.InputSignal<Partial<ColumnConfig<any>> | undefined>;
2650
2905
  /**
2651
2906
  * Column sizing strategy.
2652
2907
  *
@@ -2716,6 +2971,9 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
2716
2971
  * <!-- Full config object -->
2717
2972
  * <tbw-grid [selection]="{ mode: 'range', checkbox: true }" />
2718
2973
  * ```
2974
+ *
2975
+ * @deprecated Use `GridSelectionDirective` from
2976
+ * `@toolbox-web/grid-angular/features/selection`. Will be removed in v2.0.0.
2719
2977
  */
2720
2978
  selection: _angular_core.InputSignal<"row" | SelectionConfig<any> | "cell" | "range" | undefined>;
2721
2979
  /**
@@ -2739,6 +2997,9 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
2739
2997
  * <!-- Full config with callbacks -->
2740
2998
  * <tbw-grid [editing]="{ editOn: 'dblclick', onBeforeEditClose: myCallback }" />
2741
2999
  * ```
3000
+ *
3001
+ * @deprecated Use `GridEditingDirective` from
3002
+ * `@toolbox-web/grid-angular/features/editing`. Will be removed in v2.0.0.
2742
3003
  */
2743
3004
  editing: _angular_core.InputSignal<boolean | "click" | "dblclick" | "manual" | EditingConfig | undefined>;
2744
3005
  /**
@@ -2753,6 +3014,9 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
2753
3014
  * ```html
2754
3015
  * <tbw-grid [selection]="'range'" [clipboard]="true" />
2755
3016
  * ```
3017
+ *
3018
+ * @deprecated Use `GridClipboardDirective` from
3019
+ * `@toolbox-web/grid-angular/features/clipboard`. Will be removed in v2.0.0.
2756
3020
  */
2757
3021
  clipboard: _angular_core.InputSignal<boolean | ClipboardConfig | undefined>;
2758
3022
  /**
@@ -2767,6 +3031,9 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
2767
3031
  * ```html
2768
3032
  * <tbw-grid [contextMenu]="true" />
2769
3033
  * ```
3034
+ *
3035
+ * @deprecated Use `GridContextMenuDirective` from
3036
+ * `@toolbox-web/grid-angular/features/context-menu`. Will be removed in v2.0.0.
2770
3037
  */
2771
3038
  contextMenu: _angular_core.InputSignal<boolean | ContextMenuConfig | undefined>;
2772
3039
  /**
@@ -2791,6 +3058,9 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
2791
3058
  * <!-- Full config -->
2792
3059
  * <tbw-grid [multiSort]="{ maxSortColumns: 3 }" />
2793
3060
  * ```
3061
+ *
3062
+ * @deprecated Use `GridMultiSortDirective` from
3063
+ * `@toolbox-web/grid-angular/features/multi-sort`. Will be removed in v2.0.0.
2794
3064
  */
2795
3065
  multiSort: _angular_core.InputSignal<boolean | "multi" | MultiSortConfig | "single" | undefined>;
2796
3066
  /**
@@ -2806,6 +3076,13 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
2806
3076
  * <tbw-grid [filtering]="true" />
2807
3077
  * <tbw-grid [filtering]="{ debounceMs: 200 }" />
2808
3078
  * ```
3079
+ *
3080
+ * @deprecated Use `GridFilteringDirective` from
3081
+ * `@toolbox-web/grid-angular/features/filtering` and add it to your
3082
+ * component's `imports`. The directive owns the `filtering` input + the
3083
+ * `filterChange` output and lets the typed surface tree-shake away when
3084
+ * the feature is not imported. This input remains as a non-breaking shim
3085
+ * and will be removed in v2.0.0.
2809
3086
  */
2810
3087
  filtering: _angular_core.InputSignal<boolean | FilterConfig<any> | undefined>;
2811
3088
  /**
@@ -2820,6 +3097,9 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
2820
3097
  * ```html
2821
3098
  * <tbw-grid [reorderColumns]="true" />
2822
3099
  * ```
3100
+ *
3101
+ * @deprecated Use `GridReorderColumnsDirective` from
3102
+ * `@toolbox-web/grid-angular/features/reorder-columns`. Will be removed in v2.0.0.
2823
3103
  */
2824
3104
  reorderColumns: _angular_core.InputSignal<boolean | ReorderConfig | undefined>;
2825
3105
  /**
@@ -2834,6 +3114,9 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
2834
3114
  * ```html
2835
3115
  * <tbw-grid [visibility]="true" />
2836
3116
  * ```
3117
+ *
3118
+ * @deprecated Use `GridVisibilityDirective` from
3119
+ * `@toolbox-web/grid-angular/features/visibility`. Will be removed in v2.0.0.
2837
3120
  */
2838
3121
  visibility: _angular_core.InputSignal<boolean | VisibilityConfig | undefined>;
2839
3122
  /**
@@ -2853,6 +3136,9 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
2853
3136
  * { field: 'actions', pinned: 'right' }
2854
3137
  * ]" />
2855
3138
  * ```
3139
+ *
3140
+ * @deprecated Use `GridPinnedColumnsDirective` from
3141
+ * `@toolbox-web/grid-angular/features/pinned-columns`. Will be removed in v2.0.0.
2856
3142
  */
2857
3143
  pinnedColumns: _angular_core.InputSignal<boolean | undefined>;
2858
3144
  /**
@@ -2867,8 +3153,11 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
2867
3153
  * ```html
2868
3154
  * <tbw-grid [groupingColumns]="true" />
2869
3155
  * ```
3156
+ *
3157
+ * @deprecated Use `GridGroupingColumnsDirective` from
3158
+ * `@toolbox-web/grid-angular/features/grouping-columns`. Will be removed in v2.0.0.
2870
3159
  */
2871
- groupingColumns: _angular_core.InputSignal<boolean | GroupingColumnsConfig$1 | undefined>;
3160
+ groupingColumns: _angular_core.InputSignal<boolean | GroupingColumnsConfig | undefined>;
2872
3161
  /**
2873
3162
  * Enable horizontal column virtualization for wide grids.
2874
3163
  *
@@ -2881,6 +3170,9 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
2881
3170
  * ```html
2882
3171
  * <tbw-grid [columnVirtualization]="true" />
2883
3172
  * ```
3173
+ *
3174
+ * @deprecated Use `GridColumnVirtualizationDirective` from
3175
+ * `@toolbox-web/grid-angular/features/column-virtualization`. Will be removed in v2.0.0.
2884
3176
  */
2885
3177
  columnVirtualization: _angular_core.InputSignal<boolean | ColumnVirtualizationConfig | undefined>;
2886
3178
  /**
@@ -2906,6 +3198,9 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
2906
3198
  * ```html
2907
3199
  * <tbw-grid [rowDragDrop]="{ dropZone: 'employees', operation: 'move' }" />
2908
3200
  * ```
3201
+ *
3202
+ * @deprecated Use `GridRowDragDropDirective` from
3203
+ * `@toolbox-web/grid-angular/features/row-drag-drop`. Will be removed in v2.0.0.
2909
3204
  */
2910
3205
  rowDragDrop: _angular_core.InputSignal<boolean | RowDragDropConfig<any> | undefined>;
2911
3206
  /**
@@ -2920,8 +3215,11 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
2920
3215
  * ```html
2921
3216
  * <tbw-grid [groupingRows]="{ groupBy: ['department'] }" />
2922
3217
  * ```
3218
+ *
3219
+ * @deprecated Use `GridGroupingRowsDirective` from
3220
+ * `@toolbox-web/grid-angular/features/grouping-rows`. Will be removed in v2.0.0.
2923
3221
  */
2924
- groupingRows: _angular_core.InputSignal<GroupingRowsConfig$1 | undefined>;
3222
+ groupingRows: _angular_core.InputSignal<GroupingRowsConfig | undefined>;
2925
3223
  /**
2926
3224
  * Enable pinned rows (aggregation/status bar).
2927
3225
  *
@@ -2934,8 +3232,11 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
2934
3232
  * ```html
2935
3233
  * <tbw-grid [pinnedRows]="{ bottom: [{ type: 'aggregation' }] }" />
2936
3234
  * ```
3235
+ *
3236
+ * @deprecated Use `GridPinnedRowsDirective` from
3237
+ * `@toolbox-web/grid-angular/features/pinned-rows`. Will be removed in v2.0.0.
2937
3238
  */
2938
- pinnedRows: _angular_core.InputSignal<boolean | PinnedRowsConfig$1 | undefined>;
3239
+ pinnedRows: _angular_core.InputSignal<boolean | PinnedRowsConfig | undefined>;
2939
3240
  /**
2940
3241
  * Enable hierarchical tree view.
2941
3242
  *
@@ -2948,6 +3249,9 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
2948
3249
  * ```html
2949
3250
  * <tbw-grid [tree]="{ childrenField: 'children' }" />
2950
3251
  * ```
3252
+ *
3253
+ * @deprecated Use `GridTreeDirective` from
3254
+ * `@toolbox-web/grid-angular/features/tree`. Will be removed in v2.0.0.
2951
3255
  */
2952
3256
  tree: _angular_core.InputSignal<boolean | TreeConfig | undefined>;
2953
3257
  /**
@@ -2962,6 +3266,9 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
2962
3266
  * ```html
2963
3267
  * <tbw-grid [masterDetail]="{ detailRenderer: detailFn }" />
2964
3268
  * ```
3269
+ *
3270
+ * @deprecated Use `GridMasterDetailDirective` from
3271
+ * `@toolbox-web/grid-angular/features/master-detail`. Will be removed in v2.0.0.
2965
3272
  */
2966
3273
  masterDetail: _angular_core.InputSignal<MasterDetailConfig | undefined>;
2967
3274
  /**
@@ -2976,6 +3283,9 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
2976
3283
  * ```html
2977
3284
  * <tbw-grid [responsive]="{ breakpoint: 768 }" />
2978
3285
  * ```
3286
+ *
3287
+ * @deprecated Use `GridResponsiveDirective` from
3288
+ * `@toolbox-web/grid-angular/features/responsive`. Will be removed in v2.0.0.
2979
3289
  */
2980
3290
  responsive: _angular_core.InputSignal<boolean | ResponsivePluginConfig<unknown> | undefined>;
2981
3291
  /**
@@ -2990,6 +3300,9 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
2990
3300
  * ```html
2991
3301
  * <tbw-grid [editing]="'dblclick'" [undoRedo]="true" />
2992
3302
  * ```
3303
+ *
3304
+ * @deprecated Use `GridUndoRedoDirective` from
3305
+ * `@toolbox-web/grid-angular/features/undo-redo`. Will be removed in v2.0.0.
2993
3306
  */
2994
3307
  undoRedo: _angular_core.InputSignal<boolean | UndoRedoConfig | undefined>;
2995
3308
  /**
@@ -3005,6 +3318,9 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
3005
3318
  * <tbw-grid [export]="true" />
3006
3319
  * <tbw-grid [export]="{ filename: 'data.csv' }" />
3007
3320
  * ```
3321
+ *
3322
+ * @deprecated Use `GridExportDirective` from
3323
+ * `@toolbox-web/grid-angular/features/export`. Will be removed in v2.0.0.
3008
3324
  */
3009
3325
  exportFeature: _angular_core.InputSignal<boolean | ExportConfig | undefined>;
3010
3326
  /**
@@ -3019,6 +3335,9 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
3019
3335
  * ```html
3020
3336
  * <tbw-grid [print]="true" />
3021
3337
  * ```
3338
+ *
3339
+ * @deprecated Use `GridPrintDirective` from
3340
+ * `@toolbox-web/grid-angular/features/print`. Will be removed in v2.0.0.
3022
3341
  */
3023
3342
  print: _angular_core.InputSignal<boolean | PrintConfig | undefined>;
3024
3343
  /**
@@ -3033,6 +3352,9 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
3033
3352
  * ```html
3034
3353
  * <tbw-grid [pivot]="{ rowFields: ['category'], valueField: 'sales' }" />
3035
3354
  * ```
3355
+ *
3356
+ * @deprecated Use `GridPivotDirective` from
3357
+ * `@toolbox-web/grid-angular/features/pivot`. Will be removed in v2.0.0.
3036
3358
  */
3037
3359
  pivot: _angular_core.InputSignal<PivotConfig | undefined>;
3038
3360
  /**
@@ -3047,6 +3369,9 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
3047
3369
  * ```html
3048
3370
  * <tbw-grid [serverSide]="{ dataSource: fetchDataFn }" />
3049
3371
  * ```
3372
+ *
3373
+ * @deprecated Use `GridServerSideDirective` from
3374
+ * `@toolbox-web/grid-angular/features/server-side`. Will be removed in v2.0.0.
3050
3375
  */
3051
3376
  serverSide: _angular_core.InputSignal<ServerSideConfig | undefined>;
3052
3377
  /**
@@ -3057,6 +3382,9 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
3057
3382
  * <tbw-grid [tooltip]="true" />
3058
3383
  * <tbw-grid [tooltip]="{ header: true, cell: false }" />
3059
3384
  * ```
3385
+ *
3386
+ * @deprecated Use `GridTooltipDirective` from
3387
+ * `@toolbox-web/grid-angular/features/tooltip`. Will be removed in v2.0.0.
3060
3388
  */
3061
3389
  tooltip: _angular_core.InputSignal<boolean | TooltipConfig | undefined>;
3062
3390
  /**
@@ -3109,8 +3437,81 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
3109
3437
  * console.log(`Changed ${event.field} to ${event.value} in row ${event.rowIndex}`);
3110
3438
  * }
3111
3439
  * ```
3440
+ *
3441
+ * @deprecated Use `GridEditingDirective` from
3442
+ * `@toolbox-web/grid-angular/features/editing`. Will be removed in v2.0.0.
3112
3443
  */
3113
3444
  cellCommit: _angular_core.OutputEmitterRef<CellCommitEvent<unknown, unknown>>;
3445
+ /**
3446
+ * Emitted when a cell edit is cancelled (Escape, click outside without
3447
+ * commit, or `editor.cancel()`).
3448
+ *
3449
+ * @example
3450
+ * ```html
3451
+ * <tbw-grid (cellCancel)="onCellCancel($event)">...</tbw-grid>
3452
+ * ```
3453
+ *
3454
+ * @deprecated Use `GridEditingDirective` from
3455
+ * `@toolbox-web/grid-angular/features/editing`. Will be removed in v2.0.0.
3456
+ */
3457
+ cellCancel: _angular_core.OutputEmitterRef<CellCancelDetail>;
3458
+ /**
3459
+ * Emitted when a cell editor opens.
3460
+ *
3461
+ * @example
3462
+ * ```html
3463
+ * <tbw-grid (editOpen)="onEditOpen($event)">...</tbw-grid>
3464
+ * ```
3465
+ *
3466
+ * @deprecated Use `GridEditingDirective` from
3467
+ * `@toolbox-web/grid-angular/features/editing`. Will be removed in v2.0.0.
3468
+ */
3469
+ editOpen: _angular_core.OutputEmitterRef<EditOpenDetail<any>>;
3470
+ /**
3471
+ * Emitted before an editor closes. Useful for last-chance validation.
3472
+ *
3473
+ * @example
3474
+ * ```html
3475
+ * <tbw-grid (beforeEditClose)="onBeforeEditClose($event)">...</tbw-grid>
3476
+ * ```
3477
+ *
3478
+ * @deprecated Use `GridEditingDirective` from
3479
+ * `@toolbox-web/grid-angular/features/editing`. Will be removed in v2.0.0.
3480
+ */
3481
+ beforeEditClose: _angular_core.OutputEmitterRef<BeforeEditCloseDetail<any>>;
3482
+ /**
3483
+ * Emitted after an editor closes (whether committed or cancelled).
3484
+ *
3485
+ * @example
3486
+ * ```html
3487
+ * <tbw-grid (editClose)="onEditClose($event)">...</tbw-grid>
3488
+ * ```
3489
+ *
3490
+ * @deprecated Use `GridEditingDirective` from
3491
+ * `@toolbox-web/grid-angular/features/editing`. Will be removed in v2.0.0.
3492
+ */
3493
+ editClose: _angular_core.OutputEmitterRef<EditCloseDetail<any>>;
3494
+ /**
3495
+ * Emitted when the dirty / changed-rows state transitions.
3496
+ *
3497
+ * @example
3498
+ * ```html
3499
+ * <tbw-grid (dirtyChange)="onDirtyChange($event)">...</tbw-grid>
3500
+ * ```
3501
+ *
3502
+ * @deprecated Use `GridEditingDirective` from
3503
+ * `@toolbox-web/grid-angular/features/editing`. Will be removed in v2.0.0.
3504
+ */
3505
+ dirtyChange: _angular_core.OutputEmitterRef<DirtyChangeDetail<any>>;
3506
+ /**
3507
+ * Emitted when row data is replaced (e.g. via the `rows` setter).
3508
+ *
3509
+ * @example
3510
+ * ```html
3511
+ * <tbw-grid (dataChange)="onDataChange($event)">...</tbw-grid>
3512
+ * ```
3513
+ */
3514
+ dataChange: _angular_core.OutputEmitterRef<DataChangeDetail>;
3114
3515
  /**
3115
3516
  * Emitted when a row's values are committed (bulk/row editing).
3116
3517
  * Provides the row data and change tracking information.
@@ -3119,6 +3520,9 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
3119
3520
  * ```html
3120
3521
  * <tbw-grid (rowCommit)="onRowCommit($event)">...</tbw-grid>
3121
3522
  * ```
3523
+ *
3524
+ * @deprecated Use `GridEditingDirective` from
3525
+ * `@toolbox-web/grid-angular/features/editing`. Will be removed in v2.0.0.
3122
3526
  */
3123
3527
  rowCommit: _angular_core.OutputEmitterRef<RowCommitEvent<unknown>>;
3124
3528
  /**
@@ -3128,6 +3532,9 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
3128
3532
  * ```html
3129
3533
  * <tbw-grid (changedRowsReset)="onChangedRowsReset($event)">...</tbw-grid>
3130
3534
  * ```
3535
+ *
3536
+ * @deprecated Use `GridEditingDirective` from
3537
+ * `@toolbox-web/grid-angular/features/editing`. Will be removed in v2.0.0.
3131
3538
  */
3132
3539
  changedRowsReset: _angular_core.OutputEmitterRef<ChangedRowsResetDetail<unknown>>;
3133
3540
  /**
@@ -3146,6 +3553,11 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
3146
3553
  * ```html
3147
3554
  * <tbw-grid (filterChange)="onFilterChange($event)">...</tbw-grid>
3148
3555
  * ```
3556
+ *
3557
+ * @deprecated Use `GridFilteringDirective` from
3558
+ * `@toolbox-web/grid-angular/features/filtering` (the directive
3559
+ * declares the `(filterChange)` output). This output remains as a
3560
+ * non-breaking shim and will be removed in v2.0.0.
3149
3561
  */
3150
3562
  filterChange: _angular_core.OutputEmitterRef<FilterChangeDetail>;
3151
3563
  /**
@@ -3157,6 +3569,15 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
3157
3569
  * ```
3158
3570
  */
3159
3571
  columnResize: _angular_core.OutputEmitterRef<ColumnResizeDetail>;
3572
+ /**
3573
+ * Emitted when a column's width is reset (double-click on the resize handle).
3574
+ *
3575
+ * @example
3576
+ * ```html
3577
+ * <tbw-grid (columnResizeReset)="onColumnResizeReset($event)">...</tbw-grid>
3578
+ * ```
3579
+ */
3580
+ columnResizeReset: _angular_core.OutputEmitterRef<ColumnResizeResetDetail>;
3160
3581
  /**
3161
3582
  * Emitted when a column is moved via drag-and-drop.
3162
3583
  *
@@ -3164,15 +3585,23 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
3164
3585
  * ```html
3165
3586
  * <tbw-grid (columnMove)="onColumnMove($event)">...</tbw-grid>
3166
3587
  * ```
3588
+ *
3589
+ * @deprecated Use `GridReorderColumnsDirective` from
3590
+ * `@toolbox-web/grid-angular/features/reorder-columns`. Will be removed in v2.0.0.
3167
3591
  */
3168
3592
  columnMove: _angular_core.OutputEmitterRef<ColumnMoveDetail>;
3169
3593
  /**
3170
- * Emitted when column visibility changes.
3594
+ * Emitted when a column is shown or hidden — either via the visibility
3595
+ * sidebar, `grid.toggleColumnVisibility(field)`, `grid.setColumnVisible(field, visible)`,
3596
+ * or `grid.showAllColumns()`.
3171
3597
  *
3172
3598
  * @example
3173
3599
  * ```html
3174
3600
  * <tbw-grid (columnVisibility)="onColumnVisibility($event)">...</tbw-grid>
3175
3601
  * ```
3602
+ *
3603
+ * @deprecated Use `GridVisibilityDirective` from
3604
+ * `@toolbox-web/grid-angular/features/visibility`. Will be removed in v2.0.0.
3176
3605
  */
3177
3606
  columnVisibility: _angular_core.OutputEmitterRef<ColumnVisibilityDetail>;
3178
3607
  /**
@@ -3191,6 +3620,9 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
3191
3620
  * ```html
3192
3621
  * <tbw-grid (selectionChange)="onSelectionChange($event)">...</tbw-grid>
3193
3622
  * ```
3623
+ *
3624
+ * @deprecated Use `GridSelectionDirective` from
3625
+ * `@toolbox-web/grid-angular/features/selection`. Will be removed in v2.0.0.
3194
3626
  */
3195
3627
  selectionChange: _angular_core.OutputEmitterRef<SelectionChangeDetail>;
3196
3628
  /**
@@ -3200,6 +3632,9 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
3200
3632
  * ```html
3201
3633
  * <tbw-grid (rowMove)="onRowMove($event)">...</tbw-grid>
3202
3634
  * ```
3635
+ *
3636
+ * @deprecated Use `GridRowDragDropDirective` from
3637
+ * `@toolbox-web/grid-angular/features/row-drag-drop`. Will be removed in v2.0.0.
3203
3638
  */
3204
3639
  rowMove: _angular_core.OutputEmitterRef<RowMoveDetail<any>>;
3205
3640
  /**
@@ -3209,20 +3644,32 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
3209
3644
  * ```html
3210
3645
  * <tbw-grid (rowDragStart)="onRowDragStart($event)">...</tbw-grid>
3211
3646
  * ```
3647
+ *
3648
+ * @deprecated Use `GridRowDragDropDirective` from
3649
+ * `@toolbox-web/grid-angular/features/row-drag-drop`. Will be removed in v2.0.0.
3212
3650
  */
3213
3651
  rowDragStart: _angular_core.OutputEmitterRef<RowDragStartDetail<any>>;
3214
3652
  /**
3215
3653
  * Emitted when a row drag ends (after drop or cancel).
3654
+ *
3655
+ * @deprecated Use `GridRowDragDropDirective` from
3656
+ * `@toolbox-web/grid-angular/features/row-drag-drop`. Will be removed in v2.0.0.
3216
3657
  */
3217
3658
  rowDragEnd: _angular_core.OutputEmitterRef<RowDragEndDetail<any>>;
3218
3659
  /**
3219
3660
  * Emitted on the target grid when rows are dropped from another grid.
3220
3661
  * Cancelable via `event.preventDefault()`.
3662
+ *
3663
+ * @deprecated Use `GridRowDragDropDirective` from
3664
+ * `@toolbox-web/grid-angular/features/row-drag-drop`. Will be removed in v2.0.0.
3221
3665
  */
3222
3666
  rowDrop: _angular_core.OutputEmitterRef<RowDropDetail<any>>;
3223
3667
  /**
3224
3668
  * Emitted on BOTH source and target grids after a successful cross-grid
3225
3669
  * row transfer.
3670
+ *
3671
+ * @deprecated Use `GridRowDragDropDirective` from
3672
+ * `@toolbox-web/grid-angular/features/row-drag-drop`. Will be removed in v2.0.0.
3226
3673
  */
3227
3674
  rowTransfer: _angular_core.OutputEmitterRef<RowTransferDetail<any>>;
3228
3675
  /**
@@ -3232,8 +3679,35 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
3232
3679
  * ```html
3233
3680
  * <tbw-grid (groupToggle)="onGroupToggle($event)">...</tbw-grid>
3234
3681
  * ```
3682
+ *
3683
+ * @deprecated Use `GridGroupingRowsDirective` from
3684
+ * `@toolbox-web/grid-angular/features/grouping-rows`. Will be removed in v2.0.0.
3235
3685
  */
3236
3686
  groupToggle: _angular_core.OutputEmitterRef<GroupToggleDetail>;
3687
+ /**
3688
+ * Emitted when a group is expanded.
3689
+ *
3690
+ * @example
3691
+ * ```html
3692
+ * <tbw-grid (groupExpand)="onGroupExpand($event)">...</tbw-grid>
3693
+ * ```
3694
+ *
3695
+ * @deprecated Use `GridGroupingRowsDirective` from
3696
+ * `@toolbox-web/grid-angular/features/grouping-rows`. Will be removed in v2.0.0.
3697
+ */
3698
+ groupExpand: _angular_core.OutputEmitterRef<GroupExpandDetail>;
3699
+ /**
3700
+ * Emitted when a group is collapsed.
3701
+ *
3702
+ * @example
3703
+ * ```html
3704
+ * <tbw-grid (groupCollapse)="onGroupCollapse($event)">...</tbw-grid>
3705
+ * ```
3706
+ *
3707
+ * @deprecated Use `GridGroupingRowsDirective` from
3708
+ * `@toolbox-web/grid-angular/features/grouping-rows`. Will be removed in v2.0.0.
3709
+ */
3710
+ groupCollapse: _angular_core.OutputEmitterRef<GroupCollapseDetail>;
3237
3711
  /**
3238
3712
  * Emitted when a tree node is expanded.
3239
3713
  *
@@ -3241,6 +3715,9 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
3241
3715
  * ```html
3242
3716
  * <tbw-grid (treeExpand)="onTreeExpand($event)">...</tbw-grid>
3243
3717
  * ```
3718
+ *
3719
+ * @deprecated Use `GridTreeDirective` from
3720
+ * `@toolbox-web/grid-angular/features/tree`. Will be removed in v2.0.0.
3244
3721
  */
3245
3722
  treeExpand: _angular_core.OutputEmitterRef<TreeExpandDetail<any>>;
3246
3723
  /**
@@ -3250,6 +3727,9 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
3250
3727
  * ```html
3251
3728
  * <tbw-grid (detailExpand)="onDetailExpand($event)">...</tbw-grid>
3252
3729
  * ```
3730
+ *
3731
+ * @deprecated Use `GridMasterDetailDirective` from
3732
+ * `@toolbox-web/grid-angular/features/master-detail`. Will be removed in v2.0.0.
3253
3733
  */
3254
3734
  detailExpand: _angular_core.OutputEmitterRef<DetailExpandDetail>;
3255
3735
  /**
@@ -3259,8 +3739,23 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
3259
3739
  * ```html
3260
3740
  * <tbw-grid (responsiveChange)="onResponsiveChange($event)">...</tbw-grid>
3261
3741
  * ```
3742
+ *
3743
+ * @deprecated Use `GridResponsiveDirective` from
3744
+ * `@toolbox-web/grid-angular/features/responsive`. Will be removed in v2.0.0.
3262
3745
  */
3263
3746
  responsiveChange: _angular_core.OutputEmitterRef<ResponsiveChangeDetail>;
3747
+ /**
3748
+ * Emitted when the context menu opens.
3749
+ *
3750
+ * @example
3751
+ * ```html
3752
+ * <tbw-grid (contextMenuOpen)="onContextMenuOpen($event)">...</tbw-grid>
3753
+ * ```
3754
+ *
3755
+ * @deprecated Use `GridContextMenuDirective` from
3756
+ * `@toolbox-web/grid-angular/features/context-menu`. Will be removed in v2.0.0.
3757
+ */
3758
+ contextMenuOpen: _angular_core.OutputEmitterRef<ContextMenuOpenDetail>;
3264
3759
  /**
3265
3760
  * Emitted when cells are copied to clipboard.
3266
3761
  *
@@ -3268,6 +3763,9 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
3268
3763
  * ```html
3269
3764
  * <tbw-grid (copy)="onCopy($event)">...</tbw-grid>
3270
3765
  * ```
3766
+ *
3767
+ * @deprecated Use `GridClipboardDirective` from
3768
+ * `@toolbox-web/grid-angular/features/clipboard`. Will be removed in v2.0.0.
3271
3769
  */
3272
3770
  copy: _angular_core.OutputEmitterRef<CopyDetail>;
3273
3771
  /**
@@ -3277,17 +3775,35 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
3277
3775
  * ```html
3278
3776
  * <tbw-grid (paste)="onPaste($event)">...</tbw-grid>
3279
3777
  * ```
3778
+ *
3779
+ * @deprecated Use `GridClipboardDirective` from
3780
+ * `@toolbox-web/grid-angular/features/clipboard`. Will be removed in v2.0.0.
3280
3781
  */
3281
3782
  paste: _angular_core.OutputEmitterRef<PasteDetail>;
3282
3783
  /**
3283
- * Emitted when undo/redo is performed.
3784
+ * Emitted when an undo action is performed.
3785
+ *
3786
+ * @example
3787
+ * ```html
3788
+ * <tbw-grid (undo)="onUndo($event)">...</tbw-grid>
3789
+ * ```
3790
+ *
3791
+ * @deprecated Use `GridUndoRedoDirective` from
3792
+ * `@toolbox-web/grid-angular/features/undo-redo`. Will be removed in v2.0.0.
3793
+ */
3794
+ undo: _angular_core.OutputEmitterRef<UndoRedoDetail>;
3795
+ /**
3796
+ * Emitted when a redo action is performed.
3284
3797
  *
3285
3798
  * @example
3286
3799
  * ```html
3287
- * <tbw-grid (undoRedoAction)="onUndoRedo($event)">...</tbw-grid>
3800
+ * <tbw-grid (redo)="onRedo($event)">...</tbw-grid>
3288
3801
  * ```
3802
+ *
3803
+ * @deprecated Use `GridUndoRedoDirective` from
3804
+ * `@toolbox-web/grid-angular/features/undo-redo`. Will be removed in v2.0.0.
3289
3805
  */
3290
- undoRedoAction: _angular_core.OutputEmitterRef<UndoRedoDetail>;
3806
+ redo: _angular_core.OutputEmitterRef<UndoRedoDetail>;
3291
3807
  /**
3292
3808
  * Emitted when export completes.
3293
3809
  *
@@ -3295,6 +3811,9 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
3295
3811
  * ```html
3296
3812
  * <tbw-grid (exportComplete)="onExportComplete($event)">...</tbw-grid>
3297
3813
  * ```
3814
+ *
3815
+ * @deprecated Use `GridExportDirective` from
3816
+ * `@toolbox-web/grid-angular/features/export`. Will be removed in v2.0.0.
3298
3817
  */
3299
3818
  exportComplete: _angular_core.OutputEmitterRef<ExportCompleteDetail>;
3300
3819
  /**
@@ -3304,6 +3823,9 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
3304
3823
  * ```html
3305
3824
  * <tbw-grid (printStart)="onPrintStart($event)">...</tbw-grid>
3306
3825
  * ```
3826
+ *
3827
+ * @deprecated Use `GridPrintDirective` from
3828
+ * `@toolbox-web/grid-angular/features/print`. Will be removed in v2.0.0.
3307
3829
  */
3308
3830
  printStart: _angular_core.OutputEmitterRef<PrintStartDetail>;
3309
3831
  /**
@@ -3313,6 +3835,9 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
3313
3835
  * ```html
3314
3836
  * <tbw-grid (printComplete)="onPrintComplete($event)">...</tbw-grid>
3315
3837
  * ```
3838
+ *
3839
+ * @deprecated Use `GridPrintDirective` from
3840
+ * `@toolbox-web/grid-angular/features/print`. Will be removed in v2.0.0.
3316
3841
  */
3317
3842
  printComplete: _angular_core.OutputEmitterRef<PrintCompleteDetail>;
3318
3843
  /**
@@ -3332,15 +3857,37 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
3332
3857
  */
3333
3858
  tbwScroll: _angular_core.OutputEmitterRef<TbwScrollDetail>;
3334
3859
  private readonly eventOutputMap;
3860
+ /** Events deliberately not exposed as Angular outputs. Keep empty unless documented. */
3861
+ private _intentionallyOmittedEvents;
3862
+ private _assertEventOutputMapCoversCore;
3335
3863
  private eventListeners;
3336
3864
  ngOnInit(): void;
3337
3865
  /**
3338
3866
  * Sets up event listeners for all outputs using the eventOutputMap.
3867
+ *
3868
+ * Hybrid v1.x / v2 ownership: events claimed by an attribute-selector
3869
+ * feature directive (via `claimEvent` in `feature-claims.ts`) are skipped
3870
+ * here so the directive's own `output()` is the sole emitter. Without
3871
+ * this skip both this directive's deprecated output and the directive's
3872
+ * new output would fire for the same DOM event.
3339
3873
  */
3340
3874
  private setupEventListeners;
3341
3875
  /**
3342
3876
  * Creates plugins from feature inputs.
3343
3877
  * Uses the feature registry to allow tree-shaking - only imported features are bundled.
3878
+ * Per-feature config bridging (e.g. converting Angular component classes inside
3879
+ * `groupingColumns` / `groupingRows` / `pinnedRows` configs to renderer functions)
3880
+ * runs via `getFeatureConfigPreprocessor`, populated by feature secondary entries.
3881
+ *
3882
+ * Hybrid v1.x / v2 ownership: when an attribute-selector feature directive
3883
+ * (e.g. `GridFilteringDirective`) is present on the same `<tbw-grid>`
3884
+ * element it claims its feature in `feature-claims.ts`. We then read the
3885
+ * claim's config getter — which transitively reads the directive's input
3886
+ * signal, establishing reactive dependency tracking — instead of the
3887
+ * deprecated input on this directive. This keeps the existing `[filtering]`
3888
+ * binding working when used directly on `<tbw-grid>` (no directive, no
3889
+ * claim) while letting the directive own the binding when imported.
3890
+ *
3344
3891
  * Returns the array of created plugins (doesn't modify grid).
3345
3892
  */
3346
3893
  private createFeaturePlugins;
@@ -3350,21 +3897,9 @@ declare class Grid implements OnInit, AfterContentInit, OnDestroy {
3350
3897
  * Uses the grid's registerStyles() API for clean encapsulation.
3351
3898
  */
3352
3899
  private registerCustomStyles;
3353
- /**
3354
- * Configures the MasterDetailPlugin after Angular templates are registered.
3355
- * - If plugin exists: refresh its detail renderer
3356
- * - If plugin doesn't exist but <tbw-grid-detail> is present: dynamically import and add the plugin
3357
- */
3358
- private configureMasterDetail;
3359
- /**
3360
- * Configures the ResponsivePlugin with Angular template-based card renderer.
3361
- * - If plugin exists: updates its cardRenderer configuration
3362
- * - If plugin doesn't exist but <tbw-grid-responsive-card> is present: logs a warning
3363
- */
3364
- private configureResponsiveCard;
3365
3900
  ngOnDestroy(): void;
3366
3901
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<Grid, never>;
3367
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<Grid, "tbw-grid", never, { "customStyles": { "alias": "customStyles"; "required": false; "isSignal": true; }; "sortable": { "alias": "sortable"; "required": false; "isSignal": true; }; "filterable": { "alias": "filterable"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "fitMode": { "alias": "fitMode"; "required": false; "isSignal": true; }; "gridConfig": { "alias": "gridConfig"; "required": false; "isSignal": true; }; "selection": { "alias": "selection"; "required": false; "isSignal": true; }; "editing": { "alias": "editing"; "required": false; "isSignal": true; }; "clipboard": { "alias": "clipboard"; "required": false; "isSignal": true; }; "contextMenu": { "alias": "contextMenu"; "required": false; "isSignal": true; }; "multiSort": { "alias": "multiSort"; "required": false; "isSignal": true; }; "filtering": { "alias": "filtering"; "required": false; "isSignal": true; }; "reorderColumns": { "alias": "reorderColumns"; "required": false; "isSignal": true; }; "visibility": { "alias": "visibility"; "required": false; "isSignal": true; }; "pinnedColumns": { "alias": "pinnedColumns"; "required": false; "isSignal": true; }; "groupingColumns": { "alias": "groupingColumns"; "required": false; "isSignal": true; }; "columnVirtualization": { "alias": "columnVirtualization"; "required": false; "isSignal": true; }; "reorderRows": { "alias": "reorderRows"; "required": false; "isSignal": true; }; "rowDragDrop": { "alias": "rowDragDrop"; "required": false; "isSignal": true; }; "groupingRows": { "alias": "groupingRows"; "required": false; "isSignal": true; }; "pinnedRows": { "alias": "pinnedRows"; "required": false; "isSignal": true; }; "tree": { "alias": "tree"; "required": false; "isSignal": true; }; "masterDetail": { "alias": "masterDetail"; "required": false; "isSignal": true; }; "responsive": { "alias": "responsive"; "required": false; "isSignal": true; }; "undoRedo": { "alias": "undoRedo"; "required": false; "isSignal": true; }; "exportFeature": { "alias": "export"; "required": false; "isSignal": true; }; "print": { "alias": "print"; "required": false; "isSignal": true; }; "pivot": { "alias": "pivot"; "required": false; "isSignal": true; }; "serverSide": { "alias": "serverSide"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; }, { "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"; "rowDragStart": "rowDragStart"; "rowDragEnd": "rowDragEnd"; "rowDrop": "rowDrop"; "rowTransfer": "rowTransfer"; "groupToggle": "groupToggle"; "treeExpand": "treeExpand"; "detailExpand": "detailExpand"; "responsiveChange": "responsiveChange"; "copy": "copy"; "paste": "paste"; "undoRedoAction": "undoRedoAction"; "exportComplete": "exportComplete"; "printStart": "printStart"; "printComplete": "printComplete"; "tbwScroll": "tbwScroll"; }, never, never, true, never>;
3902
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<Grid, "tbw-grid", never, { "customStyles": { "alias": "customStyles"; "required": false; "isSignal": true; }; "sortable": { "alias": "sortable"; "required": false; "isSignal": true; }; "filterable": { "alias": "filterable"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "columnDefaults": { "alias": "columnDefaults"; "required": false; "isSignal": true; }; "fitMode": { "alias": "fitMode"; "required": false; "isSignal": true; }; "gridConfig": { "alias": "gridConfig"; "required": false; "isSignal": true; }; "selection": { "alias": "selection"; "required": false; "isSignal": true; }; "editing": { "alias": "editing"; "required": false; "isSignal": true; }; "clipboard": { "alias": "clipboard"; "required": false; "isSignal": true; }; "contextMenu": { "alias": "contextMenu"; "required": false; "isSignal": true; }; "multiSort": { "alias": "multiSort"; "required": false; "isSignal": true; }; "filtering": { "alias": "filtering"; "required": false; "isSignal": true; }; "reorderColumns": { "alias": "reorderColumns"; "required": false; "isSignal": true; }; "visibility": { "alias": "visibility"; "required": false; "isSignal": true; }; "pinnedColumns": { "alias": "pinnedColumns"; "required": false; "isSignal": true; }; "groupingColumns": { "alias": "groupingColumns"; "required": false; "isSignal": true; }; "columnVirtualization": { "alias": "columnVirtualization"; "required": false; "isSignal": true; }; "reorderRows": { "alias": "reorderRows"; "required": false; "isSignal": true; }; "rowDragDrop": { "alias": "rowDragDrop"; "required": false; "isSignal": true; }; "groupingRows": { "alias": "groupingRows"; "required": false; "isSignal": true; }; "pinnedRows": { "alias": "pinnedRows"; "required": false; "isSignal": true; }; "tree": { "alias": "tree"; "required": false; "isSignal": true; }; "masterDetail": { "alias": "masterDetail"; "required": false; "isSignal": true; }; "responsive": { "alias": "responsive"; "required": false; "isSignal": true; }; "undoRedo": { "alias": "undoRedo"; "required": false; "isSignal": true; }; "exportFeature": { "alias": "export"; "required": false; "isSignal": true; }; "print": { "alias": "print"; "required": false; "isSignal": true; }; "pivot": { "alias": "pivot"; "required": false; "isSignal": true; }; "serverSide": { "alias": "serverSide"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; }, { "cellClick": "cellClick"; "rowClick": "rowClick"; "cellActivate": "cellActivate"; "cellChange": "cellChange"; "cellCommit": "cellCommit"; "cellCancel": "cellCancel"; "editOpen": "editOpen"; "beforeEditClose": "beforeEditClose"; "editClose": "editClose"; "dirtyChange": "dirtyChange"; "dataChange": "dataChange"; "rowCommit": "rowCommit"; "changedRowsReset": "changedRowsReset"; "sortChange": "sortChange"; "filterChange": "filterChange"; "columnResize": "columnResize"; "columnResizeReset": "columnResizeReset"; "columnMove": "columnMove"; "columnVisibility": "columnVisibility"; "columnStateChange": "columnStateChange"; "selectionChange": "selectionChange"; "rowMove": "rowMove"; "rowDragStart": "rowDragStart"; "rowDragEnd": "rowDragEnd"; "rowDrop": "rowDrop"; "rowTransfer": "rowTransfer"; "groupToggle": "groupToggle"; "groupExpand": "groupExpand"; "groupCollapse": "groupCollapse"; "treeExpand": "treeExpand"; "detailExpand": "detailExpand"; "responsiveChange": "responsiveChange"; "contextMenuOpen": "contextMenuOpen"; "copy": "copy"; "paste": "paste"; "undo": "undo"; "redo": "redo"; "exportComplete": "exportComplete"; "printStart": "printStart"; "printComplete": "printComplete"; "tbwScroll": "tbwScroll"; }, never, never, true, never>;
3368
3903
  }
3369
3904
 
3370
3905
  /**
@@ -3534,6 +4069,13 @@ declare class TbwRenderer implements OnDestroy {
3534
4069
  * ```
3535
4070
  *
3536
4071
  * @category Directive
4072
+ *
4073
+ * MOVE-IN-V2: this directive (and its `StructuralEditorContext` type) will
4074
+ * physically move into `@toolbox-web/grid-angular/features/editing` in v2.0.0;
4075
+ * the deprecated re-export from the main `@toolbox-web/grid-angular` entry
4076
+ * will be removed at the same time. Consumers should already be importing
4077
+ * from the feature entry. (`TbwRenderer` stays in the main entry — it is
4078
+ * editor-agnostic.)
3537
4079
  */
3538
4080
  declare class TbwEditor implements OnDestroy {
3539
4081
  private template;
@@ -3551,6 +4093,222 @@ declare class TbwEditor implements OnDestroy {
3551
4093
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TbwEditor, "[tbwEditor]", never, {}, {}, never, never, true, never>;
3552
4094
  }
3553
4095
 
3554
- export { BaseFilterPanel, BaseGridEditor, BaseGridEditorCVA, BaseOverlayEditor, GRID_ICONS, GRID_TYPE_DEFAULTS, Grid, GridAdapter, GridColumnEditor, GridColumnView, GridDetailView, GridFormArray, GridIconRegistry, GridLazyForm, GridResponsiveCard, GridToolPanel, GridTypeRegistry, TbwEditor, TbwGridColumn, TbwGridHeader, TbwGridToolButtons, TbwRenderer, getFormArrayContext, getLazyFormContext, injectGrid, isComponentClass, provideGridIcons, provideGridTypeDefaults };
3555
- export type { CellCommitEvent, CellEditor, CellRenderer, ColumnConfig, FeatureName, FilterPanel, FormArrayContext, GridCellContext, GridConfig, GridDetailContext, GridEditorContext, GridResponsiveCardContext, GridToolPanelContext, InjectGridReturn, LazyFormFactory, OverlayPosition, RowCommitEvent, RowFormChangeEvent, StructuralCellContext, StructuralEditorContext, TypeDefault, TypeDefaultRegistration };
4096
+ /**
4097
+ * Combined provider helper for grid type defaults and icons.
4098
+ *
4099
+ * Convenience function that combines `provideGridTypeDefaults` and
4100
+ * `provideGridIcons` into a single call for application bootstrap.
4101
+ *
4102
+ * @example
4103
+ * ```typescript
4104
+ * // app.config.ts
4105
+ * import { ApplicationConfig } from '@angular/core';
4106
+ * import { provideGrid } from '@toolbox-web/grid-angular';
4107
+ *
4108
+ * export const appConfig: ApplicationConfig = {
4109
+ * providers: [
4110
+ * provideGrid({
4111
+ * typeDefaults: {
4112
+ * country: { renderer: CountryCellComponent },
4113
+ * },
4114
+ * icons: {
4115
+ * sortAsc: '↑',
4116
+ * sortDesc: '↓',
4117
+ * },
4118
+ * }),
4119
+ * ],
4120
+ * };
4121
+ * ```
4122
+ */
4123
+
4124
+ /**
4125
+ * Options for {@link provideGrid}.
4126
+ */
4127
+ interface ProvideGridOptions {
4128
+ /** Type defaults to register globally. Equivalent to `provideGridTypeDefaults`. */
4129
+ typeDefaults?: Record<string, TypeDefaultRegistration>;
4130
+ /** Icon overrides to register globally. Equivalent to `provideGridIcons`. */
4131
+ icons?: Partial<GridIcons>;
4132
+ }
4133
+ /**
4134
+ * Combined provider for grid type defaults and icons.
4135
+ *
4136
+ * Returns environment providers that can be added to your `ApplicationConfig`
4137
+ * `providers` array. Either field is optional — only the registries you
4138
+ * supply are wired up.
4139
+ *
4140
+ * Equivalent to calling `provideGridTypeDefaults(options.typeDefaults)` and
4141
+ * `provideGridIcons(options.icons)` separately.
4142
+ */
4143
+ declare function provideGrid(options?: ProvideGridOptions): EnvironmentProviders;
4144
+
4145
+ /**
4146
+ * Internal registries used by `@toolbox-web/grid-angular`.
4147
+ *
4148
+ * Two extension points are exposed so individual feature secondary entries
4149
+ * (e.g. `@toolbox-web/grid-angular/features/master-detail`) can plug into
4150
+ * the core `Grid` directive without the directive needing to know about them.
4151
+ *
4152
+ * - {@link registerTemplateBridge} — runs in `ngAfterContentInit` once Angular
4153
+ * templates inside the grid have been registered. Used to discover light-DOM
4154
+ * slot elements (`<tbw-grid-detail>`, `<tbw-grid-responsive-card>`, …) and
4155
+ * wire them to the corresponding plugin's renderer setter.
4156
+ * - {@link registerFeatureConfigPreprocessor} — runs inside the directive's
4157
+ * feature-plugin builder before `createPluginFromFeature` is called. Lets a
4158
+ * feature transform its config object (e.g. to convert Angular component
4159
+ * classes embedded in `customPanels` to renderer functions).
4160
+ *
4161
+ * Both registries are append-only and module-scoped: they are populated by
4162
+ * side-effect imports of feature secondary entries and consumed by the core
4163
+ * `Grid` directive. Order is insertion order.
4164
+ *
4165
+ * @internal — public for cross-entry-point use; not part of the supported API.
4166
+ */
4167
+
4168
+ /**
4169
+ * Context passed to template bridges.
4170
+ *
4171
+ * @internal
4172
+ */
4173
+ interface TemplateBridgeContext {
4174
+ /** The `<tbw-grid>` element this directive is attached to. */
4175
+ grid: HTMLElement;
4176
+ /** The Angular `GridAdapter` instance for this grid. */
4177
+ adapter: GridAdapter;
4178
+ }
4179
+ /**
4180
+ * A template bridge runs once per grid in `ngAfterContentInit`, after the
4181
+ * grid has refreshed its columns and Angular content templates have been
4182
+ * registered. Bridges may be async; the directive does not await them
4183
+ * sequentially — they run concurrently.
4184
+ *
4185
+ * @internal
4186
+ */
4187
+ type TemplateBridge = (ctx: TemplateBridgeContext) => void | Promise<void>;
4188
+ /**
4189
+ * Register a template bridge. Called by feature secondary entries at module
4190
+ * load (e.g. `import '@toolbox-web/grid-angular/features/master-detail'`).
4191
+ *
4192
+ * Bridges are append-only and never deduplicated; calling registration twice
4193
+ * for the same feature module is safe because module imports are deduplicated
4194
+ * by the JS loader.
4195
+ *
4196
+ * @internal
4197
+ */
4198
+ declare function registerTemplateBridge(bridge: TemplateBridge): void;
4199
+ /**
4200
+ * Run all registered template bridges for a grid. The directive calls this
4201
+ * from `ngAfterContentInit` after `refreshColumns()`. Bridges run concurrently;
4202
+ * errors thrown by one bridge do not stop the others.
4203
+ *
4204
+ * @internal
4205
+ */
4206
+ declare function runTemplateBridges(ctx: TemplateBridgeContext): void;
4207
+ /**
4208
+ * A feature config preprocessor receives the user-supplied config for a
4209
+ * specific feature input and returns a transformed config that the core
4210
+ * plugin factory can consume. Used to bridge Angular component classes
4211
+ * embedded in feature configs (e.g. `customPanels`, `groupHeaderRenderer`)
4212
+ * to plain renderer functions.
4213
+ *
4214
+ * Receives the typed config and the directive's adapter. Returning the same
4215
+ * reference is fine — preprocessors typically clone-and-augment.
4216
+ *
4217
+ * @internal
4218
+ */
4219
+ type FeatureConfigPreprocessor = (config: unknown, adapter: GridAdapter) => unknown;
4220
+ /**
4221
+ * Register a feature config preprocessor. Last registration wins (subsequent
4222
+ * imports of the same feature module re-register the same function, which is
4223
+ * a no-op).
4224
+ *
4225
+ * @internal
4226
+ */
4227
+ declare function registerFeatureConfigPreprocessor(name: FeatureName, fn: FeatureConfigPreprocessor): void;
4228
+ /**
4229
+ * Look up the preprocessor for a feature, if any.
4230
+ *
4231
+ * @internal
4232
+ */
4233
+ declare function getFeatureConfigPreprocessor(name: FeatureName): FeatureConfigPreprocessor | undefined;
4234
+
4235
+ /**
4236
+ * Per-grid-element claims registry used by the hybrid feature-directive
4237
+ * refactor (v1.4 → v2).
4238
+ *
4239
+ * Background: historically every plugin's input/output (e.g. `[filtering]`,
4240
+ * `(filterChange)`) was declared on the central {@link Grid} directive. That
4241
+ * pulled the typed surface for every {@link FeatureName} into the core
4242
+ * bundle — even for apps that only used a few. The new approach gives every
4243
+ * feature a thin **attribute-selector** directive (e.g.
4244
+ * `GridFilteringDirective` with selector `tbw-grid[filtering], tbw-grid[filterChange]`)
4245
+ * that lives in the feature secondary entry, so the plugin's typed surface
4246
+ * is only paid for when the feature is actually imported.
4247
+ *
4248
+ * To stay non-breaking in v1.x, the deprecated inputs/outputs remain on
4249
+ * {@link Grid}. When a feature directive is present on the same `<tbw-grid>`
4250
+ * element it **claims** its feature here; {@link Grid} consults the registry
4251
+ * and lets the directive own the input + event so we never produce duplicate
4252
+ * plugins or double-emit events.
4253
+ *
4254
+ * This module is deliberately framework-free (plain {@link WeakMap} state, no
4255
+ * `@angular/core` imports) so feature secondary entries can import it through
4256
+ * the package barrel without introducing circular module graphs. The
4257
+ * {@link FeatureName} and {@link DataGridEventMap} type imports are
4258
+ * type-only, so no runtime dependency leaks.
4259
+ *
4260
+ * @internal
4261
+ */
4262
+
4263
+ /** Event names that can be claimed by a feature directive. */
4264
+ type ClaimableEventName = keyof DataGridEventMap<unknown>;
4265
+ /**
4266
+ * Reads the directive-owned config value for a feature. The function is
4267
+ * called during {@link Grid}'s `createFeaturePlugins` effect, so reading a
4268
+ * signal inside it establishes reactive dependency tracking — the effect
4269
+ * re-runs when the directive's input changes.
4270
+ * @internal
4271
+ */
4272
+ type FeatureConfigGetter = () => unknown;
4273
+ /**
4274
+ * Register a feature claim. Called by a feature directive's constructor;
4275
+ * the {@link Grid} directive will then use {@link getFeatureClaim} during
4276
+ * plugin creation instead of reading its own deprecated input.
4277
+ * @internal
4278
+ */
4279
+ declare function registerFeatureClaim(grid: HTMLElement, name: FeatureName, getConfig: FeatureConfigGetter): void;
4280
+ /**
4281
+ * Look up a feature claim. Returns the registered config getter, or
4282
+ * `undefined` if no directive owns this feature on this element.
4283
+ * @internal
4284
+ */
4285
+ declare function getFeatureClaim(grid: HTMLElement, name: FeatureName): FeatureConfigGetter | undefined;
4286
+ /**
4287
+ * Drop a feature claim. Called by a feature directive's `ngOnDestroy` so
4288
+ * that, if the directive is removed (e.g. via `*ngIf`) but the host
4289
+ * `<tbw-grid>` survives, {@link Grid}'s deprecated input takes back over.
4290
+ * @internal
4291
+ */
4292
+ declare function unregisterFeatureClaim(grid: HTMLElement, name: FeatureName): void;
4293
+ /**
4294
+ * Mark an event as owned by a feature directive. {@link Grid}'s
4295
+ * `setupEventListeners` skips wiring its own deprecated `output()` for any
4296
+ * claimed event — the directive owns the listener and the emit.
4297
+ * @internal
4298
+ */
4299
+ declare function claimEvent(grid: HTMLElement, eventName: ClaimableEventName): void;
4300
+ /**
4301
+ * Returns true if a directive has claimed this event on this grid element.
4302
+ * @internal
4303
+ */
4304
+ declare function isEventClaimed(grid: HTMLElement, eventName: ClaimableEventName): boolean;
4305
+ /**
4306
+ * Drop an event claim. Pair with {@link claimEvent} in a directive's
4307
+ * `ngOnDestroy`.
4308
+ * @internal
4309
+ */
4310
+ declare function unclaimEvent(grid: HTMLElement, eventName: ClaimableEventName): void;
4311
+
4312
+ export { BaseFilterPanel, BaseGridEditor, BaseGridEditorCVA, BaseOverlayEditor, GRID_ICONS, GRID_TYPE_DEFAULTS, Grid, GridAdapter, GridColumnEditor, GridColumnView, GridDetailView, GridFormArray, GridIconRegistry, GridLazyForm, GridResponsiveCard, GridToolPanel, GridTypeRegistry, TbwEditor, TbwGridColumn, TbwGridHeader, TbwGridToolButtons, TbwRenderer, applyColumnDefaults, claimEvent, getDetailTemplate, getFeatureClaim, getFeatureConfigPreprocessor, getFormArrayContext, getLazyFormContext, getResponsiveCardTemplate, hasColumnShorthands, injectGrid, isComponentClass, isEventClaimed, makeFlushFocusedInput, normalizeColumns, parseColumnShorthand, provideGrid, provideGridIcons, provideGridTypeDefaults, registerDetailRendererBridge, registerEditorMountHook, registerFeatureClaim, registerFeatureConfigPreprocessor, registerFilterPanelTypeDefaultBridge, registerResponsiveCardRendererBridge, registerTemplateBridge, runTemplateBridges, unclaimEvent, unregisterFeatureClaim };
4313
+ export type { CellCommitEvent, CellEditor, CellRenderer, ColumnConfig, ColumnShorthand, EditorMountHook, FeatureConfigGetter, FeatureConfigPreprocessor, FeatureName, FilterPanel, FilterPanelTypeDefaultBridge, FormArrayContext, GridCellContext, GridConfig, GridDetailContext, GridEditorContext, GridResponsiveCardContext, GridToolPanelContext, InjectGridReturn, LazyFormFactory, OverlayPosition, ProvideGridOptions, RowCommitEvent, RowFormChangeEvent, RowRendererBridge, StructuralCellContext, StructuralEditorContext, TemplateBridge, TemplateBridgeContext, TypeDefault, TypeDefaultRegistration };
3556
4314
  //# sourceMappingURL=toolbox-web-grid-angular.d.ts.map