v0.36.0 1fb2421

components_templ.go RawHistoryFolder

1// Code generated by templ - DO NOT EDIT.
2
3// templ: version: v0.3.1020
4// SPDX-License-Identifier: AGPL-3.0-or-later
5
6package web
7
8//lint:file-ignore SA4006 This context is only used if a nested component is present.
9
10import "github.com/a-h/templ"
11import templruntime "github.com/a-h/templ/runtime"
12
13// Facts is a key/value block on an 11ch key column.
14func Facts(facts []Fact) templ.Component {
15	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
16		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
17		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
18			return templ_7745c5c3_CtxErr
19		}
20		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
21		if !templ_7745c5c3_IsBuffer {
22			defer func() {
23				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
24				if templ_7745c5c3_Err == nil {
25					templ_7745c5c3_Err = templ_7745c5c3_BufErr
26				}
27			}()
28		}
29		ctx = templ.InitializeContext(ctx)
30		templ_7745c5c3_Var1 := templ.GetChildren(ctx)
31		if templ_7745c5c3_Var1 == nil {
32			templ_7745c5c3_Var1 = templ.NopComponent
33		}
34		ctx = templ.ClearChildren(ctx)
35		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "<dl class=\"kv\">")
36		if templ_7745c5c3_Err != nil {
37			return templ_7745c5c3_Err
38		}
39		for _, f := range facts {
40			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "<dt>")
41			if templ_7745c5c3_Err != nil {
42				return templ_7745c5c3_Err
43			}
44			var templ_7745c5c3_Var2 string
45			templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(f.Key)
46			if templ_7745c5c3_Err != nil {
47				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 9, Col: 14}
48			}
49			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2))
50			if templ_7745c5c3_Err != nil {
51				return templ_7745c5c3_Err
52			}
53			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "</dt>")
54			if templ_7745c5c3_Err != nil {
55				return templ_7745c5c3_Err
56			}
57			templ_7745c5c3_Err = FactValue(f).Render(ctx, templ_7745c5c3_Buffer)
58			if templ_7745c5c3_Err != nil {
59				return templ_7745c5c3_Err
60			}
61		}
62		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, "</dl>")
63		if templ_7745c5c3_Err != nil {
64			return templ_7745c5c3_Err
65		}
66		return nil
67	})
68}
69
70// CloneBlock is a block of copyable shell lines; each has its own [copy]
71// button, whose label says "copied" for 1.5 s.
72func CloneBlock(c Clone) templ.Component {
73	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
74		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
75		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
76			return templ_7745c5c3_CtxErr
77		}
78		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
79		if !templ_7745c5c3_IsBuffer {
80			defer func() {
81				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
82				if templ_7745c5c3_Err == nil {
83					templ_7745c5c3_Err = templ_7745c5c3_BufErr
84				}
85			}()
86		}
87		ctx = templ.InitializeContext(ctx)
88		templ_7745c5c3_Var3 := templ.GetChildren(ctx)
89		if templ_7745c5c3_Var3 == nil {
90			templ_7745c5c3_Var3 = templ.NopComponent
91		}
92		ctx = templ.ClearChildren(ctx)
93		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "<div class=\"clone\" id=\"")
94		if templ_7745c5c3_Err != nil {
95			return templ_7745c5c3_Err
96		}
97		var templ_7745c5c3_Var4 string
98		templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.ID)
99		if templ_7745c5c3_Err != nil {
100			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 18, Col: 29}
101		}
102		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var4)
103		if templ_7745c5c3_Err != nil {
104			return templ_7745c5c3_Err
105		}
106		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, "\">")
107		if templ_7745c5c3_Err != nil {
108			return templ_7745c5c3_Err
109		}
110		for _, line := range c.Lines {
111			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, "<div class=\"clone-line\"><span class=\"mute\" aria-hidden=\"true\">$ </span><code>")
112			if templ_7745c5c3_Err != nil {
113				return templ_7745c5c3_Err
114			}
115			var templ_7745c5c3_Var5 string
116			templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(line)
117			if templ_7745c5c3_Err != nil {
118				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 21, Col: 63}
119			}
120			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5))
121			if templ_7745c5c3_Err != nil {
122				return templ_7745c5c3_Err
123			}
124			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 8, "</code> <button type=\"button\" class=\"btn copy\" data-js data-label=\"Copy\" aria-label=\"")
125			if templ_7745c5c3_Err != nil {
126				return templ_7745c5c3_Err
127			}
128			var templ_7745c5c3_Var6 string
129			templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.ResolveAttributeValue("copy: " + line)
130			if templ_7745c5c3_Err != nil {
131				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 27, Col: 33}
132			}
133			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var6)
134			if templ_7745c5c3_Err != nil {
135				return templ_7745c5c3_Err
136			}
137			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, "\" hx-on:click=\"ermite.copy(this)\">Copy</button></div>")
138			if templ_7745c5c3_Err != nil {
139				return templ_7745c5c3_Err
140			}
141		}
142		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, "</div>")
143		if templ_7745c5c3_Err != nil {
144			return templ_7745c5c3_Err
145		}
146		return nil
147	})
148}
149
150// HomeRowView is the row of a repository in the home list. On the left what
151// it is: name, description, topics and the pulse of its activity; on the
152// right its figures and CI state over its newest commits. Its id is the
153// target of SSE swaps; the name link comes first, `enter` follows it.
154func HomeRowView(r HomeRow) templ.Component {
155	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
156		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
157		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
158			return templ_7745c5c3_CtxErr
159		}
160		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
161		if !templ_7745c5c3_IsBuffer {
162			defer func() {
163				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
164				if templ_7745c5c3_Err == nil {
165					templ_7745c5c3_Err = templ_7745c5c3_BufErr
166				}
167			}()
168		}
169		ctx = templ.InitializeContext(ctx)
170		templ_7745c5c3_Var7 := templ.GetChildren(ctx)
171		if templ_7745c5c3_Var7 == nil {
172			templ_7745c5c3_Var7 = templ.NopComponent
173		}
174		ctx = templ.ClearChildren(ctx)
175		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, "<li id=\"")
176		if templ_7745c5c3_Err != nil {
177			return templ_7745c5c3_Err
178		}
179		var templ_7745c5c3_Var8 string
180		templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.ID)
181		if templ_7745c5c3_Err != nil {
182			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 40, Col: 14}
183		}
184		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var8)
185		if templ_7745c5c3_Err != nil {
186			return templ_7745c5c3_Err
187		}
188		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, "\" class=\"repo\"")
189		if templ_7745c5c3_Err != nil {
190			return templ_7745c5c3_Err
191		}
192		if r.Cursor {
193			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, " data-cursor")
194			if templ_7745c5c3_Err != nil {
195				return templ_7745c5c3_Err
196			}
197		}
198		if r.Fresh {
199			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, " data-activity")
200			if templ_7745c5c3_Err != nil {
201				return templ_7745c5c3_Err
202			}
203		}
204		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, "><div class=\"repo-main\"><h2 class=\"repo-name\"><a href=\"")
205		if templ_7745c5c3_Err != nil {
206			return templ_7745c5c3_Err
207		}
208		var templ_7745c5c3_Var9 templ.SafeURL
209		templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(r.Href))
210		if templ_7745c5c3_Err != nil {
211			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 43, Col: 35}
212		}
213		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var9))
214		if templ_7745c5c3_Err != nil {
215			return templ_7745c5c3_Err
216		}
217		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "\">")
218		if templ_7745c5c3_Err != nil {
219			return templ_7745c5c3_Err
220		}
221		var templ_7745c5c3_Var10 string
222		templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.JoinStringErrs(r.Name)
223		if templ_7745c5c3_Err != nil {
224			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 43, Col: 46}
225		}
226		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var10))
227		if templ_7745c5c3_Err != nil {
228			return templ_7745c5c3_Err
229		}
230		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 17, "</a> ")
231		if templ_7745c5c3_Err != nil {
232			return templ_7745c5c3_Err
233		}
234		if rel := r.Release; rel != nil {
235			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 18, "<a class=\"pill repo-release\" href=\"")
236			if templ_7745c5c3_Err != nil {
237				return templ_7745c5c3_Err
238			}
239			var templ_7745c5c3_Var11 templ.SafeURL
240			templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(rel.Href))
241			if templ_7745c5c3_Err != nil {
242				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 45, Col: 64}
243			}
244			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11))
245			if templ_7745c5c3_Err != nil {
246				return templ_7745c5c3_Err
247			}
248			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, "\" title=\"")
249			if templ_7745c5c3_Err != nil {
250				return templ_7745c5c3_Err
251			}
252			var templ_7745c5c3_Var12 string
253			templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.ResolveAttributeValue("Latest release: " + rel.Tag)
254			if templ_7745c5c3_Err != nil {
255				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 45, Col: 103}
256			}
257			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var12)
258			if templ_7745c5c3_Err != nil {
259				return templ_7745c5c3_Err
260			}
261			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "\">")
262			if templ_7745c5c3_Err != nil {
263				return templ_7745c5c3_Err
264			}
265			var templ_7745c5c3_Var13 string
266			templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.JoinStringErrs(rel.Tag)
267			if templ_7745c5c3_Err != nil {
268				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 45, Col: 115}
269			}
270			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var13))
271			if templ_7745c5c3_Err != nil {
272				return templ_7745c5c3_Err
273			}
274			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "</a> ")
275			if templ_7745c5c3_Err != nil {
276				return templ_7745c5c3_Err
277			}
278		}
279		if r.Private {
280			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "<span class=\"pill\">private</span> ")
281			if templ_7745c5c3_Err != nil {
282				return templ_7745c5c3_Err
283			}
284		}
285		if lic := r.License; lic != nil {
286			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 23, "<a class=\"pill repo-license\" href=\"")
287			if templ_7745c5c3_Err != nil {
288				return templ_7745c5c3_Err
289			}
290			var templ_7745c5c3_Var14 templ.SafeURL
291			templ_7745c5c3_Var14, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(lic.Href))
292			if templ_7745c5c3_Err != nil {
293				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 51, Col: 64}
294			}
295			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var14))
296			if templ_7745c5c3_Err != nil {
297				return templ_7745c5c3_Err
298			}
299			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, "\" title=\"")
300			if templ_7745c5c3_Err != nil {
301				return templ_7745c5c3_Err
302			}
303			var templ_7745c5c3_Var15 string
304			templ_7745c5c3_Var15, templ_7745c5c3_Err = templ.ResolveAttributeValue("License: " + lic.ID)
305			if templ_7745c5c3_Err != nil {
306				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 51, Col: 95}
307			}
308			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var15)
309			if templ_7745c5c3_Err != nil {
310				return templ_7745c5c3_Err
311			}
312			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 25, "\">")
313			if templ_7745c5c3_Err != nil {
314				return templ_7745c5c3_Err
315			}
316			var templ_7745c5c3_Var16 string
317			templ_7745c5c3_Var16, templ_7745c5c3_Err = templ.JoinStringErrs(lic.ID)
318			if templ_7745c5c3_Err != nil {
319				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 51, Col: 106}
320			}
321			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var16))
322			if templ_7745c5c3_Err != nil {
323				return templ_7745c5c3_Err
324			}
325			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 26, "</a> ")
326			if templ_7745c5c3_Err != nil {
327				return templ_7745c5c3_Err
328			}
329		}
330		if r.Fresh {
331			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 27, "<span class=\"repo-activity\" title=\"new activity\"><span class=\"ico i-refresh-cw\" aria-hidden=\"true\"></span><span class=\"sr\">new activity</span></span>")
332			if templ_7745c5c3_Err != nil {
333				return templ_7745c5c3_Err
334			}
335		}
336		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 28, "</h2>")
337		if templ_7745c5c3_Err != nil {
338			return templ_7745c5c3_Err
339		}
340		if r.Desc != "" {
341			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 29, "<p class=\"repo-desc\">")
342			if templ_7745c5c3_Err != nil {
343				return templ_7745c5c3_Err
344			}
345			var templ_7745c5c3_Var17 string
346			templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.JoinStringErrs(r.Desc)
347			if templ_7745c5c3_Err != nil {
348				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 58, Col: 33}
349			}
350			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var17))
351			if templ_7745c5c3_Err != nil {
352				return templ_7745c5c3_Err
353			}
354			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 30, "</p>")
355			if templ_7745c5c3_Err != nil {
356				return templ_7745c5c3_Err
357			}
358		} else {
359			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 31, "<p class=\"repo-desc mute\">no description</p>")
360			if templ_7745c5c3_Err != nil {
361				return templ_7745c5c3_Err
362			}
363		}
364		if len(r.Topics) > 0 {
365			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 32, "<ul class=\"repo-topics\" aria-label=\"")
366			if templ_7745c5c3_Err != nil {
367				return templ_7745c5c3_Err
368			}
369			var templ_7745c5c3_Var18 string
370			templ_7745c5c3_Var18, templ_7745c5c3_Err = templ.ResolveAttributeValue("Topics of " + r.Name)
371			if templ_7745c5c3_Err != nil {
372				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 63, Col: 62}
373			}
374			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var18)
375			if templ_7745c5c3_Err != nil {
376				return templ_7745c5c3_Err
377			}
378			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, "\" data-fit>")
379			if templ_7745c5c3_Err != nil {
380				return templ_7745c5c3_Err
381			}
382			for _, t := range r.Topics {
383				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 34, "<li>")
384				if templ_7745c5c3_Err != nil {
385					return templ_7745c5c3_Err
386				}
387				var templ_7745c5c3_Var19 string
388				templ_7745c5c3_Var19, templ_7745c5c3_Err = templ.JoinStringErrs(t)
389				if templ_7745c5c3_Err != nil {
390					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 65, Col: 13}
391				}
392				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var19))
393				if templ_7745c5c3_Err != nil {
394					return templ_7745c5c3_Err
395				}
396				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 35, "</li>")
397				if templ_7745c5c3_Err != nil {
398					return templ_7745c5c3_Err
399				}
400			}
401			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, "</ul>")
402			if templ_7745c5c3_Err != nil {
403				return templ_7745c5c3_Err
404			}
405		} else {
406			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 37, "<div class=\"repo-topics\" aria-hidden=\"true\"></div>")
407			if templ_7745c5c3_Err != nil {
408				return templ_7745c5c3_Err
409			}
410		}
411		if r.Stats != nil && r.Stats.Pulse != nil {
412			templ_7745c5c3_Err = pulse(r.Stats.Pulse).Render(ctx, templ_7745c5c3_Buffer)
413			if templ_7745c5c3_Err != nil {
414				return templ_7745c5c3_Err
415			}
416		} else {
417			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, "<div class=\"repo-pulse\" aria-hidden=\"true\"></div>")
418			if templ_7745c5c3_Err != nil {
419				return templ_7745c5c3_Err
420			}
421		}
422		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, "</div><div class=\"repo-head\"><dl class=\"repo-stats\" aria-label=\"")
423		if templ_7745c5c3_Err != nil {
424			return templ_7745c5c3_Err
425		}
426		var templ_7745c5c3_Var20 string
427		templ_7745c5c3_Var20, templ_7745c5c3_Err = templ.ResolveAttributeValue("Figures of " + r.Name)
428		if templ_7745c5c3_Err != nil {
429			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 78, Col: 61}
430		}
431		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var20)
432		if templ_7745c5c3_Err != nil {
433			return templ_7745c5c3_Err
434		}
435		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, "\">")
436		if templ_7745c5c3_Err != nil {
437			return templ_7745c5c3_Err
438		}
439		if s := r.Stats; s != nil {
440			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, "<div><dt>commits</dt><dd>")
441			if templ_7745c5c3_Err != nil {
442				return templ_7745c5c3_Err
443			}
444			var templ_7745c5c3_Var21 string
445			templ_7745c5c3_Var21, templ_7745c5c3_Err = templ.JoinStringErrs(s.Commits)
446			if templ_7745c5c3_Err != nil {
447				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 80, Col: 41}
448			}
449			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var21))
450			if templ_7745c5c3_Err != nil {
451				return templ_7745c5c3_Err
452			}
453			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "</dd></div><div><dt>last 30 days</dt><dd>")
454			if templ_7745c5c3_Err != nil {
455				return templ_7745c5c3_Err
456			}
457			var templ_7745c5c3_Var22 string
458			templ_7745c5c3_Var22, templ_7745c5c3_Err = templ.JoinStringErrs(s.Recent)
459			if templ_7745c5c3_Err != nil {
460				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 81, Col: 45}
461			}
462			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var22))
463			if templ_7745c5c3_Err != nil {
464				return templ_7745c5c3_Err
465			}
466			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "</dd></div>")
467			if templ_7745c5c3_Err != nil {
468				return templ_7745c5c3_Err
469			}
470		}
471		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, "<div class=\"rs-active\"><dt>last activity</dt>")
472		if templ_7745c5c3_Err != nil {
473			return templ_7745c5c3_Err
474		}
475		if r.ActiveAt != "" {
476			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "<dd><time datetime=\"")
477			if templ_7745c5c3_Err != nil {
478				return templ_7745c5c3_Err
479			}
480			var templ_7745c5c3_Var23 string
481			templ_7745c5c3_Var23, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.ActiveAt)
482			if templ_7745c5c3_Err != nil {
483				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 86, Col: 37}
484			}
485			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var23)
486			if templ_7745c5c3_Err != nil {
487				return templ_7745c5c3_Err
488			}
489			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 46, "\" title=\"")
490			if templ_7745c5c3_Err != nil {
491				return templ_7745c5c3_Err
492			}
493			var templ_7745c5c3_Var24 string
494			templ_7745c5c3_Var24, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.ActiveAt)
495			if templ_7745c5c3_Err != nil {
496				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 86, Col: 58}
497			}
498			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var24)
499			if templ_7745c5c3_Err != nil {
500				return templ_7745c5c3_Err
501			}
502			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 47, "\">")
503			if templ_7745c5c3_Err != nil {
504				return templ_7745c5c3_Err
505			}
506			var templ_7745c5c3_Var25 string
507			templ_7745c5c3_Var25, templ_7745c5c3_Err = templ.JoinStringErrs(r.Active)
508			if templ_7745c5c3_Err != nil {
509				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 86, Col: 71}
510			}
511			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var25))
512			if templ_7745c5c3_Err != nil {
513				return templ_7745c5c3_Err
514			}
515			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, "</time></dd>")
516			if templ_7745c5c3_Err != nil {
517				return templ_7745c5c3_Err
518			}
519		} else {
520			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 49, "<dd class=\"mute\">never</dd>")
521			if templ_7745c5c3_Err != nil {
522				return templ_7745c5c3_Err
523			}
524		}
525		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 50, "</div>")
526		if templ_7745c5c3_Err != nil {
527			return templ_7745c5c3_Err
528		}
529		if s := r.Stats; s != nil && s.Tag != "" {
530			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 51, "<div class=\"rs-tag\"><dt>last tag</dt>")
531			if templ_7745c5c3_Err != nil {
532				return templ_7745c5c3_Err
533			}
534			if s.TagHref != "" {
535				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 52, "<dd><a href=\"")
536				if templ_7745c5c3_Err != nil {
537					return templ_7745c5c3_Err
538				}
539				var templ_7745c5c3_Var26 templ.SafeURL
540				templ_7745c5c3_Var26, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(s.TagHref))
541				if templ_7745c5c3_Err != nil {
542					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 95, Col: 45}
543				}
544				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var26))
545				if templ_7745c5c3_Err != nil {
546					return templ_7745c5c3_Err
547				}
548				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 53, "\" title=\"")
549				if templ_7745c5c3_Err != nil {
550					return templ_7745c5c3_Err
551				}
552				var templ_7745c5c3_Var27 string
553				templ_7745c5c3_Var27, templ_7745c5c3_Err = templ.ResolveAttributeValue(s.Tag + " · made " + s.TagWhen)
554				if templ_7745c5c3_Err != nil {
555					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 95, Col: 87}
556				}
557				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var27)
558				if templ_7745c5c3_Err != nil {
559					return templ_7745c5c3_Err
560				}
561				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 54, "\">")
562				if templ_7745c5c3_Err != nil {
563					return templ_7745c5c3_Err
564				}
565				var templ_7745c5c3_Var28 string
566				templ_7745c5c3_Var28, templ_7745c5c3_Err = templ.JoinStringErrs(s.Tag)
567				if templ_7745c5c3_Err != nil {
568					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 95, Col: 97}
569				}
570				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var28))
571				if templ_7745c5c3_Err != nil {
572					return templ_7745c5c3_Err
573				}
574				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, "</a></dd>")
575				if templ_7745c5c3_Err != nil {
576					return templ_7745c5c3_Err
577				}
578			} else {
579				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 56, "<dd title=\"")
580				if templ_7745c5c3_Err != nil {
581					return templ_7745c5c3_Err
582				}
583				var templ_7745c5c3_Var29 string
584				templ_7745c5c3_Var29, templ_7745c5c3_Err = templ.ResolveAttributeValue(s.Tag + " · made " + s.TagWhen)
585				if templ_7745c5c3_Err != nil {
586					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 97, Col: 50}
587				}
588				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var29)
589				if templ_7745c5c3_Err != nil {
590					return templ_7745c5c3_Err
591				}
592				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "\">")
593				if templ_7745c5c3_Err != nil {
594					return templ_7745c5c3_Err
595				}
596				var templ_7745c5c3_Var30 string
597				templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinStringErrs(s.Tag)
598				if templ_7745c5c3_Err != nil {
599					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 97, Col: 60}
600				}
601				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var30))
602				if templ_7745c5c3_Err != nil {
603					return templ_7745c5c3_Err
604				}
605				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "</dd>")
606				if templ_7745c5c3_Err != nil {
607					return templ_7745c5c3_Err
608				}
609			}
610			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, "</div>")
611			if templ_7745c5c3_Err != nil {
612				return templ_7745c5c3_Err
613			}
614		}
615		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 60, "</dl>")
616		if templ_7745c5c3_Err != nil {
617			return templ_7745c5c3_Err
618		}
619		if r.CI != nil {
620			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "<a class=\"repo-ci\" href=\"")
621			if templ_7745c5c3_Err != nil {
622				return templ_7745c5c3_Err
623			}
624			var templ_7745c5c3_Var31 templ.SafeURL
625			templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(r.CI.Href))
626			if templ_7745c5c3_Err != nil {
627				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 103, Col: 54}
628			}
629			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var31))
630			if templ_7745c5c3_Err != nil {
631				return templ_7745c5c3_Err
632			}
633			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, "\" title=\"")
634			if templ_7745c5c3_Err != nil {
635				return templ_7745c5c3_Err
636			}
637			var templ_7745c5c3_Var32 string
638			templ_7745c5c3_Var32, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.CI.Label + " · " + r.CI.Title)
639			if templ_7745c5c3_Err != nil {
640				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 103, Col: 97}
641			}
642			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var32)
643			if templ_7745c5c3_Err != nil {
644				return templ_7745c5c3_Err
645			}
646			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 63, "\">")
647			if templ_7745c5c3_Err != nil {
648				return templ_7745c5c3_Err
649			}
650			var templ_7745c5c3_Var33 = []any{"ck", "ck-" + r.CI.Kind}
651			templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var33...)
652			if templ_7745c5c3_Err != nil {
653				return templ_7745c5c3_Err
654			}
655			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 64, "<span class=\"")
656			if templ_7745c5c3_Err != nil {
657				return templ_7745c5c3_Err
658			}
659			var templ_7745c5c3_Var34 string
660			templ_7745c5c3_Var34, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var33).String())
661			if templ_7745c5c3_Err != nil {
662				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 1, Col: 0}
663			}
664			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var34)
665			if templ_7745c5c3_Err != nil {
666				return templ_7745c5c3_Err
667			}
668			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 65, "\" aria-hidden=\"true\"></span> <span class=\"sr\">")
669			if templ_7745c5c3_Err != nil {
670				return templ_7745c5c3_Err
671			}
672			var templ_7745c5c3_Var35 string
673			templ_7745c5c3_Var35, templ_7745c5c3_Err = templ.JoinStringErrs("CI: " + r.CI.Label)
674			if templ_7745c5c3_Err != nil {
675				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 105, Col: 43}
676			}
677			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var35))
678			if templ_7745c5c3_Err != nil {
679				return templ_7745c5c3_Err
680			}
681			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 66, "</span></a>")
682			if templ_7745c5c3_Err != nil {
683				return templ_7745c5c3_Err
684			}
685		}
686		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 67, "</div>")
687		if templ_7745c5c3_Err != nil {
688			return templ_7745c5c3_Err
689		}
690		if len(r.Commits) > 0 {
691			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 68, "<ul class=\"repo-commits\"")
692			if templ_7745c5c3_Err != nil {
693				return templ_7745c5c3_Err
694			}
695			if len(r.Commits) == homeRecent {
696				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 69, " data-full")
697				if templ_7745c5c3_Err != nil {
698					return templ_7745c5c3_Err
699				}
700			}
701			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, " aria-label=\"")
702			if templ_7745c5c3_Err != nil {
703				return templ_7745c5c3_Err
704			}
705			var templ_7745c5c3_Var36 string
706			templ_7745c5c3_Var36, templ_7745c5c3_Err = templ.ResolveAttributeValue("Recent commits of " + r.Name)
707			if templ_7745c5c3_Err != nil {
708				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 113, Col: 46}
709			}
710			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var36)
711			if templ_7745c5c3_Err != nil {
712				return templ_7745c5c3_Err
713			}
714			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 71, "\">")
715			if templ_7745c5c3_Err != nil {
716				return templ_7745c5c3_Err
717			}
718			for _, c := range r.Commits {
719				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 72, "<li><a class=\"rc-sha\" href=\"")
720				if templ_7745c5c3_Err != nil {
721					return templ_7745c5c3_Err
722				}
723				var templ_7745c5c3_Var37 templ.SafeURL
724				templ_7745c5c3_Var37, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.CHref))
725				if templ_7745c5c3_Err != nil {
726					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 117, Col: 53}
727				}
728				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var37))
729				if templ_7745c5c3_Err != nil {
730					return templ_7745c5c3_Err
731				}
732				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 73, "\">")
733				if templ_7745c5c3_Err != nil {
734					return templ_7745c5c3_Err
735				}
736				var templ_7745c5c3_Var38 string
737				templ_7745c5c3_Var38, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)
738				if templ_7745c5c3_Err != nil {
739					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 117, Col: 65}
740				}
741				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var38))
742				if templ_7745c5c3_Err != nil {
743					return templ_7745c5c3_Err
744				}
745				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 74, "</a> <span class=\"rc-subject\" title=\"")
746				if templ_7745c5c3_Err != nil {
747					return templ_7745c5c3_Err
748				}
749				var templ_7745c5c3_Var39 string
750				templ_7745c5c3_Var39, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.Subject)
751				if templ_7745c5c3_Err != nil {
752					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 118, Col: 48}
753				}
754				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var39)
755				if templ_7745c5c3_Err != nil {
756					return templ_7745c5c3_Err
757				}
758				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 75, "\">")
759				if templ_7745c5c3_Err != nil {
760					return templ_7745c5c3_Err
761				}
762				var templ_7745c5c3_Var40 string
763				templ_7745c5c3_Var40, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)
764				if templ_7745c5c3_Err != nil {
765					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 118, Col: 62}
766				}
767				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var40))
768				if templ_7745c5c3_Err != nil {
769					return templ_7745c5c3_Err
770				}
771				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 76, "</span> ")
772				if templ_7745c5c3_Err != nil {
773					return templ_7745c5c3_Err
774				}
775				if c.WhenAt != "" {
776					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 77, "<time class=\"dim\" datetime=\"")
777					if templ_7745c5c3_Err != nil {
778						return templ_7745c5c3_Err
779					}
780					var templ_7745c5c3_Var41 string
781					templ_7745c5c3_Var41, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
782					if templ_7745c5c3_Err != nil {
783						return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 120, Col: 44}
784					}
785					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var41)
786					if templ_7745c5c3_Err != nil {
787						return templ_7745c5c3_Err
788					}
789					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 78, "\" title=\"")
790					if templ_7745c5c3_Err != nil {
791						return templ_7745c5c3_Err
792					}
793					var templ_7745c5c3_Var42 string
794					templ_7745c5c3_Var42, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
795					if templ_7745c5c3_Err != nil {
796						return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 120, Col: 63}
797					}
798					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var42)
799					if templ_7745c5c3_Err != nil {
800						return templ_7745c5c3_Err
801					}
802					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 79, "\">")
803					if templ_7745c5c3_Err != nil {
804						return templ_7745c5c3_Err
805					}
806					var templ_7745c5c3_Var43 string
807					templ_7745c5c3_Var43, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)
808					if templ_7745c5c3_Err != nil {
809						return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 120, Col: 74}
810					}
811					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var43))
812					if templ_7745c5c3_Err != nil {
813						return templ_7745c5c3_Err
814					}
815					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 80, "</time>")
816					if templ_7745c5c3_Err != nil {
817						return templ_7745c5c3_Err
818					}
819				}
820				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 81, "</li>")
821				if templ_7745c5c3_Err != nil {
822					return templ_7745c5c3_Err
823				}
824			}
825			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 82, "</ul>")
826			if templ_7745c5c3_Err != nil {
827				return templ_7745c5c3_Err
828			}
829		} else if r.NoCommits {
830			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 83, "<p class=\"repo-commits mute\">no commits yet</p>")
831			if templ_7745c5c3_Err != nil {
832				return templ_7745c5c3_Err
833			}
834		}
835		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 84, "</li>")
836		if templ_7745c5c3_Err != nil {
837			return templ_7745c5c3_Err
838		}
839		return nil
840	})
841}
842
843// pulse is the activity curve of a home row: a smooth line over a fading
844// area on a faint grid, and a dot at today, in colour while the repository
845// is active. Nothing moves: the page stays idle. The SVG scales evenly with
846// its column, so the dot stays round.
847func pulse(h *Heartbeat) templ.Component {
848	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
849		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
850		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
851			return templ_7745c5c3_CtxErr
852		}
853		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
854		if !templ_7745c5c3_IsBuffer {
855			defer func() {
856				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
857				if templ_7745c5c3_Err == nil {
858					templ_7745c5c3_Err = templ_7745c5c3_BufErr
859				}
860			}()
861		}
862		ctx = templ.InitializeContext(ctx)
863		templ_7745c5c3_Var44 := templ.GetChildren(ctx)
864		if templ_7745c5c3_Var44 == nil {
865			templ_7745c5c3_Var44 = templ.NopComponent
866		}
867		ctx = templ.ClearChildren(ctx)
868		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 85, "<figure class=\"repo-pulse\"")
869		if templ_7745c5c3_Err != nil {
870			return templ_7745c5c3_Err
871		}
872		if h.Live {
873			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 86, " data-live")
874			if templ_7745c5c3_Err != nil {
875				return templ_7745c5c3_Err
876			}
877		}
878		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 87, "><svg viewBox=\"0 0 600 64\" role=\"img\" aria-label=\"")
879		if templ_7745c5c3_Err != nil {
880			return templ_7745c5c3_Err
881		}
882		var templ_7745c5c3_Var45 string
883		templ_7745c5c3_Var45, templ_7745c5c3_Err = templ.ResolveAttributeValue(h.Label)
884		if templ_7745c5c3_Err != nil {
885			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 137, Col: 59}
886		}
887		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var45)
888		if templ_7745c5c3_Err != nil {
889			return templ_7745c5c3_Err
890		}
891		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 88, "\" focusable=\"false\"><defs><linearGradient id=\"")
892		if templ_7745c5c3_Err != nil {
893			return templ_7745c5c3_Err
894		}
895		var templ_7745c5c3_Var46 string
896		templ_7745c5c3_Var46, templ_7745c5c3_Err = templ.ResolveAttributeValue(h.GradID)
897		if templ_7745c5c3_Err != nil {
898			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 139, Col: 33}
899		}
900		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var46)
901		if templ_7745c5c3_Err != nil {
902			return templ_7745c5c3_Err
903		}
904		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 89, "\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\"><stop class=\"pulse-stop-top\" offset=\"0\"></stop> <stop class=\"pulse-stop-bottom\" offset=\"1\"></stop></linearGradient></defs> <path class=\"pulse-grid\" d=\"M0 21.5 H600 M0 42.5 H600 M0 63.5 H600\" vector-effect=\"non-scaling-stroke\"></path> <path class=\"pulse-area\" d=\"")
905		if templ_7745c5c3_Err != nil {
906			return templ_7745c5c3_Err
907		}
908		var templ_7745c5c3_Var47 string
909		templ_7745c5c3_Var47, templ_7745c5c3_Err = templ.ResolveAttributeValue(h.Area)
910		if templ_7745c5c3_Err != nil {
911			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 145, Col: 38}
912		}
913		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var47)
914		if templ_7745c5c3_Err != nil {
915			return templ_7745c5c3_Err
916		}
917		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 90, "\" fill=\"")
918		if templ_7745c5c3_Err != nil {
919			return templ_7745c5c3_Err
920		}
921		var templ_7745c5c3_Var48 string
922		templ_7745c5c3_Var48, templ_7745c5c3_Err = templ.ResolveAttributeValue("url(#" + h.GradID + ")")
923		if templ_7745c5c3_Err != nil {
924			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 145, Col: 72}
925		}
926		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var48)
927		if templ_7745c5c3_Err != nil {
928			return templ_7745c5c3_Err
929		}
930		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 91, "\"></path> <path class=\"pulse-line\" d=\"")
931		if templ_7745c5c3_Err != nil {
932			return templ_7745c5c3_Err
933		}
934		var templ_7745c5c3_Var49 string
935		templ_7745c5c3_Var49, templ_7745c5c3_Err = templ.ResolveAttributeValue(h.Line)
936		if templ_7745c5c3_Err != nil {
937			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 146, Col: 38}
938		}
939		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var49)
940		if templ_7745c5c3_Err != nil {
941			return templ_7745c5c3_Err
942		}
943		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 92, "\" vector-effect=\"non-scaling-stroke\"></path> <circle class=\"pulse-dot\" cx=\"")
944		if templ_7745c5c3_Err != nil {
945			return templ_7745c5c3_Err
946		}
947		var templ_7745c5c3_Var50 string
948		templ_7745c5c3_Var50, templ_7745c5c3_Err = templ.ResolveAttributeValue(h.X)
949		if templ_7745c5c3_Err != nil {
950			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 147, Col: 37}
951		}
952		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var50)
953		if templ_7745c5c3_Err != nil {
954			return templ_7745c5c3_Err
955		}
956		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 93, "\" cy=\"")
957		if templ_7745c5c3_Err != nil {
958			return templ_7745c5c3_Err
959		}
960		var templ_7745c5c3_Var51 string
961		templ_7745c5c3_Var51, templ_7745c5c3_Err = templ.ResolveAttributeValue(h.Y)
962		if templ_7745c5c3_Err != nil {
963			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 147, Col: 48}
964		}
965		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var51)
966		if templ_7745c5c3_Err != nil {
967			return templ_7745c5c3_Err
968		}
969		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 94, "\" r=\"3.5\"></circle></svg></figure>")
970		if templ_7745c5c3_Err != nil {
971			return templ_7745c5c3_Err
972		}
973		return nil
974	})
975}
976
977// Outline is the README outline; levels indent by 2ch, the h1 is bold.
978func Outline(headings []Heading) templ.Component {
979	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
980		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
981		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
982			return templ_7745c5c3_CtxErr
983		}
984		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
985		if !templ_7745c5c3_IsBuffer {
986			defer func() {
987				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
988				if templ_7745c5c3_Err == nil {
989					templ_7745c5c3_Err = templ_7745c5c3_BufErr
990				}
991			}()
992		}
993		ctx = templ.InitializeContext(ctx)
994		templ_7745c5c3_Var52 := templ.GetChildren(ctx)
995		if templ_7745c5c3_Var52 == nil {
996			templ_7745c5c3_Var52 = templ.NopComponent
997		}
998		ctx = templ.ClearChildren(ctx)
999		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 95, "<nav class=\"outline\" aria-label=\"Outline\">")
1000		if templ_7745c5c3_Err != nil {
1001			return templ_7745c5c3_Err
1002		}
1003		for _, h := range headings {
1004			var templ_7745c5c3_Var53 = []any{"l" + itoa(h.Level)}
1005			templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var53...)
1006			if templ_7745c5c3_Err != nil {
1007				return templ_7745c5c3_Err
1008			}
1009			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 96, "<a class=\"")
1010			if templ_7745c5c3_Err != nil {
1011				return templ_7745c5c3_Err
1012			}
1013			var templ_7745c5c3_Var54 string
1014			templ_7745c5c3_Var54, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var53).String())
1015			if templ_7745c5c3_Err != nil {
1016				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 1, Col: 0}
1017			}
1018			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var54)
1019			if templ_7745c5c3_Err != nil {
1020				return templ_7745c5c3_Err
1021			}
1022			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 97, "\" href=\"")
1023			if templ_7745c5c3_Err != nil {
1024				return templ_7745c5c3_Err
1025			}
1026			var templ_7745c5c3_Var55 templ.SafeURL
1027			templ_7745c5c3_Var55, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL("#" + h.ID))
1028			if templ_7745c5c3_Err != nil {
1029				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 156, Col: 68}
1030			}
1031			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var55))
1032			if templ_7745c5c3_Err != nil {
1033				return templ_7745c5c3_Err
1034			}
1035			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 98, "\">")
1036			if templ_7745c5c3_Err != nil {
1037				return templ_7745c5c3_Err
1038			}
1039			var templ_7745c5c3_Var56 string
1040			templ_7745c5c3_Var56, templ_7745c5c3_Err = templ.JoinStringErrs(h.Text)
1041			if templ_7745c5c3_Err != nil {
1042				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 156, Col: 79}
1043			}
1044			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var56))
1045			if templ_7745c5c3_Err != nil {
1046				return templ_7745c5c3_Err
1047			}
1048			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 99, "</a>")
1049			if templ_7745c5c3_Err != nil {
1050				return templ_7745c5c3_Err
1051			}
1052		}
1053		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 100, "</nav>")
1054		if templ_7745c5c3_Err != nil {
1055			return templ_7745c5c3_Err
1056		}
1057		return nil
1058	})
1059}
1060
1061// ReadmeCard is a README in a card whose header names the file.
1062func ReadmeCard(r Readme, docs ...DocTab) templ.Component {
1063	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1064		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1065		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
1066			return templ_7745c5c3_CtxErr
1067		}
1068		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1069		if !templ_7745c5c3_IsBuffer {
1070			defer func() {
1071				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1072				if templ_7745c5c3_Err == nil {
1073					templ_7745c5c3_Err = templ_7745c5c3_BufErr
1074				}
1075			}()
1076		}
1077		ctx = templ.InitializeContext(ctx)
1078		templ_7745c5c3_Var57 := templ.GetChildren(ctx)
1079		if templ_7745c5c3_Var57 == nil {
1080			templ_7745c5c3_Var57 = templ.NopComponent
1081		}
1082		ctx = templ.ClearChildren(ctx)
1083		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 101, "<section class=\"card readme\" aria-label=\"")
1084		if templ_7745c5c3_Err != nil {
1085			return templ_7745c5c3_Err
1086		}
1087		var templ_7745c5c3_Var58 string
1088		templ_7745c5c3_Var58, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.Name)
1089		if templ_7745c5c3_Err != nil {
1090			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 163, Col: 49}
1091		}
1092		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var58)
1093		if templ_7745c5c3_Err != nil {
1094			return templ_7745c5c3_Err
1095		}
1096		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 102, "\">")
1097		if templ_7745c5c3_Err != nil {
1098			return templ_7745c5c3_Err
1099		}
1100		if len(docs) > 1 {
1101			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 103, "<nav class=\"card-h doc-tabs\" aria-label=\"Repository documents\">")
1102			if templ_7745c5c3_Err != nil {
1103				return templ_7745c5c3_Err
1104			}
1105			for _, doc := range docs {
1106				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 104, "<a href=\"")
1107				if templ_7745c5c3_Err != nil {
1108					return templ_7745c5c3_Err
1109				}
1110				var templ_7745c5c3_Var59 templ.SafeURL
1111				templ_7745c5c3_Var59, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(doc.Href))
1112				if templ_7745c5c3_Err != nil {
1113					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 167, Col: 38}
1114				}
1115				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var59))
1116				if templ_7745c5c3_Err != nil {
1117					return templ_7745c5c3_Err
1118				}
1119				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 105, "\"")
1120				if templ_7745c5c3_Err != nil {
1121					return templ_7745c5c3_Err
1122				}
1123				if doc.Current {
1124					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 106, " aria-current=\"page\"")
1125					if templ_7745c5c3_Err != nil {
1126						return templ_7745c5c3_Err
1127					}
1128				}
1129				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 107, ">")
1130				if templ_7745c5c3_Err != nil {
1131					return templ_7745c5c3_Err
1132				}
1133				var templ_7745c5c3_Var60 string
1134				templ_7745c5c3_Var60, templ_7745c5c3_Err = templ.JoinStringErrs(doc.Name)
1135				if templ_7745c5c3_Err != nil {
1136					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 171, Col: 16}
1137				}
1138				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var60))
1139				if templ_7745c5c3_Err != nil {
1140					return templ_7745c5c3_Err
1141				}
1142				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 108, "</a>")
1143				if templ_7745c5c3_Err != nil {
1144					return templ_7745c5c3_Err
1145				}
1146			}
1147			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 109, "</nav>")
1148			if templ_7745c5c3_Err != nil {
1149				return templ_7745c5c3_Err
1150			}
1151		} else {
1152			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 110, "<h2 class=\"card-h\" id=\"readme-h\"><span class=\"ico i-file\" aria-hidden=\"true\"></span> ")
1153			if templ_7745c5c3_Err != nil {
1154				return templ_7745c5c3_Err
1155			}
1156			var templ_7745c5c3_Var61 string
1157			templ_7745c5c3_Var61, templ_7745c5c3_Err = templ.JoinStringErrs(r.Name)
1158			if templ_7745c5c3_Err != nil {
1159				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 177, Col: 12}
1160			}
1161			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var61))
1162			if templ_7745c5c3_Err != nil {
1163				return templ_7745c5c3_Err
1164			}
1165			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 111, "</h2>")
1166			if templ_7745c5c3_Err != nil {
1167				return templ_7745c5c3_Err
1168			}
1169		}
1170		templ_7745c5c3_Err = ReadmeView(r).Render(ctx, templ_7745c5c3_Buffer)
1171		if templ_7745c5c3_Err != nil {
1172			return templ_7745c5c3_Err
1173		}
1174		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 112, "</section>")
1175		if templ_7745c5c3_Err != nil {
1176			return templ_7745c5c3_Err
1177		}
1178		return nil
1179	})
1180}
1181
1182// ReadmeView is a rendered README. Its HTML comes from the Markdown
1183// renderer, which drops raw HTML and filters URLs.
1184func ReadmeView(r Readme) templ.Component {
1185	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1186		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1187		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
1188			return templ_7745c5c3_CtxErr
1189		}
1190		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1191		if !templ_7745c5c3_IsBuffer {
1192			defer func() {
1193				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1194				if templ_7745c5c3_Err == nil {
1195					templ_7745c5c3_Err = templ_7745c5c3_BufErr
1196				}
1197			}()
1198		}
1199		ctx = templ.InitializeContext(ctx)
1200		templ_7745c5c3_Var62 := templ.GetChildren(ctx)
1201		if templ_7745c5c3_Var62 == nil {
1202			templ_7745c5c3_Var62 = templ.NopComponent
1203		}
1204		ctx = templ.ClearChildren(ctx)
1205		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 113, "<article class=\"prose\" aria-label=\"")
1206		if templ_7745c5c3_Err != nil {
1207			return templ_7745c5c3_Err
1208		}
1209		var templ_7745c5c3_Var63 string
1210		templ_7745c5c3_Var63, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.Name)
1211		if templ_7745c5c3_Err != nil {
1212			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 187, Col: 43}
1213		}
1214		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var63)
1215		if templ_7745c5c3_Err != nil {
1216			return templ_7745c5c3_Err
1217		}
1218		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 114, "\" hx-ignore>")
1219		if templ_7745c5c3_Err != nil {
1220			return templ_7745c5c3_Err
1221		}
1222		if r.Note != "" {
1223			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 115, "<p class=\"dim\">")
1224			if templ_7745c5c3_Err != nil {
1225				return templ_7745c5c3_Err
1226			}
1227			var templ_7745c5c3_Var64 string
1228			templ_7745c5c3_Var64, templ_7745c5c3_Err = templ.JoinStringErrs(r.Note)
1229			if templ_7745c5c3_Err != nil {
1230				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 189, Col: 26}
1231			}
1232			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var64))
1233			if templ_7745c5c3_Err != nil {
1234				return templ_7745c5c3_Err
1235			}
1236			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 116, "</p>")
1237			if templ_7745c5c3_Err != nil {
1238				return templ_7745c5c3_Err
1239			}
1240		} else {
1241			templ_7745c5c3_Err = templ.Raw(r.HTML).Render(ctx, templ_7745c5c3_Buffer)
1242			if templ_7745c5c3_Err != nil {
1243				return templ_7745c5c3_Err
1244			}
1245		}
1246		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 117, "</article>")
1247		if templ_7745c5c3_Err != nil {
1248			return templ_7745c5c3_Err
1249		}
1250		return nil
1251	})
1252}
1253
1254// CommitRows is a cursor table of commits: sha, subject with inline refs,
1255// author, relative date (absolute in the title).
1256func CommitRows(rows []CommitRow) templ.Component {
1257	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1258		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1259		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
1260			return templ_7745c5c3_CtxErr
1261		}
1262		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1263		if !templ_7745c5c3_IsBuffer {
1264			defer func() {
1265				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1266				if templ_7745c5c3_Err == nil {
1267					templ_7745c5c3_Err = templ_7745c5c3_BufErr
1268				}
1269			}()
1270		}
1271		ctx = templ.InitializeContext(ctx)
1272		templ_7745c5c3_Var65 := templ.GetChildren(ctx)
1273		if templ_7745c5c3_Var65 == nil {
1274			templ_7745c5c3_Var65 = templ.NopComponent
1275		}
1276		ctx = templ.ClearChildren(ctx)
1277		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 118, "<table class=\"list commits\" aria-label=\"Commits\"><tbody data-rows>")
1278		if templ_7745c5c3_Err != nil {
1279			return templ_7745c5c3_Err
1280		}
1281		for _, c := range rows {
1282			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 119, "<tr")
1283			if templ_7745c5c3_Err != nil {
1284				return templ_7745c5c3_Err
1285			}
1286			if c.ID != "" {
1287				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 120, " id=\"")
1288				if templ_7745c5c3_Err != nil {
1289					return templ_7745c5c3_Err
1290				}
1291				var templ_7745c5c3_Var66 string
1292				templ_7745c5c3_Var66, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.ID)
1293				if templ_7745c5c3_Err != nil {
1294					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 204, Col: 15}
1295				}
1296				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var66)
1297				if templ_7745c5c3_Err != nil {
1298					return templ_7745c5c3_Err
1299				}
1300				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 121, "\"")
1301				if templ_7745c5c3_Err != nil {
1302					return templ_7745c5c3_Err
1303				}
1304			}
1305			if c.Cursor {
1306				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 122, " data-cursor")
1307				if templ_7745c5c3_Err != nil {
1308					return templ_7745c5c3_Err
1309				}
1310			}
1311			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 123, "><td class=\"c-sha mute\">")
1312			if templ_7745c5c3_Err != nil {
1313				return templ_7745c5c3_Err
1314			}
1315			var templ_7745c5c3_Var67 string
1316			templ_7745c5c3_Var67, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)
1317			if templ_7745c5c3_Err != nil {
1318				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 208, Col: 37}
1319			}
1320			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var67))
1321			if templ_7745c5c3_Err != nil {
1322				return templ_7745c5c3_Err
1323			}
1324			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 124, "</td><td class=\"c-subject\"><a href=\"")
1325			if templ_7745c5c3_Err != nil {
1326				return templ_7745c5c3_Err
1327			}
1328			var templ_7745c5c3_Var68 templ.SafeURL
1329			templ_7745c5c3_Var68, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.CHref))
1330			if templ_7745c5c3_Err != nil {
1331				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 210, Col: 38}
1332			}
1333			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var68))
1334			if templ_7745c5c3_Err != nil {
1335				return templ_7745c5c3_Err
1336			}
1337			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 125, "\">")
1338			if templ_7745c5c3_Err != nil {
1339				return templ_7745c5c3_Err
1340			}
1341			var templ_7745c5c3_Var69 string
1342			templ_7745c5c3_Var69, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)
1343			if templ_7745c5c3_Err != nil {
1344				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 210, Col: 52}
1345			}
1346			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var69))
1347			if templ_7745c5c3_Err != nil {
1348				return templ_7745c5c3_Err
1349			}
1350			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 126, "</a> ")
1351			if templ_7745c5c3_Err != nil {
1352				return templ_7745c5c3_Err
1353			}
1354			if c.Merge {
1355				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 127, "<span class=\"pill\">merge</span> ")
1356				if templ_7745c5c3_Err != nil {
1357					return templ_7745c5c3_Err
1358				}
1359			}
1360			if c.Sig != nil {
1361				templ_7745c5c3_Err = signaturePill(c.Sig).Render(ctx, templ_7745c5c3_Buffer)
1362				if templ_7745c5c3_Err != nil {
1363					return templ_7745c5c3_Err
1364				}
1365			}
1366			for _, b := range c.Branches {
1367				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 128, "<span class=\"pill\">")
1368				if templ_7745c5c3_Err != nil {
1369					return templ_7745c5c3_Err
1370				}
1371				var templ_7745c5c3_Var70 string
1372				templ_7745c5c3_Var70, templ_7745c5c3_Err = templ.JoinStringErrs(b)
1373				if templ_7745c5c3_Err != nil {
1374					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 218, Col: 29}
1375				}
1376				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var70))
1377				if templ_7745c5c3_Err != nil {
1378					return templ_7745c5c3_Err
1379				}
1380				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 129, "</span> ")
1381				if templ_7745c5c3_Err != nil {
1382					return templ_7745c5c3_Err
1383				}
1384			}
1385			for _, t := range c.Tags {
1386				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 130, "<span class=\"pill tag\"><span class=\"sr\">tag </span>")
1387				if templ_7745c5c3_Err != nil {
1388					return templ_7745c5c3_Err
1389				}
1390				var templ_7745c5c3_Var71 string
1391				templ_7745c5c3_Var71, templ_7745c5c3_Err = templ.JoinStringErrs(t)
1392				if templ_7745c5c3_Err != nil {
1393					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 221, Col: 61}
1394				}
1395				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var71))
1396				if templ_7745c5c3_Err != nil {
1397					return templ_7745c5c3_Err
1398				}
1399				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 131, "</span>")
1400				if templ_7745c5c3_Err != nil {
1401					return templ_7745c5c3_Err
1402				}
1403			}
1404			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 132, "</td><td class=\"c-ck\">")
1405			if templ_7745c5c3_Err != nil {
1406				return templ_7745c5c3_Err
1407			}
1408			templ_7745c5c3_Err = CommitChecks(c.Checks).Render(ctx, templ_7745c5c3_Buffer)
1409			if templ_7745c5c3_Err != nil {
1410				return templ_7745c5c3_Err
1411			}
1412			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 133, "</td><td class=\"c-who dim\">")
1413			if templ_7745c5c3_Err != nil {
1414				return templ_7745c5c3_Err
1415			}
1416			var templ_7745c5c3_Var72 string
1417			templ_7745c5c3_Var72, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)
1418			if templ_7745c5c3_Err != nil {
1419				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 225, Col: 37}
1420			}
1421			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var72))
1422			if templ_7745c5c3_Err != nil {
1423				return templ_7745c5c3_Err
1424			}
1425			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 134, "</td><td class=\"c-when nowrap dim\"><time datetime=\"")
1426			if templ_7745c5c3_Err != nil {
1427				return templ_7745c5c3_Err
1428			}
1429			var templ_7745c5c3_Var73 string
1430			templ_7745c5c3_Var73, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
1431			if templ_7745c5c3_Err != nil {
1432				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 226, Col: 60}
1433			}
1434			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var73)
1435			if templ_7745c5c3_Err != nil {
1436				return templ_7745c5c3_Err
1437			}
1438			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 135, "\" title=\"")
1439			if templ_7745c5c3_Err != nil {
1440				return templ_7745c5c3_Err
1441			}
1442			var templ_7745c5c3_Var74 string
1443			templ_7745c5c3_Var74, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
1444			if templ_7745c5c3_Err != nil {
1445				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 226, Col: 79}
1446			}
1447			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var74)
1448			if templ_7745c5c3_Err != nil {
1449				return templ_7745c5c3_Err
1450			}
1451			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 136, "\">")
1452			if templ_7745c5c3_Err != nil {
1453				return templ_7745c5c3_Err
1454			}
1455			var templ_7745c5c3_Var75 string
1456			templ_7745c5c3_Var75, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)
1457			if templ_7745c5c3_Err != nil {
1458				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 226, Col: 90}
1459			}
1460			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var75))
1461			if templ_7745c5c3_Err != nil {
1462				return templ_7745c5c3_Err
1463			}
1464			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 137, "</time></td></tr>")
1465			if templ_7745c5c3_Err != nil {
1466				return templ_7745c5c3_Err
1467			}
1468		}
1469		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 138, "</tbody></table>")
1470		if templ_7745c5c3_Err != nil {
1471			return templ_7745c5c3_Err
1472		}
1473		return nil
1474	})
1475}
1476
1477// signaturePill is the badge of a signed commit: the protocol and the verdict
1478// as text, the reason in the tooltip.
1479func signaturePill(b *SignatureBadge) templ.Component {
1480	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1481		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1482		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
1483			return templ_7745c5c3_CtxErr
1484		}
1485		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1486		if !templ_7745c5c3_IsBuffer {
1487			defer func() {
1488				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1489				if templ_7745c5c3_Err == nil {
1490					templ_7745c5c3_Err = templ_7745c5c3_BufErr
1491				}
1492			}()
1493		}
1494		ctx = templ.InitializeContext(ctx)
1495		templ_7745c5c3_Var76 := templ.GetChildren(ctx)
1496		if templ_7745c5c3_Var76 == nil {
1497			templ_7745c5c3_Var76 = templ.NopComponent
1498		}
1499		ctx = templ.ClearChildren(ctx)
1500		var templ_7745c5c3_Var77 = []any{"pill sig", b.Class}
1501		templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var77...)
1502		if templ_7745c5c3_Err != nil {
1503			return templ_7745c5c3_Err
1504		}
1505		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 139, "<span class=\"")
1506		if templ_7745c5c3_Err != nil {
1507			return templ_7745c5c3_Err
1508		}
1509		var templ_7745c5c3_Var78 string
1510		templ_7745c5c3_Var78, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var77).String())
1511		if templ_7745c5c3_Err != nil {
1512			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 1, Col: 0}
1513		}
1514		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var78)
1515		if templ_7745c5c3_Err != nil {
1516			return templ_7745c5c3_Err
1517		}
1518		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 140, "\" title=\"")
1519		if templ_7745c5c3_Err != nil {
1520			return templ_7745c5c3_Err
1521		}
1522		var templ_7745c5c3_Var79 string
1523		templ_7745c5c3_Var79, templ_7745c5c3_Err = templ.ResolveAttributeValue(b.Title)
1524		if templ_7745c5c3_Err != nil {
1525			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 236, Col: 52}
1526		}
1527		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var79)
1528		if templ_7745c5c3_Err != nil {
1529			return templ_7745c5c3_Err
1530		}
1531		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 141, "\">")
1532		if templ_7745c5c3_Err != nil {
1533			return templ_7745c5c3_Err
1534		}
1535		if b.Proto != "" {
1536			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 142, "<span class=\"sig-proto\">")
1537			if templ_7745c5c3_Err != nil {
1538				return templ_7745c5c3_Err
1539			}
1540			var templ_7745c5c3_Var80 string
1541			templ_7745c5c3_Var80, templ_7745c5c3_Err = templ.JoinStringErrs(b.Proto)
1542			if templ_7745c5c3_Err != nil {
1543				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 238, Col: 36}
1544			}
1545			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var80))
1546			if templ_7745c5c3_Err != nil {
1547				return templ_7745c5c3_Err
1548			}
1549			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 143, "</span> ")
1550			if templ_7745c5c3_Err != nil {
1551				return templ_7745c5c3_Err
1552			}
1553		}
1554		var templ_7745c5c3_Var81 string
1555		templ_7745c5c3_Var81, templ_7745c5c3_Err = templ.JoinStringErrs(b.Label)
1556		if templ_7745c5c3_Err != nil {
1557			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 240, Col: 11}
1558		}
1559		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var81))
1560		if templ_7745c5c3_Err != nil {
1561			return templ_7745c5c3_Err
1562		}
1563		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 144, "</span>")
1564		if templ_7745c5c3_Err != nil {
1565			return templ_7745c5c3_Err
1566		}
1567		return nil
1568	})
1569}
1570
1571var _ = templruntime.GeneratedTemplate

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 4

Tags 45

↑↓ moveenter openesc close