detached bbf234f

Merge e9c6360e61647574ffacf24b446cc3a410e3efb4 into 801147f0f11f433513f19e73261445c99d7678a6

commit
bbf234fdf64dfabc5ec48d8173692994ccbdbe26
author
ermite · · 2026-10-22 00:59 UTC
merge of
801147f + e9c6360 · diff against the first parent
signature
unsigned
10 files · +1538 -1073
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/jstest/mr.test.mjs +12 -4
@@ -152,8 +152,10 @@ test('footer tabs: closed by default, toggle, switch, arrows, hash', () => {
152152 test('footer: #mr-ck syncs the checks label; its click opens Checks without toggling', () => {
153153 const text0 = { v: '' }; let writes = 0;
154154 const label = { get textContent() { return text0.v; }, set textContent(v) { writes++; text0.v = v; } };
155- const summary = { title: '1/2 failed', textContent: ' 1/2 ', parentElement: {} };
156- const h = footerHarness({ summary });
155+ const bar = {};
156+ const summary = { title: '1/2 failed', textContent: ' 1/2 ', closest: (s) => s === '.mr-bar' ? bar : null };
157+ const extra = { summary };
158+ const h = footerHarness(extra);
157159 let observed = null, callback = null;
158160 globalThis.MutationObserver = class { constructor(fn) { callback = fn; } observe(target, opts) { observed = [target, opts]; } };
159161 const nav = document.querySelector('[data-mr-tabs]');
@@ -161,8 +163,14 @@ test('footer: #mr-ck syncs the checks label; its click opens Checks without togg
161163 try {
162164 window.ermiteMR.panels();
163165 assert.equal(label.textContent, '1/2 failed', 'initial label sync');
164- assert.equal(observed[0], summary.parentElement);
165- assert.deepEqual(observed[1], { childList: true }, 'only #mr-ck replacements wake the observer');
166+ assert.equal(observed[0], bar);
167+ assert.deepEqual(observed[1], { childList: true, subtree: true }, 'the stable bar observes action and badge replacements');
168+ // Replace #mr-actions, including its badge, then replace the badge alone.
169+ extra.summary = { title: 'checks running', textContent: '' }; callback();
170+ assert.equal(label.textContent, 'checks running');
171+ extra.summary = { title: 'checks passed', textContent: '' }; callback();
172+ assert.equal(label.textContent, 'checks passed');
173+ extra.summary = summary; callback();
166174 const before = writes; callback(); callback();
167175 assert.equal(writes, before, 'an unchanged label is not written');
168176 summary.title = ''; callback();
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, false)
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, true)
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, fragment bool) {
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 fragment && 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 +166 -0
@@ -0,0 +1,166 @@
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+}
128+
129+func TestMergeGateRefusalFragment(t *testing.T) {
130+ s, _ := newSessionServer(t, newSessions(t, "tok"), testPublicURL)
131+ for _, origin := range []string{testPublicURL, "https://other.example"} {
132+ for _, hx := range []bool{false, true} {
133+ r := httptest.NewRequest(http.MethodPost, "/demo/merge-requests/3/merge", strings.NewReader("mode=squash"))
134+ r.Header.Set("Origin", origin)
135+ r.Header.Set("Content-Type", "application/x-www-form-urlencoded")
136+ if hx {
137+ r.Header.Set("HX-Request", "true")
138+ }
139+ w := httptest.NewRecorder()
140+ s.ServeHTTP(w, r)
141+ assert.Equal(t, http.StatusForbidden, w.Code)
142+ if hx {
143+ assert.Contains(t, w.Body.String(), `hx-swap-oob="true"`)
144+ assert.Contains(t, w.Body.String(), `id="mr-actions"`)
145+ if origin == testPublicURL {
146+ assert.Contains(t, w.Body.String(), "your session has expired")
147+ } else {
148+ assert.Contains(t, w.Body.String(), "origin was not accepted")
149+ }
150+ } else {
151+ assert.NotContains(t, w.Body.String(), "hx-swap-oob")
152+ }
153+ }
154+ }
155+}
156+
157+func TestNonHXMergeRefusalHasOneAlert(t *testing.T) {
158+ s, svc := asyncMergeServer(t, domain.MRStateMerged)
159+ svc.EXPECT().CountOpen(mock.Anything, mock.Anything, mock.Anything).Return(0, nil)
160+ svc.EXPECT().Merge(mock.Anything, mock.Anything, mock.Anything, int64(3), mock.Anything).Return(ports.MergeResult{}, domain.ErrConflict).Once()
161+ r := autoMergeRequest("/demo/merge-requests/3/merge", "mode=squash")
162+ w := httptest.NewRecorder()
163+ s.mrAction(s.mrMerge)(w, r)
164+ assert.Equal(t, http.StatusConflict, w.Code)
165+ assert.Equal(t, 1, strings.Count(w.Body.String(), `role="alert"`))
166+}
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, false).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, true).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, fragment bool) 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 fragment && 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/session.go +12 -2
@@ -178,11 +178,11 @@ func (s *Server) gate(w http.ResponseWriter, r *http.Request) bool {
178178 // Host header, which the client chooses. A missing header, "null" and any
179179 // other origin are refused.
180180 if r.Header.Get("Origin") != s.origin {
181- denyForbidden(w)
181+ s.denyMergeGate(w, r, "the request origin was not accepted. reload this page and try again.")
182182 return false
183183 }
184184 if !SignedIn(r.Context()) && !s.anonymousPost(r) {
185- denyForbidden(w)
185+ s.denyMergeGate(w, r, "your session has expired. sign in again and reload.")
186186 return false
187187 }
188188 return true
@@ -335,3 +335,13 @@ func (s *Server) loginRejectedPage() templ.Component {
335335 return s.stateOnly("sign in", "404", "login link not valid",
336336 "this link has expired, was already used, or never existed.", "run `ermite web login` for a new one.")
337337 }
338+
339+// denyMergeGate keeps gate refusals visible to the enhanced merge form.
340+func (s *Server) denyMergeGate(w http.ResponseWriter, r *http.Request, message string) {
341+ if !isHXMerge(r) {
342+ denyForbidden(w)
343+ return
344+ }
345+ w.Header().Set("Cache-Control", "no-store")
346+ s.write(r.Context(), w, r, http.StatusForbidden, MRActionStatus(message, strings.TrimSuffix(r.URL.Path, "/merge")))
347+}
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 42

↑↓ moveenter openesc close