v0.10.0 ce48ee3

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