e.key === 'Enter' && (e.currentTarget as HTMLInputElement).blur()} title={renaming ? 'Renaming…' : 'Click to rename file on disk'} /> {#if renaming} {/if}
{placeLabel || 'No location'} {#if mapsHref} {/if}
{#if cameraStr || lensStr || exposureParts.iso || exposureParts.fnum}
{#if cameraStr}
{cameraStr}
{/if} {#if lensStr && lensStr !== cameraStr}
{lensStr}
{/if} {#if exposureParts.iso || exposureParts.fnum || exposureParts.focal || exposureParts.exp}
{#if exposureParts.fnum} {exposureParts.fnum} {/if} {#if exposureParts.exp} {exposureParts.exp} {/if} {#if exposureParts.iso}{exposureParts.iso}{/if} {#if exposureParts.focal}{exposureParts.focal}{/if}
{/if}
{/if}
Note
Score
{#each [1, 2, 3, 4, 5] as n (n)} {/each}
Color label
{#each COLOR_SWATCHES as c (c.key)} {/each}
Keywords
{#each keywords as kw (kw)} {kw} {/each} { if (e.key === 'Enter' || e.key === ',') { e.preventDefault(); addKeyword(); } }} />
{#if showRelated}
{#if photo.CameraID && photo.CameraID !== 1} {/if} {#if photo.Year} {/if}
{/if} {#if (photo.Labels ?? []).length > 0}
Labels (auto)
{#each photo.Labels ?? [] as lbl (lbl.UID ?? lbl.Label?.Slug)} {@const slug = lbl.Label?.Slug} {@const name = lbl.Label?.Name ?? slug ?? '(unknown)'} {name} {/each}
{/if}
setMetadataSection('gps', e.currentTarget.open)} > GPS
setMetadataSection('credits', e.currentTarget.open)} > Credits & notes
setMetadataSection('file', e.currentTarget.open)} > File
Size
{dims} · {sizeStr}
Type
{pf.FileType ?? photo.Type ?? '—'}
Hash
{pf.Hash?.slice(0, 16) ?? '—'}…
Indexed
{(photo.IndexedAt ?? '').slice(0, 10) || '—'}
{#if patchMutation.isPending || renaming}
Saving…
{/if}