shadcn: migrate login page to card + field + input + button
closedTask
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
Complete
login.templ: form incard(Header/Title/Description/Content, max-w-sm), handle label+input ->field+label+inputwith all typeahead attrs preserved (data-typeaheadrenders="true", behavior-preserving — typeahead.js selects by presence), submit ->buttondefault w-full, typeahead listbox token-swapped, OAuth wiring intact.login_test.go: marker pins + slate-color regexp (bare “slate-” false-positives on vendoredtranslate-*); sr-onlyh1restores page heading (card.Title renders a div).field’s namelessrole="group"accepted as vendored behavior.