{{ define "search-results" }} {{/* Search results partial — rendered server-side on initial page load and swapped in by htmx for Load More pagination. Receives searchResults struct: .Repositories, .SearchQuery, .HasMore, .NextOffset, .HasError */}} {{ if .HasError }} {{ template "state-error" (dict "Title" "Search is temporarily unavailable" "Subtext" "The search service had trouble running your query. Try again in a moment." "RetryURL" (printf "/api/search-results?q=%s" (urlquery .SearchQuery)) "RetryTarget" "#search-results" ) }} {{ else }} {{ template "card-grid" (dict "Repositories" .Repositories "Columns" 4 "EmptyIcon" "search-x" "EmptyMessage" "No repositories found matching your search." "EmptySubtext" "Try a different search term or browse the homepage." "LoadMoreURL" (printf "/api/search-results?q=%s&offset=%d" (urlquery .SearchQuery) .NextOffset) "TargetID" "search-results-grid" "HasMore" .HasMore ) }} {{ end }} {{ end }} {{/* card-grid-append-search — Load More fragment for /api/search-results. */}} {{ define "card-grid-append-search" }} {{ template "card-grid-append" (dict "Repositories" .Repositories "LoadMoreURL" (printf "/api/search-results?q=%s&offset=%d" (urlquery .SearchQuery) .NextOffset) "TargetID" "search-results-grid" "HasMore" .HasMore ) }} {{ end }}