Compare commits

...

6 Commits

Author SHA1 Message Date
Jürgen Mummert 7541c12f66 Add subtle hidden-based event filter animation 2026-04-05 14:01:30 +02:00
Jürgen Mummert e8fd218c74 Remove view transitions and restore hidden-only event filtering 2026-04-05 13:58:54 +02:00
Jürgen Mummert 5f652530ed Scope view transitions to event list and prevent page shift 2026-04-05 13:55:44 +02:00
Jürgen Mummert 11b927b91f Fix event filter transition jank and restore layout animation 2026-04-05 13:46:00 +02:00
Jürgen Mummert e1a426bde4 Handle skipped view transition promises in event filter 2026-04-05 13:40:57 +02:00
Jürgen Mummert 8a422aa4ee Add view transitions for event filter layout animation 2026-04-05 13:36:58 +02:00
@@ -37,6 +37,22 @@
<p id="eventfilter-status" class="visually-hidden" aria-live="polite"></p> <p id="eventfilter-status" class="visually-hidden" aria-live="polite"></p>
</div> </div>
<style>
.event-filter-target-list > .event {
opacity: 1;
transform: translateY(0);
transition: opacity 180ms ease, transform 180ms ease;
transition-behavior: allow-discrete;
will-change: opacity, transform;
}
.event-filter-target-list > .event.is-filtered-out {
opacity: 0;
transform: translateY(6px);
pointer-events: none;
}
</style>
<script type="module"> <script type="module">
const filters = document.getElementById('eventfilters'); const filters = document.getElementById('eventfilters');
@@ -114,7 +130,7 @@
const stateStorageKey = 'event-filter-state'; const stateStorageKey = 'event-filter-state';
const stateQueryKey = 'event_filter'; const stateQueryKey = 'event_filter';
const animationMs = 220; const animationMs = 180;
let hideTimers = new WeakMap(); let hideTimers = new WeakMap();
let currentFilter = { type: 'all', value: '' }; let currentFilter = { type: 'all', value: '' };
let suppressedChangeEvents = 0; let suppressedChangeEvents = 0;
@@ -332,7 +348,7 @@
return; return;
} }
const visibleCount = events.filter((eventItem) => !eventItem.hidden).length; const visibleCount = events.filter((eventItem) => matches(eventItem, filterState)).length;
let filterText = 'alle'; let filterText = 'alle';
if (filterState.type === 'tag' && tagSelect) { if (filterState.type === 'tag' && tagSelect) {