{#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}