detached fcc7703

feat(web): one merge request card, a diff view menu, a wide diff mode and quieter hunk rows

commit
fcc77036ea838fc565f571e1c6afe37cd933ecc7
author
brice · · 2026-10-19 15:05 UTC
committer
brice · · 2026-10-19 15:05 UTC
parent
d8e7d5b
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
16 files · +866 -681
M internal/adapters/web/diff.templ +30 -3
@@ -72,9 +72,8 @@ templ Commit(l Layout, p CommitPage) {
7272 <div class="diff-tools" role="group" aria-label="Diff view">
7373 <span class="dim">{ plural(p.NFiles, "file", "files") } · <span class="plus">+{ itoa(p.Adds) }</span> <span class="minus">-{ itoa(p.Dels) }</span></span>
7474 <span class="grow"></span>
75- @viewLink(p.DiffView, "unified", "Unified", "u", p.UnifiedHref)
76- @viewLink(p.DiffView, "split", "Split", "d", p.SplitHref)
77- @collapseButton()
75+ @diffViewMenu(p.DiffView)
76+ @wideButton()
7877 </div>
7978 if p.Invisible {
8079 <p class="notice">
@@ -112,6 +111,34 @@ templ Commit(l Layout, p CommitPage) {
112111 }
113112 }
114113
114+// diffViewMenu is the layout of the diff (unified, the default, or split) and
115+// the fold of its files, in one menu: a <details> that works without scripts;
116+// u, d and x still act without opening it. Its button names the layout shown.
117+templ diffViewMenu(p DiffView) {
118+ <details class="menu vmenu">
119+ <summary class="btn" aria-label="Diff view">
120+ if p.Both {
121+ <span hx-live="this.textContent = q('#diffs').attr['data-diff'] === 'split' ? 'Split' : 'Unified'">{ viewLabel(p.View) }</span>
122+ } else {
123+ { viewLabel(p.View) }
124+ }
125+ </summary>
126+ <div class="menu-pop" role="group" aria-label="Diff view">
127+ @viewLink(p, "unified", "Unified", "u", p.UnifiedHref)
128+ @viewLink(p, "split", "Split", "d", p.SplitHref)
129+ @collapseButton()
130+ </div>
131+ </details>
132+}
133+
134+// wideButton gives the diff the whole width of the screen: the rail goes to
135+// the right edge and the code takes the rest. ermite.js keeps the choice.
136+templ wideButton() {
137+ <button type="button" class="btn" data-js data-fire="wide" data-wide-toggle aria-pressed="false" aria-keyshortcuts="w" title="use the whole width of the screen">
138+ Wide<kbd aria-hidden="true">w</kbd>
139+ </button>
140+}
141+
115142 // viewLink is a button of the diff tools. It is a link, so that the split
116143 // layout works without JavaScript; with it, and when both layouts are in the
117144 // page, a click only flips the layout.
@@ -72,9 +72,8 @@ templ Commit(l Layout, p CommitPage) {
72 <div class="diff-tools" role="group" aria-label="Diff view">72 <div class="diff-tools" role="group" aria-label="Diff view">
73 <span class="dim">{ plural(p.NFiles, "file", "files") } · <span class="plus">+{ itoa(p.Adds) }</span> <span class="minus">-{ itoa(p.Dels) }</span></span>73 <span class="dim">{ plural(p.NFiles, "file", "files") } · <span class="plus">+{ itoa(p.Adds) }</span> <span class="minus">-{ itoa(p.Dels) }</span></span>
74 <span class="grow"></span>74 <span class="grow"></span>
75- @viewLink(p.DiffView, "unified", "Unified", "u", p.UnifiedHref)75+ @diffViewMenu(p.DiffView)
76- @viewLink(p.DiffView, "split", "Split", "d", p.SplitHref)76+ @wideButton()
77- @collapseButton()
78 </div>77 </div>
79 if p.Invisible {78 if p.Invisible {
80 <p class="notice">79 <p class="notice">
@@ -112,6 +111,34 @@ templ Commit(l Layout, p CommitPage) {
112 }111 }
113 }112 }
114 113
114+// diffViewMenu is the layout of the diff (unified, the default, or split) and
115+// the fold of its files, in one menu: a <details> that works without scripts;
116+// u, d and x still act without opening it. Its button names the layout shown.
117+templ diffViewMenu(p DiffView) {
118+ <details class="menu vmenu">
119+ <summary class="btn" aria-label="Diff view">
120+ if p.Both {
121+ <span hx-live="this.textContent = q('#diffs').attr['data-diff'] === 'split' ? 'Split' : 'Unified'">{ viewLabel(p.View) }</span>
122+ } else {
123+ { viewLabel(p.View) }
124+ }
125+ </summary>
126+ <div class="menu-pop" role="group" aria-label="Diff view">
127+ @viewLink(p, "unified", "Unified", "u", p.UnifiedHref)
128+ @viewLink(p, "split", "Split", "d", p.SplitHref)
129+ @collapseButton()
130+ </div>
131+ </details>
132+}
133+
134+// wideButton gives the diff the whole width of the screen: the rail goes to
135+// the right edge and the code takes the rest. ermite.js keeps the choice.
136+templ wideButton() {
137+ <button type="button" class="btn" data-js data-fire="wide" data-wide-toggle aria-pressed="false" aria-keyshortcuts="w" title="use the whole width of the screen">
138+ Wide<kbd aria-hidden="true">w</kbd>
139+ </button>
140+}
141+
115 // viewLink is a button of the diff tools. It is a link, so that the split142 // viewLink is a button of the diff tools. It is a link, so that the split
116 // layout works without JavaScript; with it, and when both layouts are in the143 // layout works without JavaScript; with it, and when both layouts are in the
117 // page, a click only flips the layout.144 // page, a click only flips the layout.
M internal/adapters/web/diff_templ.go +542 -434
@@ -359,15 +359,11 @@ func Commit(l Layout, p CommitPage) templ.Component {
359359 if templ_7745c5c3_Err != nil {
360360 return templ_7745c5c3_Err
361361 }
362- templ_7745c5c3_Err = viewLink(p.DiffView, "unified", "Unified", "u", p.UnifiedHref).Render(ctx, templ_7745c5c3_Buffer)
362+ templ_7745c5c3_Err = diffViewMenu(p.DiffView).Render(ctx, templ_7745c5c3_Buffer)
363363 if templ_7745c5c3_Err != nil {
364364 return templ_7745c5c3_Err
365365 }
366- templ_7745c5c3_Err = viewLink(p.DiffView, "split", "Split", "d", p.SplitHref).Render(ctx, templ_7745c5c3_Buffer)
367- if templ_7745c5c3_Err != nil {
368- return templ_7745c5c3_Err
369- }
370- templ_7745c5c3_Err = collapseButton().Render(ctx, templ_7745c5c3_Buffer)
366+ templ_7745c5c3_Err = wideButton().Render(ctx, templ_7745c5c3_Buffer)
371367 if templ_7745c5c3_Err != nil {
372368 return templ_7745c5c3_Err
373369 }
@@ -393,7 +389,7 @@ func Commit(l Layout, p CommitPage) templ.Component {
393389 var templ_7745c5c3_Var17 string
394390 templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.JoinStringErrs(p.Note)
395391 if templ_7745c5c3_Err != nil {
396- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 86, Col: 29}
392+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 85, Col: 29}
397393 }
398394 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var17))
399395 if templ_7745c5c3_Err != nil {
@@ -416,7 +412,7 @@ func Commit(l Layout, p CommitPage) templ.Component {
416412 var templ_7745c5c3_Var18 string
417413 templ_7745c5c3_Var18, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
418414 if templ_7745c5c3_Err != nil {
419- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 91, Col: 22}
415+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 90, Col: 22}
420416 }
421417 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var18)
422418 if templ_7745c5c3_Err != nil {
@@ -434,7 +430,7 @@ func Commit(l Layout, p CommitPage) templ.Component {
434430 var templ_7745c5c3_Var19 string
435431 templ_7745c5c3_Var19, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
436432 if templ_7745c5c3_Err != nil {
437- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 93, Col: 22}
433+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 92, Col: 22}
438434 }
439435 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var19)
440436 if templ_7745c5c3_Err != nil {
@@ -469,7 +465,7 @@ func Commit(l Layout, p CommitPage) templ.Component {
469465 var templ_7745c5c3_Var20 string
470466 templ_7745c5c3_Var20, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
471467 if templ_7745c5c3_Err != nil {
472- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 103, Col: 41}
468+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 102, Col: 41}
473469 }
474470 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var20))
475471 if templ_7745c5c3_Err != nil {
@@ -509,6 +505,118 @@ func Commit(l Layout, p CommitPage) templ.Component {
509505 })
510506 }
511507
508+// diffViewMenu is the layout of the diff (unified, the default, or split) and
509+// the fold of its files, in one menu: a <details> that works without scripts;
510+// u, d and x still act without opening it. Its button names the layout shown.
511+func diffViewMenu(p DiffView) templ.Component {
512+ return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
513+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
514+ if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
515+ return templ_7745c5c3_CtxErr
516+ }
517+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
518+ if !templ_7745c5c3_IsBuffer {
519+ defer func() {
520+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
521+ if templ_7745c5c3_Err == nil {
522+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
523+ }
524+ }()
525+ }
526+ ctx = templ.InitializeContext(ctx)
527+ templ_7745c5c3_Var21 := templ.GetChildren(ctx)
528+ if templ_7745c5c3_Var21 == nil {
529+ templ_7745c5c3_Var21 = templ.NopComponent
530+ }
531+ ctx = templ.ClearChildren(ctx)
532+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, "<details class=\"menu vmenu\"><summary class=\"btn\" aria-label=\"Diff view\">")
533+ if templ_7745c5c3_Err != nil {
534+ return templ_7745c5c3_Err
535+ }
536+ if p.Both {
537+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 56, "<span hx-live=\"this.textContent = q('#diffs').attr['data-diff'] === 'split' ? 'Split' : 'Unified'\">")
538+ if templ_7745c5c3_Err != nil {
539+ return templ_7745c5c3_Err
540+ }
541+ var templ_7745c5c3_Var22 string
542+ templ_7745c5c3_Var22, templ_7745c5c3_Err = templ.JoinStringErrs(viewLabel(p.View))
543+ if templ_7745c5c3_Err != nil {
544+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 121, Col: 122}
545+ }
546+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var22))
547+ if templ_7745c5c3_Err != nil {
548+ return templ_7745c5c3_Err
549+ }
550+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "</span>")
551+ if templ_7745c5c3_Err != nil {
552+ return templ_7745c5c3_Err
553+ }
554+ } else {
555+ var templ_7745c5c3_Var23 string
556+ templ_7745c5c3_Var23, templ_7745c5c3_Err = templ.JoinStringErrs(viewLabel(p.View))
557+ if templ_7745c5c3_Err != nil {
558+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 123, Col: 23}
559+ }
560+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var23))
561+ if templ_7745c5c3_Err != nil {
562+ return templ_7745c5c3_Err
563+ }
564+ }
565+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "</summary><div class=\"menu-pop\" role=\"group\" aria-label=\"Diff view\">")
566+ if templ_7745c5c3_Err != nil {
567+ return templ_7745c5c3_Err
568+ }
569+ templ_7745c5c3_Err = viewLink(p, "unified", "Unified", "u", p.UnifiedHref).Render(ctx, templ_7745c5c3_Buffer)
570+ if templ_7745c5c3_Err != nil {
571+ return templ_7745c5c3_Err
572+ }
573+ templ_7745c5c3_Err = viewLink(p, "split", "Split", "d", p.SplitHref).Render(ctx, templ_7745c5c3_Buffer)
574+ if templ_7745c5c3_Err != nil {
575+ return templ_7745c5c3_Err
576+ }
577+ templ_7745c5c3_Err = collapseButton().Render(ctx, templ_7745c5c3_Buffer)
578+ if templ_7745c5c3_Err != nil {
579+ return templ_7745c5c3_Err
580+ }
581+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, "</div></details>")
582+ if templ_7745c5c3_Err != nil {
583+ return templ_7745c5c3_Err
584+ }
585+ return nil
586+ })
587+}
588+
589+// wideButton gives the diff the whole width of the screen: the rail goes to
590+// the right edge and the code takes the rest. ermite.js keeps the choice.
591+func wideButton() templ.Component {
592+ return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
593+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
594+ if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
595+ return templ_7745c5c3_CtxErr
596+ }
597+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
598+ if !templ_7745c5c3_IsBuffer {
599+ defer func() {
600+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
601+ if templ_7745c5c3_Err == nil {
602+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
603+ }
604+ }()
605+ }
606+ ctx = templ.InitializeContext(ctx)
607+ templ_7745c5c3_Var24 := templ.GetChildren(ctx)
608+ if templ_7745c5c3_Var24 == nil {
609+ templ_7745c5c3_Var24 = templ.NopComponent
610+ }
611+ ctx = templ.ClearChildren(ctx)
612+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 60, "<button type=\"button\" class=\"btn\" data-js data-fire=\"wide\" data-wide-toggle aria-pressed=\"false\" aria-keyshortcuts=\"w\" title=\"use the whole width of the screen\">Wide<kbd aria-hidden=\"true\">w</kbd></button>")
613+ if templ_7745c5c3_Err != nil {
614+ return templ_7745c5c3_Err
615+ }
616+ return nil
617+ })
618+}
619+
512620 // viewLink is a button of the diff tools. It is a link, so that the split
513621 // layout works without JavaScript; with it, and when both layouts are in the
514622 // page, a click only flips the layout.
@@ -528,106 +636,106 @@ func viewLink(p DiffView, view, label, key, href string) templ.Component {
528636 }()
529637 }
530638 ctx = templ.InitializeContext(ctx)
531- templ_7745c5c3_Var21 := templ.GetChildren(ctx)
532- if templ_7745c5c3_Var21 == nil {
533- templ_7745c5c3_Var21 = templ.NopComponent
639+ templ_7745c5c3_Var25 := templ.GetChildren(ctx)
640+ if templ_7745c5c3_Var25 == nil {
641+ templ_7745c5c3_Var25 = templ.NopComponent
534642 }
535643 ctx = templ.ClearChildren(ctx)
536- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, "<a href=\"")
644+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "<a href=\"")
537645 if templ_7745c5c3_Err != nil {
538646 return templ_7745c5c3_Err
539647 }
540- var templ_7745c5c3_Var22 templ.SafeURL
541- templ_7745c5c3_Var22, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(href))
648+ var templ_7745c5c3_Var26 templ.SafeURL
649+ templ_7745c5c3_Var26, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(href))
542650 if templ_7745c5c3_Err != nil {
543- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 120, Col: 28}
651+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 147, Col: 28}
544652 }
545- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var22))
653+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var26))
546654 if templ_7745c5c3_Err != nil {
547655 return templ_7745c5c3_Err
548656 }
549- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 56, "\" class=\"btn vbtn\" data-view=\"")
657+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, "\" class=\"btn vbtn\" data-view=\"")
550658 if templ_7745c5c3_Err != nil {
551659 return templ_7745c5c3_Err
552660 }
553- var templ_7745c5c3_Var23 string
554- templ_7745c5c3_Var23, templ_7745c5c3_Err = templ.ResolveAttributeValue(view)
661+ var templ_7745c5c3_Var27 string
662+ templ_7745c5c3_Var27, templ_7745c5c3_Err = templ.ResolveAttributeValue(view)
555663 if templ_7745c5c3_Err != nil {
556- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 122, Col: 18}
664+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 149, Col: 18}
557665 }
558- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var23)
666+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var27)
559667 if templ_7745c5c3_Err != nil {
560668 return templ_7745c5c3_Err
561669 }
562- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "\" aria-keyshortcuts=\"")
670+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 63, "\" aria-keyshortcuts=\"")
563671 if templ_7745c5c3_Err != nil {
564672 return templ_7745c5c3_Err
565673 }
566- var templ_7745c5c3_Var24 string
567- templ_7745c5c3_Var24, templ_7745c5c3_Err = templ.ResolveAttributeValue(key)
674+ var templ_7745c5c3_Var28 string
675+ templ_7745c5c3_Var28, templ_7745c5c3_Err = templ.ResolveAttributeValue(key)
568676 if templ_7745c5c3_Err != nil {
569- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 123, Col: 25}
677+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 150, Col: 25}
570678 }
571- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var24)
679+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var28)
572680 if templ_7745c5c3_Err != nil {
573681 return templ_7745c5c3_Err
574682 }
575- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "\"")
683+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 64, "\"")
576684 if templ_7745c5c3_Err != nil {
577685 return templ_7745c5c3_Err
578686 }
579687 if p.View == view {
580- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, " aria-current=\"true\"")
688+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 65, " aria-current=\"true\"")
581689 if templ_7745c5c3_Err != nil {
582690 return templ_7745c5c3_Err
583691 }
584692 }
585693 if p.Both {
586- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 60, " data-fire=\"")
694+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 66, " data-fire=\"")
587695 if templ_7745c5c3_Err != nil {
588696 return templ_7745c5c3_Err
589697 }
590- var templ_7745c5c3_Var25 string
591- templ_7745c5c3_Var25, templ_7745c5c3_Err = templ.ResolveAttributeValue(view)
698+ var templ_7745c5c3_Var29 string
699+ templ_7745c5c3_Var29, templ_7745c5c3_Err = templ.ResolveAttributeValue(view)
592700 if templ_7745c5c3_Err != nil {
593- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 128, Col: 19}
701+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 155, Col: 19}
594702 }
595- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var25)
703+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var29)
596704 if templ_7745c5c3_Err != nil {
597705 return templ_7745c5c3_Err
598706 }
599- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "\" :aria-current=\"q('#diffs').attr['data-diff'] === this.dataset.view ? 'true' : false\"")
707+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 67, "\" :aria-current=\"q('#diffs').attr['data-diff'] === this.dataset.view ? 'true' : false\"")
600708 if templ_7745c5c3_Err != nil {
601709 return templ_7745c5c3_Err
602710 }
603711 }
604- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, ">")
712+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 68, ">")
605713 if templ_7745c5c3_Err != nil {
606714 return templ_7745c5c3_Err
607715 }
608- var templ_7745c5c3_Var26 string
609- templ_7745c5c3_Var26, templ_7745c5c3_Err = templ.JoinStringErrs(label)
716+ var templ_7745c5c3_Var30 string
717+ templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinStringErrs(label)
610718 if templ_7745c5c3_Err != nil {
611- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 131, Col: 9}
719+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 158, Col: 9}
612720 }
613- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var26))
721+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var30))
614722 if templ_7745c5c3_Err != nil {
615723 return templ_7745c5c3_Err
616724 }
617- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 63, "<kbd aria-hidden=\"true\">")
725+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 69, "<kbd aria-hidden=\"true\">")
618726 if templ_7745c5c3_Err != nil {
619727 return templ_7745c5c3_Err
620728 }
621- var templ_7745c5c3_Var27 string
622- templ_7745c5c3_Var27, templ_7745c5c3_Err = templ.JoinStringErrs(key)
729+ var templ_7745c5c3_Var31 string
730+ templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.JoinStringErrs(key)
623731 if templ_7745c5c3_Err != nil {
624- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 131, Col: 40}
732+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 158, Col: 40}
625733 }
626- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var27))
734+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var31))
627735 if templ_7745c5c3_Err != nil {
628736 return templ_7745c5c3_Err
629737 }
630- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 64, "</kbd></a>")
738+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, "</kbd></a>")
631739 if templ_7745c5c3_Err != nil {
632740 return templ_7745c5c3_Err
633741 }
@@ -653,12 +761,12 @@ func collapseButton() templ.Component {
653761 }()
654762 }
655763 ctx = templ.InitializeContext(ctx)
656- templ_7745c5c3_Var28 := templ.GetChildren(ctx)
657- if templ_7745c5c3_Var28 == nil {
658- templ_7745c5c3_Var28 = templ.NopComponent
764+ templ_7745c5c3_Var32 := templ.GetChildren(ctx)
765+ if templ_7745c5c3_Var32 == nil {
766+ templ_7745c5c3_Var32 = templ.NopComponent
659767 }
660768 ctx = templ.ClearChildren(ctx)
661- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 65, "<button type=\"button\" aria-keyshortcuts=\"x\" data-js data-fire=\"collapse\" class=\"btn\"><span hx-live=\"this.textContent = q('[data-file][open]').count || !q('[data-file]').count ? 'Collapse all' : 'Expand all'\">Collapse all</span><kbd aria-hidden=\"true\">x</kbd></button>")
769+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 71, "<button type=\"button\" aria-keyshortcuts=\"x\" data-js data-fire=\"collapse\" class=\"btn\"><span hx-live=\"this.textContent = q('[data-file][open]').count || !q('[data-file]').count ? 'Collapse all' : 'Expand all'\">Collapse all</span><kbd aria-hidden=\"true\">x</kbd></button>")
662770 if templ_7745c5c3_Err != nil {
663771 return templ_7745c5c3_Err
664772 }
@@ -682,83 +790,83 @@ func personView(pr Person) templ.Component {
682790 }()
683791 }
684792 ctx = templ.InitializeContext(ctx)
685- templ_7745c5c3_Var29 := templ.GetChildren(ctx)
686- if templ_7745c5c3_Var29 == nil {
687- templ_7745c5c3_Var29 = templ.NopComponent
793+ templ_7745c5c3_Var33 := templ.GetChildren(ctx)
794+ if templ_7745c5c3_Var33 == nil {
795+ templ_7745c5c3_Var33 = templ.NopComponent
688796 }
689797 ctx = templ.ClearChildren(ctx)
690- var templ_7745c5c3_Var30 string
691- templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinStringErrs(pr.Name)
798+ var templ_7745c5c3_Var34 string
799+ templ_7745c5c3_Var34, templ_7745c5c3_Err = templ.JoinStringErrs(pr.Name)
692800 if templ_7745c5c3_Err != nil {
693- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 143, Col: 10}
801+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 170, Col: 10}
694802 }
695- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var30))
803+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var34))
696804 if templ_7745c5c3_Err != nil {
697805 return templ_7745c5c3_Err
698806 }
699- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 66, " ")
807+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 72, " ")
700808 if templ_7745c5c3_Err != nil {
701809 return templ_7745c5c3_Err
702810 }
703811 if pr.WhenAt != "" {
704- var templ_7745c5c3_Var31 string
705- templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")
812+ var templ_7745c5c3_Var35 string
813+ templ_7745c5c3_Var35, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")
706814 if templ_7745c5c3_Err != nil {
707- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 145, Col: 10}
815+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 172, Col: 10}
708816 }
709- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var31))
817+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var35))
710818 if templ_7745c5c3_Err != nil {
711819 return templ_7745c5c3_Err
712820 }
713- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 67, "<time datetime=\"")
821+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 73, "<time datetime=\"")
714822 if templ_7745c5c3_Err != nil {
715823 return templ_7745c5c3_Err
716824 }
717- var templ_7745c5c3_Var32 string
718- templ_7745c5c3_Var32, templ_7745c5c3_Err = templ.ResolveAttributeValue(pr.WhenAt)
825+ var templ_7745c5c3_Var36 string
826+ templ_7745c5c3_Var36, templ_7745c5c3_Err = templ.ResolveAttributeValue(pr.WhenAt)
719827 if templ_7745c5c3_Err != nil {
720- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 145, Col: 38}
828+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 172, Col: 38}
721829 }
722- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var32)
830+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var36)
723831 if templ_7745c5c3_Err != nil {
724832 return templ_7745c5c3_Err
725833 }
726- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 68, "\" title=\"")
834+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 74, "\" title=\"")
727835 if templ_7745c5c3_Err != nil {
728836 return templ_7745c5c3_Err
729837 }
730- var templ_7745c5c3_Var33 string
731- templ_7745c5c3_Var33, templ_7745c5c3_Err = templ.ResolveAttributeValue(pr.Abs)
838+ var templ_7745c5c3_Var37 string
839+ templ_7745c5c3_Var37, templ_7745c5c3_Err = templ.ResolveAttributeValue(pr.Abs)
732840 if templ_7745c5c3_Err != nil {
733- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 145, Col: 55}
841+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 172, Col: 55}
734842 }
735- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var33)
843+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var37)
736844 if templ_7745c5c3_Err != nil {
737845 return templ_7745c5c3_Err
738846 }
739- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 69, "\">")
847+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 75, "\">")
740848 if templ_7745c5c3_Err != nil {
741849 return templ_7745c5c3_Err
742850 }
743- var templ_7745c5c3_Var34 string
744- templ_7745c5c3_Var34, templ_7745c5c3_Err = templ.JoinStringErrs(pr.When)
851+ var templ_7745c5c3_Var38 string
852+ templ_7745c5c3_Var38, templ_7745c5c3_Err = templ.JoinStringErrs(pr.When)
745853 if templ_7745c5c3_Err != nil {
746- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 145, Col: 67}
854+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 172, Col: 67}
747855 }
748- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var34))
856+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var38))
749857 if templ_7745c5c3_Err != nil {
750858 return templ_7745c5c3_Err
751859 }
752- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, "</time>")
860+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 76, "</time>")
753861 if templ_7745c5c3_Err != nil {
754862 return templ_7745c5c3_Err
755863 }
756- var templ_7745c5c3_Var35 string
757- templ_7745c5c3_Var35, templ_7745c5c3_Err = templ.JoinStringErrs(" · " + pr.Abs)
864+ var templ_7745c5c3_Var39 string
865+ templ_7745c5c3_Var39, templ_7745c5c3_Err = templ.JoinStringErrs(" · " + pr.Abs)
758866 if templ_7745c5c3_Err != nil {
759- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 145, Col: 93}
867+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 172, Col: 93}
760868 }
761- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var35))
869+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var39))
762870 if templ_7745c5c3_Err != nil {
763871 return templ_7745c5c3_Err
764872 }
@@ -783,25 +891,25 @@ func commitRail(p CommitPage) templ.Component {
783891 }()
784892 }
785893 ctx = templ.InitializeContext(ctx)
786- templ_7745c5c3_Var36 := templ.GetChildren(ctx)
787- if templ_7745c5c3_Var36 == nil {
788- templ_7745c5c3_Var36 = templ.NopComponent
894+ templ_7745c5c3_Var40 := templ.GetChildren(ctx)
895+ if templ_7745c5c3_Var40 == nil {
896+ templ_7745c5c3_Var40 = templ.NopComponent
789897 }
790898 ctx = templ.ClearChildren(ctx)
791- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 71, "<section aria-labelledby=\"r-files\"><h2 id=\"r-files\">Files <span class=\"count\">")
899+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 77, "<section aria-labelledby=\"r-files\"><h2 id=\"r-files\">Files <span class=\"count\">")
792900 if templ_7745c5c3_Err != nil {
793901 return templ_7745c5c3_Err
794902 }
795- var templ_7745c5c3_Var37 string
796- templ_7745c5c3_Var37, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))
903+ var templ_7745c5c3_Var41 string
904+ templ_7745c5c3_Var41, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))
797905 if templ_7745c5c3_Err != nil {
798- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 151, Col: 65}
906+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 178, Col: 65}
799907 }
800- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var37))
908+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var41))
801909 if templ_7745c5c3_Err != nil {
802910 return templ_7745c5c3_Err
803911 }
804- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 72, "</span></h2>")
912+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 78, "</span></h2>")
805913 if templ_7745c5c3_Err != nil {
806914 return templ_7745c5c3_Err
807915 }
@@ -809,7 +917,7 @@ func commitRail(p CommitPage) templ.Component {
809917 if templ_7745c5c3_Err != nil {
810918 return templ_7745c5c3_Err
811919 }
812- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 73, "</section>")
920+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 79, "</section>")
813921 if templ_7745c5c3_Err != nil {
814922 return templ_7745c5c3_Err
815923 }
@@ -835,236 +943,236 @@ func FileList(files []DiffFile) templ.Component {
835943 }()
836944 }
837945 ctx = templ.InitializeContext(ctx)
838- templ_7745c5c3_Var38 := templ.GetChildren(ctx)
839- if templ_7745c5c3_Var38 == nil {
840- templ_7745c5c3_Var38 = templ.NopComponent
946+ templ_7745c5c3_Var42 := templ.GetChildren(ctx)
947+ if templ_7745c5c3_Var42 == nil {
948+ templ_7745c5c3_Var42 = templ.NopComponent
841949 }
842950 ctx = templ.ClearChildren(ctx)
843951 if len(files) > fileFilterMin {
844- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 74, "<div class=\"ffilter\"><label for=\"files-filter\" class=\"sr\">filter the changed files</label> <input id=\"files-filter\" type=\"search\" placeholder=\"Filter files…\" autocomplete=\"off\" data-pick=\".files > li\" hx-on:input=\"ermite.filter(this)\"></div>")
952+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 80, "<div class=\"ffilter\"><label for=\"files-filter\" class=\"sr\">filter the changed files</label> <input id=\"files-filter\" type=\"search\" placeholder=\"Filter files…\" autocomplete=\"off\" data-pick=\".files > li\" hx-on:input=\"ermite.filter(this)\"></div>")
845953 if templ_7745c5c3_Err != nil {
846954 return templ_7745c5c3_Err
847955 }
848956 }
849- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 75, "<ol class=\"files\" aria-label=\"Changed files\">")
957+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 81, "<ol class=\"files\" aria-label=\"Changed files\">")
850958 if templ_7745c5c3_Err != nil {
851959 return templ_7745c5c3_Err
852960 }
853961 for _, f := range files {
854- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 76, "<li><a href=\"")
962+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 82, "<li><a href=\"")
855963 if templ_7745c5c3_Err != nil {
856964 return templ_7745c5c3_Err
857965 }
858- var templ_7745c5c3_Var39 templ.SafeURL
859- templ_7745c5c3_Var39, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL("#" + f.ID))
966+ var templ_7745c5c3_Var43 templ.SafeURL
967+ templ_7745c5c3_Var43, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL("#" + f.ID))
860968 if templ_7745c5c3_Err != nil {
861- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 176, Col: 37}
969+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 203, Col: 37}
862970 }
863- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var39))
971+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var43))
864972 if templ_7745c5c3_Err != nil {
865973 return templ_7745c5c3_Err
866974 }
867- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 77, "\" title=\"")
975+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 83, "\" title=\"")
868976 if templ_7745c5c3_Err != nil {
869977 return templ_7745c5c3_Err
870978 }
871- var templ_7745c5c3_Var40 string
872- templ_7745c5c3_Var40, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Path)
979+ var templ_7745c5c3_Var44 string
980+ templ_7745c5c3_Var44, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Path)
873981 if templ_7745c5c3_Err != nil {
874- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 177, Col: 19}
982+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 204, Col: 19}
875983 }
876- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var40)
984+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var44)
877985 if templ_7745c5c3_Err != nil {
878986 return templ_7745c5c3_Err
879987 }
880- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 78, "\" hx-on:click=\"(window.ermiteMR?.openFile || ermite.openFile)(this.hash.slice(1))\"><span class=\"st\" data-st=\"")
988+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 84, "\" hx-on:click=\"(window.ermiteMR?.openFile || ermite.openFile)(this.hash.slice(1))\"><span class=\"st\" data-st=\"")
881989 if templ_7745c5c3_Err != nil {
882990 return templ_7745c5c3_Err
883991 }
884- var templ_7745c5c3_Var41 string
885- templ_7745c5c3_Var41, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Status)
992+ var templ_7745c5c3_Var45 string
993+ templ_7745c5c3_Var45, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Status)
886994 if templ_7745c5c3_Err != nil {
887- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 180, Col: 40}
995+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 207, Col: 40}
888996 }
889- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var41)
997+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var45)
890998 if templ_7745c5c3_Err != nil {
891999 return templ_7745c5c3_Err
8921000 }
893- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 79, "\" title=\"")
1001+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 85, "\" title=\"")
8941002 if templ_7745c5c3_Err != nil {
8951003 return templ_7745c5c3_Err
8961004 }
897- var templ_7745c5c3_Var42 string
898- templ_7745c5c3_Var42, templ_7745c5c3_Err = templ.ResolveAttributeValue(statusName(f.Status))
1005+ var templ_7745c5c3_Var46 string
1006+ templ_7745c5c3_Var46, templ_7745c5c3_Err = templ.ResolveAttributeValue(statusName(f.Status))
8991007 if templ_7745c5c3_Err != nil {
900- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 180, Col: 71}
1008+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 207, Col: 71}
9011009 }
902- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var42)
1010+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var46)
9031011 if templ_7745c5c3_Err != nil {
9041012 return templ_7745c5c3_Err
9051013 }
906- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 80, "\">")
1014+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 86, "\">")
9071015 if templ_7745c5c3_Err != nil {
9081016 return templ_7745c5c3_Err
9091017 }
910- var templ_7745c5c3_Var43 string
911- templ_7745c5c3_Var43, templ_7745c5c3_Err = templ.JoinStringErrs(f.Status)
1018+ var templ_7745c5c3_Var47 string
1019+ templ_7745c5c3_Var47, templ_7745c5c3_Err = templ.JoinStringErrs(f.Status)
9121020 if templ_7745c5c3_Err != nil {
913- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 180, Col: 84}
1021+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 207, Col: 84}
9141022 }
915- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var43))
1023+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var47))
9161024 if templ_7745c5c3_Err != nil {
9171025 return templ_7745c5c3_Err
9181026 }
919- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 81, "</span> <span class=\"nm\"><span class=\"p\">")
1027+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 87, "</span> <span class=\"nm\"><span class=\"p\">")
9201028 if templ_7745c5c3_Err != nil {
9211029 return templ_7745c5c3_Err
9221030 }
923- var templ_7745c5c3_Var44 string
924- templ_7745c5c3_Var44, templ_7745c5c3_Err = templ.JoinStringErrs(f.Name)
1031+ var templ_7745c5c3_Var48 string
1032+ templ_7745c5c3_Var48, templ_7745c5c3_Err = templ.JoinStringErrs(f.Name)
9251033 if templ_7745c5c3_Err != nil {
926- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 181, Col: 46}
1034+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 208, Col: 46}
9271035 }
928- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var44))
1036+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var48))
9291037 if templ_7745c5c3_Err != nil {
9301038 return templ_7745c5c3_Err
9311039 }
932- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 82, "</span>")
1040+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 88, "</span>")
9331041 if templ_7745c5c3_Err != nil {
9341042 return templ_7745c5c3_Err
9351043 }
936- var templ_7745c5c3_Var45 string
937- templ_7745c5c3_Var45, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
1044+ var templ_7745c5c3_Var49 string
1045+ templ_7745c5c3_Var49, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
9381046 if templ_7745c5c3_Err != nil {
939- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 181, Col: 60}
1047+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 208, Col: 60}
9401048 }
941- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var45))
1049+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var49))
9421050 if templ_7745c5c3_Err != nil {
9431051 return templ_7745c5c3_Err
9441052 }
945- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 83, "<span class=\"d\"><bdi>")
1053+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 89, "<span class=\"d\"><bdi>")
9461054 if templ_7745c5c3_Err != nil {
9471055 return templ_7745c5c3_Err
9481056 }
949- var templ_7745c5c3_Var46 string
950- templ_7745c5c3_Var46, templ_7745c5c3_Err = templ.JoinStringErrs(f.Dir)
1057+ var templ_7745c5c3_Var50 string
1058+ templ_7745c5c3_Var50, templ_7745c5c3_Err = templ.JoinStringErrs(f.Dir)
9511059 if templ_7745c5c3_Err != nil {
952- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 181, Col: 90}
1060+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 208, Col: 90}
9531061 }
954- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var46))
1062+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var50))
9551063 if templ_7745c5c3_Err != nil {
9561064 return templ_7745c5c3_Err
9571065 }
958- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 84, "</bdi></span></span> ")
1066+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 90, "</bdi></span></span> ")
9591067 if templ_7745c5c3_Err != nil {
9601068 return templ_7745c5c3_Err
9611069 }
9621070 if f.OpenNotes > 0 {
963- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 85, "<span class=\"cn\" title=\"")
1071+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 91, "<span class=\"cn\" title=\"")
9641072 if templ_7745c5c3_Err != nil {
9651073 return templ_7745c5c3_Err
9661074 }
967- var templ_7745c5c3_Var47 string
968- templ_7745c5c3_Var47, templ_7745c5c3_Err = templ.ResolveAttributeValue(plural(f.OpenNotes, "open comment", "open comments"))
1075+ var templ_7745c5c3_Var51 string
1076+ templ_7745c5c3_Var51, templ_7745c5c3_Err = templ.ResolveAttributeValue(plural(f.OpenNotes, "open comment", "open comments"))
9691077 if templ_7745c5c3_Err != nil {
970- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 183, Col: 83}
1078+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 210, Col: 83}
9711079 }
972- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var47)
1080+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var51)
9731081 if templ_7745c5c3_Err != nil {
9741082 return templ_7745c5c3_Err
9751083 }
976- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 86, "\">")
1084+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 92, "\">")
9771085 if templ_7745c5c3_Err != nil {
9781086 return templ_7745c5c3_Err
9791087 }
980- var templ_7745c5c3_Var48 string
981- templ_7745c5c3_Var48, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.OpenNotes))
1088+ var templ_7745c5c3_Var52 string
1089+ templ_7745c5c3_Var52, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.OpenNotes))
9821090 if templ_7745c5c3_Err != nil {
983- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 183, Col: 105}
1091+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 210, Col: 105}
9841092 }
985- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var48))
1093+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var52))
9861094 if templ_7745c5c3_Err != nil {
9871095 return templ_7745c5c3_Err
9881096 }
989- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 87, "</span> ")
1097+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 93, "</span> ")
9901098 if templ_7745c5c3_Err != nil {
9911099 return templ_7745c5c3_Err
9921100 }
9931101 } else if f.Notes > 0 {
994- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 88, "<span class=\"cn done\" title=\"")
1102+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 94, "<span class=\"cn done\" title=\"")
9951103 if templ_7745c5c3_Err != nil {
9961104 return templ_7745c5c3_Err
9971105 }
998- var templ_7745c5c3_Var49 string
999- templ_7745c5c3_Var49, templ_7745c5c3_Err = templ.ResolveAttributeValue(plural(f.Notes, "resolved comment", "resolved comments"))
1106+ var templ_7745c5c3_Var53 string
1107+ templ_7745c5c3_Var53, templ_7745c5c3_Err = templ.ResolveAttributeValue(plural(f.Notes, "resolved comment", "resolved comments"))
10001108 if templ_7745c5c3_Err != nil {
1001- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 185, Col: 92}
1109+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 212, Col: 92}
10021110 }
1003- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var49)
1111+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var53)
10041112 if templ_7745c5c3_Err != nil {
10051113 return templ_7745c5c3_Err
10061114 }
1007- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 89, "\">")
1115+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 95, "\">")
10081116 if templ_7745c5c3_Err != nil {
10091117 return templ_7745c5c3_Err
10101118 }
1011- var templ_7745c5c3_Var50 string
1012- templ_7745c5c3_Var50, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.Notes))
1119+ var templ_7745c5c3_Var54 string
1120+ templ_7745c5c3_Var54, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.Notes))
10131121 if templ_7745c5c3_Err != nil {
1014- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 185, Col: 110}
1122+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 212, Col: 110}
10151123 }
1016- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var50))
1124+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var54))
10171125 if templ_7745c5c3_Err != nil {
10181126 return templ_7745c5c3_Err
10191127 }
1020- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 90, "</span> ")
1128+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 96, "</span> ")
10211129 if templ_7745c5c3_Err != nil {
10221130 return templ_7745c5c3_Err
10231131 }
10241132 }
10251133 if f.Bin {
1026- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 91, "<span class=\"n mute\">bin</span>")
1134+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 97, "<span class=\"n mute\">bin</span>")
10271135 if templ_7745c5c3_Err != nil {
10281136 return templ_7745c5c3_Err
10291137 }
10301138 } else {
1031- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 92, "<span class=\"n\"><span class=\"plus\">+")
1139+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 98, "<span class=\"n\"><span class=\"plus\">+")
10321140 if templ_7745c5c3_Err != nil {
10331141 return templ_7745c5c3_Err
10341142 }
1035- var templ_7745c5c3_Var51 string
1036- templ_7745c5c3_Var51, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.Add))
1143+ var templ_7745c5c3_Var55 string
1144+ templ_7745c5c3_Var55, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.Add))
10371145 if templ_7745c5c3_Err != nil {
1038- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 190, Col: 55}
1146+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 217, Col: 55}
10391147 }
1040- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var51))
1148+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var55))
10411149 if templ_7745c5c3_Err != nil {
10421150 return templ_7745c5c3_Err
10431151 }
1044- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 93, "</span> <span class=\"minus\">-")
1152+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 99, "</span> <span class=\"minus\">-")
10451153 if templ_7745c5c3_Err != nil {
10461154 return templ_7745c5c3_Err
10471155 }
1048- var templ_7745c5c3_Var52 string
1049- templ_7745c5c3_Var52, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.Del))
1156+ var templ_7745c5c3_Var56 string
1157+ templ_7745c5c3_Var56, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.Del))
10501158 if templ_7745c5c3_Err != nil {
1051- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 190, Col: 99}
1159+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 217, Col: 99}
10521160 }
1053- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var52))
1161+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var56))
10541162 if templ_7745c5c3_Err != nil {
10551163 return templ_7745c5c3_Err
10561164 }
1057- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 94, "</span></span>")
1165+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 100, "</span></span>")
10581166 if templ_7745c5c3_Err != nil {
10591167 return templ_7745c5c3_Err
10601168 }
10611169 }
1062- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 95, "</a></li>")
1170+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 101, "</a></li>")
10631171 if templ_7745c5c3_Err != nil {
10641172 return templ_7745c5c3_Err
10651173 }
10661174 }
1067- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 96, "</ol>")
1175+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 102, "</ol>")
10681176 if templ_7745c5c3_Err != nil {
10691177 return templ_7745c5c3_Err
10701178 }
@@ -1092,270 +1200,270 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
10921200 }()
10931201 }
10941202 ctx = templ.InitializeContext(ctx)
1095- templ_7745c5c3_Var53 := templ.GetChildren(ctx)
1096- if templ_7745c5c3_Var53 == nil {
1097- templ_7745c5c3_Var53 = templ.NopComponent
1203+ templ_7745c5c3_Var57 := templ.GetChildren(ctx)
1204+ if templ_7745c5c3_Var57 == nil {
1205+ templ_7745c5c3_Var57 = templ.NopComponent
10981206 }
10991207 ctx = templ.ClearChildren(ctx)
1100- var templ_7745c5c3_Var54 = []any{"dfile", "lnw-" + itoa(f.Digits)}
1101- templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var54...)
1208+ var templ_7745c5c3_Var58 = []any{"dfile", "lnw-" + itoa(f.Digits)}
1209+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var58...)
11021210 if templ_7745c5c3_Err != nil {
11031211 return templ_7745c5c3_Err
11041212 }
1105- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 97, "<details class=\"")
1213+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 103, "<details class=\"")
11061214 if templ_7745c5c3_Err != nil {
11071215 return templ_7745c5c3_Err
11081216 }
1109- var templ_7745c5c3_Var55 string
1110- templ_7745c5c3_Var55, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var54).String())
1217+ var templ_7745c5c3_Var59 string
1218+ templ_7745c5c3_Var59, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var58).String())
11111219 if templ_7745c5c3_Err != nil {
11121220 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}
11131221 }
1114- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var55)
1222+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var59)
11151223 if templ_7745c5c3_Err != nil {
11161224 return templ_7745c5c3_Err
11171225 }
1118- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 98, "\" id=\"")
1226+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 104, "\" id=\"")
11191227 if templ_7745c5c3_Err != nil {
11201228 return templ_7745c5c3_Err
11211229 }
1122- var templ_7745c5c3_Var56 string
1123- templ_7745c5c3_Var56, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.ID)
1230+ var templ_7745c5c3_Var60 string
1231+ templ_7745c5c3_Var60, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.ID)
11241232 if templ_7745c5c3_Err != nil {
1125- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 205, Col: 11}
1233+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 232, Col: 11}
11261234 }
1127- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var56)
1235+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var60)
11281236 if templ_7745c5c3_Err != nil {
11291237 return templ_7745c5c3_Err
11301238 }
1131- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 99, "\" data-file")
1239+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 105, "\" data-file")
11321240 if templ_7745c5c3_Err != nil {
11331241 return templ_7745c5c3_Err
11341242 }
11351243 if f.Open {
1136- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 100, " open")
1244+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 106, " open")
11371245 if templ_7745c5c3_Err != nil {
11381246 return templ_7745c5c3_Err
11391247 }
11401248 }
1141- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 101, "><summary><span class=\"st\">")
1249+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 107, "><summary><span class=\"st\">")
11421250 if templ_7745c5c3_Err != nil {
11431251 return templ_7745c5c3_Err
11441252 }
1145- var templ_7745c5c3_Var57 string
1146- templ_7745c5c3_Var57, templ_7745c5c3_Err = templ.JoinStringErrs(f.Status)
1253+ var templ_7745c5c3_Var61 string
1254+ templ_7745c5c3_Var61, templ_7745c5c3_Err = templ.JoinStringErrs(f.Status)
11471255 if templ_7745c5c3_Err != nil {
1148- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 212, Col: 30}
1256+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 239, Col: 30}
11491257 }
1150- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var57))
1258+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var61))
11511259 if templ_7745c5c3_Err != nil {
11521260 return templ_7745c5c3_Err
11531261 }
1154- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 102, "</span>")
1262+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 108, "</span>")
11551263 if templ_7745c5c3_Err != nil {
11561264 return templ_7745c5c3_Err
11571265 }
1158- var templ_7745c5c3_Var58 string
1159- templ_7745c5c3_Var58, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
1266+ var templ_7745c5c3_Var62 string
1267+ templ_7745c5c3_Var62, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
11601268 if templ_7745c5c3_Err != nil {
1161- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 212, Col: 44}
1269+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 239, Col: 44}
11621270 }
1163- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var58))
1271+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var62))
11641272 if templ_7745c5c3_Err != nil {
11651273 return templ_7745c5c3_Err
11661274 }
1167- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 103, "<span class=\"p\">")
1275+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 109, "<span class=\"p\">")
11681276 if templ_7745c5c3_Err != nil {
11691277 return templ_7745c5c3_Err
11701278 }
1171- var templ_7745c5c3_Var59 string
1172- templ_7745c5c3_Var59, templ_7745c5c3_Err = templ.JoinStringErrs(f.Path)
1279+ var templ_7745c5c3_Var63 string
1280+ templ_7745c5c3_Var63, templ_7745c5c3_Err = templ.JoinStringErrs(f.Path)
11731281 if templ_7745c5c3_Err != nil {
1174- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 212, Col: 70}
1282+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 239, Col: 70}
11751283 }
1176- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var59))
1284+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var63))
11771285 if templ_7745c5c3_Err != nil {
11781286 return templ_7745c5c3_Err
11791287 }
1180- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 104, "</span>")
1288+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 110, "</span>")
11811289 if templ_7745c5c3_Err != nil {
11821290 return templ_7745c5c3_Err
11831291 }
1184- var templ_7745c5c3_Var60 string
1185- templ_7745c5c3_Var60, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
1292+ var templ_7745c5c3_Var64 string
1293+ templ_7745c5c3_Var64, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
11861294 if templ_7745c5c3_Err != nil {
1187- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 212, Col: 84}
1295+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 239, Col: 84}
11881296 }
1189- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var60))
1297+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var64))
11901298 if templ_7745c5c3_Err != nil {
11911299 return templ_7745c5c3_Err
11921300 }
1193- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 105, "<span class=\"plus\">+")
1301+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 111, "<span class=\"plus\">+")
11941302 if templ_7745c5c3_Err != nil {
11951303 return templ_7745c5c3_Err
11961304 }
1197- var templ_7745c5c3_Var61 string
1198- templ_7745c5c3_Var61, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.Add))
1305+ var templ_7745c5c3_Var65 string
1306+ templ_7745c5c3_Var65, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.Add))
11991307 if templ_7745c5c3_Err != nil {
1200- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 212, Col: 119}
1308+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 239, Col: 119}
12011309 }
1202- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var61))
1310+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var65))
12031311 if templ_7745c5c3_Err != nil {
12041312 return templ_7745c5c3_Err
12051313 }
1206- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 106, "</span>")
1314+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 112, "</span>")
12071315 if templ_7745c5c3_Err != nil {
12081316 return templ_7745c5c3_Err
12091317 }
1210- var templ_7745c5c3_Var62 string
1211- templ_7745c5c3_Var62, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
1318+ var templ_7745c5c3_Var66 string
1319+ templ_7745c5c3_Var66, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
12121320 if templ_7745c5c3_Err != nil {
1213- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 212, Col: 133}
1321+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 239, Col: 133}
12141322 }
1215- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var62))
1323+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var66))
12161324 if templ_7745c5c3_Err != nil {
12171325 return templ_7745c5c3_Err
12181326 }
1219- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 107, "<span class=\"minus\">-")
1327+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 113, "<span class=\"minus\">-")
12201328 if templ_7745c5c3_Err != nil {
12211329 return templ_7745c5c3_Err
12221330 }
1223- var templ_7745c5c3_Var63 string
1224- templ_7745c5c3_Var63, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.Del))
1331+ var templ_7745c5c3_Var67 string
1332+ templ_7745c5c3_Var67, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.Del))
12251333 if templ_7745c5c3_Err != nil {
1226- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 212, Col: 169}
1334+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 239, Col: 169}
12271335 }
1228- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var63))
1336+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var67))
12291337 if templ_7745c5c3_Err != nil {
12301338 return templ_7745c5c3_Err
12311339 }
1232- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 108, "</span> ")
1340+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 114, "</span> ")
12331341 if templ_7745c5c3_Err != nil {
12341342 return templ_7745c5c3_Err
12351343 }
12361344 if f.Note != "" {
1237- var templ_7745c5c3_Var64 string
1238- templ_7745c5c3_Var64, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
1345+ var templ_7745c5c3_Var68 string
1346+ templ_7745c5c3_Var68, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
12391347 if templ_7745c5c3_Err != nil {
1240- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 214, Col: 9}
1348+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 241, Col: 9}
12411349 }
1242- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var64))
1350+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var68))
12431351 if templ_7745c5c3_Err != nil {
12441352 return templ_7745c5c3_Err
12451353 }
1246- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 109, "<span class=\"note\">")
1354+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 115, "<span class=\"note\">")
12471355 if templ_7745c5c3_Err != nil {
12481356 return templ_7745c5c3_Err
12491357 }
1250- var templ_7745c5c3_Var65 string
1251- templ_7745c5c3_Var65, templ_7745c5c3_Err = templ.JoinStringErrs(f.Note)
1358+ var templ_7745c5c3_Var69 string
1359+ templ_7745c5c3_Var69, templ_7745c5c3_Err = templ.JoinStringErrs(f.Note)
12521360 if templ_7745c5c3_Err != nil {
1253- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 214, Col: 38}
1361+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 241, Col: 38}
12541362 }
1255- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var65))
1363+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var69))
12561364 if templ_7745c5c3_Err != nil {
12571365 return templ_7745c5c3_Err
12581366 }
1259- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 110, "</span>")
1367+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 116, "</span>")
12601368 if templ_7745c5c3_Err != nil {
12611369 return templ_7745c5c3_Err
12621370 }
12631371 }
1264- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 111, "</summary> ")
1372+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 117, "</summary> ")
12651373 if templ_7745c5c3_Err != nil {
12661374 return templ_7745c5c3_Err
12671375 }
12681376 if f.Lazy {
1269- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 112, " ")
1377+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 118, " ")
12701378 if templ_7745c5c3_Err != nil {
12711379 return templ_7745c5c3_Err
12721380 }
1273- var templ_7745c5c3_Var66 = []any{"dlazy", "dlazy-" + itoa(f.Height)}
1274- templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var66...)
1381+ var templ_7745c5c3_Var70 = []any{"dlazy", "dlazy-" + itoa(f.Height)}
1382+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var70...)
12751383 if templ_7745c5c3_Err != nil {
12761384 return templ_7745c5c3_Err
12771385 }
1278- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 113, "<div class=\"")
1386+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 119, "<div class=\"")
12791387 if templ_7745c5c3_Err != nil {
12801388 return templ_7745c5c3_Err
12811389 }
1282- var templ_7745c5c3_Var67 string
1283- templ_7745c5c3_Var67, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var66).String())
1390+ var templ_7745c5c3_Var71 string
1391+ templ_7745c5c3_Var71, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var70).String())
12841392 if templ_7745c5c3_Err != nil {
12851393 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}
12861394 }
1287- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var67)
1395+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var71)
12881396 if templ_7745c5c3_Err != nil {
12891397 return templ_7745c5c3_Err
12901398 }
1291- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 114, "\" data-src=\"")
1399+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 120, "\" data-src=\"")
12921400 if templ_7745c5c3_Err != nil {
12931401 return templ_7745c5c3_Err
12941402 }
1295- var templ_7745c5c3_Var68 string
1296- templ_7745c5c3_Var68, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Src)
1403+ var templ_7745c5c3_Var72 string
1404+ templ_7745c5c3_Var72, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Src)
12971405 if templ_7745c5c3_Err != nil {
1298- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 221, Col: 69}
1406+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 248, Col: 69}
12991407 }
1300- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var68)
1408+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var72)
13011409 if templ_7745c5c3_Err != nil {
13021410 return templ_7745c5c3_Err
13031411 }
1304- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 115, "\" data-notes=\"")
1412+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 121, "\" data-notes=\"")
13051413 if templ_7745c5c3_Err != nil {
13061414 return templ_7745c5c3_Err
13071415 }
1308- var templ_7745c5c3_Var69 string
1309- templ_7745c5c3_Var69, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Comments)
1416+ var templ_7745c5c3_Var73 string
1417+ templ_7745c5c3_Var73, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Comments)
13101418 if templ_7745c5c3_Err != nil {
1311- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 221, Col: 95}
1419+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 248, Col: 95}
13121420 }
1313- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var69)
1421+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var73)
13141422 if templ_7745c5c3_Err != nil {
13151423 return templ_7745c5c3_Err
13161424 }
1317- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 116, "\"><a href=\"")
1425+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 122, "\"><a href=\"")
13181426 if templ_7745c5c3_Err != nil {
13191427 return templ_7745c5c3_Err
13201428 }
1321- var templ_7745c5c3_Var70 templ.SafeURL
1322- templ_7745c5c3_Var70, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL("?from=" + itoa(f.From) + "#" + f.ID))
1429+ var templ_7745c5c3_Var74 templ.SafeURL
1430+ templ_7745c5c3_Var74, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL("?from=" + itoa(f.From) + "#" + f.ID))
13231431 if templ_7745c5c3_Err != nil {
1324- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 222, Col: 65}
1432+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 249, Col: 65}
13251433 }
1326- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var70))
1434+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var74))
13271435 if templ_7745c5c3_Err != nil {
13281436 return templ_7745c5c3_Err
13291437 }
1330- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 117, "\">show this file</a></div>")
1438+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 123, "\">show this file</a></div>")
13311439 if templ_7745c5c3_Err != nil {
13321440 return templ_7745c5c3_Err
13331441 }
13341442 } else if len(f.Hunks) > 0 {
1335- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 118, "<div class=\"dscroll\">")
1443+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 124, "<div class=\"dscroll\">")
13361444 if templ_7745c5c3_Err != nil {
13371445 return templ_7745c5c3_Err
13381446 }
13391447 if p.ShowUnified {
1340- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 119, "<table class=\"dt uni\" aria-label=\"")
1448+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 125, "<table class=\"dt uni\" aria-label=\"")
13411449 if templ_7745c5c3_Err != nil {
13421450 return templ_7745c5c3_Err
13431451 }
1344- var templ_7745c5c3_Var71 string
1345- templ_7745c5c3_Var71, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Path + ", unified")
1452+ var templ_7745c5c3_Var75 string
1453+ templ_7745c5c3_Var75, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Path + ", unified")
13461454 if templ_7745c5c3_Err != nil {
1347- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 227, Col: 60}
1455+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 254, Col: 60}
13481456 }
1349- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var71)
1457+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var75)
13501458 if templ_7745c5c3_Err != nil {
13511459 return templ_7745c5c3_Err
13521460 }
1353- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 120, "\">")
1461+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 126, "\">")
13541462 if templ_7745c5c3_Err != nil {
13551463 return templ_7745c5c3_Err
13561464 }
13571465 for _, h := range f.Hunks {
1358- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 121, "<tbody>")
1466+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 127, "<tbody>")
13591467 if templ_7745c5c3_Err != nil {
13601468 return templ_7745c5c3_Err
13611469 }
@@ -1365,43 +1473,43 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
13651473 return templ_7745c5c3_Err
13661474 }
13671475 }
1368- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 122, "<tr class=\"hunk\"><td colspan=\"4\">")
1476+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 128, "<tr class=\"hunk\"><td colspan=\"4\">")
13691477 if templ_7745c5c3_Err != nil {
13701478 return templ_7745c5c3_Err
13711479 }
1372- var templ_7745c5c3_Var72 string
1373- templ_7745c5c3_Var72, templ_7745c5c3_Err = templ.JoinStringErrs(h.Header)
1480+ var templ_7745c5c3_Var76 string
1481+ templ_7745c5c3_Var76, templ_7745c5c3_Err = templ.JoinStringErrs(h.Header)
13741482 if templ_7745c5c3_Err != nil {
1375- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 233, Col: 51}
1483+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 260, Col: 51}
13761484 }
1377- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var72))
1485+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var76))
13781486 if templ_7745c5c3_Err != nil {
13791487 return templ_7745c5c3_Err
13801488 }
1381- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 123, "</td></tr>")
1489+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 129, "</td></tr>")
13821490 if templ_7745c5c3_Err != nil {
13831491 return templ_7745c5c3_Err
13841492 }
13851493 for _, ln := range h.Lines {
1386- var templ_7745c5c3_Var73 = []any{ln.Kind, templ.KV("sel", ln.Selected)}
1387- templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var73...)
1494+ var templ_7745c5c3_Var77 = []any{ln.Kind, templ.KV("sel", ln.Selected)}
1495+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var77...)
13881496 if templ_7745c5c3_Err != nil {
13891497 return templ_7745c5c3_Err
13901498 }
1391- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 124, "<tr class=\"")
1499+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 130, "<tr class=\"")
13921500 if templ_7745c5c3_Err != nil {
13931501 return templ_7745c5c3_Err
13941502 }
1395- var templ_7745c5c3_Var74 string
1396- templ_7745c5c3_Var74, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var73).String())
1503+ var templ_7745c5c3_Var78 string
1504+ templ_7745c5c3_Var78, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var77).String())
13971505 if templ_7745c5c3_Err != nil {
13981506 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}
13991507 }
1400- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var74)
1508+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var78)
14011509 if templ_7745c5c3_Err != nil {
14021510 return templ_7745c5c3_Err
14031511 }
1404- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 125, "\"><td class=\"ln\">")
1512+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 131, "\"><td class=\"ln\">")
14051513 if templ_7745c5c3_Err != nil {
14061514 return templ_7745c5c3_Err
14071515 }
@@ -1409,7 +1517,7 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
14091517 if templ_7745c5c3_Err != nil {
14101518 return templ_7745c5c3_Err
14111519 }
1412- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 126, "</td><td class=\"ln\">")
1520+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 132, "</td><td class=\"ln\">")
14131521 if templ_7745c5c3_Err != nil {
14141522 return templ_7745c5c3_Err
14151523 }
@@ -1417,20 +1525,20 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
14171525 if templ_7745c5c3_Err != nil {
14181526 return templ_7745c5c3_Err
14191527 }
1420- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 127, "</td><td class=\"m\">")
1528+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 133, "</td><td class=\"m\">")
14211529 if templ_7745c5c3_Err != nil {
14221530 return templ_7745c5c3_Err
14231531 }
1424- var templ_7745c5c3_Var75 string
1425- templ_7745c5c3_Var75, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Mark)
1532+ var templ_7745c5c3_Var79 string
1533+ templ_7745c5c3_Var79, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Mark)
14261534 if templ_7745c5c3_Err != nil {
1427- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 238, Col: 33}
1535+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 265, Col: 33}
14281536 }
1429- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var75))
1537+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var79))
14301538 if templ_7745c5c3_Err != nil {
14311539 return templ_7745c5c3_Err
14321540 }
1433- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 128, "</td><td class=\"tx chroma\">")
1541+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 134, "</td><td class=\"tx chroma\">")
14341542 if templ_7745c5c3_Err != nil {
14351543 return templ_7745c5c3_Err
14361544 }
@@ -1438,12 +1546,12 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
14381546 if templ_7745c5c3_Err != nil {
14391547 return templ_7745c5c3_Err
14401548 }
1441- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 129, "</td></tr>")
1549+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 135, "</td></tr>")
14421550 if templ_7745c5c3_Err != nil {
14431551 return templ_7745c5c3_Err
14441552 }
14451553 if len(ln.Notes) > 0 || ln.Form != nil {
1446- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 130, "<tr class=\"fnote\"><td colspan=\"3\"></td><td>")
1554+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 136, "<tr class=\"fnote\"><td colspan=\"3\"></td><td>")
14471555 if templ_7745c5c3_Err != nil {
14481556 return templ_7745c5c3_Err
14491557 }
@@ -1451,19 +1559,19 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
14511559 if templ_7745c5c3_Err != nil {
14521560 return templ_7745c5c3_Err
14531561 }
1454- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 131, "</td></tr>")
1562+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 137, "</td></tr>")
14551563 if templ_7745c5c3_Err != nil {
14561564 return templ_7745c5c3_Err
14571565 }
14581566 }
14591567 }
1460- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 132, "</tbody> ")
1568+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 138, "</tbody> ")
14611569 if templ_7745c5c3_Err != nil {
14621570 return templ_7745c5c3_Err
14631571 }
14641572 }
14651573 if f.Tail != nil {
1466- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 133, "<tbody>")
1574+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 139, "<tbody>")
14671575 if templ_7745c5c3_Err != nil {
14681576 return templ_7745c5c3_Err
14691577 }
@@ -1471,36 +1579,36 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
14711579 if templ_7745c5c3_Err != nil {
14721580 return templ_7745c5c3_Err
14731581 }
1474- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 134, "</tbody>")
1582+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 140, "</tbody>")
14751583 if templ_7745c5c3_Err != nil {
14761584 return templ_7745c5c3_Err
14771585 }
14781586 }
1479- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 135, "</table>")
1587+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 141, "</table>")
14801588 if templ_7745c5c3_Err != nil {
14811589 return templ_7745c5c3_Err
14821590 }
14831591 }
14841592 if p.ShowSplit {
1485- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 136, "<table class=\"dt spl\" aria-label=\"")
1593+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 142, "<table class=\"dt spl\" aria-label=\"")
14861594 if templ_7745c5c3_Err != nil {
14871595 return templ_7745c5c3_Err
14881596 }
1489- var templ_7745c5c3_Var76 string
1490- templ_7745c5c3_Var76, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Path + ", split")
1597+ var templ_7745c5c3_Var80 string
1598+ templ_7745c5c3_Var80, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Path + ", split")
14911599 if templ_7745c5c3_Err != nil {
1492- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 258, Col: 58}
1600+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 285, Col: 58}
14931601 }
1494- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var76)
1602+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var80)
14951603 if templ_7745c5c3_Err != nil {
14961604 return templ_7745c5c3_Err
14971605 }
1498- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 137, "\"><colgroup><col class=\"c-ln\"><col class=\"c-m\"><col><col class=\"c-ln\"><col class=\"c-m\"><col></colgroup> ")
1606+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 143, "\"><colgroup><col class=\"c-ln\"><col class=\"c-m\"><col><col class=\"c-ln\"><col class=\"c-m\"><col></colgroup> ")
14991607 if templ_7745c5c3_Err != nil {
15001608 return templ_7745c5c3_Err
15011609 }
15021610 for _, h := range f.Hunks {
1503- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 138, "<tbody>")
1611+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 144, "<tbody>")
15041612 if templ_7745c5c3_Err != nil {
15051613 return templ_7745c5c3_Err
15061614 }
@@ -1510,25 +1618,25 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
15101618 return templ_7745c5c3_Err
15111619 }
15121620 }
1513- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 139, "<tr class=\"hunk\"><td colspan=\"6\">")
1621+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 145, "<tr class=\"hunk\"><td colspan=\"6\">")
15141622 if templ_7745c5c3_Err != nil {
15151623 return templ_7745c5c3_Err
15161624 }
1517- var templ_7745c5c3_Var77 string
1518- templ_7745c5c3_Var77, templ_7745c5c3_Err = templ.JoinStringErrs(h.Header)
1625+ var templ_7745c5c3_Var81 string
1626+ templ_7745c5c3_Var81, templ_7745c5c3_Err = templ.JoinStringErrs(h.Header)
15191627 if templ_7745c5c3_Err != nil {
1520- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 265, Col: 51}
1628+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 292, Col: 51}
15211629 }
1522- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var77))
1630+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var81))
15231631 if templ_7745c5c3_Err != nil {
15241632 return templ_7745c5c3_Err
15251633 }
1526- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 140, "</td></tr>")
1634+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 146, "</td></tr>")
15271635 if templ_7745c5c3_Err != nil {
15281636 return templ_7745c5c3_Err
15291637 }
15301638 for _, row := range h.Split {
1531- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 141, "<tr>")
1639+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 147, "<tr>")
15321640 if templ_7745c5c3_Err != nil {
15331641 return templ_7745c5c3_Err
15341642 }
@@ -1540,12 +1648,12 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
15401648 if templ_7745c5c3_Err != nil {
15411649 return templ_7745c5c3_Err
15421650 }
1543- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 142, "</tr>")
1651+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 148, "</tr>")
15441652 if templ_7745c5c3_Err != nil {
15451653 return templ_7745c5c3_Err
15461654 }
15471655 if notes, form := row.Notes(), row.Form(); len(notes) > 0 || form != nil {
1548- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 143, "<tr class=\"fnote\"><td colspan=\"6\">")
1656+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 149, "<tr class=\"fnote\"><td colspan=\"6\">")
15491657 if templ_7745c5c3_Err != nil {
15501658 return templ_7745c5c3_Err
15511659 }
@@ -1553,19 +1661,19 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
15531661 if templ_7745c5c3_Err != nil {
15541662 return templ_7745c5c3_Err
15551663 }
1556- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 144, "</td></tr>")
1664+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 150, "</td></tr>")
15571665 if templ_7745c5c3_Err != nil {
15581666 return templ_7745c5c3_Err
15591667 }
15601668 }
15611669 }
1562- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 145, "</tbody> ")
1670+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 151, "</tbody> ")
15631671 if templ_7745c5c3_Err != nil {
15641672 return templ_7745c5c3_Err
15651673 }
15661674 }
15671675 if f.Tail != nil {
1568- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 146, "<tbody>")
1676+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 152, "<tbody>")
15691677 if templ_7745c5c3_Err != nil {
15701678 return templ_7745c5c3_Err
15711679 }
@@ -1573,48 +1681,48 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
15731681 if templ_7745c5c3_Err != nil {
15741682 return templ_7745c5c3_Err
15751683 }
1576- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 147, "</tbody>")
1684+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 153, "</tbody>")
15771685 if templ_7745c5c3_Err != nil {
15781686 return templ_7745c5c3_Err
15791687 }
15801688 }
1581- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 148, "</table>")
1689+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 154, "</table>")
15821690 if templ_7745c5c3_Err != nil {
15831691 return templ_7745c5c3_Err
15841692 }
15851693 }
1586- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 149, "</div>")
1694+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 155, "</div>")
15871695 if templ_7745c5c3_Err != nil {
15881696 return templ_7745c5c3_Err
15891697 }
15901698 } else {
1591- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 150, "<p class=\"note pad\">")
1699+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 156, "<p class=\"note pad\">")
15921700 if templ_7745c5c3_Err != nil {
15931701 return templ_7745c5c3_Err
15941702 }
15951703 if f.Note != "" {
1596- var templ_7745c5c3_Var78 string
1597- templ_7745c5c3_Var78, templ_7745c5c3_Err = templ.JoinStringErrs(f.Note)
1704+ var templ_7745c5c3_Var82 string
1705+ templ_7745c5c3_Var82, templ_7745c5c3_Err = templ.JoinStringErrs(f.Note)
15981706 if templ_7745c5c3_Err != nil {
1599- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 290, Col: 13}
1707+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 317, Col: 13}
16001708 }
1601- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var78))
1709+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var82))
16021710 if templ_7745c5c3_Err != nil {
16031711 return templ_7745c5c3_Err
16041712 }
16051713 } else {
1606- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 151, "no textual change.")
1714+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 157, "no textual change.")
16071715 if templ_7745c5c3_Err != nil {
16081716 return templ_7745c5c3_Err
16091717 }
16101718 }
1611- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 152, "</p>")
1719+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 158, "</p>")
16121720 if templ_7745c5c3_Err != nil {
16131721 return templ_7745c5c3_Err
16141722 }
16151723 }
16161724 if len(f.Loose) > 0 {
1617- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 153, "<div class=\"dloose\">")
1725+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 159, "<div class=\"dloose\">")
16181726 if templ_7745c5c3_Err != nil {
16191727 return templ_7745c5c3_Err
16201728 }
@@ -1624,12 +1732,12 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
16241732 return templ_7745c5c3_Err
16251733 }
16261734 }
1627- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 154, "</div>")
1735+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 160, "</div>")
16281736 if templ_7745c5c3_Err != nil {
16291737 return templ_7745c5c3_Err
16301738 }
16311739 }
1632- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 155, "</details>")
1740+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 161, "</details>")
16331741 if templ_7745c5c3_Err != nil {
16341742 return templ_7745c5c3_Err
16351743 }
@@ -1655,9 +1763,9 @@ func MRFiles(p MRFilesPage) templ.Component {
16551763 }()
16561764 }
16571765 ctx = templ.InitializeContext(ctx)
1658- templ_7745c5c3_Var79 := templ.GetChildren(ctx)
1659- if templ_7745c5c3_Var79 == nil {
1660- templ_7745c5c3_Var79 = templ.NopComponent
1766+ templ_7745c5c3_Var83 := templ.GetChildren(ctx)
1767+ if templ_7745c5c3_Var83 == nil {
1768+ templ_7745c5c3_Var83 = templ.NopComponent
16611769 }
16621770 ctx = templ.ClearChildren(ctx)
16631771 for _, f := range p.Files {
@@ -1688,12 +1796,12 @@ func MRFilesMoved() templ.Component {
16881796 }()
16891797 }
16901798 ctx = templ.InitializeContext(ctx)
1691- templ_7745c5c3_Var80 := templ.GetChildren(ctx)
1692- if templ_7745c5c3_Var80 == nil {
1693- templ_7745c5c3_Var80 = templ.NopComponent
1799+ templ_7745c5c3_Var84 := templ.GetChildren(ctx)
1800+ if templ_7745c5c3_Var84 == nil {
1801+ templ_7745c5c3_Var84 = templ.NopComponent
16941802 }
16951803 ctx = templ.ClearChildren(ctx)
1696- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 156, "<p class=\"notice\" data-moved>this merge request changed since the page was loaded — <a href=\"\">reload</a></p>")
1804+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 162, "<p class=\"notice\" data-moved>this merge request changed since the page was loaded — <a href=\"\">reload</a></p>")
16971805 if templ_7745c5c3_Err != nil {
16981806 return templ_7745c5c3_Err
16991807 }
@@ -1720,64 +1828,64 @@ func gapRow(g DiffGap, cols int) templ.Component {
17201828 }()
17211829 }
17221830 ctx = templ.InitializeContext(ctx)
1723- templ_7745c5c3_Var81 := templ.GetChildren(ctx)
1724- if templ_7745c5c3_Var81 == nil {
1725- templ_7745c5c3_Var81 = templ.NopComponent
1831+ templ_7745c5c3_Var85 := templ.GetChildren(ctx)
1832+ if templ_7745c5c3_Var85 == nil {
1833+ templ_7745c5c3_Var85 = templ.NopComponent
17261834 }
17271835 ctx = templ.ClearChildren(ctx)
1728- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 157, "<tr class=\"gap\" data-js data-gap=\"")
1836+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 163, "<tr class=\"gap\" data-js data-gap=\"")
17291837 if templ_7745c5c3_Err != nil {
17301838 return templ_7745c5c3_Err
17311839 }
1732- var templ_7745c5c3_Var82 string
1733- templ_7745c5c3_Var82, templ_7745c5c3_Err = templ.ResolveAttributeValue(g.Key)
1840+ var templ_7745c5c3_Var86 string
1841+ templ_7745c5c3_Var86, templ_7745c5c3_Err = templ.ResolveAttributeValue(g.Key)
17341842 if templ_7745c5c3_Err != nil {
1735- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 324, Col: 41}
1843+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 351, Col: 41}
17361844 }
1737- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var82)
1845+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var86)
17381846 if templ_7745c5c3_Err != nil {
17391847 return templ_7745c5c3_Err
17401848 }
1741- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 158, "\"><td colspan=\"")
1849+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 164, "\"><td colspan=\"")
17421850 if templ_7745c5c3_Err != nil {
17431851 return templ_7745c5c3_Err
17441852 }
1745- var templ_7745c5c3_Var83 string
1746- templ_7745c5c3_Var83, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(cols))
1853+ var templ_7745c5c3_Var87 string
1854+ templ_7745c5c3_Var87, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(cols))
17471855 if templ_7745c5c3_Err != nil {
1748- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 325, Col: 26}
1856+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 352, Col: 26}
17491857 }
1750- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var83)
1858+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var87)
17511859 if templ_7745c5c3_Err != nil {
17521860 return templ_7745c5c3_Err
17531861 }
1754- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 159, "\"><button type=\"button\" data-src=\"")
1862+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 165, "\"><button type=\"button\" data-src=\"")
17551863 if templ_7745c5c3_Err != nil {
17561864 return templ_7745c5c3_Err
17571865 }
1758- var templ_7745c5c3_Var84 string
1759- templ_7745c5c3_Var84, templ_7745c5c3_Err = templ.ResolveAttributeValue(g.Src)
1866+ var templ_7745c5c3_Var88 string
1867+ templ_7745c5c3_Var88, templ_7745c5c3_Err = templ.ResolveAttributeValue(g.Src)
17601868 if templ_7745c5c3_Err != nil {
1761- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 326, Col: 41}
1869+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 353, Col: 41}
17621870 }
1763- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var84)
1871+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var88)
17641872 if templ_7745c5c3_Err != nil {
17651873 return templ_7745c5c3_Err
17661874 }
1767- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 160, "\"><span aria-hidden=\"true\">⋯</span> ")
1875+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 166, "\"><span aria-hidden=\"true\">⋯</span> ")
17681876 if templ_7745c5c3_Err != nil {
17691877 return templ_7745c5c3_Err
17701878 }
1771- var templ_7745c5c3_Var85 string
1772- templ_7745c5c3_Var85, templ_7745c5c3_Err = templ.JoinStringErrs(g.Label())
1879+ var templ_7745c5c3_Var89 string
1880+ templ_7745c5c3_Var89, templ_7745c5c3_Err = templ.JoinStringErrs(g.Label())
17731881 if templ_7745c5c3_Err != nil {
1774- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 327, Col: 51}
1882+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 354, Col: 51}
17751883 }
1776- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var85))
1884+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var89))
17771885 if templ_7745c5c3_Err != nil {
17781886 return templ_7745c5c3_Err
17791887 }
1780- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 161, "</button></td></tr>")
1888+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 167, "</button></td></tr>")
17811889 if templ_7745c5c3_Err != nil {
17821890 return templ_7745c5c3_Err
17831891 }
@@ -1803,56 +1911,56 @@ func DiffContext(c ContextRows) templ.Component {
18031911 }()
18041912 }
18051913 ctx = templ.InitializeContext(ctx)
1806- templ_7745c5c3_Var86 := templ.GetChildren(ctx)
1807- if templ_7745c5c3_Var86 == nil {
1808- templ_7745c5c3_Var86 = templ.NopComponent
1914+ templ_7745c5c3_Var90 := templ.GetChildren(ctx)
1915+ if templ_7745c5c3_Var90 == nil {
1916+ templ_7745c5c3_Var90 = templ.NopComponent
18091917 }
18101918 ctx = templ.ClearChildren(ctx)
1811- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 162, "<table><tbody data-for=\"uni\">")
1919+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 168, "<table><tbody data-for=\"uni\">")
18121920 if templ_7745c5c3_Err != nil {
18131921 return templ_7745c5c3_Err
18141922 }
18151923 for _, ln := range c.Lines {
1816- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 163, "<tr class=\"ctx\"><td class=\"ln\">")
1924+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 169, "<tr class=\"ctx\"><td class=\"ln\">")
18171925 if templ_7745c5c3_Err != nil {
18181926 return templ_7745c5c3_Err
18191927 }
1820- var templ_7745c5c3_Var87 string
1821- templ_7745c5c3_Var87, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Old)
1928+ var templ_7745c5c3_Var91 string
1929+ templ_7745c5c3_Var91, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Old)
18221930 if templ_7745c5c3_Err != nil {
1823- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 340, Col: 28}
1931+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 367, Col: 28}
18241932 }
1825- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var87))
1933+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var91))
18261934 if templ_7745c5c3_Err != nil {
18271935 return templ_7745c5c3_Err
18281936 }
1829- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 164, "</td><td class=\"ln\">")
1937+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 170, "</td><td class=\"ln\">")
18301938 if templ_7745c5c3_Err != nil {
18311939 return templ_7745c5c3_Err
18321940 }
1833- var templ_7745c5c3_Var88 string
1834- templ_7745c5c3_Var88, templ_7745c5c3_Err = templ.JoinStringErrs(ln.New)
1941+ var templ_7745c5c3_Var92 string
1942+ templ_7745c5c3_Var92, templ_7745c5c3_Err = templ.JoinStringErrs(ln.New)
18351943 if templ_7745c5c3_Err != nil {
1836- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 341, Col: 28}
1944+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 368, Col: 28}
18371945 }
1838- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var88))
1946+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var92))
18391947 if templ_7745c5c3_Err != nil {
18401948 return templ_7745c5c3_Err
18411949 }
1842- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 165, "</td><td class=\"m\">")
1950+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 171, "</td><td class=\"m\">")
18431951 if templ_7745c5c3_Err != nil {
18441952 return templ_7745c5c3_Err
18451953 }
1846- var templ_7745c5c3_Var89 string
1847- templ_7745c5c3_Var89, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Mark)
1954+ var templ_7745c5c3_Var93 string
1955+ templ_7745c5c3_Var93, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Mark)
18481956 if templ_7745c5c3_Err != nil {
1849- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 342, Col: 28}
1957+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 369, Col: 28}
18501958 }
1851- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var89))
1959+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var93))
18521960 if templ_7745c5c3_Err != nil {
18531961 return templ_7745c5c3_Err
18541962 }
1855- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 166, "</td><td class=\"tx chroma\">")
1963+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 172, "</td><td class=\"tx chroma\">")
18561964 if templ_7745c5c3_Err != nil {
18571965 return templ_7745c5c3_Err
18581966 }
@@ -1860,7 +1968,7 @@ func DiffContext(c ContextRows) templ.Component {
18601968 if templ_7745c5c3_Err != nil {
18611969 return templ_7745c5c3_Err
18621970 }
1863- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 167, "</td></tr>")
1971+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 173, "</td></tr>")
18641972 if templ_7745c5c3_Err != nil {
18651973 return templ_7745c5c3_Err
18661974 }
@@ -1871,12 +1979,12 @@ func DiffContext(c ContextRows) templ.Component {
18711979 return templ_7745c5c3_Err
18721980 }
18731981 }
1874- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 168, "</tbody> <tbody data-for=\"spl\">")
1982+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 174, "</tbody> <tbody data-for=\"spl\">")
18751983 if templ_7745c5c3_Err != nil {
18761984 return templ_7745c5c3_Err
18771985 }
18781986 for i := range c.Lines {
1879- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 169, "<tr>")
1987+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 175, "<tr>")
18801988 if templ_7745c5c3_Err != nil {
18811989 return templ_7745c5c3_Err
18821990 }
@@ -1888,7 +1996,7 @@ func DiffContext(c ContextRows) templ.Component {
18881996 if templ_7745c5c3_Err != nil {
18891997 return templ_7745c5c3_Err
18901998 }
1891- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 170, "</tr>")
1999+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 176, "</tr>")
18922000 if templ_7745c5c3_Err != nil {
18932001 return templ_7745c5c3_Err
18942002 }
@@ -1899,7 +2007,7 @@ func DiffContext(c ContextRows) templ.Component {
18992007 return templ_7745c5c3_Err
19002008 }
19012009 }
1902- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 171, "</tbody></table>")
2010+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 177, "</tbody></table>")
19032011 if templ_7745c5c3_Err != nil {
19042012 return templ_7745c5c3_Err
19052013 }
@@ -1925,36 +2033,36 @@ func splitSide(ln *DiffLine, old bool) templ.Component {
19252033 }()
19262034 }
19272035 ctx = templ.InitializeContext(ctx)
1928- templ_7745c5c3_Var90 := templ.GetChildren(ctx)
1929- if templ_7745c5c3_Var90 == nil {
1930- templ_7745c5c3_Var90 = templ.NopComponent
2036+ templ_7745c5c3_Var94 := templ.GetChildren(ctx)
2037+ if templ_7745c5c3_Var94 == nil {
2038+ templ_7745c5c3_Var94 = templ.NopComponent
19312039 }
19322040 ctx = templ.ClearChildren(ctx)
19332041 if ln == nil {
1934- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 172, "<td class=\"ln none\"></td><td class=\"m none\"></td><td class=\"tx none\"></td>")
2042+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 178, "<td class=\"ln none\"></td><td class=\"m none\"></td><td class=\"tx none\"></td>")
19352043 if templ_7745c5c3_Err != nil {
19362044 return templ_7745c5c3_Err
19372045 }
19382046 } else {
1939- var templ_7745c5c3_Var91 = []any{"ln", ln.Kind, templ.KV("sel", ln.Selected)}
1940- templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var91...)
2047+ var templ_7745c5c3_Var95 = []any{"ln", ln.Kind, templ.KV("sel", ln.Selected)}
2048+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var95...)
19412049 if templ_7745c5c3_Err != nil {
19422050 return templ_7745c5c3_Err
19432051 }
1944- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 173, "<td class=\"")
2052+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 179, "<td class=\"")
19452053 if templ_7745c5c3_Err != nil {
19462054 return templ_7745c5c3_Err
19472055 }
1948- var templ_7745c5c3_Var92 string
1949- templ_7745c5c3_Var92, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var91).String())
2056+ var templ_7745c5c3_Var96 string
2057+ templ_7745c5c3_Var96, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var95).String())
19502058 if templ_7745c5c3_Err != nil {
19512059 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}
19522060 }
1953- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var92)
2061+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var96)
19542062 if templ_7745c5c3_Err != nil {
19552063 return templ_7745c5c3_Err
19562064 }
1957- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 174, "\">")
2065+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 180, "\">")
19582066 if templ_7745c5c3_Err != nil {
19592067 return templ_7745c5c3_Err
19602068 }
@@ -1969,64 +2077,64 @@ func splitSide(ln *DiffLine, old bool) templ.Component {
19692077 return templ_7745c5c3_Err
19702078 }
19712079 }
1972- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 175, "</td>")
2080+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 181, "</td>")
19732081 if templ_7745c5c3_Err != nil {
19742082 return templ_7745c5c3_Err
19752083 }
1976- var templ_7745c5c3_Var93 = []any{"m", ln.Kind, templ.KV("sel", ln.Selected)}
1977- templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var93...)
2084+ var templ_7745c5c3_Var97 = []any{"m", ln.Kind, templ.KV("sel", ln.Selected)}
2085+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var97...)
19782086 if templ_7745c5c3_Err != nil {
19792087 return templ_7745c5c3_Err
19802088 }
1981- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 176, "<td class=\"")
2089+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 182, "<td class=\"")
19822090 if templ_7745c5c3_Err != nil {
19832091 return templ_7745c5c3_Err
19842092 }
1985- var templ_7745c5c3_Var94 string
1986- templ_7745c5c3_Var94, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var93).String())
2093+ var templ_7745c5c3_Var98 string
2094+ templ_7745c5c3_Var98, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var97).String())
19872095 if templ_7745c5c3_Err != nil {
19882096 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}
19892097 }
1990- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var94)
2098+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var98)
19912099 if templ_7745c5c3_Err != nil {
19922100 return templ_7745c5c3_Err
19932101 }
1994- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 177, "\">")
2102+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 183, "\">")
19952103 if templ_7745c5c3_Err != nil {
19962104 return templ_7745c5c3_Err
19972105 }
1998- var templ_7745c5c3_Var95 string
1999- templ_7745c5c3_Var95, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Mark)
2106+ var templ_7745c5c3_Var99 string
2107+ templ_7745c5c3_Var99, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Mark)
20002108 if templ_7745c5c3_Err != nil {
2001- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 379, Col: 68}
2109+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 406, Col: 68}
20022110 }
2003- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var95))
2111+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var99))
20042112 if templ_7745c5c3_Err != nil {
20052113 return templ_7745c5c3_Err
20062114 }
2007- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 178, "</td>")
2115+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 184, "</td>")
20082116 if templ_7745c5c3_Err != nil {
20092117 return templ_7745c5c3_Err
20102118 }
2011- var templ_7745c5c3_Var96 = []any{"tx", "chroma", ln.Kind, templ.KV("sel", ln.Selected)}
2012- templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var96...)
2119+ var templ_7745c5c3_Var100 = []any{"tx", "chroma", ln.Kind, templ.KV("sel", ln.Selected)}
2120+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var100...)
20132121 if templ_7745c5c3_Err != nil {
20142122 return templ_7745c5c3_Err
20152123 }
2016- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 179, "<td class=\"")
2124+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 185, "<td class=\"")
20172125 if templ_7745c5c3_Err != nil {
20182126 return templ_7745c5c3_Err
20192127 }
2020- var templ_7745c5c3_Var97 string
2021- templ_7745c5c3_Var97, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var96).String())
2128+ var templ_7745c5c3_Var101 string
2129+ templ_7745c5c3_Var101, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var100).String())
20222130 if templ_7745c5c3_Err != nil {
20232131 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}
20242132 }
2025- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var97)
2133+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var101)
20262134 if templ_7745c5c3_Err != nil {
20272135 return templ_7745c5c3_Err
20282136 }
2029- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 180, "\">")
2137+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 186, "\">")
20302138 if templ_7745c5c3_Err != nil {
20312139 return templ_7745c5c3_Err
20322140 }
@@ -2034,7 +2142,7 @@ func splitSide(ln *DiffLine, old bool) templ.Component {
20342142 if templ_7745c5c3_Err != nil {
20352143 return templ_7745c5c3_Err
20362144 }
2037- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 181, "</td>")
2145+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 187, "</td>")
20382146 if templ_7745c5c3_Err != nil {
20392147 return templ_7745c5c3_Err
20402148 }
@@ -2061,49 +2169,49 @@ func gutter(n, href string) templ.Component {
20612169 }()
20622170 }
20632171 ctx = templ.InitializeContext(ctx)
2064- templ_7745c5c3_Var98 := templ.GetChildren(ctx)
2065- if templ_7745c5c3_Var98 == nil {
2066- templ_7745c5c3_Var98 = templ.NopComponent
2172+ templ_7745c5c3_Var102 := templ.GetChildren(ctx)
2173+ if templ_7745c5c3_Var102 == nil {
2174+ templ_7745c5c3_Var102 = templ.NopComponent
20672175 }
20682176 ctx = templ.ClearChildren(ctx)
20692177 if href != "" {
2070- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 182, "<a href=\"")
2178+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 188, "<a href=\"")
20712179 if templ_7745c5c3_Err != nil {
20722180 return templ_7745c5c3_Err
20732181 }
2074- var templ_7745c5c3_Var99 templ.SafeURL
2075- templ_7745c5c3_Var99, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(href))
2182+ var templ_7745c5c3_Var103 templ.SafeURL
2183+ templ_7745c5c3_Var103, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(href))
20762184 if templ_7745c5c3_Err != nil {
2077- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 388, Col: 31}
2185+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 415, Col: 31}
20782186 }
2079- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var99))
2187+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var103))
20802188 if templ_7745c5c3_Err != nil {
20812189 return templ_7745c5c3_Err
20822190 }
2083- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 183, "\" title=\"comment on this line\">")
2191+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 189, "\" title=\"comment on this line\">")
20842192 if templ_7745c5c3_Err != nil {
20852193 return templ_7745c5c3_Err
20862194 }
2087- var templ_7745c5c3_Var100 string
2088- templ_7745c5c3_Var100, templ_7745c5c3_Err = templ.JoinStringErrs(n)
2195+ var templ_7745c5c3_Var104 string
2196+ templ_7745c5c3_Var104, templ_7745c5c3_Err = templ.JoinStringErrs(n)
20892197 if templ_7745c5c3_Err != nil {
2090- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 388, Col: 66}
2198+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 415, Col: 66}
20912199 }
2092- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var100))
2200+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var104))
20932201 if templ_7745c5c3_Err != nil {
20942202 return templ_7745c5c3_Err
20952203 }
2096- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 184, "</a>")
2204+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 190, "</a>")
20972205 if templ_7745c5c3_Err != nil {
20982206 return templ_7745c5c3_Err
20992207 }
21002208 } else {
2101- var templ_7745c5c3_Var101 string
2102- templ_7745c5c3_Var101, templ_7745c5c3_Err = templ.JoinStringErrs(n)
2209+ var templ_7745c5c3_Var105 string
2210+ templ_7745c5c3_Var105, templ_7745c5c3_Err = templ.JoinStringErrs(n)
21032211 if templ_7745c5c3_Err != nil {
2104- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 390, Col: 5}
2212+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 417, Col: 5}
21052213 }
2106- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var101))
2214+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var105))
21072215 if templ_7745c5c3_Err != nil {
21082216 return templ_7745c5c3_Err
21092217 }
@@ -359,15 +359,11 @@ func Commit(l Layout, p CommitPage) templ.Component {
359 if templ_7745c5c3_Err != nil {359 if templ_7745c5c3_Err != nil {
360 return templ_7745c5c3_Err360 return templ_7745c5c3_Err
361 }361 }
362- templ_7745c5c3_Err = viewLink(p.DiffView, "unified", "Unified", "u", p.UnifiedHref).Render(ctx, templ_7745c5c3_Buffer)362+ templ_7745c5c3_Err = diffViewMenu(p.DiffView).Render(ctx, templ_7745c5c3_Buffer)
363 if templ_7745c5c3_Err != nil {363 if templ_7745c5c3_Err != nil {
364 return templ_7745c5c3_Err364 return templ_7745c5c3_Err
365 }365 }
366- templ_7745c5c3_Err = viewLink(p.DiffView, "split", "Split", "d", p.SplitHref).Render(ctx, templ_7745c5c3_Buffer)366+ templ_7745c5c3_Err = wideButton().Render(ctx, templ_7745c5c3_Buffer)
367- if templ_7745c5c3_Err != nil {
368- return templ_7745c5c3_Err
369- }
370- templ_7745c5c3_Err = collapseButton().Render(ctx, templ_7745c5c3_Buffer)
371 if templ_7745c5c3_Err != nil {367 if templ_7745c5c3_Err != nil {
372 return templ_7745c5c3_Err368 return templ_7745c5c3_Err
373 }369 }
@@ -393,7 +389,7 @@ func Commit(l Layout, p CommitPage) templ.Component {
393 var templ_7745c5c3_Var17 string389 var templ_7745c5c3_Var17 string
394 templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.JoinStringErrs(p.Note)390 templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.JoinStringErrs(p.Note)
395 if templ_7745c5c3_Err != nil {391 if templ_7745c5c3_Err != nil {
396- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 86, Col: 29}392+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 85, Col: 29}
397 }393 }
398 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var17))394 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var17))
399 if templ_7745c5c3_Err != nil {395 if templ_7745c5c3_Err != nil {
@@ -416,7 +412,7 @@ func Commit(l Layout, p CommitPage) templ.Component {
416 var templ_7745c5c3_Var18 string412 var templ_7745c5c3_Var18 string
417 templ_7745c5c3_Var18, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)413 templ_7745c5c3_Var18, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
418 if templ_7745c5c3_Err != nil {414 if templ_7745c5c3_Err != nil {
419- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 91, Col: 22}415+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 90, Col: 22}
420 }416 }
421 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var18)417 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var18)
422 if templ_7745c5c3_Err != nil {418 if templ_7745c5c3_Err != nil {
@@ -434,7 +430,7 @@ func Commit(l Layout, p CommitPage) templ.Component {
434 var templ_7745c5c3_Var19 string430 var templ_7745c5c3_Var19 string
435 templ_7745c5c3_Var19, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)431 templ_7745c5c3_Var19, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
436 if templ_7745c5c3_Err != nil {432 if templ_7745c5c3_Err != nil {
437- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 93, Col: 22}433+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 92, Col: 22}
438 }434 }
439 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var19)435 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var19)
440 if templ_7745c5c3_Err != nil {436 if templ_7745c5c3_Err != nil {
@@ -469,7 +465,7 @@ func Commit(l Layout, p CommitPage) templ.Component {
469 var templ_7745c5c3_Var20 string465 var templ_7745c5c3_Var20 string
470 templ_7745c5c3_Var20, templ_7745c5c3_Err = templ.JoinStringErrs(" ")466 templ_7745c5c3_Var20, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
471 if templ_7745c5c3_Err != nil {467 if templ_7745c5c3_Err != nil {
472- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 103, Col: 41}468+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 102, Col: 41}
473 }469 }
474 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var20))470 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var20))
475 if templ_7745c5c3_Err != nil {471 if templ_7745c5c3_Err != nil {
@@ -509,6 +505,118 @@ func Commit(l Layout, p CommitPage) templ.Component {
509 })505 })
510 }506 }
511 507
508+// diffViewMenu is the layout of the diff (unified, the default, or split) and
509+// the fold of its files, in one menu: a <details> that works without scripts;
510+// u, d and x still act without opening it. Its button names the layout shown.
511+func diffViewMenu(p DiffView) templ.Component {
512+ return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
513+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
514+ if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
515+ return templ_7745c5c3_CtxErr
516+ }
517+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
518+ if !templ_7745c5c3_IsBuffer {
519+ defer func() {
520+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
521+ if templ_7745c5c3_Err == nil {
522+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
523+ }
524+ }()
525+ }
526+ ctx = templ.InitializeContext(ctx)
527+ templ_7745c5c3_Var21 := templ.GetChildren(ctx)
528+ if templ_7745c5c3_Var21 == nil {
529+ templ_7745c5c3_Var21 = templ.NopComponent
530+ }
531+ ctx = templ.ClearChildren(ctx)
532+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, "<details class=\"menu vmenu\"><summary class=\"btn\" aria-label=\"Diff view\">")
533+ if templ_7745c5c3_Err != nil {
534+ return templ_7745c5c3_Err
535+ }
536+ if p.Both {
537+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 56, "<span hx-live=\"this.textContent = q('#diffs').attr['data-diff'] === 'split' ? 'Split' : 'Unified'\">")
538+ if templ_7745c5c3_Err != nil {
539+ return templ_7745c5c3_Err
540+ }
541+ var templ_7745c5c3_Var22 string
542+ templ_7745c5c3_Var22, templ_7745c5c3_Err = templ.JoinStringErrs(viewLabel(p.View))
543+ if templ_7745c5c3_Err != nil {
544+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 121, Col: 122}
545+ }
546+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var22))
547+ if templ_7745c5c3_Err != nil {
548+ return templ_7745c5c3_Err
549+ }
550+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "</span>")
551+ if templ_7745c5c3_Err != nil {
552+ return templ_7745c5c3_Err
553+ }
554+ } else {
555+ var templ_7745c5c3_Var23 string
556+ templ_7745c5c3_Var23, templ_7745c5c3_Err = templ.JoinStringErrs(viewLabel(p.View))
557+ if templ_7745c5c3_Err != nil {
558+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 123, Col: 23}
559+ }
560+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var23))
561+ if templ_7745c5c3_Err != nil {
562+ return templ_7745c5c3_Err
563+ }
564+ }
565+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "</summary><div class=\"menu-pop\" role=\"group\" aria-label=\"Diff view\">")
566+ if templ_7745c5c3_Err != nil {
567+ return templ_7745c5c3_Err
568+ }
569+ templ_7745c5c3_Err = viewLink(p, "unified", "Unified", "u", p.UnifiedHref).Render(ctx, templ_7745c5c3_Buffer)
570+ if templ_7745c5c3_Err != nil {
571+ return templ_7745c5c3_Err
572+ }
573+ templ_7745c5c3_Err = viewLink(p, "split", "Split", "d", p.SplitHref).Render(ctx, templ_7745c5c3_Buffer)
574+ if templ_7745c5c3_Err != nil {
575+ return templ_7745c5c3_Err
576+ }
577+ templ_7745c5c3_Err = collapseButton().Render(ctx, templ_7745c5c3_Buffer)
578+ if templ_7745c5c3_Err != nil {
579+ return templ_7745c5c3_Err
580+ }
581+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, "</div></details>")
582+ if templ_7745c5c3_Err != nil {
583+ return templ_7745c5c3_Err
584+ }
585+ return nil
586+ })
587+}
588+
589+// wideButton gives the diff the whole width of the screen: the rail goes to
590+// the right edge and the code takes the rest. ermite.js keeps the choice.
591+func wideButton() templ.Component {
592+ return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
593+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
594+ if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
595+ return templ_7745c5c3_CtxErr
596+ }
597+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
598+ if !templ_7745c5c3_IsBuffer {
599+ defer func() {
600+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
601+ if templ_7745c5c3_Err == nil {
602+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
603+ }
604+ }()
605+ }
606+ ctx = templ.InitializeContext(ctx)
607+ templ_7745c5c3_Var24 := templ.GetChildren(ctx)
608+ if templ_7745c5c3_Var24 == nil {
609+ templ_7745c5c3_Var24 = templ.NopComponent
610+ }
611+ ctx = templ.ClearChildren(ctx)
612+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 60, "<button type=\"button\" class=\"btn\" data-js data-fire=\"wide\" data-wide-toggle aria-pressed=\"false\" aria-keyshortcuts=\"w\" title=\"use the whole width of the screen\">Wide<kbd aria-hidden=\"true\">w</kbd></button>")
613+ if templ_7745c5c3_Err != nil {
614+ return templ_7745c5c3_Err
615+ }
616+ return nil
617+ })
618+}
619+
512 // viewLink is a button of the diff tools. It is a link, so that the split620 // viewLink is a button of the diff tools. It is a link, so that the split
513 // layout works without JavaScript; with it, and when both layouts are in the621 // layout works without JavaScript; with it, and when both layouts are in the
514 // page, a click only flips the layout.622 // page, a click only flips the layout.
@@ -528,106 +636,106 @@ func viewLink(p DiffView, view, label, key, href string) templ.Component {
528 }()636 }()
529 }637 }
530 ctx = templ.InitializeContext(ctx)638 ctx = templ.InitializeContext(ctx)
531- templ_7745c5c3_Var21 := templ.GetChildren(ctx)639+ templ_7745c5c3_Var25 := templ.GetChildren(ctx)
532- if templ_7745c5c3_Var21 == nil {640+ if templ_7745c5c3_Var25 == nil {
533- templ_7745c5c3_Var21 = templ.NopComponent641+ templ_7745c5c3_Var25 = templ.NopComponent
534 }642 }
535 ctx = templ.ClearChildren(ctx)643 ctx = templ.ClearChildren(ctx)
536- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, "<a href=\"")644+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "<a href=\"")
537 if templ_7745c5c3_Err != nil {645 if templ_7745c5c3_Err != nil {
538 return templ_7745c5c3_Err646 return templ_7745c5c3_Err
539 }647 }
540- var templ_7745c5c3_Var22 templ.SafeURL648+ var templ_7745c5c3_Var26 templ.SafeURL
541- templ_7745c5c3_Var22, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(href))649+ templ_7745c5c3_Var26, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(href))
542 if templ_7745c5c3_Err != nil {650 if templ_7745c5c3_Err != nil {
543- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 120, Col: 28}651+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 147, Col: 28}
544 }652 }
545- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var22))653+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var26))
546 if templ_7745c5c3_Err != nil {654 if templ_7745c5c3_Err != nil {
547 return templ_7745c5c3_Err655 return templ_7745c5c3_Err
548 }656 }
549- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 56, "\" class=\"btn vbtn\" data-view=\"")657+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, "\" class=\"btn vbtn\" data-view=\"")
550 if templ_7745c5c3_Err != nil {658 if templ_7745c5c3_Err != nil {
551 return templ_7745c5c3_Err659 return templ_7745c5c3_Err
552 }660 }
553- var templ_7745c5c3_Var23 string661+ var templ_7745c5c3_Var27 string
554- templ_7745c5c3_Var23, templ_7745c5c3_Err = templ.ResolveAttributeValue(view)662+ templ_7745c5c3_Var27, templ_7745c5c3_Err = templ.ResolveAttributeValue(view)
555 if templ_7745c5c3_Err != nil {663 if templ_7745c5c3_Err != nil {
556- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 122, Col: 18}664+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 149, Col: 18}
557 }665 }
558- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var23)666+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var27)
559 if templ_7745c5c3_Err != nil {667 if templ_7745c5c3_Err != nil {
560 return templ_7745c5c3_Err668 return templ_7745c5c3_Err
561 }669 }
562- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "\" aria-keyshortcuts=\"")670+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 63, "\" aria-keyshortcuts=\"")
563 if templ_7745c5c3_Err != nil {671 if templ_7745c5c3_Err != nil {
564 return templ_7745c5c3_Err672 return templ_7745c5c3_Err
565 }673 }
566- var templ_7745c5c3_Var24 string674+ var templ_7745c5c3_Var28 string
567- templ_7745c5c3_Var24, templ_7745c5c3_Err = templ.ResolveAttributeValue(key)675+ templ_7745c5c3_Var28, templ_7745c5c3_Err = templ.ResolveAttributeValue(key)
568 if templ_7745c5c3_Err != nil {676 if templ_7745c5c3_Err != nil {
569- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 123, Col: 25}677+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 150, Col: 25}
570 }678 }
571- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var24)679+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var28)
572 if templ_7745c5c3_Err != nil {680 if templ_7745c5c3_Err != nil {
573 return templ_7745c5c3_Err681 return templ_7745c5c3_Err
574 }682 }
575- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "\"")683+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 64, "\"")
576 if templ_7745c5c3_Err != nil {684 if templ_7745c5c3_Err != nil {
577 return templ_7745c5c3_Err685 return templ_7745c5c3_Err
578 }686 }
579 if p.View == view {687 if p.View == view {
580- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, " aria-current=\"true\"")688+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 65, " aria-current=\"true\"")
581 if templ_7745c5c3_Err != nil {689 if templ_7745c5c3_Err != nil {
582 return templ_7745c5c3_Err690 return templ_7745c5c3_Err
583 }691 }
584 }692 }
585 if p.Both {693 if p.Both {
586- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 60, " data-fire=\"")694+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 66, " data-fire=\"")
587 if templ_7745c5c3_Err != nil {695 if templ_7745c5c3_Err != nil {
588 return templ_7745c5c3_Err696 return templ_7745c5c3_Err
589 }697 }
590- var templ_7745c5c3_Var25 string698+ var templ_7745c5c3_Var29 string
591- templ_7745c5c3_Var25, templ_7745c5c3_Err = templ.ResolveAttributeValue(view)699+ templ_7745c5c3_Var29, templ_7745c5c3_Err = templ.ResolveAttributeValue(view)
592 if templ_7745c5c3_Err != nil {700 if templ_7745c5c3_Err != nil {
593- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 128, Col: 19}701+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 155, Col: 19}
594 }702 }
595- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var25)703+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var29)
596 if templ_7745c5c3_Err != nil {704 if templ_7745c5c3_Err != nil {
597 return templ_7745c5c3_Err705 return templ_7745c5c3_Err
598 }706 }
599- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "\" :aria-current=\"q('#diffs').attr['data-diff'] === this.dataset.view ? 'true' : false\"")707+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 67, "\" :aria-current=\"q('#diffs').attr['data-diff'] === this.dataset.view ? 'true' : false\"")
600 if templ_7745c5c3_Err != nil {708 if templ_7745c5c3_Err != nil {
601 return templ_7745c5c3_Err709 return templ_7745c5c3_Err
602 }710 }
603 }711 }
604- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, ">")712+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 68, ">")
605 if templ_7745c5c3_Err != nil {713 if templ_7745c5c3_Err != nil {
606 return templ_7745c5c3_Err714 return templ_7745c5c3_Err
607 }715 }
608- var templ_7745c5c3_Var26 string716+ var templ_7745c5c3_Var30 string
609- templ_7745c5c3_Var26, templ_7745c5c3_Err = templ.JoinStringErrs(label)717+ templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinStringErrs(label)
610 if templ_7745c5c3_Err != nil {718 if templ_7745c5c3_Err != nil {
611- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 131, Col: 9}719+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 158, Col: 9}
612 }720 }
613- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var26))721+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var30))
614 if templ_7745c5c3_Err != nil {722 if templ_7745c5c3_Err != nil {
615 return templ_7745c5c3_Err723 return templ_7745c5c3_Err
616 }724 }
617- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 63, "<kbd aria-hidden=\"true\">")725+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 69, "<kbd aria-hidden=\"true\">")
618 if templ_7745c5c3_Err != nil {726 if templ_7745c5c3_Err != nil {
619 return templ_7745c5c3_Err727 return templ_7745c5c3_Err
620 }728 }
621- var templ_7745c5c3_Var27 string729+ var templ_7745c5c3_Var31 string
622- templ_7745c5c3_Var27, templ_7745c5c3_Err = templ.JoinStringErrs(key)730+ templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.JoinStringErrs(key)
623 if templ_7745c5c3_Err != nil {731 if templ_7745c5c3_Err != nil {
624- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 131, Col: 40}732+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 158, Col: 40}
625 }733 }
626- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var27))734+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var31))
627 if templ_7745c5c3_Err != nil {735 if templ_7745c5c3_Err != nil {
628 return templ_7745c5c3_Err736 return templ_7745c5c3_Err
629 }737 }
630- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 64, "</kbd></a>")738+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, "</kbd></a>")
631 if templ_7745c5c3_Err != nil {739 if templ_7745c5c3_Err != nil {
632 return templ_7745c5c3_Err740 return templ_7745c5c3_Err
633 }741 }
@@ -653,12 +761,12 @@ func collapseButton() templ.Component {
653 }()761 }()
654 }762 }
655 ctx = templ.InitializeContext(ctx)763 ctx = templ.InitializeContext(ctx)
656- templ_7745c5c3_Var28 := templ.GetChildren(ctx)764+ templ_7745c5c3_Var32 := templ.GetChildren(ctx)
657- if templ_7745c5c3_Var28 == nil {765+ if templ_7745c5c3_Var32 == nil {
658- templ_7745c5c3_Var28 = templ.NopComponent766+ templ_7745c5c3_Var32 = templ.NopComponent
659 }767 }
660 ctx = templ.ClearChildren(ctx)768 ctx = templ.ClearChildren(ctx)
661- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 65, "<button type=\"button\" aria-keyshortcuts=\"x\" data-js data-fire=\"collapse\" class=\"btn\"><span hx-live=\"this.textContent = q('[data-file][open]').count || !q('[data-file]').count ? 'Collapse all' : 'Expand all'\">Collapse all</span><kbd aria-hidden=\"true\">x</kbd></button>")769+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 71, "<button type=\"button\" aria-keyshortcuts=\"x\" data-js data-fire=\"collapse\" class=\"btn\"><span hx-live=\"this.textContent = q('[data-file][open]').count || !q('[data-file]').count ? 'Collapse all' : 'Expand all'\">Collapse all</span><kbd aria-hidden=\"true\">x</kbd></button>")
662 if templ_7745c5c3_Err != nil {770 if templ_7745c5c3_Err != nil {
663 return templ_7745c5c3_Err771 return templ_7745c5c3_Err
664 }772 }
@@ -682,83 +790,83 @@ func personView(pr Person) templ.Component {
682 }()790 }()
683 }791 }
684 ctx = templ.InitializeContext(ctx)792 ctx = templ.InitializeContext(ctx)
685- templ_7745c5c3_Var29 := templ.GetChildren(ctx)793+ templ_7745c5c3_Var33 := templ.GetChildren(ctx)
686- if templ_7745c5c3_Var29 == nil {794+ if templ_7745c5c3_Var33 == nil {
687- templ_7745c5c3_Var29 = templ.NopComponent795+ templ_7745c5c3_Var33 = templ.NopComponent
688 }796 }
689 ctx = templ.ClearChildren(ctx)797 ctx = templ.ClearChildren(ctx)
690- var templ_7745c5c3_Var30 string798+ var templ_7745c5c3_Var34 string
691- templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinStringErrs(pr.Name)799+ templ_7745c5c3_Var34, templ_7745c5c3_Err = templ.JoinStringErrs(pr.Name)
692 if templ_7745c5c3_Err != nil {800 if templ_7745c5c3_Err != nil {
693- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 143, Col: 10}801+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 170, Col: 10}
694 }802 }
695- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var30))803+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var34))
696 if templ_7745c5c3_Err != nil {804 if templ_7745c5c3_Err != nil {
697 return templ_7745c5c3_Err805 return templ_7745c5c3_Err
698 }806 }
699- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 66, " ")807+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 72, " ")
700 if templ_7745c5c3_Err != nil {808 if templ_7745c5c3_Err != nil {
701 return templ_7745c5c3_Err809 return templ_7745c5c3_Err
702 }810 }
703 if pr.WhenAt != "" {811 if pr.WhenAt != "" {
704- var templ_7745c5c3_Var31 string812+ var templ_7745c5c3_Var35 string
705- templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")813+ templ_7745c5c3_Var35, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")
706 if templ_7745c5c3_Err != nil {814 if templ_7745c5c3_Err != nil {
707- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 145, Col: 10}815+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 172, Col: 10}
708 }816 }
709- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var31))817+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var35))
710 if templ_7745c5c3_Err != nil {818 if templ_7745c5c3_Err != nil {
711 return templ_7745c5c3_Err819 return templ_7745c5c3_Err
712 }820 }
713- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 67, "<time datetime=\"")821+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 73, "<time datetime=\"")
714 if templ_7745c5c3_Err != nil {822 if templ_7745c5c3_Err != nil {
715 return templ_7745c5c3_Err823 return templ_7745c5c3_Err
716 }824 }
717- var templ_7745c5c3_Var32 string825+ var templ_7745c5c3_Var36 string
718- templ_7745c5c3_Var32, templ_7745c5c3_Err = templ.ResolveAttributeValue(pr.WhenAt)826+ templ_7745c5c3_Var36, templ_7745c5c3_Err = templ.ResolveAttributeValue(pr.WhenAt)
719 if templ_7745c5c3_Err != nil {827 if templ_7745c5c3_Err != nil {
720- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 145, Col: 38}828+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 172, Col: 38}
721 }829 }
722- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var32)830+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var36)
723 if templ_7745c5c3_Err != nil {831 if templ_7745c5c3_Err != nil {
724 return templ_7745c5c3_Err832 return templ_7745c5c3_Err
725 }833 }
726- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 68, "\" title=\"")834+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 74, "\" title=\"")
727 if templ_7745c5c3_Err != nil {835 if templ_7745c5c3_Err != nil {
728 return templ_7745c5c3_Err836 return templ_7745c5c3_Err
729 }837 }
730- var templ_7745c5c3_Var33 string838+ var templ_7745c5c3_Var37 string
731- templ_7745c5c3_Var33, templ_7745c5c3_Err = templ.ResolveAttributeValue(pr.Abs)839+ templ_7745c5c3_Var37, templ_7745c5c3_Err = templ.ResolveAttributeValue(pr.Abs)
732 if templ_7745c5c3_Err != nil {840 if templ_7745c5c3_Err != nil {
733- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 145, Col: 55}841+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 172, Col: 55}
734 }842 }
735- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var33)843+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var37)
736 if templ_7745c5c3_Err != nil {844 if templ_7745c5c3_Err != nil {
737 return templ_7745c5c3_Err845 return templ_7745c5c3_Err
738 }846 }
739- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 69, "\">")847+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 75, "\">")
740 if templ_7745c5c3_Err != nil {848 if templ_7745c5c3_Err != nil {
741 return templ_7745c5c3_Err849 return templ_7745c5c3_Err
742 }850 }
743- var templ_7745c5c3_Var34 string851+ var templ_7745c5c3_Var38 string
744- templ_7745c5c3_Var34, templ_7745c5c3_Err = templ.JoinStringErrs(pr.When)852+ templ_7745c5c3_Var38, templ_7745c5c3_Err = templ.JoinStringErrs(pr.When)
745 if templ_7745c5c3_Err != nil {853 if templ_7745c5c3_Err != nil {
746- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 145, Col: 67}854+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 172, Col: 67}
747 }855 }
748- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var34))856+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var38))
749 if templ_7745c5c3_Err != nil {857 if templ_7745c5c3_Err != nil {
750 return templ_7745c5c3_Err858 return templ_7745c5c3_Err
751 }859 }
752- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, "</time>")860+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 76, "</time>")
753 if templ_7745c5c3_Err != nil {861 if templ_7745c5c3_Err != nil {
754 return templ_7745c5c3_Err862 return templ_7745c5c3_Err
755 }863 }
756- var templ_7745c5c3_Var35 string864+ var templ_7745c5c3_Var39 string
757- templ_7745c5c3_Var35, templ_7745c5c3_Err = templ.JoinStringErrs(" · " + pr.Abs)865+ templ_7745c5c3_Var39, templ_7745c5c3_Err = templ.JoinStringErrs(" · " + pr.Abs)
758 if templ_7745c5c3_Err != nil {866 if templ_7745c5c3_Err != nil {
759- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 145, Col: 93}867+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 172, Col: 93}
760 }868 }
761- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var35))869+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var39))
762 if templ_7745c5c3_Err != nil {870 if templ_7745c5c3_Err != nil {
763 return templ_7745c5c3_Err871 return templ_7745c5c3_Err
764 }872 }
@@ -783,25 +891,25 @@ func commitRail(p CommitPage) templ.Component {
783 }()891 }()
784 }892 }
785 ctx = templ.InitializeContext(ctx)893 ctx = templ.InitializeContext(ctx)
786- templ_7745c5c3_Var36 := templ.GetChildren(ctx)894+ templ_7745c5c3_Var40 := templ.GetChildren(ctx)
787- if templ_7745c5c3_Var36 == nil {895+ if templ_7745c5c3_Var40 == nil {
788- templ_7745c5c3_Var36 = templ.NopComponent896+ templ_7745c5c3_Var40 = templ.NopComponent
789 }897 }
790 ctx = templ.ClearChildren(ctx)898 ctx = templ.ClearChildren(ctx)
791- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 71, "<section aria-labelledby=\"r-files\"><h2 id=\"r-files\">Files <span class=\"count\">")899+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 77, "<section aria-labelledby=\"r-files\"><h2 id=\"r-files\">Files <span class=\"count\">")
792 if templ_7745c5c3_Err != nil {900 if templ_7745c5c3_Err != nil {
793 return templ_7745c5c3_Err901 return templ_7745c5c3_Err
794 }902 }
795- var templ_7745c5c3_Var37 string903+ var templ_7745c5c3_Var41 string
796- templ_7745c5c3_Var37, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))904+ templ_7745c5c3_Var41, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))
797 if templ_7745c5c3_Err != nil {905 if templ_7745c5c3_Err != nil {
798- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 151, Col: 65}906+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 178, Col: 65}
799 }907 }
800- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var37))908+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var41))
801 if templ_7745c5c3_Err != nil {909 if templ_7745c5c3_Err != nil {
802 return templ_7745c5c3_Err910 return templ_7745c5c3_Err
803 }911 }
804- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 72, "</span></h2>")912+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 78, "</span></h2>")
805 if templ_7745c5c3_Err != nil {913 if templ_7745c5c3_Err != nil {
806 return templ_7745c5c3_Err914 return templ_7745c5c3_Err
807 }915 }
@@ -809,7 +917,7 @@ func commitRail(p CommitPage) templ.Component {
809 if templ_7745c5c3_Err != nil {917 if templ_7745c5c3_Err != nil {
810 return templ_7745c5c3_Err918 return templ_7745c5c3_Err
811 }919 }
812- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 73, "</section>")920+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 79, "</section>")
813 if templ_7745c5c3_Err != nil {921 if templ_7745c5c3_Err != nil {
814 return templ_7745c5c3_Err922 return templ_7745c5c3_Err
815 }923 }
@@ -835,236 +943,236 @@ func FileList(files []DiffFile) templ.Component {
835 }()943 }()
836 }944 }
837 ctx = templ.InitializeContext(ctx)945 ctx = templ.InitializeContext(ctx)
838- templ_7745c5c3_Var38 := templ.GetChildren(ctx)946+ templ_7745c5c3_Var42 := templ.GetChildren(ctx)
839- if templ_7745c5c3_Var38 == nil {947+ if templ_7745c5c3_Var42 == nil {
840- templ_7745c5c3_Var38 = templ.NopComponent948+ templ_7745c5c3_Var42 = templ.NopComponent
841 }949 }
842 ctx = templ.ClearChildren(ctx)950 ctx = templ.ClearChildren(ctx)
843 if len(files) > fileFilterMin {951 if len(files) > fileFilterMin {
844- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 74, "<div class=\"ffilter\"><label for=\"files-filter\" class=\"sr\">filter the changed files</label> <input id=\"files-filter\" type=\"search\" placeholder=\"Filter files…\" autocomplete=\"off\" data-pick=\".files > li\" hx-on:input=\"ermite.filter(this)\"></div>")952+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 80, "<div class=\"ffilter\"><label for=\"files-filter\" class=\"sr\">filter the changed files</label> <input id=\"files-filter\" type=\"search\" placeholder=\"Filter files…\" autocomplete=\"off\" data-pick=\".files > li\" hx-on:input=\"ermite.filter(this)\"></div>")
845 if templ_7745c5c3_Err != nil {953 if templ_7745c5c3_Err != nil {
846 return templ_7745c5c3_Err954 return templ_7745c5c3_Err
847 }955 }
848 }956 }
849- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 75, "<ol class=\"files\" aria-label=\"Changed files\">")957+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 81, "<ol class=\"files\" aria-label=\"Changed files\">")
850 if templ_7745c5c3_Err != nil {958 if templ_7745c5c3_Err != nil {
851 return templ_7745c5c3_Err959 return templ_7745c5c3_Err
852 }960 }
853 for _, f := range files {961 for _, f := range files {
854- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 76, "<li><a href=\"")962+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 82, "<li><a href=\"")
855 if templ_7745c5c3_Err != nil {963 if templ_7745c5c3_Err != nil {
856 return templ_7745c5c3_Err964 return templ_7745c5c3_Err
857 }965 }
858- var templ_7745c5c3_Var39 templ.SafeURL966+ var templ_7745c5c3_Var43 templ.SafeURL
859- templ_7745c5c3_Var39, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL("#" + f.ID))967+ templ_7745c5c3_Var43, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL("#" + f.ID))
860 if templ_7745c5c3_Err != nil {968 if templ_7745c5c3_Err != nil {
861- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 176, Col: 37}969+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 203, Col: 37}
862 }970 }
863- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var39))971+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var43))
864 if templ_7745c5c3_Err != nil {972 if templ_7745c5c3_Err != nil {
865 return templ_7745c5c3_Err973 return templ_7745c5c3_Err
866 }974 }
867- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 77, "\" title=\"")975+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 83, "\" title=\"")
868 if templ_7745c5c3_Err != nil {976 if templ_7745c5c3_Err != nil {
869 return templ_7745c5c3_Err977 return templ_7745c5c3_Err
870 }978 }
871- var templ_7745c5c3_Var40 string979+ var templ_7745c5c3_Var44 string
872- templ_7745c5c3_Var40, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Path)980+ templ_7745c5c3_Var44, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Path)
873 if templ_7745c5c3_Err != nil {981 if templ_7745c5c3_Err != nil {
874- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 177, Col: 19}982+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 204, Col: 19}
875 }983 }
876- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var40)984+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var44)
877 if templ_7745c5c3_Err != nil {985 if templ_7745c5c3_Err != nil {
878 return templ_7745c5c3_Err986 return templ_7745c5c3_Err
879 }987 }
880- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 78, "\" hx-on:click=\"(window.ermiteMR?.openFile || ermite.openFile)(this.hash.slice(1))\"><span class=\"st\" data-st=\"")988+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 84, "\" hx-on:click=\"(window.ermiteMR?.openFile || ermite.openFile)(this.hash.slice(1))\"><span class=\"st\" data-st=\"")
881 if templ_7745c5c3_Err != nil {989 if templ_7745c5c3_Err != nil {
882 return templ_7745c5c3_Err990 return templ_7745c5c3_Err
883 }991 }
884- var templ_7745c5c3_Var41 string992+ var templ_7745c5c3_Var45 string
885- templ_7745c5c3_Var41, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Status)993+ templ_7745c5c3_Var45, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Status)
886 if templ_7745c5c3_Err != nil {994 if templ_7745c5c3_Err != nil {
887- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 180, Col: 40}995+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 207, Col: 40}
888 }996 }
889- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var41)997+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var45)
890 if templ_7745c5c3_Err != nil {998 if templ_7745c5c3_Err != nil {
891 return templ_7745c5c3_Err999 return templ_7745c5c3_Err
892 }1000 }
893- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 79, "\" title=\"")1001+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 85, "\" title=\"")
894 if templ_7745c5c3_Err != nil {1002 if templ_7745c5c3_Err != nil {
895 return templ_7745c5c3_Err1003 return templ_7745c5c3_Err
896 }1004 }
897- var templ_7745c5c3_Var42 string1005+ var templ_7745c5c3_Var46 string
898- templ_7745c5c3_Var42, templ_7745c5c3_Err = templ.ResolveAttributeValue(statusName(f.Status))1006+ templ_7745c5c3_Var46, templ_7745c5c3_Err = templ.ResolveAttributeValue(statusName(f.Status))
899 if templ_7745c5c3_Err != nil {1007 if templ_7745c5c3_Err != nil {
900- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 180, Col: 71}1008+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 207, Col: 71}
901 }1009 }
902- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var42)1010+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var46)
903 if templ_7745c5c3_Err != nil {1011 if templ_7745c5c3_Err != nil {
904 return templ_7745c5c3_Err1012 return templ_7745c5c3_Err
905 }1013 }
906- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 80, "\">")1014+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 86, "\">")
907 if templ_7745c5c3_Err != nil {1015 if templ_7745c5c3_Err != nil {
908 return templ_7745c5c3_Err1016 return templ_7745c5c3_Err
909 }1017 }
910- var templ_7745c5c3_Var43 string1018+ var templ_7745c5c3_Var47 string
911- templ_7745c5c3_Var43, templ_7745c5c3_Err = templ.JoinStringErrs(f.Status)1019+ templ_7745c5c3_Var47, templ_7745c5c3_Err = templ.JoinStringErrs(f.Status)
912 if templ_7745c5c3_Err != nil {1020 if templ_7745c5c3_Err != nil {
913- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 180, Col: 84}1021+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 207, Col: 84}
914 }1022 }
915- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var43))1023+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var47))
916 if templ_7745c5c3_Err != nil {1024 if templ_7745c5c3_Err != nil {
917 return templ_7745c5c3_Err1025 return templ_7745c5c3_Err
918 }1026 }
919- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 81, "</span> <span class=\"nm\"><span class=\"p\">")1027+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 87, "</span> <span class=\"nm\"><span class=\"p\">")
920 if templ_7745c5c3_Err != nil {1028 if templ_7745c5c3_Err != nil {
921 return templ_7745c5c3_Err1029 return templ_7745c5c3_Err
922 }1030 }
923- var templ_7745c5c3_Var44 string1031+ var templ_7745c5c3_Var48 string
924- templ_7745c5c3_Var44, templ_7745c5c3_Err = templ.JoinStringErrs(f.Name)1032+ templ_7745c5c3_Var48, templ_7745c5c3_Err = templ.JoinStringErrs(f.Name)
925 if templ_7745c5c3_Err != nil {1033 if templ_7745c5c3_Err != nil {
926- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 181, Col: 46}1034+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 208, Col: 46}
927 }1035 }
928- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var44))1036+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var48))
929 if templ_7745c5c3_Err != nil {1037 if templ_7745c5c3_Err != nil {
930 return templ_7745c5c3_Err1038 return templ_7745c5c3_Err
931 }1039 }
932- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 82, "</span>")1040+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 88, "</span>")
933 if templ_7745c5c3_Err != nil {1041 if templ_7745c5c3_Err != nil {
934 return templ_7745c5c3_Err1042 return templ_7745c5c3_Err
935 }1043 }
936- var templ_7745c5c3_Var45 string1044+ var templ_7745c5c3_Var49 string
937- templ_7745c5c3_Var45, templ_7745c5c3_Err = templ.JoinStringErrs(" ")1045+ templ_7745c5c3_Var49, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
938 if templ_7745c5c3_Err != nil {1046 if templ_7745c5c3_Err != nil {
939- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 181, Col: 60}1047+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 208, Col: 60}
940 }1048 }
941- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var45))1049+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var49))
942 if templ_7745c5c3_Err != nil {1050 if templ_7745c5c3_Err != nil {
943 return templ_7745c5c3_Err1051 return templ_7745c5c3_Err
944 }1052 }
945- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 83, "<span class=\"d\"><bdi>")1053+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 89, "<span class=\"d\"><bdi>")
946 if templ_7745c5c3_Err != nil {1054 if templ_7745c5c3_Err != nil {
947 return templ_7745c5c3_Err1055 return templ_7745c5c3_Err
948 }1056 }
949- var templ_7745c5c3_Var46 string1057+ var templ_7745c5c3_Var50 string
950- templ_7745c5c3_Var46, templ_7745c5c3_Err = templ.JoinStringErrs(f.Dir)1058+ templ_7745c5c3_Var50, templ_7745c5c3_Err = templ.JoinStringErrs(f.Dir)
951 if templ_7745c5c3_Err != nil {1059 if templ_7745c5c3_Err != nil {
952- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 181, Col: 90}1060+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 208, Col: 90}
953 }1061 }
954- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var46))1062+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var50))
955 if templ_7745c5c3_Err != nil {1063 if templ_7745c5c3_Err != nil {
956 return templ_7745c5c3_Err1064 return templ_7745c5c3_Err
957 }1065 }
958- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 84, "</bdi></span></span> ")1066+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 90, "</bdi></span></span> ")
959 if templ_7745c5c3_Err != nil {1067 if templ_7745c5c3_Err != nil {
960 return templ_7745c5c3_Err1068 return templ_7745c5c3_Err
961 }1069 }
962 if f.OpenNotes > 0 {1070 if f.OpenNotes > 0 {
963- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 85, "<span class=\"cn\" title=\"")1071+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 91, "<span class=\"cn\" title=\"")
964 if templ_7745c5c3_Err != nil {1072 if templ_7745c5c3_Err != nil {
965 return templ_7745c5c3_Err1073 return templ_7745c5c3_Err
966 }1074 }
967- var templ_7745c5c3_Var47 string1075+ var templ_7745c5c3_Var51 string
968- templ_7745c5c3_Var47, templ_7745c5c3_Err = templ.ResolveAttributeValue(plural(f.OpenNotes, "open comment", "open comments"))1076+ templ_7745c5c3_Var51, templ_7745c5c3_Err = templ.ResolveAttributeValue(plural(f.OpenNotes, "open comment", "open comments"))
969 if templ_7745c5c3_Err != nil {1077 if templ_7745c5c3_Err != nil {
970- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 183, Col: 83}1078+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 210, Col: 83}
971 }1079 }
972- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var47)1080+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var51)
973 if templ_7745c5c3_Err != nil {1081 if templ_7745c5c3_Err != nil {
974 return templ_7745c5c3_Err1082 return templ_7745c5c3_Err
975 }1083 }
976- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 86, "\">")1084+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 92, "\">")
977 if templ_7745c5c3_Err != nil {1085 if templ_7745c5c3_Err != nil {
978 return templ_7745c5c3_Err1086 return templ_7745c5c3_Err
979 }1087 }
980- var templ_7745c5c3_Var48 string1088+ var templ_7745c5c3_Var52 string
981- templ_7745c5c3_Var48, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.OpenNotes))1089+ templ_7745c5c3_Var52, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.OpenNotes))
982 if templ_7745c5c3_Err != nil {1090 if templ_7745c5c3_Err != nil {
983- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 183, Col: 105}1091+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 210, Col: 105}
984 }1092 }
985- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var48))1093+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var52))
986 if templ_7745c5c3_Err != nil {1094 if templ_7745c5c3_Err != nil {
987 return templ_7745c5c3_Err1095 return templ_7745c5c3_Err
988 }1096 }
989- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 87, "</span> ")1097+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 93, "</span> ")
990 if templ_7745c5c3_Err != nil {1098 if templ_7745c5c3_Err != nil {
991 return templ_7745c5c3_Err1099 return templ_7745c5c3_Err
992 }1100 }
993 } else if f.Notes > 0 {1101 } else if f.Notes > 0 {
994- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 88, "<span class=\"cn done\" title=\"")1102+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 94, "<span class=\"cn done\" title=\"")
995 if templ_7745c5c3_Err != nil {1103 if templ_7745c5c3_Err != nil {
996 return templ_7745c5c3_Err1104 return templ_7745c5c3_Err
997 }1105 }
998- var templ_7745c5c3_Var49 string1106+ var templ_7745c5c3_Var53 string
999- templ_7745c5c3_Var49, templ_7745c5c3_Err = templ.ResolveAttributeValue(plural(f.Notes, "resolved comment", "resolved comments"))1107+ templ_7745c5c3_Var53, templ_7745c5c3_Err = templ.ResolveAttributeValue(plural(f.Notes, "resolved comment", "resolved comments"))
1000 if templ_7745c5c3_Err != nil {1108 if templ_7745c5c3_Err != nil {
1001- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 185, Col: 92}1109+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 212, Col: 92}
1002 }1110 }
1003- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var49)1111+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var53)
1004 if templ_7745c5c3_Err != nil {1112 if templ_7745c5c3_Err != nil {
1005 return templ_7745c5c3_Err1113 return templ_7745c5c3_Err
1006 }1114 }
1007- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 89, "\">")1115+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 95, "\">")
1008 if templ_7745c5c3_Err != nil {1116 if templ_7745c5c3_Err != nil {
1009 return templ_7745c5c3_Err1117 return templ_7745c5c3_Err
1010 }1118 }
1011- var templ_7745c5c3_Var50 string1119+ var templ_7745c5c3_Var54 string
1012- templ_7745c5c3_Var50, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.Notes))1120+ templ_7745c5c3_Var54, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.Notes))
1013 if templ_7745c5c3_Err != nil {1121 if templ_7745c5c3_Err != nil {
1014- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 185, Col: 110}1122+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 212, Col: 110}
1015 }1123 }
1016- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var50))1124+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var54))
1017 if templ_7745c5c3_Err != nil {1125 if templ_7745c5c3_Err != nil {
1018 return templ_7745c5c3_Err1126 return templ_7745c5c3_Err
1019 }1127 }
1020- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 90, "</span> ")1128+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 96, "</span> ")
1021 if templ_7745c5c3_Err != nil {1129 if templ_7745c5c3_Err != nil {
1022 return templ_7745c5c3_Err1130 return templ_7745c5c3_Err
1023 }1131 }
1024 }1132 }
1025 if f.Bin {1133 if f.Bin {
1026- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 91, "<span class=\"n mute\">bin</span>")1134+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 97, "<span class=\"n mute\">bin</span>")
1027 if templ_7745c5c3_Err != nil {1135 if templ_7745c5c3_Err != nil {
1028 return templ_7745c5c3_Err1136 return templ_7745c5c3_Err
1029 }1137 }
1030 } else {1138 } else {
1031- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 92, "<span class=\"n\"><span class=\"plus\">+")1139+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 98, "<span class=\"n\"><span class=\"plus\">+")
1032 if templ_7745c5c3_Err != nil {1140 if templ_7745c5c3_Err != nil {
1033 return templ_7745c5c3_Err1141 return templ_7745c5c3_Err
1034 }1142 }
1035- var templ_7745c5c3_Var51 string1143+ var templ_7745c5c3_Var55 string
1036- templ_7745c5c3_Var51, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.Add))1144+ templ_7745c5c3_Var55, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.Add))
1037 if templ_7745c5c3_Err != nil {1145 if templ_7745c5c3_Err != nil {
1038- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 190, Col: 55}1146+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 217, Col: 55}
1039 }1147 }
1040- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var51))1148+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var55))
1041 if templ_7745c5c3_Err != nil {1149 if templ_7745c5c3_Err != nil {
1042 return templ_7745c5c3_Err1150 return templ_7745c5c3_Err
1043 }1151 }
1044- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 93, "</span> <span class=\"minus\">-")1152+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 99, "</span> <span class=\"minus\">-")
1045 if templ_7745c5c3_Err != nil {1153 if templ_7745c5c3_Err != nil {
1046 return templ_7745c5c3_Err1154 return templ_7745c5c3_Err
1047 }1155 }
1048- var templ_7745c5c3_Var52 string1156+ var templ_7745c5c3_Var56 string
1049- templ_7745c5c3_Var52, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.Del))1157+ templ_7745c5c3_Var56, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.Del))
1050 if templ_7745c5c3_Err != nil {1158 if templ_7745c5c3_Err != nil {
1051- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 190, Col: 99}1159+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 217, Col: 99}
1052 }1160 }
1053- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var52))1161+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var56))
1054 if templ_7745c5c3_Err != nil {1162 if templ_7745c5c3_Err != nil {
1055 return templ_7745c5c3_Err1163 return templ_7745c5c3_Err
1056 }1164 }
1057- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 94, "</span></span>")1165+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 100, "</span></span>")
1058 if templ_7745c5c3_Err != nil {1166 if templ_7745c5c3_Err != nil {
1059 return templ_7745c5c3_Err1167 return templ_7745c5c3_Err
1060 }1168 }
1061 }1169 }
1062- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 95, "</a></li>")1170+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 101, "</a></li>")
1063 if templ_7745c5c3_Err != nil {1171 if templ_7745c5c3_Err != nil {
1064 return templ_7745c5c3_Err1172 return templ_7745c5c3_Err
1065 }1173 }
1066 }1174 }
1067- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 96, "</ol>")1175+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 102, "</ol>")
1068 if templ_7745c5c3_Err != nil {1176 if templ_7745c5c3_Err != nil {
1069 return templ_7745c5c3_Err1177 return templ_7745c5c3_Err
1070 }1178 }
@@ -1092,270 +1200,270 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
1092 }()1200 }()
1093 }1201 }
1094 ctx = templ.InitializeContext(ctx)1202 ctx = templ.InitializeContext(ctx)
1095- templ_7745c5c3_Var53 := templ.GetChildren(ctx)1203+ templ_7745c5c3_Var57 := templ.GetChildren(ctx)
1096- if templ_7745c5c3_Var53 == nil {1204+ if templ_7745c5c3_Var57 == nil {
1097- templ_7745c5c3_Var53 = templ.NopComponent1205+ templ_7745c5c3_Var57 = templ.NopComponent
1098 }1206 }
1099 ctx = templ.ClearChildren(ctx)1207 ctx = templ.ClearChildren(ctx)
1100- var templ_7745c5c3_Var54 = []any{"dfile", "lnw-" + itoa(f.Digits)}1208+ var templ_7745c5c3_Var58 = []any{"dfile", "lnw-" + itoa(f.Digits)}
1101- templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var54...)1209+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var58...)
1102 if templ_7745c5c3_Err != nil {1210 if templ_7745c5c3_Err != nil {
1103 return templ_7745c5c3_Err1211 return templ_7745c5c3_Err
1104 }1212 }
1105- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 97, "<details class=\"")1213+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 103, "<details class=\"")
1106 if templ_7745c5c3_Err != nil {1214 if templ_7745c5c3_Err != nil {
1107 return templ_7745c5c3_Err1215 return templ_7745c5c3_Err
1108 }1216 }
1109- var templ_7745c5c3_Var55 string1217+ var templ_7745c5c3_Var59 string
1110- templ_7745c5c3_Var55, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var54).String())1218+ templ_7745c5c3_Var59, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var58).String())
1111 if templ_7745c5c3_Err != nil {1219 if templ_7745c5c3_Err != nil {
1112 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}1220 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}
1113 }1221 }
1114- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var55)1222+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var59)
1115 if templ_7745c5c3_Err != nil {1223 if templ_7745c5c3_Err != nil {
1116 return templ_7745c5c3_Err1224 return templ_7745c5c3_Err
1117 }1225 }
1118- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 98, "\" id=\"")1226+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 104, "\" id=\"")
1119 if templ_7745c5c3_Err != nil {1227 if templ_7745c5c3_Err != nil {
1120 return templ_7745c5c3_Err1228 return templ_7745c5c3_Err
1121 }1229 }
1122- var templ_7745c5c3_Var56 string1230+ var templ_7745c5c3_Var60 string
1123- templ_7745c5c3_Var56, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.ID)1231+ templ_7745c5c3_Var60, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.ID)
1124 if templ_7745c5c3_Err != nil {1232 if templ_7745c5c3_Err != nil {
1125- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 205, Col: 11}1233+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 232, Col: 11}
1126 }1234 }
1127- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var56)1235+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var60)
1128 if templ_7745c5c3_Err != nil {1236 if templ_7745c5c3_Err != nil {
1129 return templ_7745c5c3_Err1237 return templ_7745c5c3_Err
1130 }1238 }
1131- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 99, "\" data-file")1239+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 105, "\" data-file")
1132 if templ_7745c5c3_Err != nil {1240 if templ_7745c5c3_Err != nil {
1133 return templ_7745c5c3_Err1241 return templ_7745c5c3_Err
1134 }1242 }
1135 if f.Open {1243 if f.Open {
1136- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 100, " open")1244+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 106, " open")
1137 if templ_7745c5c3_Err != nil {1245 if templ_7745c5c3_Err != nil {
1138 return templ_7745c5c3_Err1246 return templ_7745c5c3_Err
1139 }1247 }
1140 }1248 }
1141- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 101, "><summary><span class=\"st\">")1249+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 107, "><summary><span class=\"st\">")
1142 if templ_7745c5c3_Err != nil {1250 if templ_7745c5c3_Err != nil {
1143 return templ_7745c5c3_Err1251 return templ_7745c5c3_Err
1144 }1252 }
1145- var templ_7745c5c3_Var57 string1253+ var templ_7745c5c3_Var61 string
1146- templ_7745c5c3_Var57, templ_7745c5c3_Err = templ.JoinStringErrs(f.Status)1254+ templ_7745c5c3_Var61, templ_7745c5c3_Err = templ.JoinStringErrs(f.Status)
1147 if templ_7745c5c3_Err != nil {1255 if templ_7745c5c3_Err != nil {
1148- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 212, Col: 30}1256+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 239, Col: 30}
1149 }1257 }
1150- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var57))1258+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var61))
1151 if templ_7745c5c3_Err != nil {1259 if templ_7745c5c3_Err != nil {
1152 return templ_7745c5c3_Err1260 return templ_7745c5c3_Err
1153 }1261 }
1154- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 102, "</span>")1262+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 108, "</span>")
1155 if templ_7745c5c3_Err != nil {1263 if templ_7745c5c3_Err != nil {
1156 return templ_7745c5c3_Err1264 return templ_7745c5c3_Err
1157 }1265 }
1158- var templ_7745c5c3_Var58 string1266+ var templ_7745c5c3_Var62 string
1159- templ_7745c5c3_Var58, templ_7745c5c3_Err = templ.JoinStringErrs(" ")1267+ templ_7745c5c3_Var62, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
1160 if templ_7745c5c3_Err != nil {1268 if templ_7745c5c3_Err != nil {
1161- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 212, Col: 44}1269+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 239, Col: 44}
1162 }1270 }
1163- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var58))1271+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var62))
1164 if templ_7745c5c3_Err != nil {1272 if templ_7745c5c3_Err != nil {
1165 return templ_7745c5c3_Err1273 return templ_7745c5c3_Err
1166 }1274 }
1167- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 103, "<span class=\"p\">")1275+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 109, "<span class=\"p\">")
1168 if templ_7745c5c3_Err != nil {1276 if templ_7745c5c3_Err != nil {
1169 return templ_7745c5c3_Err1277 return templ_7745c5c3_Err
1170 }1278 }
1171- var templ_7745c5c3_Var59 string1279+ var templ_7745c5c3_Var63 string
1172- templ_7745c5c3_Var59, templ_7745c5c3_Err = templ.JoinStringErrs(f.Path)1280+ templ_7745c5c3_Var63, templ_7745c5c3_Err = templ.JoinStringErrs(f.Path)
1173 if templ_7745c5c3_Err != nil {1281 if templ_7745c5c3_Err != nil {
1174- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 212, Col: 70}1282+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 239, Col: 70}
1175 }1283 }
1176- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var59))1284+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var63))
1177 if templ_7745c5c3_Err != nil {1285 if templ_7745c5c3_Err != nil {
1178 return templ_7745c5c3_Err1286 return templ_7745c5c3_Err
1179 }1287 }
1180- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 104, "</span>")1288+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 110, "</span>")
1181 if templ_7745c5c3_Err != nil {1289 if templ_7745c5c3_Err != nil {
1182 return templ_7745c5c3_Err1290 return templ_7745c5c3_Err
1183 }1291 }
1184- var templ_7745c5c3_Var60 string1292+ var templ_7745c5c3_Var64 string
1185- templ_7745c5c3_Var60, templ_7745c5c3_Err = templ.JoinStringErrs(" ")1293+ templ_7745c5c3_Var64, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
1186 if templ_7745c5c3_Err != nil {1294 if templ_7745c5c3_Err != nil {
1187- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 212, Col: 84}1295+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 239, Col: 84}
1188 }1296 }
1189- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var60))1297+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var64))
1190 if templ_7745c5c3_Err != nil {1298 if templ_7745c5c3_Err != nil {
1191 return templ_7745c5c3_Err1299 return templ_7745c5c3_Err
1192 }1300 }
1193- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 105, "<span class=\"plus\">+")1301+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 111, "<span class=\"plus\">+")
1194 if templ_7745c5c3_Err != nil {1302 if templ_7745c5c3_Err != nil {
1195 return templ_7745c5c3_Err1303 return templ_7745c5c3_Err
1196 }1304 }
1197- var templ_7745c5c3_Var61 string1305+ var templ_7745c5c3_Var65 string
1198- templ_7745c5c3_Var61, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.Add))1306+ templ_7745c5c3_Var65, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.Add))
1199 if templ_7745c5c3_Err != nil {1307 if templ_7745c5c3_Err != nil {
1200- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 212, Col: 119}1308+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 239, Col: 119}
1201 }1309 }
1202- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var61))1310+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var65))
1203 if templ_7745c5c3_Err != nil {1311 if templ_7745c5c3_Err != nil {
1204 return templ_7745c5c3_Err1312 return templ_7745c5c3_Err
1205 }1313 }
1206- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 106, "</span>")1314+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 112, "</span>")
1207 if templ_7745c5c3_Err != nil {1315 if templ_7745c5c3_Err != nil {
1208 return templ_7745c5c3_Err1316 return templ_7745c5c3_Err
1209 }1317 }
1210- var templ_7745c5c3_Var62 string1318+ var templ_7745c5c3_Var66 string
1211- templ_7745c5c3_Var62, templ_7745c5c3_Err = templ.JoinStringErrs(" ")1319+ templ_7745c5c3_Var66, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
1212 if templ_7745c5c3_Err != nil {1320 if templ_7745c5c3_Err != nil {
1213- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 212, Col: 133}1321+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 239, Col: 133}
1214 }1322 }
1215- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var62))1323+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var66))
1216 if templ_7745c5c3_Err != nil {1324 if templ_7745c5c3_Err != nil {
1217 return templ_7745c5c3_Err1325 return templ_7745c5c3_Err
1218 }1326 }
1219- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 107, "<span class=\"minus\">-")1327+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 113, "<span class=\"minus\">-")
1220 if templ_7745c5c3_Err != nil {1328 if templ_7745c5c3_Err != nil {
1221 return templ_7745c5c3_Err1329 return templ_7745c5c3_Err
1222 }1330 }
1223- var templ_7745c5c3_Var63 string1331+ var templ_7745c5c3_Var67 string
1224- templ_7745c5c3_Var63, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.Del))1332+ templ_7745c5c3_Var67, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.Del))
1225 if templ_7745c5c3_Err != nil {1333 if templ_7745c5c3_Err != nil {
1226- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 212, Col: 169}1334+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 239, Col: 169}
1227 }1335 }
1228- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var63))1336+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var67))
1229 if templ_7745c5c3_Err != nil {1337 if templ_7745c5c3_Err != nil {
1230 return templ_7745c5c3_Err1338 return templ_7745c5c3_Err
1231 }1339 }
1232- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 108, "</span> ")1340+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 114, "</span> ")
1233 if templ_7745c5c3_Err != nil {1341 if templ_7745c5c3_Err != nil {
1234 return templ_7745c5c3_Err1342 return templ_7745c5c3_Err
1235 }1343 }
1236 if f.Note != "" {1344 if f.Note != "" {
1237- var templ_7745c5c3_Var64 string1345+ var templ_7745c5c3_Var68 string
1238- templ_7745c5c3_Var64, templ_7745c5c3_Err = templ.JoinStringErrs(" ")1346+ templ_7745c5c3_Var68, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
1239 if templ_7745c5c3_Err != nil {1347 if templ_7745c5c3_Err != nil {
1240- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 214, Col: 9}1348+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 241, Col: 9}
1241 }1349 }
1242- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var64))1350+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var68))
1243 if templ_7745c5c3_Err != nil {1351 if templ_7745c5c3_Err != nil {
1244 return templ_7745c5c3_Err1352 return templ_7745c5c3_Err
1245 }1353 }
1246- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 109, "<span class=\"note\">")1354+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 115, "<span class=\"note\">")
1247 if templ_7745c5c3_Err != nil {1355 if templ_7745c5c3_Err != nil {
1248 return templ_7745c5c3_Err1356 return templ_7745c5c3_Err
1249 }1357 }
1250- var templ_7745c5c3_Var65 string1358+ var templ_7745c5c3_Var69 string
1251- templ_7745c5c3_Var65, templ_7745c5c3_Err = templ.JoinStringErrs(f.Note)1359+ templ_7745c5c3_Var69, templ_7745c5c3_Err = templ.JoinStringErrs(f.Note)
1252 if templ_7745c5c3_Err != nil {1360 if templ_7745c5c3_Err != nil {
1253- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 214, Col: 38}1361+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 241, Col: 38}
1254 }1362 }
1255- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var65))1363+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var69))
1256 if templ_7745c5c3_Err != nil {1364 if templ_7745c5c3_Err != nil {
1257 return templ_7745c5c3_Err1365 return templ_7745c5c3_Err
1258 }1366 }
1259- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 110, "</span>")1367+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 116, "</span>")
1260 if templ_7745c5c3_Err != nil {1368 if templ_7745c5c3_Err != nil {
1261 return templ_7745c5c3_Err1369 return templ_7745c5c3_Err
1262 }1370 }
1263 }1371 }
1264- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 111, "</summary> ")1372+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 117, "</summary> ")
1265 if templ_7745c5c3_Err != nil {1373 if templ_7745c5c3_Err != nil {
1266 return templ_7745c5c3_Err1374 return templ_7745c5c3_Err
1267 }1375 }
1268 if f.Lazy {1376 if f.Lazy {
1269- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 112, " ")1377+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 118, " ")
1270 if templ_7745c5c3_Err != nil {1378 if templ_7745c5c3_Err != nil {
1271 return templ_7745c5c3_Err1379 return templ_7745c5c3_Err
1272 }1380 }
1273- var templ_7745c5c3_Var66 = []any{"dlazy", "dlazy-" + itoa(f.Height)}1381+ var templ_7745c5c3_Var70 = []any{"dlazy", "dlazy-" + itoa(f.Height)}
1274- templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var66...)1382+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var70...)
1275 if templ_7745c5c3_Err != nil {1383 if templ_7745c5c3_Err != nil {
1276 return templ_7745c5c3_Err1384 return templ_7745c5c3_Err
1277 }1385 }
1278- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 113, "<div class=\"")1386+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 119, "<div class=\"")
1279 if templ_7745c5c3_Err != nil {1387 if templ_7745c5c3_Err != nil {
1280 return templ_7745c5c3_Err1388 return templ_7745c5c3_Err
1281 }1389 }
1282- var templ_7745c5c3_Var67 string1390+ var templ_7745c5c3_Var71 string
1283- templ_7745c5c3_Var67, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var66).String())1391+ templ_7745c5c3_Var71, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var70).String())
1284 if templ_7745c5c3_Err != nil {1392 if templ_7745c5c3_Err != nil {
1285 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}1393 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}
1286 }1394 }
1287- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var67)1395+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var71)
1288 if templ_7745c5c3_Err != nil {1396 if templ_7745c5c3_Err != nil {
1289 return templ_7745c5c3_Err1397 return templ_7745c5c3_Err
1290 }1398 }
1291- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 114, "\" data-src=\"")1399+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 120, "\" data-src=\"")
1292 if templ_7745c5c3_Err != nil {1400 if templ_7745c5c3_Err != nil {
1293 return templ_7745c5c3_Err1401 return templ_7745c5c3_Err
1294 }1402 }
1295- var templ_7745c5c3_Var68 string1403+ var templ_7745c5c3_Var72 string
1296- templ_7745c5c3_Var68, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Src)1404+ templ_7745c5c3_Var72, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Src)
1297 if templ_7745c5c3_Err != nil {1405 if templ_7745c5c3_Err != nil {
1298- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 221, Col: 69}1406+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 248, Col: 69}
1299 }1407 }
1300- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var68)1408+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var72)
1301 if templ_7745c5c3_Err != nil {1409 if templ_7745c5c3_Err != nil {
1302 return templ_7745c5c3_Err1410 return templ_7745c5c3_Err
1303 }1411 }
1304- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 115, "\" data-notes=\"")1412+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 121, "\" data-notes=\"")
1305 if templ_7745c5c3_Err != nil {1413 if templ_7745c5c3_Err != nil {
1306 return templ_7745c5c3_Err1414 return templ_7745c5c3_Err
1307 }1415 }
1308- var templ_7745c5c3_Var69 string1416+ var templ_7745c5c3_Var73 string
1309- templ_7745c5c3_Var69, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Comments)1417+ templ_7745c5c3_Var73, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Comments)
1310 if templ_7745c5c3_Err != nil {1418 if templ_7745c5c3_Err != nil {
1311- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 221, Col: 95}1419+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 248, Col: 95}
1312 }1420 }
1313- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var69)1421+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var73)
1314 if templ_7745c5c3_Err != nil {1422 if templ_7745c5c3_Err != nil {
1315 return templ_7745c5c3_Err1423 return templ_7745c5c3_Err
1316 }1424 }
1317- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 116, "\"><a href=\"")1425+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 122, "\"><a href=\"")
1318 if templ_7745c5c3_Err != nil {1426 if templ_7745c5c3_Err != nil {
1319 return templ_7745c5c3_Err1427 return templ_7745c5c3_Err
1320 }1428 }
1321- var templ_7745c5c3_Var70 templ.SafeURL1429+ var templ_7745c5c3_Var74 templ.SafeURL
1322- templ_7745c5c3_Var70, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL("?from=" + itoa(f.From) + "#" + f.ID))1430+ templ_7745c5c3_Var74, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL("?from=" + itoa(f.From) + "#" + f.ID))
1323 if templ_7745c5c3_Err != nil {1431 if templ_7745c5c3_Err != nil {
1324- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 222, Col: 65}1432+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 249, Col: 65}
1325 }1433 }
1326- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var70))1434+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var74))
1327 if templ_7745c5c3_Err != nil {1435 if templ_7745c5c3_Err != nil {
1328 return templ_7745c5c3_Err1436 return templ_7745c5c3_Err
1329 }1437 }
1330- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 117, "\">show this file</a></div>")1438+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 123, "\">show this file</a></div>")
1331 if templ_7745c5c3_Err != nil {1439 if templ_7745c5c3_Err != nil {
1332 return templ_7745c5c3_Err1440 return templ_7745c5c3_Err
1333 }1441 }
1334 } else if len(f.Hunks) > 0 {1442 } else if len(f.Hunks) > 0 {
1335- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 118, "<div class=\"dscroll\">")1443+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 124, "<div class=\"dscroll\">")
1336 if templ_7745c5c3_Err != nil {1444 if templ_7745c5c3_Err != nil {
1337 return templ_7745c5c3_Err1445 return templ_7745c5c3_Err
1338 }1446 }
1339 if p.ShowUnified {1447 if p.ShowUnified {
1340- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 119, "<table class=\"dt uni\" aria-label=\"")1448+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 125, "<table class=\"dt uni\" aria-label=\"")
1341 if templ_7745c5c3_Err != nil {1449 if templ_7745c5c3_Err != nil {
1342 return templ_7745c5c3_Err1450 return templ_7745c5c3_Err
1343 }1451 }
1344- var templ_7745c5c3_Var71 string1452+ var templ_7745c5c3_Var75 string
1345- templ_7745c5c3_Var71, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Path + ", unified")1453+ templ_7745c5c3_Var75, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Path + ", unified")
1346 if templ_7745c5c3_Err != nil {1454 if templ_7745c5c3_Err != nil {
1347- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 227, Col: 60}1455+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 254, Col: 60}
1348 }1456 }
1349- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var71)1457+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var75)
1350 if templ_7745c5c3_Err != nil {1458 if templ_7745c5c3_Err != nil {
1351 return templ_7745c5c3_Err1459 return templ_7745c5c3_Err
1352 }1460 }
1353- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 120, "\">")1461+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 126, "\">")
1354 if templ_7745c5c3_Err != nil {1462 if templ_7745c5c3_Err != nil {
1355 return templ_7745c5c3_Err1463 return templ_7745c5c3_Err
1356 }1464 }
1357 for _, h := range f.Hunks {1465 for _, h := range f.Hunks {
1358- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 121, "<tbody>")1466+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 127, "<tbody>")
1359 if templ_7745c5c3_Err != nil {1467 if templ_7745c5c3_Err != nil {
1360 return templ_7745c5c3_Err1468 return templ_7745c5c3_Err
1361 }1469 }
@@ -1365,43 +1473,43 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
1365 return templ_7745c5c3_Err1473 return templ_7745c5c3_Err
1366 }1474 }
1367 }1475 }
1368- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 122, "<tr class=\"hunk\"><td colspan=\"4\">")1476+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 128, "<tr class=\"hunk\"><td colspan=\"4\">")
1369 if templ_7745c5c3_Err != nil {1477 if templ_7745c5c3_Err != nil {
1370 return templ_7745c5c3_Err1478 return templ_7745c5c3_Err
1371 }1479 }
1372- var templ_7745c5c3_Var72 string1480+ var templ_7745c5c3_Var76 string
1373- templ_7745c5c3_Var72, templ_7745c5c3_Err = templ.JoinStringErrs(h.Header)1481+ templ_7745c5c3_Var76, templ_7745c5c3_Err = templ.JoinStringErrs(h.Header)
1374 if templ_7745c5c3_Err != nil {1482 if templ_7745c5c3_Err != nil {
1375- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 233, Col: 51}1483+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 260, Col: 51}
1376 }1484 }
1377- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var72))1485+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var76))
1378 if templ_7745c5c3_Err != nil {1486 if templ_7745c5c3_Err != nil {
1379 return templ_7745c5c3_Err1487 return templ_7745c5c3_Err
1380 }1488 }
1381- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 123, "</td></tr>")1489+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 129, "</td></tr>")
1382 if templ_7745c5c3_Err != nil {1490 if templ_7745c5c3_Err != nil {
1383 return templ_7745c5c3_Err1491 return templ_7745c5c3_Err
1384 }1492 }
1385 for _, ln := range h.Lines {1493 for _, ln := range h.Lines {
1386- var templ_7745c5c3_Var73 = []any{ln.Kind, templ.KV("sel", ln.Selected)}1494+ var templ_7745c5c3_Var77 = []any{ln.Kind, templ.KV("sel", ln.Selected)}
1387- templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var73...)1495+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var77...)
1388 if templ_7745c5c3_Err != nil {1496 if templ_7745c5c3_Err != nil {
1389 return templ_7745c5c3_Err1497 return templ_7745c5c3_Err
1390 }1498 }
1391- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 124, "<tr class=\"")1499+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 130, "<tr class=\"")
1392 if templ_7745c5c3_Err != nil {1500 if templ_7745c5c3_Err != nil {
1393 return templ_7745c5c3_Err1501 return templ_7745c5c3_Err
1394 }1502 }
1395- var templ_7745c5c3_Var74 string1503+ var templ_7745c5c3_Var78 string
1396- templ_7745c5c3_Var74, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var73).String())1504+ templ_7745c5c3_Var78, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var77).String())
1397 if templ_7745c5c3_Err != nil {1505 if templ_7745c5c3_Err != nil {
1398 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}1506 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}
1399 }1507 }
1400- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var74)1508+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var78)
1401 if templ_7745c5c3_Err != nil {1509 if templ_7745c5c3_Err != nil {
1402 return templ_7745c5c3_Err1510 return templ_7745c5c3_Err
1403 }1511 }
1404- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 125, "\"><td class=\"ln\">")1512+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 131, "\"><td class=\"ln\">")
1405 if templ_7745c5c3_Err != nil {1513 if templ_7745c5c3_Err != nil {
1406 return templ_7745c5c3_Err1514 return templ_7745c5c3_Err
1407 }1515 }
@@ -1409,7 +1517,7 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
1409 if templ_7745c5c3_Err != nil {1517 if templ_7745c5c3_Err != nil {
1410 return templ_7745c5c3_Err1518 return templ_7745c5c3_Err
1411 }1519 }
1412- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 126, "</td><td class=\"ln\">")1520+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 132, "</td><td class=\"ln\">")
1413 if templ_7745c5c3_Err != nil {1521 if templ_7745c5c3_Err != nil {
1414 return templ_7745c5c3_Err1522 return templ_7745c5c3_Err
1415 }1523 }
@@ -1417,20 +1525,20 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
1417 if templ_7745c5c3_Err != nil {1525 if templ_7745c5c3_Err != nil {
1418 return templ_7745c5c3_Err1526 return templ_7745c5c3_Err
1419 }1527 }
1420- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 127, "</td><td class=\"m\">")1528+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 133, "</td><td class=\"m\">")
1421 if templ_7745c5c3_Err != nil {1529 if templ_7745c5c3_Err != nil {
1422 return templ_7745c5c3_Err1530 return templ_7745c5c3_Err
1423 }1531 }
1424- var templ_7745c5c3_Var75 string1532+ var templ_7745c5c3_Var79 string
1425- templ_7745c5c3_Var75, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Mark)1533+ templ_7745c5c3_Var79, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Mark)
1426 if templ_7745c5c3_Err != nil {1534 if templ_7745c5c3_Err != nil {
1427- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 238, Col: 33}1535+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 265, Col: 33}
1428 }1536 }
1429- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var75))1537+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var79))
1430 if templ_7745c5c3_Err != nil {1538 if templ_7745c5c3_Err != nil {
1431 return templ_7745c5c3_Err1539 return templ_7745c5c3_Err
1432 }1540 }
1433- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 128, "</td><td class=\"tx chroma\">")1541+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 134, "</td><td class=\"tx chroma\">")
1434 if templ_7745c5c3_Err != nil {1542 if templ_7745c5c3_Err != nil {
1435 return templ_7745c5c3_Err1543 return templ_7745c5c3_Err
1436 }1544 }
@@ -1438,12 +1546,12 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
1438 if templ_7745c5c3_Err != nil {1546 if templ_7745c5c3_Err != nil {
1439 return templ_7745c5c3_Err1547 return templ_7745c5c3_Err
1440 }1548 }
1441- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 129, "</td></tr>")1549+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 135, "</td></tr>")
1442 if templ_7745c5c3_Err != nil {1550 if templ_7745c5c3_Err != nil {
1443 return templ_7745c5c3_Err1551 return templ_7745c5c3_Err
1444 }1552 }
1445 if len(ln.Notes) > 0 || ln.Form != nil {1553 if len(ln.Notes) > 0 || ln.Form != nil {
1446- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 130, "<tr class=\"fnote\"><td colspan=\"3\"></td><td>")1554+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 136, "<tr class=\"fnote\"><td colspan=\"3\"></td><td>")
1447 if templ_7745c5c3_Err != nil {1555 if templ_7745c5c3_Err != nil {
1448 return templ_7745c5c3_Err1556 return templ_7745c5c3_Err
1449 }1557 }
@@ -1451,19 +1559,19 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
1451 if templ_7745c5c3_Err != nil {1559 if templ_7745c5c3_Err != nil {
1452 return templ_7745c5c3_Err1560 return templ_7745c5c3_Err
1453 }1561 }
1454- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 131, "</td></tr>")1562+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 137, "</td></tr>")
1455 if templ_7745c5c3_Err != nil {1563 if templ_7745c5c3_Err != nil {
1456 return templ_7745c5c3_Err1564 return templ_7745c5c3_Err
1457 }1565 }
1458 }1566 }
1459 }1567 }
1460- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 132, "</tbody> ")1568+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 138, "</tbody> ")
1461 if templ_7745c5c3_Err != nil {1569 if templ_7745c5c3_Err != nil {
1462 return templ_7745c5c3_Err1570 return templ_7745c5c3_Err
1463 }1571 }
1464 }1572 }
1465 if f.Tail != nil {1573 if f.Tail != nil {
1466- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 133, "<tbody>")1574+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 139, "<tbody>")
1467 if templ_7745c5c3_Err != nil {1575 if templ_7745c5c3_Err != nil {
1468 return templ_7745c5c3_Err1576 return templ_7745c5c3_Err
1469 }1577 }
@@ -1471,36 +1579,36 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
1471 if templ_7745c5c3_Err != nil {1579 if templ_7745c5c3_Err != nil {
1472 return templ_7745c5c3_Err1580 return templ_7745c5c3_Err
1473 }1581 }
1474- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 134, "</tbody>")1582+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 140, "</tbody>")
1475 if templ_7745c5c3_Err != nil {1583 if templ_7745c5c3_Err != nil {
1476 return templ_7745c5c3_Err1584 return templ_7745c5c3_Err
1477 }1585 }
1478 }1586 }
1479- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 135, "</table>")1587+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 141, "</table>")
1480 if templ_7745c5c3_Err != nil {1588 if templ_7745c5c3_Err != nil {
1481 return templ_7745c5c3_Err1589 return templ_7745c5c3_Err
1482 }1590 }
1483 }1591 }
1484 if p.ShowSplit {1592 if p.ShowSplit {
1485- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 136, "<table class=\"dt spl\" aria-label=\"")1593+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 142, "<table class=\"dt spl\" aria-label=\"")
1486 if templ_7745c5c3_Err != nil {1594 if templ_7745c5c3_Err != nil {
1487 return templ_7745c5c3_Err1595 return templ_7745c5c3_Err
1488 }1596 }
1489- var templ_7745c5c3_Var76 string1597+ var templ_7745c5c3_Var80 string
1490- templ_7745c5c3_Var76, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Path + ", split")1598+ templ_7745c5c3_Var80, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Path + ", split")
1491 if templ_7745c5c3_Err != nil {1599 if templ_7745c5c3_Err != nil {
1492- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 258, Col: 58}1600+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 285, Col: 58}
1493 }1601 }
1494- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var76)1602+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var80)
1495 if templ_7745c5c3_Err != nil {1603 if templ_7745c5c3_Err != nil {
1496 return templ_7745c5c3_Err1604 return templ_7745c5c3_Err
1497 }1605 }
1498- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 137, "\"><colgroup><col class=\"c-ln\"><col class=\"c-m\"><col><col class=\"c-ln\"><col class=\"c-m\"><col></colgroup> ")1606+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 143, "\"><colgroup><col class=\"c-ln\"><col class=\"c-m\"><col><col class=\"c-ln\"><col class=\"c-m\"><col></colgroup> ")
1499 if templ_7745c5c3_Err != nil {1607 if templ_7745c5c3_Err != nil {
1500 return templ_7745c5c3_Err1608 return templ_7745c5c3_Err
1501 }1609 }
1502 for _, h := range f.Hunks {1610 for _, h := range f.Hunks {
1503- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 138, "<tbody>")1611+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 144, "<tbody>")
1504 if templ_7745c5c3_Err != nil {1612 if templ_7745c5c3_Err != nil {
1505 return templ_7745c5c3_Err1613 return templ_7745c5c3_Err
1506 }1614 }
@@ -1510,25 +1618,25 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
1510 return templ_7745c5c3_Err1618 return templ_7745c5c3_Err
1511 }1619 }
1512 }1620 }
1513- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 139, "<tr class=\"hunk\"><td colspan=\"6\">")1621+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 145, "<tr class=\"hunk\"><td colspan=\"6\">")
1514 if templ_7745c5c3_Err != nil {1622 if templ_7745c5c3_Err != nil {
1515 return templ_7745c5c3_Err1623 return templ_7745c5c3_Err
1516 }1624 }
1517- var templ_7745c5c3_Var77 string1625+ var templ_7745c5c3_Var81 string
1518- templ_7745c5c3_Var77, templ_7745c5c3_Err = templ.JoinStringErrs(h.Header)1626+ templ_7745c5c3_Var81, templ_7745c5c3_Err = templ.JoinStringErrs(h.Header)
1519 if templ_7745c5c3_Err != nil {1627 if templ_7745c5c3_Err != nil {
1520- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 265, Col: 51}1628+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 292, Col: 51}
1521 }1629 }
1522- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var77))1630+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var81))
1523 if templ_7745c5c3_Err != nil {1631 if templ_7745c5c3_Err != nil {
1524 return templ_7745c5c3_Err1632 return templ_7745c5c3_Err
1525 }1633 }
1526- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 140, "</td></tr>")1634+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 146, "</td></tr>")
1527 if templ_7745c5c3_Err != nil {1635 if templ_7745c5c3_Err != nil {
1528 return templ_7745c5c3_Err1636 return templ_7745c5c3_Err
1529 }1637 }
1530 for _, row := range h.Split {1638 for _, row := range h.Split {
1531- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 141, "<tr>")1639+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 147, "<tr>")
1532 if templ_7745c5c3_Err != nil {1640 if templ_7745c5c3_Err != nil {
1533 return templ_7745c5c3_Err1641 return templ_7745c5c3_Err
1534 }1642 }
@@ -1540,12 +1648,12 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
1540 if templ_7745c5c3_Err != nil {1648 if templ_7745c5c3_Err != nil {
1541 return templ_7745c5c3_Err1649 return templ_7745c5c3_Err
1542 }1650 }
1543- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 142, "</tr>")1651+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 148, "</tr>")
1544 if templ_7745c5c3_Err != nil {1652 if templ_7745c5c3_Err != nil {
1545 return templ_7745c5c3_Err1653 return templ_7745c5c3_Err
1546 }1654 }
1547 if notes, form := row.Notes(), row.Form(); len(notes) > 0 || form != nil {1655 if notes, form := row.Notes(), row.Form(); len(notes) > 0 || form != nil {
1548- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 143, "<tr class=\"fnote\"><td colspan=\"6\">")1656+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 149, "<tr class=\"fnote\"><td colspan=\"6\">")
1549 if templ_7745c5c3_Err != nil {1657 if templ_7745c5c3_Err != nil {
1550 return templ_7745c5c3_Err1658 return templ_7745c5c3_Err
1551 }1659 }
@@ -1553,19 +1661,19 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
1553 if templ_7745c5c3_Err != nil {1661 if templ_7745c5c3_Err != nil {
1554 return templ_7745c5c3_Err1662 return templ_7745c5c3_Err
1555 }1663 }
1556- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 144, "</td></tr>")1664+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 150, "</td></tr>")
1557 if templ_7745c5c3_Err != nil {1665 if templ_7745c5c3_Err != nil {
1558 return templ_7745c5c3_Err1666 return templ_7745c5c3_Err
1559 }1667 }
1560 }1668 }
1561 }1669 }
1562- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 145, "</tbody> ")1670+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 151, "</tbody> ")
1563 if templ_7745c5c3_Err != nil {1671 if templ_7745c5c3_Err != nil {
1564 return templ_7745c5c3_Err1672 return templ_7745c5c3_Err
1565 }1673 }
1566 }1674 }
1567 if f.Tail != nil {1675 if f.Tail != nil {
1568- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 146, "<tbody>")1676+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 152, "<tbody>")
1569 if templ_7745c5c3_Err != nil {1677 if templ_7745c5c3_Err != nil {
1570 return templ_7745c5c3_Err1678 return templ_7745c5c3_Err
1571 }1679 }
@@ -1573,48 +1681,48 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
1573 if templ_7745c5c3_Err != nil {1681 if templ_7745c5c3_Err != nil {
1574 return templ_7745c5c3_Err1682 return templ_7745c5c3_Err
1575 }1683 }
1576- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 147, "</tbody>")1684+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 153, "</tbody>")
1577 if templ_7745c5c3_Err != nil {1685 if templ_7745c5c3_Err != nil {
1578 return templ_7745c5c3_Err1686 return templ_7745c5c3_Err
1579 }1687 }
1580 }1688 }
1581- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 148, "</table>")1689+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 154, "</table>")
1582 if templ_7745c5c3_Err != nil {1690 if templ_7745c5c3_Err != nil {
1583 return templ_7745c5c3_Err1691 return templ_7745c5c3_Err
1584 }1692 }
1585 }1693 }
1586- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 149, "</div>")1694+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 155, "</div>")
1587 if templ_7745c5c3_Err != nil {1695 if templ_7745c5c3_Err != nil {
1588 return templ_7745c5c3_Err1696 return templ_7745c5c3_Err
1589 }1697 }
1590 } else {1698 } else {
1591- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 150, "<p class=\"note pad\">")1699+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 156, "<p class=\"note pad\">")
1592 if templ_7745c5c3_Err != nil {1700 if templ_7745c5c3_Err != nil {
1593 return templ_7745c5c3_Err1701 return templ_7745c5c3_Err
1594 }1702 }
1595 if f.Note != "" {1703 if f.Note != "" {
1596- var templ_7745c5c3_Var78 string1704+ var templ_7745c5c3_Var82 string
1597- templ_7745c5c3_Var78, templ_7745c5c3_Err = templ.JoinStringErrs(f.Note)1705+ templ_7745c5c3_Var82, templ_7745c5c3_Err = templ.JoinStringErrs(f.Note)
1598 if templ_7745c5c3_Err != nil {1706 if templ_7745c5c3_Err != nil {
1599- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 290, Col: 13}1707+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 317, Col: 13}
1600 }1708 }
1601- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var78))1709+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var82))
1602 if templ_7745c5c3_Err != nil {1710 if templ_7745c5c3_Err != nil {
1603 return templ_7745c5c3_Err1711 return templ_7745c5c3_Err
1604 }1712 }
1605 } else {1713 } else {
1606- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 151, "no textual change.")1714+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 157, "no textual change.")
1607 if templ_7745c5c3_Err != nil {1715 if templ_7745c5c3_Err != nil {
1608 return templ_7745c5c3_Err1716 return templ_7745c5c3_Err
1609 }1717 }
1610 }1718 }
1611- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 152, "</p>")1719+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 158, "</p>")
1612 if templ_7745c5c3_Err != nil {1720 if templ_7745c5c3_Err != nil {
1613 return templ_7745c5c3_Err1721 return templ_7745c5c3_Err
1614 }1722 }
1615 }1723 }
1616 if len(f.Loose) > 0 {1724 if len(f.Loose) > 0 {
1617- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 153, "<div class=\"dloose\">")1725+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 159, "<div class=\"dloose\">")
1618 if templ_7745c5c3_Err != nil {1726 if templ_7745c5c3_Err != nil {
1619 return templ_7745c5c3_Err1727 return templ_7745c5c3_Err
1620 }1728 }
@@ -1624,12 +1732,12 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
1624 return templ_7745c5c3_Err1732 return templ_7745c5c3_Err
1625 }1733 }
1626 }1734 }
1627- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 154, "</div>")1735+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 160, "</div>")
1628 if templ_7745c5c3_Err != nil {1736 if templ_7745c5c3_Err != nil {
1629 return templ_7745c5c3_Err1737 return templ_7745c5c3_Err
1630 }1738 }
1631 }1739 }
1632- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 155, "</details>")1740+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 161, "</details>")
1633 if templ_7745c5c3_Err != nil {1741 if templ_7745c5c3_Err != nil {
1634 return templ_7745c5c3_Err1742 return templ_7745c5c3_Err
1635 }1743 }
@@ -1655,9 +1763,9 @@ func MRFiles(p MRFilesPage) templ.Component {
1655 }()1763 }()
1656 }1764 }
1657 ctx = templ.InitializeContext(ctx)1765 ctx = templ.InitializeContext(ctx)
1658- templ_7745c5c3_Var79 := templ.GetChildren(ctx)1766+ templ_7745c5c3_Var83 := templ.GetChildren(ctx)
1659- if templ_7745c5c3_Var79 == nil {1767+ if templ_7745c5c3_Var83 == nil {
1660- templ_7745c5c3_Var79 = templ.NopComponent1768+ templ_7745c5c3_Var83 = templ.NopComponent
1661 }1769 }
1662 ctx = templ.ClearChildren(ctx)1770 ctx = templ.ClearChildren(ctx)
1663 for _, f := range p.Files {1771 for _, f := range p.Files {
@@ -1688,12 +1796,12 @@ func MRFilesMoved() templ.Component {
1688 }()1796 }()
1689 }1797 }
1690 ctx = templ.InitializeContext(ctx)1798 ctx = templ.InitializeContext(ctx)
1691- templ_7745c5c3_Var80 := templ.GetChildren(ctx)1799+ templ_7745c5c3_Var84 := templ.GetChildren(ctx)
1692- if templ_7745c5c3_Var80 == nil {1800+ if templ_7745c5c3_Var84 == nil {
1693- templ_7745c5c3_Var80 = templ.NopComponent1801+ templ_7745c5c3_Var84 = templ.NopComponent
1694 }1802 }
1695 ctx = templ.ClearChildren(ctx)1803 ctx = templ.ClearChildren(ctx)
1696- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 156, "<p class=\"notice\" data-moved>this merge request changed since the page was loaded — <a href=\"\">reload</a></p>")1804+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 162, "<p class=\"notice\" data-moved>this merge request changed since the page was loaded — <a href=\"\">reload</a></p>")
1697 if templ_7745c5c3_Err != nil {1805 if templ_7745c5c3_Err != nil {
1698 return templ_7745c5c3_Err1806 return templ_7745c5c3_Err
1699 }1807 }
@@ -1720,64 +1828,64 @@ func gapRow(g DiffGap, cols int) templ.Component {
1720 }()1828 }()
1721 }1829 }
1722 ctx = templ.InitializeContext(ctx)1830 ctx = templ.InitializeContext(ctx)
1723- templ_7745c5c3_Var81 := templ.GetChildren(ctx)1831+ templ_7745c5c3_Var85 := templ.GetChildren(ctx)
1724- if templ_7745c5c3_Var81 == nil {1832+ if templ_7745c5c3_Var85 == nil {
1725- templ_7745c5c3_Var81 = templ.NopComponent1833+ templ_7745c5c3_Var85 = templ.NopComponent
1726 }1834 }
1727 ctx = templ.ClearChildren(ctx)1835 ctx = templ.ClearChildren(ctx)
1728- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 157, "<tr class=\"gap\" data-js data-gap=\"")1836+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 163, "<tr class=\"gap\" data-js data-gap=\"")
1729 if templ_7745c5c3_Err != nil {1837 if templ_7745c5c3_Err != nil {
1730 return templ_7745c5c3_Err1838 return templ_7745c5c3_Err
1731 }1839 }
1732- var templ_7745c5c3_Var82 string1840+ var templ_7745c5c3_Var86 string
1733- templ_7745c5c3_Var82, templ_7745c5c3_Err = templ.ResolveAttributeValue(g.Key)1841+ templ_7745c5c3_Var86, templ_7745c5c3_Err = templ.ResolveAttributeValue(g.Key)
1734 if templ_7745c5c3_Err != nil {1842 if templ_7745c5c3_Err != nil {
1735- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 324, Col: 41}1843+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 351, Col: 41}
1736 }1844 }
1737- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var82)1845+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var86)
1738 if templ_7745c5c3_Err != nil {1846 if templ_7745c5c3_Err != nil {
1739 return templ_7745c5c3_Err1847 return templ_7745c5c3_Err
1740 }1848 }
1741- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 158, "\"><td colspan=\"")1849+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 164, "\"><td colspan=\"")
1742 if templ_7745c5c3_Err != nil {1850 if templ_7745c5c3_Err != nil {
1743 return templ_7745c5c3_Err1851 return templ_7745c5c3_Err
1744 }1852 }
1745- var templ_7745c5c3_Var83 string1853+ var templ_7745c5c3_Var87 string
1746- templ_7745c5c3_Var83, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(cols))1854+ templ_7745c5c3_Var87, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(cols))
1747 if templ_7745c5c3_Err != nil {1855 if templ_7745c5c3_Err != nil {
1748- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 325, Col: 26}1856+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 352, Col: 26}
1749 }1857 }
1750- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var83)1858+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var87)
1751 if templ_7745c5c3_Err != nil {1859 if templ_7745c5c3_Err != nil {
1752 return templ_7745c5c3_Err1860 return templ_7745c5c3_Err
1753 }1861 }
1754- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 159, "\"><button type=\"button\" data-src=\"")1862+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 165, "\"><button type=\"button\" data-src=\"")
1755 if templ_7745c5c3_Err != nil {1863 if templ_7745c5c3_Err != nil {
1756 return templ_7745c5c3_Err1864 return templ_7745c5c3_Err
1757 }1865 }
1758- var templ_7745c5c3_Var84 string1866+ var templ_7745c5c3_Var88 string
1759- templ_7745c5c3_Var84, templ_7745c5c3_Err = templ.ResolveAttributeValue(g.Src)1867+ templ_7745c5c3_Var88, templ_7745c5c3_Err = templ.ResolveAttributeValue(g.Src)
1760 if templ_7745c5c3_Err != nil {1868 if templ_7745c5c3_Err != nil {
1761- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 326, Col: 41}1869+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 353, Col: 41}
1762 }1870 }
1763- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var84)1871+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var88)
1764 if templ_7745c5c3_Err != nil {1872 if templ_7745c5c3_Err != nil {
1765 return templ_7745c5c3_Err1873 return templ_7745c5c3_Err
1766 }1874 }
1767- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 160, "\"><span aria-hidden=\"true\">⋯</span> ")1875+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 166, "\"><span aria-hidden=\"true\">⋯</span> ")
1768 if templ_7745c5c3_Err != nil {1876 if templ_7745c5c3_Err != nil {
1769 return templ_7745c5c3_Err1877 return templ_7745c5c3_Err
1770 }1878 }
1771- var templ_7745c5c3_Var85 string1879+ var templ_7745c5c3_Var89 string
1772- templ_7745c5c3_Var85, templ_7745c5c3_Err = templ.JoinStringErrs(g.Label())1880+ templ_7745c5c3_Var89, templ_7745c5c3_Err = templ.JoinStringErrs(g.Label())
1773 if templ_7745c5c3_Err != nil {1881 if templ_7745c5c3_Err != nil {
1774- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 327, Col: 51}1882+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 354, Col: 51}
1775 }1883 }
1776- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var85))1884+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var89))
1777 if templ_7745c5c3_Err != nil {1885 if templ_7745c5c3_Err != nil {
1778 return templ_7745c5c3_Err1886 return templ_7745c5c3_Err
1779 }1887 }
1780- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 161, "</button></td></tr>")1888+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 167, "</button></td></tr>")
1781 if templ_7745c5c3_Err != nil {1889 if templ_7745c5c3_Err != nil {
1782 return templ_7745c5c3_Err1890 return templ_7745c5c3_Err
1783 }1891 }
@@ -1803,56 +1911,56 @@ func DiffContext(c ContextRows) templ.Component {
1803 }()1911 }()
1804 }1912 }
1805 ctx = templ.InitializeContext(ctx)1913 ctx = templ.InitializeContext(ctx)
1806- templ_7745c5c3_Var86 := templ.GetChildren(ctx)1914+ templ_7745c5c3_Var90 := templ.GetChildren(ctx)
1807- if templ_7745c5c3_Var86 == nil {1915+ if templ_7745c5c3_Var90 == nil {
1808- templ_7745c5c3_Var86 = templ.NopComponent1916+ templ_7745c5c3_Var90 = templ.NopComponent
1809 }1917 }
1810 ctx = templ.ClearChildren(ctx)1918 ctx = templ.ClearChildren(ctx)
1811- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 162, "<table><tbody data-for=\"uni\">")1919+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 168, "<table><tbody data-for=\"uni\">")
1812 if templ_7745c5c3_Err != nil {1920 if templ_7745c5c3_Err != nil {
1813 return templ_7745c5c3_Err1921 return templ_7745c5c3_Err
1814 }1922 }
1815 for _, ln := range c.Lines {1923 for _, ln := range c.Lines {
1816- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 163, "<tr class=\"ctx\"><td class=\"ln\">")1924+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 169, "<tr class=\"ctx\"><td class=\"ln\">")
1817 if templ_7745c5c3_Err != nil {1925 if templ_7745c5c3_Err != nil {
1818 return templ_7745c5c3_Err1926 return templ_7745c5c3_Err
1819 }1927 }
1820- var templ_7745c5c3_Var87 string1928+ var templ_7745c5c3_Var91 string
1821- templ_7745c5c3_Var87, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Old)1929+ templ_7745c5c3_Var91, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Old)
1822 if templ_7745c5c3_Err != nil {1930 if templ_7745c5c3_Err != nil {
1823- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 340, Col: 28}1931+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 367, Col: 28}
1824 }1932 }
1825- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var87))1933+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var91))
1826 if templ_7745c5c3_Err != nil {1934 if templ_7745c5c3_Err != nil {
1827 return templ_7745c5c3_Err1935 return templ_7745c5c3_Err
1828 }1936 }
1829- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 164, "</td><td class=\"ln\">")1937+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 170, "</td><td class=\"ln\">")
1830 if templ_7745c5c3_Err != nil {1938 if templ_7745c5c3_Err != nil {
1831 return templ_7745c5c3_Err1939 return templ_7745c5c3_Err
1832 }1940 }
1833- var templ_7745c5c3_Var88 string1941+ var templ_7745c5c3_Var92 string
1834- templ_7745c5c3_Var88, templ_7745c5c3_Err = templ.JoinStringErrs(ln.New)1942+ templ_7745c5c3_Var92, templ_7745c5c3_Err = templ.JoinStringErrs(ln.New)
1835 if templ_7745c5c3_Err != nil {1943 if templ_7745c5c3_Err != nil {
1836- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 341, Col: 28}1944+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 368, Col: 28}
1837 }1945 }
1838- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var88))1946+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var92))
1839 if templ_7745c5c3_Err != nil {1947 if templ_7745c5c3_Err != nil {
1840 return templ_7745c5c3_Err1948 return templ_7745c5c3_Err
1841 }1949 }
1842- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 165, "</td><td class=\"m\">")1950+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 171, "</td><td class=\"m\">")
1843 if templ_7745c5c3_Err != nil {1951 if templ_7745c5c3_Err != nil {
1844 return templ_7745c5c3_Err1952 return templ_7745c5c3_Err
1845 }1953 }
1846- var templ_7745c5c3_Var89 string1954+ var templ_7745c5c3_Var93 string
1847- templ_7745c5c3_Var89, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Mark)1955+ templ_7745c5c3_Var93, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Mark)
1848 if templ_7745c5c3_Err != nil {1956 if templ_7745c5c3_Err != nil {
1849- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 342, Col: 28}1957+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 369, Col: 28}
1850 }1958 }
1851- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var89))1959+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var93))
1852 if templ_7745c5c3_Err != nil {1960 if templ_7745c5c3_Err != nil {
1853 return templ_7745c5c3_Err1961 return templ_7745c5c3_Err
1854 }1962 }
1855- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 166, "</td><td class=\"tx chroma\">")1963+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 172, "</td><td class=\"tx chroma\">")
1856 if templ_7745c5c3_Err != nil {1964 if templ_7745c5c3_Err != nil {
1857 return templ_7745c5c3_Err1965 return templ_7745c5c3_Err
1858 }1966 }
@@ -1860,7 +1968,7 @@ func DiffContext(c ContextRows) templ.Component {
1860 if templ_7745c5c3_Err != nil {1968 if templ_7745c5c3_Err != nil {
1861 return templ_7745c5c3_Err1969 return templ_7745c5c3_Err
1862 }1970 }
1863- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 167, "</td></tr>")1971+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 173, "</td></tr>")
1864 if templ_7745c5c3_Err != nil {1972 if templ_7745c5c3_Err != nil {
1865 return templ_7745c5c3_Err1973 return templ_7745c5c3_Err
1866 }1974 }
@@ -1871,12 +1979,12 @@ func DiffContext(c ContextRows) templ.Component {
1871 return templ_7745c5c3_Err1979 return templ_7745c5c3_Err
1872 }1980 }
1873 }1981 }
1874- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 168, "</tbody> <tbody data-for=\"spl\">")1982+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 174, "</tbody> <tbody data-for=\"spl\">")
1875 if templ_7745c5c3_Err != nil {1983 if templ_7745c5c3_Err != nil {
1876 return templ_7745c5c3_Err1984 return templ_7745c5c3_Err
1877 }1985 }
1878 for i := range c.Lines {1986 for i := range c.Lines {
1879- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 169, "<tr>")1987+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 175, "<tr>")
1880 if templ_7745c5c3_Err != nil {1988 if templ_7745c5c3_Err != nil {
1881 return templ_7745c5c3_Err1989 return templ_7745c5c3_Err
1882 }1990 }
@@ -1888,7 +1996,7 @@ func DiffContext(c ContextRows) templ.Component {
1888 if templ_7745c5c3_Err != nil {1996 if templ_7745c5c3_Err != nil {
1889 return templ_7745c5c3_Err1997 return templ_7745c5c3_Err
1890 }1998 }
1891- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 170, "</tr>")1999+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 176, "</tr>")
1892 if templ_7745c5c3_Err != nil {2000 if templ_7745c5c3_Err != nil {
1893 return templ_7745c5c3_Err2001 return templ_7745c5c3_Err
1894 }2002 }
@@ -1899,7 +2007,7 @@ func DiffContext(c ContextRows) templ.Component {
1899 return templ_7745c5c3_Err2007 return templ_7745c5c3_Err
1900 }2008 }
1901 }2009 }
1902- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 171, "</tbody></table>")2010+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 177, "</tbody></table>")
1903 if templ_7745c5c3_Err != nil {2011 if templ_7745c5c3_Err != nil {
1904 return templ_7745c5c3_Err2012 return templ_7745c5c3_Err
1905 }2013 }
@@ -1925,36 +2033,36 @@ func splitSide(ln *DiffLine, old bool) templ.Component {
1925 }()2033 }()
1926 }2034 }
1927 ctx = templ.InitializeContext(ctx)2035 ctx = templ.InitializeContext(ctx)
1928- templ_7745c5c3_Var90 := templ.GetChildren(ctx)2036+ templ_7745c5c3_Var94 := templ.GetChildren(ctx)
1929- if templ_7745c5c3_Var90 == nil {2037+ if templ_7745c5c3_Var94 == nil {
1930- templ_7745c5c3_Var90 = templ.NopComponent2038+ templ_7745c5c3_Var94 = templ.NopComponent
1931 }2039 }
1932 ctx = templ.ClearChildren(ctx)2040 ctx = templ.ClearChildren(ctx)
1933 if ln == nil {2041 if ln == nil {
1934- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 172, "<td class=\"ln none\"></td><td class=\"m none\"></td><td class=\"tx none\"></td>")2042+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 178, "<td class=\"ln none\"></td><td class=\"m none\"></td><td class=\"tx none\"></td>")
1935 if templ_7745c5c3_Err != nil {2043 if templ_7745c5c3_Err != nil {
1936 return templ_7745c5c3_Err2044 return templ_7745c5c3_Err
1937 }2045 }
1938 } else {2046 } else {
1939- var templ_7745c5c3_Var91 = []any{"ln", ln.Kind, templ.KV("sel", ln.Selected)}2047+ var templ_7745c5c3_Var95 = []any{"ln", ln.Kind, templ.KV("sel", ln.Selected)}
1940- templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var91...)2048+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var95...)
1941 if templ_7745c5c3_Err != nil {2049 if templ_7745c5c3_Err != nil {
1942 return templ_7745c5c3_Err2050 return templ_7745c5c3_Err
1943 }2051 }
1944- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 173, "<td class=\"")2052+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 179, "<td class=\"")
1945 if templ_7745c5c3_Err != nil {2053 if templ_7745c5c3_Err != nil {
1946 return templ_7745c5c3_Err2054 return templ_7745c5c3_Err
1947 }2055 }
1948- var templ_7745c5c3_Var92 string2056+ var templ_7745c5c3_Var96 string
1949- templ_7745c5c3_Var92, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var91).String())2057+ templ_7745c5c3_Var96, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var95).String())
1950 if templ_7745c5c3_Err != nil {2058 if templ_7745c5c3_Err != nil {
1951 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}2059 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}
1952 }2060 }
1953- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var92)2061+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var96)
1954 if templ_7745c5c3_Err != nil {2062 if templ_7745c5c3_Err != nil {
1955 return templ_7745c5c3_Err2063 return templ_7745c5c3_Err
1956 }2064 }
1957- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 174, "\">")2065+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 180, "\">")
1958 if templ_7745c5c3_Err != nil {2066 if templ_7745c5c3_Err != nil {
1959 return templ_7745c5c3_Err2067 return templ_7745c5c3_Err
1960 }2068 }
@@ -1969,64 +2077,64 @@ func splitSide(ln *DiffLine, old bool) templ.Component {
1969 return templ_7745c5c3_Err2077 return templ_7745c5c3_Err
1970 }2078 }
1971 }2079 }
1972- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 175, "</td>")2080+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 181, "</td>")
1973 if templ_7745c5c3_Err != nil {2081 if templ_7745c5c3_Err != nil {
1974 return templ_7745c5c3_Err2082 return templ_7745c5c3_Err
1975 }2083 }
1976- var templ_7745c5c3_Var93 = []any{"m", ln.Kind, templ.KV("sel", ln.Selected)}2084+ var templ_7745c5c3_Var97 = []any{"m", ln.Kind, templ.KV("sel", ln.Selected)}
1977- templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var93...)2085+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var97...)
1978 if templ_7745c5c3_Err != nil {2086 if templ_7745c5c3_Err != nil {
1979 return templ_7745c5c3_Err2087 return templ_7745c5c3_Err
1980 }2088 }
1981- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 176, "<td class=\"")2089+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 182, "<td class=\"")
1982 if templ_7745c5c3_Err != nil {2090 if templ_7745c5c3_Err != nil {
1983 return templ_7745c5c3_Err2091 return templ_7745c5c3_Err
1984 }2092 }
1985- var templ_7745c5c3_Var94 string2093+ var templ_7745c5c3_Var98 string
1986- templ_7745c5c3_Var94, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var93).String())2094+ templ_7745c5c3_Var98, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var97).String())
1987 if templ_7745c5c3_Err != nil {2095 if templ_7745c5c3_Err != nil {
1988 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}2096 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}
1989 }2097 }
1990- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var94)2098+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var98)
1991 if templ_7745c5c3_Err != nil {2099 if templ_7745c5c3_Err != nil {
1992 return templ_7745c5c3_Err2100 return templ_7745c5c3_Err
1993 }2101 }
1994- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 177, "\">")2102+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 183, "\">")
1995 if templ_7745c5c3_Err != nil {2103 if templ_7745c5c3_Err != nil {
1996 return templ_7745c5c3_Err2104 return templ_7745c5c3_Err
1997 }2105 }
1998- var templ_7745c5c3_Var95 string2106+ var templ_7745c5c3_Var99 string
1999- templ_7745c5c3_Var95, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Mark)2107+ templ_7745c5c3_Var99, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Mark)
2000 if templ_7745c5c3_Err != nil {2108 if templ_7745c5c3_Err != nil {
2001- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 379, Col: 68}2109+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 406, Col: 68}
2002 }2110 }
2003- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var95))2111+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var99))
2004 if templ_7745c5c3_Err != nil {2112 if templ_7745c5c3_Err != nil {
2005 return templ_7745c5c3_Err2113 return templ_7745c5c3_Err
2006 }2114 }
2007- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 178, "</td>")2115+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 184, "</td>")
2008 if templ_7745c5c3_Err != nil {2116 if templ_7745c5c3_Err != nil {
2009 return templ_7745c5c3_Err2117 return templ_7745c5c3_Err
2010 }2118 }
2011- var templ_7745c5c3_Var96 = []any{"tx", "chroma", ln.Kind, templ.KV("sel", ln.Selected)}2119+ var templ_7745c5c3_Var100 = []any{"tx", "chroma", ln.Kind, templ.KV("sel", ln.Selected)}
2012- templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var96...)2120+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var100...)
2013 if templ_7745c5c3_Err != nil {2121 if templ_7745c5c3_Err != nil {
2014 return templ_7745c5c3_Err2122 return templ_7745c5c3_Err
2015 }2123 }
2016- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 179, "<td class=\"")2124+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 185, "<td class=\"")
2017 if templ_7745c5c3_Err != nil {2125 if templ_7745c5c3_Err != nil {
2018 return templ_7745c5c3_Err2126 return templ_7745c5c3_Err
2019 }2127 }
2020- var templ_7745c5c3_Var97 string2128+ var templ_7745c5c3_Var101 string
2021- templ_7745c5c3_Var97, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var96).String())2129+ templ_7745c5c3_Var101, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var100).String())
2022 if templ_7745c5c3_Err != nil {2130 if templ_7745c5c3_Err != nil {
2023 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}2131 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}
2024 }2132 }
2025- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var97)2133+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var101)
2026 if templ_7745c5c3_Err != nil {2134 if templ_7745c5c3_Err != nil {
2027 return templ_7745c5c3_Err2135 return templ_7745c5c3_Err
2028 }2136 }
2029- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 180, "\">")2137+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 186, "\">")
2030 if templ_7745c5c3_Err != nil {2138 if templ_7745c5c3_Err != nil {
2031 return templ_7745c5c3_Err2139 return templ_7745c5c3_Err
2032 }2140 }
@@ -2034,7 +2142,7 @@ func splitSide(ln *DiffLine, old bool) templ.Component {
2034 if templ_7745c5c3_Err != nil {2142 if templ_7745c5c3_Err != nil {
2035 return templ_7745c5c3_Err2143 return templ_7745c5c3_Err
2036 }2144 }
2037- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 181, "</td>")2145+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 187, "</td>")
2038 if templ_7745c5c3_Err != nil {2146 if templ_7745c5c3_Err != nil {
2039 return templ_7745c5c3_Err2147 return templ_7745c5c3_Err
2040 }2148 }
@@ -2061,49 +2169,49 @@ func gutter(n, href string) templ.Component {
2061 }()2169 }()
2062 }2170 }
2063 ctx = templ.InitializeContext(ctx)2171 ctx = templ.InitializeContext(ctx)
2064- templ_7745c5c3_Var98 := templ.GetChildren(ctx)2172+ templ_7745c5c3_Var102 := templ.GetChildren(ctx)
2065- if templ_7745c5c3_Var98 == nil {2173+ if templ_7745c5c3_Var102 == nil {
2066- templ_7745c5c3_Var98 = templ.NopComponent2174+ templ_7745c5c3_Var102 = templ.NopComponent
2067 }2175 }
2068 ctx = templ.ClearChildren(ctx)2176 ctx = templ.ClearChildren(ctx)
2069 if href != "" {2177 if href != "" {
2070- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 182, "<a href=\"")2178+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 188, "<a href=\"")
2071 if templ_7745c5c3_Err != nil {2179 if templ_7745c5c3_Err != nil {
2072 return templ_7745c5c3_Err2180 return templ_7745c5c3_Err
2073 }2181 }
2074- var templ_7745c5c3_Var99 templ.SafeURL2182+ var templ_7745c5c3_Var103 templ.SafeURL
2075- templ_7745c5c3_Var99, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(href))2183+ templ_7745c5c3_Var103, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(href))
2076 if templ_7745c5c3_Err != nil {2184 if templ_7745c5c3_Err != nil {
2077- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 388, Col: 31}2185+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 415, Col: 31}
2078 }2186 }
2079- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var99))2187+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var103))
2080 if templ_7745c5c3_Err != nil {2188 if templ_7745c5c3_Err != nil {
2081 return templ_7745c5c3_Err2189 return templ_7745c5c3_Err
2082 }2190 }
2083- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 183, "\" title=\"comment on this line\">")2191+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 189, "\" title=\"comment on this line\">")
2084 if templ_7745c5c3_Err != nil {2192 if templ_7745c5c3_Err != nil {
2085 return templ_7745c5c3_Err2193 return templ_7745c5c3_Err
2086 }2194 }
2087- var templ_7745c5c3_Var100 string2195+ var templ_7745c5c3_Var104 string
2088- templ_7745c5c3_Var100, templ_7745c5c3_Err = templ.JoinStringErrs(n)2196+ templ_7745c5c3_Var104, templ_7745c5c3_Err = templ.JoinStringErrs(n)
2089 if templ_7745c5c3_Err != nil {2197 if templ_7745c5c3_Err != nil {
2090- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 388, Col: 66}2198+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 415, Col: 66}
2091 }2199 }
2092- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var100))2200+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var104))
2093 if templ_7745c5c3_Err != nil {2201 if templ_7745c5c3_Err != nil {
2094 return templ_7745c5c3_Err2202 return templ_7745c5c3_Err
2095 }2203 }
2096- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 184, "</a>")2204+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 190, "</a>")
2097 if templ_7745c5c3_Err != nil {2205 if templ_7745c5c3_Err != nil {
2098 return templ_7745c5c3_Err2206 return templ_7745c5c3_Err
2099 }2207 }
2100 } else {2208 } else {
2101- var templ_7745c5c3_Var101 string2209+ var templ_7745c5c3_Var105 string
2102- templ_7745c5c3_Var101, templ_7745c5c3_Err = templ.JoinStringErrs(n)2210+ templ_7745c5c3_Var105, templ_7745c5c3_Err = templ.JoinStringErrs(n)
2103 if templ_7745c5c3_Err != nil {2211 if templ_7745c5c3_Err != nil {
2104- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 390, Col: 5}2212+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 417, Col: 5}
2105 }2213 }
2106- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var101))2214+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var105))
2107 if templ_7745c5c3_Err != nil {2215 if templ_7745c5c3_Err != nil {
2108 return templ_7745c5c3_Err2216 return templ_7745c5c3_Err
2109 }2217 }
M internal/adapters/web/format.go +8 -0
@@ -61,6 +61,14 @@ func grouped(n int) string {
6161 return string(b)
6262 }
6363
64+// viewLabel names a diff layout on the button of the view menu.
65+func viewLabel(view string) string {
66+ if view == "split" {
67+ return "Split"
68+ }
69+ return "Unified"
70+}
71+
6472 func plural(n int, one, many string) string {
6573 if n == 1 {
6674 return "1 " + one
@@ -61,6 +61,14 @@ func grouped(n int) string {
61 return string(b)61 return string(b)
62 }62 }
63 63
64+// viewLabel names a diff layout on the button of the view menu.
65+func viewLabel(view string) string {
66+ if view == "split" {
67+ return "Split"
68+ }
69+ return "Unified"
70+}
71+
64 func plural(n int, one, many string) string {72 func plural(n int, one, many string) string {
65 if n == 1 {73 if n == 1 {
66 return "1 " + one74 return "1 " + one
M internal/adapters/web/issues.templ +24 -22
@@ -136,32 +136,34 @@ templ issueNewRail() {
136136 // owner, the form to comment and the button that closes or reopens it.
137137 templ IssueShow(l Layout, p IssuePage) {
138138 @Shell(l, issueRail(p)) {
139- <header class="show mr-h">
140- <h1><span class="mute">{ p.Number }</span> { p.Title }</h1>
141- <dl class="kv show-kv">
142- <dt>state</dt>
143- <dd class="mr-state" data-state={ p.State }>{ p.State }</dd>
144- <dt>opened</dt>
145- <dd>
146- { p.Opened.Name }
147- if p.Opened.WhenAt != "" {
148- { " · " }<time datetime={ p.Opened.WhenAt } title={ p.Opened.Abs }>{ p.Opened.When }</time>
139+ <section class="mr-card">
140+ <header class="show mr-h">
141+ <h1><span class="mute">{ p.Number }</span> { p.Title }</h1>
142+ <dl class="kv show-kv">
143+ <dt>state</dt>
144+ <dd class="mr-state" data-state={ p.State }>{ p.State }</dd>
145+ <dt>opened</dt>
146+ <dd>
147+ { p.Opened.Name }
148+ if p.Opened.WhenAt != "" {
149+ { " · " }<time datetime={ p.Opened.WhenAt } title={ p.Opened.Abs }>{ p.Opened.When }</time>
150+ }
151+ </dd>
152+ if p.UpdatedAt != "" {
153+ <dt>updated</dt>
154+ <dd><time datetime={ p.UpdatedAt }>{ p.Updated }</time></dd>
149155 }
150- </dd>
151- if p.UpdatedAt != "" {
152- <dt>updated</dt>
153- <dd><time datetime={ p.UpdatedAt }>{ p.Updated }</time></dd>
154- }
155- </dl>
156- </header>
156+ </dl>
157+ </header>
158+ if p.Desc != "" {
159+ <article class="mr-desc prose" aria-label="description" hx-ignore>
160+ @templ.Raw(string(p.Desc))
161+ </article>
162+ }
163+ </section>
157164 if p.Live {
158165 @LiveSlot("mr-notice")
159166 }
160- if p.Desc != "" {
161- <article class="mr-desc prose" aria-label="description" hx-ignore>
162- @templ.Raw(string(p.Desc))
163- </article>
164- }
165167 <h2 class="rule-h" id="comments"><span>Comments</span><span class="count">{ itoa(len(p.Comments)) }</span></h2>
166168 for _, c := range p.Comments {
167169 @commentView(c, "")
@@ -136,32 +136,34 @@ templ issueNewRail() {
136 // owner, the form to comment and the button that closes or reopens it.136 // owner, the form to comment and the button that closes or reopens it.
137 templ IssueShow(l Layout, p IssuePage) {137 templ IssueShow(l Layout, p IssuePage) {
138 @Shell(l, issueRail(p)) {138 @Shell(l, issueRail(p)) {
139- <header class="show mr-h">139+ <section class="mr-card">
140- <h1><span class="mute">{ p.Number }</span> { p.Title }</h1>140+ <header class="show mr-h">
141- <dl class="kv show-kv">141+ <h1><span class="mute">{ p.Number }</span> { p.Title }</h1>
142- <dt>state</dt>142+ <dl class="kv show-kv">
143- <dd class="mr-state" data-state={ p.State }>{ p.State }</dd>143+ <dt>state</dt>
144- <dt>opened</dt>144+ <dd class="mr-state" data-state={ p.State }>{ p.State }</dd>
145- <dd>145+ <dt>opened</dt>
146- { p.Opened.Name }146+ <dd>
147- if p.Opened.WhenAt != "" {147+ { p.Opened.Name }
148- { " · " }<time datetime={ p.Opened.WhenAt } title={ p.Opened.Abs }>{ p.Opened.When }</time>148+ if p.Opened.WhenAt != "" {
149+ { " · " }<time datetime={ p.Opened.WhenAt } title={ p.Opened.Abs }>{ p.Opened.When }</time>
150+ }
151+ </dd>
152+ if p.UpdatedAt != "" {
153+ <dt>updated</dt>
154+ <dd><time datetime={ p.UpdatedAt }>{ p.Updated }</time></dd>
149 }155 }
150- </dd>156+ </dl>
151- if p.UpdatedAt != "" {157+ </header>
152- <dt>updated</dt>158+ if p.Desc != "" {
153- <dd><time datetime={ p.UpdatedAt }>{ p.Updated }</time></dd>159+ <article class="mr-desc prose" aria-label="description" hx-ignore>
154- }160+ @templ.Raw(string(p.Desc))
155- </dl>161+ </article>
156- </header>162+ }
163+ </section>
157 if p.Live {164 if p.Live {
158 @LiveSlot("mr-notice")165 @LiveSlot("mr-notice")
159 }166 }
160- if p.Desc != "" {
161- <article class="mr-desc prose" aria-label="description" hx-ignore>
162- @templ.Raw(string(p.Desc))
163- </article>
164- }
165 <h2 class="rule-h" id="comments"><span>Comments</span><span class="count">{ itoa(len(p.Comments)) }</span></h2>167 <h2 class="rule-h" id="comments"><span>Comments</span><span class="count">{ itoa(len(p.Comments)) }</span></h2>
166 for _, c := range p.Comments {168 for _, c := range p.Comments {
167 @commentView(c, "")169 @commentView(c, "")
M internal/adapters/web/issues_templ.go +26 -26 generated file: collapsed
M internal/adapters/web/keys.templ +1 -0
@@ -32,6 +32,7 @@ templ Keys() {
3232 k-split from:body -> ermite.layout('split');
3333 k-unified from:body -> ermite.layout('unified');
3434 k-collapse from:body -> ermite.collapse();
35+ k-wide from:body -> window.ermiteWide.toggle();
3536 k-expand from:body -> ermite.expandFile();
3637 k-expandAll from:body -> ermite.expandAll();
3738 k-permalink from:body -> ermite.permalink();
@@ -32,6 +32,7 @@ templ Keys() {
32 k-split from:body -> ermite.layout('split');32 k-split from:body -> ermite.layout('split');
33 k-unified from:body -> ermite.layout('unified');33 k-unified from:body -> ermite.layout('unified');
34 k-collapse from:body -> ermite.collapse();34 k-collapse from:body -> ermite.collapse();
35+ k-wide from:body -> window.ermiteWide.toggle();
35 k-expand from:body -> ermite.expandFile();36 k-expand from:body -> ermite.expandFile();
36 k-expandAll from:body -> ermite.expandAll();37 k-expandAll from:body -> ermite.expandAll();
37 k-permalink from:body -> ermite.permalink();38 k-permalink from:body -> ermite.permalink();
M internal/adapters/web/keys_templ.go +1 -1 generated file: collapsed
M internal/adapters/web/mr.templ +39 -39
@@ -109,41 +109,43 @@ templ mrListRail(p MRListPage) {
109109 // form, the checks, the settings, the commits and the files.
110110 templ MergeRequest(l Layout, p MRPage) {
111111 @Shell(l, mrRail(p)) {
112- <header class="show mr-h">
113- <h1><span class="mute">{ p.Number }</span> { p.Title }</h1>
114- <dl class="kv show-kv">
115- <dt>state</dt>
116- <dd class="mr-state" data-state={ p.State }>
117- { p.State }
118- if p.MergedShort != "" {
119- { " · " }<a href={ templ.SafeURL(p.MergedHref) }>{ p.MergedShort }</a>{ " · " + p.MergeMode }
120- }
121- </dd>
122- <dt>branch</dt>
123- <dd>
124- @branchLink(p.Source, p.SourceHref)
125- { " → " }
126- @branchLink(p.Target, p.TargetHref)
127- </dd>
128- <dt>opened</dt>
129- <dd>
130- { p.Opened.Name }
131- if p.Opened.WhenAt != "" {
132- { " · " }<time datetime={ p.Opened.WhenAt } title={ p.Opened.Abs }>{ p.Opened.When }</time>
112+ <section class="mr-card">
113+ <header class="show mr-h">
114+ <h1><span class="mute">{ p.Number }</span> { p.Title }</h1>
115+ <dl class="kv show-kv">
116+ <dt>state</dt>
117+ <dd class="mr-state" data-state={ p.State }>
118+ { p.State }
119+ if p.MergedShort != "" {
120+ { " · " }<a href={ templ.SafeURL(p.MergedHref) }>{ p.MergedShort }</a>{ " · " + p.MergeMode }
121+ }
122+ </dd>
123+ <dt>branch</dt>
124+ <dd>
125+ @branchLink(p.Source, p.SourceHref)
126+ { " → " }
127+ @branchLink(p.Target, p.TargetHref)
128+ </dd>
129+ <dt>opened</dt>
130+ <dd>
131+ { p.Opened.Name }
132+ if p.Opened.WhenAt != "" {
133+ { " · " }<time datetime={ p.Opened.WhenAt } title={ p.Opened.Abs }>{ p.Opened.When }</time>
134+ }
135+ </dd>
136+ if p.UpdatedAt != "" {
137+ <dt>updated</dt>
138+ <dd><time datetime={ p.UpdatedAt }>{ p.Updated }</time></dd>
133139 }
134- </dd>
135- if p.UpdatedAt != "" {
136- <dt>updated</dt>
137- <dd><time datetime={ p.UpdatedAt }>{ p.Updated }</time></dd>
138- }
139- </dl>
140- </header>
140+ </dl>
141+ </header>
142+ if p.Desc != "" {
143+ <article class="mr-desc prose" aria-label="description" hx-ignore>
144+ @templ.Raw(string(p.Desc))
145+ </article>
146+ }
147+ </section>
141148 @LiveSlot("mr-notice")
142- if p.Desc != "" {
143- <article class="mr-desc prose" aria-label="description" hx-ignore>
144- @templ.Raw(string(p.Desc))
145- </article>
146- }
147149 if p.Since != nil {
148150 <nav class="since" aria-label="Diff range">
149151 <a
@@ -431,9 +433,8 @@ templ mrRail(p MRPage) {
431433 templ mrBar(p MRPage) {
432434 <div class="diff-tools mr-bar" role="group" aria-label="Diff view and merge">
433435 <span class="dim">{ plural(p.NFiles, "file", "files") } · <span class="plus">+{ itoa(p.Adds) }</span> <span class="minus">-{ itoa(p.Dels) }</span></span>
434- @viewLink(p.DiffView, "unified", "Unified", "u", p.UnifiedHref)
435- @viewLink(p.DiffView, "split", "Split", "d", p.SplitHref)
436- @collapseButton()
436+ @diffViewMenu(p.DiffView)
437+ @wideButton()
437438 <span class="grow"></span>
438439 @MRChecksSum(p.ChecksSum)
439440 if p.Box != nil {
@@ -562,9 +563,8 @@ templ Compare(l Layout, p ComparePage) {
562563 <div class="diff-tools" role="group" aria-label="Diff view">
563564 <span class="dim">{ plural(p.NFiles, "file", "files") } · <span class="plus">+{ itoa(p.Adds) }</span> <span class="minus">-{ itoa(p.Dels) }</span></span>
564565 <span class="grow"></span>
565- @viewLink(p.DiffView, "unified", "Unified", "u", p.UnifiedHref)
566- @viewLink(p.DiffView, "split", "Split", "d", p.SplitHref)
567- @collapseButton()
566+ @diffViewMenu(p.DiffView)
567+ @wideButton()
568568 </div>
569569 if p.Invisible {
570570 <p class="notice">
@@ -109,41 +109,43 @@ templ mrListRail(p MRListPage) {
109 // form, the checks, the settings, the commits and the files.109 // form, the checks, the settings, the commits and the files.
110 templ MergeRequest(l Layout, p MRPage) {110 templ MergeRequest(l Layout, p MRPage) {
111 @Shell(l, mrRail(p)) {111 @Shell(l, mrRail(p)) {
112- <header class="show mr-h">112+ <section class="mr-card">
113- <h1><span class="mute">{ p.Number }</span> { p.Title }</h1>113+ <header class="show mr-h">
114- <dl class="kv show-kv">114+ <h1><span class="mute">{ p.Number }</span> { p.Title }</h1>
115- <dt>state</dt>115+ <dl class="kv show-kv">
116- <dd class="mr-state" data-state={ p.State }>116+ <dt>state</dt>
117- { p.State }117+ <dd class="mr-state" data-state={ p.State }>
118- if p.MergedShort != "" {118+ { p.State }
119- { " · " }<a href={ templ.SafeURL(p.MergedHref) }>{ p.MergedShort }</a>{ " · " + p.MergeMode }119+ if p.MergedShort != "" {
120- }120+ { " · " }<a href={ templ.SafeURL(p.MergedHref) }>{ p.MergedShort }</a>{ " · " + p.MergeMode }
121- </dd>121+ }
122- <dt>branch</dt>122+ </dd>
123- <dd>123+ <dt>branch</dt>
124- @branchLink(p.Source, p.SourceHref)124+ <dd>
125- { " → " }125+ @branchLink(p.Source, p.SourceHref)
126- @branchLink(p.Target, p.TargetHref)126+ { " → " }
127- </dd>127+ @branchLink(p.Target, p.TargetHref)
128- <dt>opened</dt>128+ </dd>
129- <dd>129+ <dt>opened</dt>
130- { p.Opened.Name }130+ <dd>
131- if p.Opened.WhenAt != "" {131+ { p.Opened.Name }
132- { " · " }<time datetime={ p.Opened.WhenAt } title={ p.Opened.Abs }>{ p.Opened.When }</time>132+ if p.Opened.WhenAt != "" {
133+ { " · " }<time datetime={ p.Opened.WhenAt } title={ p.Opened.Abs }>{ p.Opened.When }</time>
134+ }
135+ </dd>
136+ if p.UpdatedAt != "" {
137+ <dt>updated</dt>
138+ <dd><time datetime={ p.UpdatedAt }>{ p.Updated }</time></dd>
133 }139 }
134- </dd>140+ </dl>
135- if p.UpdatedAt != "" {141+ </header>
136- <dt>updated</dt>142+ if p.Desc != "" {
137- <dd><time datetime={ p.UpdatedAt }>{ p.Updated }</time></dd>143+ <article class="mr-desc prose" aria-label="description" hx-ignore>
138- }144+ @templ.Raw(string(p.Desc))
139- </dl>145+ </article>
140- </header>146+ }
147+ </section>
141 @LiveSlot("mr-notice")148 @LiveSlot("mr-notice")
142- if p.Desc != "" {
143- <article class="mr-desc prose" aria-label="description" hx-ignore>
144- @templ.Raw(string(p.Desc))
145- </article>
146- }
147 if p.Since != nil {149 if p.Since != nil {
148 <nav class="since" aria-label="Diff range">150 <nav class="since" aria-label="Diff range">
149 <a151 <a
@@ -431,9 +433,8 @@ templ mrRail(p MRPage) {
431 templ mrBar(p MRPage) {433 templ mrBar(p MRPage) {
432 <div class="diff-tools mr-bar" role="group" aria-label="Diff view and merge">434 <div class="diff-tools mr-bar" role="group" aria-label="Diff view and merge">
433 <span class="dim">{ plural(p.NFiles, "file", "files") } · <span class="plus">+{ itoa(p.Adds) }</span> <span class="minus">-{ itoa(p.Dels) }</span></span>435 <span class="dim">{ plural(p.NFiles, "file", "files") } · <span class="plus">+{ itoa(p.Adds) }</span> <span class="minus">-{ itoa(p.Dels) }</span></span>
434- @viewLink(p.DiffView, "unified", "Unified", "u", p.UnifiedHref)436+ @diffViewMenu(p.DiffView)
435- @viewLink(p.DiffView, "split", "Split", "d", p.SplitHref)437+ @wideButton()
436- @collapseButton()
437 <span class="grow"></span>438 <span class="grow"></span>
438 @MRChecksSum(p.ChecksSum)439 @MRChecksSum(p.ChecksSum)
439 if p.Box != nil {440 if p.Box != nil {
@@ -562,9 +563,8 @@ templ Compare(l Layout, p ComparePage) {
562 <div class="diff-tools" role="group" aria-label="Diff view">563 <div class="diff-tools" role="group" aria-label="Diff view">
563 <span class="dim">{ plural(p.NFiles, "file", "files") } · <span class="plus">+{ itoa(p.Adds) }</span> <span class="minus">-{ itoa(p.Dels) }</span></span>564 <span class="dim">{ plural(p.NFiles, "file", "files") } · <span class="plus">+{ itoa(p.Adds) }</span> <span class="minus">-{ itoa(p.Dels) }</span></span>
564 <span class="grow"></span>565 <span class="grow"></span>
565- @viewLink(p.DiffView, "unified", "Unified", "u", p.UnifiedHref)566+ @diffViewMenu(p.DiffView)
566- @viewLink(p.DiffView, "split", "Split", "d", p.SplitHref)567+ @wideButton()
567- @collapseButton()
568 </div>568 </div>
569 if p.Invisible {569 if p.Invisible {
570 <p class="notice">570 <p class="notice">
M internal/adapters/web/mr_templ.go +127 -135 generated file: collapsed
M internal/adapters/web/overlays.templ +1 -0
@@ -30,6 +30,7 @@ templ OverlayHelp(mr bool) {
3030 <div><dt><kbd>g h</kbd></dt><dd>home</dd></div>
3131 <div><dt><kbd>y</kbd></dt><dd>copy a permalink pinned to the commit</dd></div>
3232 <div><dt><kbd>d</kbd> <kbd>u</kbd> <kbd>x</kbd></dt><dd>diff: split / unified / collapse or expand all</dd></div>
33+ <div><dt><kbd>w</kbd></dt><dd>diff: use the whole width of the screen, or not</dd></div>
3334 <div><dt><kbd>e</kbd> <kbd>E</kbd></dt><dd>diff: the whole file in view / every file, with the lines the hunks hide</dd></div>
3435 <div><dt><kbd>n</kbd></dt><dd>merge request: next note in the diff</dd></div>
3536 if mr {
@@ -30,6 +30,7 @@ templ OverlayHelp(mr bool) {
30 <div><dt><kbd>g h</kbd></dt><dd>home</dd></div>30 <div><dt><kbd>g h</kbd></dt><dd>home</dd></div>
31 <div><dt><kbd>y</kbd></dt><dd>copy a permalink pinned to the commit</dd></div>31 <div><dt><kbd>y</kbd></dt><dd>copy a permalink pinned to the commit</dd></div>
32 <div><dt><kbd>d</kbd> <kbd>u</kbd> <kbd>x</kbd></dt><dd>diff: split / unified / collapse or expand all</dd></div>32 <div><dt><kbd>d</kbd> <kbd>u</kbd> <kbd>x</kbd></dt><dd>diff: split / unified / collapse or expand all</dd></div>
33+ <div><dt><kbd>w</kbd></dt><dd>diff: use the whole width of the screen, or not</dd></div>
33 <div><dt><kbd>e</kbd> <kbd>E</kbd></dt><dd>diff: the whole file in view / every file, with the lines the hunks hide</dd></div>34 <div><dt><kbd>e</kbd> <kbd>E</kbd></dt><dd>diff: the whole file in view / every file, with the lines the hunks hide</dd></div>
34 <div><dt><kbd>n</kbd></dt><dd>merge request: next note in the diff</dd></div>35 <div><dt><kbd>n</kbd></dt><dd>merge request: next note in the diff</dd></div>
35 if mr {36 if mr {
M internal/adapters/web/overlays_templ.go +12 -12 generated file: collapsed
M internal/adapters/web/static/css/20-shell.css +3 -0
@@ -133,6 +133,9 @@
133133 align-content: start;
134134 }
135135 .work.has-rail { grid-template-columns: minmax(0, 1fr) var(--rail); }
136+ /* the wide diff (w, ermiteWide): a page with a diff takes the whole width
137+ of the screen; the rail goes to the right edge, the code takes the rest */
138+ html.wide body:has(#diffs) :is(.work, .hdr-top, .tabs, .foot) { max-width: none; }
136139 .rail { display: flex; flex-direction: column; gap: var(--s4); min-width: 0; }
137140 .work-lede { grid-column: 1 / -1; margin-bottom: calc(-1 * var(--s2)); }
138141 main > * + * { margin-top: var(--s4); }
@@ -133,6 +133,9 @@
133 align-content: start;133 align-content: start;
134 }134 }
135 .work.has-rail { grid-template-columns: minmax(0, 1fr) var(--rail); }135 .work.has-rail { grid-template-columns: minmax(0, 1fr) var(--rail); }
136+ /* the wide diff (w, ermiteWide): a page with a diff takes the whole width
137+ of the screen; the rail goes to the right edge, the code takes the rest */
138+ html.wide body:has(#diffs) :is(.work, .hdr-top, .tabs, .foot) { max-width: none; }
136 .rail { display: flex; flex-direction: column; gap: var(--s4); min-width: 0; }139 .rail { display: flex; flex-direction: column; gap: var(--s4); min-width: 0; }
137 .work-lede { grid-column: 1 / -1; margin-bottom: calc(-1 * var(--s2)); }140 .work-lede { grid-column: 1 / -1; margin-bottom: calc(-1 * var(--s2)); }
138 main > * + * { margin-top: var(--s4); }141 main > * + * { margin-top: var(--s4); }
M internal/adapters/web/static/css/50-code.css +7 -4
@@ -79,13 +79,16 @@
7979 & .ln { width: calc(var(--lnw) + 2ch); min-width: calc(var(--lnw) + 2ch); padding: 0 1ch; text-align: right; color: var(--ink-mute); user-select: none; }
8080 & .m { width: 2ch; text-align: center; user-select: none; color: var(--ink-dim); }
8181 & .tx { white-space: pre; }
82- & .hunk td { color: var(--ink-mute); background: var(--paper-alt); padding: 0 1ch; }
82+ /* the hunk headers and the hidden lines stay quiet: a faint band between
83+ the code, so that the eye keeps reading */
84+ & .hunk td, & .gap td { background: color-mix(in srgb, var(--paper-alt) 35%, var(--paper)); }
85+ & .hunk td { color: color-mix(in srgb, var(--ink-mute) 70%, transparent); padding: 0 1ch; }
8386 /* a run of hidden lines: the whole row loads them */
84- & .gap td { padding: 0; background: var(--paper-alt); }
87+ & .gap td { padding: 0; }
8588 & .gap button {
8689 display: block; width: 100%; padding: 2px 1ch; text-align: left; cursor: pointer;
87- font: inherit; color: var(--ink-dim); background: none; border: 0;
88- border-block: 1px dashed var(--border);
90+ font: inherit; color: var(--ink-mute); background: none; border: 0;
91+ border-block: 1px dashed color-mix(in srgb, var(--border) 60%, transparent);
8992 }
9093 & .gap button:hover, & .gap button:focus-visible { color: var(--ink-hi); background: var(--bg-strong); }
9194 & .gap button:disabled { cursor: progress; opacity: .6; }
@@ -79,13 +79,16 @@
79 & .ln { width: calc(var(--lnw) + 2ch); min-width: calc(var(--lnw) + 2ch); padding: 0 1ch; text-align: right; color: var(--ink-mute); user-select: none; }79 & .ln { width: calc(var(--lnw) + 2ch); min-width: calc(var(--lnw) + 2ch); padding: 0 1ch; text-align: right; color: var(--ink-mute); user-select: none; }
80 & .m { width: 2ch; text-align: center; user-select: none; color: var(--ink-dim); }80 & .m { width: 2ch; text-align: center; user-select: none; color: var(--ink-dim); }
81 & .tx { white-space: pre; }81 & .tx { white-space: pre; }
82- & .hunk td { color: var(--ink-mute); background: var(--paper-alt); padding: 0 1ch; }82+ /* the hunk headers and the hidden lines stay quiet: a faint band between
83+ the code, so that the eye keeps reading */
84+ & .hunk td, & .gap td { background: color-mix(in srgb, var(--paper-alt) 35%, var(--paper)); }
85+ & .hunk td { color: color-mix(in srgb, var(--ink-mute) 70%, transparent); padding: 0 1ch; }
83 /* a run of hidden lines: the whole row loads them */86 /* a run of hidden lines: the whole row loads them */
84- & .gap td { padding: 0; background: var(--paper-alt); }87+ & .gap td { padding: 0; }
85 & .gap button {88 & .gap button {
86 display: block; width: 100%; padding: 2px 1ch; text-align: left; cursor: pointer;89 display: block; width: 100%; padding: 2px 1ch; text-align: left; cursor: pointer;
87- font: inherit; color: var(--ink-dim); background: none; border: 0;90+ font: inherit; color: var(--ink-mute); background: none; border: 0;
88- border-block: 1px dashed var(--border);91+ border-block: 1px dashed color-mix(in srgb, var(--border) 60%, transparent);
89 }92 }
90 & .gap button:hover, & .gap button:focus-visible { color: var(--ink-hi); background: var(--bg-strong); }93 & .gap button:hover, & .gap button:focus-visible { color: var(--ink-hi); background: var(--bg-strong); }
91 & .gap button:disabled { cursor: progress; opacity: .6; }94 & .gap button:disabled { cursor: progress; opacity: .6; }
M internal/adapters/web/static/css/60-mr.css +15 -0
@@ -1,6 +1,12 @@
11 @layer components {
22 /* merge requests: the review page. Hue only where it carries a verdict. */
33 .mr-h .show-kv { margin-top: 0; }
4+ /* one card: the header (title, facts) a shade lighter, the description below */
5+ .mr-card {
6+ background: var(--bg-surface); border: 1px solid var(--border); border-radius: var(--r); overflow: hidden;
7+ & > .mr-h { background: var(--bg-raised); border: 0; border-radius: 0; }
8+ & > .mr-desc.prose { border: 0; border-top: 1px solid var(--border); border-radius: 0; }
9+ }
410
511 .mr-state[data-state="open"]::before { content: "● "; color: var(--teal); }
612 .mr-state[data-state="merged"]::before { content: "✓ "; color: var(--teal); }
@@ -49,6 +55,15 @@
4955 }
5056 & .kv { margin: 0; }
5157 }
58+ /* the view menu of a diff: the layout and the fold, one row each */
59+ .vmenu {
60+ & > summary::after { content: ""; width: 0; height: 0; margin-left: 2px; border: 4px solid transparent; border-top-color: currentColor; transform: translateY(2px); }
61+ & .menu-pop { left: 0; right: auto; width: 220px; gap: var(--s1); padding: var(--s2); }
62+ & .menu-pop .btn { width: 100%; justify-content: flex-start; border-color: transparent; background: none; }
63+ & .menu-pop .btn:hover { background: var(--bg-raised); }
64+ & .menu-pop .btn[aria-current="true"] { background: var(--bg-raised); color: var(--ink-hi); }
65+ & .menu-pop .btn kbd { margin-left: auto; }
66+ }
5267 .mmenu {
5368 & .d-modes { display: grid; gap: var(--s1); border: 0; padding: 0; margin: 0; }
5469 & .d-modes label, & .d-check {
@@ -1,6 +1,12 @@
1 @layer components {1 @layer components {
2 /* merge requests: the review page. Hue only where it carries a verdict. */2 /* merge requests: the review page. Hue only where it carries a verdict. */
3 .mr-h .show-kv { margin-top: 0; }3 .mr-h .show-kv { margin-top: 0; }
4+ /* one card: the header (title, facts) a shade lighter, the description below */
5+ .mr-card {
6+ background: var(--bg-surface); border: 1px solid var(--border); border-radius: var(--r); overflow: hidden;
7+ & > .mr-h { background: var(--bg-raised); border: 0; border-radius: 0; }
8+ & > .mr-desc.prose { border: 0; border-top: 1px solid var(--border); border-radius: 0; }
9+ }
4 10
5 .mr-state[data-state="open"]::before { content: "● "; color: var(--teal); }11 .mr-state[data-state="open"]::before { content: "● "; color: var(--teal); }
6 .mr-state[data-state="merged"]::before { content: "✓ "; color: var(--teal); }12 .mr-state[data-state="merged"]::before { content: "✓ "; color: var(--teal); }
@@ -49,6 +55,15 @@
49 }55 }
50 & .kv { margin: 0; }56 & .kv { margin: 0; }
51 }57 }
58+ /* the view menu of a diff: the layout and the fold, one row each */
59+ .vmenu {
60+ & > summary::after { content: ""; width: 0; height: 0; margin-left: 2px; border: 4px solid transparent; border-top-color: currentColor; transform: translateY(2px); }
61+ & .menu-pop { left: 0; right: auto; width: 220px; gap: var(--s1); padding: var(--s2); }
62+ & .menu-pop .btn { width: 100%; justify-content: flex-start; border-color: transparent; background: none; }
63+ & .menu-pop .btn:hover { background: var(--bg-raised); }
64+ & .menu-pop .btn[aria-current="true"] { background: var(--bg-raised); color: var(--ink-hi); }
65+ & .menu-pop .btn kbd { margin-left: auto; }
66+ }
52 .mmenu {67 .mmenu {
53 & .d-modes { display: grid; gap: var(--s1); border: 0; padding: 0; margin: 0; }68 & .d-modes { display: grid; gap: var(--s1); border: 0; padding: 0; margin: 0; }
54 & .d-modes label, & .d-check {69 & .d-modes label, & .d-check {
M internal/adapters/web/static/js/ermite.js +30 -1
@@ -14,6 +14,7 @@
1414 // 7. The service worker (ermiteInstall).
1515 // 8. Chip lists kept on one line, with a … chip (ermiteFit).
1616 // 9. The layout of the home page, remembered in the browser (ermiteLayout).
17+// 10. The wide diff: the page takes the whole width (ermiteWide).
1718 //
1819 // Preferences are kept by ermiteStore (store.js, loaded first).
1920 (() => {
@@ -553,9 +554,30 @@
553554 return { get: pref.get, set, apply, values };
554555 })();
555556
557+ // The wide diff: on the pages with a diff, the work area takes the whole
558+ // width of the screen, the rail at the right edge and the code in the rest.
559+ // The choice is kept by ermiteStore ("diff-wide": '1' when wide) and shown
560+ // as html.wide, which the styles follow, and as aria-pressed on the
561+ // buttons [data-wide-toggle]. Another tab's change applies here at once.
562+ window.ermiteWide = (() => {
563+ const pref = window.ermiteStore.pref('diff-wide', { values: ['1', ''], fallback: '' });
564+ function apply() {
565+ const wide = pref.get() === '1';
566+ document.documentElement.classList.toggle?.('wide', wide);
567+ for (const b of document.querySelectorAll('[data-wide-toggle]')) b.setAttribute('aria-pressed', String(wide));
568+ }
569+ function toggle() {
570+ pref.set(pref.get() === '1' ? '' : '1');
571+ apply();
572+ }
573+ pref.watch(apply);
574+ apply();
575+ return { toggle, apply };
576+ })();
577+
556578 // 1. Keys.
557579 const single = { j: 'j', k: 'k', G: 'bottom', '/': 'filter', '?': 'help', b: 'refs', f: 'cmd', ':': 'cmd', y: 'permalink',
558- s: 's', t: 't', c: 'c', r: 'r', m: 'm', i: 'i', n: 'next', h: 'left', l: 'right', d: 'split', u: 'unified', x: 'collapse', e: 'expand', E: 'expandAll', Enter: 'open', Escape: 'esc',
580+ s: 's', t: 't', c: 'c', r: 'r', m: 'm', i: 'i', n: 'next', h: 'left', l: 'right', d: 'split', u: 'unified', x: 'collapse', w: 'wide', e: 'expand', E: 'expandAll', Enter: 'open', Escape: 'esc',
559581 // the merge request page (mr.js): the merge menu, mark read
560582 M: 'merge', R: 'read' };
561583 // "g t" is the key "t": the tabs have one event each.
@@ -611,6 +633,13 @@
611633 if (!el || e.button || e.ctrlKey || e.metaKey || e.shiftKey || e.altKey) return;
612634 e.preventDefault();
613635 ermite.fire(el.dataset.fire);
636+ // A choice in a menu closes it.
637+ const menu = el.closest('details.menu');
638+ if (menu) menu.open = false;
639+ });
640+ // A click outside an open menu closes it.
641+ addEventListener('click', (e) => {
642+ for (const d of $$('details.menu[open]')) if (!d.contains(e.target)) d.open = false;
614643 });
615644 for (const a of $$('a[data-fire="refs"]')) {
616645 a.setAttribute('aria-haspopup', 'dialog');
@@ -14,6 +14,7 @@
14 // 7. The service worker (ermiteInstall).14 // 7. The service worker (ermiteInstall).
15 // 8. Chip lists kept on one line, with a … chip (ermiteFit).15 // 8. Chip lists kept on one line, with a … chip (ermiteFit).
16 // 9. The layout of the home page, remembered in the browser (ermiteLayout).16 // 9. The layout of the home page, remembered in the browser (ermiteLayout).
17+// 10. The wide diff: the page takes the whole width (ermiteWide).
17 //18 //
18 // Preferences are kept by ermiteStore (store.js, loaded first).19 // Preferences are kept by ermiteStore (store.js, loaded first).
19 (() => {20 (() => {
@@ -553,9 +554,30 @@
553 return { get: pref.get, set, apply, values };554 return { get: pref.get, set, apply, values };
554 })();555 })();
555 556
557+ // The wide diff: on the pages with a diff, the work area takes the whole
558+ // width of the screen, the rail at the right edge and the code in the rest.
559+ // The choice is kept by ermiteStore ("diff-wide": '1' when wide) and shown
560+ // as html.wide, which the styles follow, and as aria-pressed on the
561+ // buttons [data-wide-toggle]. Another tab's change applies here at once.
562+ window.ermiteWide = (() => {
563+ const pref = window.ermiteStore.pref('diff-wide', { values: ['1', ''], fallback: '' });
564+ function apply() {
565+ const wide = pref.get() === '1';
566+ document.documentElement.classList.toggle?.('wide', wide);
567+ for (const b of document.querySelectorAll('[data-wide-toggle]')) b.setAttribute('aria-pressed', String(wide));
568+ }
569+ function toggle() {
570+ pref.set(pref.get() === '1' ? '' : '1');
571+ apply();
572+ }
573+ pref.watch(apply);
574+ apply();
575+ return { toggle, apply };
576+ })();
577+
556 // 1. Keys.578 // 1. Keys.
557 const single = { j: 'j', k: 'k', G: 'bottom', '/': 'filter', '?': 'help', b: 'refs', f: 'cmd', ':': 'cmd', y: 'permalink',579 const single = { j: 'j', k: 'k', G: 'bottom', '/': 'filter', '?': 'help', b: 'refs', f: 'cmd', ':': 'cmd', y: 'permalink',
558- s: 's', t: 't', c: 'c', r: 'r', m: 'm', i: 'i', n: 'next', h: 'left', l: 'right', d: 'split', u: 'unified', x: 'collapse', e: 'expand', E: 'expandAll', Enter: 'open', Escape: 'esc',580+ s: 's', t: 't', c: 'c', r: 'r', m: 'm', i: 'i', n: 'next', h: 'left', l: 'right', d: 'split', u: 'unified', x: 'collapse', w: 'wide', e: 'expand', E: 'expandAll', Enter: 'open', Escape: 'esc',
559 // the merge request page (mr.js): the merge menu, mark read581 // the merge request page (mr.js): the merge menu, mark read
560 M: 'merge', R: 'read' };582 M: 'merge', R: 'read' };
561 // "g t" is the key "t": the tabs have one event each.583 // "g t" is the key "t": the tabs have one event each.
@@ -611,6 +633,13 @@
611 if (!el || e.button || e.ctrlKey || e.metaKey || e.shiftKey || e.altKey) return;633 if (!el || e.button || e.ctrlKey || e.metaKey || e.shiftKey || e.altKey) return;
612 e.preventDefault();634 e.preventDefault();
613 ermite.fire(el.dataset.fire);635 ermite.fire(el.dataset.fire);
636+ // A choice in a menu closes it.
637+ const menu = el.closest('details.menu');
638+ if (menu) menu.open = false;
639+ });
640+ // A click outside an open menu closes it.
641+ addEventListener('click', (e) => {
642+ for (const d of $$('details.menu[open]')) if (!d.contains(e.target)) d.open = false;
614 });643 });
615 for (const a of $$('a[data-fire="refs"]')) {644 for (const a of $$('a[data-fire="refs"]')) {
616 a.setAttribute('aria-haspopup', 'dialog');645 a.setAttribute('aria-haspopup', 'dialog');
M internal/adapters/web/static/js/mr.js +0 -4
@@ -311,10 +311,6 @@ window.ermiteMR = (() => {
311311 try { sessionStorage.setItem('mr-last-line', lastLine); } catch { /* storage optional */ }
312312 if (next) { e.preventDefault(); location.assign(next); }
313313 });
314- // A click outside an open menu closes it.
315- addEventListener('click', (e) => {
316- for (const d of $$('details.menu[open]')) if (!d.contains(e.target)) d.open = false;
317- });
318314 }
319315
320316 return { core, start, load, reveal, openMerge, closeMenus, menuKey, markRead, focusFiles, stepFiles, leaveFiles, foldFiles, openFile };
@@ -311,10 +311,6 @@ window.ermiteMR = (() => {
311 try { sessionStorage.setItem('mr-last-line', lastLine); } catch { /* storage optional */ }311 try { sessionStorage.setItem('mr-last-line', lastLine); } catch { /* storage optional */ }
312 if (next) { e.preventDefault(); location.assign(next); }312 if (next) { e.preventDefault(); location.assign(next); }
313 });313 });
314- // A click outside an open menu closes it.
315- addEventListener('click', (e) => {
316- for (const d of $$('details.menu[open]')) if (!d.contains(e.target)) d.open = false;
317- });
318 }314 }
319 315
320 return { core, start, load, reveal, openMerge, closeMenus, menuKey, markRead, focusFiles, stepFiles, leaveFiles, foldFiles, openFile };316 return { core, start, load, reveal, openMerge, closeMenus, menuKey, markRead, focusFiles, stepFiles, leaveFiles, foldFiles, openFile };

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 3

Tags 43

↑↓ moveenter openesc close