detached 83e495f

components_templ.go RawHistoryFolder

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