{ const asset = page.url.searchParams.get('at'); if (asset) { $gridScrollTarget = { at: asset }; } void scrollAfterNavigate({ scrollToAssetQueryParam: true }); }} onBeforeUpdate={(payload: UpdatePayload) => { const timelineUpdate = payload.updates.some((update) => update.path.endsWith('Timeline.svelte')); if (timelineUpdate) { timelineManager.destroy(); } }} /> scrollToAsset(asset) ?? false} {timelineManager} {assetInteraction} bind:isShowDeleteConfirmation {onEscape} /> {#if timelineManager.months.length > 0} { evt.preventDefault(); let amount = 50; if (shiftKeyIsDown) { amount = 500; } if (evt.key === 'ArrowUp') { amount = -amount; if (shiftKeyIsDown) { scrollableElement?.scrollBy({ top: amount, behavior: 'smooth' }); } } else if (evt.key === 'ArrowDown') { scrollableElement?.scrollBy({ top: amount, behavior: 'smooth' }); } }} /> {/if}
(handleTimelineScroll(), timelineManager.updateSlidingWindow(), updateIsScrolling())} >
{@render children?.()} {#if isEmpty} {@render empty?.()} {/if}
{#each timelineManager.months as monthGroup (monthGroup.viewId)} {@const display = monthGroup.intersecting} {@const absoluteHeight = monthGroup.top} {#if !monthGroup.isLoaded}
{:else if display}
handleGroupSelect(timelineManager, title, assets)} onSelectAssetCandidates={handleSelectAssetCandidates} onSelectAssets={handleSelectAssets} {customLayout} {onThumbnailClick} />
{/if} {/each}
{#if $showAssetViewer} {/if}