Skip to content

Style Standardization Phase 2: Form Components & Mobile Optimization

Overview

Phase 2 builds upon the foundation established in Phase 1 by adding comprehensive form components, mobile optimizations, and data visualization utilities specifically designed for vertical farming applications.

What Was Implemented

1. Enhanced CSS Utilities (globals.css)

New Design Tokens

  • Form & Input Tokens: Input heights, padding, validation colors
  • Mobile Touch Targets: Minimum sizes for touch-friendly interfaces
  • Data Visualization: Chart colors, progress indicators, gauge components
/* Phase 2: Form & Input Design Tokens */
--input-height-sm: 2rem;
--input-height-md: 2.5rem;
--input-height-lg: 3rem;
--validation-success: #10b981;
--validation-warning: #f59e0b;
--validation-error: #ef4444;

/* Phase 2: Mobile Touch Targets */
--touch-target-min: 44px;
--touch-spacing: 12px;

/* Phase 2: Data Visualization */
--chart-green: #22c55e;
--progress-track: #e5e7eb;
--progress-fill: var(--chart-green);

New Utility Classes

  • Form Utilities: farm-input, input-success, input-error, form-label, form-help
  • Mobile Utilities: touch-target, mobile-container, mobile-stack, mobile-grid
  • Data Visualization: metric-card, progress-bar, status-dot, trend-up/down

2. Core Form Components

FarmInput (farm-input.tsx)

  • Features: CVA variants for sizes and validation states
  • Sizes: sm, default, lg
  • Validation States: success, warning, error, info
  • Props: Label, help text, error text, icons (left/right position)
  • Accessibility: Auto-generated IDs, ARIA attributes
<FarmInput
  label="Plant Name"
  placeholder="Enter plant name..."
  icon={<Leaf className="h-4 w-4" />}
  helpText="Unique identifier for this plant"
  errorText="This field is required"
  validation="error"
  inputSize="lg"
/>

FarmSelect (farm-select.tsx)

  • Features: Custom dropdown with ChevronDown icon
  • Options Interface: { value: string, label: string, disabled?: boolean }
  • Styling: Inherits form input styling with appearance-none
  • Validation: Same validation states as FarmInput
<FarmSelect
  label="Plant Species"
  options={[
    { value: "lettuce", label: "Lettuce (Lactuca sativa)" },
    { value: "spinach", label: "Spinach (Spinacia oleracea)" }
  ]}
  placeholder="Select species..."
  helpText="Choose from available plant species"
/>

FarmCheckbox (farm-checkbox.tsx)

  • Features: Custom styled checkbox with Check icon
  • Layout: Horizontal layout with label and description
  • Touch-Friendly: Large variant for mobile interfaces
  • Validation: Color-coded border states
<FarmCheckbox
  label="Enable Automation"
  description="Automatically adjust environmental parameters"
  inputSize="lg"
  validation="success"
  onCheckedChange={(checked) => console.log(checked)}
/>

FarmRangeSlider (farm-range-slider.tsx)

  • Features: Custom range slider with visual track and thumb
  • Value Display: Optional current value display with units
  • Mark Points: Optional labeled points along the range
  • Min/Max Labels: Automatic display of range boundaries
  • Touch-Friendly: Large variant for mobile
<FarmRangeSlider
  label="pH Level"
  min={5.0}
  max={7.0}
  step={0.1}
  value={6.2}
  unit=""
  markPoints={[
    { value: 5.5, label: "5.5" },
    { value: 6.0, label: "6.0" },
    { value: 6.5, label: "6.5" }
  ]}
  helpText="Optimal pH for nutrient uptake"
/>

3. High-Level Form Templates

PlantConfigForm (plant-config-form.tsx)

  • Purpose: Comprehensive plant configuration with agricultural validation
  • Sections: Plant Information, Environmental Parameters, Automation Settings
  • Validation: pH ranges (5.0-8.0), temperature validation, required fields
  • Agricultural Data: Species options, growth stages, yield tracking

Key Features: - Pre-configured species options (lettuce, spinach, kale, basil, tomato, etc.) - Growth stage tracking (seed → harvest) - Environmental parameter ranges (pH, temperature, humidity, light hours) - Automation toggles (watering, nutrients) - Built-in agricultural validation rules

<PlantConfigForm
  onSubmit={(data) => console.log(data)}
  initialData={{
    name: "Lettuce Rack A1",
    species: "lettuce",
    stage: "vegetative"
  }}
/>

SensorCalibrationForm (sensor-calibration-form.tsx)

  • Purpose: Sensor configuration with type-specific settings
  • Sensor Types: Temperature, humidity, pH, EC, light, CO₂, pressure, moisture, flow
  • Auto-Configuration: Thresholds and units update based on sensor type
  • Validation: Threshold relationships, sampling intervals

Key Features: - Sensor type configurations with appropriate units and ranges - Automatic threshold suggestions based on agricultural best practices - Calibration offset adjustments - Sampling interval configuration (10s - 1h) - Alert and logging toggles

<SensorCalibrationForm
  onSubmit={(data) => console.log(data)}
  initialData={{
    sensorId: "TEMP-001",
    type: "temperature",
    location: "greenhouse-1"
  }}
/>

4. Mobile Optimization

Touch-Friendly Design

  • Minimum Touch Target: 44px (iOS/Android standard)
  • Touch Spacing: 12px between interactive elements
  • Large Variants: All components have lg size variants

Responsive Layout Utilities

  • mobile-container: Optimized padding/margins
  • mobile-stack: Vertical flex layout with appropriate gaps
  • mobile-grid: Responsive grid (1→2→3 columns)

Mobile-First CSS

  • Utility Classes: Default to mobile-first responsive design
  • Breakpoints: 640px (sm), 1024px (lg)
  • Touch Optimizations: Larger inputs, better spacing

5. Data Visualization Components

Status Indicators

  • Status Dots: status-online, status-warning, status-error, status-offline
  • Trend Indicators: trend-up, trend-down, trend-stable
  • Visual Feedback: Colored dots with subtle glow effects

Metric Cards

  • Layout: Standardized metric display format
  • Components: Value, label, trend indicator
  • Styling: Consistent cards with proper spacing

Progress Components

  • Progress Bars: Animated fill with customizable width
  • Color Coding: Success (green), warning (yellow), error (red)
  • Responsive: Adapts to container width

6. Demo Implementation

Phase 2 Demo Page (/phase2-demo)

  • Form Components: Live examples of all form components
  • Mobile Testing: Responsive design examples
  • Data Visualization: Status indicators, progress bars, metric cards
  • Interactive Examples: Form submissions with JSON output
  • Validation Demo: Error states and success feedback

Technical Benefits

1. Developer Experience

  • Type Safety: Full TypeScript interfaces for all props
  • Auto-completion: IntelliSense support for all variants
  • Consistent API: Similar props across all form components
  • Documentation: Comprehensive prop interfaces and examples

2. Performance

  • Modern CSS: CSS custom properties for theming
  • Optimized Animations: Smooth transitions with proper easing
  • Efficient Rendering: React.forwardRef for proper ref forwarding
  • Minimal Bundle: Tree-shakeable component exports

3. Accessibility

  • ARIA Support: Proper labeling and relationships
  • Keyboard Navigation: Full keyboard support for all components
  • Screen Readers: Descriptive text and proper semantics
  • Focus Management: Visible focus indicators

4. Agricultural Domain Expertise

  • Industry Standards: pH ranges, temperature thresholds, sensor types
  • Validation Rules: Agricultural parameter validation
  • Unit Systems: Proper units for farming measurements
  • Workflow Optimized: Designed for farm management workflows

Usage Examples

Basic Form Setup

import { FarmInput, FarmSelect, FarmCheckbox } from "@/components/ui";

function BasicForm() {
  return (
    <form className="space-y-4">
      <FarmInput
        label="Plant Name"
        placeholder="Enter name..."
        required
      />
      <FarmSelect
        label="Species"
        options={speciesOptions}
        required
      />
      <FarmCheckbox
        label="Enable monitoring"
        inputSize="lg"
      />
    </form>
  );
}

Mobile-Optimized Layout

function MobileFriendlyDashboard() {
  return (
    <div className="mobile-container">
      <div className="mobile-grid">
        <div className="metric-card touch-target">
          <div className="metric-value">24°C</div>
          <div className="metric-label">Temperature</div>
        </div>
        {/* More cards */}
      </div>
    </div>
  );
}

Data Visualization

function StatusDashboard() {
  return (
    <div className="space-y-4">
      <div className="flex items-center gap-3">
        <span className="status-dot status-online"></span>
        <span>System Online</span>
      </div>

      <div className="progress-bar">
        <div className="progress-fill" style={{ width: "75%" }}></div>
      </div>
    </div>
  );
}

File Structure

src/
├── app/
│   ├── globals.css                    # Enhanced with Phase 2 utilities
│   └── phase2-demo/
│       └── page.tsx                   # Comprehensive demo page
└── components/
    └── ui/
        ├── farm-input.tsx             # Base input component
        ├── farm-select.tsx            # Dropdown component  
        ├── farm-checkbox.tsx          # Checkbox component
        ├── farm-range-slider.tsx      # Range slider component
        ├── plant-config-form.tsx      # Plant configuration form
        ├── sensor-calibration-form.tsx # Sensor setup form
        └── index.ts                   # Updated exports

Next Steps (Phase 3+)

Potential Enhancements

  1. Advanced Data Visualization: Charts, graphs, real-time displays
  2. Form Validation Library: Integration with react-hook-form
  3. Theme Customization: Farm-specific color schemes
  4. Animation Library: Enhanced micro-interactions
  5. Mobile PWA Features: Offline support, push notifications

Performance Optimizations

  1. Component Lazy Loading: Code splitting for large forms
  2. Virtual Scrolling: For large data sets
  3. Caching Strategies: Form state persistence
  4. Bundle Analysis: Further optimization opportunities

Conclusion

Phase 2 successfully extends the style standardization with comprehensive form components, mobile optimizations, and data visualization utilities. The implementation provides a solid foundation for creating consistent, accessible, and mobile-friendly interfaces for vertical farming applications.

The combination of type-safe components, agricultural domain expertise, and mobile-first design creates a robust system for building production-ready farm management interfaces.