diff --git a/dashboard/src/routes/apps/[slug]/files/+page.svelte b/dashboard/src/routes/apps/[slug]/files/+page.svelte index da058c7..0a37797 100644 --- a/dashboard/src/routes/apps/[slug]/files/+page.svelte +++ b/dashboard/src/routes/apps/[slug]/files/+page.svelte @@ -14,6 +14,11 @@ let error = $state(null); let fileToRemove = $state(null); let removing = $state(false); + /// F-U-003: hints derived from registered `files` triggers. No + /// backend endpoint lists known collections; this is the next-best + /// approximation — operators see "we've heard about these patterns" + /// instead of having to guess. + let collectionHints = $state([]); async function loadApp() { try { @@ -23,9 +28,25 @@ } } + async function loadCollectionHints() { + try { + const r = await api.triggers.list(slug); + const seen = new Set(); + for (const t of r.triggers) { + if (t.details.kind === 'files' && t.details.collection_glob) { + seen.add(t.details.collection_glob); + } + } + collectionHints = Array.from(seen).sort(); + } catch { + collectionHints = []; + } + } + $effect(() => { void slug; void loadApp(); + void loadCollectionHints(); }); async function loadFiles(cursor?: string) { @@ -102,12 +123,36 @@ > + + {#each collectionHints as h} + + {/each} + + {#if collectionHints.length > 0} +

+ Known collection patterns from registered files triggers: + {#each collectionHints as h, i} + {#if i > 0}, {/if} + + {/each} +

+ {:else} +

+ No files triggers registered yet. Once you register a files trigger from the Triggers tab, + its collection glob will appear here as a suggestion. +

+ {/if} {#if error}
{error}
@@ -217,10 +262,28 @@ font-size: 0.78rem; } .muted { - color: var(--muted, #666); + color: var(--text-muted); + } + .hint { + color: var(--text-muted); + font-size: 0.85rem; + margin: 0.5rem 0 1rem; + } + .hint-chip { + background: var(--bg-elevated); + color: var(--text-primary); + border: 1px solid var(--border); + border-radius: 0.25rem; + padding: 0.1rem 0.4rem; + font-size: 0.8rem; + cursor: pointer; + font-family: monospace; + } + .hint-chip:hover { + border-color: var(--color-link); } .error { - color: #b00020; + color: var(--color-danger); margin: 0.5rem 0; } button.danger {