detached 8e01339

fix(web): rail nits: no idle scroll bar on files, merge rule as a note, latest tag in About, wider commit subjects (#55)

commit
8e01339264a048783f64b93f1dd183137258853b
author
brice · · 2026-10-18 06:07 UTC
committer
bnema · · 2026-10-18 06:07 UTC
parent
032b9ef
signature
SSH UnverifiedSHA256:VOCA5lYARHcbKDZ7GhTV45VmcjWnJ6ZQIBazj17LivA The key is unknown
9 files · +473 -423
M internal/adapters/web/actions.templ +1 -1
@@ -462,7 +462,7 @@ templ MRChecks(c ChecksSection) {
462462 </ul>
463463 }
464464 if c.Note != "" {
465- <p class="mute">{ c.Note }</p>
465+ <p class="rule-note"><span class="sr">note: </span>{ c.Note }</p>
466466 }
467467 </section>
468468 }
@@ -462,7 +462,7 @@ templ MRChecks(c ChecksSection) {
462 </ul>462 </ul>
463 }463 }
464 if c.Note != "" {464 if c.Note != "" {
465- <p class="mute">{ c.Note }</p>465+ <p class="rule-note"><span class="sr">note: </span>{ c.Note }</p>
466 }466 }
467 </section>467 </section>
468 }468 }
M internal/adapters/web/actions_templ.go +2 -2 generated file: collapsed
M internal/adapters/web/pages.templ +27 -18
@@ -54,28 +54,37 @@ templ Summary(l Layout, p SummaryPage) {
5454 }
5555 }
5656
57+// latestTagFact is the "latest tag" row of About: the newest tag (its
58+// commit subject on hover), how old it is, and the count of tags, a link to
59+// all of them. With too many tags to date them, the count only.
60+templ latestTagFact(t LatestTag) {
61+ <dt>latest tag</dt>
62+ <dd class="latest-tag">
63+ if t.Name != "" {
64+ <a class="tag-name" href={ templ.SafeURL(t.Href) } title={ t.Subject }><span class="ico i-tag" aria-hidden="true"></span>{ t.Name }</a>
65+ if t.WhenAt != "" {
66+ <time class="dim" datetime={ t.WhenAt } title={ t.WhenAt }>{ t.When }</time>
67+ }
68+ }
69+ <a class="all-tags" href={ templ.SafeURL(t.RefsHref) }>{ plural(t.Count, "tag", "tags") }</a>
70+ </dd>
71+}
72+
5773 templ summaryRail(p SummaryPage) {
5874 <section aria-labelledby="r-clone"><h2 id="r-clone">Clone</h2>@CloneBlock(p.Clone)
5975 </section>
60- <section aria-labelledby="r-facts"><h2 id="r-facts">About</h2>@Facts(p.Facts)
61-</section>
62- if p.Latest != nil {
63- <section aria-labelledby="r-tag">
64- <h2 id="r-tag">Tags <span class="count">{ itoa(p.Latest.Count) }</span> <a href={ templ.SafeURL(p.Latest.RefsHref) }>View all</a></h2>
65- if p.Latest.Name != "" {
66- <div class="latest-tag">
67- <a class="tag-name" href={ templ.SafeURL(p.Latest.Href) }><span class="ico i-tag" aria-hidden="true"></span>{ p.Latest.Name }</a>
68- <span class="pill">latest</span>
69- <time class="dim" datetime={ p.Latest.WhenAt } title={ p.Latest.WhenAt }>{ p.Latest.When }</time>
70- if p.Latest.Subject != "" {
71- <p class="tag-sub dim">{ p.Latest.Subject }</p>
72- }
73- </div>
74- } else {
75- <p class="dim">{ plural(p.Latest.Count, "tag", "tags") }</p>
76+ <section aria-labelledby="r-facts">
77+ <h2 id="r-facts">About</h2>
78+ <dl class="kv">
79+ for _, f := range p.Facts {
80+ <dt>{ f.Key }</dt>
81+ @FactValue(f)
7682 }
77- </section>
78- }
83+ if p.Latest != nil {
84+ @latestTagFact(*p.Latest)
85+ }
86+ </dl>
87+ </section>
7988 if len(p.Recent) > 0 {
8089 <section aria-labelledby="r-recent"><h2 id="r-recent">Recent commits <a href={ templ.SafeURL(p.AllHref) }>View all</a></h2>@CommitRows(p.Recent)
8190 </section>
@@ -54,28 +54,37 @@ templ Summary(l Layout, p SummaryPage) {
54 }54 }
55 }55 }
56 56
57+// latestTagFact is the "latest tag" row of About: the newest tag (its
58+// commit subject on hover), how old it is, and the count of tags, a link to
59+// all of them. With too many tags to date them, the count only.
60+templ latestTagFact(t LatestTag) {
61+ <dt>latest tag</dt>
62+ <dd class="latest-tag">
63+ if t.Name != "" {
64+ <a class="tag-name" href={ templ.SafeURL(t.Href) } title={ t.Subject }><span class="ico i-tag" aria-hidden="true"></span>{ t.Name }</a>
65+ if t.WhenAt != "" {
66+ <time class="dim" datetime={ t.WhenAt } title={ t.WhenAt }>{ t.When }</time>
67+ }
68+ }
69+ <a class="all-tags" href={ templ.SafeURL(t.RefsHref) }>{ plural(t.Count, "tag", "tags") }</a>
70+ </dd>
71+}
72+
57 templ summaryRail(p SummaryPage) {73 templ summaryRail(p SummaryPage) {
58 <section aria-labelledby="r-clone"><h2 id="r-clone">Clone</h2>@CloneBlock(p.Clone)74 <section aria-labelledby="r-clone"><h2 id="r-clone">Clone</h2>@CloneBlock(p.Clone)
59 </section>75 </section>
60- <section aria-labelledby="r-facts"><h2 id="r-facts">About</h2>@Facts(p.Facts)76+ <section aria-labelledby="r-facts">
61-</section>77+ <h2 id="r-facts">About</h2>
62- if p.Latest != nil {78+ <dl class="kv">
63- <section aria-labelledby="r-tag">79+ for _, f := range p.Facts {
64- <h2 id="r-tag">Tags <span class="count">{ itoa(p.Latest.Count) }</span> <a href={ templ.SafeURL(p.Latest.RefsHref) }>View all</a></h2>80+ <dt>{ f.Key }</dt>
65- if p.Latest.Name != "" {81+ @FactValue(f)
66- <div class="latest-tag">
67- <a class="tag-name" href={ templ.SafeURL(p.Latest.Href) }><span class="ico i-tag" aria-hidden="true"></span>{ p.Latest.Name }</a>
68- <span class="pill">latest</span>
69- <time class="dim" datetime={ p.Latest.WhenAt } title={ p.Latest.WhenAt }>{ p.Latest.When }</time>
70- if p.Latest.Subject != "" {
71- <p class="tag-sub dim">{ p.Latest.Subject }</p>
72- }
73- </div>
74- } else {
75- <p class="dim">{ plural(p.Latest.Count, "tag", "tags") }</p>
76 }82 }
77- </section>83+ if p.Latest != nil {
78- }84+ @latestTagFact(*p.Latest)
85+ }
86+ </dl>
87+ </section>
79 if len(p.Recent) > 0 {88 if len(p.Recent) > 0 {
80 <section aria-labelledby="r-recent"><h2 id="r-recent">Recent commits <a href={ templ.SafeURL(p.AllHref) }>View all</a></h2>@CommitRows(p.Recent)89 <section aria-labelledby="r-recent"><h2 id="r-recent">Recent commits <a href={ templ.SafeURL(p.AllHref) }>View all</a></h2>@CommitRows(p.Recent)
81 </section>90 </section>
M internal/adapters/web/pages_templ.go +398 -369
@@ -215,7 +215,10 @@ func Summary(l Layout, p SummaryPage) templ.Component {
215215 })
216216 }
217217
218-func summaryRail(p SummaryPage) templ.Component {
218+// latestTagFact is the "latest tag" row of About: the newest tag (its
219+// commit subject on hover), how old it is, and the count of tags, a link to
220+// all of them. With too many tags to date them, the count only.
221+func latestTagFact(t LatestTag) templ.Component {
219222 return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
220223 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
221224 if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
@@ -236,189 +239,215 @@ func summaryRail(p SummaryPage) templ.Component {
236239 templ_7745c5c3_Var11 = templ.NopComponent
237240 }
238241 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>")
242+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "<dt>latest tag</dt><dd class=\"latest-tag\">")
256243 if templ_7745c5c3_Err != nil {
257244 return templ_7745c5c3_Err
258245 }
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\">")
246+ if t.Name != "" {
247+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, "<a class=\"tag-name\" href=\"")
261248 if templ_7745c5c3_Err != nil {
262249 return templ_7745c5c3_Err
263250 }
264- var templ_7745c5c3_Var12 string
265- templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Latest.Count))
251+ var templ_7745c5c3_Var12 templ.SafeURL
252+ templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(t.Href))
266253 if templ_7745c5c3_Err != nil {
267- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 64, Col: 65}
254+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 64, Col: 51}
268255 }
269256 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var12))
270257 if templ_7745c5c3_Err != nil {
271258 return templ_7745c5c3_Err
272259 }
273- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 17, "</span> <a href=\"")
260+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, "\" title=\"")
274261 if templ_7745c5c3_Err != nil {
275262 return templ_7745c5c3_Err
276263 }
277- var templ_7745c5c3_Var13 templ.SafeURL
278- templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Latest.RefsHref))
264+ var templ_7745c5c3_Var13 string
265+ templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.ResolveAttributeValue(t.Subject)
279266 if templ_7745c5c3_Err != nil {
280- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 64, Col: 117}
267+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 64, Col: 71}
281268 }
282- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var13))
269+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var13)
283270 if templ_7745c5c3_Err != nil {
284271 return templ_7745c5c3_Err
285272 }
286- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 18, "\">View all</a></h2>")
273+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "\"><span class=\"ico i-tag\" aria-hidden=\"true\"></span>")
287274 if templ_7745c5c3_Err != nil {
288275 return templ_7745c5c3_Err
289276 }
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>")
277+ var templ_7745c5c3_Var14 string
278+ templ_7745c5c3_Var14, templ_7745c5c3_Err = templ.JoinStringErrs(t.Name)
279+ if templ_7745c5c3_Err != nil {
280+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 64, Col: 132}
281+ }
282+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var14))
283+ if templ_7745c5c3_Err != nil {
284+ return templ_7745c5c3_Err
285+ }
286+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 17, "</a> ")
287+ if templ_7745c5c3_Err != nil {
288+ return templ_7745c5c3_Err
289+ }
290+ if t.WhenAt != "" {
291+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 18, "<time class=\"dim\" datetime=\"")
305292 if templ_7745c5c3_Err != nil {
306293 return templ_7745c5c3_Err
307294 }
308295 var templ_7745c5c3_Var15 string
309- templ_7745c5c3_Var15, templ_7745c5c3_Err = templ.JoinStringErrs(p.Latest.Name)
296+ templ_7745c5c3_Var15, templ_7745c5c3_Err = templ.ResolveAttributeValue(t.WhenAt)
310297 if templ_7745c5c3_Err != nil {
311- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 67, Col: 128}
298+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 66, Col: 41}
312299 }
313- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var15))
300+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var15)
314301 if templ_7745c5c3_Err != nil {
315302 return templ_7745c5c3_Err
316303 }
317- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "</a> <span class=\"pill\">latest</span> <time class=\"dim\" datetime=\"")
304+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, "\" title=\"")
318305 if templ_7745c5c3_Err != nil {
319306 return templ_7745c5c3_Err
320307 }
321308 var templ_7745c5c3_Var16 string
322- templ_7745c5c3_Var16, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Latest.WhenAt)
309+ templ_7745c5c3_Var16, templ_7745c5c3_Err = templ.ResolveAttributeValue(t.WhenAt)
323310 if templ_7745c5c3_Err != nil {
324- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 69, Col: 49}
311+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 66, Col: 60}
325312 }
326313 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var16)
327314 if templ_7745c5c3_Err != nil {
328315 return templ_7745c5c3_Err
329316 }
330- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "\" title=\"")
317+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "\">")
331318 if templ_7745c5c3_Err != nil {
332319 return templ_7745c5c3_Err
333320 }
334321 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>")
322+ templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.JoinStringErrs(t.When)
380323 if templ_7745c5c3_Err != nil {
381- return templ_7745c5c3_Err
324+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 66, Col: 71}
382325 }
383- } else {
384- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 28, "<p class=\"dim\">")
326+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var17))
385327 if templ_7745c5c3_Err != nil {
386328 return templ_7745c5c3_Err
387329 }
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))
330+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "</time> ")
394331 if templ_7745c5c3_Err != nil {
395332 return templ_7745c5c3_Err
396333 }
397- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 29, "</p>")
398- if templ_7745c5c3_Err != nil {
399- return templ_7745c5c3_Err
334+ }
335+ }
336+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "<a class=\"all-tags\" href=\"")
337+ if templ_7745c5c3_Err != nil {
338+ return templ_7745c5c3_Err
339+ }
340+ var templ_7745c5c3_Var18 templ.SafeURL
341+ templ_7745c5c3_Var18, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(t.RefsHref))
342+ if templ_7745c5c3_Err != nil {
343+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 69, Col: 54}
344+ }
345+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var18))
346+ if templ_7745c5c3_Err != nil {
347+ return templ_7745c5c3_Err
348+ }
349+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 23, "\">")
350+ if templ_7745c5c3_Err != nil {
351+ return templ_7745c5c3_Err
352+ }
353+ var templ_7745c5c3_Var19 string
354+ templ_7745c5c3_Var19, templ_7745c5c3_Err = templ.JoinStringErrs(plural(t.Count, "tag", "tags"))
355+ if templ_7745c5c3_Err != nil {
356+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 69, Col: 89}
357+ }
358+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var19))
359+ if templ_7745c5c3_Err != nil {
360+ return templ_7745c5c3_Err
361+ }
362+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, "</a></dd>")
363+ if templ_7745c5c3_Err != nil {
364+ return templ_7745c5c3_Err
365+ }
366+ return nil
367+ })
368+}
369+
370+func summaryRail(p SummaryPage) templ.Component {
371+ return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
372+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
373+ if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
374+ return templ_7745c5c3_CtxErr
375+ }
376+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
377+ if !templ_7745c5c3_IsBuffer {
378+ defer func() {
379+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
380+ if templ_7745c5c3_Err == nil {
381+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
400382 }
383+ }()
384+ }
385+ ctx = templ.InitializeContext(ctx)
386+ templ_7745c5c3_Var20 := templ.GetChildren(ctx)
387+ if templ_7745c5c3_Var20 == nil {
388+ templ_7745c5c3_Var20 = templ.NopComponent
389+ }
390+ ctx = templ.ClearChildren(ctx)
391+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 25, "<section aria-labelledby=\"r-clone\"><h2 id=\"r-clone\">Clone</h2>")
392+ if templ_7745c5c3_Err != nil {
393+ return templ_7745c5c3_Err
394+ }
395+ templ_7745c5c3_Err = CloneBlock(p.Clone).Render(ctx, templ_7745c5c3_Buffer)
396+ if templ_7745c5c3_Err != nil {
397+ return templ_7745c5c3_Err
398+ }
399+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 26, "</section><section aria-labelledby=\"r-facts\"><h2 id=\"r-facts\">About</h2><dl class=\"kv\">")
400+ if templ_7745c5c3_Err != nil {
401+ return templ_7745c5c3_Err
402+ }
403+ for _, f := range p.Facts {
404+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 27, "<dt>")
405+ if templ_7745c5c3_Err != nil {
406+ return templ_7745c5c3_Err
407+ }
408+ var templ_7745c5c3_Var21 string
409+ templ_7745c5c3_Var21, templ_7745c5c3_Err = templ.JoinStringErrs(f.Key)
410+ if templ_7745c5c3_Err != nil {
411+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 80, Col: 15}
412+ }
413+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var21))
414+ if templ_7745c5c3_Err != nil {
415+ return templ_7745c5c3_Err
416+ }
417+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 28, "</dt>")
418+ if templ_7745c5c3_Err != nil {
419+ return templ_7745c5c3_Err
420+ }
421+ templ_7745c5c3_Err = FactValue(f).Render(ctx, templ_7745c5c3_Buffer)
422+ if templ_7745c5c3_Err != nil {
423+ return templ_7745c5c3_Err
401424 }
402- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 30, "</section>")
425+ }
426+ if p.Latest != nil {
427+ templ_7745c5c3_Err = latestTagFact(*p.Latest).Render(ctx, templ_7745c5c3_Buffer)
403428 if templ_7745c5c3_Err != nil {
404429 return templ_7745c5c3_Err
405430 }
406431 }
432+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 29, "</dl></section>")
433+ if templ_7745c5c3_Err != nil {
434+ return templ_7745c5c3_Err
435+ }
407436 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=\"")
437+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 30, "<section aria-labelledby=\"r-recent\"><h2 id=\"r-recent\">Recent commits <a href=\"")
409438 if templ_7745c5c3_Err != nil {
410439 return templ_7745c5c3_Err
411440 }
412- var templ_7745c5c3_Var21 templ.SafeURL
413- templ_7745c5c3_Var21, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.AllHref))
441+ var templ_7745c5c3_Var22 templ.SafeURL
442+ templ_7745c5c3_Var22, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.AllHref))
414443 if templ_7745c5c3_Err != nil {
415- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 80, Col: 105}
444+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 89, Col: 105}
416445 }
417- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var21))
446+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var22))
418447 if templ_7745c5c3_Err != nil {
419448 return templ_7745c5c3_Err
420449 }
421- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 32, "\">View all</a></h2>")
450+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 31, "\">View all</a></h2>")
422451 if templ_7745c5c3_Err != nil {
423452 return templ_7745c5c3_Err
424453 }
@@ -426,7 +455,7 @@ func summaryRail(p SummaryPage) templ.Component {
426455 if templ_7745c5c3_Err != nil {
427456 return templ_7745c5c3_Err
428457 }
429- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, "</section>")
458+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 32, "</section>")
430459 if templ_7745c5c3_Err != nil {
431460 return templ_7745c5c3_Err
432461 }
@@ -438,7 +467,7 @@ func summaryRail(p SummaryPage) templ.Component {
438467 }
439468 }
440469 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>")
470+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, "<section aria-labelledby=\"r-outline\"><h2 id=\"r-outline\">On this page</h2>")
442471 if templ_7745c5c3_Err != nil {
443472 return templ_7745c5c3_Err
444473 }
@@ -446,7 +475,7 @@ func summaryRail(p SummaryPage) templ.Component {
446475 if templ_7745c5c3_Err != nil {
447476 return templ_7745c5c3_Err
448477 }
449- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 35, "</section>")
478+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 34, "</section>")
450479 if templ_7745c5c3_Err != nil {
451480 return templ_7745c5c3_Err
452481 }
@@ -472,12 +501,12 @@ func Refs(l Layout, p RefsPage) templ.Component {
472501 }()
473502 }
474503 ctx = templ.InitializeContext(ctx)
475- templ_7745c5c3_Var22 := templ.GetChildren(ctx)
476- if templ_7745c5c3_Var22 == nil {
477- templ_7745c5c3_Var22 = templ.NopComponent
504+ templ_7745c5c3_Var23 := templ.GetChildren(ctx)
505+ if templ_7745c5c3_Var23 == nil {
506+ templ_7745c5c3_Var23 = templ.NopComponent
478507 }
479508 ctx = templ.ClearChildren(ctx)
480- templ_7745c5c3_Var23 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
509+ templ_7745c5c3_Var24 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
481510 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
482511 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
483512 if !templ_7745c5c3_IsBuffer {
@@ -489,7 +518,7 @@ func Refs(l Layout, p RefsPage) templ.Component {
489518 }()
490519 }
491520 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>")
521+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 35, "<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>")
493522 if templ_7745c5c3_Err != nil {
494523 return templ_7745c5c3_Err
495524 }
@@ -497,32 +526,32 @@ func Refs(l Layout, p RefsPage) templ.Component {
497526 if templ_7745c5c3_Err != nil {
498527 return templ_7745c5c3_Err
499528 }
500- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 37, "</table>")
529+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, "</table>")
501530 if templ_7745c5c3_Err != nil {
502531 return templ_7745c5c3_Err
503532 }
504533 if p.Note != "" {
505- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, "<p class=\"note\">")
534+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 37, "<p class=\"note\">")
506535 if templ_7745c5c3_Err != nil {
507536 return templ_7745c5c3_Err
508537 }
509- var templ_7745c5c3_Var24 string
510- templ_7745c5c3_Var24, templ_7745c5c3_Err = templ.JoinStringErrs(p.Note)
538+ var templ_7745c5c3_Var25 string
539+ templ_7745c5c3_Var25, templ_7745c5c3_Err = templ.JoinStringErrs(p.Note)
511540 if templ_7745c5c3_Err != nil {
512- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 113, Col: 27}
541+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 122, Col: 27}
513542 }
514- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var24))
543+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var25))
515544 if templ_7745c5c3_Err != nil {
516545 return templ_7745c5c3_Err
517546 }
518- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, "</p>")
547+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, "</p>")
519548 if templ_7745c5c3_Err != nil {
520549 return templ_7745c5c3_Err
521550 }
522551 }
523552 return nil
524553 })
525- templ_7745c5c3_Err = Shell(l, refsRail(p)).Render(templ.WithChildren(ctx, templ_7745c5c3_Var23), templ_7745c5c3_Buffer)
554+ templ_7745c5c3_Err = Shell(l, refsRail(p)).Render(templ.WithChildren(ctx, templ_7745c5c3_Var24), templ_7745c5c3_Buffer)
526555 if templ_7745c5c3_Err != nil {
527556 return templ_7745c5c3_Err
528557 }
@@ -546,112 +575,112 @@ func refRow(kind string, r RefRow) templ.Component {
546575 }()
547576 }
548577 ctx = templ.InitializeContext(ctx)
549- templ_7745c5c3_Var25 := templ.GetChildren(ctx)
550- if templ_7745c5c3_Var25 == nil {
551- templ_7745c5c3_Var25 = templ.NopComponent
578+ templ_7745c5c3_Var26 := templ.GetChildren(ctx)
579+ if templ_7745c5c3_Var26 == nil {
580+ templ_7745c5c3_Var26 = templ.NopComponent
552581 }
553582 ctx = templ.ClearChildren(ctx)
554- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, "<tr")
583+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, "<tr")
555584 if templ_7745c5c3_Err != nil {
556585 return templ_7745c5c3_Err
557586 }
558587 if r.Cursor {
559- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, " data-cursor")
588+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, " data-cursor")
560589 if templ_7745c5c3_Err != nil {
561590 return templ_7745c5c3_Err
562591 }
563592 }
564- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "><td class=\"cur\" aria-hidden=\"true\"></td><td class=\"c-kind mute\">")
593+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, "><td class=\"cur\" aria-hidden=\"true\"></td><td class=\"c-kind mute\">")
565594 if templ_7745c5c3_Err != nil {
566595 return templ_7745c5c3_Err
567596 }
568- var templ_7745c5c3_Var26 string
569- templ_7745c5c3_Var26, templ_7745c5c3_Err = templ.JoinStringErrs(kind)
597+ var templ_7745c5c3_Var27 string
598+ templ_7745c5c3_Var27, templ_7745c5c3_Err = templ.JoinStringErrs(kind)
570599 if templ_7745c5c3_Err != nil {
571- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 121, Col: 32}
600+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 130, Col: 32}
572601 }
573- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var26))
602+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var27))
574603 if templ_7745c5c3_Err != nil {
575604 return templ_7745c5c3_Err
576605 }
577- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "</td><td class=\"c-name\"><a href=\"")
606+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "</td><td class=\"c-name\"><a href=\"")
578607 if templ_7745c5c3_Err != nil {
579608 return templ_7745c5c3_Err
580609 }
581- var templ_7745c5c3_Var27 templ.SafeURL
582- templ_7745c5c3_Var27, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(r.Href))
610+ var templ_7745c5c3_Var28 templ.SafeURL
611+ templ_7745c5c3_Var28, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(r.Href))
583612 if templ_7745c5c3_Err != nil {
584- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 123, Col: 34}
613+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 132, Col: 34}
585614 }
586- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var27))
615+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var28))
587616 if templ_7745c5c3_Err != nil {
588617 return templ_7745c5c3_Err
589618 }
590- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, "\">")
619+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "\">")
591620 if templ_7745c5c3_Err != nil {
592621 return templ_7745c5c3_Err
593622 }
594- var templ_7745c5c3_Var28 string
595- templ_7745c5c3_Var28, templ_7745c5c3_Err = templ.JoinStringErrs(r.Name)
623+ var templ_7745c5c3_Var29 string
624+ templ_7745c5c3_Var29, templ_7745c5c3_Err = templ.JoinStringErrs(r.Name)
596625 if templ_7745c5c3_Err != nil {
597- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 123, Col: 45}
626+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 132, Col: 45}
598627 }
599- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var28))
628+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var29))
600629 if templ_7745c5c3_Err != nil {
601630 return templ_7745c5c3_Err
602631 }
603- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "</a> ")
632+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, "</a> ")
604633 if templ_7745c5c3_Err != nil {
605634 return templ_7745c5c3_Err
606635 }
607636 if r.Default {
608- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 46, "<span class=\"pill\">default</span>")
637+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "<span class=\"pill\">default</span>")
609638 if templ_7745c5c3_Err != nil {
610639 return templ_7745c5c3_Err
611640 }
612641 }
613- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 47, "</td><td class=\"c-sha\">")
642+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 46, "</td><td class=\"c-sha\">")
614643 if templ_7745c5c3_Err != nil {
615644 return templ_7745c5c3_Err
616645 }
617646 if r.CHref != "" {
618- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, "<a href=\"")
647+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 47, "<a href=\"")
619648 if templ_7745c5c3_Err != nil {
620649 return templ_7745c5c3_Err
621650 }
622- var templ_7745c5c3_Var29 templ.SafeURL
623- templ_7745c5c3_Var29, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(r.CHref))
651+ var templ_7745c5c3_Var30 templ.SafeURL
652+ templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(r.CHref))
624653 if templ_7745c5c3_Err != nil {
625- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 130, Col: 36}
654+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 139, Col: 36}
626655 }
627- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var29))
656+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var30))
628657 if templ_7745c5c3_Err != nil {
629658 return templ_7745c5c3_Err
630659 }
631- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 49, "\">")
660+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, "\">")
632661 if templ_7745c5c3_Err != nil {
633662 return templ_7745c5c3_Err
634663 }
635- var templ_7745c5c3_Var30 string
636- templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinStringErrs(r.Short)
664+ var templ_7745c5c3_Var31 string
665+ templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.JoinStringErrs(r.Short)
637666 if templ_7745c5c3_Err != nil {
638- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 130, Col: 48}
667+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 139, Col: 48}
639668 }
640- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var30))
669+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var31))
641670 if templ_7745c5c3_Err != nil {
642671 return templ_7745c5c3_Err
643672 }
644- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 50, "</a>")
673+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 49, "</a>")
645674 if templ_7745c5c3_Err != nil {
646675 return templ_7745c5c3_Err
647676 }
648677 } else {
649- var templ_7745c5c3_Var31 string
650- templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.JoinStringErrs(r.Short)
678+ var templ_7745c5c3_Var32 string
679+ templ_7745c5c3_Var32, templ_7745c5c3_Err = templ.JoinStringErrs(r.Short)
651680 if templ_7745c5c3_Err != nil {
652- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 132, Col: 13}
681+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 141, Col: 13}
653682 }
654- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var31))
683+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var32))
655684 if templ_7745c5c3_Err != nil {
656685 return templ_7745c5c3_Err
657686 }
@@ -660,69 +689,69 @@ func refRow(kind string, r RefRow) templ.Component {
660689 if templ_7745c5c3_Err != nil {
661690 return templ_7745c5c3_Err
662691 }
663- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 51, "</td><td class=\"c-sub\">")
692+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 50, "</td><td class=\"c-sub\">")
664693 if templ_7745c5c3_Err != nil {
665694 return templ_7745c5c3_Err
666695 }
667- var templ_7745c5c3_Var32 string
668- templ_7745c5c3_Var32, templ_7745c5c3_Err = templ.JoinStringErrs(r.Subject)
696+ var templ_7745c5c3_Var33 string
697+ templ_7745c5c3_Var33, templ_7745c5c3_Err = templ.JoinStringErrs(r.Subject)
669698 if templ_7745c5c3_Err != nil {
670- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 136, Col: 31}
699+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 145, Col: 31}
671700 }
672- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var32))
701+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var33))
673702 if templ_7745c5c3_Err != nil {
674703 return templ_7745c5c3_Err
675704 }
676- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 52, "</td><td class=\"c-when dim\">")
705+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 51, "</td><td class=\"c-when dim\">")
677706 if templ_7745c5c3_Err != nil {
678707 return templ_7745c5c3_Err
679708 }
680709 if r.WhenAt != "" {
681- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 53, "<time datetime=\"")
710+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 52, "<time datetime=\"")
682711 if templ_7745c5c3_Err != nil {
683712 return templ_7745c5c3_Err
684713 }
685- var templ_7745c5c3_Var33 string
686- templ_7745c5c3_Var33, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.WhenAt)
714+ var templ_7745c5c3_Var34 string
715+ templ_7745c5c3_Var34, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.WhenAt)
687716 if templ_7745c5c3_Err != nil {
688- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 139, Col: 29}
717+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 148, Col: 29}
689718 }
690- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var33)
719+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var34)
691720 if templ_7745c5c3_Err != nil {
692721 return templ_7745c5c3_Err
693722 }
694- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 54, "\" title=\"")
723+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 53, "\" title=\"")
695724 if templ_7745c5c3_Err != nil {
696725 return templ_7745c5c3_Err
697726 }
698- var templ_7745c5c3_Var34 string
699- templ_7745c5c3_Var34, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.WhenAt)
727+ var templ_7745c5c3_Var35 string
728+ templ_7745c5c3_Var35, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.WhenAt)
700729 if templ_7745c5c3_Err != nil {
701- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 139, Col: 48}
730+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 148, Col: 48}
702731 }
703- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var34)
732+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var35)
704733 if templ_7745c5c3_Err != nil {
705734 return templ_7745c5c3_Err
706735 }
707- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, "\">")
736+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 54, "\">")
708737 if templ_7745c5c3_Err != nil {
709738 return templ_7745c5c3_Err
710739 }
711- var templ_7745c5c3_Var35 string
712- templ_7745c5c3_Var35, templ_7745c5c3_Err = templ.JoinStringErrs(r.When)
740+ var templ_7745c5c3_Var36 string
741+ templ_7745c5c3_Var36, templ_7745c5c3_Err = templ.JoinStringErrs(r.When)
713742 if templ_7745c5c3_Err != nil {
714- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 139, Col: 59}
743+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 148, Col: 59}
715744 }
716- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var35))
745+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var36))
717746 if templ_7745c5c3_Err != nil {
718747 return templ_7745c5c3_Err
719748 }
720- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 56, "</time>")
749+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, "</time>")
721750 if templ_7745c5c3_Err != nil {
722751 return templ_7745c5c3_Err
723752 }
724753 }
725- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "</td></tr>")
754+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 56, "</td></tr>")
726755 if templ_7745c5c3_Err != nil {
727756 return templ_7745c5c3_Err
728757 }
@@ -746,12 +775,12 @@ func refsRail(p RefsPage) templ.Component {
746775 }()
747776 }
748777 ctx = templ.InitializeContext(ctx)
749- templ_7745c5c3_Var36 := templ.GetChildren(ctx)
750- if templ_7745c5c3_Var36 == nil {
751- templ_7745c5c3_Var36 = templ.NopComponent
778+ templ_7745c5c3_Var37 := templ.GetChildren(ctx)
779+ if templ_7745c5c3_Var37 == nil {
780+ templ_7745c5c3_Var37 = templ.NopComponent
752781 }
753782 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>")
783+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "<section aria-labelledby=\"r-refs\"><h2 id=\"r-refs\">Overview</h2>")
755784 if templ_7745c5c3_Err != nil {
756785 return templ_7745c5c3_Err
757786 }
@@ -759,7 +788,7 @@ func refsRail(p RefsPage) templ.Component {
759788 if templ_7745c5c3_Err != nil {
760789 return templ_7745c5c3_Err
761790 }
762- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, "</section>")
791+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "</section>")
763792 if templ_7745c5c3_Err != nil {
764793 return templ_7745c5c3_Err
765794 }
@@ -784,12 +813,12 @@ func State(l Layout, p StatePage) templ.Component {
784813 }()
785814 }
786815 ctx = templ.InitializeContext(ctx)
787- templ_7745c5c3_Var37 := templ.GetChildren(ctx)
788- if templ_7745c5c3_Var37 == nil {
789- templ_7745c5c3_Var37 = templ.NopComponent
816+ templ_7745c5c3_Var38 := templ.GetChildren(ctx)
817+ if templ_7745c5c3_Var38 == nil {
818+ templ_7745c5c3_Var38 = templ.NopComponent
790819 }
791820 ctx = templ.ClearChildren(ctx)
792- templ_7745c5c3_Var38 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
821+ templ_7745c5c3_Var39 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
793822 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
794823 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
795824 if !templ_7745c5c3_IsBuffer {
@@ -801,51 +830,51 @@ func State(l Layout, p StatePage) templ.Component {
801830 }()
802831 }
803832 ctx = templ.InitializeContext(ctx)
804- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 60, "<section class=\"state\" aria-labelledby=\"state-title\"><p class=\"eyebrow\">")
833+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, "<section class=\"state\" aria-labelledby=\"state-title\"><p class=\"eyebrow\">")
805834 if templ_7745c5c3_Err != nil {
806835 return templ_7745c5c3_Err
807836 }
808- var templ_7745c5c3_Var39 string
809- templ_7745c5c3_Var39, templ_7745c5c3_Err = templ.JoinStringErrs(p.Code)
837+ var templ_7745c5c3_Var40 string
838+ templ_7745c5c3_Var40, templ_7745c5c3_Err = templ.JoinStringErrs(p.Code)
810839 if templ_7745c5c3_Err != nil {
811- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 156, Col: 30}
840+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 165, Col: 30}
812841 }
813- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var39))
842+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var40))
814843 if templ_7745c5c3_Err != nil {
815844 return templ_7745c5c3_Err
816845 }
817- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "</p><h1 id=\"state-title\">")
846+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 60, "</p><h1 id=\"state-title\">")
818847 if templ_7745c5c3_Err != nil {
819848 return templ_7745c5c3_Err
820849 }
821- var templ_7745c5c3_Var40 string
822- templ_7745c5c3_Var40, templ_7745c5c3_Err = templ.JoinStringErrs(p.Title)
850+ var templ_7745c5c3_Var41 string
851+ templ_7745c5c3_Var41, templ_7745c5c3_Err = templ.JoinStringErrs(p.Title)
823852 if templ_7745c5c3_Err != nil {
824- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 157, Col: 33}
853+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 166, Col: 33}
825854 }
826- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var40))
855+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var41))
827856 if templ_7745c5c3_Err != nil {
828857 return templ_7745c5c3_Err
829858 }
830- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, "</h1>")
859+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "</h1>")
831860 if templ_7745c5c3_Err != nil {
832861 return templ_7745c5c3_Err
833862 }
834863 for _, line := range p.Lines {
835- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 63, "<p class=\"dim\">")
864+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, "<p class=\"dim\">")
836865 if templ_7745c5c3_Err != nil {
837866 return templ_7745c5c3_Err
838867 }
839- var templ_7745c5c3_Var41 string
840- templ_7745c5c3_Var41, templ_7745c5c3_Err = templ.JoinStringErrs(line)
868+ var templ_7745c5c3_Var42 string
869+ templ_7745c5c3_Var42, templ_7745c5c3_Err = templ.JoinStringErrs(line)
841870 if templ_7745c5c3_Err != nil {
842- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 159, Col: 25}
871+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 168, Col: 25}
843872 }
844- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var41))
873+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var42))
845874 if templ_7745c5c3_Err != nil {
846875 return templ_7745c5c3_Err
847876 }
848- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 64, "</p>")
877+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 63, "</p>")
849878 if templ_7745c5c3_Err != nil {
850879 return templ_7745c5c3_Err
851880 }
@@ -856,49 +885,49 @@ func State(l Layout, p StatePage) templ.Component {
856885 return templ_7745c5c3_Err
857886 }
858887 }
859- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 65, "<p class=\"state-back\">")
888+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 64, "<p class=\"state-back\">")
860889 if templ_7745c5c3_Err != nil {
861890 return templ_7745c5c3_Err
862891 }
863892 for _, b := range p.Back {
864- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 66, "<a href=\"")
893+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 65, "<a href=\"")
865894 if templ_7745c5c3_Err != nil {
866895 return templ_7745c5c3_Err
867896 }
868- var templ_7745c5c3_Var42 templ.SafeURL
869- templ_7745c5c3_Var42, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(b.Href))
897+ var templ_7745c5c3_Var43 templ.SafeURL
898+ templ_7745c5c3_Var43, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(b.Href))
870899 if templ_7745c5c3_Err != nil {
871- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 166, Col: 36}
900+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 175, Col: 36}
872901 }
873- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var42))
902+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var43))
874903 if templ_7745c5c3_Err != nil {
875904 return templ_7745c5c3_Err
876905 }
877- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 67, "\">")
906+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 66, "\">")
878907 if templ_7745c5c3_Err != nil {
879908 return templ_7745c5c3_Err
880909 }
881- var templ_7745c5c3_Var43 string
882- templ_7745c5c3_Var43, templ_7745c5c3_Err = templ.JoinStringErrs(b.Label)
910+ var templ_7745c5c3_Var44 string
911+ templ_7745c5c3_Var44, templ_7745c5c3_Err = templ.JoinStringErrs(b.Label)
883912 if templ_7745c5c3_Err != nil {
884- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 166, Col: 48}
913+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 175, Col: 48}
885914 }
886- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var43))
915+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var44))
887916 if templ_7745c5c3_Err != nil {
888917 return templ_7745c5c3_Err
889918 }
890- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 68, "</a>")
919+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 67, "</a>")
891920 if templ_7745c5c3_Err != nil {
892921 return templ_7745c5c3_Err
893922 }
894923 }
895- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 69, "</p></section>")
924+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 68, "</p></section>")
896925 if templ_7745c5c3_Err != nil {
897926 return templ_7745c5c3_Err
898927 }
899928 return nil
900929 })
901- templ_7745c5c3_Err = Shell(l, nil).Render(templ.WithChildren(ctx, templ_7745c5c3_Var38), templ_7745c5c3_Buffer)
930+ templ_7745c5c3_Err = Shell(l, nil).Render(templ.WithChildren(ctx, templ_7745c5c3_Var39), templ_7745c5c3_Buffer)
902931 if templ_7745c5c3_Err != nil {
903932 return templ_7745c5c3_Err
904933 }
@@ -927,12 +956,12 @@ func Login(l Layout, p LoginPage) templ.Component {
927956 }()
928957 }
929958 ctx = templ.InitializeContext(ctx)
930- templ_7745c5c3_Var44 := templ.GetChildren(ctx)
931- if templ_7745c5c3_Var44 == nil {
932- templ_7745c5c3_Var44 = templ.NopComponent
959+ templ_7745c5c3_Var45 := templ.GetChildren(ctx)
960+ if templ_7745c5c3_Var45 == nil {
961+ templ_7745c5c3_Var45 = templ.NopComponent
933962 }
934963 ctx = templ.ClearChildren(ctx)
935- templ_7745c5c3_Var45 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
964+ templ_7745c5c3_Var46 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
936965 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
937966 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
938967 if !templ_7745c5c3_IsBuffer {
@@ -944,75 +973,75 @@ func Login(l Layout, p LoginPage) templ.Component {
944973 }()
945974 }
946975 ctx = templ.InitializeContext(ctx)
947- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, "<section class=\"state\" aria-labelledby=\"state-title\"><h1 id=\"state-title\">")
976+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 69, "<section class=\"state\" aria-labelledby=\"state-title\"><h1 id=\"state-title\">")
948977 if templ_7745c5c3_Err != nil {
949978 return templ_7745c5c3_Err
950979 }
951- var templ_7745c5c3_Var46 string
952- templ_7745c5c3_Var46, templ_7745c5c3_Err = templ.JoinStringErrs(p.Title)
980+ var templ_7745c5c3_Var47 string
981+ templ_7745c5c3_Var47, templ_7745c5c3_Err = templ.JoinStringErrs(p.Title)
953982 if templ_7745c5c3_Err != nil {
954- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 181, Col: 33}
983+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 190, Col: 33}
955984 }
956- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var46))
985+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var47))
957986 if templ_7745c5c3_Err != nil {
958987 return templ_7745c5c3_Err
959988 }
960- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 71, "</h1>")
989+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, "</h1>")
961990 if templ_7745c5c3_Err != nil {
962991 return templ_7745c5c3_Err
963992 }
964993 for _, line := range p.Lines {
965- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 72, "<p class=\"dim\">")
994+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 71, "<p class=\"dim\">")
966995 if templ_7745c5c3_Err != nil {
967996 return templ_7745c5c3_Err
968997 }
969- var templ_7745c5c3_Var47 string
970- templ_7745c5c3_Var47, templ_7745c5c3_Err = templ.JoinStringErrs(line)
998+ var templ_7745c5c3_Var48 string
999+ templ_7745c5c3_Var48, templ_7745c5c3_Err = templ.JoinStringErrs(line)
9711000 if templ_7745c5c3_Err != nil {
972- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 183, Col: 25}
1001+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 192, Col: 25}
9731002 }
974- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var47))
1003+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var48))
9751004 if templ_7745c5c3_Err != nil {
9761005 return templ_7745c5c3_Err
9771006 }
978- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 73, "</p>")
1007+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 72, "</p>")
9791008 if templ_7745c5c3_Err != nil {
9801009 return templ_7745c5c3_Err
9811010 }
9821011 }
983- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 74, "<form class=\"state-act\" method=\"post\" action=\"")
1012+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 73, "<form class=\"state-act\" method=\"post\" action=\"")
9841013 if templ_7745c5c3_Err != nil {
9851014 return templ_7745c5c3_Err
9861015 }
987- var templ_7745c5c3_Var48 templ.SafeURL
988- templ_7745c5c3_Var48, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Action))
1016+ var templ_7745c5c3_Var49 templ.SafeURL
1017+ templ_7745c5c3_Var49, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Action))
9891018 if templ_7745c5c3_Err != nil {
990- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 185, Col: 73}
1019+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 194, Col: 73}
9911020 }
992- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var48))
1021+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var49))
9931022 if templ_7745c5c3_Err != nil {
9941023 return templ_7745c5c3_Err
9951024 }
996- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 75, "\" data-autosubmit><button type=\"submit\" class=\"btn primary\">")
1025+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 74, "\" data-autosubmit><button type=\"submit\" class=\"btn primary\">")
9971026 if templ_7745c5c3_Err != nil {
9981027 return templ_7745c5c3_Err
9991028 }
1000- var templ_7745c5c3_Var49 string
1001- templ_7745c5c3_Var49, templ_7745c5c3_Err = templ.JoinStringErrs(p.Button)
1029+ var templ_7745c5c3_Var50 string
1030+ templ_7745c5c3_Var50, templ_7745c5c3_Err = templ.JoinStringErrs(p.Button)
10021031 if templ_7745c5c3_Err != nil {
1003- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 186, Col: 56}
1032+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 195, Col: 56}
10041033 }
1005- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var49))
1034+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var50))
10061035 if templ_7745c5c3_Err != nil {
10071036 return templ_7745c5c3_Err
10081037 }
1009- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 76, "</button></form><p class=\"state-back\"><a href=\"/\">Back to home</a></p></section>")
1038+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 75, "</button></form><p class=\"state-back\"><a href=\"/\">Back to home</a></p></section>")
10101039 if templ_7745c5c3_Err != nil {
10111040 return templ_7745c5c3_Err
10121041 }
10131042 return nil
10141043 })
1015- templ_7745c5c3_Err = Shell(l, nil).Render(templ.WithChildren(ctx, templ_7745c5c3_Var45), templ_7745c5c3_Buffer)
1044+ templ_7745c5c3_Err = Shell(l, nil).Render(templ.WithChildren(ctx, templ_7745c5c3_Var46), templ_7745c5c3_Buffer)
10161045 if templ_7745c5c3_Err != nil {
10171046 return templ_7745c5c3_Err
10181047 }
@@ -1038,12 +1067,12 @@ func PasskeyLogin(l Layout, p PasskeyLoginPage) templ.Component {
10381067 }()
10391068 }
10401069 ctx = templ.InitializeContext(ctx)
1041- templ_7745c5c3_Var50 := templ.GetChildren(ctx)
1042- if templ_7745c5c3_Var50 == nil {
1043- templ_7745c5c3_Var50 = templ.NopComponent
1070+ templ_7745c5c3_Var51 := templ.GetChildren(ctx)
1071+ if templ_7745c5c3_Var51 == nil {
1072+ templ_7745c5c3_Var51 = templ.NopComponent
10441073 }
10451074 ctx = templ.ClearChildren(ctx)
1046- templ_7745c5c3_Var51 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1075+ templ_7745c5c3_Var52 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
10471076 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
10481077 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
10491078 if !templ_7745c5c3_IsBuffer {
@@ -1055,88 +1084,88 @@ func PasskeyLogin(l Layout, p PasskeyLoginPage) templ.Component {
10551084 }()
10561085 }
10571086 ctx = templ.InitializeContext(ctx)
1058- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 77, "<section class=\"state\" aria-labelledby=\"state-title\"><h1 id=\"state-title\">")
1087+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 76, "<section class=\"state\" aria-labelledby=\"state-title\"><h1 id=\"state-title\">")
10591088 if templ_7745c5c3_Err != nil {
10601089 return templ_7745c5c3_Err
10611090 }
1062- var templ_7745c5c3_Var52 string
1063- templ_7745c5c3_Var52, templ_7745c5c3_Err = templ.JoinStringErrs(p.Title)
1091+ var templ_7745c5c3_Var53 string
1092+ templ_7745c5c3_Var53, templ_7745c5c3_Err = templ.JoinStringErrs(p.Title)
10641093 if templ_7745c5c3_Err != nil {
1065- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 198, Col: 33}
1094+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 207, Col: 33}
10661095 }
1067- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var52))
1096+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var53))
10681097 if templ_7745c5c3_Err != nil {
10691098 return templ_7745c5c3_Err
10701099 }
1071- 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=\"")
1100+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 77, "</h1><form class=\"state-act\" data-js data-passkey-form><button type=\"submit\" class=\"btn primary\" data-passkey=\"login\" data-begin=\"")
10721101 if templ_7745c5c3_Err != nil {
10731102 return templ_7745c5c3_Err
10741103 }
1075- var templ_7745c5c3_Var53 string
1076- templ_7745c5c3_Var53, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Begin)
1104+ var templ_7745c5c3_Var54 string
1105+ templ_7745c5c3_Var54, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Begin)
10771106 if templ_7745c5c3_Err != nil {
1078- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 200, Col: 87}
1107+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 209, Col: 87}
10791108 }
1080- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var53)
1109+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var54)
10811110 if templ_7745c5c3_Err != nil {
10821111 return templ_7745c5c3_Err
10831112 }
1084- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 79, "\" data-finish=\"")
1113+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 78, "\" data-finish=\"")
10851114 if templ_7745c5c3_Err != nil {
10861115 return templ_7745c5c3_Err
10871116 }
1088- var templ_7745c5c3_Var54 string
1089- templ_7745c5c3_Var54, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Finish)
1117+ var templ_7745c5c3_Var55 string
1118+ templ_7745c5c3_Var55, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Finish)
10901119 if templ_7745c5c3_Err != nil {
1091- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 200, Col: 112}
1120+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 209, Col: 112}
10921121 }
1093- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var54)
1122+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var55)
10941123 if templ_7745c5c3_Err != nil {
10951124 return templ_7745c5c3_Err
10961125 }
1097- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 80, "\">")
1126+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 79, "\">")
10981127 if templ_7745c5c3_Err != nil {
10991128 return templ_7745c5c3_Err
11001129 }
1101- var templ_7745c5c3_Var55 string
1102- templ_7745c5c3_Var55, templ_7745c5c3_Err = templ.JoinStringErrs(p.Button)
1130+ var templ_7745c5c3_Var56 string
1131+ templ_7745c5c3_Var56, templ_7745c5c3_Err = templ.JoinStringErrs(p.Button)
11031132 if templ_7745c5c3_Err != nil {
1104- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 200, Col: 125}
1133+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 209, Col: 125}
11051134 }
1106- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var55))
1135+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var56))
11071136 if templ_7745c5c3_Err != nil {
11081137 return templ_7745c5c3_Err
11091138 }
1110- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 81, "</button></form><p class=\"dim\" role=\"status\" aria-live=\"polite\" data-passkey-status></p>")
1139+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 80, "</button></form><p class=\"dim\" role=\"status\" aria-live=\"polite\" data-passkey-status></p>")
11111140 if templ_7745c5c3_Err != nil {
11121141 return templ_7745c5c3_Err
11131142 }
11141143 for _, line := range p.Lines {
1115- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 82, "<p class=\"dim\">")
1144+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 81, "<p class=\"dim\">")
11161145 if templ_7745c5c3_Err != nil {
11171146 return templ_7745c5c3_Err
11181147 }
1119- var templ_7745c5c3_Var56 string
1120- templ_7745c5c3_Var56, templ_7745c5c3_Err = templ.JoinStringErrs(line)
1148+ var templ_7745c5c3_Var57 string
1149+ templ_7745c5c3_Var57, templ_7745c5c3_Err = templ.JoinStringErrs(line)
11211150 if templ_7745c5c3_Err != nil {
1122- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 204, Col: 25}
1151+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 213, Col: 25}
11231152 }
1124- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var56))
1153+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var57))
11251154 if templ_7745c5c3_Err != nil {
11261155 return templ_7745c5c3_Err
11271156 }
1128- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 83, "</p>")
1157+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 82, "</p>")
11291158 if templ_7745c5c3_Err != nil {
11301159 return templ_7745c5c3_Err
11311160 }
11321161 }
1133- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 84, "<p class=\"state-back\"><a href=\"/\">Back to home</a></p></section>")
1162+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 83, "<p class=\"state-back\"><a href=\"/\">Back to home</a></p></section>")
11341163 if templ_7745c5c3_Err != nil {
11351164 return templ_7745c5c3_Err
11361165 }
11371166 return nil
11381167 })
1139- templ_7745c5c3_Err = Shell(l, nil).Render(templ.WithChildren(ctx, templ_7745c5c3_Var51), templ_7745c5c3_Buffer)
1168+ templ_7745c5c3_Err = Shell(l, nil).Render(templ.WithChildren(ctx, templ_7745c5c3_Var52), templ_7745c5c3_Buffer)
11401169 if templ_7745c5c3_Err != nil {
11411170 return templ_7745c5c3_Err
11421171 }
@@ -1161,12 +1190,12 @@ func Passkeys(l Layout, p PasskeysPage) templ.Component {
11611190 }()
11621191 }
11631192 ctx = templ.InitializeContext(ctx)
1164- templ_7745c5c3_Var57 := templ.GetChildren(ctx)
1165- if templ_7745c5c3_Var57 == nil {
1166- templ_7745c5c3_Var57 = templ.NopComponent
1193+ templ_7745c5c3_Var58 := templ.GetChildren(ctx)
1194+ if templ_7745c5c3_Var58 == nil {
1195+ templ_7745c5c3_Var58 = templ.NopComponent
11671196 }
11681197 ctx = templ.ClearChildren(ctx)
1169- templ_7745c5c3_Var58 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1198+ templ_7745c5c3_Var59 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
11701199 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
11711200 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
11721201 if !templ_7745c5c3_IsBuffer {
@@ -1178,231 +1207,231 @@ func Passkeys(l Layout, p PasskeysPage) templ.Component {
11781207 }()
11791208 }
11801209 ctx = templ.InitializeContext(ctx)
1181- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 85, "<h2 class=\"rule-h\"><span>Passkeys</span><span class=\"count\">")
1210+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 84, "<h2 class=\"rule-h\"><span>Passkeys</span><span class=\"count\">")
11821211 if templ_7745c5c3_Err != nil {
11831212 return templ_7745c5c3_Err
11841213 }
1185- var templ_7745c5c3_Var59 string
1186- templ_7745c5c3_Var59, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Rows)))
1214+ var templ_7745c5c3_Var60 string
1215+ templ_7745c5c3_Var60, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Rows)))
11871216 if templ_7745c5c3_Err != nil {
1188- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 214, Col: 81}
1217+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 223, Col: 81}
11891218 }
1190- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var59))
1219+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var60))
11911220 if templ_7745c5c3_Err != nil {
11921221 return templ_7745c5c3_Err
11931222 }
1194- 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>")
1223+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 85, "</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>")
11951224 if templ_7745c5c3_Err != nil {
11961225 return templ_7745c5c3_Err
11971226 }
11981227 if len(p.Rows) > 0 {
1199- 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>")
1228+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 86, "<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>")
12001229 if templ_7745c5c3_Err != nil {
12011230 return templ_7745c5c3_Err
12021231 }
12031232 for _, r := range p.Rows {
1204- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 88, "<tr><td class=\"cur\" aria-hidden=\"true\"></td><td class=\"c-name\">")
1233+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 87, "<tr><td class=\"cur\" aria-hidden=\"true\"></td><td class=\"c-name\">")
12051234 if templ_7745c5c3_Err != nil {
12061235 return templ_7745c5c3_Err
12071236 }
1208- var templ_7745c5c3_Var60 string
1209- templ_7745c5c3_Var60, templ_7745c5c3_Err = templ.JoinStringErrs(r.Name)
1237+ var templ_7745c5c3_Var61 string
1238+ templ_7745c5c3_Var61, templ_7745c5c3_Err = templ.JoinStringErrs(r.Name)
12101239 if templ_7745c5c3_Err != nil {
1211- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 232, Col: 34}
1240+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 241, Col: 34}
12121241 }
1213- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var60))
1242+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var61))
12141243 if templ_7745c5c3_Err != nil {
12151244 return templ_7745c5c3_Err
12161245 }
1217- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 89, "</td><td class=\"c-when nowrap\"><time")
1246+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 88, "</td><td class=\"c-when nowrap\"><time")
12181247 if templ_7745c5c3_Err != nil {
12191248 return templ_7745c5c3_Err
12201249 }
12211250 if r.CreatedAt != "" {
1222- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 90, " datetime=\"")
1251+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 89, " datetime=\"")
12231252 if templ_7745c5c3_Err != nil {
12241253 return templ_7745c5c3_Err
12251254 }
1226- var templ_7745c5c3_Var61 string
1227- templ_7745c5c3_Var61, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.CreatedAt)
1255+ var templ_7745c5c3_Var62 string
1256+ templ_7745c5c3_Var62, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.CreatedAt)
12281257 if templ_7745c5c3_Err != nil {
1229- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 236, Col: 32}
1258+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 245, Col: 32}
12301259 }
1231- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var61)
1260+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var62)
12321261 if templ_7745c5c3_Err != nil {
12331262 return templ_7745c5c3_Err
12341263 }
1235- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 91, "\"")
1264+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 90, "\"")
12361265 if templ_7745c5c3_Err != nil {
12371266 return templ_7745c5c3_Err
12381267 }
12391268 }
1240- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 92, ">")
1269+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 91, ">")
12411270 if templ_7745c5c3_Err != nil {
12421271 return templ_7745c5c3_Err
12431272 }
1244- var templ_7745c5c3_Var62 string
1245- templ_7745c5c3_Var62, templ_7745c5c3_Err = templ.JoinStringErrs(r.Created)
1273+ var templ_7745c5c3_Var63 string
1274+ templ_7745c5c3_Var63, templ_7745c5c3_Err = templ.JoinStringErrs(r.Created)
12461275 if templ_7745c5c3_Err != nil {
1247- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 238, Col: 20}
1276+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 247, Col: 20}
12481277 }
1249- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var62))
1278+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var63))
12501279 if templ_7745c5c3_Err != nil {
12511280 return templ_7745c5c3_Err
12521281 }
1253- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 93, "</time></td><td class=\"c-when nowrap\"><time")
1282+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 92, "</time></td><td class=\"c-when nowrap\"><time")
12541283 if templ_7745c5c3_Err != nil {
12551284 return templ_7745c5c3_Err
12561285 }
12571286 if r.LastUsedAt != "" {
1258- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 94, " datetime=\"")
1287+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 93, " datetime=\"")
12591288 if templ_7745c5c3_Err != nil {
12601289 return templ_7745c5c3_Err
12611290 }
1262- var templ_7745c5c3_Var63 string
1263- templ_7745c5c3_Var63, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.LastUsedAt)
1291+ var templ_7745c5c3_Var64 string
1292+ templ_7745c5c3_Var64, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.LastUsedAt)
12641293 if templ_7745c5c3_Err != nil {
1265- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 243, Col: 33}
1294+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 252, Col: 33}
12661295 }
1267- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var63)
1296+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var64)
12681297 if templ_7745c5c3_Err != nil {
12691298 return templ_7745c5c3_Err
12701299 }
1271- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 95, "\"")
1300+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 94, "\"")
12721301 if templ_7745c5c3_Err != nil {
12731302 return templ_7745c5c3_Err
12741303 }
12751304 }
1276- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 96, ">")
1305+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 95, ">")
12771306 if templ_7745c5c3_Err != nil {
12781307 return templ_7745c5c3_Err
12791308 }
1280- var templ_7745c5c3_Var64 string
1281- templ_7745c5c3_Var64, templ_7745c5c3_Err = templ.JoinStringErrs(r.LastUsed)
1309+ var templ_7745c5c3_Var65 string
1310+ templ_7745c5c3_Var65, templ_7745c5c3_Err = templ.JoinStringErrs(r.LastUsed)
12821311 if templ_7745c5c3_Err != nil {
1283- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 245, Col: 21}
1312+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 254, Col: 21}
12841313 }
1285- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var64))
1314+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var65))
12861315 if templ_7745c5c3_Err != nil {
12871316 return templ_7745c5c3_Err
12881317 }
1289- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 97, "</time></td><td class=\"c-sync\">")
1318+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 96, "</time></td><td class=\"c-sync\">")
12901319 if templ_7745c5c3_Err != nil {
12911320 return templ_7745c5c3_Err
12921321 }
12931322 if r.Synced {
1294- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 98, "yes")
1323+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 97, "yes")
12951324 if templ_7745c5c3_Err != nil {
12961325 return templ_7745c5c3_Err
12971326 }
12981327 } else {
1299- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 99, "no")
1328+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 98, "no")
13001329 if templ_7745c5c3_Err != nil {
13011330 return templ_7745c5c3_Err
13021331 }
13031332 }
1304- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 100, "</td><td class=\"c-act\"><form method=\"post\" action=\"")
1333+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 99, "</td><td class=\"c-act\"><form method=\"post\" action=\"")
13051334 if templ_7745c5c3_Err != nil {
13061335 return templ_7745c5c3_Err
13071336 }
1308- var templ_7745c5c3_Var65 templ.SafeURL
1309- templ_7745c5c3_Var65, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(r.Remove))
1337+ var templ_7745c5c3_Var66 templ.SafeURL
1338+ templ_7745c5c3_Var66, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(r.Remove))
13101339 if templ_7745c5c3_Err != nil {
1311- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 255, Col: 60}
1340+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 264, Col: 60}
13121341 }
1313- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var65))
1342+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var66))
13141343 if templ_7745c5c3_Err != nil {
13151344 return templ_7745c5c3_Err
13161345 }
1317- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 101, "\"><button type=\"submit\" class=\"btn danger\" aria-label=\"")
1346+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 100, "\"><button type=\"submit\" class=\"btn danger\" aria-label=\"")
13181347 if templ_7745c5c3_Err != nil {
13191348 return templ_7745c5c3_Err
13201349 }
1321- var templ_7745c5c3_Var66 string
1322- templ_7745c5c3_Var66, templ_7745c5c3_Err = templ.ResolveAttributeValue("Remove passkey " + r.Name)
1350+ var templ_7745c5c3_Var67 string
1351+ templ_7745c5c3_Var67, templ_7745c5c3_Err = templ.ResolveAttributeValue("Remove passkey " + r.Name)
13231352 if templ_7745c5c3_Err != nil {
1324- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 256, Col: 89}
1353+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 265, Col: 89}
13251354 }
1326- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var66)
1355+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var67)
13271356 if templ_7745c5c3_Err != nil {
13281357 return templ_7745c5c3_Err
13291358 }
1330- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 102, "\">Remove</button></form></td></tr>")
1359+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 101, "\">Remove</button></form></td></tr>")
13311360 if templ_7745c5c3_Err != nil {
13321361 return templ_7745c5c3_Err
13331362 }
13341363 }
1335- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 103, "</tbody></table>")
1364+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 102, "</tbody></table>")
13361365 if templ_7745c5c3_Err != nil {
13371366 return templ_7745c5c3_Err
13381367 }
13391368 } else {
1340- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 104, "<p class=\"lede dim\">no passkeys yet.</p>")
1369+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 103, "<p class=\"lede dim\">no passkeys yet.</p>")
13411370 if templ_7745c5c3_Err != nil {
13421371 return templ_7745c5c3_Err
13431372 }
13441373 }
1345- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 105, " ")
1374+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 104, " ")
13461375 if templ_7745c5c3_Err != nil {
13471376 return templ_7745c5c3_Err
13481377 }
13491378 if p.Full {
1350- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 106, "<p class=\"dim\">")
1379+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 105, "<p class=\"dim\">")
13511380 if templ_7745c5c3_Err != nil {
13521381 return templ_7745c5c3_Err
13531382 }
1354- var templ_7745c5c3_Var67 string
1355- templ_7745c5c3_Var67, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Max))
1383+ var templ_7745c5c3_Var68 string
1384+ templ_7745c5c3_Var68, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Max))
13561385 if templ_7745c5c3_Err != nil {
1357- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 267, Col: 31}
1386+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 276, Col: 31}
13581387 }
1359- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var67))
1388+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var68))
13601389 if templ_7745c5c3_Err != nil {
13611390 return templ_7745c5c3_Err
13621391 }
1363- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 107, " passkeys are registered, the most there can be. Remove one to add another.</p>")
1392+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 106, " passkeys are registered, the most there can be. Remove one to add another.</p>")
13641393 if templ_7745c5c3_Err != nil {
13651394 return templ_7745c5c3_Err
13661395 }
13671396 } else {
1368- 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=\"")
1397+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 107, "<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=\"")
13691398 if templ_7745c5c3_Err != nil {
13701399 return templ_7745c5c3_Err
13711400 }
1372- var templ_7745c5c3_Var68 string
1373- templ_7745c5c3_Var68, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Begin)
1401+ var templ_7745c5c3_Var69 string
1402+ templ_7745c5c3_Var69, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Begin)
13741403 if templ_7745c5c3_Err != nil {
1375- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 272, Col: 90}
1404+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 281, Col: 90}
13761405 }
1377- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var68)
1406+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var69)
13781407 if templ_7745c5c3_Err != nil {
13791408 return templ_7745c5c3_Err
13801409 }
1381- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 109, "\" data-finish=\"")
1410+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 108, "\" data-finish=\"")
13821411 if templ_7745c5c3_Err != nil {
13831412 return templ_7745c5c3_Err
13841413 }
1385- var templ_7745c5c3_Var69 string
1386- templ_7745c5c3_Var69, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Finish)
1414+ var templ_7745c5c3_Var70 string
1415+ templ_7745c5c3_Var70, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Finish)
13871416 if templ_7745c5c3_Err != nil {
1388- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 272, Col: 115}
1417+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 281, Col: 115}
13891418 }
1390- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var69)
1419+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var70)
13911420 if templ_7745c5c3_Err != nil {
13921421 return templ_7745c5c3_Err
13931422 }
1394- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 110, "\">Add a passkey</button></form>")
1423+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 109, "\">Add a passkey</button></form>")
13951424 if templ_7745c5c3_Err != nil {
13961425 return templ_7745c5c3_Err
13971426 }
13981427 }
1399- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 111, " <p class=\"dim\" role=\"status\" aria-live=\"polite\" data-passkey-status></p>")
1428+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 110, " <p class=\"dim\" role=\"status\" aria-live=\"polite\" data-passkey-status></p>")
14001429 if templ_7745c5c3_Err != nil {
14011430 return templ_7745c5c3_Err
14021431 }
14031432 return nil
14041433 })
1405- templ_7745c5c3_Err = Shell(l, nil).Render(templ.WithChildren(ctx, templ_7745c5c3_Var58), templ_7745c5c3_Buffer)
1434+ templ_7745c5c3_Err = Shell(l, nil).Render(templ.WithChildren(ctx, templ_7745c5c3_Var59), templ_7745c5c3_Buffer)
14061435 if templ_7745c5c3_Err != nil {
14071436 return templ_7745c5c3_Err
14081437 }
@@ -215,7 +215,10 @@ func Summary(l Layout, p SummaryPage) templ.Component {
215 })215 })
216 }216 }
217 217
218-func summaryRail(p SummaryPage) templ.Component {218+// latestTagFact is the "latest tag" row of About: the newest tag (its
219+// commit subject on hover), how old it is, and the count of tags, a link to
220+// all of them. With too many tags to date them, the count only.
221+func latestTagFact(t LatestTag) templ.Component {
219 return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {222 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.Context223 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
221 if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {224 if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
@@ -236,189 +239,215 @@ func summaryRail(p SummaryPage) templ.Component {
236 templ_7745c5c3_Var11 = templ.NopComponent239 templ_7745c5c3_Var11 = templ.NopComponent
237 }240 }
238 ctx = templ.ClearChildren(ctx)241 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>")242+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "<dt>latest tag</dt><dd class=\"latest-tag\">")
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 {243 if templ_7745c5c3_Err != nil {
257 return templ_7745c5c3_Err244 return templ_7745c5c3_Err
258 }245 }
259- if p.Latest != nil {246+ if t.Name != "" {
260- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "<section aria-labelledby=\"r-tag\"><h2 id=\"r-tag\">Tags <span class=\"count\">")247+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, "<a class=\"tag-name\" href=\"")
261 if templ_7745c5c3_Err != nil {248 if templ_7745c5c3_Err != nil {
262 return templ_7745c5c3_Err249 return templ_7745c5c3_Err
263 }250 }
264- var templ_7745c5c3_Var12 string251+ var templ_7745c5c3_Var12 templ.SafeURL
265- templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Latest.Count))252+ templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(t.Href))
266 if templ_7745c5c3_Err != nil {253 if templ_7745c5c3_Err != nil {
267- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 64, Col: 65}254+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 64, Col: 51}
268 }255 }
269 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var12))256 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var12))
270 if templ_7745c5c3_Err != nil {257 if templ_7745c5c3_Err != nil {
271 return templ_7745c5c3_Err258 return templ_7745c5c3_Err
272 }259 }
273- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 17, "</span> <a href=\"")260+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, "\" title=\"")
274 if templ_7745c5c3_Err != nil {261 if templ_7745c5c3_Err != nil {
275 return templ_7745c5c3_Err262 return templ_7745c5c3_Err
276 }263 }
277- var templ_7745c5c3_Var13 templ.SafeURL264+ var templ_7745c5c3_Var13 string
278- templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Latest.RefsHref))265+ templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.ResolveAttributeValue(t.Subject)
279 if templ_7745c5c3_Err != nil {266 if templ_7745c5c3_Err != nil {
280- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 64, Col: 117}267+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 64, Col: 71}
281 }268 }
282- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var13))269+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var13)
283 if templ_7745c5c3_Err != nil {270 if templ_7745c5c3_Err != nil {
284 return templ_7745c5c3_Err271 return templ_7745c5c3_Err
285 }272 }
286- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 18, "\">View all</a></h2>")273+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "\"><span class=\"ico i-tag\" aria-hidden=\"true\"></span>")
287 if templ_7745c5c3_Err != nil {274 if templ_7745c5c3_Err != nil {
288 return templ_7745c5c3_Err275 return templ_7745c5c3_Err
289 }276 }
290- if p.Latest.Name != "" {277+ var templ_7745c5c3_Var14 string
291- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, "<div class=\"latest-tag\"><a class=\"tag-name\" href=\"")278+ templ_7745c5c3_Var14, templ_7745c5c3_Err = templ.JoinStringErrs(t.Name)
292- if templ_7745c5c3_Err != nil {279+ if templ_7745c5c3_Err != nil {
293- return templ_7745c5c3_Err280+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 64, Col: 132}
294- }281+ }
295- var templ_7745c5c3_Var14 templ.SafeURL282+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var14))
296- templ_7745c5c3_Var14, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Latest.Href))283+ if templ_7745c5c3_Err != nil {
297- if templ_7745c5c3_Err != nil {284+ return templ_7745c5c3_Err
298- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 67, Col: 60}285+ }
299- }286+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 17, "</a> ")
300- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var14))287+ if templ_7745c5c3_Err != nil {
301- if templ_7745c5c3_Err != nil {288+ return templ_7745c5c3_Err
302- return templ_7745c5c3_Err289+ }
303- }290+ if t.WhenAt != "" {
304- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "\"><span class=\"ico i-tag\" aria-hidden=\"true\"></span>")291+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 18, "<time class=\"dim\" datetime=\"")
305 if templ_7745c5c3_Err != nil {292 if templ_7745c5c3_Err != nil {
306 return templ_7745c5c3_Err293 return templ_7745c5c3_Err
307 }294 }
308 var templ_7745c5c3_Var15 string295 var templ_7745c5c3_Var15 string
309- templ_7745c5c3_Var15, templ_7745c5c3_Err = templ.JoinStringErrs(p.Latest.Name)296+ templ_7745c5c3_Var15, templ_7745c5c3_Err = templ.ResolveAttributeValue(t.WhenAt)
310 if templ_7745c5c3_Err != nil {297 if templ_7745c5c3_Err != nil {
311- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 67, Col: 128}298+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 66, Col: 41}
312 }299 }
313- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var15))300+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var15)
314 if templ_7745c5c3_Err != nil {301 if templ_7745c5c3_Err != nil {
315 return templ_7745c5c3_Err302 return templ_7745c5c3_Err
316 }303 }
317- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "</a> <span class=\"pill\">latest</span> <time class=\"dim\" datetime=\"")304+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, "\" title=\"")
318 if templ_7745c5c3_Err != nil {305 if templ_7745c5c3_Err != nil {
319 return templ_7745c5c3_Err306 return templ_7745c5c3_Err
320 }307 }
321 var templ_7745c5c3_Var16 string308 var templ_7745c5c3_Var16 string
322- templ_7745c5c3_Var16, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Latest.WhenAt)309+ templ_7745c5c3_Var16, templ_7745c5c3_Err = templ.ResolveAttributeValue(t.WhenAt)
323 if templ_7745c5c3_Err != nil {310 if templ_7745c5c3_Err != nil {
324- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 69, Col: 49}311+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 66, Col: 60}
325 }312 }
326 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var16)313 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var16)
327 if templ_7745c5c3_Err != nil {314 if templ_7745c5c3_Err != nil {
328 return templ_7745c5c3_Err315 return templ_7745c5c3_Err
329 }316 }
330- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "\" title=\"")317+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "\">")
331 if templ_7745c5c3_Err != nil {318 if templ_7745c5c3_Err != nil {
332 return templ_7745c5c3_Err319 return templ_7745c5c3_Err
333 }320 }
334 var templ_7745c5c3_Var17 string321 var templ_7745c5c3_Var17 string
335- templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Latest.WhenAt)322+ templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.JoinStringErrs(t.When)
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 {323 if templ_7745c5c3_Err != nil {
381- return templ_7745c5c3_Err324+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 66, Col: 71}
382 }325 }
383- } else {326+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var17))
384- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 28, "<p class=\"dim\">")
385 if templ_7745c5c3_Err != nil {327 if templ_7745c5c3_Err != nil {
386 return templ_7745c5c3_Err328 return templ_7745c5c3_Err
387 }329 }
388- var templ_7745c5c3_Var20 string330+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "</time> ")
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 {331 if templ_7745c5c3_Err != nil {
395 return templ_7745c5c3_Err332 return templ_7745c5c3_Err
396 }333 }
397- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 29, "</p>")334+ }
398- if templ_7745c5c3_Err != nil {335+ }
399- return templ_7745c5c3_Err336+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "<a class=\"all-tags\" href=\"")
337+ if templ_7745c5c3_Err != nil {
338+ return templ_7745c5c3_Err
339+ }
340+ var templ_7745c5c3_Var18 templ.SafeURL
341+ templ_7745c5c3_Var18, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(t.RefsHref))
342+ if templ_7745c5c3_Err != nil {
343+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 69, Col: 54}
344+ }
345+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var18))
346+ if templ_7745c5c3_Err != nil {
347+ return templ_7745c5c3_Err
348+ }
349+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 23, "\">")
350+ if templ_7745c5c3_Err != nil {
351+ return templ_7745c5c3_Err
352+ }
353+ var templ_7745c5c3_Var19 string
354+ templ_7745c5c3_Var19, templ_7745c5c3_Err = templ.JoinStringErrs(plural(t.Count, "tag", "tags"))
355+ if templ_7745c5c3_Err != nil {
356+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 69, Col: 89}
357+ }
358+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var19))
359+ if templ_7745c5c3_Err != nil {
360+ return templ_7745c5c3_Err
361+ }
362+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, "</a></dd>")
363+ if templ_7745c5c3_Err != nil {
364+ return templ_7745c5c3_Err
365+ }
366+ return nil
367+ })
368+}
369+
370+func summaryRail(p SummaryPage) templ.Component {
371+ return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
372+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
373+ if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
374+ return templ_7745c5c3_CtxErr
375+ }
376+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
377+ if !templ_7745c5c3_IsBuffer {
378+ defer func() {
379+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
380+ if templ_7745c5c3_Err == nil {
381+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
400 }382 }
383+ }()
384+ }
385+ ctx = templ.InitializeContext(ctx)
386+ templ_7745c5c3_Var20 := templ.GetChildren(ctx)
387+ if templ_7745c5c3_Var20 == nil {
388+ templ_7745c5c3_Var20 = templ.NopComponent
389+ }
390+ ctx = templ.ClearChildren(ctx)
391+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 25, "<section aria-labelledby=\"r-clone\"><h2 id=\"r-clone\">Clone</h2>")
392+ if templ_7745c5c3_Err != nil {
393+ return templ_7745c5c3_Err
394+ }
395+ templ_7745c5c3_Err = CloneBlock(p.Clone).Render(ctx, templ_7745c5c3_Buffer)
396+ if templ_7745c5c3_Err != nil {
397+ return templ_7745c5c3_Err
398+ }
399+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 26, "</section><section aria-labelledby=\"r-facts\"><h2 id=\"r-facts\">About</h2><dl class=\"kv\">")
400+ if templ_7745c5c3_Err != nil {
401+ return templ_7745c5c3_Err
402+ }
403+ for _, f := range p.Facts {
404+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 27, "<dt>")
405+ if templ_7745c5c3_Err != nil {
406+ return templ_7745c5c3_Err
407+ }
408+ var templ_7745c5c3_Var21 string
409+ templ_7745c5c3_Var21, templ_7745c5c3_Err = templ.JoinStringErrs(f.Key)
410+ if templ_7745c5c3_Err != nil {
411+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 80, Col: 15}
412+ }
413+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var21))
414+ if templ_7745c5c3_Err != nil {
415+ return templ_7745c5c3_Err
416+ }
417+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 28, "</dt>")
418+ if templ_7745c5c3_Err != nil {
419+ return templ_7745c5c3_Err
420+ }
421+ templ_7745c5c3_Err = FactValue(f).Render(ctx, templ_7745c5c3_Buffer)
422+ if templ_7745c5c3_Err != nil {
423+ return templ_7745c5c3_Err
401 }424 }
402- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 30, "</section>")425+ }
426+ if p.Latest != nil {
427+ templ_7745c5c3_Err = latestTagFact(*p.Latest).Render(ctx, templ_7745c5c3_Buffer)
403 if templ_7745c5c3_Err != nil {428 if templ_7745c5c3_Err != nil {
404 return templ_7745c5c3_Err429 return templ_7745c5c3_Err
405 }430 }
406 }431 }
432+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 29, "</dl></section>")
433+ if templ_7745c5c3_Err != nil {
434+ return templ_7745c5c3_Err
435+ }
407 if len(p.Recent) > 0 {436 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=\"")437+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 30, "<section aria-labelledby=\"r-recent\"><h2 id=\"r-recent\">Recent commits <a href=\"")
409 if templ_7745c5c3_Err != nil {438 if templ_7745c5c3_Err != nil {
410 return templ_7745c5c3_Err439 return templ_7745c5c3_Err
411 }440 }
412- var templ_7745c5c3_Var21 templ.SafeURL441+ var templ_7745c5c3_Var22 templ.SafeURL
413- templ_7745c5c3_Var21, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.AllHref))442+ templ_7745c5c3_Var22, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.AllHref))
414 if templ_7745c5c3_Err != nil {443 if templ_7745c5c3_Err != nil {
415- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 80, Col: 105}444+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 89, Col: 105}
416 }445 }
417- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var21))446+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var22))
418 if templ_7745c5c3_Err != nil {447 if templ_7745c5c3_Err != nil {
419 return templ_7745c5c3_Err448 return templ_7745c5c3_Err
420 }449 }
421- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 32, "\">View all</a></h2>")450+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 31, "\">View all</a></h2>")
422 if templ_7745c5c3_Err != nil {451 if templ_7745c5c3_Err != nil {
423 return templ_7745c5c3_Err452 return templ_7745c5c3_Err
424 }453 }
@@ -426,7 +455,7 @@ func summaryRail(p SummaryPage) templ.Component {
426 if templ_7745c5c3_Err != nil {455 if templ_7745c5c3_Err != nil {
427 return templ_7745c5c3_Err456 return templ_7745c5c3_Err
428 }457 }
429- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, "</section>")458+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 32, "</section>")
430 if templ_7745c5c3_Err != nil {459 if templ_7745c5c3_Err != nil {
431 return templ_7745c5c3_Err460 return templ_7745c5c3_Err
432 }461 }
@@ -438,7 +467,7 @@ func summaryRail(p SummaryPage) templ.Component {
438 }467 }
439 }468 }
440 if len(p.Outline) > 0 && p.Readme != nil {469 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>")470+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, "<section aria-labelledby=\"r-outline\"><h2 id=\"r-outline\">On this page</h2>")
442 if templ_7745c5c3_Err != nil {471 if templ_7745c5c3_Err != nil {
443 return templ_7745c5c3_Err472 return templ_7745c5c3_Err
444 }473 }
@@ -446,7 +475,7 @@ func summaryRail(p SummaryPage) templ.Component {
446 if templ_7745c5c3_Err != nil {475 if templ_7745c5c3_Err != nil {
447 return templ_7745c5c3_Err476 return templ_7745c5c3_Err
448 }477 }
449- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 35, "</section>")478+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 34, "</section>")
450 if templ_7745c5c3_Err != nil {479 if templ_7745c5c3_Err != nil {
451 return templ_7745c5c3_Err480 return templ_7745c5c3_Err
452 }481 }
@@ -472,12 +501,12 @@ func Refs(l Layout, p RefsPage) templ.Component {
472 }()501 }()
473 }502 }
474 ctx = templ.InitializeContext(ctx)503 ctx = templ.InitializeContext(ctx)
475- templ_7745c5c3_Var22 := templ.GetChildren(ctx)504+ templ_7745c5c3_Var23 := templ.GetChildren(ctx)
476- if templ_7745c5c3_Var22 == nil {505+ if templ_7745c5c3_Var23 == nil {
477- templ_7745c5c3_Var22 = templ.NopComponent506+ templ_7745c5c3_Var23 = templ.NopComponent
478 }507 }
479 ctx = templ.ClearChildren(ctx)508 ctx = templ.ClearChildren(ctx)
480- templ_7745c5c3_Var23 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {509+ templ_7745c5c3_Var24 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
481 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context510 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
482 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)511 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
483 if !templ_7745c5c3_IsBuffer {512 if !templ_7745c5c3_IsBuffer {
@@ -489,7 +518,7 @@ func Refs(l Layout, p RefsPage) templ.Component {
489 }()518 }()
490 }519 }
491 ctx = templ.InitializeContext(ctx)520 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>")521+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 35, "<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 {522 if templ_7745c5c3_Err != nil {
494 return templ_7745c5c3_Err523 return templ_7745c5c3_Err
495 }524 }
@@ -497,32 +526,32 @@ func Refs(l Layout, p RefsPage) templ.Component {
497 if templ_7745c5c3_Err != nil {526 if templ_7745c5c3_Err != nil {
498 return templ_7745c5c3_Err527 return templ_7745c5c3_Err
499 }528 }
500- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 37, "</table>")529+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, "</table>")
501 if templ_7745c5c3_Err != nil {530 if templ_7745c5c3_Err != nil {
502 return templ_7745c5c3_Err531 return templ_7745c5c3_Err
503 }532 }
504 if p.Note != "" {533 if p.Note != "" {
505- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, "<p class=\"note\">")534+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 37, "<p class=\"note\">")
506 if templ_7745c5c3_Err != nil {535 if templ_7745c5c3_Err != nil {
507 return templ_7745c5c3_Err536 return templ_7745c5c3_Err
508 }537 }
509- var templ_7745c5c3_Var24 string538+ var templ_7745c5c3_Var25 string
510- templ_7745c5c3_Var24, templ_7745c5c3_Err = templ.JoinStringErrs(p.Note)539+ templ_7745c5c3_Var25, templ_7745c5c3_Err = templ.JoinStringErrs(p.Note)
511 if templ_7745c5c3_Err != nil {540 if templ_7745c5c3_Err != nil {
512- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 113, Col: 27}541+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 122, Col: 27}
513 }542 }
514- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var24))543+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var25))
515 if templ_7745c5c3_Err != nil {544 if templ_7745c5c3_Err != nil {
516 return templ_7745c5c3_Err545 return templ_7745c5c3_Err
517 }546 }
518- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, "</p>")547+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, "</p>")
519 if templ_7745c5c3_Err != nil {548 if templ_7745c5c3_Err != nil {
520 return templ_7745c5c3_Err549 return templ_7745c5c3_Err
521 }550 }
522 }551 }
523 return nil552 return nil
524 })553 })
525- templ_7745c5c3_Err = Shell(l, refsRail(p)).Render(templ.WithChildren(ctx, templ_7745c5c3_Var23), templ_7745c5c3_Buffer)554+ templ_7745c5c3_Err = Shell(l, refsRail(p)).Render(templ.WithChildren(ctx, templ_7745c5c3_Var24), templ_7745c5c3_Buffer)
526 if templ_7745c5c3_Err != nil {555 if templ_7745c5c3_Err != nil {
527 return templ_7745c5c3_Err556 return templ_7745c5c3_Err
528 }557 }
@@ -546,112 +575,112 @@ func refRow(kind string, r RefRow) templ.Component {
546 }()575 }()
547 }576 }
548 ctx = templ.InitializeContext(ctx)577 ctx = templ.InitializeContext(ctx)
549- templ_7745c5c3_Var25 := templ.GetChildren(ctx)578+ templ_7745c5c3_Var26 := templ.GetChildren(ctx)
550- if templ_7745c5c3_Var25 == nil {579+ if templ_7745c5c3_Var26 == nil {
551- templ_7745c5c3_Var25 = templ.NopComponent580+ templ_7745c5c3_Var26 = templ.NopComponent
552 }581 }
553 ctx = templ.ClearChildren(ctx)582 ctx = templ.ClearChildren(ctx)
554- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, "<tr")583+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, "<tr")
555 if templ_7745c5c3_Err != nil {584 if templ_7745c5c3_Err != nil {
556 return templ_7745c5c3_Err585 return templ_7745c5c3_Err
557 }586 }
558 if r.Cursor {587 if r.Cursor {
559- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, " data-cursor")588+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, " data-cursor")
560 if templ_7745c5c3_Err != nil {589 if templ_7745c5c3_Err != nil {
561 return templ_7745c5c3_Err590 return templ_7745c5c3_Err
562 }591 }
563 }592 }
564- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "><td class=\"cur\" aria-hidden=\"true\"></td><td class=\"c-kind mute\">")593+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, "><td class=\"cur\" aria-hidden=\"true\"></td><td class=\"c-kind mute\">")
565 if templ_7745c5c3_Err != nil {594 if templ_7745c5c3_Err != nil {
566 return templ_7745c5c3_Err595 return templ_7745c5c3_Err
567 }596 }
568- var templ_7745c5c3_Var26 string597+ var templ_7745c5c3_Var27 string
569- templ_7745c5c3_Var26, templ_7745c5c3_Err = templ.JoinStringErrs(kind)598+ templ_7745c5c3_Var27, templ_7745c5c3_Err = templ.JoinStringErrs(kind)
570 if templ_7745c5c3_Err != nil {599 if templ_7745c5c3_Err != nil {
571- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 121, Col: 32}600+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 130, Col: 32}
572 }601 }
573- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var26))602+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var27))
574 if templ_7745c5c3_Err != nil {603 if templ_7745c5c3_Err != nil {
575 return templ_7745c5c3_Err604 return templ_7745c5c3_Err
576 }605 }
577- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "</td><td class=\"c-name\"><a href=\"")606+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "</td><td class=\"c-name\"><a href=\"")
578 if templ_7745c5c3_Err != nil {607 if templ_7745c5c3_Err != nil {
579 return templ_7745c5c3_Err608 return templ_7745c5c3_Err
580 }609 }
581- var templ_7745c5c3_Var27 templ.SafeURL610+ var templ_7745c5c3_Var28 templ.SafeURL
582- templ_7745c5c3_Var27, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(r.Href))611+ templ_7745c5c3_Var28, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(r.Href))
583 if templ_7745c5c3_Err != nil {612 if templ_7745c5c3_Err != nil {
584- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 123, Col: 34}613+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 132, Col: 34}
585 }614 }
586- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var27))615+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var28))
587 if templ_7745c5c3_Err != nil {616 if templ_7745c5c3_Err != nil {
588 return templ_7745c5c3_Err617 return templ_7745c5c3_Err
589 }618 }
590- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, "\">")619+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "\">")
591 if templ_7745c5c3_Err != nil {620 if templ_7745c5c3_Err != nil {
592 return templ_7745c5c3_Err621 return templ_7745c5c3_Err
593 }622 }
594- var templ_7745c5c3_Var28 string623+ var templ_7745c5c3_Var29 string
595- templ_7745c5c3_Var28, templ_7745c5c3_Err = templ.JoinStringErrs(r.Name)624+ templ_7745c5c3_Var29, templ_7745c5c3_Err = templ.JoinStringErrs(r.Name)
596 if templ_7745c5c3_Err != nil {625 if templ_7745c5c3_Err != nil {
597- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 123, Col: 45}626+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 132, Col: 45}
598 }627 }
599- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var28))628+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var29))
600 if templ_7745c5c3_Err != nil {629 if templ_7745c5c3_Err != nil {
601 return templ_7745c5c3_Err630 return templ_7745c5c3_Err
602 }631 }
603- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "</a> ")632+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, "</a> ")
604 if templ_7745c5c3_Err != nil {633 if templ_7745c5c3_Err != nil {
605 return templ_7745c5c3_Err634 return templ_7745c5c3_Err
606 }635 }
607 if r.Default {636 if r.Default {
608- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 46, "<span class=\"pill\">default</span>")637+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "<span class=\"pill\">default</span>")
609 if templ_7745c5c3_Err != nil {638 if templ_7745c5c3_Err != nil {
610 return templ_7745c5c3_Err639 return templ_7745c5c3_Err
611 }640 }
612 }641 }
613- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 47, "</td><td class=\"c-sha\">")642+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 46, "</td><td class=\"c-sha\">")
614 if templ_7745c5c3_Err != nil {643 if templ_7745c5c3_Err != nil {
615 return templ_7745c5c3_Err644 return templ_7745c5c3_Err
616 }645 }
617 if r.CHref != "" {646 if r.CHref != "" {
618- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, "<a href=\"")647+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 47, "<a href=\"")
619 if templ_7745c5c3_Err != nil {648 if templ_7745c5c3_Err != nil {
620 return templ_7745c5c3_Err649 return templ_7745c5c3_Err
621 }650 }
622- var templ_7745c5c3_Var29 templ.SafeURL651+ var templ_7745c5c3_Var30 templ.SafeURL
623- templ_7745c5c3_Var29, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(r.CHref))652+ templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(r.CHref))
624 if templ_7745c5c3_Err != nil {653 if templ_7745c5c3_Err != nil {
625- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 130, Col: 36}654+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 139, Col: 36}
626 }655 }
627- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var29))656+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var30))
628 if templ_7745c5c3_Err != nil {657 if templ_7745c5c3_Err != nil {
629 return templ_7745c5c3_Err658 return templ_7745c5c3_Err
630 }659 }
631- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 49, "\">")660+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, "\">")
632 if templ_7745c5c3_Err != nil {661 if templ_7745c5c3_Err != nil {
633 return templ_7745c5c3_Err662 return templ_7745c5c3_Err
634 }663 }
635- var templ_7745c5c3_Var30 string664+ var templ_7745c5c3_Var31 string
636- templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinStringErrs(r.Short)665+ templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.JoinStringErrs(r.Short)
637 if templ_7745c5c3_Err != nil {666 if templ_7745c5c3_Err != nil {
638- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 130, Col: 48}667+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 139, Col: 48}
639 }668 }
640- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var30))669+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var31))
641 if templ_7745c5c3_Err != nil {670 if templ_7745c5c3_Err != nil {
642 return templ_7745c5c3_Err671 return templ_7745c5c3_Err
643 }672 }
644- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 50, "</a>")673+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 49, "</a>")
645 if templ_7745c5c3_Err != nil {674 if templ_7745c5c3_Err != nil {
646 return templ_7745c5c3_Err675 return templ_7745c5c3_Err
647 }676 }
648 } else {677 } else {
649- var templ_7745c5c3_Var31 string678+ var templ_7745c5c3_Var32 string
650- templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.JoinStringErrs(r.Short)679+ templ_7745c5c3_Var32, templ_7745c5c3_Err = templ.JoinStringErrs(r.Short)
651 if templ_7745c5c3_Err != nil {680 if templ_7745c5c3_Err != nil {
652- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 132, Col: 13}681+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 141, Col: 13}
653 }682 }
654- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var31))683+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var32))
655 if templ_7745c5c3_Err != nil {684 if templ_7745c5c3_Err != nil {
656 return templ_7745c5c3_Err685 return templ_7745c5c3_Err
657 }686 }
@@ -660,69 +689,69 @@ func refRow(kind string, r RefRow) templ.Component {
660 if templ_7745c5c3_Err != nil {689 if templ_7745c5c3_Err != nil {
661 return templ_7745c5c3_Err690 return templ_7745c5c3_Err
662 }691 }
663- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 51, "</td><td class=\"c-sub\">")692+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 50, "</td><td class=\"c-sub\">")
664 if templ_7745c5c3_Err != nil {693 if templ_7745c5c3_Err != nil {
665 return templ_7745c5c3_Err694 return templ_7745c5c3_Err
666 }695 }
667- var templ_7745c5c3_Var32 string696+ var templ_7745c5c3_Var33 string
668- templ_7745c5c3_Var32, templ_7745c5c3_Err = templ.JoinStringErrs(r.Subject)697+ templ_7745c5c3_Var33, templ_7745c5c3_Err = templ.JoinStringErrs(r.Subject)
669 if templ_7745c5c3_Err != nil {698 if templ_7745c5c3_Err != nil {
670- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 136, Col: 31}699+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 145, Col: 31}
671 }700 }
672- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var32))701+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var33))
673 if templ_7745c5c3_Err != nil {702 if templ_7745c5c3_Err != nil {
674 return templ_7745c5c3_Err703 return templ_7745c5c3_Err
675 }704 }
676- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 52, "</td><td class=\"c-when dim\">")705+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 51, "</td><td class=\"c-when dim\">")
677 if templ_7745c5c3_Err != nil {706 if templ_7745c5c3_Err != nil {
678 return templ_7745c5c3_Err707 return templ_7745c5c3_Err
679 }708 }
680 if r.WhenAt != "" {709 if r.WhenAt != "" {
681- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 53, "<time datetime=\"")710+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 52, "<time datetime=\"")
682 if templ_7745c5c3_Err != nil {711 if templ_7745c5c3_Err != nil {
683 return templ_7745c5c3_Err712 return templ_7745c5c3_Err
684 }713 }
685- var templ_7745c5c3_Var33 string714+ var templ_7745c5c3_Var34 string
686- templ_7745c5c3_Var33, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.WhenAt)715+ templ_7745c5c3_Var34, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.WhenAt)
687 if templ_7745c5c3_Err != nil {716 if templ_7745c5c3_Err != nil {
688- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 139, Col: 29}717+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 148, Col: 29}
689 }718 }
690- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var33)719+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var34)
691 if templ_7745c5c3_Err != nil {720 if templ_7745c5c3_Err != nil {
692 return templ_7745c5c3_Err721 return templ_7745c5c3_Err
693 }722 }
694- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 54, "\" title=\"")723+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 53, "\" title=\"")
695 if templ_7745c5c3_Err != nil {724 if templ_7745c5c3_Err != nil {
696 return templ_7745c5c3_Err725 return templ_7745c5c3_Err
697 }726 }
698- var templ_7745c5c3_Var34 string727+ var templ_7745c5c3_Var35 string
699- templ_7745c5c3_Var34, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.WhenAt)728+ templ_7745c5c3_Var35, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.WhenAt)
700 if templ_7745c5c3_Err != nil {729 if templ_7745c5c3_Err != nil {
701- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 139, Col: 48}730+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 148, Col: 48}
702 }731 }
703- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var34)732+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var35)
704 if templ_7745c5c3_Err != nil {733 if templ_7745c5c3_Err != nil {
705 return templ_7745c5c3_Err734 return templ_7745c5c3_Err
706 }735 }
707- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, "\">")736+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 54, "\">")
708 if templ_7745c5c3_Err != nil {737 if templ_7745c5c3_Err != nil {
709 return templ_7745c5c3_Err738 return templ_7745c5c3_Err
710 }739 }
711- var templ_7745c5c3_Var35 string740+ var templ_7745c5c3_Var36 string
712- templ_7745c5c3_Var35, templ_7745c5c3_Err = templ.JoinStringErrs(r.When)741+ templ_7745c5c3_Var36, templ_7745c5c3_Err = templ.JoinStringErrs(r.When)
713 if templ_7745c5c3_Err != nil {742 if templ_7745c5c3_Err != nil {
714- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 139, Col: 59}743+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 148, Col: 59}
715 }744 }
716- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var35))745+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var36))
717 if templ_7745c5c3_Err != nil {746 if templ_7745c5c3_Err != nil {
718 return templ_7745c5c3_Err747 return templ_7745c5c3_Err
719 }748 }
720- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 56, "</time>")749+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, "</time>")
721 if templ_7745c5c3_Err != nil {750 if templ_7745c5c3_Err != nil {
722 return templ_7745c5c3_Err751 return templ_7745c5c3_Err
723 }752 }
724 }753 }
725- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "</td></tr>")754+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 56, "</td></tr>")
726 if templ_7745c5c3_Err != nil {755 if templ_7745c5c3_Err != nil {
727 return templ_7745c5c3_Err756 return templ_7745c5c3_Err
728 }757 }
@@ -746,12 +775,12 @@ func refsRail(p RefsPage) templ.Component {
746 }()775 }()
747 }776 }
748 ctx = templ.InitializeContext(ctx)777 ctx = templ.InitializeContext(ctx)
749- templ_7745c5c3_Var36 := templ.GetChildren(ctx)778+ templ_7745c5c3_Var37 := templ.GetChildren(ctx)
750- if templ_7745c5c3_Var36 == nil {779+ if templ_7745c5c3_Var37 == nil {
751- templ_7745c5c3_Var36 = templ.NopComponent780+ templ_7745c5c3_Var37 = templ.NopComponent
752 }781 }
753 ctx = templ.ClearChildren(ctx)782 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>")783+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "<section aria-labelledby=\"r-refs\"><h2 id=\"r-refs\">Overview</h2>")
755 if templ_7745c5c3_Err != nil {784 if templ_7745c5c3_Err != nil {
756 return templ_7745c5c3_Err785 return templ_7745c5c3_Err
757 }786 }
@@ -759,7 +788,7 @@ func refsRail(p RefsPage) templ.Component {
759 if templ_7745c5c3_Err != nil {788 if templ_7745c5c3_Err != nil {
760 return templ_7745c5c3_Err789 return templ_7745c5c3_Err
761 }790 }
762- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, "</section>")791+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "</section>")
763 if templ_7745c5c3_Err != nil {792 if templ_7745c5c3_Err != nil {
764 return templ_7745c5c3_Err793 return templ_7745c5c3_Err
765 }794 }
@@ -784,12 +813,12 @@ func State(l Layout, p StatePage) templ.Component {
784 }()813 }()
785 }814 }
786 ctx = templ.InitializeContext(ctx)815 ctx = templ.InitializeContext(ctx)
787- templ_7745c5c3_Var37 := templ.GetChildren(ctx)816+ templ_7745c5c3_Var38 := templ.GetChildren(ctx)
788- if templ_7745c5c3_Var37 == nil {817+ if templ_7745c5c3_Var38 == nil {
789- templ_7745c5c3_Var37 = templ.NopComponent818+ templ_7745c5c3_Var38 = templ.NopComponent
790 }819 }
791 ctx = templ.ClearChildren(ctx)820 ctx = templ.ClearChildren(ctx)
792- templ_7745c5c3_Var38 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {821+ templ_7745c5c3_Var39 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
793 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context822 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
794 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)823 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
795 if !templ_7745c5c3_IsBuffer {824 if !templ_7745c5c3_IsBuffer {
@@ -801,51 +830,51 @@ func State(l Layout, p StatePage) templ.Component {
801 }()830 }()
802 }831 }
803 ctx = templ.InitializeContext(ctx)832 ctx = templ.InitializeContext(ctx)
804- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 60, "<section class=\"state\" aria-labelledby=\"state-title\"><p class=\"eyebrow\">")833+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, "<section class=\"state\" aria-labelledby=\"state-title\"><p class=\"eyebrow\">")
805 if templ_7745c5c3_Err != nil {834 if templ_7745c5c3_Err != nil {
806 return templ_7745c5c3_Err835 return templ_7745c5c3_Err
807 }836 }
808- var templ_7745c5c3_Var39 string837+ var templ_7745c5c3_Var40 string
809- templ_7745c5c3_Var39, templ_7745c5c3_Err = templ.JoinStringErrs(p.Code)838+ templ_7745c5c3_Var40, templ_7745c5c3_Err = templ.JoinStringErrs(p.Code)
810 if templ_7745c5c3_Err != nil {839 if templ_7745c5c3_Err != nil {
811- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 156, Col: 30}840+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 165, Col: 30}
812 }841 }
813- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var39))842+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var40))
814 if templ_7745c5c3_Err != nil {843 if templ_7745c5c3_Err != nil {
815 return templ_7745c5c3_Err844 return templ_7745c5c3_Err
816 }845 }
817- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "</p><h1 id=\"state-title\">")846+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 60, "</p><h1 id=\"state-title\">")
818 if templ_7745c5c3_Err != nil {847 if templ_7745c5c3_Err != nil {
819 return templ_7745c5c3_Err848 return templ_7745c5c3_Err
820 }849 }
821- var templ_7745c5c3_Var40 string850+ var templ_7745c5c3_Var41 string
822- templ_7745c5c3_Var40, templ_7745c5c3_Err = templ.JoinStringErrs(p.Title)851+ templ_7745c5c3_Var41, templ_7745c5c3_Err = templ.JoinStringErrs(p.Title)
823 if templ_7745c5c3_Err != nil {852 if templ_7745c5c3_Err != nil {
824- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 157, Col: 33}853+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 166, Col: 33}
825 }854 }
826- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var40))855+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var41))
827 if templ_7745c5c3_Err != nil {856 if templ_7745c5c3_Err != nil {
828 return templ_7745c5c3_Err857 return templ_7745c5c3_Err
829 }858 }
830- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, "</h1>")859+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "</h1>")
831 if templ_7745c5c3_Err != nil {860 if templ_7745c5c3_Err != nil {
832 return templ_7745c5c3_Err861 return templ_7745c5c3_Err
833 }862 }
834 for _, line := range p.Lines {863 for _, line := range p.Lines {
835- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 63, "<p class=\"dim\">")864+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, "<p class=\"dim\">")
836 if templ_7745c5c3_Err != nil {865 if templ_7745c5c3_Err != nil {
837 return templ_7745c5c3_Err866 return templ_7745c5c3_Err
838 }867 }
839- var templ_7745c5c3_Var41 string868+ var templ_7745c5c3_Var42 string
840- templ_7745c5c3_Var41, templ_7745c5c3_Err = templ.JoinStringErrs(line)869+ templ_7745c5c3_Var42, templ_7745c5c3_Err = templ.JoinStringErrs(line)
841 if templ_7745c5c3_Err != nil {870 if templ_7745c5c3_Err != nil {
842- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 159, Col: 25}871+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 168, Col: 25}
843 }872 }
844- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var41))873+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var42))
845 if templ_7745c5c3_Err != nil {874 if templ_7745c5c3_Err != nil {
846 return templ_7745c5c3_Err875 return templ_7745c5c3_Err
847 }876 }
848- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 64, "</p>")877+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 63, "</p>")
849 if templ_7745c5c3_Err != nil {878 if templ_7745c5c3_Err != nil {
850 return templ_7745c5c3_Err879 return templ_7745c5c3_Err
851 }880 }
@@ -856,49 +885,49 @@ func State(l Layout, p StatePage) templ.Component {
856 return templ_7745c5c3_Err885 return templ_7745c5c3_Err
857 }886 }
858 }887 }
859- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 65, "<p class=\"state-back\">")888+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 64, "<p class=\"state-back\">")
860 if templ_7745c5c3_Err != nil {889 if templ_7745c5c3_Err != nil {
861 return templ_7745c5c3_Err890 return templ_7745c5c3_Err
862 }891 }
863 for _, b := range p.Back {892 for _, b := range p.Back {
864- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 66, "<a href=\"")893+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 65, "<a href=\"")
865 if templ_7745c5c3_Err != nil {894 if templ_7745c5c3_Err != nil {
866 return templ_7745c5c3_Err895 return templ_7745c5c3_Err
867 }896 }
868- var templ_7745c5c3_Var42 templ.SafeURL897+ var templ_7745c5c3_Var43 templ.SafeURL
869- templ_7745c5c3_Var42, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(b.Href))898+ templ_7745c5c3_Var43, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(b.Href))
870 if templ_7745c5c3_Err != nil {899 if templ_7745c5c3_Err != nil {
871- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 166, Col: 36}900+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 175, Col: 36}
872 }901 }
873- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var42))902+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var43))
874 if templ_7745c5c3_Err != nil {903 if templ_7745c5c3_Err != nil {
875 return templ_7745c5c3_Err904 return templ_7745c5c3_Err
876 }905 }
877- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 67, "\">")906+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 66, "\">")
878 if templ_7745c5c3_Err != nil {907 if templ_7745c5c3_Err != nil {
879 return templ_7745c5c3_Err908 return templ_7745c5c3_Err
880 }909 }
881- var templ_7745c5c3_Var43 string910+ var templ_7745c5c3_Var44 string
882- templ_7745c5c3_Var43, templ_7745c5c3_Err = templ.JoinStringErrs(b.Label)911+ templ_7745c5c3_Var44, templ_7745c5c3_Err = templ.JoinStringErrs(b.Label)
883 if templ_7745c5c3_Err != nil {912 if templ_7745c5c3_Err != nil {
884- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 166, Col: 48}913+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 175, Col: 48}
885 }914 }
886- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var43))915+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var44))
887 if templ_7745c5c3_Err != nil {916 if templ_7745c5c3_Err != nil {
888 return templ_7745c5c3_Err917 return templ_7745c5c3_Err
889 }918 }
890- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 68, "</a>")919+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 67, "</a>")
891 if templ_7745c5c3_Err != nil {920 if templ_7745c5c3_Err != nil {
892 return templ_7745c5c3_Err921 return templ_7745c5c3_Err
893 }922 }
894 }923 }
895- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 69, "</p></section>")924+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 68, "</p></section>")
896 if templ_7745c5c3_Err != nil {925 if templ_7745c5c3_Err != nil {
897 return templ_7745c5c3_Err926 return templ_7745c5c3_Err
898 }927 }
899 return nil928 return nil
900 })929 })
901- templ_7745c5c3_Err = Shell(l, nil).Render(templ.WithChildren(ctx, templ_7745c5c3_Var38), templ_7745c5c3_Buffer)930+ templ_7745c5c3_Err = Shell(l, nil).Render(templ.WithChildren(ctx, templ_7745c5c3_Var39), templ_7745c5c3_Buffer)
902 if templ_7745c5c3_Err != nil {931 if templ_7745c5c3_Err != nil {
903 return templ_7745c5c3_Err932 return templ_7745c5c3_Err
904 }933 }
@@ -927,12 +956,12 @@ func Login(l Layout, p LoginPage) templ.Component {
927 }()956 }()
928 }957 }
929 ctx = templ.InitializeContext(ctx)958 ctx = templ.InitializeContext(ctx)
930- templ_7745c5c3_Var44 := templ.GetChildren(ctx)959+ templ_7745c5c3_Var45 := templ.GetChildren(ctx)
931- if templ_7745c5c3_Var44 == nil {960+ if templ_7745c5c3_Var45 == nil {
932- templ_7745c5c3_Var44 = templ.NopComponent961+ templ_7745c5c3_Var45 = templ.NopComponent
933 }962 }
934 ctx = templ.ClearChildren(ctx)963 ctx = templ.ClearChildren(ctx)
935- templ_7745c5c3_Var45 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {964+ templ_7745c5c3_Var46 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
936 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context965 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
937 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)966 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
938 if !templ_7745c5c3_IsBuffer {967 if !templ_7745c5c3_IsBuffer {
@@ -944,75 +973,75 @@ func Login(l Layout, p LoginPage) templ.Component {
944 }()973 }()
945 }974 }
946 ctx = templ.InitializeContext(ctx)975 ctx = templ.InitializeContext(ctx)
947- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, "<section class=\"state\" aria-labelledby=\"state-title\"><h1 id=\"state-title\">")976+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 69, "<section class=\"state\" aria-labelledby=\"state-title\"><h1 id=\"state-title\">")
948 if templ_7745c5c3_Err != nil {977 if templ_7745c5c3_Err != nil {
949 return templ_7745c5c3_Err978 return templ_7745c5c3_Err
950 }979 }
951- var templ_7745c5c3_Var46 string980+ var templ_7745c5c3_Var47 string
952- templ_7745c5c3_Var46, templ_7745c5c3_Err = templ.JoinStringErrs(p.Title)981+ templ_7745c5c3_Var47, templ_7745c5c3_Err = templ.JoinStringErrs(p.Title)
953 if templ_7745c5c3_Err != nil {982 if templ_7745c5c3_Err != nil {
954- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 181, Col: 33}983+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 190, Col: 33}
955 }984 }
956- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var46))985+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var47))
957 if templ_7745c5c3_Err != nil {986 if templ_7745c5c3_Err != nil {
958 return templ_7745c5c3_Err987 return templ_7745c5c3_Err
959 }988 }
960- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 71, "</h1>")989+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, "</h1>")
961 if templ_7745c5c3_Err != nil {990 if templ_7745c5c3_Err != nil {
962 return templ_7745c5c3_Err991 return templ_7745c5c3_Err
963 }992 }
964 for _, line := range p.Lines {993 for _, line := range p.Lines {
965- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 72, "<p class=\"dim\">")994+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 71, "<p class=\"dim\">")
966 if templ_7745c5c3_Err != nil {995 if templ_7745c5c3_Err != nil {
967 return templ_7745c5c3_Err996 return templ_7745c5c3_Err
968 }997 }
969- var templ_7745c5c3_Var47 string998+ var templ_7745c5c3_Var48 string
970- templ_7745c5c3_Var47, templ_7745c5c3_Err = templ.JoinStringErrs(line)999+ templ_7745c5c3_Var48, templ_7745c5c3_Err = templ.JoinStringErrs(line)
971 if templ_7745c5c3_Err != nil {1000 if templ_7745c5c3_Err != nil {
972- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 183, Col: 25}1001+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 192, Col: 25}
973 }1002 }
974- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var47))1003+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var48))
975 if templ_7745c5c3_Err != nil {1004 if templ_7745c5c3_Err != nil {
976 return templ_7745c5c3_Err1005 return templ_7745c5c3_Err
977 }1006 }
978- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 73, "</p>")1007+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 72, "</p>")
979 if templ_7745c5c3_Err != nil {1008 if templ_7745c5c3_Err != nil {
980 return templ_7745c5c3_Err1009 return templ_7745c5c3_Err
981 }1010 }
982 }1011 }
983- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 74, "<form class=\"state-act\" method=\"post\" action=\"")1012+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 73, "<form class=\"state-act\" method=\"post\" action=\"")
984 if templ_7745c5c3_Err != nil {1013 if templ_7745c5c3_Err != nil {
985 return templ_7745c5c3_Err1014 return templ_7745c5c3_Err
986 }1015 }
987- var templ_7745c5c3_Var48 templ.SafeURL1016+ var templ_7745c5c3_Var49 templ.SafeURL
988- templ_7745c5c3_Var48, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Action))1017+ templ_7745c5c3_Var49, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Action))
989 if templ_7745c5c3_Err != nil {1018 if templ_7745c5c3_Err != nil {
990- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 185, Col: 73}1019+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 194, Col: 73}
991 }1020 }
992- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var48))1021+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var49))
993 if templ_7745c5c3_Err != nil {1022 if templ_7745c5c3_Err != nil {
994 return templ_7745c5c3_Err1023 return templ_7745c5c3_Err
995 }1024 }
996- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 75, "\" data-autosubmit><button type=\"submit\" class=\"btn primary\">")1025+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 74, "\" data-autosubmit><button type=\"submit\" class=\"btn primary\">")
997 if templ_7745c5c3_Err != nil {1026 if templ_7745c5c3_Err != nil {
998 return templ_7745c5c3_Err1027 return templ_7745c5c3_Err
999 }1028 }
1000- var templ_7745c5c3_Var49 string1029+ var templ_7745c5c3_Var50 string
1001- templ_7745c5c3_Var49, templ_7745c5c3_Err = templ.JoinStringErrs(p.Button)1030+ templ_7745c5c3_Var50, templ_7745c5c3_Err = templ.JoinStringErrs(p.Button)
1002 if templ_7745c5c3_Err != nil {1031 if templ_7745c5c3_Err != nil {
1003- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 186, Col: 56}1032+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 195, Col: 56}
1004 }1033 }
1005- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var49))1034+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var50))
1006 if templ_7745c5c3_Err != nil {1035 if templ_7745c5c3_Err != nil {
1007 return templ_7745c5c3_Err1036 return templ_7745c5c3_Err
1008 }1037 }
1009- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 76, "</button></form><p class=\"state-back\"><a href=\"/\">Back to home</a></p></section>")1038+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 75, "</button></form><p class=\"state-back\"><a href=\"/\">Back to home</a></p></section>")
1010 if templ_7745c5c3_Err != nil {1039 if templ_7745c5c3_Err != nil {
1011 return templ_7745c5c3_Err1040 return templ_7745c5c3_Err
1012 }1041 }
1013 return nil1042 return nil
1014 })1043 })
1015- templ_7745c5c3_Err = Shell(l, nil).Render(templ.WithChildren(ctx, templ_7745c5c3_Var45), templ_7745c5c3_Buffer)1044+ templ_7745c5c3_Err = Shell(l, nil).Render(templ.WithChildren(ctx, templ_7745c5c3_Var46), templ_7745c5c3_Buffer)
1016 if templ_7745c5c3_Err != nil {1045 if templ_7745c5c3_Err != nil {
1017 return templ_7745c5c3_Err1046 return templ_7745c5c3_Err
1018 }1047 }
@@ -1038,12 +1067,12 @@ func PasskeyLogin(l Layout, p PasskeyLoginPage) templ.Component {
1038 }()1067 }()
1039 }1068 }
1040 ctx = templ.InitializeContext(ctx)1069 ctx = templ.InitializeContext(ctx)
1041- templ_7745c5c3_Var50 := templ.GetChildren(ctx)1070+ templ_7745c5c3_Var51 := templ.GetChildren(ctx)
1042- if templ_7745c5c3_Var50 == nil {1071+ if templ_7745c5c3_Var51 == nil {
1043- templ_7745c5c3_Var50 = templ.NopComponent1072+ templ_7745c5c3_Var51 = templ.NopComponent
1044 }1073 }
1045 ctx = templ.ClearChildren(ctx)1074 ctx = templ.ClearChildren(ctx)
1046- templ_7745c5c3_Var51 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {1075+ templ_7745c5c3_Var52 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1047 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context1076 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1048 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)1077 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1049 if !templ_7745c5c3_IsBuffer {1078 if !templ_7745c5c3_IsBuffer {
@@ -1055,88 +1084,88 @@ func PasskeyLogin(l Layout, p PasskeyLoginPage) templ.Component {
1055 }()1084 }()
1056 }1085 }
1057 ctx = templ.InitializeContext(ctx)1086 ctx = templ.InitializeContext(ctx)
1058- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 77, "<section class=\"state\" aria-labelledby=\"state-title\"><h1 id=\"state-title\">")1087+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 76, "<section class=\"state\" aria-labelledby=\"state-title\"><h1 id=\"state-title\">")
1059 if templ_7745c5c3_Err != nil {1088 if templ_7745c5c3_Err != nil {
1060 return templ_7745c5c3_Err1089 return templ_7745c5c3_Err
1061 }1090 }
1062- var templ_7745c5c3_Var52 string1091+ var templ_7745c5c3_Var53 string
1063- templ_7745c5c3_Var52, templ_7745c5c3_Err = templ.JoinStringErrs(p.Title)1092+ templ_7745c5c3_Var53, templ_7745c5c3_Err = templ.JoinStringErrs(p.Title)
1064 if templ_7745c5c3_Err != nil {1093 if templ_7745c5c3_Err != nil {
1065- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 198, Col: 33}1094+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 207, Col: 33}
1066 }1095 }
1067- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var52))1096+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var53))
1068 if templ_7745c5c3_Err != nil {1097 if templ_7745c5c3_Err != nil {
1069 return templ_7745c5c3_Err1098 return templ_7745c5c3_Err
1070 }1099 }
1071- 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=\"")1100+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 77, "</h1><form class=\"state-act\" data-js data-passkey-form><button type=\"submit\" class=\"btn primary\" data-passkey=\"login\" data-begin=\"")
1072 if templ_7745c5c3_Err != nil {1101 if templ_7745c5c3_Err != nil {
1073 return templ_7745c5c3_Err1102 return templ_7745c5c3_Err
1074 }1103 }
1075- var templ_7745c5c3_Var53 string1104+ var templ_7745c5c3_Var54 string
1076- templ_7745c5c3_Var53, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Begin)1105+ templ_7745c5c3_Var54, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Begin)
1077 if templ_7745c5c3_Err != nil {1106 if templ_7745c5c3_Err != nil {
1078- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 200, Col: 87}1107+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 209, Col: 87}
1079 }1108 }
1080- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var53)1109+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var54)
1081 if templ_7745c5c3_Err != nil {1110 if templ_7745c5c3_Err != nil {
1082 return templ_7745c5c3_Err1111 return templ_7745c5c3_Err
1083 }1112 }
1084- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 79, "\" data-finish=\"")1113+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 78, "\" data-finish=\"")
1085 if templ_7745c5c3_Err != nil {1114 if templ_7745c5c3_Err != nil {
1086 return templ_7745c5c3_Err1115 return templ_7745c5c3_Err
1087 }1116 }
1088- var templ_7745c5c3_Var54 string1117+ var templ_7745c5c3_Var55 string
1089- templ_7745c5c3_Var54, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Finish)1118+ templ_7745c5c3_Var55, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Finish)
1090 if templ_7745c5c3_Err != nil {1119 if templ_7745c5c3_Err != nil {
1091- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 200, Col: 112}1120+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 209, Col: 112}
1092 }1121 }
1093- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var54)1122+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var55)
1094 if templ_7745c5c3_Err != nil {1123 if templ_7745c5c3_Err != nil {
1095 return templ_7745c5c3_Err1124 return templ_7745c5c3_Err
1096 }1125 }
1097- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 80, "\">")1126+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 79, "\">")
1098 if templ_7745c5c3_Err != nil {1127 if templ_7745c5c3_Err != nil {
1099 return templ_7745c5c3_Err1128 return templ_7745c5c3_Err
1100 }1129 }
1101- var templ_7745c5c3_Var55 string1130+ var templ_7745c5c3_Var56 string
1102- templ_7745c5c3_Var55, templ_7745c5c3_Err = templ.JoinStringErrs(p.Button)1131+ templ_7745c5c3_Var56, templ_7745c5c3_Err = templ.JoinStringErrs(p.Button)
1103 if templ_7745c5c3_Err != nil {1132 if templ_7745c5c3_Err != nil {
1104- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 200, Col: 125}1133+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 209, Col: 125}
1105 }1134 }
1106- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var55))1135+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var56))
1107 if templ_7745c5c3_Err != nil {1136 if templ_7745c5c3_Err != nil {
1108 return templ_7745c5c3_Err1137 return templ_7745c5c3_Err
1109 }1138 }
1110- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 81, "</button></form><p class=\"dim\" role=\"status\" aria-live=\"polite\" data-passkey-status></p>")1139+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 80, "</button></form><p class=\"dim\" role=\"status\" aria-live=\"polite\" data-passkey-status></p>")
1111 if templ_7745c5c3_Err != nil {1140 if templ_7745c5c3_Err != nil {
1112 return templ_7745c5c3_Err1141 return templ_7745c5c3_Err
1113 }1142 }
1114 for _, line := range p.Lines {1143 for _, line := range p.Lines {
1115- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 82, "<p class=\"dim\">")1144+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 81, "<p class=\"dim\">")
1116 if templ_7745c5c3_Err != nil {1145 if templ_7745c5c3_Err != nil {
1117 return templ_7745c5c3_Err1146 return templ_7745c5c3_Err
1118 }1147 }
1119- var templ_7745c5c3_Var56 string1148+ var templ_7745c5c3_Var57 string
1120- templ_7745c5c3_Var56, templ_7745c5c3_Err = templ.JoinStringErrs(line)1149+ templ_7745c5c3_Var57, templ_7745c5c3_Err = templ.JoinStringErrs(line)
1121 if templ_7745c5c3_Err != nil {1150 if templ_7745c5c3_Err != nil {
1122- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 204, Col: 25}1151+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 213, Col: 25}
1123 }1152 }
1124- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var56))1153+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var57))
1125 if templ_7745c5c3_Err != nil {1154 if templ_7745c5c3_Err != nil {
1126 return templ_7745c5c3_Err1155 return templ_7745c5c3_Err
1127 }1156 }
1128- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 83, "</p>")1157+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 82, "</p>")
1129 if templ_7745c5c3_Err != nil {1158 if templ_7745c5c3_Err != nil {
1130 return templ_7745c5c3_Err1159 return templ_7745c5c3_Err
1131 }1160 }
1132 }1161 }
1133- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 84, "<p class=\"state-back\"><a href=\"/\">Back to home</a></p></section>")1162+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 83, "<p class=\"state-back\"><a href=\"/\">Back to home</a></p></section>")
1134 if templ_7745c5c3_Err != nil {1163 if templ_7745c5c3_Err != nil {
1135 return templ_7745c5c3_Err1164 return templ_7745c5c3_Err
1136 }1165 }
1137 return nil1166 return nil
1138 })1167 })
1139- templ_7745c5c3_Err = Shell(l, nil).Render(templ.WithChildren(ctx, templ_7745c5c3_Var51), templ_7745c5c3_Buffer)1168+ templ_7745c5c3_Err = Shell(l, nil).Render(templ.WithChildren(ctx, templ_7745c5c3_Var52), templ_7745c5c3_Buffer)
1140 if templ_7745c5c3_Err != nil {1169 if templ_7745c5c3_Err != nil {
1141 return templ_7745c5c3_Err1170 return templ_7745c5c3_Err
1142 }1171 }
@@ -1161,12 +1190,12 @@ func Passkeys(l Layout, p PasskeysPage) templ.Component {
1161 }()1190 }()
1162 }1191 }
1163 ctx = templ.InitializeContext(ctx)1192 ctx = templ.InitializeContext(ctx)
1164- templ_7745c5c3_Var57 := templ.GetChildren(ctx)1193+ templ_7745c5c3_Var58 := templ.GetChildren(ctx)
1165- if templ_7745c5c3_Var57 == nil {1194+ if templ_7745c5c3_Var58 == nil {
1166- templ_7745c5c3_Var57 = templ.NopComponent1195+ templ_7745c5c3_Var58 = templ.NopComponent
1167 }1196 }
1168 ctx = templ.ClearChildren(ctx)1197 ctx = templ.ClearChildren(ctx)
1169- templ_7745c5c3_Var58 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {1198+ templ_7745c5c3_Var59 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1170 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context1199 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1171 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)1200 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1172 if !templ_7745c5c3_IsBuffer {1201 if !templ_7745c5c3_IsBuffer {
@@ -1178,231 +1207,231 @@ func Passkeys(l Layout, p PasskeysPage) templ.Component {
1178 }()1207 }()
1179 }1208 }
1180 ctx = templ.InitializeContext(ctx)1209 ctx = templ.InitializeContext(ctx)
1181- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 85, "<h2 class=\"rule-h\"><span>Passkeys</span><span class=\"count\">")1210+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 84, "<h2 class=\"rule-h\"><span>Passkeys</span><span class=\"count\">")
1182 if templ_7745c5c3_Err != nil {1211 if templ_7745c5c3_Err != nil {
1183 return templ_7745c5c3_Err1212 return templ_7745c5c3_Err
1184 }1213 }
1185- var templ_7745c5c3_Var59 string1214+ var templ_7745c5c3_Var60 string
1186- templ_7745c5c3_Var59, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Rows)))1215+ templ_7745c5c3_Var60, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Rows)))
1187 if templ_7745c5c3_Err != nil {1216 if templ_7745c5c3_Err != nil {
1188- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 214, Col: 81}1217+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 223, Col: 81}
1189 }1218 }
1190- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var59))1219+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var60))
1191 if templ_7745c5c3_Err != nil {1220 if templ_7745c5c3_Err != nil {
1192 return templ_7745c5c3_Err1221 return templ_7745c5c3_Err
1193 }1222 }
1194- 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>")1223+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 85, "</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>")
1195 if templ_7745c5c3_Err != nil {1224 if templ_7745c5c3_Err != nil {
1196 return templ_7745c5c3_Err1225 return templ_7745c5c3_Err
1197 }1226 }
1198 if len(p.Rows) > 0 {1227 if len(p.Rows) > 0 {
1199- 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>")1228+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 86, "<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>")
1200 if templ_7745c5c3_Err != nil {1229 if templ_7745c5c3_Err != nil {
1201 return templ_7745c5c3_Err1230 return templ_7745c5c3_Err
1202 }1231 }
1203 for _, r := range p.Rows {1232 for _, r := range p.Rows {
1204- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 88, "<tr><td class=\"cur\" aria-hidden=\"true\"></td><td class=\"c-name\">")1233+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 87, "<tr><td class=\"cur\" aria-hidden=\"true\"></td><td class=\"c-name\">")
1205 if templ_7745c5c3_Err != nil {1234 if templ_7745c5c3_Err != nil {
1206 return templ_7745c5c3_Err1235 return templ_7745c5c3_Err
1207 }1236 }
1208- var templ_7745c5c3_Var60 string1237+ var templ_7745c5c3_Var61 string
1209- templ_7745c5c3_Var60, templ_7745c5c3_Err = templ.JoinStringErrs(r.Name)1238+ templ_7745c5c3_Var61, templ_7745c5c3_Err = templ.JoinStringErrs(r.Name)
1210 if templ_7745c5c3_Err != nil {1239 if templ_7745c5c3_Err != nil {
1211- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 232, Col: 34}1240+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 241, Col: 34}
1212 }1241 }
1213- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var60))1242+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var61))
1214 if templ_7745c5c3_Err != nil {1243 if templ_7745c5c3_Err != nil {
1215 return templ_7745c5c3_Err1244 return templ_7745c5c3_Err
1216 }1245 }
1217- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 89, "</td><td class=\"c-when nowrap\"><time")1246+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 88, "</td><td class=\"c-when nowrap\"><time")
1218 if templ_7745c5c3_Err != nil {1247 if templ_7745c5c3_Err != nil {
1219 return templ_7745c5c3_Err1248 return templ_7745c5c3_Err
1220 }1249 }
1221 if r.CreatedAt != "" {1250 if r.CreatedAt != "" {
1222- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 90, " datetime=\"")1251+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 89, " datetime=\"")
1223 if templ_7745c5c3_Err != nil {1252 if templ_7745c5c3_Err != nil {
1224 return templ_7745c5c3_Err1253 return templ_7745c5c3_Err
1225 }1254 }
1226- var templ_7745c5c3_Var61 string1255+ var templ_7745c5c3_Var62 string
1227- templ_7745c5c3_Var61, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.CreatedAt)1256+ templ_7745c5c3_Var62, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.CreatedAt)
1228 if templ_7745c5c3_Err != nil {1257 if templ_7745c5c3_Err != nil {
1229- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 236, Col: 32}1258+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 245, Col: 32}
1230 }1259 }
1231- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var61)1260+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var62)
1232 if templ_7745c5c3_Err != nil {1261 if templ_7745c5c3_Err != nil {
1233 return templ_7745c5c3_Err1262 return templ_7745c5c3_Err
1234 }1263 }
1235- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 91, "\"")1264+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 90, "\"")
1236 if templ_7745c5c3_Err != nil {1265 if templ_7745c5c3_Err != nil {
1237 return templ_7745c5c3_Err1266 return templ_7745c5c3_Err
1238 }1267 }
1239 }1268 }
1240- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 92, ">")1269+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 91, ">")
1241 if templ_7745c5c3_Err != nil {1270 if templ_7745c5c3_Err != nil {
1242 return templ_7745c5c3_Err1271 return templ_7745c5c3_Err
1243 }1272 }
1244- var templ_7745c5c3_Var62 string1273+ var templ_7745c5c3_Var63 string
1245- templ_7745c5c3_Var62, templ_7745c5c3_Err = templ.JoinStringErrs(r.Created)1274+ templ_7745c5c3_Var63, templ_7745c5c3_Err = templ.JoinStringErrs(r.Created)
1246 if templ_7745c5c3_Err != nil {1275 if templ_7745c5c3_Err != nil {
1247- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 238, Col: 20}1276+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 247, Col: 20}
1248 }1277 }
1249- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var62))1278+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var63))
1250 if templ_7745c5c3_Err != nil {1279 if templ_7745c5c3_Err != nil {
1251 return templ_7745c5c3_Err1280 return templ_7745c5c3_Err
1252 }1281 }
1253- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 93, "</time></td><td class=\"c-when nowrap\"><time")1282+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 92, "</time></td><td class=\"c-when nowrap\"><time")
1254 if templ_7745c5c3_Err != nil {1283 if templ_7745c5c3_Err != nil {
1255 return templ_7745c5c3_Err1284 return templ_7745c5c3_Err
1256 }1285 }
1257 if r.LastUsedAt != "" {1286 if r.LastUsedAt != "" {
1258- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 94, " datetime=\"")1287+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 93, " datetime=\"")
1259 if templ_7745c5c3_Err != nil {1288 if templ_7745c5c3_Err != nil {
1260 return templ_7745c5c3_Err1289 return templ_7745c5c3_Err
1261 }1290 }
1262- var templ_7745c5c3_Var63 string1291+ var templ_7745c5c3_Var64 string
1263- templ_7745c5c3_Var63, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.LastUsedAt)1292+ templ_7745c5c3_Var64, templ_7745c5c3_Err = templ.ResolveAttributeValue(r.LastUsedAt)
1264 if templ_7745c5c3_Err != nil {1293 if templ_7745c5c3_Err != nil {
1265- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 243, Col: 33}1294+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 252, Col: 33}
1266 }1295 }
1267- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var63)1296+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var64)
1268 if templ_7745c5c3_Err != nil {1297 if templ_7745c5c3_Err != nil {
1269 return templ_7745c5c3_Err1298 return templ_7745c5c3_Err
1270 }1299 }
1271- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 95, "\"")1300+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 94, "\"")
1272 if templ_7745c5c3_Err != nil {1301 if templ_7745c5c3_Err != nil {
1273 return templ_7745c5c3_Err1302 return templ_7745c5c3_Err
1274 }1303 }
1275 }1304 }
1276- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 96, ">")1305+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 95, ">")
1277 if templ_7745c5c3_Err != nil {1306 if templ_7745c5c3_Err != nil {
1278 return templ_7745c5c3_Err1307 return templ_7745c5c3_Err
1279 }1308 }
1280- var templ_7745c5c3_Var64 string1309+ var templ_7745c5c3_Var65 string
1281- templ_7745c5c3_Var64, templ_7745c5c3_Err = templ.JoinStringErrs(r.LastUsed)1310+ templ_7745c5c3_Var65, templ_7745c5c3_Err = templ.JoinStringErrs(r.LastUsed)
1282 if templ_7745c5c3_Err != nil {1311 if templ_7745c5c3_Err != nil {
1283- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 245, Col: 21}1312+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 254, Col: 21}
1284 }1313 }
1285- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var64))1314+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var65))
1286 if templ_7745c5c3_Err != nil {1315 if templ_7745c5c3_Err != nil {
1287 return templ_7745c5c3_Err1316 return templ_7745c5c3_Err
1288 }1317 }
1289- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 97, "</time></td><td class=\"c-sync\">")1318+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 96, "</time></td><td class=\"c-sync\">")
1290 if templ_7745c5c3_Err != nil {1319 if templ_7745c5c3_Err != nil {
1291 return templ_7745c5c3_Err1320 return templ_7745c5c3_Err
1292 }1321 }
1293 if r.Synced {1322 if r.Synced {
1294- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 98, "yes")1323+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 97, "yes")
1295 if templ_7745c5c3_Err != nil {1324 if templ_7745c5c3_Err != nil {
1296 return templ_7745c5c3_Err1325 return templ_7745c5c3_Err
1297 }1326 }
1298 } else {1327 } else {
1299- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 99, "no")1328+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 98, "no")
1300 if templ_7745c5c3_Err != nil {1329 if templ_7745c5c3_Err != nil {
1301 return templ_7745c5c3_Err1330 return templ_7745c5c3_Err
1302 }1331 }
1303 }1332 }
1304- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 100, "</td><td class=\"c-act\"><form method=\"post\" action=\"")1333+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 99, "</td><td class=\"c-act\"><form method=\"post\" action=\"")
1305 if templ_7745c5c3_Err != nil {1334 if templ_7745c5c3_Err != nil {
1306 return templ_7745c5c3_Err1335 return templ_7745c5c3_Err
1307 }1336 }
1308- var templ_7745c5c3_Var65 templ.SafeURL1337+ var templ_7745c5c3_Var66 templ.SafeURL
1309- templ_7745c5c3_Var65, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(r.Remove))1338+ templ_7745c5c3_Var66, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(r.Remove))
1310 if templ_7745c5c3_Err != nil {1339 if templ_7745c5c3_Err != nil {
1311- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 255, Col: 60}1340+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 264, Col: 60}
1312 }1341 }
1313- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var65))1342+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var66))
1314 if templ_7745c5c3_Err != nil {1343 if templ_7745c5c3_Err != nil {
1315 return templ_7745c5c3_Err1344 return templ_7745c5c3_Err
1316 }1345 }
1317- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 101, "\"><button type=\"submit\" class=\"btn danger\" aria-label=\"")1346+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 100, "\"><button type=\"submit\" class=\"btn danger\" aria-label=\"")
1318 if templ_7745c5c3_Err != nil {1347 if templ_7745c5c3_Err != nil {
1319 return templ_7745c5c3_Err1348 return templ_7745c5c3_Err
1320 }1349 }
1321- var templ_7745c5c3_Var66 string1350+ var templ_7745c5c3_Var67 string
1322- templ_7745c5c3_Var66, templ_7745c5c3_Err = templ.ResolveAttributeValue("Remove passkey " + r.Name)1351+ templ_7745c5c3_Var67, templ_7745c5c3_Err = templ.ResolveAttributeValue("Remove passkey " + r.Name)
1323 if templ_7745c5c3_Err != nil {1352 if templ_7745c5c3_Err != nil {
1324- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 256, Col: 89}1353+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 265, Col: 89}
1325 }1354 }
1326- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var66)1355+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var67)
1327 if templ_7745c5c3_Err != nil {1356 if templ_7745c5c3_Err != nil {
1328 return templ_7745c5c3_Err1357 return templ_7745c5c3_Err
1329 }1358 }
1330- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 102, "\">Remove</button></form></td></tr>")1359+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 101, "\">Remove</button></form></td></tr>")
1331 if templ_7745c5c3_Err != nil {1360 if templ_7745c5c3_Err != nil {
1332 return templ_7745c5c3_Err1361 return templ_7745c5c3_Err
1333 }1362 }
1334 }1363 }
1335- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 103, "</tbody></table>")1364+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 102, "</tbody></table>")
1336 if templ_7745c5c3_Err != nil {1365 if templ_7745c5c3_Err != nil {
1337 return templ_7745c5c3_Err1366 return templ_7745c5c3_Err
1338 }1367 }
1339 } else {1368 } else {
1340- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 104, "<p class=\"lede dim\">no passkeys yet.</p>")1369+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 103, "<p class=\"lede dim\">no passkeys yet.</p>")
1341 if templ_7745c5c3_Err != nil {1370 if templ_7745c5c3_Err != nil {
1342 return templ_7745c5c3_Err1371 return templ_7745c5c3_Err
1343 }1372 }
1344 }1373 }
1345- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 105, " ")1374+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 104, " ")
1346 if templ_7745c5c3_Err != nil {1375 if templ_7745c5c3_Err != nil {
1347 return templ_7745c5c3_Err1376 return templ_7745c5c3_Err
1348 }1377 }
1349 if p.Full {1378 if p.Full {
1350- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 106, "<p class=\"dim\">")1379+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 105, "<p class=\"dim\">")
1351 if templ_7745c5c3_Err != nil {1380 if templ_7745c5c3_Err != nil {
1352 return templ_7745c5c3_Err1381 return templ_7745c5c3_Err
1353 }1382 }
1354- var templ_7745c5c3_Var67 string1383+ var templ_7745c5c3_Var68 string
1355- templ_7745c5c3_Var67, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Max))1384+ templ_7745c5c3_Var68, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Max))
1356 if templ_7745c5c3_Err != nil {1385 if templ_7745c5c3_Err != nil {
1357- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 267, Col: 31}1386+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 276, Col: 31}
1358 }1387 }
1359- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var67))1388+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var68))
1360 if templ_7745c5c3_Err != nil {1389 if templ_7745c5c3_Err != nil {
1361 return templ_7745c5c3_Err1390 return templ_7745c5c3_Err
1362 }1391 }
1363- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 107, " passkeys are registered, the most there can be. Remove one to add another.</p>")1392+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 106, " passkeys are registered, the most there can be. Remove one to add another.</p>")
1364 if templ_7745c5c3_Err != nil {1393 if templ_7745c5c3_Err != nil {
1365 return templ_7745c5c3_Err1394 return templ_7745c5c3_Err
1366 }1395 }
1367 } else {1396 } else {
1368- 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=\"")1397+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 107, "<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=\"")
1369 if templ_7745c5c3_Err != nil {1398 if templ_7745c5c3_Err != nil {
1370 return templ_7745c5c3_Err1399 return templ_7745c5c3_Err
1371 }1400 }
1372- var templ_7745c5c3_Var68 string1401+ var templ_7745c5c3_Var69 string
1373- templ_7745c5c3_Var68, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Begin)1402+ templ_7745c5c3_Var69, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Begin)
1374 if templ_7745c5c3_Err != nil {1403 if templ_7745c5c3_Err != nil {
1375- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 272, Col: 90}1404+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 281, Col: 90}
1376 }1405 }
1377- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var68)1406+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var69)
1378 if templ_7745c5c3_Err != nil {1407 if templ_7745c5c3_Err != nil {
1379 return templ_7745c5c3_Err1408 return templ_7745c5c3_Err
1380 }1409 }
1381- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 109, "\" data-finish=\"")1410+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 108, "\" data-finish=\"")
1382 if templ_7745c5c3_Err != nil {1411 if templ_7745c5c3_Err != nil {
1383 return templ_7745c5c3_Err1412 return templ_7745c5c3_Err
1384 }1413 }
1385- var templ_7745c5c3_Var69 string1414+ var templ_7745c5c3_Var70 string
1386- templ_7745c5c3_Var69, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Finish)1415+ templ_7745c5c3_Var70, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Finish)
1387 if templ_7745c5c3_Err != nil {1416 if templ_7745c5c3_Err != nil {
1388- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 272, Col: 115}1417+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/pages.templ`, Line: 281, Col: 115}
1389 }1418 }
1390- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var69)1419+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var70)
1391 if templ_7745c5c3_Err != nil {1420 if templ_7745c5c3_Err != nil {
1392 return templ_7745c5c3_Err1421 return templ_7745c5c3_Err
1393 }1422 }
1394- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 110, "\">Add a passkey</button></form>")1423+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 109, "\">Add a passkey</button></form>")
1395 if templ_7745c5c3_Err != nil {1424 if templ_7745c5c3_Err != nil {
1396 return templ_7745c5c3_Err1425 return templ_7745c5c3_Err
1397 }1426 }
1398 }1427 }
1399- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 111, " <p class=\"dim\" role=\"status\" aria-live=\"polite\" data-passkey-status></p>")1428+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 110, " <p class=\"dim\" role=\"status\" aria-live=\"polite\" data-passkey-status></p>")
1400 if templ_7745c5c3_Err != nil {1429 if templ_7745c5c3_Err != nil {
1401 return templ_7745c5c3_Err1430 return templ_7745c5c3_Err
1402 }1431 }
1403 return nil1432 return nil
1404 })1433 })
1405- templ_7745c5c3_Err = Shell(l, nil).Render(templ.WithChildren(ctx, templ_7745c5c3_Var58), templ_7745c5c3_Buffer)1434+ templ_7745c5c3_Err = Shell(l, nil).Render(templ.WithChildren(ctx, templ_7745c5c3_Var59), templ_7745c5c3_Buffer)
1406 if templ_7745c5c3_Err != nil {1435 if templ_7745c5c3_Err != nil {
1407 return templ_7745c5c3_Err1436 return templ_7745c5c3_Err
1408 }1437 }
M internal/adapters/web/static/css/20-shell.css +8 -6
@@ -134,13 +134,15 @@
134134 .rail section > .list { margin: var(--s2) 0; }
135135 .rail section > p + p { margin-top: calc(-1 * var(--s2)); }
136136
137- /* newest tag in the summary rail */
138- .latest-tag {
139- display: flex; flex-wrap: wrap; align-items: center; gap: var(--s1) var(--s2); font-size: var(--fs-s);
140- & .tag-name { display: inline-flex; align-items: center; gap: 6px; font: 700 var(--fs) / 20px var(--mono); color: var(--ink-hi); text-decoration: none; }
137+ /* newest tag, a row of About in the summary rail */
138+ .kv dd.latest-tag {
139+ display: flex; align-items: baseline; gap: var(--s2);
140+ & .tag-name { display: inline-flex; align-items: center; gap: 4px; min-width: 0; overflow: hidden; font-weight: 700; font-family: var(--mono); color: var(--ink-hi); text-decoration: none; }
141+ & .tag-name .ico { flex: none; }
141142 & .tag-name:hover { text-decoration: underline; }
142- & time { margin-left: auto; }
143- & .tag-sub { flex-basis: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
143+ & time { white-space: nowrap; }
144+ & .all-tags { margin-left: auto; white-space: nowrap; color: var(--ink-dim); text-decoration: none; }
145+ & .all-tags:hover { color: var(--ink-hi); text-decoration: underline; }
144146 }
145147
146148 .kv {
@@ -134,13 +134,15 @@
134 .rail section > .list { margin: var(--s2) 0; }134 .rail section > .list { margin: var(--s2) 0; }
135 .rail section > p + p { margin-top: calc(-1 * var(--s2)); }135 .rail section > p + p { margin-top: calc(-1 * var(--s2)); }
136 136
137- /* newest tag in the summary rail */137+ /* newest tag, a row of About in the summary rail */
138- .latest-tag {138+ .kv dd.latest-tag {
139- display: flex; flex-wrap: wrap; align-items: center; gap: var(--s1) var(--s2); font-size: var(--fs-s);139+ display: flex; align-items: baseline; gap: var(--s2);
140- & .tag-name { display: inline-flex; align-items: center; gap: 6px; font: 700 var(--fs) / 20px var(--mono); color: var(--ink-hi); text-decoration: none; }140+ & .tag-name { display: inline-flex; align-items: center; gap: 4px; min-width: 0; overflow: hidden; font-weight: 700; font-family: var(--mono); color: var(--ink-hi); text-decoration: none; }
141+ & .tag-name .ico { flex: none; }
141 & .tag-name:hover { text-decoration: underline; }142 & .tag-name:hover { text-decoration: underline; }
142- & time { margin-left: auto; }143+ & time { white-space: nowrap; }
143- & .tag-sub { flex-basis: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }144+ & .all-tags { margin-left: auto; white-space: nowrap; color: var(--ink-dim); text-decoration: none; }
145+ & .all-tags:hover { color: var(--ink-hi); text-decoration: underline; }
144 }146 }
145 147
146 .kv {148 .kv {
M internal/adapters/web/static/css/50-code.css +15 -9
@@ -115,7 +115,9 @@
115115 font-size: var(--fs-s); position: relative; /* the offsets of its links count from it (ermite.js) */
116116 & li[hidden] { display: none; }
117117 & a {
118- display: grid; grid-template-columns: 1.5ch minmax(0, 1fr) auto auto; column-gap: var(--s2); align-items: baseline;
118+ /* centred, not on the baseline: the smaller counts on a baseline sit
119+ a pixel below the row, enough to give the list a scroll bar */
120+ display: grid; grid-template-columns: 1.5ch minmax(0, 1fr) auto auto; column-gap: var(--s2); align-items: center;
119121 height: 26px; line-height: 26px; padding: 0 var(--s2); margin: 0 calc(-1 * var(--s2));
120122 border-radius: 4px; border-left: 2px solid transparent; text-decoration: none; font-family: var(--mono); color: var(--ink);
121123 }
@@ -127,9 +129,11 @@
127129 & .st[data-st="A"] { color: var(--teal); }
128130 & .st[data-st="D"] { color: var(--red); }
129131 & .nm { overflow: hidden; white-space: nowrap; display: flex; min-width: 0; }
130- & .nm .p { flex: none; max-width: 100%; overflow: hidden; text-overflow: ellipsis; }
132+ /* the name gives way last: the directory shrinks first, down to its
133+ ellipsis, before the name is cut */
134+ & .nm .p { flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
131135 /* cut from the start (rtl), the path itself kept in its order (bdi) */
132- & .nm .d { flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; direction: rtl; text-align: left; color: var(--ink-mute); padding-left: 1ch; }
136+ & .nm .d { flex: 0 1000 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; direction: rtl; text-align: left; color: var(--ink-mute); padding-left: 1ch; }
133137 & .nm .d bdi { direction: ltr; }
134138 & .cn { font: 600 var(--fs-xs) / 16px var(--font); padding: 0 6px; border-radius: 999px; background: var(--ink-hi); color: var(--on-ink); align-self: center; }
135139 & .cn.done { background: var(--bg-strong); color: var(--ink-dim); }
@@ -148,18 +152,20 @@
148152 & .c-sha { width: 96px; }
149153 & .c-sub { width: auto; }
150154 }
151- /* the commit table inside a rail block: no frame of its own */
155+ /* the commit table inside a rail block: no frame of its own. The id, the
156+ checks and the date take the width of their text (an empty checks cell
157+ next to nothing); the subject takes the rest, cut at its end only. */
152158 .rail .list.commits {
153- border: 0; border-radius: 0; background: none;
154- & td { height: 34px; padding: 0 var(--s2); }
159+ border: 0; border-radius: 0; background: none; table-layout: auto;
160+ & td { height: 34px; padding: 0 var(--s2); width: 1%; white-space: nowrap; }
155161 & td.cur { width: 3px; padding: 0; }
156162 & td:nth-child(2) { padding-left: var(--s3); }
157163 & td:last-child { padding-right: var(--s4); }
158164 & .c-who { display: none; }
159- & .c-sha { width: 72px; }
160- & .c-subject { font-size: var(--fs-s); }
165+ & .c-subject { width: auto; max-width: 0; font-size: var(--fs-s); }
161166 & .c-subject .pill { display: none; }
162- & .c-when { width: 70px; text-align: right; }
167+ & .c-ck:empty { padding: 0; }
168+ & .c-when { text-align: right; }
163169 }
164170 .rail section > p { overflow-wrap: anywhere; }
165171 @media (max-width: 700px) {
@@ -115,7 +115,9 @@
115 font-size: var(--fs-s); position: relative; /* the offsets of its links count from it (ermite.js) */115 font-size: var(--fs-s); position: relative; /* the offsets of its links count from it (ermite.js) */
116 & li[hidden] { display: none; }116 & li[hidden] { display: none; }
117 & a {117 & a {
118- display: grid; grid-template-columns: 1.5ch minmax(0, 1fr) auto auto; column-gap: var(--s2); align-items: baseline;118+ /* centred, not on the baseline: the smaller counts on a baseline sit
119+ a pixel below the row, enough to give the list a scroll bar */
120+ display: grid; grid-template-columns: 1.5ch minmax(0, 1fr) auto auto; column-gap: var(--s2); align-items: center;
119 height: 26px; line-height: 26px; padding: 0 var(--s2); margin: 0 calc(-1 * var(--s2));121 height: 26px; line-height: 26px; padding: 0 var(--s2); margin: 0 calc(-1 * var(--s2));
120 border-radius: 4px; border-left: 2px solid transparent; text-decoration: none; font-family: var(--mono); color: var(--ink);122 border-radius: 4px; border-left: 2px solid transparent; text-decoration: none; font-family: var(--mono); color: var(--ink);
121 }123 }
@@ -127,9 +129,11 @@
127 & .st[data-st="A"] { color: var(--teal); }129 & .st[data-st="A"] { color: var(--teal); }
128 & .st[data-st="D"] { color: var(--red); }130 & .st[data-st="D"] { color: var(--red); }
129 & .nm { overflow: hidden; white-space: nowrap; display: flex; min-width: 0; }131 & .nm { overflow: hidden; white-space: nowrap; display: flex; min-width: 0; }
130- & .nm .p { flex: none; max-width: 100%; overflow: hidden; text-overflow: ellipsis; }132+ /* the name gives way last: the directory shrinks first, down to its
133+ ellipsis, before the name is cut */
134+ & .nm .p { flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
131 /* cut from the start (rtl), the path itself kept in its order (bdi) */135 /* cut from the start (rtl), the path itself kept in its order (bdi) */
132- & .nm .d { flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; direction: rtl; text-align: left; color: var(--ink-mute); padding-left: 1ch; }136+ & .nm .d { flex: 0 1000 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; direction: rtl; text-align: left; color: var(--ink-mute); padding-left: 1ch; }
133 & .nm .d bdi { direction: ltr; }137 & .nm .d bdi { direction: ltr; }
134 & .cn { font: 600 var(--fs-xs) / 16px var(--font); padding: 0 6px; border-radius: 999px; background: var(--ink-hi); color: var(--on-ink); align-self: center; }138 & .cn { font: 600 var(--fs-xs) / 16px var(--font); padding: 0 6px; border-radius: 999px; background: var(--ink-hi); color: var(--on-ink); align-self: center; }
135 & .cn.done { background: var(--bg-strong); color: var(--ink-dim); }139 & .cn.done { background: var(--bg-strong); color: var(--ink-dim); }
@@ -148,18 +152,20 @@
148 & .c-sha { width: 96px; }152 & .c-sha { width: 96px; }
149 & .c-sub { width: auto; }153 & .c-sub { width: auto; }
150 }154 }
151- /* the commit table inside a rail block: no frame of its own */155+ /* the commit table inside a rail block: no frame of its own. The id, the
156+ checks and the date take the width of their text (an empty checks cell
157+ next to nothing); the subject takes the rest, cut at its end only. */
152 .rail .list.commits {158 .rail .list.commits {
153- border: 0; border-radius: 0; background: none;159+ border: 0; border-radius: 0; background: none; table-layout: auto;
154- & td { height: 34px; padding: 0 var(--s2); }160+ & td { height: 34px; padding: 0 var(--s2); width: 1%; white-space: nowrap; }
155 & td.cur { width: 3px; padding: 0; }161 & td.cur { width: 3px; padding: 0; }
156 & td:nth-child(2) { padding-left: var(--s3); }162 & td:nth-child(2) { padding-left: var(--s3); }
157 & td:last-child { padding-right: var(--s4); }163 & td:last-child { padding-right: var(--s4); }
158 & .c-who { display: none; }164 & .c-who { display: none; }
159- & .c-sha { width: 72px; }165+ & .c-subject { width: auto; max-width: 0; font-size: var(--fs-s); }
160- & .c-subject { font-size: var(--fs-s); }
161 & .c-subject .pill { display: none; }166 & .c-subject .pill { display: none; }
162- & .c-when { width: 70px; text-align: right; }167+ & .c-ck:empty { padding: 0; }
168+ & .c-when { text-align: right; }
163 }169 }
164 .rail section > p { overflow-wrap: anywhere; }170 .rail section > p { overflow-wrap: anywhere; }
165 @media (max-width: 700px) {171 @media (max-width: 700px) {
M internal/adapters/web/static/css/65-ci.css +8 -1
@@ -20,7 +20,8 @@
2020 the refs list has the mark next to the sha. */
2121 .c-ck { width: 1%; white-space: nowrap; }
2222 .list .c-ck { width: 92px; }
23- .rail .list.commits .c-ck { width: 76px; }
23+ /* the commit table of a rail lays out on its content (50-code.css) */
24+ .rail .list.commits .c-ck { width: 1%; }
2425 .list.refs .c-sha { width: 150px; }
2526
2627 /* the table is fixed: the status column is the icon, its margin and the
@@ -59,6 +60,12 @@
5960 .attempts { padding: 0; margin: var(--s2) 0 0; list-style: none; font-size: var(--fs-s); }
6061 .checks { display: grid; gap: var(--s1); padding: 0; margin: 0; list-style: none; font-size: var(--fs-s); }
6162 .checks li { display: flex; flex-wrap: wrap; align-items: center; gap: var(--s1); }
63+ /* the merge rule under the checks: a note about them, not one of them */
64+ .rail section > .rule-note {
65+ display: flex; gap: 6px; margin-top: var(--s3); padding-top: var(--s2); border-top: 1px dashed var(--border);
66+ font-size: var(--fs-xs); font-style: italic; line-height: 1.4; color: var(--ink-mute);
67+ &::before { content: "i"; flex: none; width: 14px; height: 14px; margin-top: 1px; border: 1px solid currentColor; border-radius: 50%; font: 700 9px / 12px var(--mono); font-style: normal; text-align: center; }
68+ }
6269
6370 /* annotations and summaries of a run */
6471 .annots { margin: 0 0 var(--s4); }
@@ -20,7 +20,8 @@
20 the refs list has the mark next to the sha. */20 the refs list has the mark next to the sha. */
21 .c-ck { width: 1%; white-space: nowrap; }21 .c-ck { width: 1%; white-space: nowrap; }
22 .list .c-ck { width: 92px; }22 .list .c-ck { width: 92px; }
23- .rail .list.commits .c-ck { width: 76px; }23+ /* the commit table of a rail lays out on its content (50-code.css) */
24+ .rail .list.commits .c-ck { width: 1%; }
24 .list.refs .c-sha { width: 150px; }25 .list.refs .c-sha { width: 150px; }
25 26
26 /* the table is fixed: the status column is the icon, its margin and the27 /* the table is fixed: the status column is the icon, its margin and the
@@ -59,6 +60,12 @@
59 .attempts { padding: 0; margin: var(--s2) 0 0; list-style: none; font-size: var(--fs-s); }60 .attempts { padding: 0; margin: var(--s2) 0 0; list-style: none; font-size: var(--fs-s); }
60 .checks { display: grid; gap: var(--s1); padding: 0; margin: 0; list-style: none; font-size: var(--fs-s); }61 .checks { display: grid; gap: var(--s1); padding: 0; margin: 0; list-style: none; font-size: var(--fs-s); }
61 .checks li { display: flex; flex-wrap: wrap; align-items: center; gap: var(--s1); }62 .checks li { display: flex; flex-wrap: wrap; align-items: center; gap: var(--s1); }
63+ /* the merge rule under the checks: a note about them, not one of them */
64+ .rail section > .rule-note {
65+ display: flex; gap: 6px; margin-top: var(--s3); padding-top: var(--s2); border-top: 1px dashed var(--border);
66+ font-size: var(--fs-xs); font-style: italic; line-height: 1.4; color: var(--ink-mute);
67+ &::before { content: "i"; flex: none; width: 14px; height: 14px; margin-top: 1px; border: 1px solid currentColor; border-radius: 50%; font: 700 9px / 12px var(--mono); font-style: normal; text-align: center; }
68+ }
62 69
63 /* annotations and summaries of a run */70 /* annotations and summaries of a run */
64 .annots { margin: 0 0 var(--s4); }71 .annots { margin: 0 0 var(--s4); }
M internal/app/testdata/web/summary.html +6 -11
@@ -147,20 +147,15 @@
147147 <dd>
148148 <time datetime="STAMP">STAMP</time>
149149 </dd>
150-</dl>
151-</section>
152-<section aria-labelledby="r-tag">
153-<h2 id="r-tag">Tags <span class="count">2</span>
154-<a href="/demo/refs">View all</a>
155-</h2>
156-<div class="latest-tag">
157-<a class="tag-name" href="/demo/tree/v0.2.0">
150+<dt>latest tag</dt>
151+<dd class="latest-tag">
152+<a class="tag-name" href="/demo/tree/v0.2.0" title="add main.go">
158153 <span class="ico i-tag" aria-hidden="true">
159154 </span>v0.2.0</a>
160-<span class="pill">latest</span>
161155 <time class="dim" datetime="STAMP" title="STAMP">AGO</time>
162-<p class="tag-sub dim">add main.go</p>
163-</div>
156+<a class="all-tags" href="/demo/refs">2 tags</a>
157+</dd>
158+</dl>
164159 </section>
165160 <section aria-labelledby="r-recent">
166161 <h2 id="r-recent">Recent commits <a href="/demo/commits/main">View all</a>
@@ -147,20 +147,15 @@
147 <dd>147 <dd>
148 <time datetime="STAMP">STAMP</time>148 <time datetime="STAMP">STAMP</time>
149 </dd>149 </dd>
150-</dl>150+<dt>latest tag</dt>
151-</section>151+<dd class="latest-tag">
152-<section aria-labelledby="r-tag">152+<a class="tag-name" href="/demo/tree/v0.2.0" title="add main.go">
153-<h2 id="r-tag">Tags <span class="count">2</span>
154-<a href="/demo/refs">View all</a>
155-</h2>
156-<div class="latest-tag">
157-<a class="tag-name" href="/demo/tree/v0.2.0">
158 <span class="ico i-tag" aria-hidden="true">153 <span class="ico i-tag" aria-hidden="true">
159 </span>v0.2.0</a>154 </span>v0.2.0</a>
160-<span class="pill">latest</span>
161 <time class="dim" datetime="STAMP" title="STAMP">AGO</time>155 <time class="dim" datetime="STAMP" title="STAMP">AGO</time>
162-<p class="tag-sub dim">add main.go</p>156+<a class="all-tags" href="/demo/refs">2 tags</a>
163-</div>157+</dd>
158+</dl>
164 </section>159 </section>
165 <section aria-labelledby="r-recent">160 <section aria-labelledby="r-recent">
166 <h2 id="r-recent">Recent commits <a href="/demo/commits/main">View all</a>161 <h2 id="r-recent">Recent commits <a href="/demo/commits/main">View all</a>
M internal/app/web_test.go +8 -6
@@ -264,14 +264,16 @@ func TestWebContentSecurity(t *testing.T) {
264264 }
265265 }
266266
267-// The summary rail names the newest tag; with more tags than it dates, it
268-// gives their count instead of an empty block.
267+// About, in the summary rail, names the newest tag; with more tags than it
268+// dates, it gives their count only.
269269 func TestWebSummaryLatestTag(t *testing.T) {
270270 h := newHarness(t, harnessOpts{})
271271 h.webRepo("demo")
272272 _, _, body := h.get("/demo")
273- assert.Contains(t, body, `<a class="tag-name" href="/demo/tree/v0.2.0">`)
274- assert.Contains(t, body, `<p class="tag-sub dim">add main.go</p>`)
273+ assert.Contains(t, body, `<dt>latest tag</dt>`)
274+ assert.Contains(t, body, `<a class="tag-name" href="/demo/tree/v0.2.0" title="add main.go">`)
275+ assert.Contains(t, body, `<a class="all-tags" href="/demo/refs">2 tags</a>`)
276+ assert.NotContains(t, body, `id="r-tag"`, "no Tags block of its own: the tag is a row of About")
275277
276278 h.seed("many", domain.VisibilityPublic, "a.txt")
277279 wt := t.TempDir()
@@ -281,6 +283,6 @@ func TestWebSummaryLatestTag(t *testing.T) {
281283 }
282284 h.mustGit(wt, "push", "-q", "--tags", "origin")
283285 _, _, body = h.get("/many")
284- assert.NotContains(t, body, `class="latest-tag"`)
285- assert.Contains(t, body, `<p class="dim">21 tags</p>`)
286+ assert.NotContains(t, body, `class="tag-name"`)
287+ assert.Contains(t, body, `<a class="all-tags" href="/many/refs">21 tags</a>`)
286288 }
@@ -264,14 +264,16 @@ func TestWebContentSecurity(t *testing.T) {
264 }264 }
265 }265 }
266 266
267-// The summary rail names the newest tag; with more tags than it dates, it267+// About, in the summary rail, names the newest tag; with more tags than it
268-// gives their count instead of an empty block.268+// dates, it gives their count only.
269 func TestWebSummaryLatestTag(t *testing.T) {269 func TestWebSummaryLatestTag(t *testing.T) {
270 h := newHarness(t, harnessOpts{})270 h := newHarness(t, harnessOpts{})
271 h.webRepo("demo")271 h.webRepo("demo")
272 _, _, body := h.get("/demo")272 _, _, body := h.get("/demo")
273- assert.Contains(t, body, `<a class="tag-name" href="/demo/tree/v0.2.0">`)273+ assert.Contains(t, body, `<dt>latest tag</dt>`)
274- assert.Contains(t, body, `<p class="tag-sub dim">add main.go</p>`)274+ assert.Contains(t, body, `<a class="tag-name" href="/demo/tree/v0.2.0" title="add main.go">`)
275+ assert.Contains(t, body, `<a class="all-tags" href="/demo/refs">2 tags</a>`)
276+ assert.NotContains(t, body, `id="r-tag"`, "no Tags block of its own: the tag is a row of About")
275 277
276 h.seed("many", domain.VisibilityPublic, "a.txt")278 h.seed("many", domain.VisibilityPublic, "a.txt")
277 wt := t.TempDir()279 wt := t.TempDir()
@@ -281,6 +283,6 @@ func TestWebSummaryLatestTag(t *testing.T) {
281 }283 }
282 h.mustGit(wt, "push", "-q", "--tags", "origin")284 h.mustGit(wt, "push", "-q", "--tags", "origin")
283 _, _, body = h.get("/many")285 _, _, body = h.get("/many")
284- assert.NotContains(t, body, `class="latest-tag"`)286+ assert.NotContains(t, body, `class="tag-name"`)
285- assert.Contains(t, body, `<p class="dim">21 tags</p>`)287+ assert.Contains(t, body, `<a class="all-tags" href="/many/refs">21 tags</a>`)
286 }288 }

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