+ + {p.name.slice(0, 1).toUpperCase()} + + {p.name} + {#if p.products}{p.products}{/if} + + updated {relativeTime(p.updatedAt, data.now)} + + open(`p:${p.id}`)}> + + + + + + + {#if editing === `p:${p.id}`}{@render providerForm(p)}{/if} + + {#each SECTIONS as s (s.key)} + {@const list = groups[s.key]} + {#if list || editing === `n:${p.id}:${s.key}`} + + + + {s.label} + {#if s.hint}{s.hint}{/if} + {list?.length ?? 0} + { + ev.preventDefault(); + open(`n:${p.id}:${s.key}`); + }}> + + {#if editing === `n:${p.id}:${s.key}`}{@render entryForm(p, s.key)}{/if} + {#if list} + + {#each list as e (e.id)} + + {#if editing === `e:${e.id}`} + {@render entryForm(p, s.key, e)} + {:else} + + {e.name} + {#if e.scope}{e.scope}{/if} + {#if e.link} + {host(e.link)} + {/if} + + open(`e:${e.id}`)}> + + + + + + + {#if e.note}{e.note}{/if} + {#if e.bodyHtml} + + {@html e.bodyHtml} + {/if} + {/if} + + {/each} + + {/if} + {#if s.key === 'plan'} + Labels only, never key values. + {/if} + + {/if} + {/each} + + {#if emptySections.some((s) => editing !== `n:${p.id}:${s.key}`)} + + {#each emptySections as s (s.key)} + {#if editing !== `n:${p.id}:${s.key}`} + open(`n:${p.id}:${s.key}`)} + style:--from={s.from} + style:--to={s.to}>{s.label} + {/if} + {/each} + + {/if} +