diff --git a/frontend/src/lib/components/ResourceList.svelte b/frontend/src/lib/components/ResourceList.svelte
index 0fa4ac7b..157fa480 100644
--- a/frontend/src/lib/components/ResourceList.svelte
+++ b/frontend/src/lib/components/ResourceList.svelte
@@ -130,6 +130,14 @@
emptyHint?: string;
/** Empty-state icon-registry name (e.g. "star", "clock", "trash"). */
emptyIcon?: string;
+ /**
+ * Call-to-action rendered inside the empty state. Used by
+ * `/files` to surface a "Show hidden files" button when the
+ * folder holds only dotfiles the user has chosen to hide — the
+ * page-specific hint stays in `emptyHint`, the action goes
+ * here. `` renders it below the hint text.
+ */
+ emptyAction?: Snippet;
hasMore?: boolean;
onloadmore?: () => void;
/** Show the path/location column (list view only). */
@@ -318,6 +326,7 @@
emptyText,
emptyHint,
emptyIcon,
+ emptyAction,
hasMore = false,
onloadmore,
showPath = true,
@@ -1156,7 +1165,9 @@
icon={emptyIcon}
title={emptyText ?? t('common.empty', 'Nothing here yet.')}
hint={emptyHint}
- />
+ >
+ {#if emptyAction}{@render emptyAction()}{/if}
+
{:else}
{#if grouped && filesStore.viewMode === 'list'}
diff --git a/frontend/src/routes/files/[...path]/+page.svelte b/frontend/src/routes/files/[...path]/+page.svelte
index 5d040664..e344d395 100644
--- a/frontend/src/routes/files/[...path]/+page.svelte
+++ b/frontend/src/routes/files/[...path]/+page.svelte
@@ -1615,6 +1615,23 @@
onitemdragleave={rlOnItemDragLeave}
onitemdrop={rlOnItemDrop}
>
+ {#snippet emptyAction()}
+
+ {#if hiddenCount > 0}
+
+ {/if}
+ {/snippet}
+
{#snippet breadcrumb()}