Group 2 of 8 — sub-issue of #68 (PRD-018 / RFC-016). ## Scope Form-input atoms — pure CSS, no bits-ui (input is native `<input>` styled by token vars): - [ ] `Label` — `for`, required/optional indicator - [ ] `Input` — type (text/email/number/password/search), size, invalid state - [ ] `Field` — wraps Label + Input + helper/error text (composition primitive) - [ ] `InputGroup` — horizontal cluster (e.g. prefix + input + suffix) ## Done when - [ ] Each primitive has `<Name>.svelte` + `index.ts` barrel. - [ ] `shared/ui/index.ts` re-exports all 4. - [ ] `npm run check` passes. - [ ] One commit on `feature/issue-68-shadcn-components`. Parent: #68
Group 2 of 8 — sub-issue of #68 (PRD-018 / RFC-016).
Scope
Form-input atoms — pure CSS, no bits-ui (input is native
<input>styled by token vars):Label—for, required/optional indicatorInput— type (text/email/number/password/search), size, invalid stateField— wraps Label + Input + helper/error text (composition primitive)InputGroup— horizontal cluster (e.g. prefix + input + suffix)Done when
<Name>.svelte+index.tsbarrel.shared/ui/index.tsre-exports all 4.npm run checkpasses.feature/issue-68-shadcn-components.Parent: #68