{#if selectedTab === "export"} {:else if selectedTab === "import"} {:else if selectedTab === "events"} toggleEventExpansion(e.detail)} on:deleteEvent={(e) => deleteEvent(e.detail)} on:copyEventToClipboard={(e) => copyEventToClipboard(e.detail.event, e.detail.e)} on:toggleChange={handleToggleChange} on:loadAllEvents={(e) => loadAllEvents(e.detail.refresh, e.detail.authors)} on:toggleFilterBuilder={toggleFilterBuilder} on:filterApply={handleFilterApply} on:filterClear={handleFilterClear} /> {:else if selectedTab === "compose"} {:else if selectedTab === "managed-acl"}
{#if aclMode !== "managed"}

⚠️ Managed ACL Mode Not Active

To use the Managed ACL interface, you need to set the ACL mode to "managed" in your relay configuration.

Current ACL mode: {aclMode || "unknown"}

Please set ORLY_ACL_MODE=managed in your environment variables and restart the relay.

{:else if isLoggedIn && userRole === "owner"} {:else}

Please log in with owner permissions to access managed ACL configuration.

{/if}
{:else if selectedTab === "sprocket"} loadVersion(e.detail)} on:deleteVersion={(e) => deleteVersion(e.detail)} on:openLoginModal={openLoginModal} /> {:else if selectedTab === "policy"} {:else if selectedTab === "recovery"}

Event Recovery

Search and recover old versions of replaceable events

{#if (recoverySelectedKind !== null && recoverySelectedKind !== undefined && recoverySelectedKind >= 0) || (recoveryCustomKind !== "" && parseInt(recoveryCustomKind) >= 0)}
{#if isLoadingRecovery}
Loading events...
{:else if recoveryEvents.length === 0}
No events found for this kind
{:else}
{#each recoveryEvents as event} {@const isCurrent = isCurrentVersion(event)}
{#if isCurrent} Current Version{/if} {new Date( event.created_at * 1000, ).toLocaleString()}
{#if !isCurrent} {#if currentEffectiveRole !== "read"} {/if} {/if}
{JSON.stringify(
                                                    event,
                                                    null,
                                                    2,
                                                )}
{/each}
{#if recoveryHasMore} {/if} {/if}
{/if}
{:else if searchTabs.some((tab) => tab.id === selectedTab)} {#each searchTabs as searchTab} {#if searchTab.id === selectedTab}

🔍 {searchTab.label}

handleFilterSweep(searchTab.id)} />
handleSearchScroll(e, searchTab.id)} > {#if searchResults.get(searchTab.id)?.events?.length > 0} {#each searchResults.get(searchTab.id).events as event}
toggleEventExpansion(event.id)} on:keydown={(e) => e.key === "Enter" && toggleEventExpansion(event.id)} role="button" tabindex="0" >
👤
{truncatePubkey( event.pubkey, )}
{event.kind} {getKindName( event.kind, )}
{formatTimestamp( event.created_at, )}
{truncateContent( event.content, )}
{#if event.kind !== 5 && (userRole === "admin" || userRole === "owner" || (userRole === "write" && event.pubkey && event.pubkey === userPubkey))} {/if}
{#if expandedEvents.has(event.id)}
{JSON.stringify(
                                                            event,
                                                            null,
                                                            2,
                                                        )}
{/if}
{/each} {:else if !searchResults.get(searchTab.id)?.isLoading}

No search results found.

{/if} {#if searchResults.get(searchTab.id)?.isLoading}

Searching...

{/if} {#if !searchResults.get(searchTab.id)?.hasMore && searchResults.get(searchTab.id)?.events?.length > 0}

No more search results to load.

{/if}
{/if} {/each} {:else}
{#if isLoggedIn}

Welcome {userProfile?.name || userPubkey.slice(0, 8) + "..."}

{:else}

Log in to access your user dashboard

{/if}
{/if}