v0.32.0 53e25a3

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