{#each filterIntersecting(monthGroup.dayGroups) as dayGroup, groupIndex (dayGroup.day)} {@const absoluteWidth = dayGroup.left} { isMouseOverGroup = true; assetMouseEventHandler(dayGroup.groupTitle, null); }} onmouseleave={() => { isMouseOverGroup = false; assetMouseEventHandler(dayGroup.groupTitle, null); }} > {#if !singleSelect && ((hoveredDayGroup === dayGroup.groupTitle && isMouseOverGroup) || assetInteraction.selectedGroup.has(dayGroup.groupTitle))} handleSelectGroup(dayGroup.groupTitle, assetsSnapshot(dayGroup.getAssets()))} onkeydown={() => handleSelectGroup(dayGroup.groupTitle, assetsSnapshot(dayGroup.getAssets()))} > {#if assetInteraction.selectedGroup.has(dayGroup.groupTitle)} {:else} {/if} {/if} {dayGroup.groupTitle} {#each filterIntersecting(dayGroup.viewerAssets) as viewerAsset (viewerAsset.id)} {@const position = viewerAsset.position!} {@const asset = viewerAsset.asset!} onClick(timelineManager, dayGroup.getAssets(), dayGroup.groupTitle, asset)} onSelect={(asset) => assetSelectHandler(timelineManager, asset, dayGroup.getAssets(), dayGroup.groupTitle)} onMouseEvent={() => assetMouseEventHandler(dayGroup.groupTitle, assetSnapshot(asset))} selected={assetInteraction.hasSelectedAsset(asset.id) || dayGroup.monthGroup.timelineManager.albumAssets.has(asset.id)} selectionCandidate={assetInteraction.hasSelectionCandidate(asset.id)} disabled={dayGroup.monthGroup.timelineManager.albumAssets.has(asset.id)} thumbnailWidth={position.width} thumbnailHeight={position.height} /> {/each} {/each}