/** * File: ActionButton.tsx * Created by: AI Assistant * Date: 2025-11-29 * Purpose: ActionButton component for kreatiVortex platform * Part of: kreatiVortex - Platform Pembelajaran Tari Online */ 'use client'; import React from 'react'; import { cn } from '@/lib/utils'; interface ActionButtonProps extends React.ButtonHTMLAttributes { variant?: 'primary' | 'secondary' | 'outline' | 'ghost' | 'destructive'; size?: 'sm' | 'md' | 'lg'; loading?: boolean; icon?: React.ReactNode; children: React.ReactNode; } const ActionButton = React.forwardRef( ({ className, variant = 'primary', size = 'md', loading = false, icon, children, disabled, ...props }, ref) => { const baseClasses = 'inline-flex items-center justify-center font-medium rounded-lg transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed'; const variants = { primary: 'bg-gold-500 text-navy-900 hover:bg-gold-400 focus:ring-gold-400 shadow-lg hover:shadow-gold-400/25', secondary: ' text-white hover:bg-navy-600 focus:ring-navy-500', outline: 'border-2 border-gold-400 text-gold-400 hover:bg-gold-400 hover:text-navy-900 focus:ring-gold-400', ghost: 'text-gray-300 hover:text-white hover:bg-white/10 focus:ring-white/20', destructive: 'bg-red-600 text-white hover:bg-red-700 focus:ring-red-500', }; const sizes = { sm: 'px-3 py-1.5 text-sm', md: 'px-4 py-2 text-sm', lg: 'px-6 py-3 text-base', }; return ( ); } ); ActionButton.displayName = 'ActionButton'; export default ActionButton;