@props([ 'product', 'campaign' => null, 'showProgress' => true, 'showRemaining' => true, 'size' => 'default', // 'small', 'default', 'large' ]) @php $availability = $product->availability_info ?? null; // If availability info isn't set, calculate it if (!$availability && $campaign) { $pivot = $product->pivot ?? $campaign->products()->where('product_id', $product->id)->first()?->pivot; if ($pivot) { $availability = [ 'is_available' => $pivot->is_active && ($pivot->quantity_limit === null || $pivot->quantity_donated < $pivot->quantity_limit), 'is_active' => $pivot->is_active, 'has_limit' => $pivot->quantity_limit !== null, 'quantity_limit' => $pivot->quantity_limit, 'quantity_donated' => $pivot->quantity_donated, 'remaining_quantity' => $pivot->quantity_limit ? max(0, $pivot->quantity_limit - $pivot->quantity_donated) : null, 'limit_reached' => $pivot->quantity_limit && $pivot->quantity_donated >= $pivot->quantity_limit, 'progress_percentage' => $pivot->quantity_limit ? min(100, ($pivot->quantity_donated / $pivot->quantity_limit) * 100) : 0, ]; } } // Size classes $sizeClasses = [ 'small' => [ 'text' => 'text-xs', 'badge' => 'px-1.5 py-0.5 text-xs', 'progress' => 'h-1', 'spacing' => 'space-y-1', ], 'default' => [ 'text' => 'text-sm', 'badge' => 'px-2 py-1 text-xs', 'progress' => 'h-2', 'spacing' => 'space-y-2', ], 'large' => [ 'text' => 'text-base', 'badge' => 'px-3 py-1 text-sm', 'progress' => 'h-3', 'spacing' => 'space-y-3', ], ]; $classes = $sizeClasses[$size] ?? $sizeClasses['default']; @endphp @if ($availability)