5.4.10 Components admin UI — Project settings → Components (list, create/edit w/ default assignee, move-or-remove delete)
Estimate: 32m · Depends on: 5.4.3, 5.4.7
The settings surface: app/(authed)/settings/project/components/page.tsx + the hub card (after Estimation), per the 5.4.7 design, on the 5.4.3 routes — the 6.4 members page (and the in-flight 5.3.6 fields page) as the structural template.
Build: the name-ordered list (description, default assignee w/ Avatar, item count, actions); add/edit (name uniqueness inline error, description, the member picker with the explicit "None" row + the at-create helper copy); the move-or-remove delete dialog (radio choice + target picker excluding self + counts, both branches wired); empty / loading / error; the non-admin read-only state. Server actions → componentsService → router.refresh(); strings under settings.components (next-intl).
Acceptance criteria
- The page matches
components.mock.htmlpanel-for-panel (list, add/edit incl. default-assignee picker, the move-or-remove dialog with live counts + both branches, empty/read-only states). - All mutations round-trip honouring the admin gate; a non-admin member sees read-only; the delete dialog's move branch actually reassigns (verified against an in-use component) and the remove branch detaches.
- Axe-clean; token tiers only; next-intl strings; integration tests over the action wiring + gate; coverage ≥90%.
Context refs
design/projects/components.mock.html+ notes (5.4.7) — THE authority- 5.4.3 routes/actions;
settings/project/members/page.tsx(6.4) + the hub card list - The i18n threading pattern; the 2.4.9 destructive-dialog grammar