v0.27.0 0039612

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

Tags 45

↑↓ moveenter openesc close