Canonicalize product table frames

This commit is contained in:
rcourtman
2026-04-28 21:17:18 +01:00
parent c3b50001e0
commit ef3d30e868
19 changed files with 337 additions and 238 deletions
@@ -168,6 +168,12 @@ work extends shared components instead of creating new local variants.
## Extension Points
1. Add shared primitives in `frontend-modern/src/components/shared/`
Framed product table surfaces must consume the shared
`TableCard` primitive instead of composing page-local `Card` border,
background, and overflow classes. Feature owners may own the table data,
filters, columns, and row behavior, but the outer product-table frame and
its light/dark border treatment belong to frontend primitives so
Infrastructure, Workloads, Storage, and Recovery do not drift visually.
Shared monitored-system warning primitives under that path must stay compact
app-shell pointers into the owned Pulse Pro billing surface. The shared
banner may announce posture and route to the relevant billing tab, but
@@ -224,6 +224,11 @@ regression protection.
the shared `.grouped-table-row` CSS contract in `frontend-modern/src/index.css`,
rather than local `bg-surface-alt` or hover-fill variants that drift between
pages.
Framed product-table cards on the same hot-path surfaces must consume the
frontend-primitives-owned `TableCard` wrapper so Workloads,
Infrastructure, Storage, and Recovery keep one border/background/overflow
frame instead of introducing page-local table shells with different
light/dark contrast.
Infrastructure table responsive behavior belongs to that same hot-path
owner. `frontend-modern/src/components/Infrastructure/useUnifiedResourceTableState.ts`
must derive column visibility from the measured table surface width, with
@@ -68,6 +68,11 @@ querying, and the operator-facing storage health presentation layer.
1. Add or change recovery-point persistence, rollups, or series derivation through `internal/recovery/`
2. Add or change recovery page UX through `frontend-modern/src/components/Recovery/` and keep canonical route/query/filter state ownership in `frontend-modern/src/features/recovery/useRecoverySurfaceState.ts`
Recovery table surfaces must consume the frontend-primitives-owned
`TableCard` frame for protected-item, recovery-event, and adjacent
table-fallback chrome. Storage/recovery may own table content, filters,
columns, and rows, but it must not fork border/background/overflow table
shells or reintroduce lighter open-sided Recovery table frames.
Recovery inventory protection posture and recovery-event outcome filtering
must stay separate in that owner: protected inventory uses the route-backed
`state` query for health, stale, failed, warning, running, unknown, and
@@ -337,7 +337,11 @@ AI-only summary payloads, or page-local heuristics.
plus `frontend-modern/src/components/Infrastructure/useInfrastructureSummaryState.ts`
must consume that scope through the shared page/group/entity interaction
contract rather than inventing infrastructure-local summary filters or
route-backed cluster hover state. Deliberate cluster focus must also stay
route-backed cluster hover state. Host and service infrastructure table
card frames must consume the frontend-primitives-owned `TableCard` wrapper;
unified-resource ownership remains on resource identity, grouping, and row
semantics rather than forking a table border/background shell. Deliberate
cluster focus must also stay
on the canonical infrastructure route through the shared `summaryGroup`
query state, so pinned scope is shareable, reversible, and owned by the
same route-backed summary contract as row focus. Infrastructure must stay