{#if nowTouching}
Now touching {nowTouching.slug}
{/if}
{#if nodes.length === 0}

Entities Nomos explores in this conversation appear here, wired up by their relationships.

{:else} {#each links as link} {@const s = endpoint(link.source)} {@const t = endpoint(link.target)} {#if s?.x != null && t?.x != null && s?.y != null && t?.y != null} {@const focus = selected && (s.slug === selected.slug || t.slug === selected.slug)} {link.type} {/if} {/each} {#each nodes as node (node.slug)} {#if node.x != null && node.y != null} {@const r = nodeRadius(node)} {@const isSel = selected?.slug === node.slug} {@const dim = selected && !isSel && !selectedRelations.some((rel) => rel.other === node.slug)} {@const isTouched = node.slug in touchedBySlug} {@const diff = diffBySlug[node.slug]} onNodeDown(e, node)} onkeydown={(e) => e.key === 'Enter' && (selected = node)} > {#if isSel} {/if} {#if isTouched} {/if} {shortName(node.slug)} {#if diff} {diff.from} → {diff.to} {/if} {/if} {/each} {/if}
{#if selected}
{selected.slug} {selected.type} {#if selected.state}{selected.state}{/if}
{#if selected.health}
{selected.health} · checked {relativeTime(selected.last_check_at)}
{/if} {#if selected.attributes && Object.keys(selected.attributes).length}

Attributes

{#each Object.entries(selected.attributes).slice(0, 6) as [key, value]}
{key}
{typeof value === 'object' ? JSON.stringify(value) : String(value)}
{/each}
{/if} {#if selectedRelations.length}

Relations ({selectedRelations.length})

{#each selectedRelations as rel}
{rel.dir} {rel.type} →
{/each}
{/if}
{/if}