Skip to content

moooon

Motir

Vibe your whole project. Bring an idea — Motir's three AI layers plan it, track it, and ship it, end to end. You're looking at Motir, built in Motir.

  • Vibe Project
  • Open Source
  • AI Agent
  • AI Loop
1
requests
0
upvotes
145
planned
1,361
shipped

Motir · Work items

MOTIR-288Done

5.3.7 Detail-rail custom fields UI — per-type cards + inline editors + "Show more fields" disclosure

Estimate: 35m · Depends on: 5.3.3, 5.3.5

The issue-view surface: extend CoreFieldsPanel (or a sibling CustomFieldsSection it composes) to render the customFields array from the 5.3.3 detail read, per the 5.3.5 design.

Build: value cards reusing the shipped FieldCard grammar (label + chevron + value line) below the built-ins; per-type display (text/number/date/select w/ archived mark/user w/ Avatar) and per-type inline editors (input, numeric, the shipped DatePicker, Combobox excluding archived options, the member picker w/ Unset) — each committing through setCustomFieldValueAction (5.3.3) with the inline 422 error state and router.refresh() on success (the rail's existing pattern); clearing returns the card to empty. "Show more fields (N)" disclosure for empty fields (expand/collapse; a field gaining a value moves above the line on refresh); with no definitions the rail renders byte-identical to today. Viewer read-only (no editors). The editors honour disabled while a patch is pending (the isPending rail convention).

A11y: the disclosure is a proper aria-expanded button; every editor labelled by its field label; errors announced inline (the rose-tint grammar); extends the detail-route strict axe sweep.

Acceptance criteria

  • The rail matches custom-fields.mock.html panel-for-panel: all five types render + edit inline, archived-option display + exclusion rules hold, empty placeholder + clear path work, the disclosure shows/hides empty fields with the correct count, the no-definitions case leaves the rail unchanged.
  • Edits persist via the dedicated action with per-type validation errors inline (nothing persists on 422); the revision trail records each change; viewer sees read-only.
  • Keyboard-complete editors + disclosure; strict axe sweep clean; token tiers only.
  • Component/integration tests: per-type render/edit branches, the disclosure count, read-only; existing detail tests stay green; pnpm test:coverage holds.

Context refs

  • design/work-items/custom-fields.mock.html + notes (5.3.5) — THE layout authority
  • CoreFieldsPanel.tsx (FieldCard, the patch/isPending/refresh pattern) — extend, don't fork
  • 5.3.3 (customFields read + setCustomFieldValueAction); the shipped pickers (DatePicker, Combobox, member picker)
  • The 2.4.6 detail a11y sweep (extend scope)