{#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.address, entry.attribute, 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}
(addFocus = ev.detail)}
bind:this={newAttrSelector}
/>
{:else if column === VALUE_COL}
(addFocus = ev.detail)}
/>
{:else}
{/if}
{/each}
addEntry(newEntryAttribute, newEntryValue)}
/>
{:else}
(adding = true)}
/>
{/if}
{/if}