{#if header}
{/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 == 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.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}