The S5-7 review layer could surface unconfirmed AI shapes but had no way to resolve them (confirmed was never set true), so the only "dismiss" was deletion and the unconfirmed count never dropped. Add the resolution loop: - A floating review-actions panel (shown while unconfirmed > 0): Accept selected, Reject (delete) selected, and Accept all AI on the page. Accept flips props.confirmed = true. - Human edit = implicit confirm: nudging/resizing an AI ghost marks it confirmed (R3.3 — a teacher who adjusts a suggestion has reviewed it). Geometry-only trigger, so the confirmed-only update can't recurse. - Confidence-driven opacity: unconfirmed ghosts fade by confidence instead of a constant 0.72; confirmed AI renders solid with its kind icon (like manual). - Live review counts read straight off the canvas so the unconfirmed chip/panel update immediately on accept/reject (the old count reflected only saved state). Persists through the existing PUT (confirmed already round-trips). No schema or API change. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Description
React 18 + TypeScript + TLDraw 3.6 frontend for Classroom Copilot — whiteboard, transcription panel, timetable, and graph views
Languages
TypeScript
96.1%
CSS
3.1%
JavaScript
0.5%
Dockerfile
0.2%
HTML
0.1%