this repo has no description
1{{ define "title" }}good first issues{{ end }} 2 3{{ define "extrameta" }} 4 <meta property="og:title" content="good first issues · tangled" /> 5 <meta property="og:type" content="object" /> 6 <meta property="og:url" content="https://tangled.org/goodfirstissues" /> 7 <meta property="og:description" content="Find good first issues to contribute to open source projects" /> 8{{ end }} 9 10{{ define "content" }} 11<div class="grid grid-cols-10"> 12 <header class="col-span-full md:col-span-10 px-6 py-2 mb-4"> 13 <h1 class="text-2xl font-bold dark:text-white mb-1">Good First Issues</h1> 14 <p class="text-gray-600 dark:text-gray-400 mb-2"> 15 Find beginner-friendly issues across all repositories to get started with open source contributions. 16 </p> 17 </header> 18 19 <div class="col-span-full md:col-span-10 space-y-6"> 20 {{ if eq (len .RepoGroups) 0 }} 21 <div class="bg-white dark:bg-gray-800 drop-shadow-sm rounded p-6 md:px-10"> 22 <div class="text-center py-16"> 23 <div class="text-gray-500 dark:text-gray-400 mb-4"> 24 {{ i "circle-dot" "w-16 h-16 mx-auto" }} 25 </div> 26 <h3 class="text-xl font-medium text-gray-900 dark:text-white mb-2">No good first issues available</h3> 27 <p class="text-gray-600 dark:text-gray-400 mb-3 max-w-md mx-auto"> 28 There are currently no open issues labeled as "good-first-issue" across all repositories. 29 </p> 30 <p class="text-gray-500 dark:text-gray-500 text-sm max-w-md mx-auto"> 31 Repository maintainers can add the "good-first-issue" label to beginner-friendly issues to help newcomers get started. 32 </p> 33 </div> 34 </div> 35 {{ else }} 36 {{ range .RepoGroups }} 37 <div class="mb-4 gap-1 flex flex-col drop-shadow-sm rounded bg-white dark:bg-gray-800"> 38 <div class="flex px-6 pt-4 pb-2 flex-row gap-1"> 39 <div class="font-medium dark:text-white flex items-center justify-between"> 40 <div class="flex items-center min-w-0 flex-1 mr-2"> 41 {{ if .Repo.Source }} 42 {{ i "git-fork" "w-4 h-4 mr-1.5 shrink-0" }} 43 {{ else }} 44 {{ i "book-marked" "w-4 h-4 mr-1.5 shrink-0" }} 45 {{ end }} 46 {{ $repoOwner := resolve .Repo.Did }} 47 <a href="/{{ $repoOwner }}/{{ .Repo.Name }}" class="truncate min-w-0">{{ $repoOwner }}/{{ .Repo.Name }}</a> 48 </div> 49 </div> 50 51 52 {{ if .Repo.RepoStats }} 53 <div class="text-gray-400 text-sm font-mono inline-flex gap-4 mt-auto"> 54 {{ with .Repo.RepoStats.Language }} 55 <div class="flex gap-2 items-center text-sm"> 56 {{ template "repo/fragments/colorBall" (dict "color" (langColor .)) }} 57 <span>{{ . }}</span> 58 </div> 59 {{ end }} 60 {{ with .Repo.RepoStats.StarCount }} 61 <div class="flex gap-1 items-center text-sm"> 62 {{ i "star" "w-3 h-3 fill-current" }} 63 <span>{{ . }}</span> 64 </div> 65 {{ end }} 66 {{ with .Repo.RepoStats.IssueCount.Open }} 67 <div class="flex gap-1 items-center text-sm"> 68 {{ i "circle-dot" "w-3 h-3" }} 69 <span>{{ . }}</span> 70 </div> 71 {{ end }} 72 {{ with .Repo.RepoStats.PullCount.Open }} 73 <div class="flex gap-1 items-center text-sm"> 74 {{ i "git-pull-request" "w-3 h-3" }} 75 <span>{{ . }}</span> 76 </div> 77 {{ end }} 78 </div> 79 {{ end }} 80 </div> 81 82 {{ with .Repo.Description }} 83 <div class="pl-6 pb-2 text-gray-600 dark:text-gray-300 text-sm line-clamp-2"> 84 {{ . | description }} 85 </div> 86 {{ end }} 87 88 {{ if gt (len .Issues) 0 }} 89 <details class="bg-white dark:bg-gray-800 group" open> 90 <summary class="py-4 px-6 text-xs list-none cursor-pointer hover:text-gray-500 hover:dark:text-gray-400"> 91 {{ $s := "s" }} 92 {{ if eq (len .Issues) 1 }} 93 {{ $s = "" }} 94 {{ end }} 95 <div class="group-open:hidden flex items-center gap-2"> 96 {{ i "chevrons-up-down" "w-4 h-4" }} expand {{ len .Issues }} issue{{$s}} in this repo 97 </div> 98 <div class="hidden group-open:flex items-center gap-2"> 99 {{ i "chevrons-down-up" "w-4 h-4" }} hide {{ len .Issues }} issue{{$s}} in this repo 100 </div> 101 </summary> 102 <div class="grid grid-cols-1 rounded-b border-b border-t border-gray-200 dark:border-gray-900 divide-y divide-gray-200 dark:divide-gray-900"> 103 {{ range .Issues }} 104 <a href="/{{ resolve .Repo.Did }}/{{ .Repo.Name }}/issues/{{ .IssueId }}" class="no-underline hover:no-underline hover:bg-gray-100/25 hover:dark:bg-gray-700/25"> 105 <div class="py-2 px-6"> 106 <div class="flex-grow min-w-0 w-full"> 107 <div class="flex text-sm items-center justify-between w-full"> 108 <div class="flex items-center gap-2 min-w-0 flex-1 pr-2"> 109 <span class="truncate text-sm text-gray-800 dark:text-gray-200"> 110 <span class="text-gray-500 dark:text-gray-400">#{{ .IssueId }}</span> 111 {{ .Title | description }} 112 </span> 113 </div> 114 <div class="flex-shrink-0 flex items-center gap-2 text-gray-500 dark:text-gray-400"> 115 <span> 116 <div class="inline-flex items-center gap-1"> 117 {{ i "message-square" "w-3 h-3 md:hidden" }} 118 {{ len .Comments }} 119 <span class="hidden md:inline">comment{{ if ne (len .Comments) 1 }}s{{ end }}</span> 120 </div> 121 </span> 122 <span class="before:content-['·'] before:select-none"></span> 123 <span class="text-xs"> 124 {{ template "repo/fragments/time" .Created }} 125 </span> 126 <div class="hidden md:inline-flex md:gap-1"> 127 {{ $labelState := .Labels }} 128 {{ range $k, $d := $.LabelDefs }} 129 {{ range $v, $s := $labelState.GetValSet $d.AtUri.String }} 130 {{ template "labels/fragments/label" (dict "def" $d "val" $v "withPrefix" true) }} 131 {{ end }} 132 {{ end }} 133 </div> 134 </div> 135 </div> 136 </div> 137 </div> 138 </a> 139 {{ end }} 140 </div> 141 </details> 142 {{ end }} 143 </div> 144 {{ end }} 145 146 {{ if or (gt .Page.Offset 0) (eq (len .RepoGroups) .Page.Limit) }} 147 <div class="flex justify-center mt-8"> 148 <div class="flex gap-2"> 149 {{ if gt .Page.Offset 0 }} 150 {{ $prev := .Page.Previous }} 151 <a 152 class="btn flex items-center gap-2 no-underline hover:no-underline dark:text-white dark:hover:bg-gray-700" 153 hx-boost="true" 154 href="/goodfirstissues?offset={{ $prev.Offset }}&limit={{ $prev.Limit }}" 155 > 156 {{ i "chevron-left" "w-4 h-4" }} 157 previous 158 </a> 159 {{ else }} 160 <div></div> 161 {{ end }} 162 163 {{ if eq (len .RepoGroups) .Page.Limit }} 164 {{ $next := .Page.Next }} 165 <a 166 class="btn flex items-center gap-2 no-underline hover:no-underline dark:text-white dark:hover:bg-gray-700" 167 hx-boost="true" 168 href="/goodfirstissues?offset={{ $next.Offset }}&limit={{ $next.Limit }}" 169 > 170 next 171 {{ i "chevron-right" "w-4 h-4" }} 172 </a> 173 {{ end }} 174 </div> 175 </div> 176 {{ end }} 177 {{ end }} 178 </div> 179</div> 180{{ end }}