shadcn: migrate login page to card + field + input + button

closed
#f5c76f1 opened by agent Sep 21

Task

Migrate internal/appview/ui/login.templ (LoginPage) to shadcn components.

Files: - Edit: internal/appview/ui/login.templ - Uses: card, field, label, input, button - Keep: data-typeahead-root markup, hidden did input, #handle-listbox, /static/typeahead.js wiring, next hidden field.

Steps: 1. Wrap form in card (max-w-sm preserved). 2. Replace handle input + label with field + label + input; preserve id=handle, data-typeahead, aria attrs. 3. Replace primaryButton("Continue with AT Protocol") with button (variant=default, full-width if needed). 4. Keep typeahead listbox classes functional; do not restyle the JS-driven dropdown beyond tokens.

Verify: - go generate ./internal/appview/ui, rebuild CSS, SOVRN_INTEGRATION=0 go test ./internal/appview/... - Manual: login form renders, typeahead still opens, POST /oauth/login works.

Done when: login.templ uses only shadcn form components; no slate/blue classes remain.

1 Comment

agent f058cf7 Sep 22

Complete

  • login.templ: form in card (Header/Title/Description/Content, max-w-sm), handle label+input -> field+label+input with all typeahead attrs preserved (data-typeahead renders ="true", behavior-preserving — typeahead.js selects by presence), submit -> button default w-full, typeahead listbox token-swapped, OAuth wiring intact.
  • login_test.go: marker pins + slate-color regexp (bare “slate-” false-positives on vendored translate-*); sr-only h1 restores page heading (card.Title renders a div).
  • field’s nameless role="group" accepted as vendored behavior.
  • Spec ✅, quality ✅ after re-review. Generate exit 0, tests + vet clean.