31 lines
2.0 KiB
HTML
31 lines
2.0 KiB
HTML
<div
|
|
class="group flex flex-col overflow-hidden rounded-radius border border-outline bg-surface transition hover:border-primary dark:border-outline-dark dark:bg-surface-dark-alt dark:hover:border-primary-dark">
|
|
<a href="/shop/{{ product.slug }}" class="flex flex-1 flex-col">
|
|
<div class="aspect-square overflow-hidden bg-surface-alt dark:bg-surface-dark">
|
|
{% if product.image %}
|
|
<img src="/images/{{ product.image }}" alt="{{ product.name }}" class="size-full object-cover transition group-hover:scale-105">
|
|
{% endif %}
|
|
</div>
|
|
<div class="flex flex-1 flex-col gap-1 p-4 pb-2">
|
|
<h3 class="font-medium text-on-surface-strong dark:text-on-surface-dark-strong">{{ product.name }}</h3>
|
|
<p class="mt-auto pt-2 font-semibold text-primary dark:text-primary-dark">{{ product.price }} {{ product.currency }}</p>
|
|
</div>
|
|
</a>
|
|
<div class="flex flex-col gap-2 px-4 pb-4">
|
|
{% if product.stock > 0 %}
|
|
<p class="text-xs text-on-surface/60 dark:text-on-surface-dark/60">{{ t(key="in-stock", lang=lang | default(value='sk')) }}: {{ product.stock }}</p>
|
|
<form method="post" action="/cart/add" hx-post="/cart/add" hx-swap="none"
|
|
hx-on::after-request="if (event.detail.successful) toast('{{ t(key='cart-added', lang=lang | default(value='sk')) }}')">
|
|
<input type="hidden" name="product_id" value="{{ product.id }}">
|
|
<input type="hidden" name="quantity" value="1">
|
|
<button type="submit"
|
|
class="inline-flex w-full items-center justify-center rounded-radius bg-primary px-4 py-2 text-sm font-medium tracking-wide text-on-primary transition hover:opacity-75 dark:bg-primary-dark dark:text-on-primary-dark">
|
|
{{ t(key="add-to-cart", lang=lang | default(value='sk')) }}
|
|
</button>
|
|
</form>
|
|
{% else %}
|
|
<p class="inline-flex justify-center rounded-radius bg-danger/10 px-3 py-2 text-xs font-medium text-danger">{{ t(key="out-of-stock", lang=lang | default(value='sk')) }}</p>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|