Files
testingcodeantrepo/.gitea/workflows/src/components/README-Independent-Primary-CTA-Buttons.md
WDI-Ideas 620ddcaa8e
All checks were successful
CodeAnt AI Review - Stage 1 / codeant-review (pull_request) Successful in 1m4s
chore: touch text files for full CodeAnt coverage test
2026-03-30 01:33:38 +05:30

9.6 KiB

Independent Primary CTA Button System

Overview

The KLC Primary CTA Button system has been updated to provide complete independence between button instances. Each Primary CTA Button can now have unique styling without affecting any other buttons on the website, while preserving all sophisticated animations and functionality.

🎯 Key Benefits

Complete Independence

  • Each button instance is completely separate
  • Changes to one button will NEVER affect others
  • No global CSS overrides that impact all buttons

Animation Preservation

  • All sophisticated slide animations maintained
  • Text and icon transitions work perfectly
  • 300ms ease-in-out timing preserved

Component Protection

  • Main /components/PrimaryCTAButton.tsx never modified
  • Core functionality remains intact
  • Sophisticated animation structure protected

Unlimited Flexibility

  • Support for any color combination
  • Custom colors via CSS classes or variant props
  • Pre-built variants for common use cases

🛠️ Implementation Methods

Use pre-built variant components for common color schemes:

import { PrimaryCTAButton } from './components/PrimaryCTAButton';
import { PrimaryCTAButtonYellow } from './components/PrimaryCTAButtonYellow';
import { PrimaryCTAButtonVariant } from './components/PrimaryCTAButtonVariant';

// Default blue variant - NEW DEFAULT with brand blue and black text
<PrimaryCTAButton 
  text="Get Started" 
  onClick={handleGetStarted}
  ariaLabel="Get started with KLC services"
/>

// Yellow variant - Former default styling
<PrimaryCTAButtonYellow 
  text="Learn More" 
  onClick={handleLearnMore}
  ariaLabel="Learn more about our programs"
/>

// Custom variant with any colors
<PrimaryCTAButtonVariant 
  variant="custom"
  customBackgroundColor="#28A745"
  customTextColor="#FFFFFF"
  customHoverBackgroundColor="#1E7E34"
  text="Custom Action"
  onClick={handleCustomAction}
/>

Method 2: Unique CSS Classes

Add unique CSS class modifiers to any Primary CTA Button:

import { PrimaryCTAButton } from './components/PrimaryCTAButton';

// Default blue button (no class needed)
<PrimaryCTAButton 
  text="Blue Action" 
  onClick={handleBlueAction}
/>

// Yellow button with unique CSS class
<PrimaryCTAButton 
  text="Yellow Action" 
  onClick={handleYellowAction}
  className="cta-custom-yellow"
/>

// Green button with unique CSS class
<PrimaryCTAButton 
  text="Green Action" 
  onClick={handleGreenAction}
  className="cta-custom-green"
/>

// Red button with unique CSS class
<PrimaryCTAButton 
  text="Red Action" 
  onClick={handleRedAction}
  className="cta-custom-red"
/>

🎨 Available CSS Class Modifiers

Pre-defined Classes

Default (no class needed): Primary CTA Button

  • Background: #04045B (Brand Blue) - NEW DEFAULT
  • Text: #26231A (Brand Black)
  • Hover Background: #030359 (Darker Blue)

Yellow Variant: .cta-custom-yellow

  • Background: #F8C301 (Yellow) - Former Default
  • Text: #FFFFFF (White)
  • Hover Background: #E6AF01 (Darker Yellow)

Green Variant: .cta-custom-green

  • Background: #28A745 (Green)
  • Text: #FFFFFF (White)
  • Hover Background: #1E7E34 (Darker Green)

Creating Custom Classes

Add new color combinations in /styles/globals.css:

/* Custom Red Button */
.primary-cta-button.cta-custom-red .bg-\[#F8C301\] {
  background-color: #DC3545 !important; /* Red background */
}

.primary-cta-button.cta-custom-red div[class*="bg-[#F8C301]"] {
  background-color: #DC3545 !important;
}

.primary-cta-button.cta-custom-red .text-layer,
.primary-cta-button.cta-custom-red .text-element,
.primary-cta-button.cta-custom-red .text-layer *,
.primary-cta-button.cta-custom-red .text-element * {
  color: #FFFFFF !important; /* White text */
}

/* Red hover state */
.primary-cta-button.cta-custom-red:hover .bg-\[#F8C301\] {
  background-color: #C82333 !important; /* Darker red on hover */
}

.primary-cta-button.cta-custom-red:hover div[class*="bg-[#F8C301]"] {
  background-color: #C82333 !important;
}

📋 Component Reference

PrimaryCTAButtonBlue

Purpose: Blue variant for brand-consistent primary actions Colors: Blue background (#04045B), Black text (#26231A)

interface PrimaryCTAButtonBlueProps extends PrimaryCTAButtonProps {
  // Inherits all PrimaryCTAButton props
}

PrimaryCTAButtonYellow

Purpose: Original yellow variant (default styling) Colors: Yellow background (#F8C301), White text (#FFFFFF)

interface PrimaryCTAButtonYellowProps extends PrimaryCTAButtonProps {
  // Inherits all PrimaryCTAButton props
}

PrimaryCTAButtonVariant

Purpose: Flexible component with variant and custom color support

interface PrimaryCTAButtonVariantProps extends PrimaryCTAButtonProps {
  variant?: 'yellow' | 'blue' | 'custom';
  customBackgroundColor?: string;
  customTextColor?: string;
  customHoverBackgroundColor?: string;
}

// Usage examples
<PrimaryCTAButtonVariant variant="blue" text="Blue Button" />
<PrimaryCTAButtonVariant 
  variant="custom"
  customBackgroundColor="#FF6B6B"
  customTextColor="#FFFFFF"
  text="Custom Button"
/>

🔧 Advanced Usage Examples

Multiple Independent Buttons on Same Page

function HomePage() {
  return (
    <div>
      {/* Hero section - Blue button */}
      <section className="hero">
        <PrimaryCTAButtonBlue 
          text="Get Started Today" 
          onClick={handleGetStarted}
        />
      </section>

      {/* Services section - Yellow button */}
      <section className="services">
        <PrimaryCTAButtonYellow 
          text="Explore Services" 
          onClick={handleExploreServices}
        />
      </section>

      {/* Contact section - Custom green button */}
      <section className="contact">
        <PrimaryCTAButtonVariant 
          variant="custom"
          customBackgroundColor="#28A745"
          customTextColor="#FFFFFF"
          text="Contact Us"
          onClick={handleContact}
        />
      </section>

      {/* Footer - Custom purple button */}
      <footer>
        <PrimaryCTAButton 
          text="Subscribe" 
          onClick={handleSubscribe}
          className="cta-custom-purple"
        />
      </footer>
    </div>
  );
}

Dynamic Button Colors

function DynamicButton({ buttonType }: { buttonType: 'primary' | 'secondary' | 'danger' }) {
  const getVariantProps = () => {
    switch (buttonType) {
      case 'primary':
        return {
          variant: 'blue' as const,
          text: 'Primary Action'
        };
      case 'secondary':
        return {
          variant: 'yellow' as const,
          text: 'Secondary Action'
        };
      case 'danger':
        return {
          variant: 'custom' as const,
          customBackgroundColor: '#DC3545',
          customTextColor: '#FFFFFF',
          text: 'Danger Action'
        };
    }
  };

  return (
    <PrimaryCTAButtonVariant 
      {...getVariantProps()}
      onClick={handleDynamicAction}
    />
  );
}

🚨 Important Guidelines

DO

  • Use variant components for common color schemes
  • Create unique CSS classes for custom colors
  • Test hover states for proper contrast
  • Maintain accessibility with proper ARIA labels
  • Follow brand guidelines for color choices

DON'T

  • Modify /components/PrimaryCTAButton.tsx directly
  • Use global CSS that affects all buttons
  • Break the animation structure
  • Forget to test accessibility
  • Use colors that don't meet contrast requirements

🎨 Color Guidelines

Brand-Approved Colors

Primary Blue: #04045B

  • Use for main call-to-action buttons
  • Pair with black text (#26231A) for contrast

Accent Yellow: #F8C301

  • Original brand color
  • Pair with white text (#FFFFFF)

Secondary Colors: Use sparingly

  • Green: #28A745 for success actions
  • Red: #DC3545 for warning/danger actions
  • Purple: #6F42C1 for special campaigns

Accessibility Requirements

  • Ensure minimum 4.5:1 contrast ratio
  • Test with screen readers
  • Provide meaningful ARIA labels
  • Support keyboard navigation

🔄 Migration Guide

From Global CSS Overrides

Old approach:

/* This affected ALL buttons globally */
.primary-cta-button .bg-[#F8C301] {
  background-color: #04045B !important;
}

New approach:

// Use specific variant components
<PrimaryCTAButtonBlue text="Get Started" onClick={handleClick} />

// Or unique CSS classes
<PrimaryCTAButton text="Custom" onClick={handleClick} className="cta-custom-blue" />

From Direct Component Modification

Old approach:

// Modifying main component (❌ PROHIBITED)
// Never do this!

New approach:

// Use independent styling methods
<PrimaryCTAButtonVariant 
  variant="custom"
  customBackgroundColor="#your-color"
  text="Your Text"
  onClick={handleClick}
/>

🧪 Testing Checklist

When implementing independent Primary CTA buttons:

  • Animations work correctly
  • Hover states display properly
  • Text contrast meets accessibility standards
  • Multiple buttons on same page don't interfere
  • Responsive behavior is maintained
  • Keyboard navigation works
  • Screen reader compatibility
  • Focus indicators are visible

📞 Support

For questions about the independent Primary CTA Button system:

  1. Check this documentation first
  2. Review /components/README-PrimaryCTAButton-Variants.md
  3. Examine existing implementations in the codebase
  4. Follow component protection guidelines strictly

Remember: The main /components/PrimaryCTAButton.tsx file must NEVER be modified for styling changes. Always use the independent styling methods documented here.