feat: remove bootstrap's collapses; improve animations

This commit is contained in:
Herculino Trotta
2025-12-14 11:06:55 -03:00
parent cf7d4b1404
commit 4aa29545ec
14 changed files with 189 additions and 514 deletions
@@ -0,0 +1,39 @@
{% load active_link %}
{% load i18n %}
<c-vars id="collapsible-panel" />
<li>
<div role="button"
_="on click toggle .hidden on #{{ id }} then toggle .slide-in-left on #{{ id }}"
class="text-xs flex items-center no-underline ps-3 p-2 rounded-box sidebar-item cursor-pointer {% active_link views=active css_class='sidebar-active' %}">
<i class="{{ icon }} fa-fw"></i>
<span class="ml-3 font-medium lg:group-hover:truncate lg:group-focus:truncate lg:group-hover:text-ellipsis lg:group-focus:text-ellipsis">
{{ title }}
</span>
<i class="fa-solid fa-chevron-right fa-fw ml-auto pe-2"></i>
</div>
</li>
<div id="{{ id }}"
class="p-0 absolute bottom-0 left-0 w-full z-30 max-h-dvh {% active_link views=active css_class='slide-in-left' inactive_class='hidden' %}">
<div class="h-dvh bg-base-300 flex flex-col">
<div class="items-center p-4 border-b border-base-content/10 sidebar-submenu-header text-base-content">
<div class="flex items-center sidebar-submenu-title">
<i class="{{ icon }} fa-fw lg:group-hover:me-2 me-2 lg:me-0"></i>
<h5 class="text-lg font-semibold text-base-content m-0">
{{ title }}
</h5>
</div>
<button type="button" class="btn btn-ghost btn-sm btn-circle" aria-label="{% trans 'Close' %}"
_="on click remove .slide-in-left from #{{ id }} then add .slide-out-left to #{{ id }} then wait 150ms then add .hidden to #{{ id }} then remove .slide-out-left from #{{ id }}">
<i class="fa-solid fa-xmark"></i>
</button>
</div>
<ul class="sidebar-item-list list-none p-3 flex flex-col gap-1 whitespace-nowrap lg:group-hover:animate-[disable-pointer-events] overflow-y-auto lg:overflow-y-hidden lg:hover:overflow-y-auto overflow-x-hidden"
style="animation-duration: 100ms">
{{ slot }}
</ul>
</div>
</div>
@@ -1,12 +1,14 @@
<li class="lg:hidden lg:group-hover:block">
<div class="flex items-center" data-bs-toggle="collapse" href="#{{ title|slugify }}" role="button"
aria-expanded="false" aria-controls="{{ title|slugify }}">
<li class="lg:hidden lg:group-hover:block" x-data="{ open: false }">
<div class="flex items-center" @click="open = !open" role="button"
:aria-expanded="open">
<span
class="text-base-content/60 text-sm font-bold uppercase lg:hidden lg:group-hover:inline me-2">{{ title }}</span>
<hr class="flex-grow"/>
<i class="fas fa-chevron-down text-base-content/60 lg:before:hidden lg:group-hover:before:inline ml-2 lg:ml-0 lg:group-hover:ml-2"></i>
<i class="fas fa-chevron-down text-base-content/60 lg:before:hidden lg:group-hover:before:inline ml-2 lg:ml-0 lg:group-hover:ml-2"
:class="{ 'rotate-180': open }"
style="transition: transform 0.2s ease"></i>
</div>
<div x-show="open" x-collapse>
{{ slot }}
</div>
</li>
<div class="collapse lg:hidden lg:group-hover:block" id="{{ title|slugify }}">
{{ slot }}
</div>
@@ -1,94 +0,0 @@
<div class="card bg-base-100 shadow-xl mb-2 transaction-item">
<div class="card-body p-2 flex items-center gap-3" data-bs-toggle="collapse" data-bs-target="#{{ transaction.id }}" role="button" aria-expanded="false" aria-controls="{{ transaction.id }}">
<!-- Main visible content -->
<div class="flex flex-col lg:flex-row lg:items-center w-full gap-3">
<!-- Type indicator -->
<div class="w-8">
{% if transaction.type == 'IN' %}
<span class="badge badge-success"></span>
{% else %}
<span class="badge badge-error"></span>
{% endif %}
</div>
<!-- Payment status -->
<div class="w-8">
{% if transaction.is_paid %}
<span class="badge badge-success"></span>
{% else %}
<span class="badge badge-warning"></span>
{% endif %}
</div>
<!-- Description -->
<div class="flex-grow">
<span class="font-medium">{{ transaction.description }}</span>
</div>
<!-- Amount -->
<div class="text-right whitespace-nowrap">
<span class="{% if transaction.type == 'IN' %}text-green-400{% else %}text-red-400{% endif %}">
{{ transaction.amount }}
</span>
{% if transaction.exchanged_amount %}
<br>
<small class="text-base-content/60">
{{ transaction.exchanged_amount.prefix }}{{ transaction.exchanged_amount.amount }}{{ transaction.exchanged_amount.suffix }}
</small>
{% endif %}
</div>
</div>
</div>
<!-- Expandable details -->
<div class="collapse" id="{{ transaction.id }}">
<div class="card-body p-3 transaction-details">
<div class="grid grid-cols-1 md:grid-cols-2">
<div>
<dl class="grid grid-cols-3">
<dt class="col-span-1">Date</dt>
<dd class="col-span-2">{{ transaction.date|date:"Y-m-d" }}</dd>
<dt class="col-span-1">Reference Date</dt>
<dd class="col-span-2">{{ transaction.reference_date|date:"Y-m" }}</dd>
<dt class="col-span-1">Account</dt>
<dd class="col-span-2">{{ transaction.account.name }}</dd>
<dt class="col-span-1">Category</dt>
<dd class="col-span-2">{{ transaction.category|default:"-" }}</dd>
</dl>
</div>
<div>
<dl class="grid grid-cols-3">
{% if transaction.tags.exists %}
<dt class="col-span-1">Tags</dt>
<dd class="col-span-2">
{% for tag in transaction.tags.all %}
<span class="badge badge-secondary">{{ tag.name }}</span>
{% endfor %}
</dd>
{% endif %}
{% if transaction.installment_plan %}
<dt class="col-span-1">Installment</dt>
<dd class="col-span-2">
{{ transaction.installment_id }} of {{ transaction.installment_plan.total_installments }}
</dd>
{% endif %}
{% if transaction.recurring_transaction %}
<dt class="col-span-1">Recurring</dt>
<dd class="col-span-2">Yes</dd>
{% endif %}
{% if transaction.notes %}
<dt class="col-span-1">Notes</dt>
<dd class="col-span-2">{{ transaction.notes }}</dd>
{% endif %}
</dl>
</div>
</div>
</div>
</div>
</div>