Commit Graph

2 Commits

Author SHA1 Message Date
Forbes
cb88b3977c feat(web): add user-selectable density mode with compact/comfortable toggle
Implements #17, #18, #19, #20, #21

- Add CSS custom properties for density-dependent spacing (--d-* vars)
  in theme.css with comfortable (default) and compact modes
- Create useDensity hook with localStorage persistence and DOM attribute sync
- Add FOUC prevention in main.tsx (sync density before first paint)
- Create shared PageFooter component merging stats + pagination
- Refactor AppShell to flex layout with density toggle button (COM/CMP)
- Consolidate inline pagination from ItemsPage/AuditPage into PageFooter
- Delete FooterStats.tsx (replaced by PageFooter)
- Replace all hardcoded padding/font/gap values in ItemTable, AuditTable,
  ItemsToolbar, and AuditToolbar with var(--d-*) references

Comfortable mode is already tighter than the previous hardcoded values.
Compact mode reduces further for power-user density.
2026-02-08 18:35:25 -06:00
Forbes
cf02ce4231 feat(web): implement Component Audit UI with inline editing
Build the full Audit page replacing the minimal stub with:

Phase 1 - Audit Overview:
- useAudit hook with server-side filtering by project, category,
  tier (mapped to min_score/max_score), sort, and pagination
- AuditSummaryBar: horizontal stacked bar with tier counts, colored
  segments (critical/low/partial/good/complete), clickable to filter
- AuditToolbar: project and category dropdowns, sort selector,
  layout toggle
- AuditTable: sortable table with score badge (colored by tier),
  part number, description, category, sourcing type, missing count
- SplitPanel integration (reused from items) with persistent layout

Phase 2 - Inline Edit Panel:
- AuditDetailPanel: split-panel detail view with field-by-field
  breakdown from GET /api/audit/completeness/{pn}
- Fields grouped into Required, Procurement, Category Properties,
  and Computed sections
- Color-coded left border per field: green if filled, red if empty
- Critical fields (weight >= 3) marked with asterisk
- Inline editing with debounced auto-save on blur (500ms)
- Item-level fields saved via PUT /api/items/{pn}
- Property fields saved via PUT with merged properties + new revision
- Score progress bar updates live after each save
- Computed fields (has_bom) shown read-only

All components use inline CSS with Catppuccin Mocha theme variables,
matching the existing frontend patterns.

Closes #5
2026-02-07 08:48:50 -06:00