{#if showShortcuts} (showShortcuts = !showShortcuts)} /> {/if} (element.scrollTop = detail)} />
{#if showSkeleton}
{#each Array(100) as _}
{/each}
{/if} {#if element} {#if isEmpty} {/if}
{#each $assetStore.buckets as bucket, bucketIndex (bucketIndex)} assetStore.cancelBucket(bucket)} let:intersecting top={750} bottom={750} root={element} >
{#if intersecting} handleGroupSelect(group.title, group.assets)} on:shift={handleScrollTimeline} on:selectAssetCandidates={({ detail: asset }) => handleSelectAssetCandidates(asset)} on:selectAssets={({ detail: asset }) => handleSelectAssets(asset)} assets={bucket.assets} bucketDate={bucket.bucketDate} bucketHeight={bucket.bucketHeight} {viewport} /> {/if}
{/each}
{/if}
{#if $showAssetViewer} handlePrevious()} on:next={() => handleNext()} on:close={() => handleClose()} on:archived={({ detail: asset }) => handleAction(asset, AssetAction.ARCHIVE)} on:unarchived={({ detail: asset }) => handleAction(asset, AssetAction.UNARCHIVE)} on:favorite={({ detail: asset }) => handleAction(asset, AssetAction.FAVORITE)} on:unfavorite={({ detail: asset }) => handleAction(asset, AssetAction.UNFAVORITE)} /> {/if}