refactor(ui): unified bottom-stack container for PillNav, QuickInput, TagStrip

Replace 4 independent position:fixed elements with one flex container that
stacks them naturally from bottom to top. Elements push each other
automatically — no more hardcoded offsets or z-index conflicts.

Stack order (bottom → top):
1. PillNavigation (collapsible)
2. TagStrip (togglable)
3. QuickInputBar + toggle button row

Shared-UI changes:
- PillNavigation: add positioning='fixed'|'static' prop
- QuickInputBar: add positioning='fixed'|'static' prop
- TagStrip: add positioning='fixed'|'static' prop
- All default to 'fixed' for backward compatibility

Layout changes:
- Wrap all bottom elements in .bottom-stack (position:fixed, flex-column)
- Remove hardcoded bottomOffset calculations
- Toggle button is now inline next to QuickInputBar (not separately positioned)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Till JS 2026-04-02 23:52:40 +02:00
parent bed2060ba5
commit b415567dfa
4 changed files with 154 additions and 85 deletions

View file

@ -79,6 +79,8 @@
highlightPatterns?: HighlightPattern[];
/** Locale for syntax highlighting keywords (e.g., 'de', 'en'). Default: 'de'. */
locale?: string;
/** Use 'static' when inside a flex container (bottom-stack pattern). Default: 'fixed'. */
positioning?: 'fixed' | 'static';
}
let {
@ -107,6 +109,7 @@
leftAction,
highlightPatterns,
locale = 'de',
positioning = 'fixed',
}: Props = $props();
// Use settings for autoFocus
@ -382,6 +385,7 @@
class="quick-input-bar"
class:has-fab-right={hasFabRight}
class:has-fab-left={hasFabLeft}
class:quick-input-static={positioning === 'static'}
style="--bottom-offset: {bottomOffset}"
>
<!-- Results Panel (above input) -->
@ -566,6 +570,12 @@
transition: bottom 0.3s ease;
}
.quick-input-static {
position: relative;
bottom: auto;
z-index: auto;
}
/* Leave space for FAB on mobile */
@media (max-width: 900px) {
.quick-input-bar.has-fab-right {