# PrintPlugin

> _Since v1.4.0_

Print Plugin for tbw-grid

Enables printing the full grid content by temporarily disabling virtualization
and applying print-optimized styles. Handles large datasets gracefully with
configurable row limits.

## Installation

```ts
import { PrintPlugin } from '@toolbox-web/grid/plugins/print';
```

## Events

| Event | Detail | Description |
|-------|--------|-------------|
| `print-start` | [`PrintStartDetail`](/grid/plugins/print/interfaces/printstartdetail.md) | Fired when print begins |
| `print-complete` | [`PrintCompleteDetail`](/grid/plugins/print/interfaces/printcompletedetail.md) | Fired when print completes |

## [Configuration Options](/grid/plugins/print/interfaces/printconfig.md)

| Option | Type | Description |
| ------ | ---- | ----------- |
| `button?` | <code>boolean</code> | Show print button in toolbar (default: false) When true, adds a print icon to the grid toolbar |
| `orientation?` | <code><a href="/grid/plugins/print/types/printorientation/">PrintOrientation</a></code> | Page orientation (default: 'landscape') Grids typically print better in landscape |
| `warnThreshold?` | <code>number</code> | Show a confirmation dialog when row count exceeds this threshold (default: 500) |
| `maxRows?` | <code>number</code> | Maximum rows to print (default: 0 = unlimited) |
| `includeTitle?` | <code>boolean</code> | Include grid title in print output (default: true) Uses shell.header.title if available |
| `includeTimestamp?` | <code>boolean</code> | Include timestamp in print footer (default: true) |
| `title?` | <code>string</code> | Custom print title (overrides shell title) |
| `isolate?` | <code>boolean</code> | Print in isolation mode (default: false) |

## Examples

### Basic Print

```ts
import { queryGrid } from '@toolbox-web/grid';
import { PrintPlugin } from '@toolbox-web/grid/plugins/print';

const grid = queryGrid('tbw-grid');
grid.gridConfig = {
  plugins: [new PrintPlugin()],
};

// Trigger print
const printPlugin = grid.getPluginByName('print');
await printPlugin.print();
```

### With Toolbar Button

```ts
grid.gridConfig = {
  plugins: [new PrintPlugin({ button: true, orientation: 'landscape' })],
};
```

## See Also

- [`PrintConfig`](/grid/plugins/print/interfaces/printconfig.md) for all configuration options

> **Extends** [BaseGridPlugin](/docs/grid-api-plugin-development-classes-basegridplugin--docs)
>
> Inherited methods like `attach()`, `detach()`, `afterRender()`, etc. are documented in the base class.

## Properties

| Property | Type | Description |
| -------- | ---- | ----------- |
| `styles` | <code>string</code> | CSS styles for print mode |

## Methods

### isPrinting()

Check if print is currently in progress

```ts
isPrinting(): boolean
```

***

### print()

Trigger the browser print dialog

This method:
1. Validates row count against maxRows limit
2. Disables virtualization to render all rows
3. Applies print-specific CSS classes
4. Opens the browser print dialog (or isolated window if `isolate: true`)
5. Restores normal state after printing

```ts
print(params: PrintParams): Promise<void>
```

#### Parameters

| Name | Type | Description |
| ---- | ---- | ----------- |
| `params` | <code><a href="/grid/plugins/print/interfaces/printparams/">PrintParams</a></code> | Optional parameters to override config for this print |

#### Returns

`Promise<void>` - Promise that resolves when print dialog closes

***
