Measurement grid
Pieces side by side in cm with the source label (Recalled / this order / Manual), gold where a value changed from the carried-over one (with the old value), and the Q22 version check: “someone else changed these” with Compare / Use theirs / Keep mine.
Covers: M17. Exports: MeasurementGrid.
Anatomy
The component as it sits in the product: English, compact, real data shapes.
States
5 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
MeasurementGrid·@rj/admin-kit- Props
pieces·rows(labels in the real upper / lower order) ·carried·version·onSave- States
- clean · changed (gold) · editing · rejected · conflict · loading · denied
- shadcn / Radix
- Table + Input cells + Tooltip
- Package underneath
- TanStack Table 8 compact · react-hook-form · react-query (409)
- Accessibility
- row headers are measurement names; changed cells announce “was 45”
- API operations
- admin.orders.measurements.update (If-Match, expected_version → 409) · admin.orders.measurement-check
- Phone variant
- read only
- Permission
- edit orders