Data Table Blueprint

Sortable, filterable, paginated data table with column management, row selection, inline editing, bulk actions, and CSV export

   
Feature data-table
Category UI
Version 1.0.0
Tags table, data-grid, sorting, filtering, pagination, inline-editing, bulk-actions, export
YAML Source View on GitHub
JSON API data-table.json

Fields

Name Type Required Label Description
columns json Yes Column Definitions Validations: required
data_source json Yes Data Source Configuration Validations: required
page_size number No Page Size Validations: min, max
current_page number No Current Page  
selected_rows json No Selected Row IDs  
sort_by text No Sort Column Key  
sort_order select No Sort Order  
filters json No Active Filters  
selection_mode select No Selection Mode  

Rules

  • columns:
    • max_columns: 50
    • resizable: true
    • reorderable: true
    • min_width_px: 50
  • performance:
    • virtual_scrolling_threshold: 1000
    • debounce_filter_ms: 300
    • debounce_search_ms: 300
  • persistence:
    • column_preferences_per_user: true
    • filter_state_in_url: true
    • storage: localStorage
  • pagination:
    • server_side: true
    • page_size_options: 10, 25, 50, 100
    • show_total_count: true
  • export:
    • formats: csv
    • max_export_rows: 10000
    • include_filtered_only: true

Outcomes

Table_rendered (Priority: 1) — Error: TABLE_COLUMN_NOT_SORTABLE

Given:

  • column definitions are provided
  • data source is configured and returns data

Then:

  • set_field target: current_page value: 1 — Initialize to first page
  • emit_event event: table.rendered

Result: Data table displays with columns, rows, and pagination controls

Column_sorted (Priority: 2)

Given:

  • user clicks a sortable column header

Then:

  • set_field target: sort_by — Set sort column to clicked column key
  • set_field target: sort_order — Toggle between asc and desc, or set to asc for new column
  • set_field target: current_page value: 1 — Reset to first page on sort change
  • emit_event event: table.sorted

Result: Table re-renders with data sorted by the selected column

Filter_applied (Priority: 3)

Given:

  • user enters a filter value on a filterable column
  • filter debounce period (300ms) has elapsed

Then:

  • set_field target: filters — Add or update filter for the column
  • set_field target: current_page value: 1 — Reset to first page on filter change
  • emit_event event: table.filtered

Result: Table displays only rows matching the filter criteria

Row_selected (Priority: 4)

Given:

  • selection mode is single or multi
  • user clicks a row or selection checkbox

Then:

  • set_field target: selected_rows — Add or remove row ID from selection array
  • emit_event event: table.row_selected

Result: Row visually highlighted, selection state updated

Bulk_action_executed (Priority: 5)

Given:

  • one or more rows are selected
  • user triggers a bulk action (delete, export, status change)

Then:

  • call_service target: bulk_action_handler — Execute the selected action on all selected rows
  • set_field target: selected_rows — Clear selection after action completes
  • emit_event event: table.bulk_action

Result: Bulk action applied to all selected rows, selection cleared

Inline_edit_saved (Priority: 6)

Given:

  • user double-clicks an editable cell
  • user modifies the value and confirms (Enter or blur)
  • new value passes column validation

Then:

  • set_field target: data_source — Update the cell value in the data source
  • emit_event event: table.cell_edited

Result: Cell value updated, row refreshed

Inline_edit_invalid (Priority: 7) — Error: TABLE_CELL_VALIDATION_FAILED

Given:

  • user modifies a cell value
  • new value fails column validation rules

Then:

  • emit_event event: table.cell_edit_failed

Result: Validation error shown inline, cell reverts to original value

Export_completed (Priority: 8)

Given:

  • user triggers CSV export
  • total exportable rows are within the 10000 limit

Then:

  • call_service target: export_handler — Generate CSV from visible columns and filtered data
  • emit_event event: table.exported

Result: CSV file downloaded to the user’s device

Export_too_large (Priority: 9) — Error: TABLE_EXPORT_TOO_LARGE

Given:

  • total_rows (computed) gt 10000

Then:

  • emit_event event: table.export_failed

Result: User informed to apply filters to reduce the data set before exporting

Errors

Code Status Message Retry
TABLE_CELL_VALIDATION_FAILED 422 The entered value is not valid for this column Yes
TABLE_EXPORT_TOO_LARGE 400 Too many rows to export. Please apply filters to reduce the data set. Yes
TABLE_DATA_SOURCE_ERROR 500 Failed to load table data from the data source Yes
TABLE_COLUMN_NOT_SORTABLE 400 This column does not support sorting No

Events

Event Description Payload
table.rendered Data table rendered with initial data total_rows, page_size, column_count
table.sorted Table data sorted by a column sort_by, sort_order
table.filtered Table data filtered filters, result_count
table.row_selected A row was selected or deselected row_id, selected_rows, selection_count
table.bulk_action A bulk action was executed on selected rows action_type, affected_row_ids, result
table.cell_edited A cell value was edited inline row_id, column_key, old_value, new_value
table.cell_edit_failed An inline cell edit failed validation row_id, column_key, value, error
table.exported Table data was exported format, row_count, column_count
table.export_failed Table export failed due to row limit total_rows, max_allowed
Feature Relationship Reason
pagination required Data tables require pagination for large data sets
search-and-filtering recommended Server-side filtering integrates with the search and filtering feature
accessibility recommended Tables must be keyboard navigable and screen reader compatible
internationalization optional Column headers, filter labels, and pagination text may need translation

AGI Readiness

Goals

Reliable Data Table

Sortable, filterable, paginated data table with column management, row selection, inline editing, bulk actions, and CSV export

Success Metrics:

Metric Target Measurement
success_rate >= 99% Successful operations divided by total attempts
error_rate < 1% Failed operations divided by total attempts

Autonomy

Level: semi_autonomous

Escalation Triggers:

  • error_rate > 5

Tradeoffs

Prefer Over Reason
accessibility aesthetics UI must be usable by all users including those with disabilities

Coordination

Protocol: request_response

Consumes:

Capability From Fallback
pagination pagination degrade

Safety

Action Permission Cooldown Max Auto
table_rendered autonomous - -
column_sorted autonomous - -
filter_applied autonomous - -
row_selected autonomous - -
bulk_action_executed autonomous - -
inline_edit_saved autonomous - -
inline_edit_invalid autonomous - -
export_completed autonomous - -
export_too_large autonomous - -