From ab0ca99239e7e84e9e0cf3d45ecb78a3e123ade0 Mon Sep 17 00:00:00 2001 From: Till JS Date: Thu, 9 Apr 2026 14:37:04 +0200 Subject: [PATCH] =?UTF-8?q?feat(mana/web):=20app=20picker=20=E2=80=94=20au?= =?UTF-8?q?tofocused=20search=20+=20alphabetical=20order?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The "App hinzufügen" picker now sorts available apps alphabetically by their (i18n-resolved) display name and shows an autofocused search input above the list to filter quickly. Enter selects the first match. PickerOverlay gains a `subheader` snippet slot so other pickers can embed their own controls between header and list without having to re-implement the shell. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../src/lib/components/PickerOverlay.svelte | 14 ++++ .../components/workbench/AppPagePicker.svelte | 70 ++++++++++++++++++- 2 files changed, 81 insertions(+), 3 deletions(-) diff --git a/apps/mana/apps/web/src/lib/components/PickerOverlay.svelte b/apps/mana/apps/web/src/lib/components/PickerOverlay.svelte index fd0f60cf2..f0c306f85 100644 --- a/apps/mana/apps/web/src/lib/components/PickerOverlay.svelte +++ b/apps/mana/apps/web/src/lib/components/PickerOverlay.svelte @@ -20,6 +20,9 @@ items: TItem[]; onClose: () => void; item: Snippet<[TItem, number]>; + /** Optional snippet rendered between the header and the list + * (e.g. a search input). */ + subheader?: Snippet; /** Optional snippet rendered after the items (e.g. "create custom" button). */ footer?: Snippet; emptyLabel?: string; @@ -32,6 +35,7 @@ items, onClose, item, + subheader, footer, emptyLabel = 'Keine Einträge', width = '320px', @@ -45,6 +49,11 @@ + {#if subheader} +
+ {@render subheader()} +
+ {/if}
{#each items as entry, i} {#if i > 0}
{/if} @@ -116,6 +125,11 @@ color: hsl(var(--color-foreground)); } + .picker-subheader { + padding: 0 1rem 0.5rem; + flex-shrink: 0; + } + .picker-list { flex: 1; overflow-y: auto; diff --git a/apps/mana/apps/web/src/lib/components/workbench/AppPagePicker.svelte b/apps/mana/apps/web/src/lib/components/workbench/AppPagePicker.svelte index c252460a2..a22e7d4fb 100644 --- a/apps/mana/apps/web/src/lib/components/workbench/AppPagePicker.svelte +++ b/apps/mana/apps/web/src/lib/components/workbench/AppPagePicker.svelte @@ -3,6 +3,8 @@ --> + {#snippet subheader()} +
+ + +
+ {/snippet} {#snippet item(app)}