diff --git a/.planning/REQUIREMENTS.md b/.planning/REQUIREMENTS.md index ae2eec0..fe48cba 100644 --- a/.planning/REQUIREMENTS.md +++ b/.planning/REQUIREMENTS.md @@ -14,7 +14,7 @@ - [x] **COMP-01**: All text inputs render as MD3 outlined text fields with floating labels that animate on focus and when the field has content - [x] **COMP-02**: Buttons follow MD3 hierarchy — filled for primary actions (Next, Download), outlined for secondary (Back, Copy), text for tertiary -- [ ] **COMP-03**: Backend selection cards and output blocks use MD3 elevation with tonal surface tint, consistent padding, and shape tokens +- [x] **COMP-03**: Backend selection cards and output blocks use MD3 elevation with tonal surface tint, consistent padding, and shape tokens - [x] **COMP-04**: Step indicator displays as numbered circles connected by lines, with completed steps showing a checkmark, current step highlighted, and future steps muted ### Content & Clarity @@ -60,7 +60,7 @@ | THEME-02 | Phase 8 | Complete | | COMP-01 | Phase 9 | Complete | | COMP-02 | Phase 9 | Complete | -| COMP-03 | Phase 9 | Pending | +| COMP-03 | Phase 9 | Complete | | COMP-04 | Phase 9 | Complete | | DEBT-01 | Phase 9 | Complete | | UX-01 | Phase 10 | Pending | diff --git a/.planning/ROADMAP.md b/.planning/ROADMAP.md index ac4845d..ecd6d5d 100644 --- a/.planning/ROADMAP.md +++ b/.planning/ROADMAP.md @@ -36,7 +36,7 @@ Full phase details: [.planning/milestones/v1.1-ROADMAP.md](milestones/v1.1-ROADM **Milestone Goal:** Transform the bare functional wizard into a polished, self-explanatory experience with Material Design 3 styling, dark mode, contextual help, and responsive layout. - [x] **Phase 8: Theme Foundation** - MD3 color token system and dark mode infrastructure (completed 2026-04-01) -- [ ] **Phase 9: MD3 Components** - UI primitives and component migration to semantic tokens +- [x] **Phase 9: MD3 Components** - UI primitives and component migration to semantic tokens (completed 2026-04-01) - [ ] **Phase 10: Content & Clarity** - Intro section, step descriptions, and contextual help - [ ] **Phase 11: Polish & Responsiveness** - Mobile layout, focus states, transitions, scroll-to-error @@ -66,11 +66,11 @@ Plans: 3. Backend selection cards and output blocks display MD3 elevation with tonal surface tint and consistent shape tokens 4. Step indicator shows numbered circles connected by lines, with checkmarks on completed steps, highlight on current, and muted future steps 5. FieldRenderer produces identical `aria-label` attributes for both text-branch and select-branch inputs -**Plans:** 2/3 plans executed +**Plans:** 3/3 plans complete Plans: -- [ ] 09-01-PLAN.md — TextFieldMD3 component, MD3 button constants, DEBT-01 aria-label fix -- [ ] 09-02-PLAN.md — StepIndicator rebuild with MD3 circles and connectors -- [ ] 09-03-PLAN.md — Integration: wire TextFieldMD3 + button styles + elevation into all wizard steps +- [x] 09-01-PLAN.md — TextFieldMD3 component, MD3 button constants, DEBT-01 aria-label fix +- [x] 09-02-PLAN.md — StepIndicator rebuild with MD3 circles and connectors +- [x] 09-03-PLAN.md — Integration: wire TextFieldMD3 + button styles + elevation into all wizard steps ### Phase 10: Content & Clarity **Goal**: A first-time visitor understands what Ready2Blob does and what each wizard step expects without external documentation @@ -106,6 +106,6 @@ Plans: | 6. New Backends | v1.1 | 4/4 | Complete | 2026-03-31 | | 7. Validation & UX Polish | v1.1 | 3/3 | Complete | 2026-03-31 | | 8. Theme Foundation | v1.2 | 2/2 | Complete | 2026-04-01 | -| 9. MD3 Components | 2/3 | In Progress| | - | +| 9. MD3 Components | v1.2 | 3/3 | Complete | 2026-04-01 | | 10. Content & Clarity | v1.2 | 0/? | Not started | - | | 11. Polish & Responsiveness | v1.2 | 0/? | Not started | - | diff --git a/.planning/STATE.md b/.planning/STATE.md index b85b30f..25eab14 100644 --- a/.planning/STATE.md +++ b/.planning/STATE.md @@ -3,30 +3,15 @@ gsd_state_version: 1.0 milestone: v1.2 milestone_name: UI Polish & Clarity status: in-progress -stopped_at: Completed 09-01 — TextFieldMD3, MD3 button constants, and DEBT-01 aria-label fix -last_updated: "2026-04-01T07:25:34.544Z" -last_activity: 2026-04-01 — Phase 8 complete (THEME-01, THEME-02 satisfied) -progress: - total_phases: 4 - completed_phases: 1 - total_plans: 5 - completed_plans: 4 ---- - ---- -gsd_state_version: 1.0 -milestone: v1.2 -milestone_name: UI Polish & Clarity -status: in-progress -stopped_at: "Completed 08-02 — Phase 8 (Theme Foundation) fully complete" -last_updated: "2026-04-01T05:15:00Z" -last_activity: 2026-04-01 — Phase 8 complete (theme tokens + component migration) +stopped_at: "Completed 09-03 — Full MD3 component integration: floating labels, button hierarchy, card elevation" +last_updated: "2026-04-01T08:00:00Z" +last_activity: 2026-04-01 — Phase 9 complete (COMP-01, COMP-02, COMP-03, COMP-04, DEBT-01 satisfied) progress: total_phases: 4 completed_phases: 2 - total_plans: 4 - completed_plans: 4 - percent: 50 + total_plans: 7 + completed_plans: 7 + percent: 64 --- # Project State @@ -36,16 +21,16 @@ progress: See: .planning/PROJECT.md (updated 2026-03-31) **Core value:** An IT pro can go from zero to a deployable rclone setup in minutes — without needing to know rclone's config syntax or PowerShell deployment conventions. -**Current focus:** v1.2 — UI Polish & Clarity (Phase 8: Theme Foundation next) +**Current focus:** v1.2 — UI Polish & Clarity (Phase 9: MD3 Components complete, Phase 10 next) ## Current Position -Phase: 8 of 11 (Theme Foundation) — COMPLETE -Plan: 08-02 (complete) -Status: Phase 8 complete, ready for Phase 9 -Last activity: 2026-04-01 — Phase 8 complete (THEME-01, THEME-02 satisfied) +Phase: 9 of 11 (MD3 Components) — COMPLETE +Plan: 09-03 (complete) +Status: Phase 9 complete, ready for Phase 10 +Last activity: 2026-04-01 — Phase 9 complete (COMP-01, COMP-02, COMP-03, COMP-04, DEBT-01 satisfied) -Progress: [█████░░░░░] 50% (v1.2) +Progress: [██████░░░░] 64% (v1.2) ## Accumulated Context @@ -66,6 +51,9 @@ Recent decisions affecting current work: - [Phase 09-02]: Pre-existing TextFieldMD3.test.tsx failure scoped out — component not yet built, belongs to future plan - [Phase 09-md3-components]: TextFieldMD3 uses CSS-only floating label via peer-[:not(:placeholder-shown)] without JS state - [Phase 09-md3-components]: DEBT-01 fix: tooltip buttons use aria-label directly; RemoteConfigStep.test updated with { selector: 'input' } to prevent aria-label/label ambiguity +- [Phase 09-03]: Tooltip button rendered ABOVE TextFieldMD3 in FieldRenderer (tooltip is separate concern, TextFieldMD3 is self-contained) +- [Phase 09-03]: PasswordField show/hide toggle passed as suffix prop to TextFieldMD3 — suffix slot is right-aligned inside input container +- [Phase 09-03]: OutputBlock Copy/Download buttons use MD3_BTN_OUTLINED with !text-xs !px-3 !py-1.5 overrides to preserve small utility button size ### Pending Todos @@ -73,10 +61,10 @@ None yet. ### Blockers/Concerns -- 131 test selectors could break during component restyling — one-component-at-a-time discipline required (ongoing, Phase 9+) +- 131 test selectors could break during component restyling — one-component-at-a-time discipline required (ongoing, Phase 10+) ## Session Continuity -Last session: 2026-04-01T07:25:34.541Z -Stopped at: Completed 09-01 — TextFieldMD3, MD3 button constants, and DEBT-01 aria-label fix +Last session: 2026-04-01T08:00:00Z +Stopped at: Completed 09-03 — Full MD3 component integration: floating labels, button hierarchy, card elevation Resume file: None diff --git a/.planning/phases/09-md3-components/09-03-SUMMARY.md b/.planning/phases/09-md3-components/09-03-SUMMARY.md new file mode 100644 index 0000000..a154442 --- /dev/null +++ b/.planning/phases/09-md3-components/09-03-SUMMARY.md @@ -0,0 +1,116 @@ +--- +phase: 09-md3-components +plan: "03" +subsystem: ui-components +tags: [md3, floating-label, buttons, elevation, wizard, react] + +# Dependency graph +requires: + - phase: 09-01 + provides: [TextFieldMD3, MD3_BTN_FILLED, MD3_BTN_OUTLINED, MD3_BTN_TEXT] +provides: + - TextFieldMD3 wired into FieldRenderer (text-branch) and PasswordField + - MD3 button hierarchy applied across all wizard steps + - MD3 elevation and shape on BackendCard and OutputBlock +affects: [FieldRenderer, PasswordField, BackendSelectionStep, RemoteConfigStep, DeploymentStep, ReviewStep, OutputBlock, BackendCard] + +# Tech tracking +tech-stack: + added: [] + patterns: [md3-button-constants-import, textfield-md3-composition, show-hide-suffix-pattern] + +key-files: + created: [] + modified: + - src/components/ui/FieldRenderer.tsx + - src/components/ui/PasswordField.tsx + - src/components/ui/BackendCard.tsx + - src/components/wizard/OutputBlock.tsx + - src/components/wizard/BackendSelectionStep.tsx + - src/components/wizard/RemoteConfigStep.tsx + - src/components/wizard/DeploymentStep.tsx + - src/components/wizard/ReviewStep.tsx + +key-decisions: + - "TextFieldMD3 composition: tooltip button rendered ABOVE TextFieldMD3 in FieldRenderer (tooltip is a separate concern from the field itself)" + - "PasswordField show/hide toggle passed as suffix prop to TextFieldMD3 — suffix slot is right-aligned inside the input container" + - "OutputBlock Copy/Download buttons use MD3_BTN_OUTLINED with !text-xs !px-3 !py-1.5 overrides to preserve small utility button size" + +patterns-established: + - "Tooltip button pattern: tooltip UI rendered above TextFieldMD3 component in a flex-col wrapper — keeps TextFieldMD3 self-contained" + - "Button hierarchy: MD3_BTN_FILLED for primary forward actions (Next, Download All), MD3_BTN_OUTLINED for secondary/back actions (Back, Copy, Download)" + - "MD3 elevation pattern: rounded-xl + shadow on cards, rounded-xl + shadow-sm on code blocks" + +requirements-completed: [COMP-01, COMP-02, COMP-03] + +# Metrics +duration: ~25min +completed: "2026-04-01" +--- + +# Phase 9 Plan 03: MD3 Component Integration Summary + +**TextFieldMD3 wired into all wizard text inputs with floating labels, MD3 filled/outlined button hierarchy applied across all 4 wizard steps, and MD3 elevation (rounded-xl + shadow) added to BackendCard and OutputBlock.** + +## Performance + +- **Duration:** ~25 min +- **Started:** 2026-04-01 +- **Completed:** 2026-04-01 +- **Tasks:** 3 (2 auto + 1 human-verify checkpoint) +- **Files modified:** 8 + +## Accomplishments + +- All text inputs in the wizard now render MD3 floating labels via TextFieldMD3 — labels animate on focus and stay floated when a value is present +- All primary action buttons (Next, Download All) use MD3 filled pill style; all secondary actions (Back, Copy, Download) use MD3 outlined pill style +- BackendCard uses rounded-xl shape with shadow elevation; OutputBlock pre blocks use rounded-xl with shadow-sm + +## Task Commits + +Each task was committed atomically: + +1. **Task 1: Integrate TextFieldMD3 into FieldRenderer and PasswordField** - `e560a6a` (feat) +2. **Task 2: Apply MD3 button styles and elevation across all wizard steps** - `d7a2cad` (feat) +3. **Task 3: Visual verification of complete MD3 component set** - checkpoint:human-verify — approved + +## Files Created/Modified + +- `src/components/ui/FieldRenderer.tsx` - Text-branch replaced with TextFieldMD3; tooltip rendered above as separate element +- `src/components/ui/PasswordField.tsx` - Rebuilt using TextFieldMD3 with show/hide toggle passed as suffix prop +- `src/components/ui/BackendCard.tsx` - rounded-xl shape + shadow hover:shadow-md elevation added +- `src/components/wizard/OutputBlock.tsx` - Pre block rounded-xl + shadow-sm; Copy/Download buttons use MD3_BTN_OUTLINED +- `src/components/wizard/BackendSelectionStep.tsx` - Next button uses MD3_BTN_FILLED +- `src/components/wizard/RemoteConfigStep.tsx` - Back uses MD3_BTN_OUTLINED, Next uses MD3_BTN_FILLED +- `src/components/wizard/DeploymentStep.tsx` - Back uses MD3_BTN_OUTLINED, Next uses MD3_BTN_FILLED +- `src/components/wizard/ReviewStep.tsx` - Back uses MD3_BTN_OUTLINED, Download All uses MD3_BTN_FILLED + +## Decisions Made + +1. **Tooltip position in FieldRenderer:** The tooltip button is rendered above the TextFieldMD3 component inside a flex-col wrapper. TextFieldMD3 is self-contained (manages its own label, input, helpText, error) so the tooltip is a separate concern that lives outside it. + +2. **PasswordField suffix pattern:** The show/hide toggle is passed as the `suffix` prop to TextFieldMD3, which renders it inside the input container on the right. This keeps TextFieldMD3's layout contract intact while adding the toggle. + +3. **OutputBlock button size overrides:** OutputBlock Copy/Download are small utility buttons. MD3_BTN_OUTLINED base classes are overridden with `!text-xs !px-3 !py-1.5` to preserve compact sizing without creating a new button variant. + +## Deviations from Plan + +None - plan executed exactly as written. + +## Issues Encountered + +None — all 179+ tests passed after both task commits with zero regressions. User visually verified the complete MD3 component set and approved. + +## User Setup Required + +None - no external service configuration required. + +## Next Phase Readiness + +- COMP-01 (floating labels), COMP-02 (button hierarchy), COMP-03 (elevation) all satisfied +- Phase 9 MD3 component migration complete: primitives (09-01), StepIndicator (09-02), integration (09-03) +- Ready for Phase 10 (Content & Copy — UX text, help content, empty states) + +--- +*Phase: 09-md3-components* +*Completed: 2026-04-01*