Browse Source
- Replaced CartSheet and CartSidebar components with a new CartResponsive component that adapts to screen size, providing a unified cart experience. - Implemented responsive animations for the cart, allowing it to slide in from the right on desktop and from the bottom on mobile. - Updated styles and layout in tailwind.css to support new animation effects for the cart component.main
6 changed files with 184 additions and 86 deletions
@ -1,66 +0,0 @@ |
|||
<script setup lang="ts"> |
|||
import { |
|||
Sheet, |
|||
SheetContent, |
|||
SheetHeader, |
|||
SheetTitle, |
|||
} from '@/components/ui/sheet' |
|||
import { ScrollArea } from '@/components/ui/scroll-area' |
|||
import CartEmpty from './CartEmpty.vue' |
|||
import CartItem from './CartItem.vue' |
|||
import CartSummary from './CartSummary.vue' |
|||
|
|||
// Get cart state and UI controls |
|||
const { items, itemCount, total, loading, updateItem, removeItem } = useCart() |
|||
const { isOpen, close } = useCartUI() |
|||
|
|||
// Handle quantity update |
|||
async function handleUpdateQuantity(itemId: string, quantity: number) { |
|||
await updateItem(itemId, quantity) |
|||
} |
|||
|
|||
// Handle item removal |
|||
async function handleRemoveItem(itemId: string) { |
|||
await removeItem(itemId) |
|||
} |
|||
|
|||
// Navigate to checkout |
|||
function handleCheckout() { |
|||
close() |
|||
navigateTo('/checkout') |
|||
} |
|||
</script> |
|||
|
|||
<template> |
|||
<Sheet :open="isOpen" @update:open="(open) => !open && close()"> |
|||
<SheetContent side="bottom" class="h-[90vh] p-0 flex flex-col"> |
|||
<!-- Header --> |
|||
<SheetHeader class="px-6 py-4 border-b"> |
|||
<SheetTitle class="text-xl font-bold"> |
|||
Warenkorb ({{ itemCount }}) |
|||
</SheetTitle> |
|||
</SheetHeader> |
|||
|
|||
<!-- Empty State --> |
|||
<div v-if="itemCount === 0" class="flex-1 flex items-center justify-center px-6"> |
|||
<CartEmpty /> |
|||
</div> |
|||
|
|||
<!-- Cart Items + Summary --> |
|||
<template v-else> |
|||
<!-- Scrollable Items List --> |
|||
<ScrollArea class="flex-1 px-6"> |
|||
<div class="space-y-4 py-4"> |
|||
<CartItem v-for="item in items" :key="item.id" :item="item" :loading="loading" |
|||
@update:quantity="(qty) => handleUpdateQuantity(item.id, qty)" @remove="handleRemoveItem(item.id)" /> |
|||
</div> |
|||
</ScrollArea> |
|||
|
|||
<!-- Sticky Footer with Summary --> |
|||
<div class="border-t px-6 py-4 bg-background"> |
|||
<CartSummary :items="items" :total="total" :loading="loading" @checkout="handleCheckout" /> |
|||
</div> |
|||
</template> |
|||
</SheetContent> |
|||
</Sheet> |
|||
</template> |
|||
Loading…
Reference in new issue