handlePointerDown(e, 'scrub')} onpointermove={handlePointerMove} onpointerup={handlePointerUp} onmousemove={handleHoverMove} onmouseleave={handleMouseLeave} onwheel={handleWheel} onkeydown={handleTrackKeydown} >
{#if app.thumbnails.length > 0}
{#each app.thumbnails as thumb, i}
{/each}
{/if} {#each keyframes as kf, i} {#if i > 0} {@const prevPct = (keyframes[i - 1] / duration) * 100} {@const kfPct = (kf / duration) * 100}
{/if} {/each} {#if app.trimRange}
{/if} {#if app.trimRange}
{/if} {#if app.trimRange}
handlePointerDown(e, 'in')} onpointermove={handlePointerMove} onpointerup={handlePointerUp} role="slider" aria-label="Trim in point" aria-valuenow={inTime} tabindex="0" >
handlePointerDown(e, 'out')} onpointermove={handlePointerMove} onpointerup={handlePointerUp} role="slider" aria-label="Trim out point" aria-valuenow={outTime} tabindex="0" >
{/if}
{#if hoverX !== null && hoverTime !== null && !dragging}
{#if duration > 0 && app.thumbnails.length > 0} {@const thumbIdx = Math.min(Math.floor((hoverTime / duration) * app.thumbnails.length), app.thumbnails.length - 1)}
{:else}
{/if} {formatTimecode(hoverTime)}
{/if}
(e.target as HTMLInputElement).select()} /> I
(e.target as HTMLInputElement).select()} /> O