Photo-review lightbox and verdict buttons
Vision checks and QC photos: the photo on a dark stage with prev / next and zoom, the AI verdict and rule, the Pass / Fail buttons with P / F (the fixed version), a failure-reason picker, and a throttled re-run (Q3). Phone: one photo per screen, big buttons, swipe.
Covers: M10. Exports: PhotoReview, VerdictButton.
Anatomy
The component as it sits in the product: English, compact, real data shapes.
States
8 states, left to right, top to bottom. A mock poll never finishes, so each state is drawn on purpose.
Density
The phone shell is always comfortable (POWERUPS #15): 44px tap targets, 16px inputs. Compact exists on desktop only; see the desktop page.
English · 中文
Staff pick en or cn (T001 Q25). Labels arrive localised; CJK falls back to PingFang SC / Noto Sans SC.
Long string · permission denied
The long-string case (PL-063) and what a role without the permission sees (the server decides; T003).
Contract
The @rj/admin-kit API for this family. Mirrored in CONTRACT.md.
- Export
PhotoReview·@rj/admin-kit- Props
items·index·onVerdict(pass|fail, reason) ·onRerun·reasons- States
- loading · ready · pass · fail · reason · throttled · resolved · image-error · denied
- shadcn / Radix
- Dialog (full) + ToggleGroup (verdict) + Command (reasons)
- Package underneath
- react-hotkeys-hook (P / F / ← → / Z) · react-zoom-pan-pinch · react-swipeable (phone)
- Accessibility
- verdict is a toggle group; keys are listed, not required
- API operations
- admin.vision-checks.results.index / .resolve / .rerun (throttled, Q3) · admin.orders.qc-photos · admin.orders.photos.index · admin.fabric-photos.batches.show
- Phone variant
- one photo per screen, big Pass / Fail, swipe
- Export
VerdictButton·@rj/admin-kit- Props
kindpass|fail ·pressed·sizemd|big ·hotkey- States
- default · focus · pressed · disabled
- Accessibility
- aria-pressed; the key hint is aria-hidden (the shortcut is in aria-keyshortcuts)