{#if header}
{#each displayColumns as column}
{COLUMN_LABELS[column] || $attributeLabels[column] || column}
{/each}
{/if} {#each sortedEntries as entry (entry.address)} {#if visible.has(entry.address)} {#each displayColumns as column} {#if column == TIMESTAMP_COL}
{formatRelative(parseISO(entry.timestamp), new Date())}
{:else if column == PROVENANCE_COL}
{entry.provenance}
{:else if column == USER_COL}
{#if entry.user} {entry.user} {:else}
{$i18n.t('unset')}
{/if}
{:else if column == ENTITY_COL}
{ addSortKeys(entry.entity, event.detail, true); }} />
{:else if column == ATTR_COL}
{:else if column == VALUE_COL}
updateEntry(entry, ev.detail)}> {#if entry.value.t === 'Address'} { addSortKeys(String(entry.value.c), event.detail, true); }} /> {:else}
{/if}
{:else}
?
{/if} {/each}
removeEntry(entry.address)} />
{:else}
...
{/if} {/each} {#each unusedAttributes as attribute} {#each displayColumns as column} {#if column == ATTR_COL}
{:else if column == VALUE_COL}
addEntry(attribute, ev.detail)}> {$i18n.t('(unset)')}
{:else}
{/if} {/each}
{/each} {#if !attributes?.length} {#if adding}
(addHover = true)} on:mouseleave={() => (addHover = false)} > {#each displayColumns as column} {#if column == ATTR_COL}
(newEntryAttribute = ev.detail?.t === 'Attribute' ? ev.detail?.name : '')} on:focus={(ev) => (addFocus = ev.detail)} keepFocusOnSet bind:this={newAttrSelector} />
{:else if column === VALUE_COL}
(newEntryValue = ev.detail)} on:focus={(ev) => (addFocus = ev.detail)} keepFocusOnSet />
{:else}
{/if} {/each}
newEntryValue && addEntry(newEntryAttribute, newEntryValue)} />
{:else}
(adding = true)} />
{/if} {/if}