v0.34.0 7c1886f

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		if p.Mirror != nil {
442			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 31, "<section aria-labelledby=\"r-mirror\"><h2 id=\"r-mirror\">Mirror</h2><p>⚠ Mirror ")
443			if templ_7745c5c3_Err != nil {
444				return templ_7745c5c3_Err
445			}
446			var templ_7745c5c3_Var23 string
447			templ_7745c5c3_Var23, templ_7745c5c3_Err = templ.JoinStringErrs(p.Mirror.State)
448			if templ_7745c5c3_Err != nil {
449				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 98, Col: 33}
450			}
451			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var23))
452			if templ_7745c5c3_Err != nil {
453				return templ_7745c5c3_Err
454			}
455			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 32, "</p>")
456			if templ_7745c5c3_Err != nil {
457				return templ_7745c5c3_Err
458			}
459			if p.Mirror.Reason != "" {
460				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, "<p>")
461				if templ_7745c5c3_Err != nil {
462					return templ_7745c5c3_Err
463				}
464				var templ_7745c5c3_Var24 string
465				templ_7745c5c3_Var24, templ_7745c5c3_Err = templ.JoinStringErrs(p.Mirror.Reason)
466				if templ_7745c5c3_Err != nil {
467					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 100, Col: 24}
468				}
469				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var24))
470				if templ_7745c5c3_Err != nil {
471					return templ_7745c5c3_Err
472				}
473				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 34, "</p>")
474				if templ_7745c5c3_Err != nil {
475					return templ_7745c5c3_Err
476				}
477			}
478			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 35, "<p>Run <code>")
479			if templ_7745c5c3_Err != nil {
480				return templ_7745c5c3_Err
481			}
482			var templ_7745c5c3_Var25 string
483			templ_7745c5c3_Var25, templ_7745c5c3_Err = templ.JoinStringErrs(p.Mirror.Command)
484			if templ_7745c5c3_Err != nil {
485				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 102, Col: 34}
486			}
487			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var25))
488			if templ_7745c5c3_Err != nil {
489				return templ_7745c5c3_Err
490			}
491			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, "</code></p></section>")
492			if templ_7745c5c3_Err != nil {
493				return templ_7745c5c3_Err
494			}
495		}
496		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 37, "<section aria-labelledby=\"r-clone\"><h2 id=\"r-clone\">Clone</h2>")
497		if templ_7745c5c3_Err != nil {
498			return templ_7745c5c3_Err
499		}
500		templ_7745c5c3_Err = CloneBlock(p.Clone).Render(ctx, templ_7745c5c3_Buffer)
501		if templ_7745c5c3_Err != nil {
502			return templ_7745c5c3_Err
503		}
504		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, "</section><section aria-labelledby=\"r-facts\"><h2 id=\"r-facts\">About</h2><dl class=\"kv\">")
505		if templ_7745c5c3_Err != nil {
506			return templ_7745c5c3_Err
507		}
508		for _, f := range p.Facts {
509			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, "<dt>")
510			if templ_7745c5c3_Err != nil {
511				return templ_7745c5c3_Err
512			}
513			var templ_7745c5c3_Var26 string
514			templ_7745c5c3_Var26, templ_7745c5c3_Err = templ.JoinStringErrs(f.Key)
515			if templ_7745c5c3_Err != nil {
516				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 112, Col: 15}
517			}
518			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var26))
519			if templ_7745c5c3_Err != nil {
520				return templ_7745c5c3_Err
521			}
522			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, "</dt>")
523			if templ_7745c5c3_Err != nil {
524				return templ_7745c5c3_Err
525			}
526			templ_7745c5c3_Err = FactValue(f).Render(ctx, templ_7745c5c3_Buffer)
527			if templ_7745c5c3_Err != nil {
528				return templ_7745c5c3_Err
529			}
530		}
531		if p.Latest != nil {
532			templ_7745c5c3_Err = latestTagFact(*p.Latest).Render(ctx, templ_7745c5c3_Buffer)
533			if templ_7745c5c3_Err != nil {
534				return templ_7745c5c3_Err
535			}
536		}
537		if r := p.Release; r != nil {
538			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, "<dt>release</dt><dd><a href=\"")
539			if templ_7745c5c3_Err != nil {
540				return templ_7745c5c3_Err
541			}
542			var templ_7745c5c3_Var27 templ.SafeURL
543			templ_7745c5c3_Var27, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(r.Href))
544			if templ_7745c5c3_Err != nil {
545				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 121, Col: 36}
546			}
547			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var27))
548			if templ_7745c5c3_Err != nil {
549				return templ_7745c5c3_Err
550			}
551			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "\">")
552			if templ_7745c5c3_Err != nil {
553				return templ_7745c5c3_Err
554			}
555			var templ_7745c5c3_Var28 string
556			templ_7745c5c3_Var28, templ_7745c5c3_Err = templ.JoinStringErrs(r.Tag)
557			if templ_7745c5c3_Err != nil {
558				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 121, Col: 46}
559			}
560			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var28))
561			if templ_7745c5c3_Err != nil {
562				return templ_7745c5c3_Err
563			}
564			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "</a>")
565			if templ_7745c5c3_Err != nil {
566				return templ_7745c5c3_Err
567			}
568			var templ_7745c5c3_Var29 string
569			templ_7745c5c3_Var29, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")
570			if templ_7745c5c3_Err != nil {
571				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 121, Col: 60}
572			}
573			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var29))
574			if templ_7745c5c3_Err != nil {
575				return templ_7745c5c3_Err
576			}
577			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, " <time datetime=\"")
578			if templ_7745c5c3_Err != nil {
579				return templ_7745c5c3_Err
580			}
581			var templ_7745c5c3_Var30 string
582			templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.WhenAt)
583			if templ_7745c5c3_Err != nil {
584				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 122, Col: 30}
585			}
586			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var30)
587			if templ_7745c5c3_Err != nil {
588				return templ_7745c5c3_Err
589			}
590			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "\" title=\"")
591			if templ_7745c5c3_Err != nil {
592				return templ_7745c5c3_Err
593			}
594			var templ_7745c5c3_Var31 string
595			templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.WhenAt)
596			if templ_7745c5c3_Err != nil {
597				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 122, Col: 49}
598			}
599			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var31)
600			if templ_7745c5c3_Err != nil {
601				return templ_7745c5c3_Err
602			}
603			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 46, "\">")
604			if templ_7745c5c3_Err != nil {
605				return templ_7745c5c3_Err
606			}
607			var templ_7745c5c3_Var32 string
608			templ_7745c5c3_Var32, templ_7745c5c3_Err = templ.JoinStringErrs(r.When)
609			if templ_7745c5c3_Err != nil {
610				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 122, Col: 60}
611			}
612			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var32))
613			if templ_7745c5c3_Err != nil {
614				return templ_7745c5c3_Err
615			}
616			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 47, "</time>")
617			if templ_7745c5c3_Err != nil {
618				return templ_7745c5c3_Err
619			}
620			var templ_7745c5c3_Var33 string
621			templ_7745c5c3_Var33, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")
622			if templ_7745c5c3_Err != nil {
623				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 122, Col: 77}
624			}
625			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var33))
626			if templ_7745c5c3_Err != nil {
627				return templ_7745c5c3_Err
628			}
629			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, " <a href=\"")
630			if templ_7745c5c3_Err != nil {
631				return templ_7745c5c3_Err
632			}
633			var templ_7745c5c3_Var34 templ.SafeURL
634			templ_7745c5c3_Var34, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(r.AllHref))
635			if templ_7745c5c3_Err != nil {
636				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 123, Col: 39}
637			}
638			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var34))
639			if templ_7745c5c3_Err != nil {
640				return templ_7745c5c3_Err
641			}
642			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 49, "\">all releases</a></dd>")
643			if templ_7745c5c3_Err != nil {
644				return templ_7745c5c3_Err
645			}
646		}
647		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 50, "</dl></section>")
648		if templ_7745c5c3_Err != nil {
649			return templ_7745c5c3_Err
650		}
651		if len(p.Recent) > 0 {
652			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 51, "<section aria-labelledby=\"r-recent\"><h2 id=\"r-recent\">Recent commits <a href=\"")
653			if templ_7745c5c3_Err != nil {
654				return templ_7745c5c3_Err
655			}
656			var templ_7745c5c3_Var35 templ.SafeURL
657			templ_7745c5c3_Var35, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.AllHref))
658			if templ_7745c5c3_Err != nil {
659				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 129, Col: 105}
660			}
661			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var35))
662			if templ_7745c5c3_Err != nil {
663				return templ_7745c5c3_Err
664			}
665			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 52, "\">View all</a></h2>")
666			if templ_7745c5c3_Err != nil {
667				return templ_7745c5c3_Err
668			}
669			templ_7745c5c3_Err = CommitRows(p.Recent).Render(ctx, templ_7745c5c3_Buffer)
670			if templ_7745c5c3_Err != nil {
671				return templ_7745c5c3_Err
672			}
673			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 53, "</section>")
674			if templ_7745c5c3_Err != nil {
675				return templ_7745c5c3_Err
676			}
677		}
678		if p.Actions != nil {
679			templ_7745c5c3_Err = RecentActionsBlock(*p.Actions).Render(ctx, templ_7745c5c3_Buffer)
680			if templ_7745c5c3_Err != nil {
681				return templ_7745c5c3_Err
682			}
683		}
684		if len(p.Outline) > 0 && p.Readme != nil {
685			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 54, "<section aria-labelledby=\"r-outline\"><h2 id=\"r-outline\">On this page</h2>")
686			if templ_7745c5c3_Err != nil {
687				return templ_7745c5c3_Err
688			}
689			templ_7745c5c3_Err = Outline(p.Outline).Render(ctx, templ_7745c5c3_Buffer)
690			if templ_7745c5c3_Err != nil {
691				return templ_7745c5c3_Err
692			}
693			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, "</section>")
694			if templ_7745c5c3_Err != nil {
695				return templ_7745c5c3_Err
696			}
697		}
698		return nil
699	})
700}
701
702// Refs lists the branches and tags of a repository.
703func Refs(l Layout, p RefsPage) templ.Component {
704	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
705		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
706		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
707			return templ_7745c5c3_CtxErr
708		}
709		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
710		if !templ_7745c5c3_IsBuffer {
711			defer func() {
712				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
713				if templ_7745c5c3_Err == nil {
714					templ_7745c5c3_Err = templ_7745c5c3_BufErr
715				}
716			}()
717		}
718		ctx = templ.InitializeContext(ctx)
719		templ_7745c5c3_Var36 := templ.GetChildren(ctx)
720		if templ_7745c5c3_Var36 == nil {
721			templ_7745c5c3_Var36 = templ.NopComponent
722		}
723		ctx = templ.ClearChildren(ctx)
724		templ_7745c5c3_Var37 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
725			templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
726			templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
727			if !templ_7745c5c3_IsBuffer {
728				defer func() {
729					templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
730					if templ_7745c5c3_Err == nil {
731						templ_7745c5c3_Err = templ_7745c5c3_BufErr
732					}
733				}()
734			}
735			ctx = templ.InitializeContext(ctx)
736			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 56, "<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>")
737			if templ_7745c5c3_Err != nil {
738				return templ_7745c5c3_Err
739			}
740			templ_7745c5c3_Err = RefsBody(p).Render(ctx, templ_7745c5c3_Buffer)
741			if templ_7745c5c3_Err != nil {
742				return templ_7745c5c3_Err
743			}
744			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "</table>")
745			if templ_7745c5c3_Err != nil {
746				return templ_7745c5c3_Err
747			}
748			if p.Note != "" {
749				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "<p class=\"note\">")
750				if templ_7745c5c3_Err != nil {
751					return templ_7745c5c3_Err
752				}
753				var templ_7745c5c3_Var38 string
754				templ_7745c5c3_Var38, templ_7745c5c3_Err = templ.JoinStringErrs(p.Note)
755				if templ_7745c5c3_Err != nil {
756					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 162, Col: 27}
757				}
758				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var38))
759				if templ_7745c5c3_Err != nil {
760					return templ_7745c5c3_Err
761				}
762				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, "</p>")
763				if templ_7745c5c3_Err != nil {
764					return templ_7745c5c3_Err
765				}
766			}
767			return nil
768		})
769		templ_7745c5c3_Err = Shell(l, refsRail(p)).Render(templ.WithChildren(ctx, templ_7745c5c3_Var37), templ_7745c5c3_Buffer)
770		if templ_7745c5c3_Err != nil {
771			return templ_7745c5c3_Err
772		}
773		return nil
774	})
775}
776
777func refRow(kind string, r RefRow) templ.Component {
778	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
779		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
780		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
781			return templ_7745c5c3_CtxErr
782		}
783		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
784		if !templ_7745c5c3_IsBuffer {
785			defer func() {
786				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
787				if templ_7745c5c3_Err == nil {
788					templ_7745c5c3_Err = templ_7745c5c3_BufErr
789				}
790			}()
791		}
792		ctx = templ.InitializeContext(ctx)
793		templ_7745c5c3_Var39 := templ.GetChildren(ctx)
794		if templ_7745c5c3_Var39 == nil {
795			templ_7745c5c3_Var39 = templ.NopComponent
796		}
797		ctx = templ.ClearChildren(ctx)
798		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 60, "<tr")
799		if templ_7745c5c3_Err != nil {
800			return templ_7745c5c3_Err
801		}
802		if r.Cursor {
803			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, " data-cursor")
804			if templ_7745c5c3_Err != nil {
805				return templ_7745c5c3_Err
806			}
807		}
808		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, "><td class=\"c-kind mute\">")
809		if templ_7745c5c3_Err != nil {
810			return templ_7745c5c3_Err
811		}
812		var templ_7745c5c3_Var40 string
813		templ_7745c5c3_Var40, templ_7745c5c3_Err = templ.JoinStringErrs(kind)
814		if templ_7745c5c3_Err != nil {
815			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 169, Col: 32}
816		}
817		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var40))
818		if templ_7745c5c3_Err != nil {
819			return templ_7745c5c3_Err
820		}
821		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 63, "</td><td class=\"c-name\"><a href=\"")
822		if templ_7745c5c3_Err != nil {
823			return templ_7745c5c3_Err
824		}
825		var templ_7745c5c3_Var41 templ.SafeURL
826		templ_7745c5c3_Var41, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(r.Href))
827		if templ_7745c5c3_Err != nil {
828			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 171, Col: 34}
829		}
830		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var41))
831		if templ_7745c5c3_Err != nil {
832			return templ_7745c5c3_Err
833		}
834		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 64, "\">")
835		if templ_7745c5c3_Err != nil {
836			return templ_7745c5c3_Err
837		}
838		var templ_7745c5c3_Var42 string
839		templ_7745c5c3_Var42, templ_7745c5c3_Err = templ.JoinStringErrs(r.Name)
840		if templ_7745c5c3_Err != nil {
841			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 171, Col: 45}
842		}
843		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var42))
844		if templ_7745c5c3_Err != nil {
845			return templ_7745c5c3_Err
846		}
847		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 65, "</a> ")
848		if templ_7745c5c3_Err != nil {
849			return templ_7745c5c3_Err
850		}
851		if r.Default {
852			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 66, "<span class=\"pill\">default</span>")
853			if templ_7745c5c3_Err != nil {
854				return templ_7745c5c3_Err
855			}
856		}
857		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 67, "</td><td class=\"c-sha\">")
858		if templ_7745c5c3_Err != nil {
859			return templ_7745c5c3_Err
860		}
861		if r.CHref != "" {
862			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 68, "<a href=\"")
863			if templ_7745c5c3_Err != nil {
864				return templ_7745c5c3_Err
865			}
866			var templ_7745c5c3_Var43 templ.SafeURL
867			templ_7745c5c3_Var43, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(r.CHref))
868			if templ_7745c5c3_Err != nil {
869				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 178, Col: 36}
870			}
871			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var43))
872			if templ_7745c5c3_Err != nil {
873				return templ_7745c5c3_Err
874			}
875			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 69, "\">")
876			if templ_7745c5c3_Err != nil {
877				return templ_7745c5c3_Err
878			}
879			var templ_7745c5c3_Var44 string
880			templ_7745c5c3_Var44, templ_7745c5c3_Err = templ.JoinStringErrs(r.Short)
881			if templ_7745c5c3_Err != nil {
882				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 178, Col: 48}
883			}
884			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var44))
885			if templ_7745c5c3_Err != nil {
886				return templ_7745c5c3_Err
887			}
888			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, "</a>")
889			if templ_7745c5c3_Err != nil {
890				return templ_7745c5c3_Err
891			}
892		} else {
893			var templ_7745c5c3_Var45 string
894			templ_7745c5c3_Var45, templ_7745c5c3_Err = templ.JoinStringErrs(r.Short)
895			if templ_7745c5c3_Err != nil {
896				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 180, Col: 13}
897			}
898			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var45))
899			if templ_7745c5c3_Err != nil {
900				return templ_7745c5c3_Err
901			}
902		}
903		templ_7745c5c3_Err = CommitChecks(r.Checks).Render(ctx, templ_7745c5c3_Buffer)
904		if templ_7745c5c3_Err != nil {
905			return templ_7745c5c3_Err
906		}
907		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 71, "</td><td class=\"c-sub\">")
908		if templ_7745c5c3_Err != nil {
909			return templ_7745c5c3_Err
910		}
911		var templ_7745c5c3_Var46 string
912		templ_7745c5c3_Var46, templ_7745c5c3_Err = templ.JoinStringErrs(r.Subject)
913		if templ_7745c5c3_Err != nil {
914			return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 184, Col: 31}
915		}
916		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var46))
917		if templ_7745c5c3_Err != nil {
918			return templ_7745c5c3_Err
919		}
920		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 72, "</td><td class=\"c-when dim\">")
921		if templ_7745c5c3_Err != nil {
922			return templ_7745c5c3_Err
923		}
924		if r.WhenAt != "" {
925			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 73, "<time datetime=\"")
926			if templ_7745c5c3_Err != nil {
927				return templ_7745c5c3_Err
928			}
929			var templ_7745c5c3_Var47 string
930			templ_7745c5c3_Var47, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.WhenAt)
931			if templ_7745c5c3_Err != nil {
932				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 187, Col: 29}
933			}
934			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var47)
935			if templ_7745c5c3_Err != nil {
936				return templ_7745c5c3_Err
937			}
938			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 74, "\" title=\"")
939			if templ_7745c5c3_Err != nil {
940				return templ_7745c5c3_Err
941			}
942			var templ_7745c5c3_Var48 string
943			templ_7745c5c3_Var48, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.WhenAt)
944			if templ_7745c5c3_Err != nil {
945				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 187, Col: 48}
946			}
947			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var48)
948			if templ_7745c5c3_Err != nil {
949				return templ_7745c5c3_Err
950			}
951			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 75, "\">")
952			if templ_7745c5c3_Err != nil {
953				return templ_7745c5c3_Err
954			}
955			var templ_7745c5c3_Var49 string
956			templ_7745c5c3_Var49, templ_7745c5c3_Err = templ.JoinStringErrs(r.When)
957			if templ_7745c5c3_Err != nil {
958				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 187, Col: 59}
959			}
960			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var49))
961			if templ_7745c5c3_Err != nil {
962				return templ_7745c5c3_Err
963			}
964			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 76, "</time>")
965			if templ_7745c5c3_Err != nil {
966				return templ_7745c5c3_Err
967			}
968		}
969		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 77, "</td></tr>")
970		if templ_7745c5c3_Err != nil {
971			return templ_7745c5c3_Err
972		}
973		return nil
974	})
975}
976
977func refsRail(p RefsPage) templ.Component {
978	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
979		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
980		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
981			return templ_7745c5c3_CtxErr
982		}
983		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
984		if !templ_7745c5c3_IsBuffer {
985			defer func() {
986				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
987				if templ_7745c5c3_Err == nil {
988					templ_7745c5c3_Err = templ_7745c5c3_BufErr
989				}
990			}()
991		}
992		ctx = templ.InitializeContext(ctx)
993		templ_7745c5c3_Var50 := templ.GetChildren(ctx)
994		if templ_7745c5c3_Var50 == nil {
995			templ_7745c5c3_Var50 = templ.NopComponent
996		}
997		ctx = templ.ClearChildren(ctx)
998		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 78, "<section aria-labelledby=\"r-refs\"><h2 id=\"r-refs\">Overview</h2>")
999		if templ_7745c5c3_Err != nil {
1000			return templ_7745c5c3_Err
1001		}
1002		templ_7745c5c3_Err = RefsKV(p).Render(ctx, templ_7745c5c3_Buffer)
1003		if templ_7745c5c3_Err != nil {
1004			return templ_7745c5c3_Err
1005		}
1006		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 79, "</section>")
1007		if templ_7745c5c3_Err != nil {
1008			return templ_7745c5c3_Err
1009		}
1010		return nil
1011	})
1012}
1013
1014// State is a 404, 500 or empty-repository page inside the normal shell.
1015func State(l Layout, p StatePage) templ.Component {
1016	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1017		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1018		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
1019			return templ_7745c5c3_CtxErr
1020		}
1021		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1022		if !templ_7745c5c3_IsBuffer {
1023			defer func() {
1024				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1025				if templ_7745c5c3_Err == nil {
1026					templ_7745c5c3_Err = templ_7745c5c3_BufErr
1027				}
1028			}()
1029		}
1030		ctx = templ.InitializeContext(ctx)
1031		templ_7745c5c3_Var51 := templ.GetChildren(ctx)
1032		if templ_7745c5c3_Var51 == nil {
1033			templ_7745c5c3_Var51 = templ.NopComponent
1034		}
1035		ctx = templ.ClearChildren(ctx)
1036		templ_7745c5c3_Var52 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1037			templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1038			templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1039			if !templ_7745c5c3_IsBuffer {
1040				defer func() {
1041					templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1042					if templ_7745c5c3_Err == nil {
1043						templ_7745c5c3_Err = templ_7745c5c3_BufErr
1044					}
1045				}()
1046			}
1047			ctx = templ.InitializeContext(ctx)
1048			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 80, "<section class=\"state\" aria-labelledby=\"state-title\"><p class=\"eyebrow\">")
1049			if templ_7745c5c3_Err != nil {
1050				return templ_7745c5c3_Err
1051			}
1052			var templ_7745c5c3_Var53 string
1053			templ_7745c5c3_Var53, templ_7745c5c3_Err = templ.JoinStringErrs(p.Code)
1054			if templ_7745c5c3_Err != nil {
1055				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 204, Col: 30}
1056			}
1057			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var53))
1058			if templ_7745c5c3_Err != nil {
1059				return templ_7745c5c3_Err
1060			}
1061			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 81, "</p><h1 id=\"state-title\">")
1062			if templ_7745c5c3_Err != nil {
1063				return templ_7745c5c3_Err
1064			}
1065			var templ_7745c5c3_Var54 string
1066			templ_7745c5c3_Var54, templ_7745c5c3_Err = templ.JoinStringErrs(p.Title)
1067			if templ_7745c5c3_Err != nil {
1068				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 205, Col: 33}
1069			}
1070			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var54))
1071			if templ_7745c5c3_Err != nil {
1072				return templ_7745c5c3_Err
1073			}
1074			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 82, "</h1>")
1075			if templ_7745c5c3_Err != nil {
1076				return templ_7745c5c3_Err
1077			}
1078			for _, line := range p.Lines {
1079				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 83, "<p class=\"dim\">")
1080				if templ_7745c5c3_Err != nil {
1081					return templ_7745c5c3_Err
1082				}
1083				var templ_7745c5c3_Var55 string
1084				templ_7745c5c3_Var55, templ_7745c5c3_Err = templ.JoinStringErrs(line)
1085				if templ_7745c5c3_Err != nil {
1086					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 207, Col: 25}
1087				}
1088				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var55))
1089				if templ_7745c5c3_Err != nil {
1090					return templ_7745c5c3_Err
1091				}
1092				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 84, "</p>")
1093				if templ_7745c5c3_Err != nil {
1094					return templ_7745c5c3_Err
1095				}
1096			}
1097			if p.Clone != nil {
1098				templ_7745c5c3_Err = CloneBlock(*p.Clone).Render(ctx, templ_7745c5c3_Buffer)
1099				if templ_7745c5c3_Err != nil {
1100					return templ_7745c5c3_Err
1101				}
1102			}
1103			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 85, "<p class=\"state-back\">")
1104			if templ_7745c5c3_Err != nil {
1105				return templ_7745c5c3_Err
1106			}
1107			for _, b := range p.Back {
1108				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 86, "<a href=\"")
1109				if templ_7745c5c3_Err != nil {
1110					return templ_7745c5c3_Err
1111				}
1112				var templ_7745c5c3_Var56 templ.SafeURL
1113				templ_7745c5c3_Var56, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(b.Href))
1114				if templ_7745c5c3_Err != nil {
1115					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 214, Col: 36}
1116				}
1117				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var56))
1118				if templ_7745c5c3_Err != nil {
1119					return templ_7745c5c3_Err
1120				}
1121				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 87, "\">")
1122				if templ_7745c5c3_Err != nil {
1123					return templ_7745c5c3_Err
1124				}
1125				var templ_7745c5c3_Var57 string
1126				templ_7745c5c3_Var57, templ_7745c5c3_Err = templ.JoinStringErrs(b.Label)
1127				if templ_7745c5c3_Err != nil {
1128					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 214, Col: 48}
1129				}
1130				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var57))
1131				if templ_7745c5c3_Err != nil {
1132					return templ_7745c5c3_Err
1133				}
1134				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 88, "</a>")
1135				if templ_7745c5c3_Err != nil {
1136					return templ_7745c5c3_Err
1137				}
1138			}
1139			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 89, "</p></section>")
1140			if templ_7745c5c3_Err != nil {
1141				return templ_7745c5c3_Err
1142			}
1143			return nil
1144		})
1145		templ_7745c5c3_Err = Shell(l, nil).Render(templ.WithChildren(ctx, templ_7745c5c3_Var52), templ_7745c5c3_Buffer)
1146		if templ_7745c5c3_Err != nil {
1147			return templ_7745c5c3_Err
1148		}
1149		return nil
1150	})
1151}
1152
1153// Login signs the browser in with a login link. Opening the link consumes
1154// nothing; only this form does. ermite.js submits it as soon as a browser
1155// shows the page (data-autosubmit): link previews and prefetchers run no
1156// script, so they still cannot use the link. Without scripts the owner
1157// clicks the button.
1158func Login(l Layout, p LoginPage) templ.Component {
1159	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1160		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1161		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
1162			return templ_7745c5c3_CtxErr
1163		}
1164		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1165		if !templ_7745c5c3_IsBuffer {
1166			defer func() {
1167				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1168				if templ_7745c5c3_Err == nil {
1169					templ_7745c5c3_Err = templ_7745c5c3_BufErr
1170				}
1171			}()
1172		}
1173		ctx = templ.InitializeContext(ctx)
1174		templ_7745c5c3_Var58 := templ.GetChildren(ctx)
1175		if templ_7745c5c3_Var58 == nil {
1176			templ_7745c5c3_Var58 = templ.NopComponent
1177		}
1178		ctx = templ.ClearChildren(ctx)
1179		templ_7745c5c3_Var59 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1180			templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1181			templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1182			if !templ_7745c5c3_IsBuffer {
1183				defer func() {
1184					templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1185					if templ_7745c5c3_Err == nil {
1186						templ_7745c5c3_Err = templ_7745c5c3_BufErr
1187					}
1188				}()
1189			}
1190			ctx = templ.InitializeContext(ctx)
1191			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 90, "<section class=\"state\" aria-labelledby=\"state-title\"><h1 id=\"state-title\">")
1192			if templ_7745c5c3_Err != nil {
1193				return templ_7745c5c3_Err
1194			}
1195			var templ_7745c5c3_Var60 string
1196			templ_7745c5c3_Var60, templ_7745c5c3_Err = templ.JoinStringErrs(p.Title)
1197			if templ_7745c5c3_Err != nil {
1198				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 229, Col: 33}
1199			}
1200			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var60))
1201			if templ_7745c5c3_Err != nil {
1202				return templ_7745c5c3_Err
1203			}
1204			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 91, "</h1>")
1205			if templ_7745c5c3_Err != nil {
1206				return templ_7745c5c3_Err
1207			}
1208			for _, line := range p.Lines {
1209				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 92, "<p class=\"dim\">")
1210				if templ_7745c5c3_Err != nil {
1211					return templ_7745c5c3_Err
1212				}
1213				var templ_7745c5c3_Var61 string
1214				templ_7745c5c3_Var61, templ_7745c5c3_Err = templ.JoinStringErrs(line)
1215				if templ_7745c5c3_Err != nil {
1216					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 231, Col: 25}
1217				}
1218				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var61))
1219				if templ_7745c5c3_Err != nil {
1220					return templ_7745c5c3_Err
1221				}
1222				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 93, "</p>")
1223				if templ_7745c5c3_Err != nil {
1224					return templ_7745c5c3_Err
1225				}
1226			}
1227			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 94, "<form class=\"state-act\" method=\"post\" action=\"")
1228			if templ_7745c5c3_Err != nil {
1229				return templ_7745c5c3_Err
1230			}
1231			var templ_7745c5c3_Var62 templ.SafeURL
1232			templ_7745c5c3_Var62, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Action))
1233			if templ_7745c5c3_Err != nil {
1234				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 233, Col: 73}
1235			}
1236			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var62))
1237			if templ_7745c5c3_Err != nil {
1238				return templ_7745c5c3_Err
1239			}
1240			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 95, "\" data-autosubmit><button type=\"submit\" class=\"btn primary\">")
1241			if templ_7745c5c3_Err != nil {
1242				return templ_7745c5c3_Err
1243			}
1244			var templ_7745c5c3_Var63 string
1245			templ_7745c5c3_Var63, templ_7745c5c3_Err = templ.JoinStringErrs(p.Button)
1246			if templ_7745c5c3_Err != nil {
1247				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 234, Col: 56}
1248			}
1249			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var63))
1250			if templ_7745c5c3_Err != nil {
1251				return templ_7745c5c3_Err
1252			}
1253			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 96, "</button></form><p class=\"state-back\"><a href=\"/\">Back to home</a></p></section>")
1254			if templ_7745c5c3_Err != nil {
1255				return templ_7745c5c3_Err
1256			}
1257			return nil
1258		})
1259		templ_7745c5c3_Err = Shell(l, nil).Render(templ.WithChildren(ctx, templ_7745c5c3_Var59), templ_7745c5c3_Buffer)
1260		if templ_7745c5c3_Err != nil {
1261			return templ_7745c5c3_Err
1262		}
1263		return nil
1264	})
1265}
1266
1267// PasskeyLogin is the sign-in page: a button the script (passkey.js) drives.
1268// Without script the button is hidden and the page says what to do instead.
1269func PasskeyLogin(l Layout, p PasskeyLoginPage) templ.Component {
1270	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1271		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1272		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
1273			return templ_7745c5c3_CtxErr
1274		}
1275		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1276		if !templ_7745c5c3_IsBuffer {
1277			defer func() {
1278				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1279				if templ_7745c5c3_Err == nil {
1280					templ_7745c5c3_Err = templ_7745c5c3_BufErr
1281				}
1282			}()
1283		}
1284		ctx = templ.InitializeContext(ctx)
1285		templ_7745c5c3_Var64 := templ.GetChildren(ctx)
1286		if templ_7745c5c3_Var64 == nil {
1287			templ_7745c5c3_Var64 = templ.NopComponent
1288		}
1289		ctx = templ.ClearChildren(ctx)
1290		templ_7745c5c3_Var65 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1291			templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1292			templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1293			if !templ_7745c5c3_IsBuffer {
1294				defer func() {
1295					templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1296					if templ_7745c5c3_Err == nil {
1297						templ_7745c5c3_Err = templ_7745c5c3_BufErr
1298					}
1299				}()
1300			}
1301			ctx = templ.InitializeContext(ctx)
1302			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 97, "<section class=\"state\" aria-labelledby=\"state-title\"><h1 id=\"state-title\">")
1303			if templ_7745c5c3_Err != nil {
1304				return templ_7745c5c3_Err
1305			}
1306			var templ_7745c5c3_Var66 string
1307			templ_7745c5c3_Var66, templ_7745c5c3_Err = templ.JoinStringErrs(p.Title)
1308			if templ_7745c5c3_Err != nil {
1309				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 246, Col: 33}
1310			}
1311			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var66))
1312			if templ_7745c5c3_Err != nil {
1313				return templ_7745c5c3_Err
1314			}
1315			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 98, "</h1><form class=\"state-act\" data-js data-passkey-form><button type=\"submit\" class=\"btn primary\" data-passkey=\"login\" data-begin=\"")
1316			if templ_7745c5c3_Err != nil {
1317				return templ_7745c5c3_Err
1318			}
1319			var templ_7745c5c3_Var67 string
1320			templ_7745c5c3_Var67, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Begin)
1321			if templ_7745c5c3_Err != nil {
1322				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 248, Col: 87}
1323			}
1324			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var67)
1325			if templ_7745c5c3_Err != nil {
1326				return templ_7745c5c3_Err
1327			}
1328			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 99, "\" data-finish=\"")
1329			if templ_7745c5c3_Err != nil {
1330				return templ_7745c5c3_Err
1331			}
1332			var templ_7745c5c3_Var68 string
1333			templ_7745c5c3_Var68, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Finish)
1334			if templ_7745c5c3_Err != nil {
1335				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 248, Col: 112}
1336			}
1337			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var68)
1338			if templ_7745c5c3_Err != nil {
1339				return templ_7745c5c3_Err
1340			}
1341			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 100, "\">")
1342			if templ_7745c5c3_Err != nil {
1343				return templ_7745c5c3_Err
1344			}
1345			var templ_7745c5c3_Var69 string
1346			templ_7745c5c3_Var69, templ_7745c5c3_Err = templ.JoinStringErrs(p.Button)
1347			if templ_7745c5c3_Err != nil {
1348				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 248, Col: 125}
1349			}
1350			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var69))
1351			if templ_7745c5c3_Err != nil {
1352				return templ_7745c5c3_Err
1353			}
1354			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 101, "</button></form><p class=\"dim\" role=\"status\" aria-live=\"polite\" data-passkey-status></p>")
1355			if templ_7745c5c3_Err != nil {
1356				return templ_7745c5c3_Err
1357			}
1358			for _, line := range p.Lines {
1359				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 102, "<p class=\"dim\">")
1360				if templ_7745c5c3_Err != nil {
1361					return templ_7745c5c3_Err
1362				}
1363				var templ_7745c5c3_Var70 string
1364				templ_7745c5c3_Var70, templ_7745c5c3_Err = templ.JoinStringErrs(line)
1365				if templ_7745c5c3_Err != nil {
1366					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 252, Col: 25}
1367				}
1368				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var70))
1369				if templ_7745c5c3_Err != nil {
1370					return templ_7745c5c3_Err
1371				}
1372				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 103, "</p>")
1373				if templ_7745c5c3_Err != nil {
1374					return templ_7745c5c3_Err
1375				}
1376			}
1377			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 104, "<p class=\"state-back\"><a href=\"/\">Back to home</a></p></section>")
1378			if templ_7745c5c3_Err != nil {
1379				return templ_7745c5c3_Err
1380			}
1381			return nil
1382		})
1383		templ_7745c5c3_Err = Shell(l, nil).Render(templ.WithChildren(ctx, templ_7745c5c3_Var65), templ_7745c5c3_Buffer)
1384		if templ_7745c5c3_Err != nil {
1385			return templ_7745c5c3_Err
1386		}
1387		return nil
1388	})
1389}
1390
1391// Passkeys lists the owner's passkeys, removes them and adds one.
1392func Passkeys(l Layout, p PasskeysPage) templ.Component {
1393	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1394		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1395		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
1396			return templ_7745c5c3_CtxErr
1397		}
1398		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1399		if !templ_7745c5c3_IsBuffer {
1400			defer func() {
1401				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1402				if templ_7745c5c3_Err == nil {
1403					templ_7745c5c3_Err = templ_7745c5c3_BufErr
1404				}
1405			}()
1406		}
1407		ctx = templ.InitializeContext(ctx)
1408		templ_7745c5c3_Var71 := templ.GetChildren(ctx)
1409		if templ_7745c5c3_Var71 == nil {
1410			templ_7745c5c3_Var71 = templ.NopComponent
1411		}
1412		ctx = templ.ClearChildren(ctx)
1413		templ_7745c5c3_Var72 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1414			templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1415			templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1416			if !templ_7745c5c3_IsBuffer {
1417				defer func() {
1418					templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1419					if templ_7745c5c3_Err == nil {
1420						templ_7745c5c3_Err = templ_7745c5c3_BufErr
1421					}
1422				}()
1423			}
1424			ctx = templ.InitializeContext(ctx)
1425			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 105, "<h2 class=\"rule-h\"><span>Passkeys</span><span class=\"count\">")
1426			if templ_7745c5c3_Err != nil {
1427				return templ_7745c5c3_Err
1428			}
1429			var templ_7745c5c3_Var73 string
1430			templ_7745c5c3_Var73, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Rows)))
1431			if templ_7745c5c3_Err != nil {
1432				return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 262, Col: 81}
1433			}
1434			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var73))
1435			if templ_7745c5c3_Err != nil {
1436				return templ_7745c5c3_Err
1437			}
1438			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 106, "</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>")
1439			if templ_7745c5c3_Err != nil {
1440				return templ_7745c5c3_Err
1441			}
1442			if len(p.Rows) > 0 {
1443				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 107, "<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>")
1444				if templ_7745c5c3_Err != nil {
1445					return templ_7745c5c3_Err
1446				}
1447				for _, r := range p.Rows {
1448					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 108, "<tr><td class=\"c-name\">")
1449					if templ_7745c5c3_Err != nil {
1450						return templ_7745c5c3_Err
1451					}
1452					var templ_7745c5c3_Var74 string
1453					templ_7745c5c3_Var74, templ_7745c5c3_Err = templ.JoinStringErrs(r.Name)
1454					if templ_7745c5c3_Err != nil {
1455						return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 278, Col: 34}
1456					}
1457					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var74))
1458					if templ_7745c5c3_Err != nil {
1459						return templ_7745c5c3_Err
1460					}
1461					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 109, "</td><td class=\"c-when nowrap\"><time")
1462					if templ_7745c5c3_Err != nil {
1463						return templ_7745c5c3_Err
1464					}
1465					if r.CreatedAt != "" {
1466						templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 110, " datetime=\"")
1467						if templ_7745c5c3_Err != nil {
1468							return templ_7745c5c3_Err
1469						}
1470						var templ_7745c5c3_Var75 string
1471						templ_7745c5c3_Var75, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.CreatedAt)
1472						if templ_7745c5c3_Err != nil {
1473							return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 282, Col: 32}
1474						}
1475						_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var75)
1476						if templ_7745c5c3_Err != nil {
1477							return templ_7745c5c3_Err
1478						}
1479						templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 111, "\"")
1480						if templ_7745c5c3_Err != nil {
1481							return templ_7745c5c3_Err
1482						}
1483					}
1484					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 112, ">")
1485					if templ_7745c5c3_Err != nil {
1486						return templ_7745c5c3_Err
1487					}
1488					var templ_7745c5c3_Var76 string
1489					templ_7745c5c3_Var76, templ_7745c5c3_Err = templ.JoinStringErrs(r.Created)
1490					if templ_7745c5c3_Err != nil {
1491						return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 284, Col: 20}
1492					}
1493					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var76))
1494					if templ_7745c5c3_Err != nil {
1495						return templ_7745c5c3_Err
1496					}
1497					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 113, "</time></td><td class=\"c-when nowrap\"><time")
1498					if templ_7745c5c3_Err != nil {
1499						return templ_7745c5c3_Err
1500					}
1501					if r.LastUsedAt != "" {
1502						templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 114, " datetime=\"")
1503						if templ_7745c5c3_Err != nil {
1504							return templ_7745c5c3_Err
1505						}
1506						var templ_7745c5c3_Var77 string
1507						templ_7745c5c3_Var77, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.LastUsedAt)
1508						if templ_7745c5c3_Err != nil {
1509							return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 289, Col: 33}
1510						}
1511						_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var77)
1512						if templ_7745c5c3_Err != nil {
1513							return templ_7745c5c3_Err
1514						}
1515						templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 115, "\"")
1516						if templ_7745c5c3_Err != nil {
1517							return templ_7745c5c3_Err
1518						}
1519					}
1520					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 116, ">")
1521					if templ_7745c5c3_Err != nil {
1522						return templ_7745c5c3_Err
1523					}
1524					var templ_7745c5c3_Var78 string
1525					templ_7745c5c3_Var78, templ_7745c5c3_Err = templ.JoinStringErrs(r.LastUsed)
1526					if templ_7745c5c3_Err != nil {
1527						return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 291, Col: 21}
1528					}
1529					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var78))
1530					if templ_7745c5c3_Err != nil {
1531						return templ_7745c5c3_Err
1532					}
1533					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 117, "</time></td><td class=\"c-sync\">")
1534					if templ_7745c5c3_Err != nil {
1535						return templ_7745c5c3_Err
1536					}
1537					if r.Synced {
1538						templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 118, "yes")
1539						if templ_7745c5c3_Err != nil {
1540							return templ_7745c5c3_Err
1541						}
1542					} else {
1543						templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 119, "no")
1544						if templ_7745c5c3_Err != nil {
1545							return templ_7745c5c3_Err
1546						}
1547					}
1548					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 120, "</td><td class=\"c-act\"><form method=\"post\" action=\"")
1549					if templ_7745c5c3_Err != nil {
1550						return templ_7745c5c3_Err
1551					}
1552					var templ_7745c5c3_Var79 templ.SafeURL
1553					templ_7745c5c3_Var79, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(r.Remove))
1554					if templ_7745c5c3_Err != nil {
1555						return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 301, Col: 60}
1556					}
1557					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var79))
1558					if templ_7745c5c3_Err != nil {
1559						return templ_7745c5c3_Err
1560					}
1561					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 121, "\"><button type=\"submit\" class=\"btn danger\" aria-label=\"")
1562					if templ_7745c5c3_Err != nil {
1563						return templ_7745c5c3_Err
1564					}
1565					var templ_7745c5c3_Var80 string
1566					templ_7745c5c3_Var80, templ_7745c5c3_Err = templ.ResolveAttributeValue("Remove passkey " + r.Name)
1567					if templ_7745c5c3_Err != nil {
1568						return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 302, Col: 89}
1569					}
1570					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var80)
1571					if templ_7745c5c3_Err != nil {
1572						return templ_7745c5c3_Err
1573					}
1574					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 122, "\">Remove</button></form></td></tr>")
1575					if templ_7745c5c3_Err != nil {
1576						return templ_7745c5c3_Err
1577					}
1578				}
1579				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 123, "</tbody></table>")
1580				if templ_7745c5c3_Err != nil {
1581					return templ_7745c5c3_Err
1582				}
1583			} else {
1584				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 124, "<p class=\"lede dim\">no passkeys yet.</p>")
1585				if templ_7745c5c3_Err != nil {
1586					return templ_7745c5c3_Err
1587				}
1588			}
1589			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 125, " ")
1590			if templ_7745c5c3_Err != nil {
1591				return templ_7745c5c3_Err
1592			}
1593			if p.Full {
1594				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 126, "<p class=\"dim\">")
1595				if templ_7745c5c3_Err != nil {
1596					return templ_7745c5c3_Err
1597				}
1598				var templ_7745c5c3_Var81 string
1599				templ_7745c5c3_Var81, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Max))
1600				if templ_7745c5c3_Err != nil {
1601					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 313, Col: 31}
1602				}
1603				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var81))
1604				if templ_7745c5c3_Err != nil {
1605					return templ_7745c5c3_Err
1606				}
1607				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 127, " passkeys are registered, the most there can be. Remove one to add another.</p>")
1608				if templ_7745c5c3_Err != nil {
1609					return templ_7745c5c3_Err
1610				}
1611			} else {
1612				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 128, "<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=\"")
1613				if templ_7745c5c3_Err != nil {
1614					return templ_7745c5c3_Err
1615				}
1616				var templ_7745c5c3_Var82 string
1617				templ_7745c5c3_Var82, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Begin)
1618				if templ_7745c5c3_Err != nil {
1619					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 318, Col: 90}
1620				}
1621				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var82)
1622				if templ_7745c5c3_Err != nil {
1623					return templ_7745c5c3_Err
1624				}
1625				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 129, "\" data-finish=\"")
1626				if templ_7745c5c3_Err != nil {
1627					return templ_7745c5c3_Err
1628				}
1629				var templ_7745c5c3_Var83 string
1630				templ_7745c5c3_Var83, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Finish)
1631				if templ_7745c5c3_Err != nil {
1632					return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 318, Col: 115}
1633				}
1634				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var83)
1635				if templ_7745c5c3_Err != nil {
1636					return templ_7745c5c3_Err
1637				}
1638				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 130, "\">Add a passkey</button></form>")
1639				if templ_7745c5c3_Err != nil {
1640					return templ_7745c5c3_Err
1641				}
1642			}
1643			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 131, " <p class=\"dim\" role=\"status\" aria-live=\"polite\" data-passkey-status></p>")
1644			if templ_7745c5c3_Err != nil {
1645				return templ_7745c5c3_Err
1646			}
1647			return nil
1648		})
1649		templ_7745c5c3_Err = Shell(l, nil).Render(templ.WithChildren(ctx, templ_7745c5c3_Var72), templ_7745c5c3_Buffer)
1650		if templ_7745c5c3_Err != nil {
1651			return templ_7745c5c3_Err
1652		}
1653		return nil
1654	})
1655}
1656
1657var _ = 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