# Table Draft Review

Generate a table from documents, review its fields and source evidence, and save the reviewed result.

## Add it to an app

1. Open the app builder and find **Table Draft Review** in the component palette.
2. Insert it into the intended region or container.
3. Set its properties in the inspector. Use a literal for a fixed value or a binding for a value supplied by the app.
4. Connect its events where the app should respond to a user gesture.
5. Preview with representative data and save after resolving validation problems.

The type name in the builder’s code view is `table_draft_review`.

## Settings

| Setting | Accepted value | Required | Default | What it controls |
| --- | --- | --- | --- | --- |
| Open captured documents (`allowSourceNavigation`) | boolean | No | false | The listed default is inserted when adding a new component. |
| Dock (`dock`) | "bottom" | No | "bottom" | Literal only; do not use an expression binding. The listed default is inserted when adding a new component. |
| Reference document key (`referenceSourceKey`) | string or null | No | Not specified | Supports expression bindings. |
| Draft to restore (`requestedDraftId`) | string or null | No | Not specified | Supports expression bindings. A draft id to reopen, e.g. the discovered initial draft. |
| Document review source ID (`sourceId`) | string | No | "" | The listed default is inserted when adding a new component. |
| Document keys (`sourceKeys`) | list of string | No | [] | Supports expression bindings. The listed default is inserted when adding a new component. |
| Table to update (`targetTable`) | object or null | No | Not specified | Supports expression bindings. An existing table {id, name, schemaRevision, dataRevision, rowGrain}; absent = create one. |
| Title (`title`) | string | No | "Review table" | The listed default is inserted when adding a new component. |

## Values available to bindings

| Value | Type | Initial value | Meaning |
| --- | --- | --- | --- |
| `acceptedColumns` | list of object or null | null | The saved columns. |
| `acceptedTableId` | string or null | null | The saved table id. |
| `acceptedTableName` | string or null | null | The saved table's name. |
| `activeEvidence` | object or null | null | The selected cell's source evidence, for the captured-document viewer. |
| `draftId` | string or null | null | The draft under review. |
| `openRequest` | object or null | null | Open the saved table: {id, label, columns, revision} (the tables_list grammar). |
| `status` | "capturing" / "extracting" / "review" / "applied" / "failed" / "cancelled" | null | The draft's lifecycle state. |

Refer to these values through `components.<component-id>.<value>` in a binding. Use the identifier assigned to this instance of Table Draft Review, not the component type name.

## Events

- `onAccept` — The reviewed table was saved.

- `onClose` — The review was closed or cancelled.

- `onEvidence` — A cell's source evidence was opened.

Connect only the actions the app needs. An event can fetch results, run an enabled data source, set state, update another component, show a notification, or navigate where supported.

## Keyboard and accessible labels

Accessible label source: Named by the title prop.

- ArrowLeft/ArrowRight/Home/End move between the view tabs

## Example: Generate a table from the selected documents

| Setting | Example value |
| --- | --- |
| `allowSourceNavigation` | true |
| `referenceSourceKey` | "{{ app.reviewReference }}" |
| `sourceId` | "draft" |
| `sourceKeys` | "{{ app.reviewSourceKeys }}" |

When `onClose` occurs, the example performs:

- `setStateValue` with {"key":"reviewOpen","value":false}

## Example: Update an existing table from a restored draft

| Setting | Example value |
| --- | --- |
| `requestedDraftId` | "{{ app.reviewDraftId }}" |
| `sourceId` | "draft" |
| `sourceKeys` | "{{ app.reviewSourceKeys }}" |
| `targetTable` | "{{ app.reviewTarget }}" |
| `title` | "Update table from documents" |

When `onAccept` occurs, the example performs:

- `setStateValue` with {"key":"reviewOpen","value":false}

## If it is empty or unavailable

Check the source binding, the selected item, and the app’s access. A hosted document, table, review, or storage component needs the corresponding app capability; an offline preview cannot supply live private data. A source running with no results is different from an invalid binding. Inspect the app’s workflow and data source before changing the presentation.
