detached 5fea81f

feat(web): merge merge requests asynchronously with htmx and live state updates

The merge form posts through htmx for every mode and swaps the MR state
badge and action area in place; refusals and failures render a status
fragment instead of a full error page. Non-htmx posts keep the redirect.
Other open MR tabs receive the merged state through the live stream, and
the checks label observer watches the stable MR bar so it survives swaps.
commit
5fea81ff21bc05f0d324773ff9d33ac9572363be
author
brice · · 2026-10-22 00:54 UTC
parent
53e25a3
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
8 files · +1475 -1067
M internal/adapters/web/fragments.go +15 -0
@@ -6,6 +6,7 @@ import (
66 "bytes"
77 "context"
88 "errors"
9+ "net/http"
910 "strconv"
1011 "strings"
1112 "sync"
@@ -192,6 +193,20 @@ func (l *liveStream) repoPage(ctx context.Context, we ports.WatchEvent) ([]fragm
192193 case domain.MergeRequestOpened:
193194 return l.mrNotice(ctx, ev.MergeRequest.Number, "a merge request was opened — reload")
194195 case domain.MergeRequestMerged:
196+ if l.view == "mr" && strconv.FormatInt(ev.MergeRequest.Number, 10) == l.n {
197+ r, err := http.NewRequestWithContext(ctx, http.MethodGet, mrHref(l.repo, ev.MergeRequest.Number), nil)
198+ if err != nil {
199+ return nil, err
200+ }
201+ r.SetPathValue("repo", l.repo)
202+ r.SetPathValue("n", l.n)
203+ c, _, err := l.s.mrPageView(ctx, r, false, true)
204+ if err != nil {
205+ return nil, err
206+ }
207+ f, err := renderFragment(ctx, "mr-mergeability", c)
208+ return []fragment{f}, err
209+ }
195210 return l.mrNotice(ctx, ev.MergeRequest.Number, "this merge request was merged — reload")
196211 case domain.MergeRequestClosed:
197212 return l.mrNotice(ctx, ev.MergeRequest.Number, "this merge request was closed — reload")
M internal/adapters/web/mr.go +7 -0
@@ -558,6 +558,10 @@ func (s *Server) mrSince(ctx context.Context, r *http.Request) (templ.Component,
558558 }
559559
560560 func (s *Server) mrPage(ctx context.Context, r *http.Request, since bool) (templ.Component, int, error) {
561+ return s.mrPageView(ctx, r, since, false)
562+}
563+
564+func (s *Server) mrPageView(ctx context.Context, r *http.Request, since, fragment bool) (templ.Component, int, error) {
561565 if since && !SignedIn(ctx) {
562566 return nil, 0, errNotFound
563567 }
@@ -649,6 +653,9 @@ func (s *Server) mrPage(ctx context.Context, r *http.Request, since bool) (templ
649653 }
650654 }
651655
656+ if fragment {
657+ return MRStateFragment(p), http.StatusOK, nil
658+ }
652659 l := s.repoLayout(ctx, d, "merge-requests")
653660 l.Title = p.Number + " " + p.Title + " · " + d.name() + " · " + s.instance
654661 if head != "" {
M internal/adapters/web/mr.templ +62 -29
@@ -13,7 +13,7 @@ templ MRList(l Layout, p MRListPage) {
1313 @Shell(l, mrListRail(p)) {
1414 if p.Live {
1515 @LiveSlot("mr-notice")
16- <div id="mr-refresh-status" role="status" aria-live="polite"></div>
16+ <div id="mr-refresh-status" role="status" aria-live="polite"></div>
1717 }
1818 <div class="filter">
1919 <label for="mr-filter" class="sr">filter</label>
@@ -119,12 +119,7 @@ templ MergeRequest(l Layout, p MRPage) {
119119 <h1><span class="mute">{ p.Number }</span> { p.Title }</h1>
120120 <dl class="kv show-kv">
121121 <dt>state</dt>
122- <dd class="mr-state" data-state={ p.State }>
123- { p.State }
124- if p.MergedShort != "" {
125- { " · " }<a href={ templ.SafeURL(p.MergedHref) }>{ p.MergedShort }</a>{ " · " + p.MergeMode }
126- }
127- </dd>
122+ @mrState(p)
128123 <dt>branch</dt>
129124 <dd>
130125 @branchLink(p.Source, p.SourceHref)
@@ -215,19 +210,19 @@ templ MergeRequest(l Layout, p MRPage) {
215210 }
216211 </div>
217212 <div id="mr-comments">
218- <h2 class="rule-h" id="comments"><span>Comments</span><span class="count">{ itoa(p.NUnresolved) } open / { itoa(p.NComments) }</span></h2>
219- for _, c := range p.Loose {
220- @commentView(c, "")
221- }
222- for _, c := range p.General {
223- @commentView(c, "")
224- }
225- if p.NComments == 0 {
226- <p class="dim">no comments yet.</p>
227- }
228- if p.GeneralForm != nil {
229- @commentForm(*p.GeneralForm, "")
230- }
213+ <h2 class="rule-h" id="comments"><span>Comments</span><span class="count">{ itoa(p.NUnresolved) } open / { itoa(p.NComments) }</span></h2>
214+ for _, c := range p.Loose {
215+ @commentView(c, "")
216+ }
217+ for _, c := range p.General {
218+ @commentView(c, "")
219+ }
220+ if p.NComments == 0 {
221+ <p class="dim">no comments yet.</p>
222+ }
223+ if p.GeneralForm != nil {
224+ @commentForm(*p.GeneralForm, "")
225+ }
231226 </div>
232227 }
233228 }
@@ -467,13 +462,7 @@ templ mrBar(p MRPage) {
467462 <div class="diff-tools mr-bar" role="group" aria-label="Diff view and merge">
468463 <span class="dim">{ plural(p.NFiles, "file", "files") } · <span class="plus">+{ itoa(p.Adds) }</span> <span class="minus">-{ itoa(p.Dels) }</span></span>
469464 @diffViewMenu(p.DiffView)
470- <div class="mr-acts">
471- @MRChecksSum(p.ChecksSum)
472- if p.Box != nil {
473- @mergeMenu(p)
474- }
475- @moreMenu(p)
476- </div>
465+ @mrActions(p)
477466 </div>
478467 }
479468
@@ -523,7 +512,15 @@ templ mergeMenu(p MRPage) {
523512 </div>
524513 </form>
525514 }
526- <form class="d-acts" method="post" action={ templ.SafeURL(p.Box.MergeAction) }>
515+ <form
516+ class="d-acts"
517+ method="post"
518+ action={ templ.SafeURL(p.Box.MergeAction) }
519+ hx-post={ p.Box.MergeAction }
520+ hx-swap="none"
521+ hx-sync="this:drop"
522+ hx-disable="find button[type=submit]"
523+ >
527524 <input type="hidden" name="head_id" value={ p.Box.Head }/>
528525 <fieldset class="d-modes">
529526 <legend class="sr">merge mode</legend>
@@ -557,9 +554,10 @@ templ mergeMenu(p MRPage) {
557554 data-default
558555 disabled?={ !p.Box.CanMerge() }
559556 title={ p.Box.MergeTitle() }
560- :disabled="!this.form.querySelector('input[name=mode]:checked:not(:disabled)')"
557+ :disabled="this.form.classList.contains('htmx-request') || !this.form.querySelector('input[name=mode]:checked:not(:disabled)')"
561558 :title="(this.form.querySelector('input[name=mode]:checked') || {}).title || ''"
562559 >Merge into { p.Target }</button>
560+ <span class="htmx-indicator" role="status">Merging…</span>
563561 </div>
564562 </form>
565563 if p.Box.CanAutoMerge {
@@ -779,3 +777,38 @@ templ MRMergeChecks(c ChecksSummary) {
779777 }
780778 </div>
781779 }
780+
781+// MRStateFragment updates only state and actions, leaving review drafts alone.
782+templ MRStateFragment(p MRPage) {
783+ @mrState(p)
784+ @mrActions(p)
785+}
786+
787+templ mrState(p MRPage) {
788+ <dd id="mr-state" hx-swap-oob="true" class="mr-state" data-state={ p.State }>
789+ { p.State }
790+ if p.MergedShort != "" {
791+ { " · " }<a href={ templ.SafeURL(p.MergedHref) }>{ p.MergedShort }</a>{ " · " + p.MergeMode }
792+ }
793+ </dd>
794+}
795+
796+templ mrActions(p MRPage) {
797+ <div id="mr-actions" hx-swap-oob="true" class="mr-acts">
798+ @MRChecksSum(p.ChecksSum)
799+ if p.Box != nil {
800+ @mergeMenu(p)
801+ }
802+ @moreMenu(p)
803+ if p.MergeError != "" {
804+ <p class="d-err" role="alert">{ p.MergeError }</p>
805+ }
806+ </div>
807+}
808+
809+// MRActionStatus remains visible even when the request detail cannot be read.
810+templ MRActionStatus(message, href string) {
811+ <div id="mr-actions" class="mr-acts" hx-swap-oob="true">
812+ <p class="d-err" role="alert">{ message } <a href={ templ.SafeURL(href) }>reload</a></p>
813+ </div>
814+}
A internal/adapters/web/mr_async_test.go +127 -0
@@ -0,0 +1,127 @@
1+// SPDX-License-Identifier: AGPL-3.0-or-later
2+
3+package web
4+
5+import (
6+ "context"
7+ "errors"
8+ "net/http"
9+ "net/http/httptest"
10+ "strings"
11+ "testing"
12+ "time"
13+
14+ "github.com/stretchr/testify/assert"
15+ "github.com/stretchr/testify/mock"
16+ "github.com/stretchr/testify/require"
17+
18+ "bnema.dev/ermite/internal/domain"
19+ "bnema.dev/ermite/internal/ports"
20+ "bnema.dev/ermite/internal/ports/mocks"
21+)
22+
23+func asyncMergeServer(t *testing.T, state domain.MRState) (*Server, *mocks.MergeRequestService) {
24+ t.Helper()
25+ svc := mocks.NewMergeRequestService(t)
26+ browse := mocks.NewBrowseService(t)
27+ browse.EXPECT().ListRefs(mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(ports.RefPage{Refs: []domain.Ref{{Kind: domain.RefKindBranch, ShortName: "feature"}}}, nil).Maybe()
28+ svc.EXPECT().Get(mock.Anything, mock.Anything, repoName(t, "demo"), int64(3), mock.Anything).Return(ports.MergeRequestDetail{
29+ MergeRequest: domain.MergeRequest{Repo: repoName(t, "demo"), Number: 3, State: state, HeadID: objectID(t, strings.Repeat("a", domain.ObjectIDLen)), Source: "feature", Target: "main"},
30+ Mergeability: domain.Mergeability{State: domain.MergeabilityUpToDate},
31+ }, nil).Maybe()
32+ return newTestServer(t, Config{Repos: reposServing(t, publicRepo(t, "demo")), Browse: browse, MergeRequests: svc, Now: time.Now}), svc
33+}
34+
35+func TestAsyncMergePost(t *testing.T) {
36+ for _, mode := range []domain.MergeMode{domain.MergeModeFastForward, domain.MergeModeSquash, domain.MergeModeMerge} {
37+ for _, hx := range []bool{false, true} {
38+ t.Run(mode.String()+"/"+boolText(hx), func(t *testing.T) {
39+ s, svc := asyncMergeServer(t, domain.MRStateMerged)
40+ svc.EXPECT().Merge(mock.Anything, mock.Anything, repoName(t, "demo"), int64(3), ports.MergeParams{Mode: mode}).Return(ports.MergeResult{}, nil).Once()
41+ r := autoMergeRequest("/demo/merge-requests/3/merge", "mode="+mode.String())
42+ if hx {
43+ r.Header.Set("HX-Request", "true")
44+ }
45+ w := httptest.NewRecorder()
46+ s.mrAction(s.mrMerge)(w, r)
47+ if !hx {
48+ assert.Equal(t, http.StatusSeeOther, w.Code)
49+ return
50+ }
51+ assert.Equal(t, http.StatusOK, w.Code)
52+ assert.Empty(t, w.Header().Get("Location"))
53+ assert.Contains(t, w.Body.String(), `id="mr-state"`)
54+ assert.Contains(t, w.Body.String(), `data-state="merged"`)
55+ assert.Contains(t, w.Body.String(), `id="mr-actions"`)
56+ assert.NotContains(t, w.Body.String(), "<html")
57+ assert.NotContains(t, w.Body.String(), `id="merge-menu"`)
58+ })
59+ }
60+ }
61+}
62+
63+func TestAsyncMergeRefusal(t *testing.T) {
64+ s, svc := asyncMergeServer(t, domain.MRStateOpen)
65+ svc.EXPECT().Merge(mock.Anything, mock.Anything, mock.Anything, int64(3), mock.Anything).Return(ports.MergeResult{}, domain.ErrConflict)
66+ r := autoMergeRequest("/demo/merge-requests/3/merge", "mode=squash")
67+ r = r.WithContext(context.WithValue(r.Context(), signedInKey{}, struct{}{}))
68+ r.Header.Set("HX-Request", "true")
69+ w := httptest.NewRecorder()
70+ s.mrAction(s.mrMerge)(w, r)
71+ assert.Equal(t, http.StatusConflict, w.Code)
72+ assert.Contains(t, w.Body.String(), `role="alert"`)
73+ assert.Contains(t, w.Body.String(), domain.ErrConflict.Error())
74+ assert.Contains(t, w.Body.String(), `hx-post="/demo/merge-requests/3/merge"`)
75+ assert.Contains(t, w.Body.String(), `hx-sync="this:drop"`)
76+ assert.Contains(t, w.Body.String(), "Merging…")
77+ assert.NotContains(t, w.Body.String(), "<html")
78+}
79+
80+func TestAsyncMergeLive(t *testing.T) {
81+ s, _ := asyncMergeServer(t, domain.MRStateMerged)
82+ l := liveStream{s: s, repo: "demo", view: "mr", n: "3"}
83+ fs, err := l.repoPage(t.Context(), watchOf(domain.MergeRequestMerged{MergeRequest: domain.MergeRequest{Number: 3}}))
84+ require.NoError(t, err)
85+ require.Len(t, fs, 1)
86+ assert.Equal(t, "mr-mergeability", fs[0].event)
87+ assert.Contains(t, fs[0].html, `data-state="merged"`)
88+ assert.Contains(t, fs[0].html, `id="mr-actions"`)
89+ assert.False(t, strings.Contains(fs[0].html, "reload"))
90+ fs, err = l.repoPage(t.Context(), watchOf(domain.MergeRequestMerged{MergeRequest: domain.MergeRequest{Number: 4}}))
91+ require.NoError(t, err)
92+ assert.Empty(t, fs)
93+}
94+
95+func TestAsyncMergeOtherFailures(t *testing.T) {
96+ for _, tt := range []struct {
97+ name string
98+ mergeErr error
99+ readFails bool
100+ status int
101+ message string
102+ }{
103+ {"forbidden", domain.ErrForbidden, false, http.StatusForbidden, "the session is not allowed"},
104+ {"internal", errors.New("private backend detail"), false, http.StatusInternalServerError, "reload to check its state"},
105+ {"post-merge read", nil, true, http.StatusOK, "merged, but the updated page could not be loaded"},
106+ } {
107+ t.Run(tt.name, func(t *testing.T) {
108+ s, svc := asyncMergeServer(t, domain.MRStateMerged)
109+ if tt.readFails {
110+ svc.On("Get", mock.Anything, mock.Anything, repoName(t, "demo"), int64(3), mock.Anything).Unset()
111+ svc.EXPECT().Get(mock.Anything, mock.Anything, repoName(t, "demo"), int64(3), mock.Anything).Return(ports.MergeRequestDetail{}, errors.New("private read detail")).Once()
112+ }
113+ svc.EXPECT().Merge(mock.Anything, mock.Anything, mock.Anything, int64(3), mock.Anything).Return(ports.MergeResult{}, tt.mergeErr).Once()
114+ r := autoMergeRequest("/demo/merge-requests/3/merge", "mode=squash")
115+ r.Header.Set("HX-Request", "true")
116+ w := httptest.NewRecorder()
117+ s.mrAction(s.mrMerge)(w, r)
118+ assert.Equal(t, tt.status, w.Code)
119+ assert.Contains(t, w.Body.String(), `id="mr-actions"`)
120+ assert.Contains(t, w.Body.String(), `hx-swap-oob="true"`)
121+ assert.Contains(t, w.Body.String(), `role="alert"`)
122+ assert.Contains(t, w.Body.String(), tt.message)
123+ assert.NotContains(t, w.Body.String(), "private")
124+ assert.NotContains(t, w.Body.String(), "<html")
125+ })
126+ }
127+}
M internal/adapters/web/mr_post.go +33 -1
@@ -68,6 +68,20 @@ func (s *Server) mrAction(h func(ctx context.Context, r *http.Request) (to strin
6868 s.actionFailed(ctx, w, r, err, back)
6969 return
7070 }
71+ if isHXMerge(r) {
72+ c, _, err := s.mrPageView(ctx, r, false, true)
73+ if err != nil {
74+ id := requestID()
75+ log := zerowrap.FromCtx(ctx)
76+ log.Error().Err(err).Str("request_id", id).Msg("web merged state failed")
77+ w.Header().Set("Cache-Control", "no-store")
78+ s.write(ctx, w, r, http.StatusOK, MRActionStatus("merged, but the updated page could not be loaded. reload to see the result. reference: "+id, back))
79+ return
80+ }
81+ w.Header().Set("Cache-Control", "no-store")
82+ s.write(ctx, w, r, http.StatusOK, c)
83+ return
84+ }
7185 seeOther(w, r, to)
7286 }
7387 }
@@ -100,7 +114,7 @@ func mergeErrorOf(ctx context.Context) string {
100114 // It reports false when the page cannot be built; the caller then answers as
101115 // for any refused action.
102116 func (s *Server) rerenderMR(ctx context.Context, w http.ResponseWriter, r *http.Request, re *rerender) bool {
103- c, _, err := s.mrPage(withMergeError(ctx, re.msg), r, false)
117+ c, _, err := s.mrPageView(withMergeError(ctx, re.msg), r, false, isHXMerge(r))
104118 if err != nil {
105119 return false
106120 }
@@ -120,6 +134,10 @@ func (s *Server) actionFailed(ctx context.Context, w http.ResponseWriter, r *htt
120134 // The browser is gone.
121135 case errors.Is(err, domain.ErrNotFound):
122136 w.Header().Set("Cache-Control", "no-store")
137+ if isHXMerge(r) {
138+ s.write(ctx, w, r, http.StatusNotFound, MRActionStatus("the merge request was not found. reload to check its state.", back))
139+ return
140+ }
123141 s.write(ctx, w, r, http.StatusNotFound, s.notFoundPage())
124142 case errors.Is(err, domain.ErrAlreadyExists):
125143 s.reject(ctx, w, r, http.StatusConflict, "already there", rule(msg, "this already exists."), back)
@@ -143,6 +161,10 @@ func (s *Server) internalFailure(ctx context.Context, w http.ResponseWriter, r *
143161 log := zerowrap.FromCtx(ctx)
144162 log.Error().Err(err).Str("request_id", id).Str("path", logPath(r.URL.Path)).Msg("web action failed")
145163 w.Header().Set("Cache-Control", "no-store")
164+ if isHXMerge(r) {
165+ s.write(ctx, w, r, http.StatusInternalServerError, MRActionStatus("the merge could not be completed. reload to check its state. reference: "+id, strings.TrimSuffix(r.URL.Path, "/merge")))
166+ return
167+ }
146168 s.write(ctx, w, r, http.StatusInternalServerError, s.errorPage(id))
147169 }
148170
@@ -161,6 +183,11 @@ func (s *Server) reject(ctx context.Context, w http.ResponseWriter, r *http.Requ
161183 if back == "" {
162184 back = "/"
163185 }
186+ if isHXMerge(r) {
187+ w.Header().Set("Cache-Control", "no-store")
188+ s.write(ctx, w, r, status, MRActionStatus(line, back))
189+ return
190+ }
164191 l := s.stateLayout(title, []Crumb{{Label: title, Current: true}})
165192 w.Header().Set("Cache-Control", "no-store")
166193 s.write(ctx, w, r, status, State(l, StatePage{
@@ -523,3 +550,8 @@ func (s *Server) mrDeleteComment(ctx context.Context, r *http.Request) (string,
523550 c, err := s.cfg.MergeRequests.DeleteComment(ctx, principal(ctx), name, n, commentID(r.PathValue("id")))
524551 return back + "#c" + strconv.FormatInt(c.ID, 10), back, err
525552 }
553+
554+// isHXMerge limits fragment responses to the progressively enhanced merge form.
555+func isHXMerge(r *http.Request) bool {
556+ return r.Header.Get("HX-Request") == "true" && strings.HasSuffix(r.URL.Path, "/merge")
557+}
M internal/adapters/web/mr_templ.go +1226 -1034
@@ -587,87 +587,15 @@ func MergeRequest(l Layout, p MRPage) templ.Component {
587587 if templ_7745c5c3_Err != nil {
588588 return templ_7745c5c3_Err
589589 }
590- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 52, "</h1><dl class=\"kv show-kv\"><dt>state</dt><dd class=\"mr-state\" data-state=\"")
590+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 52, "</h1><dl class=\"kv show-kv\"><dt>state</dt>")
591591 if templ_7745c5c3_Err != nil {
592592 return templ_7745c5c3_Err
593593 }
594- var templ_7745c5c3_Var28 string
595- templ_7745c5c3_Var28, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.State)
596- if templ_7745c5c3_Err != nil {
597- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 122, Col: 46}
598- }
599- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var28)
600- if templ_7745c5c3_Err != nil {
601- return templ_7745c5c3_Err
602- }
603- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 53, "\">")
604- if templ_7745c5c3_Err != nil {
605- return templ_7745c5c3_Err
606- }
607- var templ_7745c5c3_Var29 string
608- templ_7745c5c3_Var29, templ_7745c5c3_Err = templ.JoinStringErrs(p.State)
609- if templ_7745c5c3_Err != nil {
610- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 123, Col: 15}
611- }
612- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var29))
594+ templ_7745c5c3_Err = mrState(p).Render(ctx, templ_7745c5c3_Buffer)
613595 if templ_7745c5c3_Err != nil {
614596 return templ_7745c5c3_Err
615597 }
616- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 54, " ")
617- if templ_7745c5c3_Err != nil {
618- return templ_7745c5c3_Err
619- }
620- if p.MergedShort != "" {
621- var templ_7745c5c3_Var30 string
622- templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")
623- if templ_7745c5c3_Err != nil {
624- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 125, Col: 15}
625- }
626- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var30))
627- if templ_7745c5c3_Err != nil {
628- return templ_7745c5c3_Err
629- }
630- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, "<a href=\"")
631- if templ_7745c5c3_Err != nil {
632- return templ_7745c5c3_Err
633- }
634- var templ_7745c5c3_Var31 templ.SafeURL
635- templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.MergedHref))
636- if templ_7745c5c3_Err != nil {
637- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 125, Col: 54}
638- }
639- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var31))
640- if templ_7745c5c3_Err != nil {
641- return templ_7745c5c3_Err
642- }
643- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 56, "\">")
644- if templ_7745c5c3_Err != nil {
645- return templ_7745c5c3_Err
646- }
647- var templ_7745c5c3_Var32 string
648- templ_7745c5c3_Var32, templ_7745c5c3_Err = templ.JoinStringErrs(p.MergedShort)
649- if templ_7745c5c3_Err != nil {
650- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 125, Col: 72}
651- }
652- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var32))
653- if templ_7745c5c3_Err != nil {
654- return templ_7745c5c3_Err
655- }
656- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "</a>")
657- if templ_7745c5c3_Err != nil {
658- return templ_7745c5c3_Err
659- }
660- var templ_7745c5c3_Var33 string
661- templ_7745c5c3_Var33, templ_7745c5c3_Err = templ.JoinStringErrs(" · " + p.MergeMode)
662- if templ_7745c5c3_Err != nil {
663- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 125, Col: 100}
664- }
665- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var33))
666- if templ_7745c5c3_Err != nil {
667- return templ_7745c5c3_Err
668- }
669- }
670- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "</dd><dt>branch</dt><dd>")
598+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 53, "<dt>branch</dt><dd>")
671599 if templ_7745c5c3_Err != nil {
672600 return templ_7745c5c3_Err
673601 }
@@ -675,12 +603,12 @@ func MergeRequest(l Layout, p MRPage) templ.Component {
675603 if templ_7745c5c3_Err != nil {
676604 return templ_7745c5c3_Err
677605 }
678- var templ_7745c5c3_Var34 string
679- templ_7745c5c3_Var34, templ_7745c5c3_Err = templ.JoinStringErrs(" → ")
606+ var templ_7745c5c3_Var28 string
607+ templ_7745c5c3_Var28, templ_7745c5c3_Err = templ.JoinStringErrs(" → ")
680608 if templ_7745c5c3_Err != nil {
681- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 131, Col: 15}
609+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 126, Col: 15}
682610 }
683- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var34))
611+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var28))
684612 if templ_7745c5c3_Err != nil {
685613 return templ_7745c5c3_Err
686614 }
@@ -688,119 +616,119 @@ func MergeRequest(l Layout, p MRPage) templ.Component {
688616 if templ_7745c5c3_Err != nil {
689617 return templ_7745c5c3_Err
690618 }
691- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, "</dd><dt>opened</dt><dd>")
619+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 54, "</dd><dt>opened</dt><dd>")
692620 if templ_7745c5c3_Err != nil {
693621 return templ_7745c5c3_Err
694622 }
695- var templ_7745c5c3_Var35 string
696- templ_7745c5c3_Var35, templ_7745c5c3_Err = templ.JoinStringErrs(p.Opened.Name)
623+ var templ_7745c5c3_Var29 string
624+ templ_7745c5c3_Var29, templ_7745c5c3_Err = templ.JoinStringErrs(p.Opened.Name)
697625 if templ_7745c5c3_Err != nil {
698- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 136, Col: 21}
626+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 131, Col: 21}
699627 }
700- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var35))
628+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var29))
701629 if templ_7745c5c3_Err != nil {
702630 return templ_7745c5c3_Err
703631 }
704- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 60, " ")
632+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, " ")
705633 if templ_7745c5c3_Err != nil {
706634 return templ_7745c5c3_Err
707635 }
708636 if p.Opened.WhenAt != "" {
709- var templ_7745c5c3_Var36 string
710- templ_7745c5c3_Var36, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")
637+ var templ_7745c5c3_Var30 string
638+ templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")
711639 if templ_7745c5c3_Err != nil {
712- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 138, Col: 15}
640+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 133, Col: 15}
713641 }
714- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var36))
642+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var30))
715643 if templ_7745c5c3_Err != nil {
716644 return templ_7745c5c3_Err
717645 }
718- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "<time datetime=\"")
646+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 56, "<time datetime=\"")
719647 if templ_7745c5c3_Err != nil {
720648 return templ_7745c5c3_Err
721649 }
722- var templ_7745c5c3_Var37 string
723- templ_7745c5c3_Var37, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Opened.WhenAt)
650+ var templ_7745c5c3_Var31 string
651+ templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Opened.WhenAt)
724652 if templ_7745c5c3_Err != nil {
725- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 138, Col: 49}
653+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 133, Col: 49}
726654 }
727- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var37)
655+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var31)
728656 if templ_7745c5c3_Err != nil {
729657 return templ_7745c5c3_Err
730658 }
731- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, "\" title=\"")
659+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "\" title=\"")
732660 if templ_7745c5c3_Err != nil {
733661 return templ_7745c5c3_Err
734662 }
735- var templ_7745c5c3_Var38 string
736- templ_7745c5c3_Var38, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Opened.Abs)
663+ var templ_7745c5c3_Var32 string
664+ templ_7745c5c3_Var32, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Opened.Abs)
737665 if templ_7745c5c3_Err != nil {
738- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 138, Col: 72}
666+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 133, Col: 72}
739667 }
740- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var38)
668+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var32)
741669 if templ_7745c5c3_Err != nil {
742670 return templ_7745c5c3_Err
743671 }
744- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 63, "\">")
672+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "\">")
745673 if templ_7745c5c3_Err != nil {
746674 return templ_7745c5c3_Err
747675 }
748- var templ_7745c5c3_Var39 string
749- templ_7745c5c3_Var39, templ_7745c5c3_Err = templ.JoinStringErrs(p.Opened.When)
676+ var templ_7745c5c3_Var33 string
677+ templ_7745c5c3_Var33, templ_7745c5c3_Err = templ.JoinStringErrs(p.Opened.When)
750678 if templ_7745c5c3_Err != nil {
751- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 138, Col: 90}
679+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 133, Col: 90}
752680 }
753- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var39))
681+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var33))
754682 if templ_7745c5c3_Err != nil {
755683 return templ_7745c5c3_Err
756684 }
757- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 64, "</time>")
685+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, "</time>")
758686 if templ_7745c5c3_Err != nil {
759687 return templ_7745c5c3_Err
760688 }
761689 }
762- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 65, "</dd>")
690+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 60, "</dd>")
763691 if templ_7745c5c3_Err != nil {
764692 return templ_7745c5c3_Err
765693 }
766694 if p.UpdatedAt != "" {
767- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 66, "<dt>updated</dt><dd><time datetime=\"")
695+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "<dt>updated</dt><dd><time datetime=\"")
768696 if templ_7745c5c3_Err != nil {
769697 return templ_7745c5c3_Err
770698 }
771- var templ_7745c5c3_Var40 string
772- templ_7745c5c3_Var40, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.UpdatedAt)
699+ var templ_7745c5c3_Var34 string
700+ templ_7745c5c3_Var34, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.UpdatedAt)
773701 if templ_7745c5c3_Err != nil {
774- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 143, Col: 38}
702+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 138, Col: 38}
775703 }
776- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var40)
704+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var34)
777705 if templ_7745c5c3_Err != nil {
778706 return templ_7745c5c3_Err
779707 }
780- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 67, "\">")
708+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, "\">")
781709 if templ_7745c5c3_Err != nil {
782710 return templ_7745c5c3_Err
783711 }
784- var templ_7745c5c3_Var41 string
785- templ_7745c5c3_Var41, templ_7745c5c3_Err = templ.JoinStringErrs(p.Updated)
712+ var templ_7745c5c3_Var35 string
713+ templ_7745c5c3_Var35, templ_7745c5c3_Err = templ.JoinStringErrs(p.Updated)
786714 if templ_7745c5c3_Err != nil {
787- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 143, Col: 52}
715+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 138, Col: 52}
788716 }
789- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var41))
717+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var35))
790718 if templ_7745c5c3_Err != nil {
791719 return templ_7745c5c3_Err
792720 }
793- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 68, "</time></dd>")
721+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 63, "</time></dd>")
794722 if templ_7745c5c3_Err != nil {
795723 return templ_7745c5c3_Err
796724 }
797725 }
798- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 69, "</dl></header>")
726+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 64, "</dl></header>")
799727 if templ_7745c5c3_Err != nil {
800728 return templ_7745c5c3_Err
801729 }
802730 if p.Desc != "" {
803- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, "<article class=\"mr-desc prose\" aria-label=\"description\" hx-ignore>")
731+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 65, "<article class=\"mr-desc prose\" aria-label=\"description\" hx-ignore>")
804732 if templ_7745c5c3_Err != nil {
805733 return templ_7745c5c3_Err
806734 }
@@ -808,7 +736,7 @@ func MergeRequest(l Layout, p MRPage) templ.Component {
808736 if templ_7745c5c3_Err != nil {
809737 return templ_7745c5c3_Err
810738 }
811- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 71, "</article>")
739+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 66, "</article>")
812740 if templ_7745c5c3_Err != nil {
813741 return templ_7745c5c3_Err
814742 }
@@ -817,53 +745,53 @@ func MergeRequest(l Layout, p MRPage) templ.Component {
817745 if templ_7745c5c3_Err != nil {
818746 return templ_7745c5c3_Err
819747 }
820- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 72, "</section>")
748+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 67, "</section>")
821749 if templ_7745c5c3_Err != nil {
822750 return templ_7745c5c3_Err
823751 }
824752 if p.Deleting != "" {
825- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 73, "<p class=\"note\" role=\"status\">merged. the branch ")
753+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 68, "<p class=\"note\" role=\"status\">merged. the branch ")
826754 if templ_7745c5c3_Err != nil {
827755 return templ_7745c5c3_Err
828756 }
829- var templ_7745c5c3_Var42 string
830- templ_7745c5c3_Var42, templ_7745c5c3_Err = templ.JoinStringErrs(p.Deleting)
757+ var templ_7745c5c3_Var36 string
758+ templ_7745c5c3_Var36, templ_7745c5c3_Err = templ.JoinStringErrs(p.Deleting)
831759 if templ_7745c5c3_Err != nil {
832- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 155, Col: 64}
760+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 150, Col: 64}
833761 }
834- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var42))
762+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var36))
835763 if templ_7745c5c3_Err != nil {
836764 return templ_7745c5c3_Err
837765 }
838- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 74, " is being deleted.</p>")
766+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 69, " is being deleted.</p>")
839767 if templ_7745c5c3_Err != nil {
840768 return templ_7745c5c3_Err
841769 }
842770 }
843- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 75, " ")
771+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, " ")
844772 if templ_7745c5c3_Err != nil {
845773 return templ_7745c5c3_Err
846774 }
847775 if p.MergeError != "" {
848- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 76, "<p class=\"d-err\" role=\"alert\">")
776+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 71, "<p class=\"d-err\" role=\"alert\">")
849777 if templ_7745c5c3_Err != nil {
850778 return templ_7745c5c3_Err
851779 }
852- var templ_7745c5c3_Var43 string
853- templ_7745c5c3_Var43, templ_7745c5c3_Err = templ.JoinStringErrs(p.MergeError)
780+ var templ_7745c5c3_Var37 string
781+ templ_7745c5c3_Var37, templ_7745c5c3_Err = templ.JoinStringErrs(p.MergeError)
854782 if templ_7745c5c3_Err != nil {
855- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 158, Col: 47}
783+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 153, Col: 47}
856784 }
857- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var43))
785+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var37))
858786 if templ_7745c5c3_Err != nil {
859787 return templ_7745c5c3_Err
860788 }
861- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 77, "</p>")
789+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 72, "</p>")
862790 if templ_7745c5c3_Err != nil {
863791 return templ_7745c5c3_Err
864792 }
865793 }
866- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 78, " ")
794+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 73, " ")
867795 if templ_7745c5c3_Err != nil {
868796 return templ_7745c5c3_Err
869797 }
@@ -871,131 +799,131 @@ func MergeRequest(l Layout, p MRPage) templ.Component {
871799 if templ_7745c5c3_Err != nil {
872800 return templ_7745c5c3_Err
873801 }
874- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 79, " <div id=\"mr-refresh-status\" role=\"status\" aria-live=\"polite\"></div><div id=\"mr-range\"")
802+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 74, " <div id=\"mr-refresh-status\" role=\"status\" aria-live=\"polite\"></div><div id=\"mr-range\"")
875803 if templ_7745c5c3_Err != nil {
876804 return templ_7745c5c3_Err
877805 }
878806 if p.Since == nil && p.SinceNote == "" {
879- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 80, " hidden")
807+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 75, " hidden")
880808 if templ_7745c5c3_Err != nil {
881809 return templ_7745c5c3_Err
882810 }
883811 }
884- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 81, ">")
812+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 76, ">")
885813 if templ_7745c5c3_Err != nil {
886814 return templ_7745c5c3_Err
887815 }
888816 if p.Since != nil {
889- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 82, "<nav class=\"since\" aria-label=\"Diff range\"><a href=\"")
817+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 77, "<nav class=\"since\" aria-label=\"Diff range\"><a href=\"")
890818 if templ_7745c5c3_Err != nil {
891819 return templ_7745c5c3_Err
892820 }
893- var templ_7745c5c3_Var44 templ.SafeURL
894- templ_7745c5c3_Var44, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Since.AllHref))
821+ var templ_7745c5c3_Var38 templ.SafeURL
822+ templ_7745c5c3_Var38, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Since.AllHref))
895823 if templ_7745c5c3_Err != nil {
896- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 166, Col: 43}
824+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 161, Col: 43}
897825 }
898- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var44))
826+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var38))
899827 if templ_7745c5c3_Err != nil {
900828 return templ_7745c5c3_Err
901829 }
902- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 83, "\"")
830+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 78, "\"")
903831 if templ_7745c5c3_Err != nil {
904832 return templ_7745c5c3_Err
905833 }
906834 if !p.Since.Current {
907- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 84, " aria-current=\"page\"")
835+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 79, " aria-current=\"page\"")
908836 if templ_7745c5c3_Err != nil {
909837 return templ_7745c5c3_Err
910838 }
911839 }
912- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 85, ">all changes <span class=\"mute\">vs ")
840+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 80, ">all changes <span class=\"mute\">vs ")
913841 if templ_7745c5c3_Err != nil {
914842 return templ_7745c5c3_Err
915843 }
916- var templ_7745c5c3_Var45 string
917- templ_7745c5c3_Var45, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
844+ var templ_7745c5c3_Var39 string
845+ templ_7745c5c3_Var39, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
918846 if templ_7745c5c3_Err != nil {
919- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 170, Col: 50}
847+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 165, Col: 50}
920848 }
921- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var45))
849+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var39))
922850 if templ_7745c5c3_Err != nil {
923851 return templ_7745c5c3_Err
924852 }
925- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 86, "</span></a> <a href=\"")
853+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 81, "</span></a> <a href=\"")
926854 if templ_7745c5c3_Err != nil {
927855 return templ_7745c5c3_Err
928856 }
929- var templ_7745c5c3_Var46 templ.SafeURL
930- templ_7745c5c3_Var46, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Since.SinceHref))
857+ var templ_7745c5c3_Var40 templ.SafeURL
858+ templ_7745c5c3_Var40, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Since.SinceHref))
931859 if templ_7745c5c3_Err != nil {
932- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 172, Col: 45}
860+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 167, Col: 45}
933861 }
934- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var46))
862+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var40))
935863 if templ_7745c5c3_Err != nil {
936864 return templ_7745c5c3_Err
937865 }
938- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 87, "\"")
866+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 82, "\"")
939867 if templ_7745c5c3_Err != nil {
940868 return templ_7745c5c3_Err
941869 }
942870 if p.Since.Current {
943- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 88, " aria-current=\"page\"")
871+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 83, " aria-current=\"page\"")
944872 if templ_7745c5c3_Err != nil {
945873 return templ_7745c5c3_Err
946874 }
947875 }
948- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 89, ">since your last read <span class=\"mute\">")
876+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 84, ">since your last read <span class=\"mute\">")
949877 if templ_7745c5c3_Err != nil {
950878 return templ_7745c5c3_Err
951879 }
952- var templ_7745c5c3_Var47 string
953- templ_7745c5c3_Var47, templ_7745c5c3_Err = templ.JoinStringErrs(p.Since.ReadShort)
880+ var templ_7745c5c3_Var41 string
881+ templ_7745c5c3_Var41, templ_7745c5c3_Err = templ.JoinStringErrs(p.Since.ReadShort)
954882 if templ_7745c5c3_Err != nil {
955- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 176, Col: 65}
883+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 171, Col: 65}
956884 }
957- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var47))
885+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var41))
958886 if templ_7745c5c3_Err != nil {
959887 return templ_7745c5c3_Err
960888 }
961- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 90, " → ")
889+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 85, " → ")
962890 if templ_7745c5c3_Err != nil {
963891 return templ_7745c5c3_Err
964892 }
965- var templ_7745c5c3_Var48 string
966- templ_7745c5c3_Var48, templ_7745c5c3_Err = templ.JoinStringErrs(p.Since.HeadShort)
893+ var templ_7745c5c3_Var42 string
894+ templ_7745c5c3_Var42, templ_7745c5c3_Err = templ.JoinStringErrs(p.Since.HeadShort)
967895 if templ_7745c5c3_Err != nil {
968- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 176, Col: 91}
896+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 171, Col: 91}
969897 }
970- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var48))
898+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var42))
971899 if templ_7745c5c3_Err != nil {
972900 return templ_7745c5c3_Err
973901 }
974- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 91, "</span></a></nav>")
902+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 86, "</span></a></nav>")
975903 if templ_7745c5c3_Err != nil {
976904 return templ_7745c5c3_Err
977905 }
978906 }
979907 if p.SinceNote != "" {
980- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 92, "<p class=\"notice\">")
908+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 87, "<p class=\"notice\">")
981909 if templ_7745c5c3_Err != nil {
982910 return templ_7745c5c3_Err
983911 }
984- var templ_7745c5c3_Var49 string
985- templ_7745c5c3_Var49, templ_7745c5c3_Err = templ.JoinStringErrs(p.SinceNote)
912+ var templ_7745c5c3_Var43 string
913+ templ_7745c5c3_Var43, templ_7745c5c3_Err = templ.JoinStringErrs(p.SinceNote)
986914 if templ_7745c5c3_Err != nil {
987- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 180, Col: 35}
915+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 175, Col: 35}
988916 }
989- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var49))
917+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var43))
990918 if templ_7745c5c3_Err != nil {
991919 return templ_7745c5c3_Err
992920 }
993- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 93, "</p>")
921+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 88, "</p>")
994922 if templ_7745c5c3_Err != nil {
995923 return templ_7745c5c3_Err
996924 }
997925 }
998- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 94, "</div>")
926+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 89, "</div>")
999927 if templ_7745c5c3_Err != nil {
1000928 return templ_7745c5c3_Err
1001929 }
@@ -1003,112 +931,112 @@ func MergeRequest(l Layout, p MRPage) templ.Component {
1003931 if templ_7745c5c3_Err != nil {
1004932 return templ_7745c5c3_Err
1005933 }
1006- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 95, " <div id=\"mr-diff-notices\"")
934+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 90, " <div id=\"mr-diff-notices\"")
1007935 if templ_7745c5c3_Err != nil {
1008936 return templ_7745c5c3_Err
1009937 }
1010938 if !p.Invisible && p.Note == "" {
1011- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 96, " hidden")
939+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 91, " hidden")
1012940 if templ_7745c5c3_Err != nil {
1013941 return templ_7745c5c3_Err
1014942 }
1015943 }
1016- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 97, ">")
944+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 92, ">")
1017945 if templ_7745c5c3_Err != nil {
1018946 return templ_7745c5c3_Err
1019947 }
1020948 if p.Invisible {
1021- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 98, "<p class=\"notice\">this diff holds invisible characters (direction controls, zero-width characters). They are shown as <span class=\"inv\">&lt;U+XXXX&gt;</span> markers, never applied.</p>")
949+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 93, "<p class=\"notice\">this diff holds invisible characters (direction controls, zero-width characters). They are shown as <span class=\"inv\">&lt;U+XXXX&gt;</span> markers, never applied.</p>")
1022950 if templ_7745c5c3_Err != nil {
1023951 return templ_7745c5c3_Err
1024952 }
1025953 }
1026954 if p.Note != "" {
1027- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 99, "<p class=\"notice\">")
955+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 94, "<p class=\"notice\">")
1028956 if templ_7745c5c3_Err != nil {
1029957 return templ_7745c5c3_Err
1030958 }
1031- var templ_7745c5c3_Var50 string
1032- templ_7745c5c3_Var50, templ_7745c5c3_Err = templ.JoinStringErrs(p.Note)
959+ var templ_7745c5c3_Var44 string
960+ templ_7745c5c3_Var44, templ_7745c5c3_Err = templ.JoinStringErrs(p.Note)
1033961 if templ_7745c5c3_Err != nil {
1034- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 192, Col: 30}
962+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 187, Col: 30}
1035963 }
1036- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var50))
964+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var44))
1037965 if templ_7745c5c3_Err != nil {
1038966 return templ_7745c5c3_Err
1039967 }
1040- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 100, "</p>")
968+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 95, "</p>")
1041969 if templ_7745c5c3_Err != nil {
1042970 return templ_7745c5c3_Err
1043971 }
1044972 }
1045- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 101, "</div><div id=\"diffs\" data-mr")
973+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 96, "</div><div id=\"diffs\" data-mr")
1046974 if templ_7745c5c3_Err != nil {
1047975 return templ_7745c5c3_Err
1048976 }
1049977 if p.Canonical != "" {
1050- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 102, " data-canonical=\"")
978+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 97, " data-canonical=\"")
1051979 if templ_7745c5c3_Err != nil {
1052980 return templ_7745c5c3_Err
1053981 }
1054- var templ_7745c5c3_Var51 string
1055- templ_7745c5c3_Var51, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Canonical)
982+ var templ_7745c5c3_Var45 string
983+ templ_7745c5c3_Var45, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Canonical)
1056984 if templ_7745c5c3_Err != nil {
1057- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 199, Col: 32}
985+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 194, Col: 32}
1058986 }
1059- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var51)
987+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var45)
1060988 if templ_7745c5c3_Err != nil {
1061989 return templ_7745c5c3_Err
1062990 }
1063- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 103, "\"")
991+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 98, "\"")
1064992 if templ_7745c5c3_Err != nil {
1065993 return templ_7745c5c3_Err
1066994 }
1067995 }
1068996 if p.Both {
1069- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 104, " data-diff=\"")
997+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 99, " data-diff=\"")
1070998 if templ_7745c5c3_Err != nil {
1071999 return templ_7745c5c3_Err
10721000 }
1073- var templ_7745c5c3_Var52 string
1074- templ_7745c5c3_Var52, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
1001+ var templ_7745c5c3_Var46 string
1002+ templ_7745c5c3_Var46, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
10751003 if templ_7745c5c3_Err != nil {
1076- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 202, Col: 22}
1004+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 197, Col: 22}
10771005 }
1078- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var52)
1006+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var46)
10791007 if templ_7745c5c3_Err != nil {
10801008 return templ_7745c5c3_Err
10811009 }
1082- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 105, "\"")
1010+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 100, "\"")
10831011 if templ_7745c5c3_Err != nil {
10841012 return templ_7745c5c3_Err
10851013 }
10861014 } else {
1087- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 106, " data-view=\"")
1015+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 101, " data-view=\"")
10881016 if templ_7745c5c3_Err != nil {
10891017 return templ_7745c5c3_Err
10901018 }
1091- var templ_7745c5c3_Var53 string
1092- templ_7745c5c3_Var53, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
1019+ var templ_7745c5c3_Var47 string
1020+ templ_7745c5c3_Var47, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
10931021 if templ_7745c5c3_Err != nil {
1094- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 204, Col: 22}
1022+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 199, Col: 22}
10951023 }
1096- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var53)
1024+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var47)
10971025 if templ_7745c5c3_Err != nil {
10981026 return templ_7745c5c3_Err
10991027 }
1100- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 107, "\"")
1028+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 102, "\"")
11011029 if templ_7745c5c3_Err != nil {
11021030 return templ_7745c5c3_Err
11031031 }
11041032 }
11051033 if p.Both && !p.Pinned {
1106- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 108, " hx-live=\"this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff\"")
1034+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 103, " hx-live=\"this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff\"")
11071035 if templ_7745c5c3_Err != nil {
11081036 return templ_7745c5c3_Err
11091037 }
11101038 }
1111- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 109, ">")
1039+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 104, ">")
11121040 if templ_7745c5c3_Err != nil {
11131041 return templ_7745c5c3_Err
11141042 }
@@ -1119,38 +1047,38 @@ func MergeRequest(l Layout, p MRPage) templ.Component {
11191047 }
11201048 }
11211049 if len(p.Files) == 0 {
1122- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 110, "<p class=\"note\">no changed files.</p>")
1050+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 105, "<p class=\"note\">no changed files.</p>")
11231051 if templ_7745c5c3_Err != nil {
11241052 return templ_7745c5c3_Err
11251053 }
11261054 }
1127- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 111, "</div><div id=\"mr-comments\"><h2 class=\"rule-h\" id=\"comments\"><span>Comments</span><span class=\"count\">")
1055+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 106, "</div><div id=\"mr-comments\"><h2 class=\"rule-h\" id=\"comments\"><span>Comments</span><span class=\"count\">")
11281056 if templ_7745c5c3_Err != nil {
11291057 return templ_7745c5c3_Err
11301058 }
1131- var templ_7745c5c3_Var54 string
1132- templ_7745c5c3_Var54, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.NUnresolved))
1059+ var templ_7745c5c3_Var48 string
1060+ templ_7745c5c3_Var48, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.NUnresolved))
11331061 if templ_7745c5c3_Err != nil {
1134- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 218, Col: 97}
1062+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 213, Col: 98}
11351063 }
1136- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var54))
1064+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var48))
11371065 if templ_7745c5c3_Err != nil {
11381066 return templ_7745c5c3_Err
11391067 }
1140- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 112, " open / ")
1068+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 107, " open / ")
11411069 if templ_7745c5c3_Err != nil {
11421070 return templ_7745c5c3_Err
11431071 }
1144- var templ_7745c5c3_Var55 string
1145- templ_7745c5c3_Var55, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.NComments))
1072+ var templ_7745c5c3_Var49 string
1073+ templ_7745c5c3_Var49, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.NComments))
11461074 if templ_7745c5c3_Err != nil {
1147- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 218, Col: 126}
1075+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 213, Col: 127}
11481076 }
1149- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var55))
1077+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var49))
11501078 if templ_7745c5c3_Err != nil {
11511079 return templ_7745c5c3_Err
11521080 }
1153- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 113, "</span></h2>")
1081+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 108, "</span></h2>")
11541082 if templ_7745c5c3_Err != nil {
11551083 return templ_7745c5c3_Err
11561084 }
@@ -1167,7 +1095,7 @@ func MergeRequest(l Layout, p MRPage) templ.Component {
11671095 }
11681096 }
11691097 if p.NComments == 0 {
1170- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 114, "<p class=\"dim\">no comments yet.</p>")
1098+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 109, "<p class=\"dim\">no comments yet.</p>")
11711099 if templ_7745c5c3_Err != nil {
11721100 return templ_7745c5c3_Err
11731101 }
@@ -1178,7 +1106,7 @@ func MergeRequest(l Layout, p MRPage) templ.Component {
11781106 return templ_7745c5c3_Err
11791107 }
11801108 }
1181- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 115, "</div>")
1109+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 110, "</div>")
11821110 if templ_7745c5c3_Err != nil {
11831111 return templ_7745c5c3_Err
11841112 }
@@ -1208,49 +1136,49 @@ func branchLink(name, href string) templ.Component {
12081136 }()
12091137 }
12101138 ctx = templ.InitializeContext(ctx)
1211- templ_7745c5c3_Var56 := templ.GetChildren(ctx)
1212- if templ_7745c5c3_Var56 == nil {
1213- templ_7745c5c3_Var56 = templ.NopComponent
1139+ templ_7745c5c3_Var50 := templ.GetChildren(ctx)
1140+ if templ_7745c5c3_Var50 == nil {
1141+ templ_7745c5c3_Var50 = templ.NopComponent
12141142 }
12151143 ctx = templ.ClearChildren(ctx)
12161144 if href != "" {
1217- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 116, "<a href=\"")
1145+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 111, "<a href=\"")
12181146 if templ_7745c5c3_Err != nil {
12191147 return templ_7745c5c3_Err
12201148 }
1221- var templ_7745c5c3_Var57 templ.SafeURL
1222- templ_7745c5c3_Var57, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(href))
1149+ var templ_7745c5c3_Var51 templ.SafeURL
1150+ templ_7745c5c3_Var51, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(href))
12231151 if templ_7745c5c3_Err != nil {
1224- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 237, Col: 31}
1152+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 232, Col: 31}
12251153 }
1226- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var57))
1154+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var51))
12271155 if templ_7745c5c3_Err != nil {
12281156 return templ_7745c5c3_Err
12291157 }
1230- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 117, "\">")
1158+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 112, "\">")
12311159 if templ_7745c5c3_Err != nil {
12321160 return templ_7745c5c3_Err
12331161 }
1234- var templ_7745c5c3_Var58 string
1235- templ_7745c5c3_Var58, templ_7745c5c3_Err = templ.JoinStringErrs(name)
1162+ var templ_7745c5c3_Var52 string
1163+ templ_7745c5c3_Var52, templ_7745c5c3_Err = templ.JoinStringErrs(name)
12361164 if templ_7745c5c3_Err != nil {
1237- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 237, Col: 40}
1165+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 232, Col: 40}
12381166 }
1239- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var58))
1167+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var52))
12401168 if templ_7745c5c3_Err != nil {
12411169 return templ_7745c5c3_Err
12421170 }
1243- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 118, "</a>")
1171+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 113, "</a>")
12441172 if templ_7745c5c3_Err != nil {
12451173 return templ_7745c5c3_Err
12461174 }
12471175 } else {
1248- var templ_7745c5c3_Var59 string
1249- templ_7745c5c3_Var59, templ_7745c5c3_Err = templ.JoinStringErrs(name)
1176+ var templ_7745c5c3_Var53 string
1177+ templ_7745c5c3_Var53, templ_7745c5c3_Err = templ.JoinStringErrs(name)
12501178 if templ_7745c5c3_Err != nil {
1251- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 239, Col: 8}
1179+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 234, Col: 8}
12521180 }
1253- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var59))
1181+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var53))
12541182 if templ_7745c5c3_Err != nil {
12551183 return templ_7745c5c3_Err
12561184 }
@@ -1278,9 +1206,9 @@ func lineNotes(notes []CommentView, form *CommentForm, suffix string) templ.Comp
12781206 }()
12791207 }
12801208 ctx = templ.InitializeContext(ctx)
1281- templ_7745c5c3_Var60 := templ.GetChildren(ctx)
1282- if templ_7745c5c3_Var60 == nil {
1283- templ_7745c5c3_Var60 = templ.NopComponent
1209+ templ_7745c5c3_Var54 := templ.GetChildren(ctx)
1210+ if templ_7745c5c3_Var54 == nil {
1211+ templ_7745c5c3_Var54 = templ.NopComponent
12841212 }
12851213 ctx = templ.ClearChildren(ctx)
12861214 for _, c := range notes {
@@ -1317,182 +1245,182 @@ func commentView(c CommentView, suffix string) templ.Component {
13171245 }()
13181246 }
13191247 ctx = templ.InitializeContext(ctx)
1320- templ_7745c5c3_Var61 := templ.GetChildren(ctx)
1321- if templ_7745c5c3_Var61 == nil {
1322- templ_7745c5c3_Var61 = templ.NopComponent
1248+ templ_7745c5c3_Var55 := templ.GetChildren(ctx)
1249+ if templ_7745c5c3_Var55 == nil {
1250+ templ_7745c5c3_Var55 = templ.NopComponent
13231251 }
13241252 ctx = templ.ClearChildren(ctx)
1325- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 119, "<div class=\"cmt\" id=\"")
1253+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 114, "<div class=\"cmt\" id=\"")
13261254 if templ_7745c5c3_Err != nil {
13271255 return templ_7745c5c3_Err
13281256 }
1329- var templ_7745c5c3_Var62 string
1330- templ_7745c5c3_Var62, templ_7745c5c3_Err = templ.ResolveAttributeValue("c" + c.ID + suffix)
1257+ var templ_7745c5c3_Var56 string
1258+ templ_7745c5c3_Var56, templ_7745c5c3_Err = templ.ResolveAttributeValue("c" + c.ID + suffix)
13311259 if templ_7745c5c3_Err != nil {
1332- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 258, Col: 42}
1260+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 253, Col: 42}
13331261 }
1334- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var62)
1262+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var56)
13351263 if templ_7745c5c3_Err != nil {
13361264 return templ_7745c5c3_Err
13371265 }
1338- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 120, "\" data-resolved=\"")
1266+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 115, "\" data-resolved=\"")
13391267 if templ_7745c5c3_Err != nil {
13401268 return templ_7745c5c3_Err
13411269 }
1342- var templ_7745c5c3_Var63 string
1343- templ_7745c5c3_Var63, templ_7745c5c3_Err = templ.ResolveAttributeValue(boolText(c.Resolved))
1270+ var templ_7745c5c3_Var57 string
1271+ templ_7745c5c3_Var57, templ_7745c5c3_Err = templ.ResolveAttributeValue(boolText(c.Resolved))
13441272 if templ_7745c5c3_Err != nil {
1345- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 258, Col: 81}
1273+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 253, Col: 81}
13461274 }
1347- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var63)
1275+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var57)
13481276 if templ_7745c5c3_Err != nil {
13491277 return templ_7745c5c3_Err
13501278 }
1351- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 121, "\"")
1279+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 116, "\"")
13521280 if templ_7745c5c3_Err != nil {
13531281 return templ_7745c5c3_Err
13541282 }
13551283 if c.Reply != nil {
1356- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 122, " data-thread")
1284+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 117, " data-thread")
13571285 if templ_7745c5c3_Err != nil {
13581286 return templ_7745c5c3_Err
13591287 }
13601288 }
1361- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 123, "><p class=\"c-head\"><span class=\"c-who\">")
1289+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 118, "><p class=\"c-head\"><span class=\"c-who\">")
13621290 if templ_7745c5c3_Err != nil {
13631291 return templ_7745c5c3_Err
13641292 }
1365- var templ_7745c5c3_Var64 string
1366- templ_7745c5c3_Var64, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)
1293+ var templ_7745c5c3_Var58 string
1294+ templ_7745c5c3_Var58, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)
13671295 if templ_7745c5c3_Err != nil {
1368- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 260, Col: 33}
1296+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 255, Col: 33}
13691297 }
1370- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var64))
1298+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var58))
13711299 if templ_7745c5c3_Err != nil {
13721300 return templ_7745c5c3_Err
13731301 }
1374- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 124, "</span> ")
1302+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 119, "</span> ")
13751303 if templ_7745c5c3_Err != nil {
13761304 return templ_7745c5c3_Err
13771305 }
13781306 if c.WhenAt != "" {
1379- var templ_7745c5c3_Var65 string
1380- templ_7745c5c3_Var65, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
1307+ var templ_7745c5c3_Var59 string
1308+ templ_7745c5c3_Var59, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
13811309 if templ_7745c5c3_Err != nil {
1382- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 262, Col: 9}
1310+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 257, Col: 9}
13831311 }
1384- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var65))
1312+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var59))
13851313 if templ_7745c5c3_Err != nil {
13861314 return templ_7745c5c3_Err
13871315 }
1388- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 125, "<time class=\"mute\" datetime=\"")
1316+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 120, "<time class=\"mute\" datetime=\"")
13891317 if templ_7745c5c3_Err != nil {
13901318 return templ_7745c5c3_Err
13911319 }
1392- var templ_7745c5c3_Var66 string
1393- templ_7745c5c3_Var66, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
1320+ var templ_7745c5c3_Var60 string
1321+ templ_7745c5c3_Var60, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
13941322 if templ_7745c5c3_Err != nil {
1395- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 262, Col: 49}
1323+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 257, Col: 49}
13961324 }
1397- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var66)
1325+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var60)
13981326 if templ_7745c5c3_Err != nil {
13991327 return templ_7745c5c3_Err
14001328 }
1401- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 126, "\" title=\"")
1329+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 121, "\" title=\"")
14021330 if templ_7745c5c3_Err != nil {
14031331 return templ_7745c5c3_Err
14041332 }
1405- var templ_7745c5c3_Var67 string
1406- templ_7745c5c3_Var67, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.Abs)
1333+ var templ_7745c5c3_Var61 string
1334+ templ_7745c5c3_Var61, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.Abs)
14071335 if templ_7745c5c3_Err != nil {
1408- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 262, Col: 65}
1336+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 257, Col: 65}
14091337 }
1410- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var67)
1338+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var61)
14111339 if templ_7745c5c3_Err != nil {
14121340 return templ_7745c5c3_Err
14131341 }
1414- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 127, "\">")
1342+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 122, "\">")
14151343 if templ_7745c5c3_Err != nil {
14161344 return templ_7745c5c3_Err
14171345 }
1418- var templ_7745c5c3_Var68 string
1419- templ_7745c5c3_Var68, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)
1346+ var templ_7745c5c3_Var62 string
1347+ templ_7745c5c3_Var62, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)
14201348 if templ_7745c5c3_Err != nil {
1421- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 262, Col: 76}
1349+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 257, Col: 76}
14221350 }
1423- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var68))
1351+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var62))
14241352 if templ_7745c5c3_Err != nil {
14251353 return templ_7745c5c3_Err
14261354 }
1427- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 128, "</time> ")
1355+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 123, "</time> ")
14281356 if templ_7745c5c3_Err != nil {
14291357 return templ_7745c5c3_Err
14301358 }
14311359 }
14321360 if c.Resolved {
1433- var templ_7745c5c3_Var69 string
1434- templ_7745c5c3_Var69, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
1361+ var templ_7745c5c3_Var63 string
1362+ templ_7745c5c3_Var63, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
14351363 if templ_7745c5c3_Err != nil {
1436- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 265, Col: 9}
1364+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 260, Col: 9}
14371365 }
1438- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var69))
1366+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var63))
14391367 if templ_7745c5c3_Err != nil {
14401368 return templ_7745c5c3_Err
14411369 }
1442- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 129, "<span class=\"c-state\">resolved</span> ")
1370+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 124, "<span class=\"c-state\">resolved</span> ")
14431371 if templ_7745c5c3_Err != nil {
14441372 return templ_7745c5c3_Err
14451373 }
14461374 }
14471375 if c.Outdated {
1448- var templ_7745c5c3_Var70 string
1449- templ_7745c5c3_Var70, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
1376+ var templ_7745c5c3_Var64 string
1377+ templ_7745c5c3_Var64, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
14501378 if templ_7745c5c3_Err != nil {
1451- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 268, Col: 9}
1379+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 263, Col: 9}
14521380 }
1453- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var70))
1381+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var64))
14541382 if templ_7745c5c3_Err != nil {
14551383 return templ_7745c5c3_Err
14561384 }
1457- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 130, "<span class=\"c-state\" title=\"written on an earlier head; the line may have moved\">outdated</span> ")
1385+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 125, "<span class=\"c-state\" title=\"written on an earlier head; the line may have moved\">outdated</span> ")
14581386 if templ_7745c5c3_Err != nil {
14591387 return templ_7745c5c3_Err
14601388 }
14611389 }
14621390 if c.Where != "" {
1463- var templ_7745c5c3_Var71 string
1464- templ_7745c5c3_Var71, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
1391+ var templ_7745c5c3_Var65 string
1392+ templ_7745c5c3_Var65, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
14651393 if templ_7745c5c3_Err != nil {
1466- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 271, Col: 9}
1394+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 266, Col: 9}
14671395 }
1468- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var71))
1396+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var65))
14691397 if templ_7745c5c3_Err != nil {
14701398 return templ_7745c5c3_Err
14711399 }
1472- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 131, "<span class=\"c-where mute\">")
1400+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 126, "<span class=\"c-where mute\">")
14731401 if templ_7745c5c3_Err != nil {
14741402 return templ_7745c5c3_Err
14751403 }
1476- var templ_7745c5c3_Var72 string
1477- templ_7745c5c3_Var72, templ_7745c5c3_Err = templ.JoinStringErrs(c.Where)
1404+ var templ_7745c5c3_Var66 string
1405+ templ_7745c5c3_Var66, templ_7745c5c3_Err = templ.JoinStringErrs(c.Where)
14781406 if templ_7745c5c3_Err != nil {
1479- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 271, Col: 47}
1407+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 266, Col: 47}
14801408 }
1481- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var72))
1409+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var66))
14821410 if templ_7745c5c3_Err != nil {
14831411 return templ_7745c5c3_Err
14841412 }
1485- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 132, "</span>")
1413+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 127, "</span>")
14861414 if templ_7745c5c3_Err != nil {
14871415 return templ_7745c5c3_Err
14881416 }
14891417 }
1490- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 133, "</p>")
1418+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 128, "</p>")
14911419 if templ_7745c5c3_Err != nil {
14921420 return templ_7745c5c3_Err
14931421 }
14941422 if len(c.Parts) > 0 {
1495- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 134, "<p class=\"c-text\">")
1423+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 129, "<p class=\"c-text\">")
14961424 if templ_7745c5c3_Err != nil {
14971425 return templ_7745c5c3_Err
14981426 }
@@ -1500,24 +1428,24 @@ func commentView(c CommentView, suffix string) templ.Component {
15001428 if templ_7745c5c3_Err != nil {
15011429 return templ_7745c5c3_Err
15021430 }
1503- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 135, "</p>")
1431+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 130, "</p>")
15041432 if templ_7745c5c3_Err != nil {
15051433 return templ_7745c5c3_Err
15061434 }
15071435 } else if c.Deleted {
15081436 if c.Verdict != "" {
1509- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 136, "<p class=\"mute\">text deleted</p>")
1437+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 131, "<p class=\"mute\">text deleted</p>")
15101438 if templ_7745c5c3_Err != nil {
15111439 return templ_7745c5c3_Err
15121440 }
15131441 } else {
1514- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 137, "<p class=\"mute\">deleted note</p>")
1442+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 132, "<p class=\"mute\">deleted note</p>")
15151443 if templ_7745c5c3_Err != nil {
15161444 return templ_7745c5c3_Err
15171445 }
15181446 }
15191447 } else {
1520- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 138, "<div class=\"c-body prose\">")
1448+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 133, "<div class=\"c-body prose\">")
15211449 if templ_7745c5c3_Err != nil {
15221450 return templ_7745c5c3_Err
15231451 }
@@ -1532,147 +1460,147 @@ func commentView(c CommentView, suffix string) templ.Component {
15321460 return templ_7745c5c3_Err
15331461 }
15341462 }
1535- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 139, "</div>")
1463+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 134, "</div>")
15361464 if templ_7745c5c3_Err != nil {
15371465 return templ_7745c5c3_Err
15381466 }
15391467 }
15401468 if c.Edited {
1541- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 140, "<span class=\"mute\">edited</span> ")
1469+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 135, "<span class=\"mute\">edited</span> ")
15421470 if templ_7745c5c3_Err != nil {
15431471 return templ_7745c5c3_Err
15441472 }
15451473 }
15461474 if c.Verdict != "" {
1547- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 141, "<span class=\"c-state\">")
1475+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 136, "<span class=\"c-state\">")
15481476 if templ_7745c5c3_Err != nil {
15491477 return templ_7745c5c3_Err
15501478 }
1551- var templ_7745c5c3_Var73 string
1552- templ_7745c5c3_Var73, templ_7745c5c3_Err = templ.JoinStringErrs(c.Verdict)
1479+ var templ_7745c5c3_Var67 string
1480+ templ_7745c5c3_Var67, templ_7745c5c3_Err = templ.JoinStringErrs(c.Verdict)
15531481 if templ_7745c5c3_Err != nil {
1554- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 295, Col: 36}
1482+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 290, Col: 36}
15551483 }
1556- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var73))
1484+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var67))
15571485 if templ_7745c5c3_Err != nil {
15581486 return templ_7745c5c3_Err
15591487 }
1560- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 142, "</span> ")
1488+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 137, "</span> ")
15611489 if templ_7745c5c3_Err != nil {
15621490 return templ_7745c5c3_Err
15631491 }
15641492 }
15651493 if c.Range != "" {
1566- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 143, "<span class=\"mute\">")
1494+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 138, "<span class=\"mute\">")
15671495 if templ_7745c5c3_Err != nil {
15681496 return templ_7745c5c3_Err
15691497 }
1570- var templ_7745c5c3_Var74 string
1571- templ_7745c5c3_Var74, templ_7745c5c3_Err = templ.JoinStringErrs(c.Range)
1498+ var templ_7745c5c3_Var68 string
1499+ templ_7745c5c3_Var68, templ_7745c5c3_Err = templ.JoinStringErrs(c.Range)
15721500 if templ_7745c5c3_Err != nil {
1573- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 298, Col: 31}
1501+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 293, Col: 31}
15741502 }
1575- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var74))
1503+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var68))
15761504 if templ_7745c5c3_Err != nil {
15771505 return templ_7745c5c3_Err
15781506 }
1579- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 144, "</span> ")
1507+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 139, "</span> ")
15801508 if templ_7745c5c3_Err != nil {
15811509 return templ_7745c5c3_Err
15821510 }
15831511 }
15841512 if c.Quote != "" {
1585- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 145, "<button type=\"button\" class=\"btn\" data-js data-quote=\"")
1513+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 140, "<button type=\"button\" class=\"btn\" data-js data-quote=\"")
15861514 if templ_7745c5c3_Err != nil {
15871515 return templ_7745c5c3_Err
15881516 }
1589- var templ_7745c5c3_Var75 string
1590- templ_7745c5c3_Var75, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.Quote)
1517+ var templ_7745c5c3_Var69 string
1518+ templ_7745c5c3_Var69, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.Quote)
15911519 if templ_7745c5c3_Err != nil {
1592- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 301, Col: 65}
1520+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 296, Col: 65}
15931521 }
1594- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var75)
1522+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var69)
15951523 if templ_7745c5c3_Err != nil {
15961524 return templ_7745c5c3_Err
15971525 }
1598- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 146, "\">Quote</button> ")
1526+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 141, "\">Quote</button> ")
15991527 if templ_7745c5c3_Err != nil {
16001528 return templ_7745c5c3_Err
16011529 }
16021530 }
16031531 if c.Edit != nil {
1604- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 147, "<details><summary>Edit</summary><form method=\"post\" action=\"")
1532+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 142, "<details><summary>Edit</summary><form method=\"post\" action=\"")
16051533 if templ_7745c5c3_Err != nil {
16061534 return templ_7745c5c3_Err
16071535 }
1608- var templ_7745c5c3_Var76 templ.SafeURL
1609- templ_7745c5c3_Var76, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Edit.Action))
1536+ var templ_7745c5c3_Var70 templ.SafeURL
1537+ templ_7745c5c3_Var70, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Edit.Action))
16101538 if templ_7745c5c3_Err != nil {
1611- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 304, Col: 92}
1539+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 299, Col: 92}
16121540 }
1613- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var76))
1541+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var70))
16141542 if templ_7745c5c3_Err != nil {
16151543 return templ_7745c5c3_Err
16161544 }
1617- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 148, "\"><input type=\"hidden\" name=\"from\" value=\"")
1545+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 143, "\"><input type=\"hidden\" name=\"from\" value=\"")
16181546 if templ_7745c5c3_Err != nil {
16191547 return templ_7745c5c3_Err
16201548 }
1621- var templ_7745c5c3_Var77 string
1622- templ_7745c5c3_Var77, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(c.Edit.From))
1549+ var templ_7745c5c3_Var71 string
1550+ templ_7745c5c3_Var71, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(c.Edit.From))
16231551 if templ_7745c5c3_Err != nil {
1624- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 304, Col: 153}
1552+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 299, Col: 153}
16251553 }
1626- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var77)
1554+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var71)
16271555 if templ_7745c5c3_Err != nil {
16281556 return templ_7745c5c3_Err
16291557 }
1630- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 149, "\"><textarea name=\"text\" maxlength=\"8000\">")
1558+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 144, "\"><textarea name=\"text\" maxlength=\"8000\">")
16311559 if templ_7745c5c3_Err != nil {
16321560 return templ_7745c5c3_Err
16331561 }
1634- var templ_7745c5c3_Var78 string
1635- templ_7745c5c3_Var78, templ_7745c5c3_Err = templ.JoinStringErrs(c.Edit.Text)
1562+ var templ_7745c5c3_Var72 string
1563+ templ_7745c5c3_Var72, templ_7745c5c3_Err = templ.JoinStringErrs(c.Edit.Text)
16361564 if templ_7745c5c3_Err != nil {
1637- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 304, Col: 209}
1565+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 299, Col: 209}
16381566 }
1639- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var78))
1567+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var72))
16401568 if templ_7745c5c3_Err != nil {
16411569 return templ_7745c5c3_Err
16421570 }
1643- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 150, "</textarea><button class=\"btn\" type=\"submit\">Save</button></form></details> ")
1571+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 145, "</textarea><button class=\"btn\" type=\"submit\">Save</button></form></details> ")
16441572 if templ_7745c5c3_Err != nil {
16451573 return templ_7745c5c3_Err
16461574 }
16471575 }
16481576 if c.Delete != nil {
1649- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 151, "<details><summary>Delete</summary><form method=\"post\" action=\"")
1577+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 146, "<details><summary>Delete</summary><form method=\"post\" action=\"")
16501578 if templ_7745c5c3_Err != nil {
16511579 return templ_7745c5c3_Err
16521580 }
1653- var templ_7745c5c3_Var79 templ.SafeURL
1654- templ_7745c5c3_Var79, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Delete.Action))
1581+ var templ_7745c5c3_Var73 templ.SafeURL
1582+ templ_7745c5c3_Var73, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Delete.Action))
16551583 if templ_7745c5c3_Err != nil {
1656- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 307, Col: 96}
1584+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 302, Col: 96}
16571585 }
1658- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var79))
1586+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var73))
16591587 if templ_7745c5c3_Err != nil {
16601588 return templ_7745c5c3_Err
16611589 }
1662- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 152, "\"><input type=\"hidden\" name=\"from\" value=\"")
1590+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 147, "\"><input type=\"hidden\" name=\"from\" value=\"")
16631591 if templ_7745c5c3_Err != nil {
16641592 return templ_7745c5c3_Err
16651593 }
1666- var templ_7745c5c3_Var80 string
1667- templ_7745c5c3_Var80, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(c.Delete.From))
1594+ var templ_7745c5c3_Var74 string
1595+ templ_7745c5c3_Var74, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(c.Delete.From))
16681596 if templ_7745c5c3_Err != nil {
1669- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 307, Col: 159}
1597+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 302, Col: 159}
16701598 }
1671- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var80)
1599+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var74)
16721600 if templ_7745c5c3_Err != nil {
16731601 return templ_7745c5c3_Err
16741602 }
1675- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 153, "\"><p>Delete this note?</p><button class=\"btn\" type=\"submit\">Confirm delete</button></form></details> ")
1603+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 148, "\"><p>Delete this note?</p><button class=\"btn\" type=\"submit\">Confirm delete</button></form></details> ")
16761604 if templ_7745c5c3_Err != nil {
16771605 return templ_7745c5c3_Err
16781606 }
@@ -1684,7 +1612,7 @@ func commentView(c CommentView, suffix string) templ.Component {
16841612 }
16851613 }
16861614 if c.Reply != nil {
1687- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 154, "<details data-reply><summary>Reply</summary>")
1615+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 149, "<details data-reply><summary>Reply</summary>")
16881616 if templ_7745c5c3_Err != nil {
16891617 return templ_7745c5c3_Err
16901618 }
@@ -1692,80 +1620,80 @@ func commentView(c CommentView, suffix string) templ.Component {
16921620 if templ_7745c5c3_Err != nil {
16931621 return templ_7745c5c3_Err
16941622 }
1695- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 155, "</details> ")
1623+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 150, "</details> ")
16961624 if templ_7745c5c3_Err != nil {
16971625 return templ_7745c5c3_Err
16981626 }
16991627 }
17001628 if c.Resolve != nil {
1701- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 156, "<form class=\"c-act\" method=\"post\" action=\"")
1629+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 151, "<form class=\"c-act\" method=\"post\" action=\"")
17021630 if templ_7745c5c3_Err != nil {
17031631 return templ_7745c5c3_Err
17041632 }
1705- var templ_7745c5c3_Var81 templ.SafeURL
1706- templ_7745c5c3_Var81, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Resolve.Action))
1633+ var templ_7745c5c3_Var75 templ.SafeURL
1634+ templ_7745c5c3_Var75, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Resolve.Action))
17071635 if templ_7745c5c3_Err != nil {
1708- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 318, Col: 77}
1636+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 313, Col: 77}
17091637 }
1710- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var81))
1638+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var75))
17111639 if templ_7745c5c3_Err != nil {
17121640 return templ_7745c5c3_Err
17131641 }
1714- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 157, "\"><input type=\"hidden\" name=\"resolved\" value=\"")
1642+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 152, "\"><input type=\"hidden\" name=\"resolved\" value=\"")
17151643 if templ_7745c5c3_Err != nil {
17161644 return templ_7745c5c3_Err
17171645 }
1718- var templ_7745c5c3_Var82 string
1719- templ_7745c5c3_Var82, templ_7745c5c3_Err = templ.ResolveAttributeValue(boolText(c.Resolve.Value))
1646+ var templ_7745c5c3_Var76 string
1647+ templ_7745c5c3_Var76, templ_7745c5c3_Err = templ.ResolveAttributeValue(boolText(c.Resolve.Value))
17201648 if templ_7745c5c3_Err != nil {
1721- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 319, Col: 74}
1649+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 314, Col: 74}
17221650 }
1723- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var82)
1651+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var76)
17241652 if templ_7745c5c3_Err != nil {
17251653 return templ_7745c5c3_Err
17261654 }
1727- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 158, "\"> ")
1655+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 153, "\"> ")
17281656 if templ_7745c5c3_Err != nil {
17291657 return templ_7745c5c3_Err
17301658 }
17311659 if c.Resolve.From > 0 {
1732- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 159, "<input type=\"hidden\" name=\"from\" value=\"")
1660+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 154, "<input type=\"hidden\" name=\"from\" value=\"")
17331661 if templ_7745c5c3_Err != nil {
17341662 return templ_7745c5c3_Err
17351663 }
1736- var templ_7745c5c3_Var83 string
1737- templ_7745c5c3_Var83, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(c.Resolve.From))
1664+ var templ_7745c5c3_Var77 string
1665+ templ_7745c5c3_Var77, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(c.Resolve.From))
17381666 if templ_7745c5c3_Err != nil {
1739- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 321, Col: 66}
1667+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 316, Col: 66}
17401668 }
1741- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var83)
1669+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var77)
17421670 if templ_7745c5c3_Err != nil {
17431671 return templ_7745c5c3_Err
17441672 }
1745- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 160, "\"> ")
1673+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 155, "\"> ")
17461674 if templ_7745c5c3_Err != nil {
17471675 return templ_7745c5c3_Err
17481676 }
17491677 }
1750- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 161, "<button type=\"submit\" class=\"btn\">")
1678+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 156, "<button type=\"submit\" class=\"btn\">")
17511679 if templ_7745c5c3_Err != nil {
17521680 return templ_7745c5c3_Err
17531681 }
1754- var templ_7745c5c3_Var84 string
1755- templ_7745c5c3_Var84, templ_7745c5c3_Err = templ.JoinStringErrs(c.Resolve.Label)
1682+ var templ_7745c5c3_Var78 string
1683+ templ_7745c5c3_Var78, templ_7745c5c3_Err = templ.JoinStringErrs(c.Resolve.Label)
17561684 if templ_7745c5c3_Err != nil {
1757- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 323, Col: 55}
1685+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 318, Col: 55}
17581686 }
1759- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var84))
1687+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var78))
17601688 if templ_7745c5c3_Err != nil {
17611689 return templ_7745c5c3_Err
17621690 }
1763- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 162, "</button></form>")
1691+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 157, "</button></form>")
17641692 if templ_7745c5c3_Err != nil {
17651693 return templ_7745c5c3_Err
17661694 }
17671695 }
1768- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 163, "</div>")
1696+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 158, "</div>")
17691697 if templ_7745c5c3_Err != nil {
17701698 return templ_7745c5c3_Err
17711699 }
@@ -1797,214 +1725,214 @@ func commentForm(f CommentForm, suffix string) templ.Component {
17971725 }()
17981726 }
17991727 ctx = templ.InitializeContext(ctx)
1800- templ_7745c5c3_Var85 := templ.GetChildren(ctx)
1801- if templ_7745c5c3_Var85 == nil {
1802- templ_7745c5c3_Var85 = templ.NopComponent
1728+ templ_7745c5c3_Var79 := templ.GetChildren(ctx)
1729+ if templ_7745c5c3_Var79 == nil {
1730+ templ_7745c5c3_Var79 = templ.NopComponent
18031731 }
18041732 ctx = templ.ClearChildren(ctx)
1805- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 164, "<form class=\"cform\" method=\"post\" action=\"")
1733+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 159, "<form class=\"cform\" method=\"post\" action=\"")
18061734 if templ_7745c5c3_Err != nil {
18071735 return templ_7745c5c3_Err
18081736 }
1809- var templ_7745c5c3_Var86 templ.SafeURL
1810- templ_7745c5c3_Var86, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(f.Action))
1737+ var templ_7745c5c3_Var80 templ.SafeURL
1738+ templ_7745c5c3_Var80, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(f.Action))
18111739 if templ_7745c5c3_Err != nil {
1812- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 338, Col: 67}
1740+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 333, Col: 67}
18131741 }
1814- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var86))
1742+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var80))
18151743 if templ_7745c5c3_Err != nil {
18161744 return templ_7745c5c3_Err
18171745 }
1818- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 165, "\"><label for=\"")
1746+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 160, "\"><label for=\"")
18191747 if templ_7745c5c3_Err != nil {
18201748 return templ_7745c5c3_Err
18211749 }
1822- var templ_7745c5c3_Var87 string
1823- templ_7745c5c3_Var87, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.ID + suffix)
1750+ var templ_7745c5c3_Var81 string
1751+ templ_7745c5c3_Var81, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.ID + suffix)
18241752 if templ_7745c5c3_Err != nil {
1825- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 339, Col: 28}
1753+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 334, Col: 28}
18261754 }
1827- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var87)
1755+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var81)
18281756 if templ_7745c5c3_Err != nil {
18291757 return templ_7745c5c3_Err
18301758 }
1831- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 166, "\">")
1759+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 161, "\">")
18321760 if templ_7745c5c3_Err != nil {
18331761 return templ_7745c5c3_Err
18341762 }
1835- var templ_7745c5c3_Var88 string
1836- templ_7745c5c3_Var88, templ_7745c5c3_Err = templ.JoinStringErrs(f.Title)
1763+ var templ_7745c5c3_Var82 string
1764+ templ_7745c5c3_Var82, templ_7745c5c3_Err = templ.JoinStringErrs(f.Title)
18371765 if templ_7745c5c3_Err != nil {
1838- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 339, Col: 40}
1766+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 334, Col: 40}
18391767 }
1840- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var88))
1768+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var82))
18411769 if templ_7745c5c3_Err != nil {
18421770 return templ_7745c5c3_Err
18431771 }
1844- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 167, "</label> <textarea id=\"")
1772+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 162, "</label> <textarea id=\"")
18451773 if templ_7745c5c3_Err != nil {
18461774 return templ_7745c5c3_Err
18471775 }
1848- var templ_7745c5c3_Var89 string
1849- templ_7745c5c3_Var89, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.ID + suffix)
1776+ var templ_7745c5c3_Var83 string
1777+ templ_7745c5c3_Var83, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.ID + suffix)
18501778 if templ_7745c5c3_Err != nil {
1851- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 341, Col: 21}
1779+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 336, Col: 21}
18521780 }
1853- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var89)
1781+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var83)
18541782 if templ_7745c5c3_Err != nil {
18551783 return templ_7745c5c3_Err
18561784 }
1857- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 168, "\" name=\"text\" rows=\"3\" maxlength=\"8000\"")
1785+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 163, "\" name=\"text\" rows=\"3\" maxlength=\"8000\"")
18581786 if templ_7745c5c3_Err != nil {
18591787 return templ_7745c5c3_Err
18601788 }
18611789 if f.Plain {
1862- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 169, " required placeholder=\"plain text, 8000 characters at most\"")
1790+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 164, " required placeholder=\"plain text, 8000 characters at most\"")
18631791 if templ_7745c5c3_Err != nil {
18641792 return templ_7745c5c3_Err
18651793 }
18661794 } else {
1867- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 170, " placeholder=\"Markdown, 8000 characters at most\"")
1795+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 165, " placeholder=\"Markdown, 8000 characters at most\"")
18681796 if templ_7745c5c3_Err != nil {
18691797 return templ_7745c5c3_Err
18701798 }
18711799 }
18721800 if f.Focus {
1873- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 171, " autofocus")
1801+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 166, " autofocus")
18741802 if templ_7745c5c3_Err != nil {
18751803 return templ_7745c5c3_Err
18761804 }
18771805 }
1878- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 172, "></textarea> ")
1806+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 167, "></textarea> ")
18791807 if templ_7745c5c3_Err != nil {
18801808 return templ_7745c5c3_Err
18811809 }
18821810 if f.Path != "" {
1883- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 173, "<input type=\"hidden\" name=\"path\" value=\"")
1811+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 168, "<input type=\"hidden\" name=\"path\" value=\"")
18841812 if templ_7745c5c3_Err != nil {
18851813 return templ_7745c5c3_Err
18861814 }
1887- var templ_7745c5c3_Var90 string
1888- templ_7745c5c3_Var90, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Path)
1815+ var templ_7745c5c3_Var84 string
1816+ templ_7745c5c3_Var84, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Path)
18891817 if templ_7745c5c3_Err != nil {
1890- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 356, Col: 50}
1818+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 351, Col: 50}
18911819 }
1892- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var90)
1820+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var84)
18931821 if templ_7745c5c3_Err != nil {
18941822 return templ_7745c5c3_Err
18951823 }
1896- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 174, "\"> <input type=\"hidden\" name=\"line\" value=\"")
1824+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 169, "\"> <input type=\"hidden\" name=\"line\" value=\"")
18971825 if templ_7745c5c3_Err != nil {
18981826 return templ_7745c5c3_Err
18991827 }
1900- var templ_7745c5c3_Var91 string
1901- templ_7745c5c3_Var91, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Line)
1828+ var templ_7745c5c3_Var85 string
1829+ templ_7745c5c3_Var85, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Line)
19021830 if templ_7745c5c3_Err != nil {
1903- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 357, Col: 50}
1831+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 352, Col: 50}
19041832 }
1905- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var91)
1833+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var85)
19061834 if templ_7745c5c3_Err != nil {
19071835 return templ_7745c5c3_Err
19081836 }
1909- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 175, "\"> <input type=\"hidden\" name=\"side\" value=\"")
1837+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 170, "\"> <input type=\"hidden\" name=\"side\" value=\"")
19101838 if templ_7745c5c3_Err != nil {
19111839 return templ_7745c5c3_Err
19121840 }
1913- var templ_7745c5c3_Var92 string
1914- templ_7745c5c3_Var92, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Side)
1841+ var templ_7745c5c3_Var86 string
1842+ templ_7745c5c3_Var86, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Side)
19151843 if templ_7745c5c3_Err != nil {
1916- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 358, Col: 50}
1844+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 353, Col: 50}
19171845 }
1918- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var92)
1846+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var86)
19191847 if templ_7745c5c3_Err != nil {
19201848 return templ_7745c5c3_Err
19211849 }
1922- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 176, "\"> <label>from line <input type=\"number\" name=\"start_line\" min=\"1\" value=\"")
1850+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 171, "\"> <label>from line <input type=\"number\" name=\"start_line\" min=\"1\" value=\"")
19231851 if templ_7745c5c3_Err != nil {
19241852 return templ_7745c5c3_Err
19251853 }
1926- var templ_7745c5c3_Var93 string
1927- templ_7745c5c3_Var93, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.StartLine)
1854+ var templ_7745c5c3_Var87 string
1855+ templ_7745c5c3_Var87, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.StartLine)
19281856 if templ_7745c5c3_Err != nil {
1929- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 359, Col: 86}
1857+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 354, Col: 86}
19301858 }
1931- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var93)
1859+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var87)
19321860 if templ_7745c5c3_Err != nil {
19331861 return templ_7745c5c3_Err
19341862 }
1935- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 177, "\"></label> ")
1863+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 172, "\"></label> ")
19361864 if templ_7745c5c3_Err != nil {
19371865 return templ_7745c5c3_Err
19381866 }
19391867 }
19401868 if f.ReplyTo != "" {
1941- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 178, "<input type=\"hidden\" name=\"reply_to\" value=\"")
1869+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 173, "<input type=\"hidden\" name=\"reply_to\" value=\"")
19421870 if templ_7745c5c3_Err != nil {
19431871 return templ_7745c5c3_Err
19441872 }
1945- var templ_7745c5c3_Var94 string
1946- templ_7745c5c3_Var94, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.ReplyTo)
1873+ var templ_7745c5c3_Var88 string
1874+ templ_7745c5c3_Var88, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.ReplyTo)
19471875 if templ_7745c5c3_Err != nil {
1948- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 362, Col: 57}
1876+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 357, Col: 57}
19491877 }
1950- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var94)
1878+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var88)
19511879 if templ_7745c5c3_Err != nil {
19521880 return templ_7745c5c3_Err
19531881 }
1954- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 179, "\"> ")
1882+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 174, "\"> ")
19551883 if templ_7745c5c3_Err != nil {
19561884 return templ_7745c5c3_Err
19571885 }
19581886 }
19591887 if f.Path == "" && f.ReplyTo == "" && !f.Plain {
1960- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 180, "<fieldset><legend>Verdict</legend><label><input type=\"radio\" name=\"verdict\" value=\"\" checked>Note</label><label><input type=\"radio\" name=\"verdict\" value=\"approve\">Approve</label><label><input type=\"radio\" name=\"verdict\" value=\"changes_requested\">Request changes</label></fieldset>")
1888+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 175, "<fieldset><legend>Verdict</legend><label><input type=\"radio\" name=\"verdict\" value=\"\" checked>Note</label><label><input type=\"radio\" name=\"verdict\" value=\"approve\">Approve</label><label><input type=\"radio\" name=\"verdict\" value=\"changes_requested\">Request changes</label></fieldset>")
19611889 if templ_7745c5c3_Err != nil {
19621890 return templ_7745c5c3_Err
19631891 }
19641892 }
19651893 if f.From > 0 {
1966- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 181, "<input type=\"hidden\" name=\"from\" value=\"")
1894+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 176, "<input type=\"hidden\" name=\"from\" value=\"")
19671895 if templ_7745c5c3_Err != nil {
19681896 return templ_7745c5c3_Err
19691897 }
1970- var templ_7745c5c3_Var95 string
1971- templ_7745c5c3_Var95, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(f.From))
1898+ var templ_7745c5c3_Var89 string
1899+ templ_7745c5c3_Var89, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(f.From))
19721900 if templ_7745c5c3_Err != nil {
1973- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 368, Col: 56}
1901+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 363, Col: 56}
19741902 }
1975- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var95)
1903+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var89)
19761904 if templ_7745c5c3_Err != nil {
19771905 return templ_7745c5c3_Err
19781906 }
1979- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 182, "\">")
1907+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 177, "\">")
19801908 if templ_7745c5c3_Err != nil {
19811909 return templ_7745c5c3_Err
19821910 }
19831911 }
1984- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 183, "<div class=\"f-btns\"><button type=\"submit\" class=\"btn primary\">Comment</button> ")
1912+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 178, "<div class=\"f-btns\"><button type=\"submit\" class=\"btn primary\">Comment</button> ")
19851913 if templ_7745c5c3_Err != nil {
19861914 return templ_7745c5c3_Err
19871915 }
19881916 if f.Cancel != "" {
1989- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 184, "<a class=\"btn\" href=\"")
1917+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 179, "<a class=\"btn\" href=\"")
19901918 if templ_7745c5c3_Err != nil {
19911919 return templ_7745c5c3_Err
19921920 }
1993- var templ_7745c5c3_Var96 templ.SafeURL
1994- templ_7745c5c3_Var96, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(f.Cancel))
1921+ var templ_7745c5c3_Var90 templ.SafeURL
1922+ templ_7745c5c3_Var90, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(f.Cancel))
19951923 if templ_7745c5c3_Err != nil {
1996- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 373, Col: 49}
1924+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 368, Col: 49}
19971925 }
1998- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var96))
1926+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var90))
19991927 if templ_7745c5c3_Err != nil {
20001928 return templ_7745c5c3_Err
20011929 }
2002- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 185, "\">Cancel</a>")
1930+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 180, "\">Cancel</a>")
20031931 if templ_7745c5c3_Err != nil {
20041932 return templ_7745c5c3_Err
20051933 }
20061934 }
2007- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 186, "</div></form>")
1935+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 181, "</div></form>")
20081936 if templ_7745c5c3_Err != nil {
20091937 return templ_7745c5c3_Err
20101938 }
@@ -2028,161 +1956,161 @@ func mrFooter(p MRPage) templ.Component {
20281956 }()
20291957 }
20301958 ctx = templ.InitializeContext(ctx)
2031- templ_7745c5c3_Var97 := templ.GetChildren(ctx)
2032- if templ_7745c5c3_Var97 == nil {
2033- templ_7745c5c3_Var97 = templ.NopComponent
1959+ templ_7745c5c3_Var91 := templ.GetChildren(ctx)
1960+ if templ_7745c5c3_Var91 == nil {
1961+ templ_7745c5c3_Var91 = templ.NopComponent
20341962 }
20351963 ctx = templ.ClearChildren(ctx)
2036- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 187, "<footer class=\"mr-footer\"><nav data-mr-tabs aria-label=\"Branch details\"><a id=\"mr-tab-commits\" href=\"#mr-commits\">Commits <span class=\"count\">")
1964+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 182, "<footer class=\"mr-footer\"><nav data-mr-tabs aria-label=\"Branch details\"><a id=\"mr-tab-commits\" href=\"#mr-commits\">Commits <span class=\"count\">")
20371965 if templ_7745c5c3_Err != nil {
20381966 return templ_7745c5c3_Err
20391967 }
2040- var templ_7745c5c3_Var98 string
2041- templ_7745c5c3_Var98, templ_7745c5c3_Err = templ.JoinStringErrs(p.CommitCount)
1968+ var templ_7745c5c3_Var92 string
1969+ templ_7745c5c3_Var92, templ_7745c5c3_Err = templ.JoinStringErrs(p.CommitCount)
20421970 if templ_7745c5c3_Err != nil {
2043- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 382, Col: 88}
1971+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 377, Col: 88}
20441972 }
2045- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var98))
1973+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var92))
20461974 if templ_7745c5c3_Err != nil {
20471975 return templ_7745c5c3_Err
20481976 }
2049- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 188, "</span></a> <a id=\"mr-tab-checks\" href=\"#mr-checks\">")
1977+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 183, "</span></a> <a id=\"mr-tab-checks\" href=\"#mr-checks\">")
20501978 if templ_7745c5c3_Err != nil {
20511979 return templ_7745c5c3_Err
20521980 }
2053- var templ_7745c5c3_Var99 string
2054- templ_7745c5c3_Var99, templ_7745c5c3_Err = templ.JoinStringErrs("Checks ")
1981+ var templ_7745c5c3_Var93 string
1982+ templ_7745c5c3_Var93, templ_7745c5c3_Err = templ.JoinStringErrs("Checks ")
20551983 if templ_7745c5c3_Err != nil {
2056- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 384, Col: 15}
1984+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 379, Col: 15}
20571985 }
2058- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var99))
1986+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var93))
20591987 if templ_7745c5c3_Err != nil {
20601988 return templ_7745c5c3_Err
20611989 }
2062- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 189, " <span data-checks-label>")
1990+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 184, " <span data-checks-label>")
20631991 if templ_7745c5c3_Err != nil {
20641992 return templ_7745c5c3_Err
20651993 }
20661994 if p.ChecksSum.Total > 0 {
2067- var templ_7745c5c3_Var100 string
2068- templ_7745c5c3_Var100, templ_7745c5c3_Err = templ.JoinStringErrs(p.ChecksSum.Title)
1995+ var templ_7745c5c3_Var94 string
1996+ templ_7745c5c3_Var94, templ_7745c5c3_Err = templ.JoinStringErrs(p.ChecksSum.Title)
20691997 if templ_7745c5c3_Err != nil {
2070- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 387, Col: 25}
1998+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 382, Col: 25}
20711999 }
2072- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var100))
2000+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var94))
20732001 if templ_7745c5c3_Err != nil {
20742002 return templ_7745c5c3_Err
20752003 }
20762004 } else {
2077- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 190, "no checks")
2005+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 185, "no checks")
20782006 if templ_7745c5c3_Err != nil {
20792007 return templ_7745c5c3_Err
20802008 }
20812009 }
2082- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 191, "</span></a></nav><div id=\"mr-commits\" data-mr-panel role=\"region\" aria-labelledby=\"mr-tab-commits\"><table class=\"mr-commits\"><thead><tr><th>Commit</th><th>Subject</th><th>Author</th><th>Date</th><th>Signature</th><th>Status</th></tr></thead> <tbody>")
2010+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 186, "</span></a></nav><div id=\"mr-commits\" data-mr-panel role=\"region\" aria-labelledby=\"mr-tab-commits\"><table class=\"mr-commits\"><thead><tr><th>Commit</th><th>Subject</th><th>Author</th><th>Date</th><th>Signature</th><th>Status</th></tr></thead> <tbody>")
20832011 if templ_7745c5c3_Err != nil {
20842012 return templ_7745c5c3_Err
20852013 }
20862014 for _, c := range p.Commits {
2087- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 192, "<tr")
2015+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 187, "<tr")
20882016 if templ_7745c5c3_Err != nil {
20892017 return templ_7745c5c3_Err
20902018 }
20912019 if c.New {
2092- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 193, " data-new")
2020+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 188, " data-new")
20932021 if templ_7745c5c3_Err != nil {
20942022 return templ_7745c5c3_Err
20952023 }
20962024 }
2097- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 194, "><td><a href=\"")
2025+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 189, "><td><a href=\"")
20982026 if templ_7745c5c3_Err != nil {
20992027 return templ_7745c5c3_Err
21002028 }
2101- var templ_7745c5c3_Var101 templ.SafeURL
2102- templ_7745c5c3_Var101, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Href))
2029+ var templ_7745c5c3_Var95 templ.SafeURL
2030+ templ_7745c5c3_Var95, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Href))
21032031 if templ_7745c5c3_Err != nil {
2104- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 400, Col: 42}
2032+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 395, Col: 42}
21052033 }
2106- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var101))
2034+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var95))
21072035 if templ_7745c5c3_Err != nil {
21082036 return templ_7745c5c3_Err
21092037 }
2110- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 195, "\">")
2038+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 190, "\">")
21112039 if templ_7745c5c3_Err != nil {
21122040 return templ_7745c5c3_Err
21132041 }
2114- var templ_7745c5c3_Var102 string
2115- templ_7745c5c3_Var102, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)
2042+ var templ_7745c5c3_Var96 string
2043+ templ_7745c5c3_Var96, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)
21162044 if templ_7745c5c3_Err != nil {
2117- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 400, Col: 54}
2045+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 395, Col: 54}
21182046 }
2119- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var102))
2047+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var96))
21202048 if templ_7745c5c3_Err != nil {
21212049 return templ_7745c5c3_Err
21222050 }
2123- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 196, "</a></td><td>")
2051+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 191, "</a></td><td>")
21242052 if templ_7745c5c3_Err != nil {
21252053 return templ_7745c5c3_Err
21262054 }
2127- var templ_7745c5c3_Var103 string
2128- templ_7745c5c3_Var103, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)
2055+ var templ_7745c5c3_Var97 string
2056+ templ_7745c5c3_Var97, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)
21292057 if templ_7745c5c3_Err != nil {
2130- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 401, Col: 22}
2058+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 396, Col: 22}
21312059 }
2132- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var103))
2060+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var97))
21332061 if templ_7745c5c3_Err != nil {
21342062 return templ_7745c5c3_Err
21352063 }
2136- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 197, "</td><td>")
2064+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 192, "</td><td>")
21372065 if templ_7745c5c3_Err != nil {
21382066 return templ_7745c5c3_Err
21392067 }
2140- var templ_7745c5c3_Var104 string
2141- templ_7745c5c3_Var104, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)
2068+ var templ_7745c5c3_Var98 string
2069+ templ_7745c5c3_Var98, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)
21422070 if templ_7745c5c3_Err != nil {
2143- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 402, Col: 21}
2071+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 397, Col: 21}
21442072 }
2145- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var104))
2073+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var98))
21462074 if templ_7745c5c3_Err != nil {
21472075 return templ_7745c5c3_Err
21482076 }
2149- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 198, "</td><td>")
2077+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 193, "</td><td>")
21502078 if templ_7745c5c3_Err != nil {
21512079 return templ_7745c5c3_Err
21522080 }
21532081 if c.WhenAt != "" {
2154- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 199, "<time datetime=\"")
2082+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 194, "<time datetime=\"")
21552083 if templ_7745c5c3_Err != nil {
21562084 return templ_7745c5c3_Err
21572085 }
2158- var templ_7745c5c3_Var105 string
2159- templ_7745c5c3_Var105, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
2086+ var templ_7745c5c3_Var99 string
2087+ templ_7745c5c3_Var99, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
21602088 if templ_7745c5c3_Err != nil {
2161- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 405, Col: 34}
2089+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 400, Col: 34}
21622090 }
2163- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var105)
2091+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var99)
21642092 if templ_7745c5c3_Err != nil {
21652093 return templ_7745c5c3_Err
21662094 }
2167- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 200, "\">")
2095+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 195, "\">")
21682096 if templ_7745c5c3_Err != nil {
21692097 return templ_7745c5c3_Err
21702098 }
2171- var templ_7745c5c3_Var106 string
2172- templ_7745c5c3_Var106, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)
2099+ var templ_7745c5c3_Var100 string
2100+ templ_7745c5c3_Var100, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)
21732101 if templ_7745c5c3_Err != nil {
2174- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 405, Col: 45}
2102+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 400, Col: 45}
21752103 }
2176- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var106))
2104+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var100))
21772105 if templ_7745c5c3_Err != nil {
21782106 return templ_7745c5c3_Err
21792107 }
2180- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 201, "</time>")
2108+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 196, "</time>")
21812109 if templ_7745c5c3_Err != nil {
21822110 return templ_7745c5c3_Err
21832111 }
21842112 }
2185- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 202, "</td><td>")
2113+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 197, "</td><td>")
21862114 if templ_7745c5c3_Err != nil {
21872115 return templ_7745c5c3_Err
21882116 }
@@ -2192,51 +2120,51 @@ func mrFooter(p MRPage) templ.Component {
21922120 return templ_7745c5c3_Err
21932121 }
21942122 }
2195- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 203, "</td><td>")
2123+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 198, "</td><td>")
21962124 if templ_7745c5c3_Err != nil {
21972125 return templ_7745c5c3_Err
21982126 }
21992127 if c.New {
2200- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 204, "<span>new</span>")
2128+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 199, "<span>new</span>")
22012129 if templ_7745c5c3_Err != nil {
22022130 return templ_7745c5c3_Err
22032131 }
22042132 }
2205- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 205, "</td></tr>")
2133+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 200, "</td></tr>")
22062134 if templ_7745c5c3_Err != nil {
22072135 return templ_7745c5c3_Err
22082136 }
22092137 }
2210- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 206, "</tbody></table>")
2138+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 201, "</tbody></table>")
22112139 if templ_7745c5c3_Err != nil {
22122140 return templ_7745c5c3_Err
22132141 }
22142142 if len(p.Commits) == 0 {
2215- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 207, "<p class=\"dim\">no commit to merge.</p>")
2143+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 202, "<p class=\"dim\">no commit to merge.</p>")
22162144 if templ_7745c5c3_Err != nil {
22172145 return templ_7745c5c3_Err
22182146 }
22192147 }
22202148 if p.CommitsNote != "" {
2221- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 208, "<p class=\"note\">")
2149+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 203, "<p class=\"note\">")
22222150 if templ_7745c5c3_Err != nil {
22232151 return templ_7745c5c3_Err
22242152 }
2225- var templ_7745c5c3_Var107 string
2226- templ_7745c5c3_Var107, templ_7745c5c3_Err = templ.JoinStringErrs(p.CommitsNote)
2153+ var templ_7745c5c3_Var101 string
2154+ templ_7745c5c3_Var101, templ_7745c5c3_Err = templ.JoinStringErrs(p.CommitsNote)
22272155 if templ_7745c5c3_Err != nil {
2228- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 426, Col: 35}
2156+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 421, Col: 35}
22292157 }
2230- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var107))
2158+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var101))
22312159 if templ_7745c5c3_Err != nil {
22322160 return templ_7745c5c3_Err
22332161 }
2234- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 209, "</p>")
2162+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 204, "</p>")
22352163 if templ_7745c5c3_Err != nil {
22362164 return templ_7745c5c3_Err
22372165 }
22382166 }
2239- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 210, "</div><div id=\"mr-checks-panel\" data-mr-panel role=\"region\" aria-labelledby=\"mr-tab-checks\">")
2167+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 205, "</div><div id=\"mr-checks-panel\" data-mr-panel role=\"region\" aria-labelledby=\"mr-tab-checks\">")
22402168 if templ_7745c5c3_Err != nil {
22412169 return templ_7745c5c3_Err
22422170 }
@@ -2244,7 +2172,7 @@ func mrFooter(p MRPage) templ.Component {
22442172 if templ_7745c5c3_Err != nil {
22452173 return templ_7745c5c3_Err
22462174 }
2247- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 211, "</div></footer>")
2175+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 206, "</div></footer>")
22482176 if templ_7745c5c3_Err != nil {
22492177 return templ_7745c5c3_Err
22502178 }
@@ -2268,25 +2196,25 @@ func mrRail(p MRPage) templ.Component {
22682196 }()
22692197 }
22702198 ctx = templ.InitializeContext(ctx)
2271- templ_7745c5c3_Var108 := templ.GetChildren(ctx)
2272- if templ_7745c5c3_Var108 == nil {
2273- templ_7745c5c3_Var108 = templ.NopComponent
2199+ templ_7745c5c3_Var102 := templ.GetChildren(ctx)
2200+ if templ_7745c5c3_Var102 == nil {
2201+ templ_7745c5c3_Var102 = templ.NopComponent
22742202 }
22752203 ctx = templ.ClearChildren(ctx)
2276- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 212, "<section aria-labelledby=\"r-files\" class=\"r-files\"><h2 id=\"r-files\">Files <span class=\"count\">")
2204+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 207, "<section aria-labelledby=\"r-files\" class=\"r-files\"><h2 id=\"r-files\">Files <span class=\"count\">")
22772205 if templ_7745c5c3_Err != nil {
22782206 return templ_7745c5c3_Err
22792207 }
2280- var templ_7745c5c3_Var109 string
2281- templ_7745c5c3_Var109, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))
2208+ var templ_7745c5c3_Var103 string
2209+ templ_7745c5c3_Var103, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))
22822210 if templ_7745c5c3_Err != nil {
2283- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 438, Col: 49}
2211+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 433, Col: 49}
22842212 }
2285- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var109))
2213+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var103))
22862214 if templ_7745c5c3_Err != nil {
22872215 return templ_7745c5c3_Err
22882216 }
2289- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 213, "</span><kbd aria-hidden=\"true\">g f</kbd> <button type=\"button\" class=\"btn icon fold\" data-js aria-expanded=\"true\" title=\"fold the list of files\" hx-on:click=\"ermiteMR.foldFiles()\"><span class=\"ico i-chevron\" aria-hidden=\"true\"></span><span class=\"sr\">fold the list of files</span></button></h2>")
2217+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 208, "</span><kbd aria-hidden=\"true\">g f</kbd> <button type=\"button\" class=\"btn icon fold\" data-js aria-expanded=\"true\" title=\"fold the list of files\" hx-on:click=\"ermiteMR.foldFiles()\"><span class=\"ico i-chevron\" aria-hidden=\"true\"></span><span class=\"sr\">fold the list of files</span></button></h2>")
22902218 if templ_7745c5c3_Err != nil {
22912219 return templ_7745c5c3_Err
22922220 }
@@ -2294,71 +2222,71 @@ func mrRail(p MRPage) templ.Component {
22942222 if templ_7745c5c3_Err != nil {
22952223 return templ_7745c5c3_Err
22962224 }
2297- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 214, "</section>")
2225+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 209, "</section>")
22982226 if templ_7745c5c3_Err != nil {
22992227 return templ_7745c5c3_Err
23002228 }
23012229 if len(p.Verdicts) > 0 {
2302- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 215, "<section><h2>Verdicts</h2><ul>")
2230+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 210, "<section><h2>Verdicts</h2><ul>")
23032231 if templ_7745c5c3_Err != nil {
23042232 return templ_7745c5c3_Err
23052233 }
23062234 for _, v := range p.Verdicts {
2307- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 216, "<li><a href=\"")
2235+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 211, "<li><a href=\"")
23082236 if templ_7745c5c3_Err != nil {
23092237 return templ_7745c5c3_Err
23102238 }
2311- var templ_7745c5c3_Var110 templ.SafeURL
2312- templ_7745c5c3_Var110, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(v.Href))
2239+ var templ_7745c5c3_Var104 templ.SafeURL
2240+ templ_7745c5c3_Var104, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(v.Href))
23132241 if templ_7745c5c3_Err != nil {
2314- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 451, Col: 37}
2242+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 446, Col: 37}
23152243 }
2316- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var110))
2244+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var104))
23172245 if templ_7745c5c3_Err != nil {
23182246 return templ_7745c5c3_Err
23192247 }
2320- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 217, "\">")
2248+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 212, "\">")
23212249 if templ_7745c5c3_Err != nil {
23222250 return templ_7745c5c3_Err
23232251 }
2324- var templ_7745c5c3_Var111 string
2325- templ_7745c5c3_Var111, templ_7745c5c3_Err = templ.JoinStringErrs(v.Author)
2252+ var templ_7745c5c3_Var105 string
2253+ templ_7745c5c3_Var105, templ_7745c5c3_Err = templ.JoinStringErrs(v.Author)
23262254 if templ_7745c5c3_Err != nil {
2327- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 451, Col: 50}
2255+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 446, Col: 50}
23282256 }
2329- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var111))
2257+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var105))
23302258 if templ_7745c5c3_Err != nil {
23312259 return templ_7745c5c3_Err
23322260 }
2333- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 218, ": ")
2261+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 213, ": ")
23342262 if templ_7745c5c3_Err != nil {
23352263 return templ_7745c5c3_Err
23362264 }
2337- var templ_7745c5c3_Var112 string
2338- templ_7745c5c3_Var112, templ_7745c5c3_Err = templ.JoinStringErrs(v.Label)
2265+ var templ_7745c5c3_Var106 string
2266+ templ_7745c5c3_Var106, templ_7745c5c3_Err = templ.JoinStringErrs(v.Label)
23392267 if templ_7745c5c3_Err != nil {
2340- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 451, Col: 63}
2268+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 446, Col: 63}
23412269 }
2342- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var112))
2270+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var106))
23432271 if templ_7745c5c3_Err != nil {
23442272 return templ_7745c5c3_Err
23452273 }
2346- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 219, "</a> ")
2274+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 214, "</a> ")
23472275 if templ_7745c5c3_Err != nil {
23482276 return templ_7745c5c3_Err
23492277 }
23502278 if v.Stale {
2351- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 220, "<span class=\"mute\">(stale)</span>")
2279+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 215, "<span class=\"mute\">(stale)</span>")
23522280 if templ_7745c5c3_Err != nil {
23532281 return templ_7745c5c3_Err
23542282 }
23552283 }
2356- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 221, "</li>")
2284+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 216, "</li>")
23572285 if templ_7745c5c3_Err != nil {
23582286 return templ_7745c5c3_Err
23592287 }
23602288 }
2361- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 222, "</ul></section>")
2289+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 217, "</ul></section>")
23622290 if templ_7745c5c3_Err != nil {
23632291 return templ_7745c5c3_Err
23642292 }
@@ -2387,51 +2315,51 @@ func mrBar(p MRPage) templ.Component {
23872315 }()
23882316 }
23892317 ctx = templ.InitializeContext(ctx)
2390- templ_7745c5c3_Var113 := templ.GetChildren(ctx)
2391- if templ_7745c5c3_Var113 == nil {
2392- templ_7745c5c3_Var113 = templ.NopComponent
2318+ templ_7745c5c3_Var107 := templ.GetChildren(ctx)
2319+ if templ_7745c5c3_Var107 == nil {
2320+ templ_7745c5c3_Var107 = templ.NopComponent
23932321 }
23942322 ctx = templ.ClearChildren(ctx)
2395- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 223, "<div class=\"diff-tools mr-bar\" role=\"group\" aria-label=\"Diff view and merge\"><span class=\"dim\">")
2323+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 218, "<div class=\"diff-tools mr-bar\" role=\"group\" aria-label=\"Diff view and merge\"><span class=\"dim\">")
23962324 if templ_7745c5c3_Err != nil {
23972325 return templ_7745c5c3_Err
23982326 }
2399- var templ_7745c5c3_Var114 string
2400- templ_7745c5c3_Var114, templ_7745c5c3_Err = templ.JoinStringErrs(plural(p.NFiles, "file", "files"))
2327+ var templ_7745c5c3_Var108 string
2328+ templ_7745c5c3_Var108, templ_7745c5c3_Err = templ.JoinStringErrs(plural(p.NFiles, "file", "files"))
24012329 if templ_7745c5c3_Err != nil {
2402- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 468, Col: 55}
2330+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 463, Col: 55}
24032331 }
2404- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var114))
2332+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var108))
24052333 if templ_7745c5c3_Err != nil {
24062334 return templ_7745c5c3_Err
24072335 }
2408- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 224, " · <span class=\"plus\">+")
2336+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 219, " · <span class=\"plus\">+")
24092337 if templ_7745c5c3_Err != nil {
24102338 return templ_7745c5c3_Err
24112339 }
2412- var templ_7745c5c3_Var115 string
2413- templ_7745c5c3_Var115, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Adds))
2340+ var templ_7745c5c3_Var109 string
2341+ templ_7745c5c3_Var109, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Adds))
24142342 if templ_7745c5c3_Err != nil {
2415- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 468, Col: 95}
2343+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 463, Col: 95}
24162344 }
2417- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var115))
2345+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var109))
24182346 if templ_7745c5c3_Err != nil {
24192347 return templ_7745c5c3_Err
24202348 }
2421- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 225, "</span> <span class=\"minus\">-")
2349+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 220, "</span> <span class=\"minus\">-")
24222350 if templ_7745c5c3_Err != nil {
24232351 return templ_7745c5c3_Err
24242352 }
2425- var templ_7745c5c3_Var116 string
2426- templ_7745c5c3_Var116, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Dels))
2353+ var templ_7745c5c3_Var110 string
2354+ templ_7745c5c3_Var110, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Dels))
24272355 if templ_7745c5c3_Err != nil {
2428- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 468, Col: 140}
2356+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 463, Col: 140}
24292357 }
2430- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var116))
2358+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var110))
24312359 if templ_7745c5c3_Err != nil {
24322360 return templ_7745c5c3_Err
24332361 }
2434- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 226, "</span></span>")
2362+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 221, "</span></span>")
24352363 if templ_7745c5c3_Err != nil {
24362364 return templ_7745c5c3_Err
24372365 }
@@ -2439,25 +2367,11 @@ func mrBar(p MRPage) templ.Component {
24392367 if templ_7745c5c3_Err != nil {
24402368 return templ_7745c5c3_Err
24412369 }
2442- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 227, "<div class=\"mr-acts\">")
2370+ templ_7745c5c3_Err = mrActions(p).Render(ctx, templ_7745c5c3_Buffer)
24432371 if templ_7745c5c3_Err != nil {
24442372 return templ_7745c5c3_Err
24452373 }
2446- templ_7745c5c3_Err = MRChecksSum(p.ChecksSum).Render(ctx, templ_7745c5c3_Buffer)
2447- if templ_7745c5c3_Err != nil {
2448- return templ_7745c5c3_Err
2449- }
2450- if p.Box != nil {
2451- templ_7745c5c3_Err = mergeMenu(p).Render(ctx, templ_7745c5c3_Buffer)
2452- if templ_7745c5c3_Err != nil {
2453- return templ_7745c5c3_Err
2454- }
2455- }
2456- templ_7745c5c3_Err = moreMenu(p).Render(ctx, templ_7745c5c3_Buffer)
2457- if templ_7745c5c3_Err != nil {
2458- return templ_7745c5c3_Err
2459- }
2460- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 228, "</div></div>")
2374+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 222, "</div>")
24612375 if templ_7745c5c3_Err != nil {
24622376 return templ_7745c5c3_Err
24632377 }
@@ -2489,80 +2403,80 @@ func mergeMenu(p MRPage) templ.Component {
24892403 }()
24902404 }
24912405 ctx = templ.InitializeContext(ctx)
2492- templ_7745c5c3_Var117 := templ.GetChildren(ctx)
2493- if templ_7745c5c3_Var117 == nil {
2494- templ_7745c5c3_Var117 = templ.NopComponent
2406+ templ_7745c5c3_Var111 := templ.GetChildren(ctx)
2407+ if templ_7745c5c3_Var111 == nil {
2408+ templ_7745c5c3_Var111 = templ.NopComponent
24952409 }
24962410 ctx = templ.ClearChildren(ctx)
2497- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 229, "<details class=\"menu mmenu\" id=\"merge-menu\" data-state=\"open\"")
2411+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 223, "<details class=\"menu mmenu\" id=\"merge-menu\" data-state=\"open\"")
24982412 if templ_7745c5c3_Err != nil {
24992413 return templ_7745c5c3_Err
25002414 }
25012415 if p.Box.Error != "" {
2502- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 230, " open")
2416+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 224, " open")
25032417 if templ_7745c5c3_Err != nil {
25042418 return templ_7745c5c3_Err
25052419 }
25062420 }
2507- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 231, "><summary class=\"btn primary\" aria-keyshortcuts=\"Shift+M\">")
2421+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 225, "><summary class=\"btn primary\" aria-keyshortcuts=\"Shift+M\">")
25082422 if templ_7745c5c3_Err != nil {
25092423 return templ_7745c5c3_Err
25102424 }
25112425 if p.Box.ReadyAction != "" {
2512- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 232, "Draft ")
2426+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 226, "Draft ")
25132427 if templ_7745c5c3_Err != nil {
25142428 return templ_7745c5c3_Err
25152429 }
25162430 } else {
2517- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 233, "Merge ")
2431+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 227, "Merge ")
25182432 if templ_7745c5c3_Err != nil {
25192433 return templ_7745c5c3_Err
25202434 }
25212435 }
2522- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 234, "<kbd aria-hidden=\"true\">M</kbd></summary><div class=\"menu-pop\" role=\"group\" aria-label=\"Merge\">")
2436+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 228, "<kbd aria-hidden=\"true\">M</kbd></summary><div class=\"menu-pop\" role=\"group\" aria-label=\"Merge\">")
25232437 if templ_7745c5c3_Err != nil {
25242438 return templ_7745c5c3_Err
25252439 }
25262440 if p.Box.HeadGone {
2527- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 235, "<p class=\"dim\">the source branch was deleted</p>")
2441+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 229, "<p class=\"dim\">the source branch was deleted</p>")
25282442 if templ_7745c5c3_Err != nil {
25292443 return templ_7745c5c3_Err
25302444 }
25312445 }
25322446 if p.Box.Error != "" {
2533- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 236, "<p class=\"d-err\" role=\"alert\">")
2447+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 230, "<p class=\"d-err\" role=\"alert\">")
25342448 if templ_7745c5c3_Err != nil {
25352449 return templ_7745c5c3_Err
25362450 }
2537- var templ_7745c5c3_Var118 string
2538- templ_7745c5c3_Var118, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.Error)
2451+ var templ_7745c5c3_Var112 string
2452+ templ_7745c5c3_Var112, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.Error)
25392453 if templ_7745c5c3_Err != nil {
2540- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 503, Col: 47}
2454+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 492, Col: 47}
25412455 }
2542- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var118))
2456+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var112))
25432457 if templ_7745c5c3_Err != nil {
25442458 return templ_7745c5c3_Err
25452459 }
2546- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 237, "</p>")
2460+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 231, "</p>")
25472461 if templ_7745c5c3_Err != nil {
25482462 return templ_7745c5c3_Err
25492463 }
25502464 }
25512465 if p.Box.ReadyAction != "" {
2552- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 238, "<p class=\"d-draft\">this is a draft: it cannot be merged until it is ready for review.</p><form class=\"d-btns\" method=\"post\" action=\"")
2466+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 232, "<p class=\"d-draft\">this is a draft: it cannot be merged until it is ready for review.</p><form class=\"d-btns\" method=\"post\" action=\"")
25532467 if templ_7745c5c3_Err != nil {
25542468 return templ_7745c5c3_Err
25552469 }
2556- var templ_7745c5c3_Var119 templ.SafeURL
2557- templ_7745c5c3_Var119, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.ReadyAction))
2470+ var templ_7745c5c3_Var113 templ.SafeURL
2471+ templ_7745c5c3_Var113, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.ReadyAction))
25582472 if templ_7745c5c3_Err != nil {
2559- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 507, Col: 80}
2473+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 496, Col: 80}
25602474 }
2561- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var119))
2475+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var113))
25622476 if templ_7745c5c3_Err != nil {
25632477 return templ_7745c5c3_Err
25642478 }
2565- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 239, "\"><button type=\"submit\" class=\"btn primary\" data-default title=\"remove the draft prefix from the title\">Ready for review</button></form>")
2479+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 233, "\"><button type=\"submit\" class=\"btn primary\" data-default title=\"remove the draft prefix from the title\">Ready for review</button></form>")
25662480 if templ_7745c5c3_Err != nil {
25672481 return templ_7745c5c3_Err
25682482 }
@@ -2571,237 +2485,250 @@ func mergeMenu(p MRPage) templ.Component {
25712485 if templ_7745c5c3_Err != nil {
25722486 return templ_7745c5c3_Err
25732487 }
2574- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 240, " ")
2488+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 234, " ")
25752489 if templ_7745c5c3_Err != nil {
25762490 return templ_7745c5c3_Err
25772491 }
25782492 if p.Box.AutoMerge != nil {
2579- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 241, "<form class=\"d-acts\" method=\"post\" action=\"")
2493+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 235, "<form class=\"d-acts\" method=\"post\" action=\"")
25802494 if templ_7745c5c3_Err != nil {
25812495 return templ_7745c5c3_Err
25822496 }
2583- var templ_7745c5c3_Var120 templ.SafeURL
2584- templ_7745c5c3_Var120, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.CancelAutoAction))
2497+ var templ_7745c5c3_Var114 templ.SafeURL
2498+ templ_7745c5c3_Var114, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.CancelAutoAction))
25852499 if templ_7745c5c3_Err != nil {
2586- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 513, Col: 86}
2500+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 502, Col: 86}
25872501 }
2588- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var120))
2502+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var114))
25892503 if templ_7745c5c3_Err != nil {
25902504 return templ_7745c5c3_Err
25912505 }
2592- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 242, "\"><p class=\"dim\" role=\"status\">Auto-merge: ")
2506+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 236, "\"><p class=\"dim\" role=\"status\">Auto-merge: ")
25932507 if templ_7745c5c3_Err != nil {
25942508 return templ_7745c5c3_Err
25952509 }
2596- var templ_7745c5c3_Var121 string
2597- templ_7745c5c3_Var121, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.AutoMerge.Mode)
2510+ var templ_7745c5c3_Var115 string
2511+ templ_7745c5c3_Var115, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.AutoMerge.Mode)
25982512 if templ_7745c5c3_Err != nil {
2599- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 515, Col: 41}
2513+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 504, Col: 41}
26002514 }
2601- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var121))
2515+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var115))
26022516 if templ_7745c5c3_Err != nil {
26032517 return templ_7745c5c3_Err
26042518 }
2605- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 243, " when ready, enabled by ")
2519+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 237, " when ready, enabled by ")
26062520 if templ_7745c5c3_Err != nil {
26072521 return templ_7745c5c3_Err
26082522 }
2609- var templ_7745c5c3_Var122 string
2610- templ_7745c5c3_Var122, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.AutoMerge.EnabledBy)
2523+ var templ_7745c5c3_Var116 string
2524+ templ_7745c5c3_Var116, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.AutoMerge.EnabledBy)
26112525 if templ_7745c5c3_Err != nil {
2612- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 515, Col: 94}
2526+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 504, Col: 94}
26132527 }
2614- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var122))
2528+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var116))
26152529 if templ_7745c5c3_Err != nil {
26162530 return templ_7745c5c3_Err
26172531 }
2618- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 244, " ")
2532+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 238, " ")
26192533 if templ_7745c5c3_Err != nil {
26202534 return templ_7745c5c3_Err
26212535 }
26222536 if p.Box.AutoMerge.When != "" {
2623- var templ_7745c5c3_Var123 string
2624- templ_7745c5c3_Var123, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
2537+ var templ_7745c5c3_Var117 string
2538+ templ_7745c5c3_Var117, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
26252539 if templ_7745c5c3_Err != nil {
2626- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 517, Col: 13}
2540+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 506, Col: 13}
26272541 }
2628- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var123))
2542+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var117))
26292543 if templ_7745c5c3_Err != nil {
26302544 return templ_7745c5c3_Err
26312545 }
2632- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 245, "<time datetime=\"")
2546+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 239, "<time datetime=\"")
26332547 if templ_7745c5c3_Err != nil {
26342548 return templ_7745c5c3_Err
26352549 }
2636- var templ_7745c5c3_Var124 string
2637- templ_7745c5c3_Var124, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.AutoMerge.WhenAt)
2550+ var templ_7745c5c3_Var118 string
2551+ templ_7745c5c3_Var118, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.AutoMerge.WhenAt)
26382552 if templ_7745c5c3_Err != nil {
2639- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 517, Col: 54}
2553+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 506, Col: 54}
26402554 }
2641- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var124)
2555+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var118)
26422556 if templ_7745c5c3_Err != nil {
26432557 return templ_7745c5c3_Err
26442558 }
2645- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 246, "\">")
2559+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 240, "\">")
26462560 if templ_7745c5c3_Err != nil {
26472561 return templ_7745c5c3_Err
26482562 }
2649- var templ_7745c5c3_Var125 string
2650- templ_7745c5c3_Var125, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.AutoMerge.When)
2563+ var templ_7745c5c3_Var119 string
2564+ templ_7745c5c3_Var119, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.AutoMerge.When)
26512565 if templ_7745c5c3_Err != nil {
2652- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 517, Col: 79}
2566+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 506, Col: 79}
26532567 }
2654- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var125))
2568+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var119))
26552569 if templ_7745c5c3_Err != nil {
26562570 return templ_7745c5c3_Err
26572571 }
2658- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 247, "</time> ")
2572+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 241, "</time> ")
26592573 if templ_7745c5c3_Err != nil {
26602574 return templ_7745c5c3_Err
26612575 }
26622576 }
2663- var templ_7745c5c3_Var126 string
2664- templ_7745c5c3_Var126, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
2577+ var templ_7745c5c3_Var120 string
2578+ templ_7745c5c3_Var120, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
26652579 if templ_7745c5c3_Err != nil {
2666- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 519, Col: 12}
2580+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 508, Col: 12}
26672581 }
2668- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var126))
2582+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var120))
26692583 if templ_7745c5c3_Err != nil {
26702584 return templ_7745c5c3_Err
26712585 }
2672- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 248, "(head ")
2586+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 242, "(head ")
26732587 if templ_7745c5c3_Err != nil {
26742588 return templ_7745c5c3_Err
26752589 }
2676- var templ_7745c5c3_Var127 string
2677- templ_7745c5c3_Var127, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.AutoMerge.HeadShort)
2590+ var templ_7745c5c3_Var121 string
2591+ templ_7745c5c3_Var121, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.AutoMerge.HeadShort)
26782592 if templ_7745c5c3_Err != nil {
2679- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 519, Col: 47}
2593+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 508, Col: 47}
26802594 }
2681- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var127))
2595+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var121))
26822596 if templ_7745c5c3_Err != nil {
26832597 return templ_7745c5c3_Err
26842598 }
2685- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 249, ")</p><div class=\"d-btns\"><button type=\"submit\" class=\"btn\">Cancel auto-merge</button></div></form>")
2599+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 243, ")</p><div class=\"d-btns\"><button type=\"submit\" class=\"btn\">Cancel auto-merge</button></div></form>")
26862600 if templ_7745c5c3_Err != nil {
26872601 return templ_7745c5c3_Err
26882602 }
26892603 }
2690- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 250, " <form class=\"d-acts\" method=\"post\" action=\"")
2604+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 244, " <form class=\"d-acts\" method=\"post\" action=\"")
2605+ if templ_7745c5c3_Err != nil {
2606+ return templ_7745c5c3_Err
2607+ }
2608+ var templ_7745c5c3_Var122 templ.SafeURL
2609+ templ_7745c5c3_Var122, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.MergeAction))
2610+ if templ_7745c5c3_Err != nil {
2611+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 518, Col: 46}
2612+ }
2613+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var122))
26912614 if templ_7745c5c3_Err != nil {
26922615 return templ_7745c5c3_Err
26932616 }
2694- var templ_7745c5c3_Var128 templ.SafeURL
2695- templ_7745c5c3_Var128, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.MergeAction))
2617+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 245, "\" hx-post=\"")
26962618 if templ_7745c5c3_Err != nil {
2697- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 526, Col: 80}
2619+ return templ_7745c5c3_Err
26982620 }
2699- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var128))
2621+ var templ_7745c5c3_Var123 string
2622+ templ_7745c5c3_Var123, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.MergeAction)
2623+ if templ_7745c5c3_Err != nil {
2624+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 519, Col: 32}
2625+ }
2626+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var123)
27002627 if templ_7745c5c3_Err != nil {
27012628 return templ_7745c5c3_Err
27022629 }
2703- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 251, "\"><input type=\"hidden\" name=\"head_id\" value=\"")
2630+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 246, "\" hx-swap=\"none\" hx-sync=\"this:drop\" hx-disable=\"find button[type=submit]\"><input type=\"hidden\" name=\"head_id\" value=\"")
27042631 if templ_7745c5c3_Err != nil {
27052632 return templ_7745c5c3_Err
27062633 }
2707- var templ_7745c5c3_Var129 string
2708- templ_7745c5c3_Var129, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)
2634+ var templ_7745c5c3_Var124 string
2635+ templ_7745c5c3_Var124, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)
27092636 if templ_7745c5c3_Err != nil {
2710- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 527, Col: 59}
2637+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 524, Col: 59}
27112638 }
2712- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var129)
2639+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var124)
27132640 if templ_7745c5c3_Err != nil {
27142641 return templ_7745c5c3_Err
27152642 }
2716- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 252, "\"><fieldset class=\"d-modes\"><legend class=\"sr\">merge mode</legend> ")
2643+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 247, "\"><fieldset class=\"d-modes\"><legend class=\"sr\">merge mode</legend> ")
27172644 if templ_7745c5c3_Err != nil {
27182645 return templ_7745c5c3_Err
27192646 }
27202647 for i, m := range p.Box.Modes {
2721- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 253, "<label><input type=\"radio\" name=\"mode\" value=\"")
2648+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 248, "<label><input type=\"radio\" name=\"mode\" value=\"")
27222649 if templ_7745c5c3_Err != nil {
27232650 return templ_7745c5c3_Err
27242651 }
2725- var templ_7745c5c3_Var130 string
2726- templ_7745c5c3_Var130, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.Value)
2652+ var templ_7745c5c3_Var125 string
2653+ templ_7745c5c3_Var125, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.Value)
27272654 if templ_7745c5c3_Err != nil {
2728- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 535, Col: 24}
2655+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 532, Col: 24}
27292656 }
2730- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var130)
2657+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var125)
27312658 if templ_7745c5c3_Err != nil {
27322659 return templ_7745c5c3_Err
27332660 }
2734- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 254, "\"")
2661+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 249, "\"")
27352662 if templ_7745c5c3_Err != nil {
27362663 return templ_7745c5c3_Err
27372664 }
27382665 if i == p.Box.Checked() {
2739- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 255, " checked")
2666+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 250, " checked")
27402667 if templ_7745c5c3_Err != nil {
27412668 return templ_7745c5c3_Err
27422669 }
27432670 }
27442671 if m.Disabled {
2745- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 256, " disabled")
2672+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 251, " disabled")
27462673 if templ_7745c5c3_Err != nil {
27472674 return templ_7745c5c3_Err
27482675 }
27492676 }
2750- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 257, " title=\"")
2677+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 252, " title=\"")
27512678 if templ_7745c5c3_Err != nil {
27522679 return templ_7745c5c3_Err
27532680 }
2754- var templ_7745c5c3_Var131 string
2755- templ_7745c5c3_Var131, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.Reason)
2681+ var templ_7745c5c3_Var126 string
2682+ templ_7745c5c3_Var126, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.Reason)
27562683 if templ_7745c5c3_Err != nil {
2757- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 538, Col: 25}
2684+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 535, Col: 25}
27582685 }
2759- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var131)
2686+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var126)
27602687 if templ_7745c5c3_Err != nil {
27612688 return templ_7745c5c3_Err
27622689 }
2763- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 258, "\" :disabled=\"this.value === 'fast-forward' ? q('[data-mergeability]').data.ffOk !== true : q('[data-mergeability]').data.mergeOk !== true\" :title=\"this.value === 'fast-forward' ? q('[data-mergeability]').data.ffReason : q('[data-mergeability]').data.mergeReason\"> ")
2690+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 253, "\" :disabled=\"this.value === 'fast-forward' ? q('[data-mergeability]').data.ffOk !== true : q('[data-mergeability]').data.mergeOk !== true\" :title=\"this.value === 'fast-forward' ? q('[data-mergeability]').data.ffReason : q('[data-mergeability]').data.mergeReason\"> ")
27642691 if templ_7745c5c3_Err != nil {
27652692 return templ_7745c5c3_Err
27662693 }
2767- var templ_7745c5c3_Var132 string
2768- templ_7745c5c3_Var132, templ_7745c5c3_Err = templ.JoinStringErrs(m.Label)
2694+ var templ_7745c5c3_Var127 string
2695+ templ_7745c5c3_Var127, templ_7745c5c3_Err = templ.JoinStringErrs(m.Label)
27692696 if templ_7745c5c3_Err != nil {
2770- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 542, Col: 17}
2697+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 539, Col: 17}
27712698 }
2772- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var132))
2699+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var127))
27732700 if templ_7745c5c3_Err != nil {
27742701 return templ_7745c5c3_Err
27752702 }
2776- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 259, " ")
2703+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 254, " ")
27772704 if templ_7745c5c3_Err != nil {
27782705 return templ_7745c5c3_Err
27792706 }
27802707 if i < 9 {
2781- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 260, "<kbd aria-hidden=\"true\">")
2708+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 255, "<kbd aria-hidden=\"true\">")
27822709 if templ_7745c5c3_Err != nil {
27832710 return templ_7745c5c3_Err
27842711 }
2785- var templ_7745c5c3_Var133 string
2786- templ_7745c5c3_Var133, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(i + 1))
2712+ var templ_7745c5c3_Var128 string
2713+ templ_7745c5c3_Var128, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(i + 1))
27872714 if templ_7745c5c3_Err != nil {
2788- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 544, Col: 46}
2715+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 541, Col: 46}
27892716 }
2790- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var133))
2717+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var128))
27912718 if templ_7745c5c3_Err != nil {
27922719 return templ_7745c5c3_Err
27932720 }
2794- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 261, "</kbd>")
2721+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 256, "</kbd>")
27952722 if templ_7745c5c3_Err != nil {
27962723 return templ_7745c5c3_Err
27972724 }
27982725 }
2799- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 262, "</label>")
2726+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 257, "</label>")
28002727 if templ_7745c5c3_Err != nil {
28012728 return templ_7745c5c3_Err
28022729 }
28032730 }
2804- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 263, "</fieldset>")
2731+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 258, "</fieldset>")
28052732 if templ_7745c5c3_Err != nil {
28062733 return templ_7745c5c3_Err
28072734 }
@@ -2810,154 +2737,154 @@ func mergeMenu(p MRPage) templ.Component {
28102737 return templ_7745c5c3_Err
28112738 }
28122739 if p.Box.CanDeleteBranch {
2813- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 264, "<label class=\"d-check\"><input type=\"checkbox\" name=\"delete_branch\" value=\"1\"> delete ")
2740+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 259, "<label class=\"d-check\"><input type=\"checkbox\" name=\"delete_branch\" value=\"1\"> delete ")
28142741 if templ_7745c5c3_Err != nil {
28152742 return templ_7745c5c3_Err
28162743 }
2817- var templ_7745c5c3_Var134 string
2818- templ_7745c5c3_Var134, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
2744+ var templ_7745c5c3_Var129 string
2745+ templ_7745c5c3_Var129, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
28192746 if templ_7745c5c3_Err != nil {
2820- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 551, Col: 102}
2747+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 548, Col: 102}
28212748 }
2822- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var134))
2749+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var129))
28232750 if templ_7745c5c3_Err != nil {
28242751 return templ_7745c5c3_Err
28252752 }
2826- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 265, " after the merge <kbd aria-hidden=\"true\">D</kbd></label>")
2753+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 260, " after the merge <kbd aria-hidden=\"true\">D</kbd></label>")
28272754 if templ_7745c5c3_Err != nil {
28282755 return templ_7745c5c3_Err
28292756 }
28302757 }
2831- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 266, "<div class=\"d-btns\"><button type=\"submit\" class=\"btn primary\" data-default")
2758+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 261, "<div class=\"d-btns\"><button type=\"submit\" class=\"btn primary\" data-default")
28322759 if templ_7745c5c3_Err != nil {
28332760 return templ_7745c5c3_Err
28342761 }
28352762 if !p.Box.CanMerge() {
2836- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 267, " disabled")
2763+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 262, " disabled")
28372764 if templ_7745c5c3_Err != nil {
28382765 return templ_7745c5c3_Err
28392766 }
28402767 }
2841- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 268, " title=\"")
2768+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 263, " title=\"")
28422769 if templ_7745c5c3_Err != nil {
28432770 return templ_7745c5c3_Err
28442771 }
2845- var templ_7745c5c3_Var135 string
2846- templ_7745c5c3_Var135, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.MergeTitle())
2772+ var templ_7745c5c3_Var130 string
2773+ templ_7745c5c3_Var130, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.MergeTitle())
28472774 if templ_7745c5c3_Err != nil {
2848- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 559, Col: 33}
2775+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 556, Col: 33}
28492776 }
2850- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var135)
2777+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var130)
28512778 if templ_7745c5c3_Err != nil {
28522779 return templ_7745c5c3_Err
28532780 }
2854- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 269, "\" :disabled=\"!this.form.querySelector('input[name=mode]:checked:not(:disabled)')\" :title=\"(this.form.querySelector('input[name=mode]:checked') || {}).title || ''\">Merge into ")
2781+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 264, "\" :disabled=\"this.form.classList.contains('htmx-request') || !this.form.querySelector('input[name=mode]:checked:not(:disabled)')\" :title=\"(this.form.querySelector('input[name=mode]:checked') || {}).title || ''\">Merge into ")
28552782 if templ_7745c5c3_Err != nil {
28562783 return templ_7745c5c3_Err
28572784 }
2858- var templ_7745c5c3_Var136 string
2859- templ_7745c5c3_Var136, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
2785+ var templ_7745c5c3_Var131 string
2786+ templ_7745c5c3_Var131, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
28602787 if templ_7745c5c3_Err != nil {
2861- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 562, Col: 28}
2788+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 559, Col: 28}
28622789 }
2863- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var136))
2790+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var131))
28642791 if templ_7745c5c3_Err != nil {
28652792 return templ_7745c5c3_Err
28662793 }
2867- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 270, "</button></div></form>")
2794+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 265, "</button> <span class=\"htmx-indicator\" role=\"status\">Merging…</span></div></form>")
28682795 if templ_7745c5c3_Err != nil {
28692796 return templ_7745c5c3_Err
28702797 }
28712798 if p.Box.CanAutoMerge {
2872- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 271, "<form class=\"d-acts\" method=\"post\" action=\"")
2799+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 266, "<form class=\"d-acts\" method=\"post\" action=\"")
28732800 if templ_7745c5c3_Err != nil {
28742801 return templ_7745c5c3_Err
28752802 }
2876- var templ_7745c5c3_Var137 templ.SafeURL
2877- templ_7745c5c3_Var137, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.AutoAction))
2803+ var templ_7745c5c3_Var132 templ.SafeURL
2804+ templ_7745c5c3_Var132, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.AutoAction))
28782805 if templ_7745c5c3_Err != nil {
2879- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 566, Col: 80}
2806+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 564, Col: 80}
28802807 }
2881- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var137))
2808+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var132))
28822809 if templ_7745c5c3_Err != nil {
28832810 return templ_7745c5c3_Err
28842811 }
2885- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 272, "\"><input type=\"hidden\" name=\"head_id\" value=\"")
2812+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 267, "\"><input type=\"hidden\" name=\"head_id\" value=\"")
28862813 if templ_7745c5c3_Err != nil {
28872814 return templ_7745c5c3_Err
28882815 }
2889- var templ_7745c5c3_Var138 string
2890- templ_7745c5c3_Var138, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)
2816+ var templ_7745c5c3_Var133 string
2817+ templ_7745c5c3_Var133, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)
28912818 if templ_7745c5c3_Err != nil {
2892- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 567, Col: 60}
2819+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 565, Col: 60}
28932820 }
2894- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var138)
2821+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var133)
28952822 if templ_7745c5c3_Err != nil {
28962823 return templ_7745c5c3_Err
28972824 }
2898- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 273, "\"><fieldset class=\"d-modes\"><legend>Auto-merge mode</legend> ")
2825+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 268, "\"><fieldset class=\"d-modes\"><legend>Auto-merge mode</legend> ")
28992826 if templ_7745c5c3_Err != nil {
29002827 return templ_7745c5c3_Err
29012828 }
29022829 for i, m := range p.Box.Modes {
2903- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 274, "<label><input type=\"radio\" name=\"mode\" value=\"")
2830+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 269, "<label><input type=\"radio\" name=\"mode\" value=\"")
29042831 if templ_7745c5c3_Err != nil {
29052832 return templ_7745c5c3_Err
29062833 }
2907- var templ_7745c5c3_Var139 string
2908- templ_7745c5c3_Var139, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.Value)
2834+ var templ_7745c5c3_Var134 string
2835+ templ_7745c5c3_Var134, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.Value)
29092836 if templ_7745c5c3_Err != nil {
2910- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 571, Col: 62}
2837+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 569, Col: 62}
29112838 }
2912- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var139)
2839+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var134)
29132840 if templ_7745c5c3_Err != nil {
29142841 return templ_7745c5c3_Err
29152842 }
2916- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 275, "\"")
2843+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 270, "\"")
29172844 if templ_7745c5c3_Err != nil {
29182845 return templ_7745c5c3_Err
29192846 }
29202847 if i == 0 {
2921- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 276, " checked")
2848+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 271, " checked")
29222849 if templ_7745c5c3_Err != nil {
29232850 return templ_7745c5c3_Err
29242851 }
29252852 }
2926- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 277, "> ")
2853+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 272, "> ")
29272854 if templ_7745c5c3_Err != nil {
29282855 return templ_7745c5c3_Err
29292856 }
2930- var templ_7745c5c3_Var140 string
2931- templ_7745c5c3_Var140, templ_7745c5c3_Err = templ.JoinStringErrs(m.Label)
2857+ var templ_7745c5c3_Var135 string
2858+ templ_7745c5c3_Var135, templ_7745c5c3_Err = templ.JoinStringErrs(m.Label)
29322859 if templ_7745c5c3_Err != nil {
2933- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 571, Col: 96}
2860+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 569, Col: 96}
29342861 }
2935- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var140))
2862+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var135))
29362863 if templ_7745c5c3_Err != nil {
29372864 return templ_7745c5c3_Err
29382865 }
2939- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 278, "</label>")
2866+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 273, "</label>")
29402867 if templ_7745c5c3_Err != nil {
29412868 return templ_7745c5c3_Err
29422869 }
29432870 }
2944- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 279, "</fieldset><div class=\"d-btns\"><button type=\"submit\" class=\"btn\"")
2871+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 274, "</fieldset><div class=\"d-btns\"><button type=\"submit\" class=\"btn\"")
29452872 if templ_7745c5c3_Err != nil {
29462873 return templ_7745c5c3_Err
29472874 }
29482875 if len(p.Box.Modes) == 0 {
2949- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 280, " disabled")
2876+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 275, " disabled")
29502877 if templ_7745c5c3_Err != nil {
29512878 return templ_7745c5c3_Err
29522879 }
29532880 }
2954- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 281, " title=\"merge once the checks pass\">Merge when ready</button></div></form>")
2881+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 276, " title=\"merge once the checks pass\">Merge when ready</button></div></form>")
29552882 if templ_7745c5c3_Err != nil {
29562883 return templ_7745c5c3_Err
29572884 }
29582885 }
29592886 }
2960- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 282, "</div></details>")
2887+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 277, "</div></details>")
29612888 if templ_7745c5c3_Err != nil {
29622889 return templ_7745c5c3_Err
29632890 }
@@ -2983,182 +2910,182 @@ func MRMergeability(v MergeabilityView) templ.Component {
29832910 }()
29842911 }
29852912 ctx = templ.InitializeContext(ctx)
2986- templ_7745c5c3_Var141 := templ.GetChildren(ctx)
2987- if templ_7745c5c3_Var141 == nil {
2988- templ_7745c5c3_Var141 = templ.NopComponent
2913+ templ_7745c5c3_Var136 := templ.GetChildren(ctx)
2914+ if templ_7745c5c3_Var136 == nil {
2915+ templ_7745c5c3_Var136 = templ.NopComponent
29892916 }
29902917 ctx = templ.ClearChildren(ctx)
2991- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 283, "<span data-mergeability data-state=\"")
2918+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 278, "<span data-mergeability data-state=\"")
29922919 if templ_7745c5c3_Err != nil {
29932920 return templ_7745c5c3_Err
29942921 }
2995- var templ_7745c5c3_Var142 string
2996- templ_7745c5c3_Var142, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.State)
2922+ var templ_7745c5c3_Var137 string
2923+ templ_7745c5c3_Var137, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.State)
29972924 if templ_7745c5c3_Err != nil {
2998- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 589, Col: 22}
2925+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 587, Col: 22}
29992926 }
3000- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var142)
2927+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var137)
30012928 if templ_7745c5c3_Err != nil {
30022929 return templ_7745c5c3_Err
30032930 }
3004- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 284, "\" data-ff-ok=\"")
2931+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 279, "\" data-ff-ok=\"")
30052932 if templ_7745c5c3_Err != nil {
30062933 return templ_7745c5c3_Err
30072934 }
3008- var templ_7745c5c3_Var143 string
3009- templ_7745c5c3_Var143, templ_7745c5c3_Err = templ.ResolveAttributeValue(strconv.FormatBool(v.FFOk))
2935+ var templ_7745c5c3_Var138 string
2936+ templ_7745c5c3_Var138, templ_7745c5c3_Err = templ.ResolveAttributeValue(strconv.FormatBool(v.FFOk))
30102937 if templ_7745c5c3_Err != nil {
3011- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 590, Col: 41}
2938+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 588, Col: 41}
30122939 }
3013- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var143)
2940+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var138)
30142941 if templ_7745c5c3_Err != nil {
30152942 return templ_7745c5c3_Err
30162943 }
3017- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 285, "\" data-merge-ok=\"")
2944+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 280, "\" data-merge-ok=\"")
30182945 if templ_7745c5c3_Err != nil {
30192946 return templ_7745c5c3_Err
30202947 }
3021- var templ_7745c5c3_Var144 string
3022- templ_7745c5c3_Var144, templ_7745c5c3_Err = templ.ResolveAttributeValue(strconv.FormatBool(v.MergeOk))
2948+ var templ_7745c5c3_Var139 string
2949+ templ_7745c5c3_Var139, templ_7745c5c3_Err = templ.ResolveAttributeValue(strconv.FormatBool(v.MergeOk))
30232950 if templ_7745c5c3_Err != nil {
3024- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 591, Col: 47}
2951+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 589, Col: 47}
30252952 }
3026- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var144)
2953+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var139)
30272954 if templ_7745c5c3_Err != nil {
30282955 return templ_7745c5c3_Err
30292956 }
3030- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 286, "\" data-ff-reason=\"")
2957+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 281, "\" data-ff-reason=\"")
30312958 if templ_7745c5c3_Err != nil {
30322959 return templ_7745c5c3_Err
30332960 }
3034- var templ_7745c5c3_Var145 string
3035- templ_7745c5c3_Var145, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.FFReason)
2961+ var templ_7745c5c3_Var140 string
2962+ templ_7745c5c3_Var140, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.FFReason)
30362963 if templ_7745c5c3_Err != nil {
3037- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 592, Col: 29}
2964+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 590, Col: 29}
30382965 }
3039- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var145)
2966+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var140)
30402967 if templ_7745c5c3_Err != nil {
30412968 return templ_7745c5c3_Err
30422969 }
3043- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 287, "\" data-merge-reason=\"")
2970+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 282, "\" data-merge-reason=\"")
30442971 if templ_7745c5c3_Err != nil {
30452972 return templ_7745c5c3_Err
30462973 }
3047- var templ_7745c5c3_Var146 string
3048- templ_7745c5c3_Var146, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.MergeReason)
2974+ var templ_7745c5c3_Var141 string
2975+ templ_7745c5c3_Var141, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.MergeReason)
30492976 if templ_7745c5c3_Err != nil {
3050- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 593, Col: 35}
2977+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 591, Col: 35}
30512978 }
3052- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var146)
2979+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var141)
30532980 if templ_7745c5c3_Err != nil {
30542981 return templ_7745c5c3_Err
30552982 }
3056- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 288, "\"><span class=\"badge\" data-state=\"")
2983+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 283, "\"><span class=\"badge\" data-state=\"")
30572984 if templ_7745c5c3_Err != nil {
30582985 return templ_7745c5c3_Err
30592986 }
3060- var templ_7745c5c3_Var147 string
3061- templ_7745c5c3_Var147, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.State)
2987+ var templ_7745c5c3_Var142 string
2988+ templ_7745c5c3_Var142, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.State)
30622989 if templ_7745c5c3_Err != nil {
3063- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 595, Col: 42}
2990+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 593, Col: 42}
30642991 }
3065- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var147)
2992+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var142)
30662993 if templ_7745c5c3_Err != nil {
30672994 return templ_7745c5c3_Err
30682995 }
3069- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 289, "\">")
2996+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 284, "\">")
30702997 if templ_7745c5c3_Err != nil {
30712998 return templ_7745c5c3_Err
30722999 }
3073- var templ_7745c5c3_Var148 string
3074- templ_7745c5c3_Var148, templ_7745c5c3_Err = templ.JoinStringErrs(v.Label)
3000+ var templ_7745c5c3_Var143 string
3001+ templ_7745c5c3_Var143, templ_7745c5c3_Err = templ.JoinStringErrs(v.Label)
30753002 if templ_7745c5c3_Err != nil {
3076- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 595, Col: 54}
3003+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 593, Col: 54}
30773004 }
3078- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var148))
3005+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var143))
30793006 if templ_7745c5c3_Err != nil {
30803007 return templ_7745c5c3_Err
30813008 }
3082- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 290, "</span> ")
3009+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 285, "</span> ")
30833010 if templ_7745c5c3_Err != nil {
30843011 return templ_7745c5c3_Err
30853012 }
30863013 if v.Detail != "" {
3087- var templ_7745c5c3_Var149 string
3088- templ_7745c5c3_Var149, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
3014+ var templ_7745c5c3_Var144 string
3015+ templ_7745c5c3_Var144, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
30893016 if templ_7745c5c3_Err != nil {
3090- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 597, Col: 8}
3017+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 595, Col: 8}
30913018 }
3092- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var149))
3019+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var144))
30933020 if templ_7745c5c3_Err != nil {
30943021 return templ_7745c5c3_Err
30953022 }
3096- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 291, "<span class=\"dim\">")
3023+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 286, "<span class=\"dim\">")
30973024 if templ_7745c5c3_Err != nil {
30983025 return templ_7745c5c3_Err
30993026 }
3100- var templ_7745c5c3_Var150 string
3101- templ_7745c5c3_Var150, templ_7745c5c3_Err = templ.JoinStringErrs(v.Detail)
3027+ var templ_7745c5c3_Var145 string
3028+ templ_7745c5c3_Var145, templ_7745c5c3_Err = templ.JoinStringErrs(v.Detail)
31023029 if templ_7745c5c3_Err != nil {
3103- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 597, Col: 38}
3030+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 595, Col: 38}
31043031 }
3105- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var150))
3032+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var145))
31063033 if templ_7745c5c3_Err != nil {
31073034 return templ_7745c5c3_Err
31083035 }
3109- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 292, "</span>")
3036+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 287, "</span>")
31103037 if templ_7745c5c3_Err != nil {
31113038 return templ_7745c5c3_Err
31123039 }
31133040 }
3114- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 293, "</span> ")
3041+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 288, "</span> ")
31153042 if templ_7745c5c3_Err != nil {
31163043 return templ_7745c5c3_Err
31173044 }
31183045 if len(v.Paths) > 0 {
3119- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 294, "<ul class=\"mg-paths\" aria-label=\"conflicting files\">")
3046+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 289, "<ul class=\"mg-paths\" aria-label=\"conflicting files\">")
31203047 if templ_7745c5c3_Err != nil {
31213048 return templ_7745c5c3_Err
31223049 }
31233050 for _, path := range v.Paths {
3124- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 295, "<li><code>")
3051+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 290, "<li><code>")
31253052 if templ_7745c5c3_Err != nil {
31263053 return templ_7745c5c3_Err
31273054 }
3128- var templ_7745c5c3_Var151 string
3129- templ_7745c5c3_Var151, templ_7745c5c3_Err = templ.JoinStringErrs(path)
3055+ var templ_7745c5c3_Var146 string
3056+ templ_7745c5c3_Var146, templ_7745c5c3_Err = templ.JoinStringErrs(path)
31303057 if templ_7745c5c3_Err != nil {
3131- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 603, Col: 20}
3058+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 601, Col: 20}
31323059 }
3133- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var151))
3060+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var146))
31343061 if templ_7745c5c3_Err != nil {
31353062 return templ_7745c5c3_Err
31363063 }
3137- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 296, "</code></li>")
3064+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 291, "</code></li>")
31383065 if templ_7745c5c3_Err != nil {
31393066 return templ_7745c5c3_Err
31403067 }
31413068 }
3142- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 297, "</ul>")
3069+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 292, "</ul>")
31433070 if templ_7745c5c3_Err != nil {
31443071 return templ_7745c5c3_Err
31453072 }
31463073 }
31473074 if v.PathsNote != "" {
3148- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 298, "<p class=\"dim\">")
3075+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 293, "<p class=\"dim\">")
31493076 if templ_7745c5c3_Err != nil {
31503077 return templ_7745c5c3_Err
31513078 }
3152- var templ_7745c5c3_Var152 string
3153- templ_7745c5c3_Var152, templ_7745c5c3_Err = templ.JoinStringErrs(v.PathsNote)
3079+ var templ_7745c5c3_Var147 string
3080+ templ_7745c5c3_Var147, templ_7745c5c3_Err = templ.JoinStringErrs(v.PathsNote)
31543081 if templ_7745c5c3_Err != nil {
3155- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 608, Col: 30}
3082+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 606, Col: 30}
31563083 }
3157- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var152))
3084+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var147))
31583085 if templ_7745c5c3_Err != nil {
31593086 return templ_7745c5c3_Err
31603087 }
3161- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 299, "</p>")
3088+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 294, "</p>")
31623089 if templ_7745c5c3_Err != nil {
31633090 return templ_7745c5c3_Err
31643091 }
@@ -3185,12 +3112,12 @@ func mrMergeabilitySlot(v MergeabilityView) templ.Component {
31853112 }()
31863113 }
31873114 ctx = templ.InitializeContext(ctx)
3188- templ_7745c5c3_Var153 := templ.GetChildren(ctx)
3189- if templ_7745c5c3_Var153 == nil {
3190- templ_7745c5c3_Var153 = templ.NopComponent
3115+ templ_7745c5c3_Var148 := templ.GetChildren(ctx)
3116+ if templ_7745c5c3_Var148 == nil {
3117+ templ_7745c5c3_Var148 = templ.NopComponent
31913118 }
31923119 ctx = templ.ClearChildren(ctx)
3193- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 300, "<div id=\"mr-mergeability\" class=\"live-slot\" role=\"status\" data-slot>")
3120+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 295, "<div id=\"mr-mergeability\" class=\"live-slot\" role=\"status\" data-slot>")
31943121 if templ_7745c5c3_Err != nil {
31953122 return templ_7745c5c3_Err
31963123 }
@@ -3198,7 +3125,7 @@ func mrMergeabilitySlot(v MergeabilityView) templ.Component {
31983125 if templ_7745c5c3_Err != nil {
31993126 return templ_7745c5c3_Err
32003127 }
3201- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 301, "</div>")
3128+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 296, "</div>")
32023129 if templ_7745c5c3_Err != nil {
32033130 return templ_7745c5c3_Err
32043131 }
@@ -3223,9 +3150,9 @@ func MRMergeabilityFragment(v MergeabilityView) templ.Component {
32233150 }()
32243151 }
32253152 ctx = templ.InitializeContext(ctx)
3226- templ_7745c5c3_Var154 := templ.GetChildren(ctx)
3227- if templ_7745c5c3_Var154 == nil {
3228- templ_7745c5c3_Var154 = templ.NopComponent
3153+ templ_7745c5c3_Var149 := templ.GetChildren(ctx)
3154+ if templ_7745c5c3_Var149 == nil {
3155+ templ_7745c5c3_Var149 = templ.NopComponent
32293156 }
32303157 ctx = templ.ClearChildren(ctx)
32313158 templ_7745c5c3_Err = mrMergeabilitySlot(v).Render(ctx, templ_7745c5c3_Buffer)
@@ -3254,128 +3181,128 @@ func moreMenu(p MRPage) templ.Component {
32543181 }()
32553182 }
32563183 ctx = templ.InitializeContext(ctx)
3257- templ_7745c5c3_Var155 := templ.GetChildren(ctx)
3258- if templ_7745c5c3_Var155 == nil {
3259- templ_7745c5c3_Var155 = templ.NopComponent
3184+ templ_7745c5c3_Var150 := templ.GetChildren(ctx)
3185+ if templ_7745c5c3_Var150 == nil {
3186+ templ_7745c5c3_Var150 = templ.NopComponent
32603187 }
32613188 ctx = templ.ClearChildren(ctx)
3262- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 302, "<details class=\"menu omenu\"><summary class=\"btn icon\" aria-label=\"More actions\" title=\"more actions\">⋯</summary><div class=\"menu-pop\" role=\"group\" aria-label=\"More actions\"><section class=\"merge-settings\"><h2>Merge settings</h2><dl class=\"kv\"><dt>modes</dt><dd>")
3189+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 297, "<details class=\"menu omenu\"><summary class=\"btn icon\" aria-label=\"More actions\" title=\"more actions\">⋯</summary><div class=\"menu-pop\" role=\"group\" aria-label=\"More actions\"><section class=\"merge-settings\"><h2>Merge settings</h2><dl class=\"kv\"><dt>modes</dt><dd>")
32633190 if templ_7745c5c3_Err != nil {
32643191 return templ_7745c5c3_Err
32653192 }
3266- var templ_7745c5c3_Var156 string
3267- templ_7745c5c3_Var156, templ_7745c5c3_Err = templ.JoinStringErrs(strings.Join(p.Modes, ", "))
3193+ var templ_7745c5c3_Var151 string
3194+ templ_7745c5c3_Var151, templ_7745c5c3_Err = templ.JoinStringErrs(strings.Join(p.Modes, ", "))
32683195 if templ_7745c5c3_Err != nil {
3269- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 635, Col: 38}
3196+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 633, Col: 38}
32703197 }
3271- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var156))
3198+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var151))
32723199 if templ_7745c5c3_Err != nil {
32733200 return templ_7745c5c3_Err
32743201 }
3275- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 303, "</dd><dt>checks</dt><dd>")
3202+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 298, "</dd><dt>checks</dt><dd>")
32763203 if templ_7745c5c3_Err != nil {
32773204 return templ_7745c5c3_Err
32783205 }
32793206 if p.ChecksBlock {
3280- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 304, "failing or unfinished checks block the merge")
3207+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 299, "failing or unfinished checks block the merge")
32813208 if templ_7745c5c3_Err != nil {
32823209 return templ_7745c5c3_Err
32833210 }
32843211 } else {
3285- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 305, "do not block the merge")
3212+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 300, "do not block the merge")
32863213 if templ_7745c5c3_Err != nil {
32873214 return templ_7745c5c3_Err
32883215 }
32893216 }
3290- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 306, "</dd></dl></section>")
3217+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 301, "</dd></dl></section>")
32913218 if templ_7745c5c3_Err != nil {
32923219 return templ_7745c5c3_Err
32933220 }
32943221 if p.Box != nil {
32953222 if p.Box.Signed {
3296- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 307, "<p class=\"d-note\" id=\"mr-signing\">squash and merge commits are signed with ermite's own key (generated on first start). ")
3223+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 302, "<p class=\"d-note\" id=\"mr-signing\">squash and merge commits are signed with ermite's own key (generated on first start). ")
32973224 if templ_7745c5c3_Err != nil {
32983225 return templ_7745c5c3_Err
32993226 }
33003227 if p.Box.Fingerprint != "" {
3301- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 308, "fingerprint <code>")
3228+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 303, "fingerprint <code>")
33023229 if templ_7745c5c3_Err != nil {
33033230 return templ_7745c5c3_Err
33043231 }
3305- var templ_7745c5c3_Var157 string
3306- templ_7745c5c3_Var157, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.Fingerprint)
3232+ var templ_7745c5c3_Var152 string
3233+ templ_7745c5c3_Var152, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.Fingerprint)
33073234 if templ_7745c5c3_Err != nil {
3308- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 651, Col: 44}
3235+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 649, Col: 44}
33093236 }
3310- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var157))
3237+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var152))
33113238 if templ_7745c5c3_Err != nil {
33123239 return templ_7745c5c3_Err
33133240 }
3314- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 309, "</code> ")
3241+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 304, "</code> ")
33153242 if templ_7745c5c3_Err != nil {
33163243 return templ_7745c5c3_Err
33173244 }
33183245 }
3319- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 310, "<code>ermite signing-key show</code> prints it.</p>")
3246+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 305, "<code>ermite signing-key show</code> prints it.</p>")
33203247 if templ_7745c5c3_Err != nil {
33213248 return templ_7745c5c3_Err
33223249 }
33233250 }
3324- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 311, " ")
3251+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 306, " ")
33253252 if templ_7745c5c3_Err != nil {
33263253 return templ_7745c5c3_Err
33273254 }
33283255 if p.Box.CanMarkRead {
3329- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 312, "<form method=\"post\" action=\"")
3256+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 307, "<form method=\"post\" action=\"")
33303257 if templ_7745c5c3_Err != nil {
33313258 return templ_7745c5c3_Err
33323259 }
3333- var templ_7745c5c3_Var158 templ.SafeURL
3334- templ_7745c5c3_Var158, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.ReadAction))
3260+ var templ_7745c5c3_Var153 templ.SafeURL
3261+ templ_7745c5c3_Var153, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.ReadAction))
33353262 if templ_7745c5c3_Err != nil {
3336- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 657, Col: 65}
3263+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 655, Col: 65}
33373264 }
3338- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var158))
3265+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var153))
33393266 if templ_7745c5c3_Err != nil {
33403267 return templ_7745c5c3_Err
33413268 }
3342- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 313, "\"><input type=\"hidden\" name=\"head_id\" value=\"")
3269+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 308, "\"><input type=\"hidden\" name=\"head_id\" value=\"")
33433270 if templ_7745c5c3_Err != nil {
33443271 return templ_7745c5c3_Err
33453272 }
3346- var templ_7745c5c3_Var159 string
3347- templ_7745c5c3_Var159, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)
3273+ var templ_7745c5c3_Var154 string
3274+ templ_7745c5c3_Var154, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)
33483275 if templ_7745c5c3_Err != nil {
3349- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 658, Col: 60}
3276+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 656, Col: 60}
33503277 }
3351- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var159)
3278+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var154)
33523279 if templ_7745c5c3_Err != nil {
33533280 return templ_7745c5c3_Err
33543281 }
3355- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 314, "\"> <button type=\"submit\" title=\"the next visit can show only what changed after this head\" class=\"btn\" aria-keyshortcuts=\"Shift+R\" data-read>Mark read <kbd aria-hidden=\"true\">R</kbd></button></form>")
3282+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 309, "\"> <button type=\"submit\" title=\"the next visit can show only what changed after this head\" class=\"btn\" aria-keyshortcuts=\"Shift+R\" data-read>Mark read <kbd aria-hidden=\"true\">R</kbd></button></form>")
33563283 if templ_7745c5c3_Err != nil {
33573284 return templ_7745c5c3_Err
33583285 }
33593286 }
3360- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 315, " <form method=\"post\" action=\"")
3287+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 310, " <form method=\"post\" action=\"")
33613288 if templ_7745c5c3_Err != nil {
33623289 return templ_7745c5c3_Err
33633290 }
3364- var templ_7745c5c3_Var160 templ.SafeURL
3365- templ_7745c5c3_Var160, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.CloseAction))
3291+ var templ_7745c5c3_Var155 templ.SafeURL
3292+ templ_7745c5c3_Var155, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.CloseAction))
33663293 if templ_7745c5c3_Err != nil {
3367- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 662, Col: 65}
3294+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 660, Col: 65}
33683295 }
3369- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var160))
3296+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var155))
33703297 if templ_7745c5c3_Err != nil {
33713298 return templ_7745c5c3_Err
33723299 }
3373- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 316, "\"><button type=\"submit\" title=\"close without merging; the branch is kept\" class=\"btn danger\">Close</button></form>")
3300+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 311, "\"><button type=\"submit\" title=\"close without merging; the branch is kept\" class=\"btn danger\">Close</button></form>")
33743301 if templ_7745c5c3_Err != nil {
33753302 return templ_7745c5c3_Err
33763303 }
33773304 if !p.Box.HeadGone && p.Box.ReadyAction == "" {
3378- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 317, "<details class=\"d-or\"><summary class=\"mute\">or from a terminal</summary>")
3305+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 312, "<details class=\"d-or\"><summary class=\"mute\">or from a terminal</summary>")
33793306 if templ_7745c5c3_Err != nil {
33803307 return templ_7745c5c3_Err
33813308 }
@@ -3383,13 +3310,13 @@ func moreMenu(p MRPage) templ.Component {
33833310 if templ_7745c5c3_Err != nil {
33843311 return templ_7745c5c3_Err
33853312 }
3386- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 318, "</details>")
3313+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 313, "</details>")
33873314 if templ_7745c5c3_Err != nil {
33883315 return templ_7745c5c3_Err
33893316 }
33903317 }
33913318 }
3392- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 319, "</div></details>")
3319+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 314, "</div></details>")
33933320 if templ_7745c5c3_Err != nil {
33943321 return templ_7745c5c3_Err
33953322 }
@@ -3413,12 +3340,12 @@ func Compare(l Layout, p ComparePage) templ.Component {
34133340 }()
34143341 }
34153342 ctx = templ.InitializeContext(ctx)
3416- templ_7745c5c3_Var161 := templ.GetChildren(ctx)
3417- if templ_7745c5c3_Var161 == nil {
3418- templ_7745c5c3_Var161 = templ.NopComponent
3343+ templ_7745c5c3_Var156 := templ.GetChildren(ctx)
3344+ if templ_7745c5c3_Var156 == nil {
3345+ templ_7745c5c3_Var156 = templ.NopComponent
34193346 }
34203347 ctx = templ.ClearChildren(ctx)
3421- templ_7745c5c3_Var162 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
3348+ templ_7745c5c3_Var157 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
34223349 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
34233350 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
34243351 if !templ_7745c5c3_IsBuffer {
@@ -3430,263 +3357,263 @@ func Compare(l Layout, p ComparePage) templ.Component {
34303357 }()
34313358 }
34323359 ctx = templ.InitializeContext(ctx)
3433- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 320, "<header class=\"show mr-h\"><h1>")
3360+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 315, "<header class=\"show mr-h\"><h1>")
34343361 if templ_7745c5c3_Err != nil {
34353362 return templ_7745c5c3_Err
34363363 }
3437- var templ_7745c5c3_Var163 string
3438- templ_7745c5c3_Var163, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
3364+ var templ_7745c5c3_Var158 string
3365+ templ_7745c5c3_Var158, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
34393366 if templ_7745c5c3_Err != nil {
3440- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 679, Col: 17}
3367+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 677, Col: 17}
34413368 }
3442- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var163))
3369+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var158))
34433370 if templ_7745c5c3_Err != nil {
34443371 return templ_7745c5c3_Err
34453372 }
3446- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 321, " → ")
3373+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 316, " → ")
34473374 if templ_7745c5c3_Err != nil {
34483375 return templ_7745c5c3_Err
34493376 }
3450- var templ_7745c5c3_Var164 string
3451- templ_7745c5c3_Var164, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
3377+ var templ_7745c5c3_Var159 string
3378+ templ_7745c5c3_Var159, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
34523379 if templ_7745c5c3_Err != nil {
3453- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 679, Col: 34}
3380+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 677, Col: 34}
34543381 }
3455- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var164))
3382+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var159))
34563383 if templ_7745c5c3_Err != nil {
34573384 return templ_7745c5c3_Err
34583385 }
3459- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 322, "</h1><dl class=\"kv show-kv\"><dt>branch</dt><dd><a href=\"")
3386+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 317, "</h1><dl class=\"kv show-kv\"><dt>branch</dt><dd><a href=\"")
34603387 if templ_7745c5c3_Err != nil {
34613388 return templ_7745c5c3_Err
34623389 }
3463- var templ_7745c5c3_Var165 templ.SafeURL
3464- templ_7745c5c3_Var165, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.SourceHref))
3390+ var templ_7745c5c3_Var160 templ.SafeURL
3391+ templ_7745c5c3_Var160, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.SourceHref))
34653392 if templ_7745c5c3_Err != nil {
3466- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 682, Col: 45}
3393+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 680, Col: 45}
34673394 }
3468- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var165))
3395+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var160))
34693396 if templ_7745c5c3_Err != nil {
34703397 return templ_7745c5c3_Err
34713398 }
3472- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 323, "\">")
3399+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 318, "\">")
34733400 if templ_7745c5c3_Err != nil {
34743401 return templ_7745c5c3_Err
34753402 }
3476- var templ_7745c5c3_Var166 string
3477- templ_7745c5c3_Var166, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
3403+ var templ_7745c5c3_Var161 string
3404+ templ_7745c5c3_Var161, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
34783405 if templ_7745c5c3_Err != nil {
3479- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 682, Col: 58}
3406+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 680, Col: 58}
34803407 }
3481- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var166))
3408+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var161))
34823409 if templ_7745c5c3_Err != nil {
34833410 return templ_7745c5c3_Err
34843411 }
3485- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 324, "</a></dd><dt>target</dt><dd><a href=\"")
3412+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 319, "</a></dd><dt>target</dt><dd><a href=\"")
34863413 if templ_7745c5c3_Err != nil {
34873414 return templ_7745c5c3_Err
34883415 }
3489- var templ_7745c5c3_Var167 templ.SafeURL
3490- templ_7745c5c3_Var167, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.TargetHref))
3416+ var templ_7745c5c3_Var162 templ.SafeURL
3417+ templ_7745c5c3_Var162, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.TargetHref))
34913418 if templ_7745c5c3_Err != nil {
3492- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 684, Col: 45}
3419+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 682, Col: 45}
34933420 }
3494- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var167))
3421+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var162))
34953422 if templ_7745c5c3_Err != nil {
34963423 return templ_7745c5c3_Err
34973424 }
3498- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 325, "\">")
3425+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 320, "\">")
34993426 if templ_7745c5c3_Err != nil {
35003427 return templ_7745c5c3_Err
35013428 }
3502- var templ_7745c5c3_Var168 string
3503- templ_7745c5c3_Var168, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
3429+ var templ_7745c5c3_Var163 string
3430+ templ_7745c5c3_Var163, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
35043431 if templ_7745c5c3_Err != nil {
3505- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 684, Col: 58}
3432+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 682, Col: 58}
35063433 }
3507- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var168))
3434+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var163))
35083435 if templ_7745c5c3_Err != nil {
35093436 return templ_7745c5c3_Err
35103437 }
3511- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 326, "</a></dd><dt>ahead</dt><dd>")
3438+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 321, "</a></dd><dt>ahead</dt><dd>")
35123439 if templ_7745c5c3_Err != nil {
35133440 return templ_7745c5c3_Err
35143441 }
3515- var templ_7745c5c3_Var169 string
3516- templ_7745c5c3_Var169, templ_7745c5c3_Err = templ.JoinStringErrs(p.AheadText)
3442+ var templ_7745c5c3_Var164 string
3443+ templ_7745c5c3_Var164, templ_7745c5c3_Err = templ.JoinStringErrs(p.AheadText)
35173444 if templ_7745c5c3_Err != nil {
3518- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 686, Col: 21}
3445+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 684, Col: 21}
35193446 }
3520- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var169))
3447+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var164))
35213448 if templ_7745c5c3_Err != nil {
35223449 return templ_7745c5c3_Err
35233450 }
3524- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 327, "</dd></dl></header>")
3451+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 322, "</dd></dl></header>")
35253452 if templ_7745c5c3_Err != nil {
35263453 return templ_7745c5c3_Err
35273454 }
35283455 if p.Note != "" {
3529- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 328, "<p class=\"notice\">")
3456+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 323, "<p class=\"notice\">")
35303457 if templ_7745c5c3_Err != nil {
35313458 return templ_7745c5c3_Err
35323459 }
3533- var templ_7745c5c3_Var170 string
3534- templ_7745c5c3_Var170, templ_7745c5c3_Err = templ.JoinStringErrs(p.Note)
3460+ var templ_7745c5c3_Var165 string
3461+ templ_7745c5c3_Var165, templ_7745c5c3_Err = templ.JoinStringErrs(p.Note)
35353462 if templ_7745c5c3_Err != nil {
3536- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 690, Col: 29}
3463+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 688, Col: 29}
35373464 }
3538- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var170))
3465+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var165))
35393466 if templ_7745c5c3_Err != nil {
35403467 return templ_7745c5c3_Err
35413468 }
3542- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 329, "</p>")
3469+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 324, "</p>")
35433470 if templ_7745c5c3_Err != nil {
35443471 return templ_7745c5c3_Err
35453472 }
35463473 }
3547- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 330, " ")
3474+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 325, " ")
35483475 if templ_7745c5c3_Err != nil {
35493476 return templ_7745c5c3_Err
35503477 }
35513478 if p.Existing != nil {
3552- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 331, "<p class=\"notice\">an open merge request already covers these branches: <a href=\"")
3479+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 326, "<p class=\"notice\">an open merge request already covers these branches: <a href=\"")
35533480 if templ_7745c5c3_Err != nil {
35543481 return templ_7745c5c3_Err
35553482 }
3556- var templ_7745c5c3_Var171 templ.SafeURL
3557- templ_7745c5c3_Var171, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Existing.Href))
3483+ var templ_7745c5c3_Var166 templ.SafeURL
3484+ templ_7745c5c3_Var166, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Existing.Href))
35583485 if templ_7745c5c3_Err != nil {
3559- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 693, Col: 114}
3486+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 691, Col: 114}
35603487 }
3561- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var171))
3488+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var166))
35623489 if templ_7745c5c3_Err != nil {
35633490 return templ_7745c5c3_Err
35643491 }
3565- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 332, "\">")
3492+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 327, "\">")
35663493 if templ_7745c5c3_Err != nil {
35673494 return templ_7745c5c3_Err
35683495 }
3569- var templ_7745c5c3_Var172 string
3570- templ_7745c5c3_Var172, templ_7745c5c3_Err = templ.JoinStringErrs(p.Existing.Label)
3496+ var templ_7745c5c3_Var167 string
3497+ templ_7745c5c3_Var167, templ_7745c5c3_Err = templ.JoinStringErrs(p.Existing.Label)
35713498 if templ_7745c5c3_Err != nil {
3572- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 693, Col: 135}
3499+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 691, Col: 135}
35733500 }
3574- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var172))
3501+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var167))
35753502 if templ_7745c5c3_Err != nil {
35763503 return templ_7745c5c3_Err
35773504 }
3578- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 333, "</a></p>")
3505+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 328, "</a></p>")
35793506 if templ_7745c5c3_Err != nil {
35803507 return templ_7745c5c3_Err
35813508 }
35823509 }
3583- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 334, " ")
3510+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 329, " ")
35843511 if templ_7745c5c3_Err != nil {
35853512 return templ_7745c5c3_Err
35863513 }
35873514 if p.Create != nil {
3588- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 335, "<form class=\"cform create\" method=\"post\" action=\"")
3515+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 330, "<form class=\"cform create\" method=\"post\" action=\"")
35893516 if templ_7745c5c3_Err != nil {
35903517 return templ_7745c5c3_Err
35913518 }
3592- var templ_7745c5c3_Var173 templ.SafeURL
3593- templ_7745c5c3_Var173, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Create.Action))
3519+ var templ_7745c5c3_Var168 templ.SafeURL
3520+ templ_7745c5c3_Var168, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Create.Action))
35943521 if templ_7745c5c3_Err != nil {
3595- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 696, Col: 83}
3522+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 694, Col: 83}
35963523 }
3597- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var173))
3524+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var168))
35983525 if templ_7745c5c3_Err != nil {
35993526 return templ_7745c5c3_Err
36003527 }
3601- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 336, "\"><input type=\"hidden\" name=\"source\" value=\"")
3528+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 331, "\"><input type=\"hidden\" name=\"source\" value=\"")
36023529 if templ_7745c5c3_Err != nil {
36033530 return templ_7745c5c3_Err
36043531 }
3605- var templ_7745c5c3_Var174 string
3606- templ_7745c5c3_Var174, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Source)
3532+ var templ_7745c5c3_Var169 string
3533+ templ_7745c5c3_Var169, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Source)
36073534 if templ_7745c5c3_Err != nil {
3608- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 697, Col: 62}
3535+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 695, Col: 62}
36093536 }
3610- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var174)
3537+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var169)
36113538 if templ_7745c5c3_Err != nil {
36123539 return templ_7745c5c3_Err
36133540 }
3614- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 337, "\"> <input type=\"hidden\" name=\"target\" value=\"")
3541+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 332, "\"> <input type=\"hidden\" name=\"target\" value=\"")
36153542 if templ_7745c5c3_Err != nil {
36163543 return templ_7745c5c3_Err
36173544 }
3618- var templ_7745c5c3_Var175 string
3619- templ_7745c5c3_Var175, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Target)
3545+ var templ_7745c5c3_Var170 string
3546+ templ_7745c5c3_Var170, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Target)
36203547 if templ_7745c5c3_Err != nil {
3621- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 698, Col: 62}
3548+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 696, Col: 62}
36223549 }
3623- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var175)
3550+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var170)
36243551 if templ_7745c5c3_Err != nil {
36253552 return templ_7745c5c3_Err
36263553 }
3627- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 338, "\"> <label for=\"mr-title\">title</label> <input id=\"mr-title\" name=\"title\" type=\"text\" maxlength=\"120\" required value=\"")
3554+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 333, "\"> <label for=\"mr-title\">title</label> <input id=\"mr-title\" name=\"title\" type=\"text\" maxlength=\"120\" required value=\"")
36283555 if templ_7745c5c3_Err != nil {
36293556 return templ_7745c5c3_Err
36303557 }
3631- var templ_7745c5c3_Var176 string
3632- templ_7745c5c3_Var176, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Title)
3558+ var templ_7745c5c3_Var171 string
3559+ templ_7745c5c3_Var171, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Title)
36333560 if templ_7745c5c3_Err != nil {
3634- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 700, Col: 97}
3561+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 698, Col: 97}
36353562 }
3636- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var176)
3563+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var171)
36373564 if templ_7745c5c3_Err != nil {
36383565 return templ_7745c5c3_Err
36393566 }
3640- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 339, "\" autocomplete=\"off\"> <label for=\"mr-desc\">description</label> <textarea id=\"mr-desc\" name=\"description\" rows=\"4\" maxlength=\"8000\" placeholder=\"Markdown, optional\"></textarea><div class=\"f-btns\"><button type=\"submit\" class=\"btn primary\">Create merge request</button></div></form>")
3567+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 334, "\" autocomplete=\"off\"> <label for=\"mr-desc\">description</label> <textarea id=\"mr-desc\" name=\"description\" rows=\"4\" maxlength=\"8000\" placeholder=\"Markdown, optional\"></textarea><div class=\"f-btns\"><button type=\"submit\" class=\"btn primary\">Create merge request</button></div></form>")
36413568 if templ_7745c5c3_Err != nil {
36423569 return templ_7745c5c3_Err
36433570 }
36443571 }
3645- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 340, " ")
3572+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 335, " ")
36463573 if templ_7745c5c3_Err != nil {
36473574 return templ_7745c5c3_Err
36483575 }
36493576 if p.HasDiff {
3650- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 341, "<div class=\"diff-tools\" role=\"group\" aria-label=\"Diff view\"><span class=\"dim\">")
3577+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 336, "<div class=\"diff-tools\" role=\"group\" aria-label=\"Diff view\"><span class=\"dim\">")
36513578 if templ_7745c5c3_Err != nil {
36523579 return templ_7745c5c3_Err
36533580 }
3654- var templ_7745c5c3_Var177 string
3655- templ_7745c5c3_Var177, templ_7745c5c3_Err = templ.JoinStringErrs(plural(p.NFiles, "file", "files"))
3581+ var templ_7745c5c3_Var172 string
3582+ templ_7745c5c3_Var172, templ_7745c5c3_Err = templ.JoinStringErrs(plural(p.NFiles, "file", "files"))
36563583 if templ_7745c5c3_Err != nil {
3657- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 710, Col: 57}
3584+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 708, Col: 57}
36583585 }
3659- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var177))
3586+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var172))
36603587 if templ_7745c5c3_Err != nil {
36613588 return templ_7745c5c3_Err
36623589 }
3663- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 342, " · <span class=\"plus\">+")
3590+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 337, " · <span class=\"plus\">+")
36643591 if templ_7745c5c3_Err != nil {
36653592 return templ_7745c5c3_Err
36663593 }
3667- var templ_7745c5c3_Var178 string
3668- templ_7745c5c3_Var178, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Adds))
3594+ var templ_7745c5c3_Var173 string
3595+ templ_7745c5c3_Var173, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Adds))
36693596 if templ_7745c5c3_Err != nil {
3670- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 710, Col: 97}
3597+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 708, Col: 97}
36713598 }
3672- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var178))
3599+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var173))
36733600 if templ_7745c5c3_Err != nil {
36743601 return templ_7745c5c3_Err
36753602 }
3676- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 343, "</span> <span class=\"minus\">-")
3603+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 338, "</span> <span class=\"minus\">-")
36773604 if templ_7745c5c3_Err != nil {
36783605 return templ_7745c5c3_Err
36793606 }
3680- var templ_7745c5c3_Var179 string
3681- templ_7745c5c3_Var179, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Dels))
3607+ var templ_7745c5c3_Var174 string
3608+ templ_7745c5c3_Var174, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Dels))
36823609 if templ_7745c5c3_Err != nil {
3683- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 710, Col: 142}
3610+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 708, Col: 142}
36843611 }
3685- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var179))
3612+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var174))
36863613 if templ_7745c5c3_Err != nil {
36873614 return templ_7745c5c3_Err
36883615 }
3689- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 344, "</span></span> <span class=\"grow\"></span>")
3616+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 339, "</span></span> <span class=\"grow\"></span>")
36903617 if templ_7745c5c3_Err != nil {
36913618 return templ_7745c5c3_Err
36923619 }
@@ -3694,64 +3621,64 @@ func Compare(l Layout, p ComparePage) templ.Component {
36943621 if templ_7745c5c3_Err != nil {
36953622 return templ_7745c5c3_Err
36963623 }
3697- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 345, "</div>")
3624+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 340, "</div>")
36983625 if templ_7745c5c3_Err != nil {
36993626 return templ_7745c5c3_Err
37003627 }
37013628 if p.Invisible {
3702- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 346, "<p class=\"notice\">this diff holds invisible characters (direction controls, zero-width characters). They are shown as <span class=\"inv\">&lt;U+XXXX&gt;</span> markers, never applied.</p>")
3629+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 341, "<p class=\"notice\">this diff holds invisible characters (direction controls, zero-width characters). They are shown as <span class=\"inv\">&lt;U+XXXX&gt;</span> markers, never applied.</p>")
37033630 if templ_7745c5c3_Err != nil {
37043631 return templ_7745c5c3_Err
37053632 }
37063633 }
3707- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 347, " <div id=\"diffs\"")
3634+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 342, " <div id=\"diffs\"")
37083635 if templ_7745c5c3_Err != nil {
37093636 return templ_7745c5c3_Err
37103637 }
37113638 if p.Both {
3712- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 348, " data-diff=\"")
3639+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 343, " data-diff=\"")
37133640 if templ_7745c5c3_Err != nil {
37143641 return templ_7745c5c3_Err
37153642 }
3716- var templ_7745c5c3_Var180 string
3717- templ_7745c5c3_Var180, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
3643+ var templ_7745c5c3_Var175 string
3644+ templ_7745c5c3_Var175, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
37183645 if templ_7745c5c3_Err != nil {
3719- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 723, Col: 23}
3646+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 721, Col: 23}
37203647 }
3721- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var180)
3648+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var175)
37223649 if templ_7745c5c3_Err != nil {
37233650 return templ_7745c5c3_Err
37243651 }
3725- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 349, "\"")
3652+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 344, "\"")
37263653 if templ_7745c5c3_Err != nil {
37273654 return templ_7745c5c3_Err
37283655 }
37293656 } else {
3730- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 350, " data-view=\"")
3657+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 345, " data-view=\"")
37313658 if templ_7745c5c3_Err != nil {
37323659 return templ_7745c5c3_Err
37333660 }
3734- var templ_7745c5c3_Var181 string
3735- templ_7745c5c3_Var181, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
3661+ var templ_7745c5c3_Var176 string
3662+ templ_7745c5c3_Var176, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
37363663 if templ_7745c5c3_Err != nil {
3737- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 725, Col: 23}
3664+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 723, Col: 23}
37383665 }
3739- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var181)
3666+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var176)
37403667 if templ_7745c5c3_Err != nil {
37413668 return templ_7745c5c3_Err
37423669 }
3743- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 351, "\"")
3670+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 346, "\"")
37443671 if templ_7745c5c3_Err != nil {
37453672 return templ_7745c5c3_Err
37463673 }
37473674 }
37483675 if p.Both && !p.Pinned {
3749- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 352, " hx-live=\"this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff\"")
3676+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 347, " hx-live=\"this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff\"")
37503677 if templ_7745c5c3_Err != nil {
37513678 return templ_7745c5c3_Err
37523679 }
37533680 }
3754- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 353, ">")
3681+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 348, ">")
37553682 if templ_7745c5c3_Err != nil {
37563683 return templ_7745c5c3_Err
37573684 }
@@ -3761,14 +3688,14 @@ func Compare(l Layout, p ComparePage) templ.Component {
37613688 return templ_7745c5c3_Err
37623689 }
37633690 }
3764- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 354, "</div>")
3691+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 349, "</div>")
37653692 if templ_7745c5c3_Err != nil {
37663693 return templ_7745c5c3_Err
37673694 }
37683695 }
37693696 return nil
37703697 })
3771- templ_7745c5c3_Err = Shell(l, compareRail(p)).Render(templ.WithChildren(ctx, templ_7745c5c3_Var162), templ_7745c5c3_Buffer)
3698+ templ_7745c5c3_Err = Shell(l, compareRail(p)).Render(templ.WithChildren(ctx, templ_7745c5c3_Var157), templ_7745c5c3_Buffer)
37723699 if templ_7745c5c3_Err != nil {
37733700 return templ_7745c5c3_Err
37743701 }
@@ -3792,173 +3719,173 @@ func compareRail(p ComparePage) templ.Component {
37923719 }()
37933720 }
37943721 ctx = templ.InitializeContext(ctx)
3795- templ_7745c5c3_Var182 := templ.GetChildren(ctx)
3796- if templ_7745c5c3_Var182 == nil {
3797- templ_7745c5c3_Var182 = templ.NopComponent
3722+ templ_7745c5c3_Var177 := templ.GetChildren(ctx)
3723+ if templ_7745c5c3_Var177 == nil {
3724+ templ_7745c5c3_Var177 = templ.NopComponent
37983725 }
37993726 ctx = templ.ClearChildren(ctx)
3800- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 355, "<section aria-labelledby=\"r-ahead\"><h2 id=\"r-ahead\">Commits <span class=\"count\">")
3727+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 350, "<section aria-labelledby=\"r-ahead\"><h2 id=\"r-ahead\">Commits <span class=\"count\">")
38013728 if templ_7745c5c3_Err != nil {
38023729 return templ_7745c5c3_Err
38033730 }
3804- var templ_7745c5c3_Var183 string
3805- templ_7745c5c3_Var183, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Ahead)))
3731+ var templ_7745c5c3_Var178 string
3732+ templ_7745c5c3_Var178, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Ahead)))
38063733 if templ_7745c5c3_Err != nil {
3807- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 741, Col: 67}
3734+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 739, Col: 67}
38083735 }
3809- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var183))
3736+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var178))
38103737 if templ_7745c5c3_Err != nil {
38113738 return templ_7745c5c3_Err
38123739 }
3813- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 356, "</span></h2><ul class=\"pcommits\">")
3740+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 351, "</span></h2><ul class=\"pcommits\">")
38143741 if templ_7745c5c3_Err != nil {
38153742 return templ_7745c5c3_Err
38163743 }
38173744 for _, c := range p.Ahead {
3818- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 357, "<li><a href=\"")
3745+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 352, "<li><a href=\"")
38193746 if templ_7745c5c3_Err != nil {
38203747 return templ_7745c5c3_Err
38213748 }
3822- var templ_7745c5c3_Var184 templ.SafeURL
3823- templ_7745c5c3_Var184, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.CHref))
3749+ var templ_7745c5c3_Var179 templ.SafeURL
3750+ templ_7745c5c3_Var179, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.CHref))
38243751 if templ_7745c5c3_Err != nil {
3825- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 745, Col: 37}
3752+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 743, Col: 37}
38263753 }
3827- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var184))
3754+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var179))
38283755 if templ_7745c5c3_Err != nil {
38293756 return templ_7745c5c3_Err
38303757 }
3831- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 358, "\">")
3758+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 353, "\">")
38323759 if templ_7745c5c3_Err != nil {
38333760 return templ_7745c5c3_Err
38343761 }
3835- var templ_7745c5c3_Var185 string
3836- templ_7745c5c3_Var185, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)
3762+ var templ_7745c5c3_Var180 string
3763+ templ_7745c5c3_Var180, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)
38373764 if templ_7745c5c3_Err != nil {
3838- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 745, Col: 49}
3765+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 743, Col: 49}
38393766 }
3840- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var185))
3767+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var180))
38413768 if templ_7745c5c3_Err != nil {
38423769 return templ_7745c5c3_Err
38433770 }
3844- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 359, "</a> <span class=\"s\">")
3771+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 354, "</a> <span class=\"s\">")
38453772 if templ_7745c5c3_Err != nil {
38463773 return templ_7745c5c3_Err
38473774 }
3848- var templ_7745c5c3_Var186 string
3849- templ_7745c5c3_Var186, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)
3775+ var templ_7745c5c3_Var181 string
3776+ templ_7745c5c3_Var181, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)
38503777 if templ_7745c5c3_Err != nil {
3851- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 746, Col: 32}
3778+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 744, Col: 32}
38523779 }
3853- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var186))
3780+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var181))
38543781 if templ_7745c5c3_Err != nil {
38553782 return templ_7745c5c3_Err
38563783 }
3857- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 360, "</span> <span class=\"mute\">")
3784+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 355, "</span> <span class=\"mute\">")
38583785 if templ_7745c5c3_Err != nil {
38593786 return templ_7745c5c3_Err
38603787 }
3861- var templ_7745c5c3_Var187 string
3862- templ_7745c5c3_Var187, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)
3788+ var templ_7745c5c3_Var182 string
3789+ templ_7745c5c3_Var182, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)
38633790 if templ_7745c5c3_Err != nil {
3864- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 748, Col: 16}
3791+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 746, Col: 16}
38653792 }
3866- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var187))
3793+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var182))
38673794 if templ_7745c5c3_Err != nil {
38683795 return templ_7745c5c3_Err
38693796 }
3870- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 361, " ")
3797+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 356, " ")
38713798 if templ_7745c5c3_Err != nil {
38723799 return templ_7745c5c3_Err
38733800 }
38743801 if c.WhenAt != "" {
3875- var templ_7745c5c3_Var188 string
3876- templ_7745c5c3_Var188, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")
3802+ var templ_7745c5c3_Var183 string
3803+ templ_7745c5c3_Var183, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")
38773804 if templ_7745c5c3_Err != nil {
3878- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 750, Col: 15}
3805+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 748, Col: 15}
38793806 }
3880- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var188))
3807+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var183))
38813808 if templ_7745c5c3_Err != nil {
38823809 return templ_7745c5c3_Err
38833810 }
3884- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 362, "<time datetime=\"")
3811+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 357, "<time datetime=\"")
38853812 if templ_7745c5c3_Err != nil {
38863813 return templ_7745c5c3_Err
38873814 }
3888- var templ_7745c5c3_Var189 string
3889- templ_7745c5c3_Var189, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
3815+ var templ_7745c5c3_Var184 string
3816+ templ_7745c5c3_Var184, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
38903817 if templ_7745c5c3_Err != nil {
3891- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 750, Col: 42}
3818+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 748, Col: 42}
38923819 }
3893- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var189)
3820+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var184)
38943821 if templ_7745c5c3_Err != nil {
38953822 return templ_7745c5c3_Err
38963823 }
3897- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 363, "\">")
3824+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 358, "\">")
38983825 if templ_7745c5c3_Err != nil {
38993826 return templ_7745c5c3_Err
39003827 }
3901- var templ_7745c5c3_Var190 string
3902- templ_7745c5c3_Var190, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)
3828+ var templ_7745c5c3_Var185 string
3829+ templ_7745c5c3_Var185, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)
39033830 if templ_7745c5c3_Err != nil {
3904- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 750, Col: 53}
3831+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 748, Col: 53}
39053832 }
3906- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var190))
3833+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var185))
39073834 if templ_7745c5c3_Err != nil {
39083835 return templ_7745c5c3_Err
39093836 }
3910- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 364, "</time>")
3837+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 359, "</time>")
39113838 if templ_7745c5c3_Err != nil {
39123839 return templ_7745c5c3_Err
39133840 }
39143841 }
3915- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 365, "</span></li>")
3842+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 360, "</span></li>")
39163843 if templ_7745c5c3_Err != nil {
39173844 return templ_7745c5c3_Err
39183845 }
39193846 }
3920- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 366, "</ul>")
3847+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 361, "</ul>")
39213848 if templ_7745c5c3_Err != nil {
39223849 return templ_7745c5c3_Err
39233850 }
39243851 if len(p.Ahead) == 0 {
3925- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 367, "<p class=\"dim\">no commit ahead of ")
3852+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 362, "<p class=\"dim\">no commit ahead of ")
39263853 if templ_7745c5c3_Err != nil {
39273854 return templ_7745c5c3_Err
39283855 }
3929- var templ_7745c5c3_Var191 string
3930- templ_7745c5c3_Var191, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
3856+ var templ_7745c5c3_Var186 string
3857+ templ_7745c5c3_Var186, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
39313858 if templ_7745c5c3_Err != nil {
3932- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 757, Col: 47}
3859+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 755, Col: 47}
39333860 }
3934- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var191))
3861+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var186))
39353862 if templ_7745c5c3_Err != nil {
39363863 return templ_7745c5c3_Err
39373864 }
3938- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 368, ".</p>")
3865+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 363, ".</p>")
39393866 if templ_7745c5c3_Err != nil {
39403867 return templ_7745c5c3_Err
39413868 }
39423869 }
3943- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 369, "</section>")
3870+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 364, "</section>")
39443871 if templ_7745c5c3_Err != nil {
39453872 return templ_7745c5c3_Err
39463873 }
39473874 if p.HasDiff {
3948- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 370, "<section aria-labelledby=\"r-files\"><h2 id=\"r-files\">Files <span class=\"count\">")
3875+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 365, "<section aria-labelledby=\"r-files\"><h2 id=\"r-files\">Files <span class=\"count\">")
39493876 if templ_7745c5c3_Err != nil {
39503877 return templ_7745c5c3_Err
39513878 }
3952- var templ_7745c5c3_Var192 string
3953- templ_7745c5c3_Var192, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))
3879+ var templ_7745c5c3_Var187 string
3880+ templ_7745c5c3_Var187, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))
39543881 if templ_7745c5c3_Err != nil {
3955- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 762, Col: 66}
3882+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 760, Col: 66}
39563883 }
3957- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var192))
3884+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var187))
39583885 if templ_7745c5c3_Err != nil {
39593886 return templ_7745c5c3_Err
39603887 }
3961- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 371, "</span></h2>")
3888+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 366, "</span></h2>")
39623889 if templ_7745c5c3_Err != nil {
39633890 return templ_7745c5c3_Err
39643891 }
@@ -3966,12 +3893,12 @@ func compareRail(p ComparePage) templ.Component {
39663893 if templ_7745c5c3_Err != nil {
39673894 return templ_7745c5c3_Err
39683895 }
3969- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 372, "</section>")
3896+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 367, "</section>")
39703897 if templ_7745c5c3_Err != nil {
39713898 return templ_7745c5c3_Err
39723899 }
39733900 }
3974- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 373, "<section aria-labelledby=\"r-cli\"><h2 id=\"r-cli\">From a terminal</h2>")
3901+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 368, "<section aria-labelledby=\"r-cli\"><h2 id=\"r-cli\">From a terminal</h2>")
39753902 if templ_7745c5c3_Err != nil {
39763903 return templ_7745c5c3_Err
39773904 }
@@ -3979,7 +3906,7 @@ func compareRail(p ComparePage) templ.Component {
39793906 if templ_7745c5c3_Err != nil {
39803907 return templ_7745c5c3_Err
39813908 }
3982- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 374, "</section>")
3909+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 369, "</section>")
39833910 if templ_7745c5c3_Err != nil {
39843911 return templ_7745c5c3_Err
39853912 }
@@ -4005,35 +3932,300 @@ func MRMergeChecks(c ChecksSummary) templ.Component {
40053932 }()
40063933 }
40073934 ctx = templ.InitializeContext(ctx)
4008- templ_7745c5c3_Var193 := templ.GetChildren(ctx)
4009- if templ_7745c5c3_Var193 == nil {
4010- templ_7745c5c3_Var193 = templ.NopComponent
3935+ templ_7745c5c3_Var188 := templ.GetChildren(ctx)
3936+ if templ_7745c5c3_Var188 == nil {
3937+ templ_7745c5c3_Var188 = templ.NopComponent
40113938 }
40123939 ctx = templ.ClearChildren(ctx)
4013- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 375, "<div id=\"mr-merge-checks\" data-keep-checks>")
3940+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 370, "<div id=\"mr-merge-checks\" data-keep-checks>")
40143941 if templ_7745c5c3_Err != nil {
40153942 return templ_7745c5c3_Err
40163943 }
40173944 if c.Kind == "bad" || c.Kind == "running" {
4018- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 376, "<p class=\"d-note\">")
3945+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 371, "<p class=\"d-note\">")
40193946 if templ_7745c5c3_Err != nil {
40203947 return templ_7745c5c3_Err
40213948 }
3949+ var templ_7745c5c3_Var189 string
3950+ templ_7745c5c3_Var189, templ_7745c5c3_Err = templ.JoinStringErrs(c.State + ": a failing or unfinished check blocks the merge.")
3951+ if templ_7745c5c3_Err != nil {
3952+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 775, Col: 84}
3953+ }
3954+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var189))
3955+ if templ_7745c5c3_Err != nil {
3956+ return templ_7745c5c3_Err
3957+ }
3958+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 372, "</p><label class=\"d-check\"><input type=\"checkbox\" name=\"ignore_checks\"> Ignore checks</label>")
3959+ if templ_7745c5c3_Err != nil {
3960+ return templ_7745c5c3_Err
3961+ }
3962+ }
3963+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 373, "</div>")
3964+ if templ_7745c5c3_Err != nil {
3965+ return templ_7745c5c3_Err
3966+ }
3967+ return nil
3968+ })
3969+}
3970+
3971+// MRStateFragment updates only state and actions, leaving review drafts alone.
3972+func MRStateFragment(p MRPage) templ.Component {
3973+ return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
3974+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
3975+ if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
3976+ return templ_7745c5c3_CtxErr
3977+ }
3978+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
3979+ if !templ_7745c5c3_IsBuffer {
3980+ defer func() {
3981+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
3982+ if templ_7745c5c3_Err == nil {
3983+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
3984+ }
3985+ }()
3986+ }
3987+ ctx = templ.InitializeContext(ctx)
3988+ templ_7745c5c3_Var190 := templ.GetChildren(ctx)
3989+ if templ_7745c5c3_Var190 == nil {
3990+ templ_7745c5c3_Var190 = templ.NopComponent
3991+ }
3992+ ctx = templ.ClearChildren(ctx)
3993+ templ_7745c5c3_Err = mrState(p).Render(ctx, templ_7745c5c3_Buffer)
3994+ if templ_7745c5c3_Err != nil {
3995+ return templ_7745c5c3_Err
3996+ }
3997+ templ_7745c5c3_Err = mrActions(p).Render(ctx, templ_7745c5c3_Buffer)
3998+ if templ_7745c5c3_Err != nil {
3999+ return templ_7745c5c3_Err
4000+ }
4001+ return nil
4002+ })
4003+}
4004+
4005+func mrState(p MRPage) templ.Component {
4006+ return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
4007+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
4008+ if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
4009+ return templ_7745c5c3_CtxErr
4010+ }
4011+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
4012+ if !templ_7745c5c3_IsBuffer {
4013+ defer func() {
4014+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
4015+ if templ_7745c5c3_Err == nil {
4016+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
4017+ }
4018+ }()
4019+ }
4020+ ctx = templ.InitializeContext(ctx)
4021+ templ_7745c5c3_Var191 := templ.GetChildren(ctx)
4022+ if templ_7745c5c3_Var191 == nil {
4023+ templ_7745c5c3_Var191 = templ.NopComponent
4024+ }
4025+ ctx = templ.ClearChildren(ctx)
4026+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 374, "<dd id=\"mr-state\" hx-swap-oob=\"true\" class=\"mr-state\" data-state=\"")
4027+ if templ_7745c5c3_Err != nil {
4028+ return templ_7745c5c3_Err
4029+ }
4030+ var templ_7745c5c3_Var192 string
4031+ templ_7745c5c3_Var192, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.State)
4032+ if templ_7745c5c3_Err != nil {
4033+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 788, Col: 75}
4034+ }
4035+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var192)
4036+ if templ_7745c5c3_Err != nil {
4037+ return templ_7745c5c3_Err
4038+ }
4039+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 375, "\">")
4040+ if templ_7745c5c3_Err != nil {
4041+ return templ_7745c5c3_Err
4042+ }
4043+ var templ_7745c5c3_Var193 string
4044+ templ_7745c5c3_Var193, templ_7745c5c3_Err = templ.JoinStringErrs(p.State)
4045+ if templ_7745c5c3_Err != nil {
4046+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 789, Col: 11}
4047+ }
4048+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var193))
4049+ if templ_7745c5c3_Err != nil {
4050+ return templ_7745c5c3_Err
4051+ }
4052+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 376, " ")
4053+ if templ_7745c5c3_Err != nil {
4054+ return templ_7745c5c3_Err
4055+ }
4056+ if p.MergedShort != "" {
40224057 var templ_7745c5c3_Var194 string
4023- templ_7745c5c3_Var194, templ_7745c5c3_Err = templ.JoinStringErrs(c.State + ": a failing or unfinished check blocks the merge.")
4058+ templ_7745c5c3_Var194, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")
40244059 if templ_7745c5c3_Err != nil {
4025- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 777, Col: 84}
4060+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 791, Col: 11}
40264061 }
40274062 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var194))
40284063 if templ_7745c5c3_Err != nil {
40294064 return templ_7745c5c3_Err
40304065 }
4031- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 377, "</p><label class=\"d-check\"><input type=\"checkbox\" name=\"ignore_checks\"> Ignore checks</label>")
4066+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 377, "<a href=\"")
40324067 if templ_7745c5c3_Err != nil {
40334068 return templ_7745c5c3_Err
40344069 }
4070+ var templ_7745c5c3_Var195 templ.SafeURL
4071+ templ_7745c5c3_Var195, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.MergedHref))
4072+ if templ_7745c5c3_Err != nil {
4073+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 791, Col: 50}
4074+ }
4075+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var195))
4076+ if templ_7745c5c3_Err != nil {
4077+ return templ_7745c5c3_Err
4078+ }
4079+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 378, "\">")
4080+ if templ_7745c5c3_Err != nil {
4081+ return templ_7745c5c3_Err
4082+ }
4083+ var templ_7745c5c3_Var196 string
4084+ templ_7745c5c3_Var196, templ_7745c5c3_Err = templ.JoinStringErrs(p.MergedShort)
4085+ if templ_7745c5c3_Err != nil {
4086+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 791, Col: 68}
4087+ }
4088+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var196))
4089+ if templ_7745c5c3_Err != nil {
4090+ return templ_7745c5c3_Err
4091+ }
4092+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 379, "</a>")
4093+ if templ_7745c5c3_Err != nil {
4094+ return templ_7745c5c3_Err
4095+ }
4096+ var templ_7745c5c3_Var197 string
4097+ templ_7745c5c3_Var197, templ_7745c5c3_Err = templ.JoinStringErrs(" · " + p.MergeMode)
4098+ if templ_7745c5c3_Err != nil {
4099+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 791, Col: 96}
4100+ }
4101+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var197))
4102+ if templ_7745c5c3_Err != nil {
4103+ return templ_7745c5c3_Err
4104+ }
4105+ }
4106+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 380, "</dd>")
4107+ if templ_7745c5c3_Err != nil {
4108+ return templ_7745c5c3_Err
4109+ }
4110+ return nil
4111+ })
4112+}
4113+
4114+func mrActions(p MRPage) templ.Component {
4115+ return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
4116+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
4117+ if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
4118+ return templ_7745c5c3_CtxErr
4119+ }
4120+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
4121+ if !templ_7745c5c3_IsBuffer {
4122+ defer func() {
4123+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
4124+ if templ_7745c5c3_Err == nil {
4125+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
4126+ }
4127+ }()
4128+ }
4129+ ctx = templ.InitializeContext(ctx)
4130+ templ_7745c5c3_Var198 := templ.GetChildren(ctx)
4131+ if templ_7745c5c3_Var198 == nil {
4132+ templ_7745c5c3_Var198 = templ.NopComponent
4133+ }
4134+ ctx = templ.ClearChildren(ctx)
4135+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 381, "<div id=\"mr-actions\" hx-swap-oob=\"true\" class=\"mr-acts\">")
4136+ if templ_7745c5c3_Err != nil {
4137+ return templ_7745c5c3_Err
4138+ }
4139+ templ_7745c5c3_Err = MRChecksSum(p.ChecksSum).Render(ctx, templ_7745c5c3_Buffer)
4140+ if templ_7745c5c3_Err != nil {
4141+ return templ_7745c5c3_Err
4142+ }
4143+ if p.Box != nil {
4144+ templ_7745c5c3_Err = mergeMenu(p).Render(ctx, templ_7745c5c3_Buffer)
4145+ if templ_7745c5c3_Err != nil {
4146+ return templ_7745c5c3_Err
4147+ }
4148+ }
4149+ templ_7745c5c3_Err = moreMenu(p).Render(ctx, templ_7745c5c3_Buffer)
4150+ if templ_7745c5c3_Err != nil {
4151+ return templ_7745c5c3_Err
4152+ }
4153+ if p.MergeError != "" {
4154+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 382, "<p class=\"d-err\" role=\"alert\">")
4155+ if templ_7745c5c3_Err != nil {
4156+ return templ_7745c5c3_Err
4157+ }
4158+ var templ_7745c5c3_Var199 string
4159+ templ_7745c5c3_Var199, templ_7745c5c3_Err = templ.JoinStringErrs(p.MergeError)
4160+ if templ_7745c5c3_Err != nil {
4161+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 804, Col: 47}
4162+ }
4163+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var199))
4164+ if templ_7745c5c3_Err != nil {
4165+ return templ_7745c5c3_Err
4166+ }
4167+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 383, "</p>")
4168+ if templ_7745c5c3_Err != nil {
4169+ return templ_7745c5c3_Err
4170+ }
4171+ }
4172+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 384, "</div>")
4173+ if templ_7745c5c3_Err != nil {
4174+ return templ_7745c5c3_Err
4175+ }
4176+ return nil
4177+ })
4178+}
4179+
4180+// MRActionStatus remains visible even when the request detail cannot be read.
4181+func MRActionStatus(message, href string) templ.Component {
4182+ return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
4183+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
4184+ if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
4185+ return templ_7745c5c3_CtxErr
4186+ }
4187+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
4188+ if !templ_7745c5c3_IsBuffer {
4189+ defer func() {
4190+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
4191+ if templ_7745c5c3_Err == nil {
4192+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
4193+ }
4194+ }()
4195+ }
4196+ ctx = templ.InitializeContext(ctx)
4197+ templ_7745c5c3_Var200 := templ.GetChildren(ctx)
4198+ if templ_7745c5c3_Var200 == nil {
4199+ templ_7745c5c3_Var200 = templ.NopComponent
4200+ }
4201+ ctx = templ.ClearChildren(ctx)
4202+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 385, "<div id=\"mr-actions\" class=\"mr-acts\" hx-swap-oob=\"true\"><p class=\"d-err\" role=\"alert\">")
4203+ if templ_7745c5c3_Err != nil {
4204+ return templ_7745c5c3_Err
4205+ }
4206+ var templ_7745c5c3_Var201 string
4207+ templ_7745c5c3_Var201, templ_7745c5c3_Err = templ.JoinStringErrs(message)
4208+ if templ_7745c5c3_Err != nil {
4209+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 812, Col: 40}
4210+ }
4211+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var201))
4212+ if templ_7745c5c3_Err != nil {
4213+ return templ_7745c5c3_Err
4214+ }
4215+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 386, " <a href=\"")
4216+ if templ_7745c5c3_Err != nil {
4217+ return templ_7745c5c3_Err
4218+ }
4219+ var templ_7745c5c3_Var202 templ.SafeURL
4220+ templ_7745c5c3_Var202, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(href))
4221+ if templ_7745c5c3_Err != nil {
4222+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 812, Col: 72}
4223+ }
4224+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var202))
4225+ if templ_7745c5c3_Err != nil {
4226+ return templ_7745c5c3_Err
40354227 }
4036- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 378, "</div>")
4228+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 387, "\">reload</a></p></div>")
40374229 if templ_7745c5c3_Err != nil {
40384230 return templ_7745c5c3_Err
40394231 }
M internal/adapters/web/static/css/60-mr.css +2 -0
@@ -1,6 +1,8 @@
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+ #merge-menu .htmx-indicator { display: none; }
5+ #merge-menu .htmx-request .htmx-indicator { display: inline; }
46 /* one card: the header (title, facts) a shade lighter, the description below */
57 .mr-card {
68 background: var(--bg-surface); border: 1px solid var(--border); border-radius: var(--r); overflow: hidden;
M internal/adapters/web/static/js/mr.js +3 -3
@@ -293,8 +293,8 @@ window.ermiteMR = (() => {
293293 let observer;
294294 const summary = $('#mr-ck');
295295 if (summary) {
296- // The live stream replaces #mr-ck as a whole: watch only the children of
297- // its parent, and write the label only when it changes. hx-live rewrites
296+ // Both #mr-ck and #mr-actions can be replaced: observe the stable bar,
297+ // and write the label only when it changes. hx-live rewrites
298298 // other text in the same bar on every mutation of the document; a write
299299 // here on each of them would wake hx-live again, a loop that never yields.
300300 const sync = () => {
@@ -303,7 +303,7 @@ window.ermiteMR = (() => {
303303 if (label && label.textContent !== text) label.textContent = text;
304304 };
305305 observer = new MutationObserver(sync);
306- observer.observe(summary.parentElement, { childList: true });
306+ observer.observe(summary.closest('.mr-bar'), { childList: true, subtree: true });
307307 sync();
308308 }
309309 show(initial);

Keyboard shortcuts

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

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

Branches 2

Tags 45

↑↓ moveenter openesc close