{#each filterIntersecting(bucket.dateGroups) as dateGroup, groupIndex (dateGroup.day)} {@const absoluteWidth = dateGroup.left} { isMouseOverGroup = true; assetMouseEventHandler(dateGroup.groupTitle, null); }} onmouseleave={() => { isMouseOverGroup = false; assetMouseEventHandler(dateGroup.groupTitle, null); }} > {#if !singleSelect && ((hoveredDateGroup === dateGroup.groupTitle && isMouseOverGroup) || assetInteraction.selectedGroup.has(dateGroup.groupTitle))} handleSelectGroup(dateGroup.groupTitle, assetsSnapshot(dateGroup.getAssets()))} onkeydown={() => handleSelectGroup(dateGroup.groupTitle, assetsSnapshot(dateGroup.getAssets()))} > {#if assetInteraction.selectedGroup.has(dateGroup.groupTitle)} {:else} {/if} {/if} {dateGroup.groupTitle} {#each filterIntersecting(dateGroup.intersectingAssets) as intersectingAsset (intersectingAsset.id)} {@const position = intersectingAsset.position!} {@const asset = intersectingAsset.asset!} onClick(assetStore, dateGroup.getAssets(), dateGroup.groupTitle, asset)} onSelect={(asset) => assetSelectHandler(assetStore, asset, dateGroup.getAssets(), dateGroup.groupTitle)} onMouseEvent={() => assetMouseEventHandler(dateGroup.groupTitle, assetSnapshot(asset))} selected={assetInteraction.hasSelectedAsset(asset.id) || dateGroup.bucket.store.albumAssets.has(asset.id)} selectionCandidate={assetInteraction.hasSelectionCandidate(asset.id)} disabled={dateGroup.bucket.store.albumAssets.has(asset.id)} thumbnailWidth={position.width} thumbnailHeight={position.height} /> {/each} {/each}