e.key === 'Escape' && (searchQuery = '')} class="pl-8 h-8 w-48 text-sm" />
{#if $canAccess('images', 'remove')} confirmPrune = open} > {#snippet children({ open })} {#if pruneStatus === 'pruning'} {:else if pruneStatus === 'success'} {:else if pruneStatus === 'error'} {:else} {/if} Prune {/snippet} {/if}
{#if selectedImages.size > 0}
{selectedInFilter.length} selected {#if $canAccess('images', 'remove')} {/if}
{/if} {#if !loading && ($environments.length === 0 || !$currentEnvironment)} {:else if !loading && images.length === 0} {:else} { sortField = state.field as SortField; sortDirection = state.direction; }} onRowClick={(group) => toggleRepo(group.repoName)} rowClass={(group) => { const isExp = expandedRepos.has(group.repoName); return isExp ? 'bg-muted/40' : ''; }} > {#snippet headerCell(column, sortState)} {#if column.id === 'select'} {@const allImageIds = sortedGroups.flatMap(g => Array.from(g.imageIds))} {@const allSelected = allImageIds.length > 0 && allImageIds.every(id => selectedImages.has(id))} {@const someSelected = allImageIds.some(id => selectedImages.has(id)) && !allSelected} {/if} {/snippet} {#snippet cell(column, group, rowState)} {#if column.id === 'select'} {:else if column.id === 'expand'} {@const hasMultipleTags = group.tags.length > 1} {#if hasMultipleTags} {#if rowState.isExpanded} {:else} {/if} {/if} {:else if column.id === 'image'}
{group.repoName === '' ? '' : group.repoName} {#if group.tags.length === 1} {group.tags[0].tag} {/if}
{:else if column.id === 'tags'} {group.tags.length} {:else if column.id === 'size'} {formatSize(group.totalSize)} {:else if column.id === 'updated'} {formatImageDate(group.latestCreated)} {:else if column.id === 'actions'} {#if !rowState.isExpanded && group.tags.length > 0} {@const firstTag = group.tags[0]}
e.stopPropagation()}> {#if $canAccess('containers', 'create')} {/if} {#if scannerEnabled && $canAccess('images', 'inspect')} {/if} {#if $canAccess('images', 'push')} {/if}
{/if} {/if} {/snippet} {#snippet expandedRow(group, rowState)}
{#snippet cell(column, tagInfo, rowState)} {#if column.id === 'tag'}
{tagInfo.tag}
{:else if column.id === 'id'} {:else if column.id === 'size'} {formatSize(tagInfo.size)} {:else if column.id === 'created'} {formatImageDate(tagInfo.created)} {:else if column.id === 'actions'}
{#if $canAccess('images', 'inspect')} {/if} {#if $canAccess('containers', 'create')} {/if} {#if scannerEnabled && $canAccess('images', 'inspect')} {/if} {#if $canAccess('images', 'push')} {/if} {#if $canAccess('images', 'inspect')} {/if} {#if $canAccess('images', 'build')} {/if} {#if $canAccess('images', 'remove')}
removeImage(tagInfo.fullRef, tagInfo.fullRef)} onOpenChange={(open) => confirmDeleteId = open ? tagInfo.fullRef : null} > {#snippet children({ open })} {/snippet}
{/if}
{/if} {/snippet}
{/snippet}
{/if}
{#if pushingImage} {/if} showRunModal = false} onSuccess={() => showRunModal = false} {prefilledImage} skipPullTab={true} /> showBatchOpModal = false} onComplete={handleBatchComplete} /> Tag image Add a new tag to {tagImageCurrentName}
{ if (e.key === 'Enter' && !tagging && tagNewRepo.trim()) { tagImage(); } }} />