detached cab7cdc

pages_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
13import "fmt"
14
15// Home is the repository list.
16func Home(l Layout, p HomePage) templ.Component {
17	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
18		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
19		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
20			return templ_7745c5c3_CtxErr
21		}
22		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
23		if !templ_7745c5c3_IsBuffer {
24			defer func() {
25				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
26				if templ_7745c5c3_Err == nil {
27					templ_7745c5c3_Err = templ_7745c5c3_BufErr
28				}
29			}()
30		}
31		ctx = templ.InitializeContext(ctx)
32		templ_7745c5c3_Var1 := templ.GetChildren(ctx)
33		if templ_7745c5c3_Var1 == nil {
34			templ_7745c5c3_Var1 = templ.NopComponent
35		}
36		ctx = templ.ClearChildren(ctx)
37		templ_7745c5c3_Var2 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
38			templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
39			templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
40			if !templ_7745c5c3_IsBuffer {
41				defer func() {
42					templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
43					if templ_7745c5c3_Err == nil {
44						templ_7745c5c3_Err = templ_7745c5c3_BufErr
45					}
46				}()
47			}
48			ctx = templ.InitializeContext(ctx)
49			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "<h1 class=\"sr\">Repositories</h1><div class=\"home\" data-layout=\"cards\"><section class=\"home-repos\" aria-label=\"Repositories\"><div class=\"home-bar\"><div class=\"filter\"><label for=\"home-filter\" class=\"sr\">filter</label> <input id=\"home-filter\" type=\"search\" data-filter=\"#repo-rows > li\" placeholder=\"Filter repositories…\" autocomplete=\"off\" hx-on:input=\"ermite.filter(this)\"></div><nav class=\"sort\" aria-label=\"Sort repositories\"><span class=\"mute\">sort</span> ")
50			if templ_7745c5c3_Err != nil {
51				return templ_7745c5c3_Err
52			}
53			for _, s := range p.Sorts {
54				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "<a href=\"")
55				if templ_7745c5c3_Err != nil {
56					return templ_7745c5c3_Err
57				}
58				var templ_7745c5c3_Var3 templ.SafeURL
59				templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(s.Href))
60				if templ_7745c5c3_Err != nil {
61					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 29, Col: 36}
62				}
63				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3))
64				if templ_7745c5c3_Err != nil {
65					return templ_7745c5c3_Err
66				}
67				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "\"")
68				if templ_7745c5c3_Err != nil {
69					return templ_7745c5c3_Err
70				}
71				if s.Mark != "" {
72					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, " aria-current=\"true\"")
73					if templ_7745c5c3_Err != nil {
74						return templ_7745c5c3_Err
75					}
76				}
77				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, ">")
78				if templ_7745c5c3_Err != nil {
79					return templ_7745c5c3_Err
80				}
81				var templ_7745c5c3_Var4 string
82				templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(s.Label)
83				if templ_7745c5c3_Err != nil {
84					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 34, Col: 17}
85				}
86				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4))
87				if templ_7745c5c3_Err != nil {
88					return templ_7745c5c3_Err
89				}
90				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, " ")
91				if templ_7745c5c3_Err != nil {
92					return templ_7745c5c3_Err
93				}
94				if s.Mark != "" {
95					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, "<span aria-hidden=\"true\">")
96					if templ_7745c5c3_Err != nil {
97						return templ_7745c5c3_Err
98					}
99					var templ_7745c5c3_Var5 string
100					templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(s.Mark)
101					if templ_7745c5c3_Err != nil {
102						return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 36, Col: 42}
103					}
104					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5))
105					if templ_7745c5c3_Err != nil {
106						return templ_7745c5c3_Err
107					}
108					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 8, "</span> <span class=\"sr\">")
109					if templ_7745c5c3_Err != nil {
110						return templ_7745c5c3_Err
111					}
112					var templ_7745c5c3_Var6 string
113					templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs(", " + s.State)
114					if templ_7745c5c3_Err != nil {
115						return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 37, Col: 42}
116					}
117					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var6))
118					if templ_7745c5c3_Err != nil {
119						return templ_7745c5c3_Err
120					}
121					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, "</span>")
122					if templ_7745c5c3_Err != nil {
123						return templ_7745c5c3_Err
124					}
125				}
126				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, "</a>")
127				if templ_7745c5c3_Err != nil {
128					return templ_7745c5c3_Err
129				}
130			}
131			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, "</nav><div class=\"layout-switch\" role=\"group\" aria-label=\"Layout\" data-js><button type=\"button\" class=\"btn icon\" data-set-layout=\"cards\" aria-pressed=\"true\" title=\"Cards\" aria-label=\"Cards\"><span class=\"ico i-cards\" aria-hidden=\"true\"></span></button> <button type=\"button\" class=\"btn icon\" data-set-layout=\"split\" aria-pressed=\"false\" title=\"Two columns\" aria-label=\"Two columns\"><span class=\"ico i-split\" aria-hidden=\"true\"></span></button> <button type=\"button\" class=\"btn icon\" data-set-layout=\"compact\" aria-pressed=\"false\" title=\"Compact list\" aria-label=\"Compact list\"><span class=\"ico i-compact\" aria-hidden=\"true\"></span></button></div></div><ul class=\"repos\" id=\"repo-rows\" data-rows data-sort=\"")
132			if templ_7745c5c3_Err != nil {
133				return templ_7745c5c3_Err
134			}
135			var templ_7745c5c3_Var7 string
136			templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Sort)
137			if templ_7745c5c3_Err != nil {
138				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 54, Col: 65}
139			}
140			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var7)
141			if templ_7745c5c3_Err != nil {
142				return templ_7745c5c3_Err
143			}
144			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, "\" data-desc=\"")
145			if templ_7745c5c3_Err != nil {
146				return templ_7745c5c3_Err
147			}
148			var templ_7745c5c3_Var8 string
149			templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.ResolveAttributeValue(fmt.Sprint(p.Desc))
150			if templ_7745c5c3_Err != nil {
151				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 54, Col: 98}
152			}
153			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var8)
154			if templ_7745c5c3_Err != nil {
155				return templ_7745c5c3_Err
156			}
157			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "\">")
158			if templ_7745c5c3_Err != nil {
159				return templ_7745c5c3_Err
160			}
161			for _, r := range p.Rows {
162				templ_7745c5c3_Err = HomeRowView(r).Render(ctx, templ_7745c5c3_Buffer)
163				if templ_7745c5c3_Err != nil {
164					return templ_7745c5c3_Err
165				}
166			}
167			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, "</ul>")
168			if templ_7745c5c3_Err != nil {
169				return templ_7745c5c3_Err
170			}
171			if len(p.Rows) == 0 {
172				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, "<p class=\"lede dim\">no repositories yet.</p>")
173				if templ_7745c5c3_Err != nil {
174					return templ_7745c5c3_Err
175				}
176			}
177			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "</section></div>")
178			if templ_7745c5c3_Err != nil {
179				return templ_7745c5c3_Err
180			}
181			return nil
182		})
183		templ_7745c5c3_Err = Shell(l, nil).Render(templ.WithChildren(ctx, templ_7745c5c3_Var2), templ_7745c5c3_Buffer)
184		if templ_7745c5c3_Err != nil {
185			return templ_7745c5c3_Err
186		}
187		return nil
188	})
189}
190
191// Summary is the summary of a repository: the README reads in the main
192// column at the reading measure; what one acts on sits in the rail.
193func Summary(l Layout, p SummaryPage) templ.Component {
194	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
195		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
196		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
197			return templ_7745c5c3_CtxErr
198		}
199		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
200		if !templ_7745c5c3_IsBuffer {
201			defer func() {
202				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
203				if templ_7745c5c3_Err == nil {
204					templ_7745c5c3_Err = templ_7745c5c3_BufErr
205				}
206			}()
207		}
208		ctx = templ.InitializeContext(ctx)
209		templ_7745c5c3_Var9 := templ.GetChildren(ctx)
210		if templ_7745c5c3_Var9 == nil {
211			templ_7745c5c3_Var9 = templ.NopComponent
212		}
213		ctx = templ.ClearChildren(ctx)
214		templ_7745c5c3_Var10 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
215			templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
216			templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
217			if !templ_7745c5c3_IsBuffer {
218				defer func() {
219					templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
220					if templ_7745c5c3_Err == nil {
221						templ_7745c5c3_Err = templ_7745c5c3_BufErr
222					}
223				}()
224			}
225			ctx = templ.InitializeContext(ctx)
226			if p.Readme != nil {
227				templ_7745c5c3_Err = ReadmeCard(*p.Readme).Render(ctx, templ_7745c5c3_Buffer)
228				if templ_7745c5c3_Err != nil {
229					return templ_7745c5c3_Err
230				}
231			}
232			return nil
233		})
234		templ_7745c5c3_Err = Shell(l, summaryRail(p)).Render(templ.WithChildren(ctx, templ_7745c5c3_Var10), templ_7745c5c3_Buffer)
235		if templ_7745c5c3_Err != nil {
236			return templ_7745c5c3_Err
237		}
238		return nil
239	})
240}
241
242// latestTagFact is the "latest tag" row of About: the newest tag (its
243// commit subject on hover), how old it is, and the count of tags, a link to
244// all of them. With too many tags to date them, the count only.
245func latestTagFact(t LatestTag) templ.Component {
246	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
247		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
248		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
249			return templ_7745c5c3_CtxErr
250		}
251		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
252		if !templ_7745c5c3_IsBuffer {
253			defer func() {
254				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
255				if templ_7745c5c3_Err == nil {
256					templ_7745c5c3_Err = templ_7745c5c3_BufErr
257				}
258			}()
259		}
260		ctx = templ.InitializeContext(ctx)
261		templ_7745c5c3_Var11 := templ.GetChildren(ctx)
262		if templ_7745c5c3_Var11 == nil {
263			templ_7745c5c3_Var11 = templ.NopComponent
264		}
265		ctx = templ.ClearChildren(ctx)
266		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 17, "<dt>latest tag</dt><dd class=\"latest-tag\">")
267		if templ_7745c5c3_Err != nil {
268			return templ_7745c5c3_Err
269		}
270		if t.Name != "" {
271			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 18, "<a class=\"tag-name\" href=\"")
272			if templ_7745c5c3_Err != nil {
273				return templ_7745c5c3_Err
274			}
275			var templ_7745c5c3_Var12 templ.SafeURL
276			templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(t.Href))
277			if templ_7745c5c3_Err != nil {
278				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 84, Col: 51}
279			}
280			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var12))
281			if templ_7745c5c3_Err != nil {
282				return templ_7745c5c3_Err
283			}
284			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, "\" title=\"")
285			if templ_7745c5c3_Err != nil {
286				return templ_7745c5c3_Err
287			}
288			var templ_7745c5c3_Var13 string
289			templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.ResolveAttributeValue(t.Subject)
290			if templ_7745c5c3_Err != nil {
291				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 84, Col: 71}
292			}
293			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var13)
294			if templ_7745c5c3_Err != nil {
295				return templ_7745c5c3_Err
296			}
297			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "\">")
298			if templ_7745c5c3_Err != nil {
299				return templ_7745c5c3_Err
300			}
301			var templ_7745c5c3_Var14 string
302			templ_7745c5c3_Var14, templ_7745c5c3_Err = templ.JoinStringErrs(t.Name)
303			if templ_7745c5c3_Err != nil {
304				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 84, Col: 82}
305			}
306			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var14))
307			if templ_7745c5c3_Err != nil {
308				return templ_7745c5c3_Err
309			}
310			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "</a> ")
311			if templ_7745c5c3_Err != nil {
312				return templ_7745c5c3_Err
313			}
314			if t.WhenAt != "" {
315				var templ_7745c5c3_Var15 string
316				templ_7745c5c3_Var15, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")
317				if templ_7745c5c3_Err != nil {
318					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 86, Col: 12}
319				}
320				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var15))
321				if templ_7745c5c3_Err != nil {
322					return templ_7745c5c3_Err
323				}
324				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "<time datetime=\"")
325				if templ_7745c5c3_Err != nil {
326					return templ_7745c5c3_Err
327				}
328				var templ_7745c5c3_Var16 string
329				templ_7745c5c3_Var16, templ_7745c5c3_Err = templ.ResolveAttributeValue(t.WhenAt)
330				if templ_7745c5c3_Err != nil {
331					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 86, Col: 39}
332				}
333				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var16)
334				if templ_7745c5c3_Err != nil {
335					return templ_7745c5c3_Err
336				}
337				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 23, "\" title=\"")
338				if templ_7745c5c3_Err != nil {
339					return templ_7745c5c3_Err
340				}
341				var templ_7745c5c3_Var17 string
342				templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.ResolveAttributeValue(t.WhenAt)
343				if templ_7745c5c3_Err != nil {
344					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 86, Col: 58}
345				}
346				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var17)
347				if templ_7745c5c3_Err != nil {
348					return templ_7745c5c3_Err
349				}
350				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, "\">")
351				if templ_7745c5c3_Err != nil {
352					return templ_7745c5c3_Err
353				}
354				var templ_7745c5c3_Var18 string
355				templ_7745c5c3_Var18, templ_7745c5c3_Err = templ.JoinStringErrs(t.When)
356				if templ_7745c5c3_Err != nil {
357					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 86, Col: 69}
358				}
359				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var18))
360				if templ_7745c5c3_Err != nil {
361					return templ_7745c5c3_Err
362				}
363				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 25, "</time>")
364				if templ_7745c5c3_Err != nil {
365					return templ_7745c5c3_Err
366				}
367			}
368			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 26, " ")
369			if templ_7745c5c3_Err != nil {
370				return templ_7745c5c3_Err
371			}
372			var templ_7745c5c3_Var19 string
373			templ_7745c5c3_Var19, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")
374			if templ_7745c5c3_Err != nil {
375				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 88, Col: 11}
376			}
377			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var19))
378			if templ_7745c5c3_Err != nil {
379				return templ_7745c5c3_Err
380			}
381			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 27, " ")
382			if templ_7745c5c3_Err != nil {
383				return templ_7745c5c3_Err
384			}
385		}
386		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 28, "<a class=\"all-tags\" href=\"")
387		if templ_7745c5c3_Err != nil {
388			return templ_7745c5c3_Err
389		}
390		var templ_7745c5c3_Var20 templ.SafeURL
391		templ_7745c5c3_Var20, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(t.RefsHref))
392		if templ_7745c5c3_Err != nil {
393			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 90, Col: 54}
394		}
395		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var20))
396		if templ_7745c5c3_Err != nil {
397			return templ_7745c5c3_Err
398		}
399		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 29, "\">")
400		if templ_7745c5c3_Err != nil {
401			return templ_7745c5c3_Err
402		}
403		var templ_7745c5c3_Var21 string
404		templ_7745c5c3_Var21, templ_7745c5c3_Err = templ.JoinStringErrs(plural(t.Count, "tag", "tags"))
405		if templ_7745c5c3_Err != nil {
406			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 90, Col: 89}
407		}
408		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var21))
409		if templ_7745c5c3_Err != nil {
410			return templ_7745c5c3_Err
411		}
412		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 30, "</a></dd>")
413		if templ_7745c5c3_Err != nil {
414			return templ_7745c5c3_Err
415		}
416		return nil
417	})
418}
419
420func summaryRail(p SummaryPage) templ.Component {
421	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
422		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
423		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
424			return templ_7745c5c3_CtxErr
425		}
426		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
427		if !templ_7745c5c3_IsBuffer {
428			defer func() {
429				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
430				if templ_7745c5c3_Err == nil {
431					templ_7745c5c3_Err = templ_7745c5c3_BufErr
432				}
433			}()
434		}
435		ctx = templ.InitializeContext(ctx)
436		templ_7745c5c3_Var22 := templ.GetChildren(ctx)
437		if templ_7745c5c3_Var22 == nil {
438			templ_7745c5c3_Var22 = templ.NopComponent
439		}
440		ctx = templ.ClearChildren(ctx)
441		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 31, "<section aria-labelledby=\"r-clone\"><h2 id=\"r-clone\">Clone</h2>")
442		if templ_7745c5c3_Err != nil {
443			return templ_7745c5c3_Err
444		}
445		templ_7745c5c3_Err = CloneBlock(p.Clone).Render(ctx, templ_7745c5c3_Buffer)
446		if templ_7745c5c3_Err != nil {
447			return templ_7745c5c3_Err
448		}
449		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 32, "</section><section aria-labelledby=\"r-facts\"><h2 id=\"r-facts\">About</h2><dl class=\"kv\">")
450		if templ_7745c5c3_Err != nil {
451			return templ_7745c5c3_Err
452		}
453		for _, f := range p.Facts {
454			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, "<dt>")
455			if templ_7745c5c3_Err != nil {
456				return templ_7745c5c3_Err
457			}
458			var templ_7745c5c3_Var23 string
459			templ_7745c5c3_Var23, templ_7745c5c3_Err = templ.JoinStringErrs(f.Key)
460			if templ_7745c5c3_Err != nil {
461				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 101, Col: 15}
462			}
463			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var23))
464			if templ_7745c5c3_Err != nil {
465				return templ_7745c5c3_Err
466			}
467			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 34, "</dt>")
468			if templ_7745c5c3_Err != nil {
469				return templ_7745c5c3_Err
470			}
471			templ_7745c5c3_Err = FactValue(f).Render(ctx, templ_7745c5c3_Buffer)
472			if templ_7745c5c3_Err != nil {
473				return templ_7745c5c3_Err
474			}
475		}
476		if p.Latest != nil {
477			templ_7745c5c3_Err = latestTagFact(*p.Latest).Render(ctx, templ_7745c5c3_Buffer)
478			if templ_7745c5c3_Err != nil {
479				return templ_7745c5c3_Err
480			}
481		}
482		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 35, "</dl></section>")
483		if templ_7745c5c3_Err != nil {
484			return templ_7745c5c3_Err
485		}
486		if len(p.Recent) > 0 {
487			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, "<section aria-labelledby=\"r-recent\"><h2 id=\"r-recent\">Recent commits <a href=\"")
488			if templ_7745c5c3_Err != nil {
489				return templ_7745c5c3_Err
490			}
491			var templ_7745c5c3_Var24 templ.SafeURL
492			templ_7745c5c3_Var24, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.AllHref))
493			if templ_7745c5c3_Err != nil {
494				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 110, Col: 105}
495			}
496			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var24))
497			if templ_7745c5c3_Err != nil {
498				return templ_7745c5c3_Err
499			}
500			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 37, "\">View all</a></h2>")
501			if templ_7745c5c3_Err != nil {
502				return templ_7745c5c3_Err
503			}
504			templ_7745c5c3_Err = CommitRows(p.Recent).Render(ctx, templ_7745c5c3_Buffer)
505			if templ_7745c5c3_Err != nil {
506				return templ_7745c5c3_Err
507			}
508			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, "</section>")
509			if templ_7745c5c3_Err != nil {
510				return templ_7745c5c3_Err
511			}
512		}
513		if p.Actions != nil {
514			templ_7745c5c3_Err = RecentActionsBlock(*p.Actions).Render(ctx, templ_7745c5c3_Buffer)
515			if templ_7745c5c3_Err != nil {
516				return templ_7745c5c3_Err
517			}
518		}
519		if len(p.Outline) > 0 && p.Readme != nil {
520			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, "<section aria-labelledby=\"r-outline\"><h2 id=\"r-outline\">On this page</h2>")
521			if templ_7745c5c3_Err != nil {
522				return templ_7745c5c3_Err
523			}
524			templ_7745c5c3_Err = Outline(p.Outline).Render(ctx, templ_7745c5c3_Buffer)
525			if templ_7745c5c3_Err != nil {
526				return templ_7745c5c3_Err
527			}
528			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, "</section>")
529			if templ_7745c5c3_Err != nil {
530				return templ_7745c5c3_Err
531			}
532		}
533		return nil
534	})
535}
536
537// Refs lists the branches and tags of a repository.
538func Refs(l Layout, p RefsPage) templ.Component {
539	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
540		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
541		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
542			return templ_7745c5c3_CtxErr
543		}
544		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
545		if !templ_7745c5c3_IsBuffer {
546			defer func() {
547				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
548				if templ_7745c5c3_Err == nil {
549					templ_7745c5c3_Err = templ_7745c5c3_BufErr
550				}
551			}()
552		}
553		ctx = templ.InitializeContext(ctx)
554		templ_7745c5c3_Var25 := templ.GetChildren(ctx)
555		if templ_7745c5c3_Var25 == nil {
556			templ_7745c5c3_Var25 = templ.NopComponent
557		}
558		ctx = templ.ClearChildren(ctx)
559		templ_7745c5c3_Var26 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
560			templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
561			templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
562			if !templ_7745c5c3_IsBuffer {
563				defer func() {
564					templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
565					if templ_7745c5c3_Err == nil {
566						templ_7745c5c3_Err = templ_7745c5c3_BufErr
567					}
568				}()
569			}
570			ctx = templ.InitializeContext(ctx)
571			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, "<div class=\"filter\"><label for=\"ref-filter\" class=\"sr\">filter</label> <input id=\"ref-filter\" type=\"search\" data-filter=\"#ref-rows > tr\" placeholder=\"Filter branches and tags…\" autocomplete=\"off\" hx-on:input=\"ermite.filter(this)\"></div><table class=\"list refs\" aria-label=\"Branches and tags\"><thead><tr><th class=\"c-kind\">kind</th><th class=\"c-name\">name</th><th class=\"c-sha\">commit</th><th class=\"c-sub\">subject</th><th class=\"c-when\">date</th></tr></thead>")
572			if templ_7745c5c3_Err != nil {
573				return templ_7745c5c3_Err
574			}
575			templ_7745c5c3_Err = RefsBody(p).Render(ctx, templ_7745c5c3_Buffer)
576			if templ_7745c5c3_Err != nil {
577				return templ_7745c5c3_Err
578			}
579			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "</table>")
580			if templ_7745c5c3_Err != nil {
581				return templ_7745c5c3_Err
582			}
583			if p.Note != "" {
584				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "<p class=\"note\">")
585				if templ_7745c5c3_Err != nil {
586					return templ_7745c5c3_Err
587				}
588				var templ_7745c5c3_Var27 string
589				templ_7745c5c3_Var27, templ_7745c5c3_Err = templ.JoinStringErrs(p.Note)
590				if templ_7745c5c3_Err != nil {
591					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 143, Col: 27}
592				}
593				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var27))
594				if templ_7745c5c3_Err != nil {
595					return templ_7745c5c3_Err
596				}
597				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, "</p>")
598				if templ_7745c5c3_Err != nil {
599					return templ_7745c5c3_Err
600				}
601			}
602			return nil
603		})
604		templ_7745c5c3_Err = Shell(l, refsRail(p)).Render(templ.WithChildren(ctx, templ_7745c5c3_Var26), templ_7745c5c3_Buffer)
605		if templ_7745c5c3_Err != nil {
606			return templ_7745c5c3_Err
607		}
608		return nil
609	})
610}
611
612func refRow(kind string, r RefRow) templ.Component {
613	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
614		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
615		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
616			return templ_7745c5c3_CtxErr
617		}
618		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
619		if !templ_7745c5c3_IsBuffer {
620			defer func() {
621				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
622				if templ_7745c5c3_Err == nil {
623					templ_7745c5c3_Err = templ_7745c5c3_BufErr
624				}
625			}()
626		}
627		ctx = templ.InitializeContext(ctx)
628		templ_7745c5c3_Var28 := templ.GetChildren(ctx)
629		if templ_7745c5c3_Var28 == nil {
630			templ_7745c5c3_Var28 = templ.NopComponent
631		}
632		ctx = templ.ClearChildren(ctx)
633		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "<tr")
634		if templ_7745c5c3_Err != nil {
635			return templ_7745c5c3_Err
636		}
637		if r.Cursor {
638			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 46, " data-cursor")
639			if templ_7745c5c3_Err != nil {
640				return templ_7745c5c3_Err
641			}
642		}
643		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 47, "><td class=\"c-kind mute\">")
644		if templ_7745c5c3_Err != nil {
645			return templ_7745c5c3_Err
646		}
647		var templ_7745c5c3_Var29 string
648		templ_7745c5c3_Var29, templ_7745c5c3_Err = templ.JoinStringErrs(kind)
649		if templ_7745c5c3_Err != nil {
650			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 150, Col: 32}
651		}
652		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var29))
653		if templ_7745c5c3_Err != nil {
654			return templ_7745c5c3_Err
655		}
656		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, "</td><td class=\"c-name\"><a href=\"")
657		if templ_7745c5c3_Err != nil {
658			return templ_7745c5c3_Err
659		}
660		var templ_7745c5c3_Var30 templ.SafeURL
661		templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(r.Href))
662		if templ_7745c5c3_Err != nil {
663			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 152, Col: 34}
664		}
665		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var30))
666		if templ_7745c5c3_Err != nil {
667			return templ_7745c5c3_Err
668		}
669		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 49, "\">")
670		if templ_7745c5c3_Err != nil {
671			return templ_7745c5c3_Err
672		}
673		var templ_7745c5c3_Var31 string
674		templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.JoinStringErrs(r.Name)
675		if templ_7745c5c3_Err != nil {
676			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 152, Col: 45}
677		}
678		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var31))
679		if templ_7745c5c3_Err != nil {
680			return templ_7745c5c3_Err
681		}
682		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 50, "</a> ")
683		if templ_7745c5c3_Err != nil {
684			return templ_7745c5c3_Err
685		}
686		if r.Default {
687			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 51, "<span class=\"pill\">default</span>")
688			if templ_7745c5c3_Err != nil {
689				return templ_7745c5c3_Err
690			}
691		}
692		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 52, "</td><td class=\"c-sha\">")
693		if templ_7745c5c3_Err != nil {
694			return templ_7745c5c3_Err
695		}
696		if r.CHref != "" {
697			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 53, "<a href=\"")
698			if templ_7745c5c3_Err != nil {
699				return templ_7745c5c3_Err
700			}
701			var templ_7745c5c3_Var32 templ.SafeURL
702			templ_7745c5c3_Var32, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(r.CHref))
703			if templ_7745c5c3_Err != nil {
704				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 159, Col: 36}
705			}
706			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var32))
707			if templ_7745c5c3_Err != nil {
708				return templ_7745c5c3_Err
709			}
710			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 54, "\">")
711			if templ_7745c5c3_Err != nil {
712				return templ_7745c5c3_Err
713			}
714			var templ_7745c5c3_Var33 string
715			templ_7745c5c3_Var33, templ_7745c5c3_Err = templ.JoinStringErrs(r.Short)
716			if templ_7745c5c3_Err != nil {
717				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 159, Col: 48}
718			}
719			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var33))
720			if templ_7745c5c3_Err != nil {
721				return templ_7745c5c3_Err
722			}
723			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, "</a>")
724			if templ_7745c5c3_Err != nil {
725				return templ_7745c5c3_Err
726			}
727		} else {
728			var templ_7745c5c3_Var34 string
729			templ_7745c5c3_Var34, templ_7745c5c3_Err = templ.JoinStringErrs(r.Short)
730			if templ_7745c5c3_Err != nil {
731				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 161, Col: 13}
732			}
733			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var34))
734			if templ_7745c5c3_Err != nil {
735				return templ_7745c5c3_Err
736			}
737		}
738		templ_7745c5c3_Err = CommitChecks(r.Checks).Render(ctx, templ_7745c5c3_Buffer)
739		if templ_7745c5c3_Err != nil {
740			return templ_7745c5c3_Err
741		}
742		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 56, "</td><td class=\"c-sub\">")
743		if templ_7745c5c3_Err != nil {
744			return templ_7745c5c3_Err
745		}
746		var templ_7745c5c3_Var35 string
747		templ_7745c5c3_Var35, templ_7745c5c3_Err = templ.JoinStringErrs(r.Subject)
748		if templ_7745c5c3_Err != nil {
749			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 165, Col: 31}
750		}
751		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var35))
752		if templ_7745c5c3_Err != nil {
753			return templ_7745c5c3_Err
754		}
755		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "</td><td class=\"c-when dim\">")
756		if templ_7745c5c3_Err != nil {
757			return templ_7745c5c3_Err
758		}
759		if r.WhenAt != "" {
760			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "<time datetime=\"")
761			if templ_7745c5c3_Err != nil {
762				return templ_7745c5c3_Err
763			}
764			var templ_7745c5c3_Var36 string
765			templ_7745c5c3_Var36, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.WhenAt)
766			if templ_7745c5c3_Err != nil {
767				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 168, Col: 29}
768			}
769			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var36)
770			if templ_7745c5c3_Err != nil {
771				return templ_7745c5c3_Err
772			}
773			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, "\" title=\"")
774			if templ_7745c5c3_Err != nil {
775				return templ_7745c5c3_Err
776			}
777			var templ_7745c5c3_Var37 string
778			templ_7745c5c3_Var37, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.WhenAt)
779			if templ_7745c5c3_Err != nil {
780				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 168, Col: 48}
781			}
782			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var37)
783			if templ_7745c5c3_Err != nil {
784				return templ_7745c5c3_Err
785			}
786			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 60, "\">")
787			if templ_7745c5c3_Err != nil {
788				return templ_7745c5c3_Err
789			}
790			var templ_7745c5c3_Var38 string
791			templ_7745c5c3_Var38, templ_7745c5c3_Err = templ.JoinStringErrs(r.When)
792			if templ_7745c5c3_Err != nil {
793				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 168, Col: 59}
794			}
795			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var38))
796			if templ_7745c5c3_Err != nil {
797				return templ_7745c5c3_Err
798			}
799			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "</time>")
800			if templ_7745c5c3_Err != nil {
801				return templ_7745c5c3_Err
802			}
803		}
804		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, "</td></tr>")
805		if templ_7745c5c3_Err != nil {
806			return templ_7745c5c3_Err
807		}
808		return nil
809	})
810}
811
812func refsRail(p RefsPage) templ.Component {
813	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
814		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
815		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
816			return templ_7745c5c3_CtxErr
817		}
818		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
819		if !templ_7745c5c3_IsBuffer {
820			defer func() {
821				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
822				if templ_7745c5c3_Err == nil {
823					templ_7745c5c3_Err = templ_7745c5c3_BufErr
824				}
825			}()
826		}
827		ctx = templ.InitializeContext(ctx)
828		templ_7745c5c3_Var39 := templ.GetChildren(ctx)
829		if templ_7745c5c3_Var39 == nil {
830			templ_7745c5c3_Var39 = templ.NopComponent
831		}
832		ctx = templ.ClearChildren(ctx)
833		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 63, "<section aria-labelledby=\"r-refs\"><h2 id=\"r-refs\">Overview</h2>")
834		if templ_7745c5c3_Err != nil {
835			return templ_7745c5c3_Err
836		}
837		templ_7745c5c3_Err = RefsKV(p).Render(ctx, templ_7745c5c3_Buffer)
838		if templ_7745c5c3_Err != nil {
839			return templ_7745c5c3_Err
840		}
841		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 64, "</section>")
842		if templ_7745c5c3_Err != nil {
843			return templ_7745c5c3_Err
844		}
845		return nil
846	})
847}
848
849// State is a 404, 500 or empty-repository page inside the normal shell.
850func State(l Layout, p StatePage) templ.Component {
851	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
852		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
853		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
854			return templ_7745c5c3_CtxErr
855		}
856		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
857		if !templ_7745c5c3_IsBuffer {
858			defer func() {
859				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
860				if templ_7745c5c3_Err == nil {
861					templ_7745c5c3_Err = templ_7745c5c3_BufErr
862				}
863			}()
864		}
865		ctx = templ.InitializeContext(ctx)
866		templ_7745c5c3_Var40 := templ.GetChildren(ctx)
867		if templ_7745c5c3_Var40 == nil {
868			templ_7745c5c3_Var40 = templ.NopComponent
869		}
870		ctx = templ.ClearChildren(ctx)
871		templ_7745c5c3_Var41 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
872			templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
873			templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
874			if !templ_7745c5c3_IsBuffer {
875				defer func() {
876					templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
877					if templ_7745c5c3_Err == nil {
878						templ_7745c5c3_Err = templ_7745c5c3_BufErr
879					}
880				}()
881			}
882			ctx = templ.InitializeContext(ctx)
883			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 65, "<section class=\"state\" aria-labelledby=\"state-title\"><p class=\"eyebrow\">")
884			if templ_7745c5c3_Err != nil {
885				return templ_7745c5c3_Err
886			}
887			var templ_7745c5c3_Var42 string
888			templ_7745c5c3_Var42, templ_7745c5c3_Err = templ.JoinStringErrs(p.Code)
889			if templ_7745c5c3_Err != nil {
890				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 185, Col: 30}
891			}
892			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var42))
893			if templ_7745c5c3_Err != nil {
894				return templ_7745c5c3_Err
895			}
896			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 66, "</p><h1 id=\"state-title\">")
897			if templ_7745c5c3_Err != nil {
898				return templ_7745c5c3_Err
899			}
900			var templ_7745c5c3_Var43 string
901			templ_7745c5c3_Var43, templ_7745c5c3_Err = templ.JoinStringErrs(p.Title)
902			if templ_7745c5c3_Err != nil {
903				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 186, Col: 33}
904			}
905			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var43))
906			if templ_7745c5c3_Err != nil {
907				return templ_7745c5c3_Err
908			}
909			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 67, "</h1>")
910			if templ_7745c5c3_Err != nil {
911				return templ_7745c5c3_Err
912			}
913			for _, line := range p.Lines {
914				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 68, "<p class=\"dim\">")
915				if templ_7745c5c3_Err != nil {
916					return templ_7745c5c3_Err
917				}
918				var templ_7745c5c3_Var44 string
919				templ_7745c5c3_Var44, templ_7745c5c3_Err = templ.JoinStringErrs(line)
920				if templ_7745c5c3_Err != nil {
921					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 188, Col: 25}
922				}
923				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var44))
924				if templ_7745c5c3_Err != nil {
925					return templ_7745c5c3_Err
926				}
927				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 69, "</p>")
928				if templ_7745c5c3_Err != nil {
929					return templ_7745c5c3_Err
930				}
931			}
932			if p.Clone != nil {
933				templ_7745c5c3_Err = CloneBlock(*p.Clone).Render(ctx, templ_7745c5c3_Buffer)
934				if templ_7745c5c3_Err != nil {
935					return templ_7745c5c3_Err
936				}
937			}
938			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, "<p class=\"state-back\">")
939			if templ_7745c5c3_Err != nil {
940				return templ_7745c5c3_Err
941			}
942			for _, b := range p.Back {
943				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 71, "<a href=\"")
944				if templ_7745c5c3_Err != nil {
945					return templ_7745c5c3_Err
946				}
947				var templ_7745c5c3_Var45 templ.SafeURL
948				templ_7745c5c3_Var45, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(b.Href))
949				if templ_7745c5c3_Err != nil {
950					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 195, Col: 36}
951				}
952				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var45))
953				if templ_7745c5c3_Err != nil {
954					return templ_7745c5c3_Err
955				}
956				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 72, "\">")
957				if templ_7745c5c3_Err != nil {
958					return templ_7745c5c3_Err
959				}
960				var templ_7745c5c3_Var46 string
961				templ_7745c5c3_Var46, templ_7745c5c3_Err = templ.JoinStringErrs(b.Label)
962				if templ_7745c5c3_Err != nil {
963					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 195, Col: 48}
964				}
965				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var46))
966				if templ_7745c5c3_Err != nil {
967					return templ_7745c5c3_Err
968				}
969				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 73, "</a>")
970				if templ_7745c5c3_Err != nil {
971					return templ_7745c5c3_Err
972				}
973			}
974			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 74, "</p></section>")
975			if templ_7745c5c3_Err != nil {
976				return templ_7745c5c3_Err
977			}
978			return nil
979		})
980		templ_7745c5c3_Err = Shell(l, nil).Render(templ.WithChildren(ctx, templ_7745c5c3_Var41), templ_7745c5c3_Buffer)
981		if templ_7745c5c3_Err != nil {
982			return templ_7745c5c3_Err
983		}
984		return nil
985	})
986}
987
988// Login signs the browser in with a login link. Opening the link consumes
989// nothing; only this form does. ermite.js submits it as soon as a browser
990// shows the page (data-autosubmit): link previews and prefetchers run no
991// script, so they still cannot use the link. Without scripts the owner
992// clicks the button.
993func Login(l Layout, p LoginPage) templ.Component {
994	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
995		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
996		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
997			return templ_7745c5c3_CtxErr
998		}
999		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1000		if !templ_7745c5c3_IsBuffer {
1001			defer func() {
1002				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1003				if templ_7745c5c3_Err == nil {
1004					templ_7745c5c3_Err = templ_7745c5c3_BufErr
1005				}
1006			}()
1007		}
1008		ctx = templ.InitializeContext(ctx)
1009		templ_7745c5c3_Var47 := templ.GetChildren(ctx)
1010		if templ_7745c5c3_Var47 == nil {
1011			templ_7745c5c3_Var47 = templ.NopComponent
1012		}
1013		ctx = templ.ClearChildren(ctx)
1014		templ_7745c5c3_Var48 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1015			templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1016			templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1017			if !templ_7745c5c3_IsBuffer {
1018				defer func() {
1019					templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1020					if templ_7745c5c3_Err == nil {
1021						templ_7745c5c3_Err = templ_7745c5c3_BufErr
1022					}
1023				}()
1024			}
1025			ctx = templ.InitializeContext(ctx)
1026			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 75, "<section class=\"state\" aria-labelledby=\"state-title\"><h1 id=\"state-title\">")
1027			if templ_7745c5c3_Err != nil {
1028				return templ_7745c5c3_Err
1029			}
1030			var templ_7745c5c3_Var49 string
1031			templ_7745c5c3_Var49, templ_7745c5c3_Err = templ.JoinStringErrs(p.Title)
1032			if templ_7745c5c3_Err != nil {
1033				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 210, Col: 33}
1034			}
1035			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var49))
1036			if templ_7745c5c3_Err != nil {
1037				return templ_7745c5c3_Err
1038			}
1039			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 76, "</h1>")
1040			if templ_7745c5c3_Err != nil {
1041				return templ_7745c5c3_Err
1042			}
1043			for _, line := range p.Lines {
1044				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 77, "<p class=\"dim\">")
1045				if templ_7745c5c3_Err != nil {
1046					return templ_7745c5c3_Err
1047				}
1048				var templ_7745c5c3_Var50 string
1049				templ_7745c5c3_Var50, templ_7745c5c3_Err = templ.JoinStringErrs(line)
1050				if templ_7745c5c3_Err != nil {
1051					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 212, Col: 25}
1052				}
1053				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var50))
1054				if templ_7745c5c3_Err != nil {
1055					return templ_7745c5c3_Err
1056				}
1057				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 78, "</p>")
1058				if templ_7745c5c3_Err != nil {
1059					return templ_7745c5c3_Err
1060				}
1061			}
1062			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 79, "<form class=\"state-act\" method=\"post\" action=\"")
1063			if templ_7745c5c3_Err != nil {
1064				return templ_7745c5c3_Err
1065			}
1066			var templ_7745c5c3_Var51 templ.SafeURL
1067			templ_7745c5c3_Var51, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Action))
1068			if templ_7745c5c3_Err != nil {
1069				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 214, Col: 73}
1070			}
1071			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var51))
1072			if templ_7745c5c3_Err != nil {
1073				return templ_7745c5c3_Err
1074			}
1075			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 80, "\" data-autosubmit><button type=\"submit\" class=\"btn primary\">")
1076			if templ_7745c5c3_Err != nil {
1077				return templ_7745c5c3_Err
1078			}
1079			var templ_7745c5c3_Var52 string
1080			templ_7745c5c3_Var52, templ_7745c5c3_Err = templ.JoinStringErrs(p.Button)
1081			if templ_7745c5c3_Err != nil {
1082				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 215, Col: 56}
1083			}
1084			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var52))
1085			if templ_7745c5c3_Err != nil {
1086				return templ_7745c5c3_Err
1087			}
1088			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 81, "</button></form><p class=\"state-back\"><a href=\"/\">Back to home</a></p></section>")
1089			if templ_7745c5c3_Err != nil {
1090				return templ_7745c5c3_Err
1091			}
1092			return nil
1093		})
1094		templ_7745c5c3_Err = Shell(l, nil).Render(templ.WithChildren(ctx, templ_7745c5c3_Var48), templ_7745c5c3_Buffer)
1095		if templ_7745c5c3_Err != nil {
1096			return templ_7745c5c3_Err
1097		}
1098		return nil
1099	})
1100}
1101
1102// PasskeyLogin is the sign-in page: a button the script (passkey.js) drives.
1103// Without script the button is hidden and the page says what to do instead.
1104func PasskeyLogin(l Layout, p PasskeyLoginPage) templ.Component {
1105	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1106		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1107		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
1108			return templ_7745c5c3_CtxErr
1109		}
1110		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1111		if !templ_7745c5c3_IsBuffer {
1112			defer func() {
1113				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1114				if templ_7745c5c3_Err == nil {
1115					templ_7745c5c3_Err = templ_7745c5c3_BufErr
1116				}
1117			}()
1118		}
1119		ctx = templ.InitializeContext(ctx)
1120		templ_7745c5c3_Var53 := templ.GetChildren(ctx)
1121		if templ_7745c5c3_Var53 == nil {
1122			templ_7745c5c3_Var53 = templ.NopComponent
1123		}
1124		ctx = templ.ClearChildren(ctx)
1125		templ_7745c5c3_Var54 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1126			templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1127			templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1128			if !templ_7745c5c3_IsBuffer {
1129				defer func() {
1130					templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1131					if templ_7745c5c3_Err == nil {
1132						templ_7745c5c3_Err = templ_7745c5c3_BufErr
1133					}
1134				}()
1135			}
1136			ctx = templ.InitializeContext(ctx)
1137			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 82, "<section class=\"state\" aria-labelledby=\"state-title\"><h1 id=\"state-title\">")
1138			if templ_7745c5c3_Err != nil {
1139				return templ_7745c5c3_Err
1140			}
1141			var templ_7745c5c3_Var55 string
1142			templ_7745c5c3_Var55, templ_7745c5c3_Err = templ.JoinStringErrs(p.Title)
1143			if templ_7745c5c3_Err != nil {
1144				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 227, Col: 33}
1145			}
1146			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var55))
1147			if templ_7745c5c3_Err != nil {
1148				return templ_7745c5c3_Err
1149			}
1150			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 83, "</h1><form class=\"state-act\" data-js data-passkey-form><button type=\"submit\" class=\"btn primary\" data-passkey=\"login\" data-begin=\"")
1151			if templ_7745c5c3_Err != nil {
1152				return templ_7745c5c3_Err
1153			}
1154			var templ_7745c5c3_Var56 string
1155			templ_7745c5c3_Var56, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Begin)
1156			if templ_7745c5c3_Err != nil {
1157				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 229, Col: 87}
1158			}
1159			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var56)
1160			if templ_7745c5c3_Err != nil {
1161				return templ_7745c5c3_Err
1162			}
1163			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 84, "\" data-finish=\"")
1164			if templ_7745c5c3_Err != nil {
1165				return templ_7745c5c3_Err
1166			}
1167			var templ_7745c5c3_Var57 string
1168			templ_7745c5c3_Var57, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Finish)
1169			if templ_7745c5c3_Err != nil {
1170				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 229, Col: 112}
1171			}
1172			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var57)
1173			if templ_7745c5c3_Err != nil {
1174				return templ_7745c5c3_Err
1175			}
1176			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 85, "\">")
1177			if templ_7745c5c3_Err != nil {
1178				return templ_7745c5c3_Err
1179			}
1180			var templ_7745c5c3_Var58 string
1181			templ_7745c5c3_Var58, templ_7745c5c3_Err = templ.JoinStringErrs(p.Button)
1182			if templ_7745c5c3_Err != nil {
1183				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 229, Col: 125}
1184			}
1185			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var58))
1186			if templ_7745c5c3_Err != nil {
1187				return templ_7745c5c3_Err
1188			}
1189			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 86, "</button></form><p class=\"dim\" role=\"status\" aria-live=\"polite\" data-passkey-status></p>")
1190			if templ_7745c5c3_Err != nil {
1191				return templ_7745c5c3_Err
1192			}
1193			for _, line := range p.Lines {
1194				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 87, "<p class=\"dim\">")
1195				if templ_7745c5c3_Err != nil {
1196					return templ_7745c5c3_Err
1197				}
1198				var templ_7745c5c3_Var59 string
1199				templ_7745c5c3_Var59, templ_7745c5c3_Err = templ.JoinStringErrs(line)
1200				if templ_7745c5c3_Err != nil {
1201					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 233, Col: 25}
1202				}
1203				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var59))
1204				if templ_7745c5c3_Err != nil {
1205					return templ_7745c5c3_Err
1206				}
1207				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 88, "</p>")
1208				if templ_7745c5c3_Err != nil {
1209					return templ_7745c5c3_Err
1210				}
1211			}
1212			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 89, "<p class=\"state-back\"><a href=\"/\">Back to home</a></p></section>")
1213			if templ_7745c5c3_Err != nil {
1214				return templ_7745c5c3_Err
1215			}
1216			return nil
1217		})
1218		templ_7745c5c3_Err = Shell(l, nil).Render(templ.WithChildren(ctx, templ_7745c5c3_Var54), templ_7745c5c3_Buffer)
1219		if templ_7745c5c3_Err != nil {
1220			return templ_7745c5c3_Err
1221		}
1222		return nil
1223	})
1224}
1225
1226// Passkeys lists the owner's passkeys, removes them and adds one.
1227func Passkeys(l Layout, p PasskeysPage) templ.Component {
1228	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1229		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1230		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
1231			return templ_7745c5c3_CtxErr
1232		}
1233		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1234		if !templ_7745c5c3_IsBuffer {
1235			defer func() {
1236				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1237				if templ_7745c5c3_Err == nil {
1238					templ_7745c5c3_Err = templ_7745c5c3_BufErr
1239				}
1240			}()
1241		}
1242		ctx = templ.InitializeContext(ctx)
1243		templ_7745c5c3_Var60 := templ.GetChildren(ctx)
1244		if templ_7745c5c3_Var60 == nil {
1245			templ_7745c5c3_Var60 = templ.NopComponent
1246		}
1247		ctx = templ.ClearChildren(ctx)
1248		templ_7745c5c3_Var61 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1249			templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1250			templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1251			if !templ_7745c5c3_IsBuffer {
1252				defer func() {
1253					templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1254					if templ_7745c5c3_Err == nil {
1255						templ_7745c5c3_Err = templ_7745c5c3_BufErr
1256					}
1257				}()
1258			}
1259			ctx = templ.InitializeContext(ctx)
1260			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 90, "<h2 class=\"rule-h\"><span>Passkeys</span><span class=\"count\">")
1261			if templ_7745c5c3_Err != nil {
1262				return templ_7745c5c3_Err
1263			}
1264			var templ_7745c5c3_Var62 string
1265			templ_7745c5c3_Var62, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Rows)))
1266			if templ_7745c5c3_Err != nil {
1267				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 243, Col: 81}
1268			}
1269			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var62))
1270			if templ_7745c5c3_Err != nil {
1271				return templ_7745c5c3_Err
1272			}
1273			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 91, "</span></h2><p class=\"dim\">A passkey signs you in from this device or your phone, without a terminal. Removing one signs every browser out.</p>")
1274			if templ_7745c5c3_Err != nil {
1275				return templ_7745c5c3_Err
1276			}
1277			if len(p.Rows) > 0 {
1278				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 92, "<table class=\"list passkeys\" aria-label=\"Passkeys\"><thead><tr><th class=\"c-name\">Name</th><th class=\"c-when\">Created</th><th class=\"c-when\">Last used</th><th class=\"c-sync\">Synced</th><th class=\"c-act\"><span class=\"sr\">Remove</span></th></tr></thead> <tbody>")
1279				if templ_7745c5c3_Err != nil {
1280					return templ_7745c5c3_Err
1281				}
1282				for _, r := range p.Rows {
1283					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 93, "<tr><td class=\"c-name\">")
1284					if templ_7745c5c3_Err != nil {
1285						return templ_7745c5c3_Err
1286					}
1287					var templ_7745c5c3_Var63 string
1288					templ_7745c5c3_Var63, templ_7745c5c3_Err = templ.JoinStringErrs(r.Name)
1289					if templ_7745c5c3_Err != nil {
1290						return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 259, Col: 34}
1291					}
1292					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var63))
1293					if templ_7745c5c3_Err != nil {
1294						return templ_7745c5c3_Err
1295					}
1296					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 94, "</td><td class=\"c-when nowrap\"><time")
1297					if templ_7745c5c3_Err != nil {
1298						return templ_7745c5c3_Err
1299					}
1300					if r.CreatedAt != "" {
1301						templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 95, " datetime=\"")
1302						if templ_7745c5c3_Err != nil {
1303							return templ_7745c5c3_Err
1304						}
1305						var templ_7745c5c3_Var64 string
1306						templ_7745c5c3_Var64, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.CreatedAt)
1307						if templ_7745c5c3_Err != nil {
1308							return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 263, Col: 32}
1309						}
1310						_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var64)
1311						if templ_7745c5c3_Err != nil {
1312							return templ_7745c5c3_Err
1313						}
1314						templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 96, "\"")
1315						if templ_7745c5c3_Err != nil {
1316							return templ_7745c5c3_Err
1317						}
1318					}
1319					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 97, ">")
1320					if templ_7745c5c3_Err != nil {
1321						return templ_7745c5c3_Err
1322					}
1323					var templ_7745c5c3_Var65 string
1324					templ_7745c5c3_Var65, templ_7745c5c3_Err = templ.JoinStringErrs(r.Created)
1325					if templ_7745c5c3_Err != nil {
1326						return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 265, Col: 20}
1327					}
1328					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var65))
1329					if templ_7745c5c3_Err != nil {
1330						return templ_7745c5c3_Err
1331					}
1332					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 98, "</time></td><td class=\"c-when nowrap\"><time")
1333					if templ_7745c5c3_Err != nil {
1334						return templ_7745c5c3_Err
1335					}
1336					if r.LastUsedAt != "" {
1337						templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 99, " datetime=\"")
1338						if templ_7745c5c3_Err != nil {
1339							return templ_7745c5c3_Err
1340						}
1341						var templ_7745c5c3_Var66 string
1342						templ_7745c5c3_Var66, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.LastUsedAt)
1343						if templ_7745c5c3_Err != nil {
1344							return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 270, Col: 33}
1345						}
1346						_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var66)
1347						if templ_7745c5c3_Err != nil {
1348							return templ_7745c5c3_Err
1349						}
1350						templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 100, "\"")
1351						if templ_7745c5c3_Err != nil {
1352							return templ_7745c5c3_Err
1353						}
1354					}
1355					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 101, ">")
1356					if templ_7745c5c3_Err != nil {
1357						return templ_7745c5c3_Err
1358					}
1359					var templ_7745c5c3_Var67 string
1360					templ_7745c5c3_Var67, templ_7745c5c3_Err = templ.JoinStringErrs(r.LastUsed)
1361					if templ_7745c5c3_Err != nil {
1362						return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 272, Col: 21}
1363					}
1364					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var67))
1365					if templ_7745c5c3_Err != nil {
1366						return templ_7745c5c3_Err
1367					}
1368					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 102, "</time></td><td class=\"c-sync\">")
1369					if templ_7745c5c3_Err != nil {
1370						return templ_7745c5c3_Err
1371					}
1372					if r.Synced {
1373						templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 103, "yes")
1374						if templ_7745c5c3_Err != nil {
1375							return templ_7745c5c3_Err
1376						}
1377					} else {
1378						templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 104, "no")
1379						if templ_7745c5c3_Err != nil {
1380							return templ_7745c5c3_Err
1381						}
1382					}
1383					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 105, "</td><td class=\"c-act\"><form method=\"post\" action=\"")
1384					if templ_7745c5c3_Err != nil {
1385						return templ_7745c5c3_Err
1386					}
1387					var templ_7745c5c3_Var68 templ.SafeURL
1388					templ_7745c5c3_Var68, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(r.Remove))
1389					if templ_7745c5c3_Err != nil {
1390						return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 282, Col: 60}
1391					}
1392					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var68))
1393					if templ_7745c5c3_Err != nil {
1394						return templ_7745c5c3_Err
1395					}
1396					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 106, "\"><button type=\"submit\" class=\"btn danger\" aria-label=\"")
1397					if templ_7745c5c3_Err != nil {
1398						return templ_7745c5c3_Err
1399					}
1400					var templ_7745c5c3_Var69 string
1401					templ_7745c5c3_Var69, templ_7745c5c3_Err = templ.ResolveAttributeValue("Remove passkey " + r.Name)
1402					if templ_7745c5c3_Err != nil {
1403						return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 283, Col: 89}
1404					}
1405					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var69)
1406					if templ_7745c5c3_Err != nil {
1407						return templ_7745c5c3_Err
1408					}
1409					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 107, "\">Remove</button></form></td></tr>")
1410					if templ_7745c5c3_Err != nil {
1411						return templ_7745c5c3_Err
1412					}
1413				}
1414				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 108, "</tbody></table>")
1415				if templ_7745c5c3_Err != nil {
1416					return templ_7745c5c3_Err
1417				}
1418			} else {
1419				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 109, "<p class=\"lede dim\">no passkeys yet.</p>")
1420				if templ_7745c5c3_Err != nil {
1421					return templ_7745c5c3_Err
1422				}
1423			}
1424			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 110, " ")
1425			if templ_7745c5c3_Err != nil {
1426				return templ_7745c5c3_Err
1427			}
1428			if p.Full {
1429				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 111, "<p class=\"dim\">")
1430				if templ_7745c5c3_Err != nil {
1431					return templ_7745c5c3_Err
1432				}
1433				var templ_7745c5c3_Var70 string
1434				templ_7745c5c3_Var70, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Max))
1435				if templ_7745c5c3_Err != nil {
1436					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 294, Col: 31}
1437				}
1438				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var70))
1439				if templ_7745c5c3_Err != nil {
1440					return templ_7745c5c3_Err
1441				}
1442				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 112, " passkeys are registered, the most there can be. Remove one to add another.</p>")
1443				if templ_7745c5c3_Err != nil {
1444					return templ_7745c5c3_Err
1445				}
1446			} else {
1447				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 113, "<form class=\"passkey-add\" data-js data-passkey-form><label for=\"passkey-name\" class=\"sr\">Name of the new passkey</label> <input id=\"passkey-name\" type=\"text\" placeholder=\"Name, for example Pixel 9\" autocomplete=\"off\" data-passkey-name> <button type=\"submit\" class=\"btn primary\" data-passkey=\"register\" data-begin=\"")
1448				if templ_7745c5c3_Err != nil {
1449					return templ_7745c5c3_Err
1450				}
1451				var templ_7745c5c3_Var71 string
1452				templ_7745c5c3_Var71, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Begin)
1453				if templ_7745c5c3_Err != nil {
1454					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 299, Col: 90}
1455				}
1456				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var71)
1457				if templ_7745c5c3_Err != nil {
1458					return templ_7745c5c3_Err
1459				}
1460				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 114, "\" data-finish=\"")
1461				if templ_7745c5c3_Err != nil {
1462					return templ_7745c5c3_Err
1463				}
1464				var templ_7745c5c3_Var72 string
1465				templ_7745c5c3_Var72, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Finish)
1466				if templ_7745c5c3_Err != nil {
1467					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 299, Col: 115}
1468				}
1469				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var72)
1470				if templ_7745c5c3_Err != nil {
1471					return templ_7745c5c3_Err
1472				}
1473				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 115, "\">Add a passkey</button></form>")
1474				if templ_7745c5c3_Err != nil {
1475					return templ_7745c5c3_Err
1476				}
1477			}
1478			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 116, " <p class=\"dim\" role=\"status\" aria-live=\"polite\" data-passkey-status></p>")
1479			if templ_7745c5c3_Err != nil {
1480				return templ_7745c5c3_Err
1481			}
1482			return nil
1483		})
1484		templ_7745c5c3_Err = Shell(l, nil).Render(templ.WithChildren(ctx, templ_7745c5c3_Var61), templ_7745c5c3_Buffer)
1485		if templ_7745c5c3_Err != nil {
1486			return templ_7745c5c3_Err
1487		}
1488		return nil
1489	})
1490}
1491
1492var _ = 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