Changelog¶
Unreleased¶
Added¶
- Faceted filtering:
GridViewFilters.facetsrecompute each filter's options + counts on the currently filtered table (exclude-own).FacetSourceregistry +compute_row_facets(rows) /compute_queryset_facets(Django ORM) + package routeapi_column_filter_dictionaryfor AG-Grid set filters.GridViewFilterOption.count/.disabledcarry counts; wire round-trips. See Faceted filtering. - CSS unification across table backends: one
--cm-*/--cm-table-*/--ag-*token bridge; bothsimpleandag_gridtables follow the same palette. See Theming with CSS tokens. GridViewFilters:navigate_on_change,fragment_endpoint/fragment_target/fragment_swapfor HTMX fragment refresh.GridViewTable.hide_sole_section_header(defaultTrue): when filtering leaves rows in exactly one section the section header is automatically hidden (it is redundant). Set toFalseto keep the header visible. See Simple table § Section rows.- Documented
__section__/section_labelrow keys for group-header rows in simple tables. GridViewToolbar.clear_all: built-in “clear all filters and search” action.- JSON Schema (
grid-view-spec.v2.json):GridViewFilterOptiondef (value,label,children,exclusive,meta,count,disabled);GridViewFilters.facets/navigate_on_change/fragment_*. - MCP
gridview_catalog:api_column_filter_dictionaryroute + facet rules. - Generated TypeScript types from
schema/grid-view-spec.v2.json(single source of truth):npm run gen:types→frontend/src/types/generated/, re-exported fromfrontend/src/types/spec.ts. Drift gate:npm run gen:types:check(inscripts/ci-gate.sh) +tests/test_ts_schema_parity.py. - Schema ↔ types sync:
$defsforGridViewCounter,GridViewFilterOption,GridViewTablePagination,GridViewCardGroup(s),GridViewValidator,GridViewFieldCondition,GridViewFieldset,GridViewField;GridViewToolbar.reload/clear_all; headerpresentation="section"; chartdata_sourcevaluegrid_filtered; set-filtermatchenum aligned toexact/any_token. - Validation diagnostics:
editable_without_edit,edit_commit_xor,gallery_no_source(warning),image_no_url,unknown_validator_kind,pattern_requires_value,custom_validator_missing_name,form_field_duplicate_name,fieldset_unknown_field,invalid_block_target,trusted_css_vars_denied.
Fixed¶
- MCP catalog now advertises all package-builtin renderers (
chip,period_pills,select); these are recognized byvalidate_spec(BUILTIN_RENDERERS). Guarded by a catalog↔builtin test. - Commerce stock grid: the “Wholesale prices” selector rebuilds columns via
column_source(no full page reload); toolbar facet filters refresh the AG datasource with fresh URL state (filter-bar syncs the URL before notifying listeners). Computed price columns are not server-filterable (agFilter: "none"), and unresolvable column filters no-op instead of erroring.
2.0.0¶
2026-06-11 — GridViewSpec release.
Changed¶
- Published the package as
grid-view-spec. - Standardized the public Python module as
grid_view_spec. - Consolidated pages, rendering, assets, validation, and export around the typed
GridViewSpeccontract. - Moved Django integration under
grid_view_spec.backends.django. - Updated template tags to
{% load grid_view_spec %}. - Shipped PDF/XLSX export through package-owned export pipelines.
- Django preferences use the
grid_view_spec_gridpreferencetable.