v0.23.0 333c710

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: what it is, its
151// latest run, and its newest commits. Its id is the target of SSE swaps; the
152// name link comes first, `enter` follows it.
153func HomeRowView(r HomeRow) templ.Component {
154	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
155		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
156		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
157			return templ_7745c5c3_CtxErr
158		}
159		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
160		if !templ_7745c5c3_IsBuffer {
161			defer func() {
162				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
163				if templ_7745c5c3_Err == nil {
164					templ_7745c5c3_Err = templ_7745c5c3_BufErr
165				}
166			}()
167		}
168		ctx = templ.InitializeContext(ctx)
169		templ_7745c5c3_Var7 := templ.GetChildren(ctx)
170		if templ_7745c5c3_Var7 == nil {
171			templ_7745c5c3_Var7 = templ.NopComponent
172		}
173		ctx = templ.ClearChildren(ctx)
174		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, "<li id=\"")
175		if templ_7745c5c3_Err != nil {
176			return templ_7745c5c3_Err
177		}
178		var templ_7745c5c3_Var8 string
179		templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.ID)
180		if templ_7745c5c3_Err != nil {
181			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 39, Col: 14}
182		}
183		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var8)
184		if templ_7745c5c3_Err != nil {
185			return templ_7745c5c3_Err
186		}
187		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, "\" class=\"repo\"")
188		if templ_7745c5c3_Err != nil {
189			return templ_7745c5c3_Err
190		}
191		if r.Cursor {
192			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, " data-cursor")
193			if templ_7745c5c3_Err != nil {
194				return templ_7745c5c3_Err
195			}
196		}
197		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, "><div class=\"repo-main\"><h2 class=\"repo-name\"><a href=\"")
198		if templ_7745c5c3_Err != nil {
199			return templ_7745c5c3_Err
200		}
201		var templ_7745c5c3_Var9 templ.SafeURL
202		templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(r.Href))
203		if templ_7745c5c3_Err != nil {
204			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 42, Col: 35}
205		}
206		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var9))
207		if templ_7745c5c3_Err != nil {
208			return templ_7745c5c3_Err
209		}
210		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, "\">")
211		if templ_7745c5c3_Err != nil {
212			return templ_7745c5c3_Err
213		}
214		var templ_7745c5c3_Var10 string
215		templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.JoinStringErrs(r.Name)
216		if templ_7745c5c3_Err != nil {
217			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 42, Col: 46}
218		}
219		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var10))
220		if templ_7745c5c3_Err != nil {
221			return templ_7745c5c3_Err
222		}
223		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "</a> ")
224		if templ_7745c5c3_Err != nil {
225			return templ_7745c5c3_Err
226		}
227		if r.Private {
228			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 17, "<span class=\"pill\">private</span> ")
229			if templ_7745c5c3_Err != nil {
230				return templ_7745c5c3_Err
231			}
232		}
233		if r.Fresh {
234			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 18, "<span class=\"pill new\">new push</span>")
235			if templ_7745c5c3_Err != nil {
236				return templ_7745c5c3_Err
237			}
238		}
239		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, "</h2>")
240		if templ_7745c5c3_Err != nil {
241			return templ_7745c5c3_Err
242		}
243		if r.Desc != "" {
244			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "<p class=\"repo-desc\">")
245			if templ_7745c5c3_Err != nil {
246				return templ_7745c5c3_Err
247			}
248			var templ_7745c5c3_Var11 string
249			templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(r.Desc)
250			if templ_7745c5c3_Err != nil {
251				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 51, Col: 33}
252			}
253			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11))
254			if templ_7745c5c3_Err != nil {
255				return templ_7745c5c3_Err
256			}
257			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "</p>")
258			if templ_7745c5c3_Err != nil {
259				return templ_7745c5c3_Err
260			}
261		} else {
262			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "<p class=\"repo-desc mute\">no description</p>")
263			if templ_7745c5c3_Err != nil {
264				return templ_7745c5c3_Err
265			}
266		}
267		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 23, "<dl class=\"repo-stats\" aria-label=\"")
268		if templ_7745c5c3_Err != nil {
269			return templ_7745c5c3_Err
270		}
271		var templ_7745c5c3_Var12 string
272		templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.ResolveAttributeValue("Figures of " + r.Name)
273		if templ_7745c5c3_Err != nil {
274			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 55, Col: 61}
275		}
276		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var12)
277		if templ_7745c5c3_Err != nil {
278			return templ_7745c5c3_Err
279		}
280		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, "\">")
281		if templ_7745c5c3_Err != nil {
282			return templ_7745c5c3_Err
283		}
284		if s := r.Stats; s != nil {
285			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 25, "<div><dt>commits</dt><dd>")
286			if templ_7745c5c3_Err != nil {
287				return templ_7745c5c3_Err
288			}
289			var templ_7745c5c3_Var13 string
290			templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.JoinStringErrs(s.Commits)
291			if templ_7745c5c3_Err != nil {
292				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 57, Col: 41}
293			}
294			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var13))
295			if templ_7745c5c3_Err != nil {
296				return templ_7745c5c3_Err
297			}
298			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 26, "</dd></div><div><dt>last 30 days</dt><dd>")
299			if templ_7745c5c3_Err != nil {
300				return templ_7745c5c3_Err
301			}
302			var templ_7745c5c3_Var14 string
303			templ_7745c5c3_Var14, templ_7745c5c3_Err = templ.JoinStringErrs(s.Recent)
304			if templ_7745c5c3_Err != nil {
305				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 58, Col: 45}
306			}
307			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var14))
308			if templ_7745c5c3_Err != nil {
309				return templ_7745c5c3_Err
310			}
311			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 27, "</dd></div>")
312			if templ_7745c5c3_Err != nil {
313				return templ_7745c5c3_Err
314			}
315			if s.Tag != "" {
316				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 28, "<div><dt>latest tag</dt>")
317				if templ_7745c5c3_Err != nil {
318					return templ_7745c5c3_Err
319				}
320				if s.TagHref != "" {
321					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 29, "<dd><a href=\"")
322					if templ_7745c5c3_Err != nil {
323						return templ_7745c5c3_Err
324					}
325					var templ_7745c5c3_Var15 templ.SafeURL
326					templ_7745c5c3_Var15, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(s.TagHref))
327					if templ_7745c5c3_Err != nil {
328						return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 63, Col: 46}
329					}
330					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var15))
331					if templ_7745c5c3_Err != nil {
332						return templ_7745c5c3_Err
333					}
334					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 30, "\" title=\"")
335					if templ_7745c5c3_Err != nil {
336						return templ_7745c5c3_Err
337					}
338					var templ_7745c5c3_Var16 string
339					templ_7745c5c3_Var16, templ_7745c5c3_Err = templ.ResolveAttributeValue("made " + s.TagWhen)
340					if templ_7745c5c3_Err != nil {
341						return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 63, Col: 76}
342					}
343					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var16)
344					if templ_7745c5c3_Err != nil {
345						return templ_7745c5c3_Err
346					}
347					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 31, "\">")
348					if templ_7745c5c3_Err != nil {
349						return templ_7745c5c3_Err
350					}
351					var templ_7745c5c3_Var17 string
352					templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.JoinStringErrs(s.Tag)
353					if templ_7745c5c3_Err != nil {
354						return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 63, Col: 86}
355					}
356					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var17))
357					if templ_7745c5c3_Err != nil {
358						return templ_7745c5c3_Err
359					}
360					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 32, "</a></dd>")
361					if templ_7745c5c3_Err != nil {
362						return templ_7745c5c3_Err
363					}
364				} else {
365					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, "<dd title=\"")
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("made " + s.TagWhen)
371					if templ_7745c5c3_Err != nil {
372						return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 65, Col: 39}
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, 34, "\">")
379					if templ_7745c5c3_Err != nil {
380						return templ_7745c5c3_Err
381					}
382					var templ_7745c5c3_Var19 string
383					templ_7745c5c3_Var19, templ_7745c5c3_Err = templ.JoinStringErrs(s.Tag)
384					if templ_7745c5c3_Err != nil {
385						return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 65, Col: 49}
386					}
387					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var19))
388					if templ_7745c5c3_Err != nil {
389						return templ_7745c5c3_Err
390					}
391					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 35, "</dd>")
392					if templ_7745c5c3_Err != nil {
393						return templ_7745c5c3_Err
394					}
395				}
396				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, "</div>")
397				if templ_7745c5c3_Err != nil {
398					return templ_7745c5c3_Err
399				}
400			}
401		}
402		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 37, "<div><dt>last activity</dt>")
403		if templ_7745c5c3_Err != nil {
404			return templ_7745c5c3_Err
405		}
406		if r.ActiveAt != "" {
407			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, "<dd><time datetime=\"")
408			if templ_7745c5c3_Err != nil {
409				return templ_7745c5c3_Err
410			}
411			var templ_7745c5c3_Var20 string
412			templ_7745c5c3_Var20, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.ActiveAt)
413			if templ_7745c5c3_Err != nil {
414				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 73, Col: 37}
415			}
416			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var20)
417			if templ_7745c5c3_Err != nil {
418				return templ_7745c5c3_Err
419			}
420			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, "\" title=\"")
421			if templ_7745c5c3_Err != nil {
422				return templ_7745c5c3_Err
423			}
424			var templ_7745c5c3_Var21 string
425			templ_7745c5c3_Var21, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.ActiveAt)
426			if templ_7745c5c3_Err != nil {
427				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 73, Col: 58}
428			}
429			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var21)
430			if templ_7745c5c3_Err != nil {
431				return templ_7745c5c3_Err
432			}
433			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, "\">")
434			if templ_7745c5c3_Err != nil {
435				return templ_7745c5c3_Err
436			}
437			var templ_7745c5c3_Var22 string
438			templ_7745c5c3_Var22, templ_7745c5c3_Err = templ.JoinStringErrs(r.Active)
439			if templ_7745c5c3_Err != nil {
440				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 73, Col: 71}
441			}
442			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var22))
443			if templ_7745c5c3_Err != nil {
444				return templ_7745c5c3_Err
445			}
446			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, "</time></dd>")
447			if templ_7745c5c3_Err != nil {
448				return templ_7745c5c3_Err
449			}
450		} else {
451			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "<dd class=\"mute\">never</dd>")
452			if templ_7745c5c3_Err != nil {
453				return templ_7745c5c3_Err
454			}
455		}
456		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "</div></dl></div>")
457		if templ_7745c5c3_Err != nil {
458			return templ_7745c5c3_Err
459		}
460		if r.CI != nil {
461			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, "<a class=\"repo-ci\" href=\"")
462			if templ_7745c5c3_Err != nil {
463				return templ_7745c5c3_Err
464			}
465			var templ_7745c5c3_Var23 templ.SafeURL
466			templ_7745c5c3_Var23, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(r.CI.Href))
467			if templ_7745c5c3_Err != nil {
468				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 81, Col: 53}
469			}
470			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var23))
471			if templ_7745c5c3_Err != nil {
472				return templ_7745c5c3_Err
473			}
474			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "\" title=\"")
475			if templ_7745c5c3_Err != nil {
476				return templ_7745c5c3_Err
477			}
478			var templ_7745c5c3_Var24 string
479			templ_7745c5c3_Var24, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.CI.Title)
480			if templ_7745c5c3_Err != nil {
481				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 81, Col: 74}
482			}
483			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var24)
484			if templ_7745c5c3_Err != nil {
485				return templ_7745c5c3_Err
486			}
487			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 46, "\">")
488			if templ_7745c5c3_Err != nil {
489				return templ_7745c5c3_Err
490			}
491			var templ_7745c5c3_Var25 = []any{"ck", "ck-" + r.CI.Kind}
492			templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var25...)
493			if templ_7745c5c3_Err != nil {
494				return templ_7745c5c3_Err
495			}
496			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 47, "<span class=\"")
497			if templ_7745c5c3_Err != nil {
498				return templ_7745c5c3_Err
499			}
500			var templ_7745c5c3_Var26 string
501			templ_7745c5c3_Var26, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var25).String())
502			if templ_7745c5c3_Err != nil {
503				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 1, Col: 0}
504			}
505			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var26)
506			if templ_7745c5c3_Err != nil {
507				return templ_7745c5c3_Err
508			}
509			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, "\" aria-hidden=\"true\"></span> <span class=\"sr\">CI: </span>")
510			if templ_7745c5c3_Err != nil {
511				return templ_7745c5c3_Err
512			}
513			var templ_7745c5c3_Var27 string
514			templ_7745c5c3_Var27, templ_7745c5c3_Err = templ.JoinStringErrs(r.CI.Label)
515			if templ_7745c5c3_Err != nil {
516				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 83, Col: 44}
517			}
518			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var27))
519			if templ_7745c5c3_Err != nil {
520				return templ_7745c5c3_Err
521			}
522			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 49, "</a> ")
523			if templ_7745c5c3_Err != nil {
524				return templ_7745c5c3_Err
525			}
526		}
527		if len(r.Commits) > 0 {
528			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 50, "<ul class=\"repo-commits\" aria-label=\"")
529			if templ_7745c5c3_Err != nil {
530				return templ_7745c5c3_Err
531			}
532			var templ_7745c5c3_Var28 string
533			templ_7745c5c3_Var28, templ_7745c5c3_Err = templ.ResolveAttributeValue("Recent commits of " + r.Name)
534			if templ_7745c5c3_Err != nil {
535				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 87, Col: 70}
536			}
537			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var28)
538			if templ_7745c5c3_Err != nil {
539				return templ_7745c5c3_Err
540			}
541			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 51, "\">")
542			if templ_7745c5c3_Err != nil {
543				return templ_7745c5c3_Err
544			}
545			for _, c := range r.Commits {
546				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 52, "<li><a class=\"rc-sha\" href=\"")
547				if templ_7745c5c3_Err != nil {
548					return templ_7745c5c3_Err
549				}
550				var templ_7745c5c3_Var29 templ.SafeURL
551				templ_7745c5c3_Var29, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.CHref))
552				if templ_7745c5c3_Err != nil {
553					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 90, Col: 53}
554				}
555				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var29))
556				if templ_7745c5c3_Err != nil {
557					return templ_7745c5c3_Err
558				}
559				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 53, "\">")
560				if templ_7745c5c3_Err != nil {
561					return templ_7745c5c3_Err
562				}
563				var templ_7745c5c3_Var30 string
564				templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)
565				if templ_7745c5c3_Err != nil {
566					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 90, Col: 65}
567				}
568				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var30))
569				if templ_7745c5c3_Err != nil {
570					return templ_7745c5c3_Err
571				}
572				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 54, "</a> <span class=\"rc-subject\" title=\"")
573				if templ_7745c5c3_Err != nil {
574					return templ_7745c5c3_Err
575				}
576				var templ_7745c5c3_Var31 string
577				templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.Subject)
578				if templ_7745c5c3_Err != nil {
579					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 91, Col: 48}
580				}
581				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var31)
582				if templ_7745c5c3_Err != nil {
583					return templ_7745c5c3_Err
584				}
585				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, "\">")
586				if templ_7745c5c3_Err != nil {
587					return templ_7745c5c3_Err
588				}
589				var templ_7745c5c3_Var32 string
590				templ_7745c5c3_Var32, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)
591				if templ_7745c5c3_Err != nil {
592					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 91, Col: 62}
593				}
594				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var32))
595				if templ_7745c5c3_Err != nil {
596					return templ_7745c5c3_Err
597				}
598				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 56, "</span> ")
599				if templ_7745c5c3_Err != nil {
600					return templ_7745c5c3_Err
601				}
602				if c.WhenAt != "" {
603					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "<time class=\"dim\" datetime=\"")
604					if templ_7745c5c3_Err != nil {
605						return templ_7745c5c3_Err
606					}
607					var templ_7745c5c3_Var33 string
608					templ_7745c5c3_Var33, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
609					if templ_7745c5c3_Err != nil {
610						return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 93, Col: 44}
611					}
612					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var33)
613					if templ_7745c5c3_Err != nil {
614						return templ_7745c5c3_Err
615					}
616					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "\" title=\"")
617					if templ_7745c5c3_Err != nil {
618						return templ_7745c5c3_Err
619					}
620					var templ_7745c5c3_Var34 string
621					templ_7745c5c3_Var34, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
622					if templ_7745c5c3_Err != nil {
623						return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 93, Col: 63}
624					}
625					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var34)
626					if templ_7745c5c3_Err != nil {
627						return templ_7745c5c3_Err
628					}
629					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, "\">")
630					if templ_7745c5c3_Err != nil {
631						return templ_7745c5c3_Err
632					}
633					var templ_7745c5c3_Var35 string
634					templ_7745c5c3_Var35, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)
635					if templ_7745c5c3_Err != nil {
636						return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 93, Col: 74}
637					}
638					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var35))
639					if templ_7745c5c3_Err != nil {
640						return templ_7745c5c3_Err
641					}
642					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 60, "</time>")
643					if templ_7745c5c3_Err != nil {
644						return templ_7745c5c3_Err
645					}
646				}
647				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "</li>")
648				if templ_7745c5c3_Err != nil {
649					return templ_7745c5c3_Err
650				}
651			}
652			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, "</ul>")
653			if templ_7745c5c3_Err != nil {
654				return templ_7745c5c3_Err
655			}
656		} else if r.NoCommits {
657			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 63, "<p class=\"repo-commits mute\">no commits yet</p>")
658			if templ_7745c5c3_Err != nil {
659				return templ_7745c5c3_Err
660			}
661		}
662		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 64, "</li>")
663		if templ_7745c5c3_Err != nil {
664			return templ_7745c5c3_Err
665		}
666		return nil
667	})
668}
669
670// Outline is the README outline; levels indent by 2ch, the h1 is bold.
671func Outline(headings []Heading) templ.Component {
672	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
673		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
674		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
675			return templ_7745c5c3_CtxErr
676		}
677		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
678		if !templ_7745c5c3_IsBuffer {
679			defer func() {
680				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
681				if templ_7745c5c3_Err == nil {
682					templ_7745c5c3_Err = templ_7745c5c3_BufErr
683				}
684			}()
685		}
686		ctx = templ.InitializeContext(ctx)
687		templ_7745c5c3_Var36 := templ.GetChildren(ctx)
688		if templ_7745c5c3_Var36 == nil {
689			templ_7745c5c3_Var36 = templ.NopComponent
690		}
691		ctx = templ.ClearChildren(ctx)
692		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 65, "<nav class=\"outline\" aria-label=\"Outline\">")
693		if templ_7745c5c3_Err != nil {
694			return templ_7745c5c3_Err
695		}
696		for _, h := range headings {
697			var templ_7745c5c3_Var37 = []any{"l" + itoa(h.Level)}
698			templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var37...)
699			if templ_7745c5c3_Err != nil {
700				return templ_7745c5c3_Err
701			}
702			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 66, "<a class=\"")
703			if templ_7745c5c3_Err != nil {
704				return templ_7745c5c3_Err
705			}
706			var templ_7745c5c3_Var38 string
707			templ_7745c5c3_Var38, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var37).String())
708			if templ_7745c5c3_Err != nil {
709				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 1, Col: 0}
710			}
711			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var38)
712			if templ_7745c5c3_Err != nil {
713				return templ_7745c5c3_Err
714			}
715			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 67, "\" href=\"")
716			if templ_7745c5c3_Err != nil {
717				return templ_7745c5c3_Err
718			}
719			var templ_7745c5c3_Var39 templ.SafeURL
720			templ_7745c5c3_Var39, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL("#" + h.ID))
721			if templ_7745c5c3_Err != nil {
722				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 108, Col: 68}
723			}
724			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var39))
725			if templ_7745c5c3_Err != nil {
726				return templ_7745c5c3_Err
727			}
728			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 68, "\">")
729			if templ_7745c5c3_Err != nil {
730				return templ_7745c5c3_Err
731			}
732			var templ_7745c5c3_Var40 string
733			templ_7745c5c3_Var40, templ_7745c5c3_Err = templ.JoinStringErrs(h.Text)
734			if templ_7745c5c3_Err != nil {
735				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 108, Col: 79}
736			}
737			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var40))
738			if templ_7745c5c3_Err != nil {
739				return templ_7745c5c3_Err
740			}
741			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 69, "</a>")
742			if templ_7745c5c3_Err != nil {
743				return templ_7745c5c3_Err
744			}
745		}
746		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, "</nav>")
747		if templ_7745c5c3_Err != nil {
748			return templ_7745c5c3_Err
749		}
750		return nil
751	})
752}
753
754// ReadmeCard is a README in a card whose header names the file.
755func ReadmeCard(r Readme) templ.Component {
756	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
757		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
758		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
759			return templ_7745c5c3_CtxErr
760		}
761		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
762		if !templ_7745c5c3_IsBuffer {
763			defer func() {
764				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
765				if templ_7745c5c3_Err == nil {
766					templ_7745c5c3_Err = templ_7745c5c3_BufErr
767				}
768			}()
769		}
770		ctx = templ.InitializeContext(ctx)
771		templ_7745c5c3_Var41 := templ.GetChildren(ctx)
772		if templ_7745c5c3_Var41 == nil {
773			templ_7745c5c3_Var41 = templ.NopComponent
774		}
775		ctx = templ.ClearChildren(ctx)
776		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 71, "<section class=\"card readme\" aria-labelledby=\"readme-h\"><h2 class=\"card-h\" id=\"readme-h\"><span class=\"ico i-file\" aria-hidden=\"true\"></span> ")
777		if templ_7745c5c3_Err != nil {
778			return templ_7745c5c3_Err
779		}
780		var templ_7745c5c3_Var42 string
781		templ_7745c5c3_Var42, templ_7745c5c3_Err = templ.JoinStringErrs(r.Name)
782		if templ_7745c5c3_Err != nil {
783			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 118, Col: 11}
784		}
785		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var42))
786		if templ_7745c5c3_Err != nil {
787			return templ_7745c5c3_Err
788		}
789		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 72, "</h2>")
790		if templ_7745c5c3_Err != nil {
791			return templ_7745c5c3_Err
792		}
793		templ_7745c5c3_Err = ReadmeView(r).Render(ctx, templ_7745c5c3_Buffer)
794		if templ_7745c5c3_Err != nil {
795			return templ_7745c5c3_Err
796		}
797		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 73, "</section>")
798		if templ_7745c5c3_Err != nil {
799			return templ_7745c5c3_Err
800		}
801		return nil
802	})
803}
804
805// ReadmeView is a rendered README. Its HTML comes from the Markdown
806// renderer, which drops raw HTML and filters URLs.
807func ReadmeView(r Readme) templ.Component {
808	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
809		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
810		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
811			return templ_7745c5c3_CtxErr
812		}
813		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
814		if !templ_7745c5c3_IsBuffer {
815			defer func() {
816				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
817				if templ_7745c5c3_Err == nil {
818					templ_7745c5c3_Err = templ_7745c5c3_BufErr
819				}
820			}()
821		}
822		ctx = templ.InitializeContext(ctx)
823		templ_7745c5c3_Var43 := templ.GetChildren(ctx)
824		if templ_7745c5c3_Var43 == nil {
825			templ_7745c5c3_Var43 = templ.NopComponent
826		}
827		ctx = templ.ClearChildren(ctx)
828		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 74, "<article class=\"prose\" aria-label=\"")
829		if templ_7745c5c3_Err != nil {
830			return templ_7745c5c3_Err
831		}
832		var templ_7745c5c3_Var44 string
833		templ_7745c5c3_Var44, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.Name)
834		if templ_7745c5c3_Err != nil {
835			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 127, Col: 43}
836		}
837		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var44)
838		if templ_7745c5c3_Err != nil {
839			return templ_7745c5c3_Err
840		}
841		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 75, "\" hx-ignore>")
842		if templ_7745c5c3_Err != nil {
843			return templ_7745c5c3_Err
844		}
845		if r.Note != "" {
846			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 76, "<p class=\"dim\">")
847			if templ_7745c5c3_Err != nil {
848				return templ_7745c5c3_Err
849			}
850			var templ_7745c5c3_Var45 string
851			templ_7745c5c3_Var45, templ_7745c5c3_Err = templ.JoinStringErrs(r.Note)
852			if templ_7745c5c3_Err != nil {
853				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 129, Col: 26}
854			}
855			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var45))
856			if templ_7745c5c3_Err != nil {
857				return templ_7745c5c3_Err
858			}
859			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 77, "</p>")
860			if templ_7745c5c3_Err != nil {
861				return templ_7745c5c3_Err
862			}
863		} else {
864			templ_7745c5c3_Err = templ.Raw(r.HTML).Render(ctx, templ_7745c5c3_Buffer)
865			if templ_7745c5c3_Err != nil {
866				return templ_7745c5c3_Err
867			}
868		}
869		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 78, "</article>")
870		if templ_7745c5c3_Err != nil {
871			return templ_7745c5c3_Err
872		}
873		return nil
874	})
875}
876
877// CommitRows is a cursor table of commits: sha, subject with inline refs,
878// author, relative date (absolute in the title).
879func CommitRows(rows []CommitRow) templ.Component {
880	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
881		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
882		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
883			return templ_7745c5c3_CtxErr
884		}
885		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
886		if !templ_7745c5c3_IsBuffer {
887			defer func() {
888				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
889				if templ_7745c5c3_Err == nil {
890					templ_7745c5c3_Err = templ_7745c5c3_BufErr
891				}
892			}()
893		}
894		ctx = templ.InitializeContext(ctx)
895		templ_7745c5c3_Var46 := templ.GetChildren(ctx)
896		if templ_7745c5c3_Var46 == nil {
897			templ_7745c5c3_Var46 = templ.NopComponent
898		}
899		ctx = templ.ClearChildren(ctx)
900		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 79, "<table class=\"list commits\" aria-label=\"Commits\"><tbody data-rows>")
901		if templ_7745c5c3_Err != nil {
902			return templ_7745c5c3_Err
903		}
904		for _, c := range rows {
905			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 80, "<tr")
906			if templ_7745c5c3_Err != nil {
907				return templ_7745c5c3_Err
908			}
909			if c.ID != "" {
910				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 81, " id=\"")
911				if templ_7745c5c3_Err != nil {
912					return templ_7745c5c3_Err
913				}
914				var templ_7745c5c3_Var47 string
915				templ_7745c5c3_Var47, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.ID)
916				if templ_7745c5c3_Err != nil {
917					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 144, Col: 15}
918				}
919				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var47)
920				if templ_7745c5c3_Err != nil {
921					return templ_7745c5c3_Err
922				}
923				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 82, "\"")
924				if templ_7745c5c3_Err != nil {
925					return templ_7745c5c3_Err
926				}
927			}
928			if c.Cursor {
929				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 83, " data-cursor")
930				if templ_7745c5c3_Err != nil {
931					return templ_7745c5c3_Err
932				}
933			}
934			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 84, "><td class=\"c-sha mute\">")
935			if templ_7745c5c3_Err != nil {
936				return templ_7745c5c3_Err
937			}
938			var templ_7745c5c3_Var48 string
939			templ_7745c5c3_Var48, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)
940			if templ_7745c5c3_Err != nil {
941				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 148, Col: 37}
942			}
943			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var48))
944			if templ_7745c5c3_Err != nil {
945				return templ_7745c5c3_Err
946			}
947			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 85, "</td><td class=\"c-subject\"><a href=\"")
948			if templ_7745c5c3_Err != nil {
949				return templ_7745c5c3_Err
950			}
951			var templ_7745c5c3_Var49 templ.SafeURL
952			templ_7745c5c3_Var49, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.CHref))
953			if templ_7745c5c3_Err != nil {
954				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 150, Col: 38}
955			}
956			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var49))
957			if templ_7745c5c3_Err != nil {
958				return templ_7745c5c3_Err
959			}
960			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 86, "\">")
961			if templ_7745c5c3_Err != nil {
962				return templ_7745c5c3_Err
963			}
964			var templ_7745c5c3_Var50 string
965			templ_7745c5c3_Var50, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)
966			if templ_7745c5c3_Err != nil {
967				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 150, Col: 52}
968			}
969			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var50))
970			if templ_7745c5c3_Err != nil {
971				return templ_7745c5c3_Err
972			}
973			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 87, "</a> ")
974			if templ_7745c5c3_Err != nil {
975				return templ_7745c5c3_Err
976			}
977			if c.Merge {
978				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 88, "<span class=\"pill\">merge</span> ")
979				if templ_7745c5c3_Err != nil {
980					return templ_7745c5c3_Err
981				}
982			}
983			for _, b := range c.Branches {
984				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 89, "<span class=\"pill\">")
985				if templ_7745c5c3_Err != nil {
986					return templ_7745c5c3_Err
987				}
988				var templ_7745c5c3_Var51 string
989				templ_7745c5c3_Var51, templ_7745c5c3_Err = templ.JoinStringErrs(b)
990				if templ_7745c5c3_Err != nil {
991					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 155, Col: 29}
992				}
993				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var51))
994				if templ_7745c5c3_Err != nil {
995					return templ_7745c5c3_Err
996				}
997				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 90, "</span> ")
998				if templ_7745c5c3_Err != nil {
999					return templ_7745c5c3_Err
1000				}
1001			}
1002			for _, t := range c.Tags {
1003				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 91, "<span class=\"pill tag\"><span class=\"sr\">tag </span>")
1004				if templ_7745c5c3_Err != nil {
1005					return templ_7745c5c3_Err
1006				}
1007				var templ_7745c5c3_Var52 string
1008				templ_7745c5c3_Var52, templ_7745c5c3_Err = templ.JoinStringErrs(t)
1009				if templ_7745c5c3_Err != nil {
1010					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 158, Col: 61}
1011				}
1012				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var52))
1013				if templ_7745c5c3_Err != nil {
1014					return templ_7745c5c3_Err
1015				}
1016				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 92, "</span>")
1017				if templ_7745c5c3_Err != nil {
1018					return templ_7745c5c3_Err
1019				}
1020			}
1021			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 93, "</td><td class=\"c-ck\">")
1022			if templ_7745c5c3_Err != nil {
1023				return templ_7745c5c3_Err
1024			}
1025			templ_7745c5c3_Err = CommitChecks(c.Checks).Render(ctx, templ_7745c5c3_Buffer)
1026			if templ_7745c5c3_Err != nil {
1027				return templ_7745c5c3_Err
1028			}
1029			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 94, "</td><td class=\"c-who dim\">")
1030			if templ_7745c5c3_Err != nil {
1031				return templ_7745c5c3_Err
1032			}
1033			var templ_7745c5c3_Var53 string
1034			templ_7745c5c3_Var53, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)
1035			if templ_7745c5c3_Err != nil {
1036				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 162, Col: 37}
1037			}
1038			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var53))
1039			if templ_7745c5c3_Err != nil {
1040				return templ_7745c5c3_Err
1041			}
1042			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 95, "</td><td class=\"c-when nowrap dim\"><time datetime=\"")
1043			if templ_7745c5c3_Err != nil {
1044				return templ_7745c5c3_Err
1045			}
1046			var templ_7745c5c3_Var54 string
1047			templ_7745c5c3_Var54, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
1048			if templ_7745c5c3_Err != nil {
1049				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 163, Col: 60}
1050			}
1051			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var54)
1052			if templ_7745c5c3_Err != nil {
1053				return templ_7745c5c3_Err
1054			}
1055			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 96, "\" title=\"")
1056			if templ_7745c5c3_Err != nil {
1057				return templ_7745c5c3_Err
1058			}
1059			var templ_7745c5c3_Var55 string
1060			templ_7745c5c3_Var55, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
1061			if templ_7745c5c3_Err != nil {
1062				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 163, Col: 79}
1063			}
1064			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var55)
1065			if templ_7745c5c3_Err != nil {
1066				return templ_7745c5c3_Err
1067			}
1068			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 97, "\">")
1069			if templ_7745c5c3_Err != nil {
1070				return templ_7745c5c3_Err
1071			}
1072			var templ_7745c5c3_Var56 string
1073			templ_7745c5c3_Var56, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)
1074			if templ_7745c5c3_Err != nil {
1075				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/components.templ`, Line: 163, Col: 90}
1076			}
1077			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var56))
1078			if templ_7745c5c3_Err != nil {
1079				return templ_7745c5c3_Err
1080			}
1081			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 98, "</time></td></tr>")
1082			if templ_7745c5c3_Err != nil {
1083				return templ_7745c5c3_Err
1084			}
1085		}
1086		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 99, "</tbody></table>")
1087		if templ_7745c5c3_Err != nil {
1088			return templ_7745c5c3_Err
1089		}
1090		return nil
1091	})
1092}
1093
1094var _ = 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