diff --git a/src/routes/photos/+page.svelte b/src/routes/photos/+page.svelte index c9acee5..0461b68 100644 --- a/src/routes/photos/+page.svelte +++ b/src/routes/photos/+page.svelte @@ -1,12 +1,19 @@ @@ -102,7 +200,11 @@ -
+
{#if error}
@@ -118,48 +220,68 @@
{:else} - containerWidth = width} + onModeChange={handleViewModeChange} + onWidthChange={(width) => (containerWidth = width)} /> - - - -
+
+ {#if viewMode === 'masonry'} + + {:else if viewMode === 'single'} + + {:else if viewMode === 'two-column'} + + {:else if viewMode === 'horizontal'} + + {#if isLoadingAll} +
+ +
+ {/if} + {/if} +
- {#snippet loading()} -
- -
- {/snippet} + {#if viewMode !== 'horizontal'} + + +
- {#snippet error()} -
-

{lastError || 'Failed to load photos'}

- -
- {/snippet} + {#snippet loading()} +
+ +
+ {/snippet} - {#snippet noData()} -
-

You've reached the end

-
- {/snippet} -
+ {#snippet error()} +
+

{lastError || 'Failed to load photos'}

+ +
+ {/snippet} + + {#snippet noData()} +
+

You've reached the end

+
+ {/snippet} +
+ {/if} {/if}
@@ -172,7 +294,23 @@ transition: max-width 0.3s ease; &.wide { - max-width: 900px; + max-width: 1100px; + } + + &.horizontal-mode { + max-width: none; + padding-left: 0; + padding-right: 0; + + :global(.view-mode-selector) { + max-width: 700px; + margin-left: auto; + margin-right: auto; + } + + &.wide :global(.view-mode-selector) { + max-width: 1100px; + } } :global(.view-mode-selector) { @@ -229,6 +367,17 @@ margin-top: $unit-4x; } + .loading-more-indicator { + position: fixed; + bottom: $unit-3x; + right: $unit-3x; + background: $grey-100; + padding: $unit-2x $unit-3x; + border-radius: $corner-radius-lg; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); + z-index: 20; + } + .end-message { text-align: center; padding: $unit-6x 0;