mirror of
https://github.com/The-Low-Code-Foundation/OpenNoodl.git
synced 2026-01-12 23:32:55 +01:00
253 lines
7.5 KiB
Markdown
253 lines
7.5 KiB
Markdown
# TASK-000F: Component Visual Updates - Buttons & Inputs - CHANGELOG
|
|
|
|
## Overview
|
|
|
|
Applied modern visual refinements to button and input components using the design tokens established in TASK-000E. This creates a polished, professional feel with smooth micro-interactions and clear visual feedback.
|
|
|
|
**Status:** ✅ COMPLETE
|
|
**Date:** December 31, 2025
|
|
**Effort:** ~45 minutes
|
|
**Risk:** Low
|
|
|
|
---
|
|
|
|
## Changes Made
|
|
|
|
### 1. PrimaryButton Polish
|
|
|
|
**File:** `packages/noodl-core-ui/src/components/inputs/PrimaryButton/PrimaryButton.module.scss`
|
|
|
|
**Visual Improvements:**
|
|
|
|
- ✅ Added rounded corners: `border-radius: var(--radius-md)` (6px)
|
|
- ✅ Applied spacing tokens for padding: `var(--spacing-button-padding-y/x)`
|
|
- ✅ Added gap token for icon spacing: `var(--spacing-button-gap)`
|
|
- ✅ Enhanced transitions (background, color, border, shadow, transform)
|
|
- ✅ CTA variant now has subtle shadow: `box-shadow: var(--shadow-sm)`
|
|
- ✅ Hover state lifts button: `transform: translateY(-1px)` + increased shadow
|
|
- ✅ Active state depresses button: `transform: translateY(0)` + no shadow
|
|
- ✅ Added accessibility focus ring: `outline: 2px solid var(--theme-color-focus-ring)`
|
|
- ✅ Improved disabled state: 50% opacity, no transform/shadow
|
|
|
|
**Typography Updates:**
|
|
|
|
- Font size: `var(--font-size-base)` (12px)
|
|
- Font weight: `var(--font-weight-medium)` (500)
|
|
- Line height: `var(--line-height-tight)` (1.2)
|
|
|
|
**Transition Timing:**
|
|
|
|
- Background/color/border/shadow: 150ms with ease curve
|
|
- Transform: 100ms for snappier feel
|
|
|
|
### 2. TextInput Polish
|
|
|
|
**File:** `packages/noodl-core-ui/src/components/inputs/TextInput/TextInput.module.scss`
|
|
|
|
**Visual Improvements:**
|
|
|
|
- ✅ Added visible border: `border: 1px solid var(--theme-color-border-default)`
|
|
- ✅ Added rounded corners: `border-radius: var(--radius-default)` (4px)
|
|
- ✅ Applied spacing tokens: `var(--spacing-input-padding-y/x)`
|
|
- ✅ Added hover state: Stronger border color on hover
|
|
- ✅ Added focus state: Red ring with `box-shadow: 0 0 0 2px rgba(210, 31, 60, 0.15)`
|
|
- ✅ Enhanced transitions for background, border, and shadow
|
|
- ✅ Focus changes border to `var(--theme-color-focus-ring)`
|
|
|
|
**Behavior:**
|
|
|
|
- Hover effect only applies when not focused or readonly
|
|
- Focus state includes both border color change AND shadow glow
|
|
- Smooth 150ms transitions throughout
|
|
|
|
---
|
|
|
|
## Visual Comparison
|
|
|
|
### PrimaryButton (CTA Variant)
|
|
|
|
| State | Before | After |
|
|
| -------- | ------------------- | ----------------------------------- |
|
|
| Default | Flat, sharp corners | Rounded (6px), subtle shadow |
|
|
| Hover | Color change only | Brightens, lifts 1px, larger shadow |
|
|
| Active | Color change only | Darkens, returns to base position |
|
|
| Focus | No indicator | Red outline ring (2px) |
|
|
| Disabled | Unclear state | 50% opacity, obviously disabled |
|
|
|
|
### TextInput
|
|
|
|
| State | Before | After |
|
|
| -------- | -------------------------- | ---------------------------------- |
|
|
| Default | Background only, no border | Border + background, rounded (4px) |
|
|
| Hover | Slight bg change | Stronger border color |
|
|
| Focus | Background change | Red border + red glow shadow |
|
|
| Disabled | Muted colors | (Already handled well) |
|
|
|
|
---
|
|
|
|
## Token Usage
|
|
|
|
All changes leverage the design token system:
|
|
|
|
**From TASK-000E (Spacing):**
|
|
|
|
```css
|
|
--spacing-button-padding-y: 8px
|
|
--spacing-button-padding-x: 12px
|
|
--spacing-button-gap: 8px
|
|
--spacing-input-padding-y: 6px
|
|
--spacing-input-padding-x: 8px
|
|
--radius-default: 4px
|
|
--radius-md: 6px
|
|
--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05)
|
|
--shadow-default: 0 1px 3px 0 rgba(0, 0, 0, 0.1), ...
|
|
--transition-fast: 100ms
|
|
--transition-default: 150ms
|
|
--transition-ease: cubic-bezier(0.4, 0, 0.2, 1)
|
|
```
|
|
|
|
**From TASK-000E (Typography):**
|
|
|
|
```css
|
|
--font-size-base: 12px
|
|
--font-weight-medium: 500
|
|
--line-height-tight: 1.2
|
|
```
|
|
|
|
**From TASK-000A (Colors):**
|
|
|
|
```css
|
|
--theme-color-primary
|
|
--theme-color-primary-highlight
|
|
--theme-color-primary-dim
|
|
--theme-color-focus-ring
|
|
--theme-color-border-default
|
|
--theme-color-border-strong
|
|
--theme-color-on-primary
|
|
```
|
|
|
|
---
|
|
|
|
## Testing Performed
|
|
|
|
### Manual Verification
|
|
|
|
✅ Buttons have rounded corners
|
|
✅ Buttons lift on hover (CTA variant)
|
|
✅ Buttons depress on click
|
|
✅ Focus ring appears on keyboard navigation
|
|
✅ Disabled buttons are clearly disabled (50% opacity)
|
|
✅ Inputs have visible borders
|
|
✅ Inputs show red glow on focus
|
|
✅ Input borders strengthen on hover
|
|
✅ All transitions are smooth (not jarring)
|
|
✅ No visual regressions
|
|
|
|
### Variants Tested
|
|
|
|
- PrimaryButton: CTA, muted, muted-on-low-bg, ghost, danger
|
|
- TextInput: default, in-modal, opaque-on-hover, transparent variants
|
|
|
|
---
|
|
|
|
## Accessibility Improvements
|
|
|
|
1. **Focus Rings:** All buttons now have clear 2px red outline rings on focus-visible
|
|
2. **Clear Disabled State:** 50% opacity makes disabled state unambiguous
|
|
3. **Focus State Clarity:** Inputs have both border color AND shadow changes
|
|
4. **Keyboard Navigation:** Focus indicators work with tab navigation
|
|
|
|
---
|
|
|
|
## Performance Notes
|
|
|
|
- Transitions use GPU-accelerated properties (transform, opacity)
|
|
- Transform uses translate rather than margin for better performance
|
|
- All transitions use the optimized `cubic-bezier(0.4, 0, 0.2, 1)` curve
|
|
- No layout thrashing (border/padding changes are within existing bounds)
|
|
|
|
---
|
|
|
|
## Future Work (Not in Scope)
|
|
|
|
**Phase 3 Components (Deferred):**
|
|
|
|
- Select/Dropdown: Would benefit from similar treatment
|
|
- Checkbox: Checked state could use red background + rounded corners
|
|
- TextArea: Same improvements as TextInput
|
|
- Slider: Modern track styling with tokens
|
|
|
|
These can be tackled in TASK-000G or as follow-up work.
|
|
|
|
---
|
|
|
|
## Files Modified
|
|
|
|
### Updated (2)
|
|
|
|
- `packages/noodl-core-ui/src/components/inputs/PrimaryButton/PrimaryButton.module.scss`
|
|
- `packages/noodl-core-ui/src/components/inputs/TextInput/TextInput.module.scss`
|
|
|
|
### Created (1)
|
|
|
|
- `dev-docs/tasks/phase-3-editor-ux-overhaul/TASK-000-styles-overhaul/TASK-000F-component-buttons-inputs/CHANGELOG.md`
|
|
|
|
---
|
|
|
|
## Success Criteria
|
|
|
|
✅ Buttons feel modern and responsive
|
|
✅ Inputs have clear, accessible focus states
|
|
✅ All interactive states are smooth
|
|
✅ Disabled states are obvious
|
|
✅ Consistent use of tokens throughout
|
|
✅ No visual regressions from previous functionality
|
|
✅ All variants preserved and enhanced
|
|
|
|
---
|
|
|
|
## Developer Notes
|
|
|
|
**Why these specific changes?**
|
|
|
|
1. **Rounded corners:** Industry standard for modern UIs, feels less harsh
|
|
2. **Hover lift effect:** Provides tactile feedback, feels responsive
|
|
3. **Active depression:** Completes the button "press" metaphor
|
|
4. **Focus rings:** Critical for accessibility and keyboard navigation
|
|
5. **Input borders:** Makes fields clearly identifiable as interactive
|
|
6. **Focus glow:** Draws attention without being jarring
|
|
|
|
**Design philosophy:**
|
|
|
|
- Subtle, not flashy
|
|
- Consistent with design tokens
|
|
- Accessibility first
|
|
- Performance conscious
|
|
- Backwards compatible
|
|
|
|
---
|
|
|
|
## Storybook Verification
|
|
|
|
To verify these changes in Storybook:
|
|
|
|
```bash
|
|
npm run storybook
|
|
```
|
|
|
|
Navigate to:
|
|
|
|
- **Inputs / PrimaryButton** - Test all variants (CTA, muted, ghost, danger)
|
|
- **Inputs / TextInput** - Test all variants (default, in-modal, etc.)
|
|
|
|
Check:
|
|
|
|
- Hover states feel snappy and smooth
|
|
- Focus rings appear on tab navigation
|
|
- Disabled states are clearly disabled
|
|
- No jarring or stuttering animations
|
|
|
|
---
|
|
|
|
**Task Status:** ✅ COMPLETE - Modern, Polished UI Components Delivered
|