# FeatureConfig

> _Since v1.24.0_

Declarative feature configuration interface.

This interface is intentionally empty in core — it is populated via **module augmentation**
by feature side-effect imports (`@toolbox-web/grid/features/selection`, etc.).
Third-party plugins can also augment this interface to add their own features.

#### Example

```ts
// Each feature import augments this interface:
import '@toolbox-web/grid/features/selection';
import '@toolbox-web/grid/features/filtering';

grid.gridConfig = {
  features: {
    selection: 'range',       // ← typed by selection feature module
    filtering: { debounceMs: 200 }, // ← typed by filtering feature module
  },
};
```

## Properties

| Property | Type | Description |
| -------- | ---- | ----------- |
| `__brand?` | <code>undefined</code> | Sentinel property that makes the interface non-empty so TypeScript's excess-property checking rejects unknown feature keys in object literals. Not assignable at runtime (type is `never`). |
| `clipboard?` | <code>boolean &#124; <a href="/grid/plugins/clipboard/interfaces/clipboardconfig/">ClipboardConfig</a></code> | Enable clipboard copy/paste. Requires selection. |
| `columnVirtualization?` | <code>boolean &#124; <a href="/grid/plugins/column-virtualization/interfaces/columnvirtualizationconfig/">ColumnVirtualizationConfig</a></code> | Enable horizontal column virtualization. |
| `contextMenu?` | <code>boolean &#124; <a href="/grid/plugins/context-menu/interfaces/contextmenuconfig/">ContextMenuConfig</a></code> | Enable right-click context menu. |
| `editing?` | <code>boolean &#124; manual &#124; click &#124; dblclick &#124; <a href="/grid/plugins/editing/interfaces/editingconfig/">EditingConfig</a></code> | Enable inline cell editing. |
| `export?` | <code>boolean &#124; <a href="/grid/plugins/export/interfaces/exportconfig/">ExportConfig</a></code> | Enable data export (CSV, Excel, etc.). |
| `filtering?` | <code>boolean &#124; <a href="/grid/plugins/filtering/interfaces/filterconfig/">FilterConfig</a>&lt;TRow&gt;</code> | Enable column filtering. |
| `groupingColumns?` | <code>boolean &#124; <a href="/grid/plugins/grouping-columns/interfaces/groupingcolumnsconfig/">GroupingColumnsConfig</a></code> | Enable column grouping headers. |
| `groupingRows?` | <code><a href="/grid/plugins/grouping-rows/interfaces/groupingrowsconfig/">GroupingRowsConfig</a></code> | Enable row grouping with expand/collapse. |
| `masterDetail?` | <code><a href="/grid/plugins/master-detail/interfaces/masterdetailconfig/">MasterDetailConfig</a></code> | Enable master-detail rows with expandable detail panels. |
| `multiSort?` | <code>boolean &#124; multi &#124; <a href="/grid/plugins/multi-sort/interfaces/multisortconfig/">MultiSortConfig</a> &#124; single</code> | Enable multi-column sorting. |
| `pinnedColumns?` | <code>boolean</code> | Enable column pinning (left/right). |
| `pinnedRows?` | <code>boolean &#124; <a href="/grid/plugins/pinned-rows/interfaces/pinnedrowsconfig/">PinnedRowsConfig</a></code> | Enable pinned (frozen) rows at top/bottom of the grid. |
| `pivot?` | <code><a href="/grid/plugins/pivot/interfaces/pivotconfig/">PivotConfig</a></code> | Enable pivot table mode. |
| `print?` | <code>boolean &#124; <a href="/grid/plugins/print/interfaces/printconfig/">PrintConfig</a></code> | Enable print support with configurable layout. |
| `reorderColumns?` | <code>boolean &#124; <a href="/grid/plugins/reorder-columns/interfaces/reorderconfig/">ReorderConfig</a></code> | Enable column drag-to-reorder. |
| `reorderRows?` | <code>boolean &#124; <a href="/grid/plugins/row-drag-drop/interfaces/rowdragdropconfig/">RowDragDropConfig</a>&lt;unknown&gt;</code> | ⚠️  |
| `responsive?` | <code>boolean &#124; <a href="/grid/plugins/responsive/interfaces/responsivepluginconfig/">ResponsivePluginConfig</a>&lt;unknown&gt;</code> | Enable responsive column hiding based on breakpoints. |
| `rowDragDrop?` | <code>boolean &#124; <a href="/grid/plugins/row-drag-drop/interfaces/rowdragdropconfig/">RowDragDropConfig</a>&lt;unknown&gt;</code> | Enable row drag-drop (intra-grid + optional cross-grid via `dropZone`). |
| `selection?` | <code>cell &#124; row &#124; range &#124; <a href="/grid/plugins/selection/interfaces/selectionconfig/">SelectionConfig</a>&lt;TRow&gt;</code> | Enable cell/row/range selection. |
| `serverSide?` | <code>boolean &#124; <a href="/grid/plugins/server-side/interfaces/serversideconfig/">ServerSideConfig</a></code> | Enable server-side data fetching, sorting, filtering, etc. |
| `shell?` | <code>boolean &#124; <a href="/grid/plugins/shell/interfaces/shellconfig/">ShellConfig</a></code> | Enable the grid shell (header bar + tool panels). |
| `stickyRows?` | <code><a href="/grid/plugins/sticky-rows/interfaces/stickyrowsconfig/">StickyRowsConfig</a></code> | Pin selected data rows below the header as the user scrolls past them. |
| `tooltip?` | <code>boolean &#124; <a href="/grid/plugins/tooltip/interfaces/tooltipconfig/">TooltipConfig</a></code> | Enable automatic overflow tooltips on headers and cells. |
| `tree?` | <code>boolean &#124; <a href="/grid/plugins/tree/interfaces/treeconfig/">TreeConfig</a></code> | Enable tree (hierarchical) data display with expand/collapse. |
| `undoRedo?` | <code>boolean &#124; <a href="/grid/plugins/undo-redo/interfaces/undoredoconfig/">UndoRedoConfig</a></code> | Enable undo/redo for cell edits. Requires `editing`. |
| `visibility?` | <code>boolean &#124; <a href="/grid/plugins/visibility/interfaces/visibilityconfig/">VisibilityConfig</a></code> | Enable column visibility toggling. |
