Scripts · Electric Cherry { if (event.dataTransfer?.types.includes('Files')) { event.preventDefault(); dragDepth++; } }} ondragleave={() => dragDepth = Math.max(0, dragDepth - 1)} ondragend={() => dragDepth = 0} />
{#snippet actions()}{/snippet} {#if loading || scripts.length || error}
{#each tabs as tab} {/each}
{/if}
{#if loading || scripts.length || error}
{visible.length} of {scripts.length} scripts {#if search || status !== 'all' || game || map}{/if}
{/if} {#if game}

Game results include unscoped scripts that can use explicitly selected beta servers.

{/if} {#if error}{/if} {#if loading}

Loading your library…

{:else if !scripts.length && !error}
{:else if !visible.length && !error} {:else}
{#each visible.slice(0,limit) as s (s.id)} {@const state = scriptStatus(s)}
toggle(s.id)} />
{s.target_rel_path}
{scopeLabel(s)}{s.scope_type ? `${s.servers.length} scope matches` : 'Explicit beta targets'}{s.versionCount} version{s.versionCount === 1 ? '' : 's'}
{s.currentVersion ? `Promoted v${s.currentVersion.version}` : 'Never promoted'} {#if s.latestVersion && s.latestVersion.id !== s.current_version_id}Latest v{s.latestVersion.version} · {s.latestVersion.state === 'untested' ? 'awaiting test' : s.latestVersion.state.replaceAll('-', ' ')}{/if}
{#if s.runningBetaId !== null} {:else if state === 'failed'} {:else if canTest(s)} {:else}{/if}
{/each}
{/if}

Drop files anywhere to add scripts or recognize new versions. Scope matches describe eligible servers, not installed versions.

{#if selectedScripts.length}
{selectedScripts.length} selected{hiddenSelected ? ` · ${hiddenSelected} hidden` : ''}Latest versions will be carried into beta setup. {#if reviewSelection}
    {#each selectedScripts as script}
  • {script.name} · v{script.latestVersion?.version}
  • {/each}
{/if}
{/if}
{#if dragDepth > 0}
Drop your scripts hereWe’ll recognize existing scripts and check for duplicate versions.
{/if}