v0.21.0 ef38ad0

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

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 2

Tags 45

↑↓ moveenter openesc close