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