{#snippet renderTreeNode( node: ResourceTreeNode, serverName: string, depth: number, parentPath: string )} {@const isFolder = !node.resource && node.children.size > 0} {@const folderId = `${serverName}:${parentPath}/${node.name}`} {@const isFolderExpanded = expandedFolders.has(folderId)} {#if isFolder} {@const folderCount = countTreeResources(node)} toggleFolder(folderId)}> {#if isFolderExpanded} {:else} {/if} {node.name} ({folderCount})
{#each [...node.children.values()].sort((a, b) => { // Folders first, then files const aIsFolder = !a.resource && a.children.size > 0; const bIsFolder = !b.resource && b.children.size > 0; if (aIsFolder && !bIsFolder) return -1; if (!aIsFolder && bIsFolder) return 1; return a.name.localeCompare(b.name); }) as child} {@render renderTreeNode(child, serverName, depth + 1, `${parentPath}/${node.name}`)} {/each}
{:else if node.resource} {@const resource = node.resource} {@const ResourceIcon = getResourceIcon(resource)} {@const isSelected = isResourceSelected(resource)} {@const displayName = resource.title || getDisplayName(node.name)}
{#if onToggle} handleCheckboxChange(resource, checked === true)} class="h-4 w-4" /> {/if} {/if}
{/if} {/snippet}

Available resources

{#if resources.size === 0}
{#if isLoading} Loading resources... {:else} No resources available {/if}
{:else} {#each [...resources.entries()] as [serverName, serverRes]} {@const isExpanded = expandedServers.has(serverName)} {@const hasResources = serverRes.resources.length > 0} {@const displayName = getServerDisplayName(serverName)} {@const favicon = getServerFavicon(serverName)} {@const resourceTree = buildResourceTree(serverRes.resources, serverName)} toggleServer(serverName)}> {#if isExpanded} {:else} {/if} {#if favicon} { (e.currentTarget as HTMLImageElement).style.display = 'none'; }} /> {/if} {displayName} ({serverRes.resources.length}) {#if serverRes.loading} {/if}
{#if serverRes.error}
Error: {serverRes.error}
{:else if !hasResources}
No resources
{:else} {#each [...resourceTree.children.values()].sort((a, b) => { const aIsFolder = !a.resource && a.children.size > 0; const bIsFolder = !b.resource && b.children.size > 0; if (aIsFolder && !bIsFolder) return -1; if (!aIsFolder && bIsFolder) return 1; return a.name.localeCompare(b.name); }) as child} {@render renderTreeNode(child, serverName, 1, '')} {/each} {/if}
{/each} {/if}