detached f525ac6

feat(web): turn the MR footer into toggle tabs on a darker background

commit
f525ac63ebda2eef85f9d3a5de537ac635fb7cac
author
brice · · 2026-10-20 08:50 UTC
parent
89e7d82
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
8 files · +649 -657
M docs/merge-requests.md +7 -5
@@ -107,10 +107,12 @@ because it owns the merge-git port.
107107
108108 ### Review page panels
109109
110-The main request card ends with a collapsed Commits / Checks footer. With
111-scripts, arrow keys (and Home / End) switch its tabs; without scripts, opening
112-the footer shows both sections. The checks summary above the diff opens the
113-Checks tab and continues to update live. Commit totals use `N+` when the branch
110+The main request card ends with a footer of two tabs, Commits and Checks, both
111+collapsed by default. Clicking a tab opens its panel, clicking the open tab
112+folds it again, clicking the other tab switches. Arrow keys (and Home / End)
113+move between the tabs. Without scripts the tabs are anchor links and the URL
114+fragment (`#mr-commits`, `#mr-checks`) shows the panel. The checks summary above
115+the diff opens the Checks panel and continues to update live. Commit totals use `N+` when the branch
114116 list is capped: the reader's existing count operation counts all reachable
115117 ancestors, not the source-minus-target range.
116118
@@ -123,7 +125,7 @@ merge actions remain restricted to their existing permissions.
123125
124126 A push to the source branch refreshes the web review in place: the diff, files
125127 rail, commits/checks footer, diff range and merge controls follow the new head.
126-The review keeps its visible file/line, folded files and selected footer tab.
128+The review keeps its visible file/line, folded files and open footer panel.
127129 The page request still reads only one 25-file window of hunks; the visible
128130 anchor's window is fetched too if needed, and other windows remain lazy.
129131
@@ -107,10 +107,12 @@ because it owns the merge-git port.
107 107
108 ### Review page panels108 ### Review page panels
109 109
110-The main request card ends with a collapsed Commits / Checks footer. With110+The main request card ends with a footer of two tabs, Commits and Checks, both
111-scripts, arrow keys (and Home / End) switch its tabs; without scripts, opening111+collapsed by default. Clicking a tab opens its panel, clicking the open tab
112-the footer shows both sections. The checks summary above the diff opens the112+folds it again, clicking the other tab switches. Arrow keys (and Home / End)
113-Checks tab and continues to update live. Commit totals use `N+` when the branch113+move between the tabs. Without scripts the tabs are anchor links and the URL
114+fragment (`#mr-commits`, `#mr-checks`) shows the panel. The checks summary above
115+the diff opens the Checks panel and continues to update live. Commit totals use `N+` when the branch
114 list is capped: the reader's existing count operation counts all reachable116 list is capped: the reader's existing count operation counts all reachable
115 ancestors, not the source-minus-target range.117 ancestors, not the source-minus-target range.
116 118
@@ -123,7 +125,7 @@ merge actions remain restricted to their existing permissions.
123 125
124 A push to the source branch refreshes the web review in place: the diff, files126 A push to the source branch refreshes the web review in place: the diff, files
125 rail, commits/checks footer, diff range and merge controls follow the new head.127 rail, commits/checks footer, diff range and merge controls follow the new head.
126-The review keeps its visible file/line, folded files and selected footer tab.128+The review keeps its visible file/line, folded files and open footer panel.
127 The page request still reads only one 25-file window of hunks; the visible129 The page request still reads only one 25-file window of hunks; the visible
128 anchor's window is fetched too if needed, and other windows remain lazy.130 anchor's window is fetched too if needed, and other windows remain lazy.
129 131
M internal/adapters/web/jstest/mr.test.mjs +72 -72
@@ -93,98 +93,98 @@ for (const dataset of [{diff:'split'}, {view:'split'}]) test(`reveal selects the
9393 }
9494 });
9595
96-test('footer tabs switch panels, support arrows, and open on checks hash', () => {
97- const oldDocument = globalThis.document;
98- const oldLocation = globalThis.location;
99- const oldAdd = globalThis.addEventListener;
100- const oldHistory = globalThis.history;
101- const listeners = {};
102- const replaced = [];
103- globalThis.history = { replaceState: (...args) => replaced.push(args) };
96+function footerHarness(extra = {}) {
97+ const saved = Object.fromEntries(['document', 'location', 'addEventListener', 'history', 'MutationObserver'].map((k) => [k, globalThis[k]]));
10498 const node = (id) => ({ id, attrs: {}, events: {}, hidden: false,
105- setAttribute(k,v) { this.attrs[k]=v; },
106- addEventListener(k,v) { this.events[k]=v; }, focus() { this.focused=true; } });
99+ setAttribute(k, v) { this.attrs[k] = v; }, getAttribute(k) { return this.attrs[k] ?? null; },
100+ addEventListener(k, v) { this.events[k] = v; }, focus() { this.focused = true; } });
107101 const tabs = [node('mr-tab-commits'), node('mr-tab-checks')];
108102 const panels = [node('mr-commits'), node('mr-checks-panel')];
109- const footer = node('mr-panels'); footer.open=false;
110- const nav = node('tabs'); nav.querySelectorAll=()=>tabs;
111- footer.querySelectorAll=()=>panels;
112- globalThis.document = {querySelector: (s) => s === '#mr-panels' ? footer : s === '[data-mr-tabs]' ? nav : null,
113- addEventListener(k,v) {listeners[k]=v;} };
114- globalThis.location = {hash:''};
115- globalThis.addEventListener = (k,v) => {listeners[k]=v;};
103+ const footer = node('footer'); footer.querySelectorAll = () => panels;
104+ const nav = node('tabs'); nav.querySelectorAll = () => tabs;
105+ const listeners = {}, replaced = [];
106+ globalThis.document = { querySelector: (s) => s === '.mr-footer' ? footer : s === '[data-mr-tabs]' ? nav : s === '#mr-ck' ? extra.summary ?? null : null,
107+ querySelectorAll: (s) => s === '[data-mr-tabs] a' ? tabs : [], addEventListener(k, v) { listeners[k] = v; } };
108+ globalThis.location = { hash: '', pathname: '/demo/merge-requests/1', search: '?x=1' };
109+ globalThis.addEventListener = (k, v) => { listeners[k] = v; };
110+ globalThis.history = { replaceState: (...args) => replaced.push(args) };
111+ const restore = () => { for (const [k, v] of Object.entries(saved)) { if (v === undefined) delete globalThis[k]; else globalThis[k] = v; } };
112+ const state = () => panels.map((p) => !p.hidden);
113+ return { tabs, panels, listeners, replaced, restore, state };
114+}
115+
116+test('footer tabs: closed by default, toggle, switch, arrows, hash', () => {
117+ const h = footerHarness();
116118 try {
117119 window.ermiteMR.panels();
118- assert.equal(footer.open,false);
119- assert.equal(panels[0].hidden,false);
120- assert.equal(panels[1].hidden,true);
121- assert.deepEqual(replaced, [], 'initial selection leaves the URL alone');
122- tabs[1].events.click({preventDefault(){}});
123- assert.deepEqual(replaced, [[null, '', '#mr-checks-panel']]);
124- assert.equal(panels[0].hidden,true);
125- assert.equal(tabs[1].attrs['aria-selected'],'true');
126- tabs[1].events.keydown({key:'ArrowRight',preventDefault(){}});
127- assert.equal(tabs[0].focused,true);
128- assert.equal(panels[0].hidden,false);
129- assert.deepEqual(replaced.at(-1), [null, '', '#mr-commits']);
130- location.hash='#mr-checks'; replaced.length = 0; listeners.hashchange();
131- assert.deepEqual(replaced, [], 'hash navigation does not rewrite the URL');
132- assert.equal(footer.open,true);
133- assert.equal(panels[1].hidden,false);
134- footer.open=false;
135- listeners.click({target:{closest:()=>true}});
136- assert.equal(footer.open,true);
137- assert.equal(C.tabIndex('Home',1,2),0);
138- assert.equal(C.tabIndex('End',0,2),1);
139- assert.equal(C.tabIndex('ArrowLeft',0,2),1);
140- assert.equal(C.tabIndex('Escape',0,2),null);
141- } finally {
142- globalThis.document=oldDocument; globalThis.location=oldLocation; globalThis.addEventListener=oldAdd;
143- if (oldHistory === undefined) delete globalThis.history; else globalThis.history = oldHistory;
144- }
120+ assert.deepEqual(h.state(), [false, false], 'initially closed');
121+ assert.equal(h.tabs[0].attrs['aria-expanded'], 'false');
122+ assert.deepEqual(h.replaced, [], 'initial state leaves the URL alone');
123+ h.tabs[1].events.click({ preventDefault() {} });
124+ assert.deepEqual(h.state(), [false, true]);
125+ assert.equal(h.tabs[1].attrs['aria-expanded'], 'true');
126+ assert.deepEqual(h.replaced, [[null, '', '#mr-checks-panel']]);
127+ location.hash = '#mr-checks-panel';
128+ h.tabs[1].events.click({ preventDefault() {} });
129+ assert.deepEqual(h.state(), [false, false], 'a second click closes');
130+ assert.deepEqual(h.replaced.at(-1), [null, '', '/demo/merge-requests/1?x=1'], 'closing clears the fragment');
131+ location.hash = '';
132+ h.tabs[1].events.click({ preventDefault() {} });
133+ h.tabs[0].events.click({ preventDefault() {} });
134+ assert.deepEqual(h.state(), [true, false], 'the other tab switches');
135+ h.tabs[0].events.keydown({ key: 'ArrowRight', preventDefault() {} });
136+ assert.equal(h.tabs[1].focused, true, 'arrows move focus only');
137+ assert.deepEqual(h.state(), [true, false]);
138+ location.hash = '#mr-checks'; h.replaced.length = 0; h.listeners.hashchange();
139+ assert.deepEqual(h.state(), [false, true], 'hash opens checks');
140+ assert.deepEqual(h.replaced, [], 'hash navigation does not rewrite the URL');
141+ location.hash = '#mr-commits'; h.listeners.hashchange();
142+ assert.deepEqual(h.state(), [true, false]);
143+ assert.equal(C.tabIndex('Home', 1, 2), 0);
144+ assert.equal(C.tabIndex('End', 0, 2), 1);
145+ assert.equal(C.tabIndex('ArrowLeft', 0, 2), 1);
146+ assert.equal(C.tabIndex('Escape', 0, 2), null);
147+ } finally { h.restore(); }
145148 });
146149
147-test('footer: #mr-ck syncs the checks label and a click opens the footer on Checks', () => {
148- const saved = Object.fromEntries(['document', 'location', 'addEventListener', 'history', 'MutationObserver'].map((k) => [k, globalThis[k]]));
149- const node = (id) => ({ id, attrs: {}, events: {}, hidden: false,
150- setAttribute(k, v) { this.attrs[k] = v; }, addEventListener(k, v) { this.events[k] = v; }, focus() {} });
151- const tabs = [node('t0'), node('t1')];
152- const panels = [node('mr-commits'), node('mr-checks-panel')];
153- const footer = node('mr-panels'); footer.open = false; footer.querySelectorAll = () => panels;
154- let writes = 0, text = '';
155- const label = { get textContent() { return text; }, set textContent(v) { writes++; text = v; } };
156- const nav = node('tabs'); nav.querySelectorAll = () => tabs;
157- nav.querySelector = (s) => s === '[data-checks-label]' ? label : null;
150+test('footer: #mr-ck syncs the checks label; its click opens Checks without toggling', () => {
151+ const text0 = { v: '' }; let writes = 0;
152+ const label = { get textContent() { return text0.v; }, set textContent(v) { writes++; text0.v = v; } };
158153 const summary = { title: '1/2 failed', textContent: ' 1/2 ', parentElement: {} };
159- const listeners = {};
154+ const h = footerHarness({ summary });
160155 let observed = null, callback = null;
161156 globalThis.MutationObserver = class { constructor(fn) { callback = fn; } observe(target, opts) { observed = [target, opts]; } };
162- globalThis.document = { querySelector: (s) => s === '#mr-panels' ? footer : s === '[data-mr-tabs]' ? nav : s === '#mr-ck' ? summary : null,
163- addEventListener(k, v) { listeners[k] = v; } };
164- globalThis.location = { hash: '' };
165- globalThis.addEventListener = () => {};
166- globalThis.history = { replaceState() {} };
157+ const nav = document.querySelector('[data-mr-tabs]');
158+ nav.querySelector = (s) => s === '[data-checks-label]' ? label : null;
167159 try {
168160 window.ermiteMR.panels();
169161 assert.equal(label.textContent, '1/2 failed', 'initial label sync');
170162 assert.equal(observed[0], summary.parentElement);
171- // A mutation elsewhere in the bar (hx-live rewriting a label) must not
172- // write the label again, or hx-live wakes up on its own write forever.
173163 assert.deepEqual(observed[1], { childList: true }, 'only #mr-ck replacements wake the observer');
174164 const before = writes; callback(); callback();
175165 assert.equal(writes, before, 'an unchanged label is not written');
176166 summary.title = ''; callback();
177- assert.equal(label.textContent, '1/2', 'observer re-syncs from the text');
167+ assert.equal(label.textContent, '1/2');
178168 summary.textContent = ' '; callback();
179169 assert.equal(label.textContent, 'no checks');
180- listeners.click({ target: { closest: (s) => s === '#mr-ck' ? summary : null } });
181- assert.equal(footer.open, true);
182- assert.equal(panels[1].hidden, false);
183- assert.equal(panels[0].hidden, true);
184- assert.equal(tabs[1].attrs['aria-selected'], 'true');
185- } finally {
186- for (const [k, v] of Object.entries(saved)) { if (v === undefined) delete globalThis[k]; else globalThis[k] = v; }
187- }
170+ const click = { target: { closest: (s) => s === '#mr-ck' ? summary : null } };
171+ h.listeners.click(click);
172+ assert.deepEqual(h.state(), [false, true]);
173+ h.listeners.click(click);
174+ assert.deepEqual(h.state(), [false, true], 'a second badge click keeps it open');
175+ } finally { h.restore(); }
176+});
177+
178+test('footer: panels(index) restores the open panel without touching the URL', () => {
179+ const h = footerHarness();
180+ try {
181+ window.ermiteMR.panels(1);
182+ assert.deepEqual(h.state(), [false, true]);
183+ assert.equal(h.tabs[1].attrs['aria-expanded'], 'true');
184+ assert.deepEqual(h.replaced, []);
185+ window.ermiteMR.panels(-1);
186+ assert.deepEqual(h.state(), [false, false]);
187+ } finally { h.restore(); }
188188 });
189189
190190 test('touch range: first tap anchors, second tap opens the sorted range', () => {
@@ -93,98 +93,98 @@ for (const dataset of [{diff:'split'}, {view:'split'}]) test(`reveal selects the
93 }93 }
94 });94 });
95 95
96-test('footer tabs switch panels, support arrows, and open on checks hash', () => {96+function footerHarness(extra = {}) {
97- const oldDocument = globalThis.document;97+ const saved = Object.fromEntries(['document', 'location', 'addEventListener', 'history', 'MutationObserver'].map((k) => [k, globalThis[k]]));
98- const oldLocation = globalThis.location;
99- const oldAdd = globalThis.addEventListener;
100- const oldHistory = globalThis.history;
101- const listeners = {};
102- const replaced = [];
103- globalThis.history = { replaceState: (...args) => replaced.push(args) };
104 const node = (id) => ({ id, attrs: {}, events: {}, hidden: false,98 const node = (id) => ({ id, attrs: {}, events: {}, hidden: false,
105- setAttribute(k,v) { this.attrs[k]=v; },99+ setAttribute(k, v) { this.attrs[k] = v; }, getAttribute(k) { return this.attrs[k] ?? null; },
106- addEventListener(k,v) { this.events[k]=v; }, focus() { this.focused=true; } });100+ addEventListener(k, v) { this.events[k] = v; }, focus() { this.focused = true; } });
107 const tabs = [node('mr-tab-commits'), node('mr-tab-checks')];101 const tabs = [node('mr-tab-commits'), node('mr-tab-checks')];
108 const panels = [node('mr-commits'), node('mr-checks-panel')];102 const panels = [node('mr-commits'), node('mr-checks-panel')];
109- const footer = node('mr-panels'); footer.open=false;103+ const footer = node('footer'); footer.querySelectorAll = () => panels;
110- const nav = node('tabs'); nav.querySelectorAll=()=>tabs;104+ const nav = node('tabs'); nav.querySelectorAll = () => tabs;
111- footer.querySelectorAll=()=>panels;105+ const listeners = {}, replaced = [];
112- globalThis.document = {querySelector: (s) => s === '#mr-panels' ? footer : s === '[data-mr-tabs]' ? nav : null,106+ globalThis.document = { querySelector: (s) => s === '.mr-footer' ? footer : s === '[data-mr-tabs]' ? nav : s === '#mr-ck' ? extra.summary ?? null : null,
113- addEventListener(k,v) {listeners[k]=v;} };107+ querySelectorAll: (s) => s === '[data-mr-tabs] a' ? tabs : [], addEventListener(k, v) { listeners[k] = v; } };
114- globalThis.location = {hash:''};108+ globalThis.location = { hash: '', pathname: '/demo/merge-requests/1', search: '?x=1' };
115- globalThis.addEventListener = (k,v) => {listeners[k]=v;};109+ globalThis.addEventListener = (k, v) => { listeners[k] = v; };
110+ globalThis.history = { replaceState: (...args) => replaced.push(args) };
111+ const restore = () => { for (const [k, v] of Object.entries(saved)) { if (v === undefined) delete globalThis[k]; else globalThis[k] = v; } };
112+ const state = () => panels.map((p) => !p.hidden);
113+ return { tabs, panels, listeners, replaced, restore, state };
114+}
115+
116+test('footer tabs: closed by default, toggle, switch, arrows, hash', () => {
117+ const h = footerHarness();
116 try {118 try {
117 window.ermiteMR.panels();119 window.ermiteMR.panels();
118- assert.equal(footer.open,false);120+ assert.deepEqual(h.state(), [false, false], 'initially closed');
119- assert.equal(panels[0].hidden,false);121+ assert.equal(h.tabs[0].attrs['aria-expanded'], 'false');
120- assert.equal(panels[1].hidden,true);122+ assert.deepEqual(h.replaced, [], 'initial state leaves the URL alone');
121- assert.deepEqual(replaced, [], 'initial selection leaves the URL alone');123+ h.tabs[1].events.click({ preventDefault() {} });
122- tabs[1].events.click({preventDefault(){}});124+ assert.deepEqual(h.state(), [false, true]);
123- assert.deepEqual(replaced, [[null, '', '#mr-checks-panel']]);125+ assert.equal(h.tabs[1].attrs['aria-expanded'], 'true');
124- assert.equal(panels[0].hidden,true);126+ assert.deepEqual(h.replaced, [[null, '', '#mr-checks-panel']]);
125- assert.equal(tabs[1].attrs['aria-selected'],'true');127+ location.hash = '#mr-checks-panel';
126- tabs[1].events.keydown({key:'ArrowRight',preventDefault(){}});128+ h.tabs[1].events.click({ preventDefault() {} });
127- assert.equal(tabs[0].focused,true);129+ assert.deepEqual(h.state(), [false, false], 'a second click closes');
128- assert.equal(panels[0].hidden,false);130+ assert.deepEqual(h.replaced.at(-1), [null, '', '/demo/merge-requests/1?x=1'], 'closing clears the fragment');
129- assert.deepEqual(replaced.at(-1), [null, '', '#mr-commits']);131+ location.hash = '';
130- location.hash='#mr-checks'; replaced.length = 0; listeners.hashchange();132+ h.tabs[1].events.click({ preventDefault() {} });
131- assert.deepEqual(replaced, [], 'hash navigation does not rewrite the URL');133+ h.tabs[0].events.click({ preventDefault() {} });
132- assert.equal(footer.open,true);134+ assert.deepEqual(h.state(), [true, false], 'the other tab switches');
133- assert.equal(panels[1].hidden,false);135+ h.tabs[0].events.keydown({ key: 'ArrowRight', preventDefault() {} });
134- footer.open=false;136+ assert.equal(h.tabs[1].focused, true, 'arrows move focus only');
135- listeners.click({target:{closest:()=>true}});137+ assert.deepEqual(h.state(), [true, false]);
136- assert.equal(footer.open,true);138+ location.hash = '#mr-checks'; h.replaced.length = 0; h.listeners.hashchange();
137- assert.equal(C.tabIndex('Home',1,2),0);139+ assert.deepEqual(h.state(), [false, true], 'hash opens checks');
138- assert.equal(C.tabIndex('End',0,2),1);140+ assert.deepEqual(h.replaced, [], 'hash navigation does not rewrite the URL');
139- assert.equal(C.tabIndex('ArrowLeft',0,2),1);141+ location.hash = '#mr-commits'; h.listeners.hashchange();
140- assert.equal(C.tabIndex('Escape',0,2),null);142+ assert.deepEqual(h.state(), [true, false]);
141- } finally {143+ assert.equal(C.tabIndex('Home', 1, 2), 0);
142- globalThis.document=oldDocument; globalThis.location=oldLocation; globalThis.addEventListener=oldAdd;144+ assert.equal(C.tabIndex('End', 0, 2), 1);
143- if (oldHistory === undefined) delete globalThis.history; else globalThis.history = oldHistory;145+ assert.equal(C.tabIndex('ArrowLeft', 0, 2), 1);
144- }146+ assert.equal(C.tabIndex('Escape', 0, 2), null);
147+ } finally { h.restore(); }
145 });148 });
146 149
147-test('footer: #mr-ck syncs the checks label and a click opens the footer on Checks', () => {150+test('footer: #mr-ck syncs the checks label; its click opens Checks without toggling', () => {
148- const saved = Object.fromEntries(['document', 'location', 'addEventListener', 'history', 'MutationObserver'].map((k) => [k, globalThis[k]]));151+ const text0 = { v: '' }; let writes = 0;
149- const node = (id) => ({ id, attrs: {}, events: {}, hidden: false,152+ const label = { get textContent() { return text0.v; }, set textContent(v) { writes++; text0.v = v; } };
150- setAttribute(k, v) { this.attrs[k] = v; }, addEventListener(k, v) { this.events[k] = v; }, focus() {} });
151- const tabs = [node('t0'), node('t1')];
152- const panels = [node('mr-commits'), node('mr-checks-panel')];
153- const footer = node('mr-panels'); footer.open = false; footer.querySelectorAll = () => panels;
154- let writes = 0, text = '';
155- const label = { get textContent() { return text; }, set textContent(v) { writes++; text = v; } };
156- const nav = node('tabs'); nav.querySelectorAll = () => tabs;
157- nav.querySelector = (s) => s === '[data-checks-label]' ? label : null;
158 const summary = { title: '1/2 failed', textContent: ' 1/2 ', parentElement: {} };153 const summary = { title: '1/2 failed', textContent: ' 1/2 ', parentElement: {} };
159- const listeners = {};154+ const h = footerHarness({ summary });
160 let observed = null, callback = null;155 let observed = null, callback = null;
161 globalThis.MutationObserver = class { constructor(fn) { callback = fn; } observe(target, opts) { observed = [target, opts]; } };156 globalThis.MutationObserver = class { constructor(fn) { callback = fn; } observe(target, opts) { observed = [target, opts]; } };
162- globalThis.document = { querySelector: (s) => s === '#mr-panels' ? footer : s === '[data-mr-tabs]' ? nav : s === '#mr-ck' ? summary : null,157+ const nav = document.querySelector('[data-mr-tabs]');
163- addEventListener(k, v) { listeners[k] = v; } };158+ nav.querySelector = (s) => s === '[data-checks-label]' ? label : null;
164- globalThis.location = { hash: '' };
165- globalThis.addEventListener = () => {};
166- globalThis.history = { replaceState() {} };
167 try {159 try {
168 window.ermiteMR.panels();160 window.ermiteMR.panels();
169 assert.equal(label.textContent, '1/2 failed', 'initial label sync');161 assert.equal(label.textContent, '1/2 failed', 'initial label sync');
170 assert.equal(observed[0], summary.parentElement);162 assert.equal(observed[0], summary.parentElement);
171- // A mutation elsewhere in the bar (hx-live rewriting a label) must not
172- // write the label again, or hx-live wakes up on its own write forever.
173 assert.deepEqual(observed[1], { childList: true }, 'only #mr-ck replacements wake the observer');163 assert.deepEqual(observed[1], { childList: true }, 'only #mr-ck replacements wake the observer');
174 const before = writes; callback(); callback();164 const before = writes; callback(); callback();
175 assert.equal(writes, before, 'an unchanged label is not written');165 assert.equal(writes, before, 'an unchanged label is not written');
176 summary.title = ''; callback();166 summary.title = ''; callback();
177- assert.equal(label.textContent, '1/2', 'observer re-syncs from the text');167+ assert.equal(label.textContent, '1/2');
178 summary.textContent = ' '; callback();168 summary.textContent = ' '; callback();
179 assert.equal(label.textContent, 'no checks');169 assert.equal(label.textContent, 'no checks');
180- listeners.click({ target: { closest: (s) => s === '#mr-ck' ? summary : null } });170+ const click = { target: { closest: (s) => s === '#mr-ck' ? summary : null } };
181- assert.equal(footer.open, true);171+ h.listeners.click(click);
182- assert.equal(panels[1].hidden, false);172+ assert.deepEqual(h.state(), [false, true]);
183- assert.equal(panels[0].hidden, true);173+ h.listeners.click(click);
184- assert.equal(tabs[1].attrs['aria-selected'], 'true');174+ assert.deepEqual(h.state(), [false, true], 'a second badge click keeps it open');
185- } finally {175+ } finally { h.restore(); }
186- for (const [k, v] of Object.entries(saved)) { if (v === undefined) delete globalThis[k]; else globalThis[k] = v; }176+});
187- }177+
178+test('footer: panels(index) restores the open panel without touching the URL', () => {
179+ const h = footerHarness();
180+ try {
181+ window.ermiteMR.panels(1);
182+ assert.deepEqual(h.state(), [false, true]);
183+ assert.equal(h.tabs[1].attrs['aria-expanded'], 'true');
184+ assert.deepEqual(h.replaced, []);
185+ window.ermiteMR.panels(-1);
186+ assert.deepEqual(h.state(), [false, false]);
187+ } finally { h.restore(); }
188 });188 });
189 189
190 test('touch range: first tap anchors, second tap opens the sorted range', () => {190 test('touch range: first tap anchors, second tap opens the sorted range', () => {
M internal/adapters/web/mr.templ +51 -54
@@ -378,60 +378,57 @@ templ commentForm(f CommentForm, suffix string) {
378378
379379 templ mrFooter(p MRPage) {
380380 <footer class="mr-footer">
381- <details id="mr-panels">
382- <summary>Commits <span class="count">{ p.CommitCount }</span> · Checks</summary>
383- <nav data-mr-tabs aria-label="Branch details">
384- <a id="mr-tab-commits" href="#mr-commits">Commits <span class="count">{ p.CommitCount }</span></a>
385- <a id="mr-tab-checks" href="#mr-checks">
386- { "Checks " }
387- <span data-checks-label>
388- if p.ChecksSum.Total > 0 {
389- { p.ChecksSum.Title }
390- } else {
391- no checks
392- }
393- </span>
394- </a>
395- </nav>
396- <div id="mr-commits" data-mr-panel aria-labelledby="mr-tab-commits">
397- <table class="mr-commits">
398- <thead><tr><th>Commit</th><th>Subject</th><th>Author</th><th>Date</th><th>Signature</th><th>Status</th></tr></thead>
399- <tbody>
400- for _, c := range p.Commits {
401- <tr data-new?={ c.New }>
402- <td><a href={ templ.SafeURL(c.Href) }>{ c.Short }</a></td>
403- <td>{ c.Subject }</td>
404- <td>{ c.Author }</td>
405- <td>
406- if c.WhenAt != "" {
407- <time datetime={ c.WhenAt }>{ c.When }</time>
408- }
409- </td>
410- <td>
411- if c.Sig != nil {
412- @signaturePill(c.Sig)
413- }
414- </td>
415- <td>
416- if c.New {
417- <span>new</span>
418- }
419- </td>
420- </tr>
421- }
422- </tbody>
423- </table>
424- if len(p.Commits) == 0 {
425- <p class="dim">no commit to merge.</p>
426- }
427- if p.CommitsNote != "" {
428- <p class="note">{ p.CommitsNote }</p>
429- }
430- </div>
431- <div id="mr-checks-panel" data-mr-panel aria-labelledby="mr-tab-checks">
432- @MRChecks(p.Checks)
433- </div>
434- </details>
381+ <nav data-mr-tabs aria-label="Branch details">
382+ <a id="mr-tab-commits" href="#mr-commits">Commits <span class="count">{ p.CommitCount }</span></a>
383+ <a id="mr-tab-checks" href="#mr-checks">
384+ { "Checks " }
385+ <span data-checks-label>
386+ if p.ChecksSum.Total > 0 {
387+ { p.ChecksSum.Title }
388+ } else {
389+ no checks
390+ }
391+ </span>
392+ </a>
393+ </nav>
394+ <div id="mr-commits" data-mr-panel hidden aria-labelledby="mr-tab-commits">
395+ <table class="mr-commits">
396+ <thead><tr><th>Commit</th><th>Subject</th><th>Author</th><th>Date</th><th>Signature</th><th>Status</th></tr></thead>
397+ <tbody>
398+ for _, c := range p.Commits {
399+ <tr data-new?={ c.New }>
400+ <td><a href={ templ.SafeURL(c.Href) }>{ c.Short }</a></td>
401+ <td>{ c.Subject }</td>
402+ <td>{ c.Author }</td>
403+ <td>
404+ if c.WhenAt != "" {
405+ <time datetime={ c.WhenAt }>{ c.When }</time>
406+ }
407+ </td>
408+ <td>
409+ if c.Sig != nil {
410+ @signaturePill(c.Sig)
411+ }
412+ </td>
413+ <td>
414+ if c.New {
415+ <span>new</span>
416+ }
417+ </td>
418+ </tr>
419+ }
420+ </tbody>
421+ </table>
422+ if len(p.Commits) == 0 {
423+ <p class="dim">no commit to merge.</p>
424+ }
425+ if p.CommitsNote != "" {
426+ <p class="note">{ p.CommitsNote }</p>
427+ }
428+ </div>
429+ <div id="mr-checks-panel" data-mr-panel hidden aria-labelledby="mr-tab-checks">
430+ @MRChecks(p.Checks)
431+ </div>
435432 </footer>
436433 }
437434
@@ -378,60 +378,57 @@ templ commentForm(f CommentForm, suffix string) {
378 378
379 templ mrFooter(p MRPage) {379 templ mrFooter(p MRPage) {
380 <footer class="mr-footer">380 <footer class="mr-footer">
381- <details id="mr-panels">381+ <nav data-mr-tabs aria-label="Branch details">
382- <summary>Commits <span class="count">{ p.CommitCount }</span> · Checks</summary>382+ <a id="mr-tab-commits" href="#mr-commits">Commits <span class="count">{ p.CommitCount }</span></a>
383- <nav data-mr-tabs aria-label="Branch details">383+ <a id="mr-tab-checks" href="#mr-checks">
384- <a id="mr-tab-commits" href="#mr-commits">Commits <span class="count">{ p.CommitCount }</span></a>384+ { "Checks " }
385- <a id="mr-tab-checks" href="#mr-checks">385+ <span data-checks-label>
386- { "Checks " }386+ if p.ChecksSum.Total > 0 {
387- <span data-checks-label>387+ { p.ChecksSum.Title }
388- if p.ChecksSum.Total > 0 {388+ } else {
389- { p.ChecksSum.Title }389+ no checks
390- } else {390+ }
391- no checks391+ </span>
392- }392+ </a>
393- </span>393+ </nav>
394- </a>394+ <div id="mr-commits" data-mr-panel hidden aria-labelledby="mr-tab-commits">
395- </nav>395+ <table class="mr-commits">
396- <div id="mr-commits" data-mr-panel aria-labelledby="mr-tab-commits">396+ <thead><tr><th>Commit</th><th>Subject</th><th>Author</th><th>Date</th><th>Signature</th><th>Status</th></tr></thead>
397- <table class="mr-commits">397+ <tbody>
398- <thead><tr><th>Commit</th><th>Subject</th><th>Author</th><th>Date</th><th>Signature</th><th>Status</th></tr></thead>398+ for _, c := range p.Commits {
399- <tbody>399+ <tr data-new?={ c.New }>
400- for _, c := range p.Commits {400+ <td><a href={ templ.SafeURL(c.Href) }>{ c.Short }</a></td>
401- <tr data-new?={ c.New }>401+ <td>{ c.Subject }</td>
402- <td><a href={ templ.SafeURL(c.Href) }>{ c.Short }</a></td>402+ <td>{ c.Author }</td>
403- <td>{ c.Subject }</td>403+ <td>
404- <td>{ c.Author }</td>404+ if c.WhenAt != "" {
405- <td>405+ <time datetime={ c.WhenAt }>{ c.When }</time>
406- if c.WhenAt != "" {406+ }
407- <time datetime={ c.WhenAt }>{ c.When }</time>407+ </td>
408- }408+ <td>
409- </td>409+ if c.Sig != nil {
410- <td>410+ @signaturePill(c.Sig)
411- if c.Sig != nil {411+ }
412- @signaturePill(c.Sig)412+ </td>
413- }413+ <td>
414- </td>414+ if c.New {
415- <td>415+ <span>new</span>
416- if c.New {416+ }
417- <span>new</span>417+ </td>
418- }418+ </tr>
419- </td>419+ }
420- </tr>420+ </tbody>
421- }421+ </table>
422- </tbody>422+ if len(p.Commits) == 0 {
423- </table>423+ <p class="dim">no commit to merge.</p>
424- if len(p.Commits) == 0 {424+ }
425- <p class="dim">no commit to merge.</p>425+ if p.CommitsNote != "" {
426- }426+ <p class="note">{ p.CommitsNote }</p>
427- if p.CommitsNote != "" {427+ }
428- <p class="note">{ p.CommitsNote }</p>428+ </div>
429- }429+ <div id="mr-checks-panel" data-mr-panel hidden aria-labelledby="mr-tab-checks">
430- </div>430+ @MRChecks(p.Checks)
431- <div id="mr-checks-panel" data-mr-panel aria-labelledby="mr-tab-checks">431+ </div>
432- @MRChecks(p.Checks)
433- </div>
434- </details>
435 </footer>432 </footer>
436 }433 }
437 434
M internal/adapters/web/mr_templ.go +480 -493
@@ -2033,169 +2033,156 @@ func mrFooter(p MRPage) templ.Component {
20332033 templ_7745c5c3_Var97 = templ.NopComponent
20342034 }
20352035 ctx = templ.ClearChildren(ctx)
2036- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 187, "<footer class=\"mr-footer\"><details id=\"mr-panels\"><summary>Commits <span class=\"count\">")
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\">")
20372037 if templ_7745c5c3_Err != nil {
20382038 return templ_7745c5c3_Err
20392039 }
20402040 var templ_7745c5c3_Var98 string
20412041 templ_7745c5c3_Var98, templ_7745c5c3_Err = templ.JoinStringErrs(p.CommitCount)
20422042 if templ_7745c5c3_Err != nil {
2043- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 382, Col: 55}
2043+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 382, Col: 88}
20442044 }
20452045 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var98))
20462046 if templ_7745c5c3_Err != nil {
20472047 return templ_7745c5c3_Err
20482048 }
2049- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 188, "</span> · Checks</summary><nav data-mr-tabs aria-label=\"Branch details\"><a id=\"mr-tab-commits\" href=\"#mr-commits\">Commits <span class=\"count\">")
2049+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 188, "</span></a> <a id=\"mr-tab-checks\" href=\"#mr-checks\">")
20502050 if templ_7745c5c3_Err != nil {
20512051 return templ_7745c5c3_Err
20522052 }
20532053 var templ_7745c5c3_Var99 string
2054- templ_7745c5c3_Var99, templ_7745c5c3_Err = templ.JoinStringErrs(p.CommitCount)
2054+ templ_7745c5c3_Var99, templ_7745c5c3_Err = templ.JoinStringErrs("Checks ")
20552055 if templ_7745c5c3_Err != nil {
2056- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 384, Col: 89}
2056+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 384, Col: 15}
20572057 }
20582058 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var99))
20592059 if templ_7745c5c3_Err != nil {
20602060 return templ_7745c5c3_Err
20612061 }
2062- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 189, "</span></a> <a id=\"mr-tab-checks\" href=\"#mr-checks\">")
2063- if templ_7745c5c3_Err != nil {
2064- return templ_7745c5c3_Err
2065- }
2066- var templ_7745c5c3_Var100 string
2067- templ_7745c5c3_Var100, templ_7745c5c3_Err = templ.JoinStringErrs("Checks ")
2068- if templ_7745c5c3_Err != nil {
2069- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 386, Col: 16}
2070- }
2071- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var100))
2072- if templ_7745c5c3_Err != nil {
2073- return templ_7745c5c3_Err
2074- }
2075- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 190, " <span data-checks-label>")
2062+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 189, " <span data-checks-label>")
20762063 if templ_7745c5c3_Err != nil {
20772064 return templ_7745c5c3_Err
20782065 }
20792066 if p.ChecksSum.Total > 0 {
2080- var templ_7745c5c3_Var101 string
2081- templ_7745c5c3_Var101, templ_7745c5c3_Err = templ.JoinStringErrs(p.ChecksSum.Title)
2067+ var templ_7745c5c3_Var100 string
2068+ templ_7745c5c3_Var100, templ_7745c5c3_Err = templ.JoinStringErrs(p.ChecksSum.Title)
20822069 if templ_7745c5c3_Err != nil {
2083- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 389, Col: 26}
2070+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 387, Col: 25}
20842071 }
2085- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var101))
2072+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var100))
20862073 if templ_7745c5c3_Err != nil {
20872074 return templ_7745c5c3_Err
20882075 }
20892076 } else {
2090- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 191, "no checks")
2077+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 190, "no checks")
20912078 if templ_7745c5c3_Err != nil {
20922079 return templ_7745c5c3_Err
20932080 }
20942081 }
2095- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 192, "</span></a></nav><div id=\"mr-commits\" data-mr-panel 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>")
2082+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 191, "</span></a></nav><div id=\"mr-commits\" data-mr-panel hidden 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>")
20962083 if templ_7745c5c3_Err != nil {
20972084 return templ_7745c5c3_Err
20982085 }
20992086 for _, c := range p.Commits {
2100- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 193, "<tr")
2087+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 192, "<tr")
21012088 if templ_7745c5c3_Err != nil {
21022089 return templ_7745c5c3_Err
21032090 }
21042091 if c.New {
2105- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 194, " data-new")
2092+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 193, " data-new")
21062093 if templ_7745c5c3_Err != nil {
21072094 return templ_7745c5c3_Err
21082095 }
21092096 }
2110- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 195, "><td><a href=\"")
2097+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 194, "><td><a href=\"")
21112098 if templ_7745c5c3_Err != nil {
21122099 return templ_7745c5c3_Err
21132100 }
2114- var templ_7745c5c3_Var102 templ.SafeURL
2115- templ_7745c5c3_Var102, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Href))
2101+ var templ_7745c5c3_Var101 templ.SafeURL
2102+ templ_7745c5c3_Var101, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Href))
21162103 if templ_7745c5c3_Err != nil {
2117- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 402, Col: 43}
2104+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 400, Col: 42}
21182105 }
2119- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var102))
2106+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var101))
21202107 if templ_7745c5c3_Err != nil {
21212108 return templ_7745c5c3_Err
21222109 }
2123- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 196, "\">")
2110+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 195, "\">")
21242111 if templ_7745c5c3_Err != nil {
21252112 return templ_7745c5c3_Err
21262113 }
2127- var templ_7745c5c3_Var103 string
2128- templ_7745c5c3_Var103, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)
2114+ var templ_7745c5c3_Var102 string
2115+ templ_7745c5c3_Var102, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)
21292116 if templ_7745c5c3_Err != nil {
2130- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 402, Col: 55}
2117+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 400, Col: 54}
21312118 }
2132- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var103))
2119+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var102))
21332120 if templ_7745c5c3_Err != nil {
21342121 return templ_7745c5c3_Err
21352122 }
2136- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 197, "</a></td><td>")
2123+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 196, "</a></td><td>")
21372124 if templ_7745c5c3_Err != nil {
21382125 return templ_7745c5c3_Err
21392126 }
2140- var templ_7745c5c3_Var104 string
2141- templ_7745c5c3_Var104, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)
2127+ var templ_7745c5c3_Var103 string
2128+ templ_7745c5c3_Var103, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)
21422129 if templ_7745c5c3_Err != nil {
2143- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 403, Col: 23}
2130+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 401, Col: 22}
21442131 }
2145- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var104))
2132+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var103))
21462133 if templ_7745c5c3_Err != nil {
21472134 return templ_7745c5c3_Err
21482135 }
2149- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 198, "</td><td>")
2136+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 197, "</td><td>")
21502137 if templ_7745c5c3_Err != nil {
21512138 return templ_7745c5c3_Err
21522139 }
2153- var templ_7745c5c3_Var105 string
2154- templ_7745c5c3_Var105, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)
2140+ var templ_7745c5c3_Var104 string
2141+ templ_7745c5c3_Var104, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)
21552142 if templ_7745c5c3_Err != nil {
2156- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 404, Col: 22}
2143+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 402, Col: 21}
21572144 }
2158- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var105))
2145+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var104))
21592146 if templ_7745c5c3_Err != nil {
21602147 return templ_7745c5c3_Err
21612148 }
2162- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 199, "</td><td>")
2149+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 198, "</td><td>")
21632150 if templ_7745c5c3_Err != nil {
21642151 return templ_7745c5c3_Err
21652152 }
21662153 if c.WhenAt != "" {
2167- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 200, "<time datetime=\"")
2154+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 199, "<time datetime=\"")
21682155 if templ_7745c5c3_Err != nil {
21692156 return templ_7745c5c3_Err
21702157 }
2171- var templ_7745c5c3_Var106 string
2172- templ_7745c5c3_Var106, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
2158+ var templ_7745c5c3_Var105 string
2159+ templ_7745c5c3_Var105, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
21732160 if templ_7745c5c3_Err != nil {
2174- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 407, Col: 35}
2161+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 405, Col: 34}
21752162 }
2176- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var106)
2163+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var105)
21772164 if templ_7745c5c3_Err != nil {
21782165 return templ_7745c5c3_Err
21792166 }
2180- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 201, "\">")
2167+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 200, "\">")
21812168 if templ_7745c5c3_Err != nil {
21822169 return templ_7745c5c3_Err
21832170 }
2184- var templ_7745c5c3_Var107 string
2185- templ_7745c5c3_Var107, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)
2171+ var templ_7745c5c3_Var106 string
2172+ templ_7745c5c3_Var106, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)
21862173 if templ_7745c5c3_Err != nil {
2187- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 407, Col: 46}
2174+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 405, Col: 45}
21882175 }
2189- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var107))
2176+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var106))
21902177 if templ_7745c5c3_Err != nil {
21912178 return templ_7745c5c3_Err
21922179 }
2193- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 202, "</time>")
2180+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 201, "</time>")
21942181 if templ_7745c5c3_Err != nil {
21952182 return templ_7745c5c3_Err
21962183 }
21972184 }
2198- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 203, "</td><td>")
2185+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 202, "</td><td>")
21992186 if templ_7745c5c3_Err != nil {
22002187 return templ_7745c5c3_Err
22012188 }
@@ -2205,51 +2192,51 @@ func mrFooter(p MRPage) templ.Component {
22052192 return templ_7745c5c3_Err
22062193 }
22072194 }
2208- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 204, "</td><td>")
2195+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 203, "</td><td>")
22092196 if templ_7745c5c3_Err != nil {
22102197 return templ_7745c5c3_Err
22112198 }
22122199 if c.New {
2213- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 205, "<span>new</span>")
2200+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 204, "<span>new</span>")
22142201 if templ_7745c5c3_Err != nil {
22152202 return templ_7745c5c3_Err
22162203 }
22172204 }
2218- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 206, "</td></tr>")
2205+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 205, "</td></tr>")
22192206 if templ_7745c5c3_Err != nil {
22202207 return templ_7745c5c3_Err
22212208 }
22222209 }
2223- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 207, "</tbody></table>")
2210+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 206, "</tbody></table>")
22242211 if templ_7745c5c3_Err != nil {
22252212 return templ_7745c5c3_Err
22262213 }
22272214 if len(p.Commits) == 0 {
2228- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 208, "<p class=\"dim\">no commit to merge.</p>")
2215+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 207, "<p class=\"dim\">no commit to merge.</p>")
22292216 if templ_7745c5c3_Err != nil {
22302217 return templ_7745c5c3_Err
22312218 }
22322219 }
22332220 if p.CommitsNote != "" {
2234- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 209, "<p class=\"note\">")
2221+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 208, "<p class=\"note\">")
22352222 if templ_7745c5c3_Err != nil {
22362223 return templ_7745c5c3_Err
22372224 }
2238- var templ_7745c5c3_Var108 string
2239- templ_7745c5c3_Var108, templ_7745c5c3_Err = templ.JoinStringErrs(p.CommitsNote)
2225+ var templ_7745c5c3_Var107 string
2226+ templ_7745c5c3_Var107, templ_7745c5c3_Err = templ.JoinStringErrs(p.CommitsNote)
22402227 if templ_7745c5c3_Err != nil {
2241- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 428, Col: 36}
2228+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 426, Col: 35}
22422229 }
2243- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var108))
2230+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var107))
22442231 if templ_7745c5c3_Err != nil {
22452232 return templ_7745c5c3_Err
22462233 }
2247- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 210, "</p>")
2234+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 209, "</p>")
22482235 if templ_7745c5c3_Err != nil {
22492236 return templ_7745c5c3_Err
22502237 }
22512238 }
2252- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 211, "</div><div id=\"mr-checks-panel\" data-mr-panel aria-labelledby=\"mr-tab-checks\">")
2239+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 210, "</div><div id=\"mr-checks-panel\" data-mr-panel hidden aria-labelledby=\"mr-tab-checks\">")
22532240 if templ_7745c5c3_Err != nil {
22542241 return templ_7745c5c3_Err
22552242 }
@@ -2257,7 +2244,7 @@ func mrFooter(p MRPage) templ.Component {
22572244 if templ_7745c5c3_Err != nil {
22582245 return templ_7745c5c3_Err
22592246 }
2260- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 212, "</div></details></footer>")
2247+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 211, "</div></footer>")
22612248 if templ_7745c5c3_Err != nil {
22622249 return templ_7745c5c3_Err
22632250 }
@@ -2281,25 +2268,25 @@ func mrRail(p MRPage) templ.Component {
22812268 }()
22822269 }
22832270 ctx = templ.InitializeContext(ctx)
2284- templ_7745c5c3_Var109 := templ.GetChildren(ctx)
2285- if templ_7745c5c3_Var109 == nil {
2286- templ_7745c5c3_Var109 = templ.NopComponent
2271+ templ_7745c5c3_Var108 := templ.GetChildren(ctx)
2272+ if templ_7745c5c3_Var108 == nil {
2273+ templ_7745c5c3_Var108 = templ.NopComponent
22872274 }
22882275 ctx = templ.ClearChildren(ctx)
2289- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 213, "<section aria-labelledby=\"r-files\" class=\"r-files\"><h2 id=\"r-files\">Files <span class=\"count\">")
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\">")
22902277 if templ_7745c5c3_Err != nil {
22912278 return templ_7745c5c3_Err
22922279 }
2293- var templ_7745c5c3_Var110 string
2294- templ_7745c5c3_Var110, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))
2280+ var templ_7745c5c3_Var109 string
2281+ templ_7745c5c3_Var109, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))
22952282 if templ_7745c5c3_Err != nil {
2296- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 441, Col: 49}
2283+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 438, Col: 49}
22972284 }
2298- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var110))
2285+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var109))
22992286 if templ_7745c5c3_Err != nil {
23002287 return templ_7745c5c3_Err
23012288 }
2302- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 214, "</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>")
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>")
23032290 if templ_7745c5c3_Err != nil {
23042291 return templ_7745c5c3_Err
23052292 }
@@ -2307,71 +2294,71 @@ func mrRail(p MRPage) templ.Component {
23072294 if templ_7745c5c3_Err != nil {
23082295 return templ_7745c5c3_Err
23092296 }
2310- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 215, "</section>")
2297+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 214, "</section>")
23112298 if templ_7745c5c3_Err != nil {
23122299 return templ_7745c5c3_Err
23132300 }
23142301 if len(p.Verdicts) > 0 {
2315- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 216, "<section><h2>Verdicts</h2><ul>")
2302+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 215, "<section><h2>Verdicts</h2><ul>")
23162303 if templ_7745c5c3_Err != nil {
23172304 return templ_7745c5c3_Err
23182305 }
23192306 for _, v := range p.Verdicts {
2320- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 217, "<li><a href=\"")
2307+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 216, "<li><a href=\"")
23212308 if templ_7745c5c3_Err != nil {
23222309 return templ_7745c5c3_Err
23232310 }
2324- var templ_7745c5c3_Var111 templ.SafeURL
2325- templ_7745c5c3_Var111, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(v.Href))
2311+ var templ_7745c5c3_Var110 templ.SafeURL
2312+ templ_7745c5c3_Var110, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(v.Href))
23262313 if templ_7745c5c3_Err != nil {
2327- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 454, Col: 37}
2314+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 451, Col: 37}
23282315 }
2329- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var111))
2316+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var110))
23302317 if templ_7745c5c3_Err != nil {
23312318 return templ_7745c5c3_Err
23322319 }
2333- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 218, "\">")
2320+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 217, "\">")
23342321 if templ_7745c5c3_Err != nil {
23352322 return templ_7745c5c3_Err
23362323 }
2337- var templ_7745c5c3_Var112 string
2338- templ_7745c5c3_Var112, templ_7745c5c3_Err = templ.JoinStringErrs(v.Author)
2324+ var templ_7745c5c3_Var111 string
2325+ templ_7745c5c3_Var111, templ_7745c5c3_Err = templ.JoinStringErrs(v.Author)
23392326 if templ_7745c5c3_Err != nil {
2340- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 454, Col: 50}
2327+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 451, Col: 50}
23412328 }
2342- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var112))
2329+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var111))
23432330 if templ_7745c5c3_Err != nil {
23442331 return templ_7745c5c3_Err
23452332 }
2346- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 219, ": ")
2333+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 218, ": ")
23472334 if templ_7745c5c3_Err != nil {
23482335 return templ_7745c5c3_Err
23492336 }
2350- var templ_7745c5c3_Var113 string
2351- templ_7745c5c3_Var113, templ_7745c5c3_Err = templ.JoinStringErrs(v.Label)
2337+ var templ_7745c5c3_Var112 string
2338+ templ_7745c5c3_Var112, templ_7745c5c3_Err = templ.JoinStringErrs(v.Label)
23522339 if templ_7745c5c3_Err != nil {
2353- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 454, Col: 63}
2340+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 451, Col: 63}
23542341 }
2355- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var113))
2342+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var112))
23562343 if templ_7745c5c3_Err != nil {
23572344 return templ_7745c5c3_Err
23582345 }
2359- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 220, "</a> ")
2346+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 219, "</a> ")
23602347 if templ_7745c5c3_Err != nil {
23612348 return templ_7745c5c3_Err
23622349 }
23632350 if v.Stale {
2364- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 221, "<span class=\"mute\">(stale)</span>")
2351+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 220, "<span class=\"mute\">(stale)</span>")
23652352 if templ_7745c5c3_Err != nil {
23662353 return templ_7745c5c3_Err
23672354 }
23682355 }
2369- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 222, "</li>")
2356+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 221, "</li>")
23702357 if templ_7745c5c3_Err != nil {
23712358 return templ_7745c5c3_Err
23722359 }
23732360 }
2374- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 223, "</ul></section>")
2361+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 222, "</ul></section>")
23752362 if templ_7745c5c3_Err != nil {
23762363 return templ_7745c5c3_Err
23772364 }
@@ -2400,51 +2387,51 @@ func mrBar(p MRPage) templ.Component {
24002387 }()
24012388 }
24022389 ctx = templ.InitializeContext(ctx)
2403- templ_7745c5c3_Var114 := templ.GetChildren(ctx)
2404- if templ_7745c5c3_Var114 == nil {
2405- templ_7745c5c3_Var114 = templ.NopComponent
2390+ templ_7745c5c3_Var113 := templ.GetChildren(ctx)
2391+ if templ_7745c5c3_Var113 == nil {
2392+ templ_7745c5c3_Var113 = templ.NopComponent
24062393 }
24072394 ctx = templ.ClearChildren(ctx)
2408- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 224, "<div class=\"diff-tools mr-bar\" role=\"group\" aria-label=\"Diff view and merge\"><span class=\"dim\">")
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\">")
24092396 if templ_7745c5c3_Err != nil {
24102397 return templ_7745c5c3_Err
24112398 }
2412- var templ_7745c5c3_Var115 string
2413- templ_7745c5c3_Var115, templ_7745c5c3_Err = templ.JoinStringErrs(plural(p.NFiles, "file", "files"))
2399+ var templ_7745c5c3_Var114 string
2400+ templ_7745c5c3_Var114, templ_7745c5c3_Err = templ.JoinStringErrs(plural(p.NFiles, "file", "files"))
24142401 if templ_7745c5c3_Err != nil {
2415- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 471, Col: 55}
2402+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 468, Col: 55}
24162403 }
2417- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var115))
2404+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var114))
24182405 if templ_7745c5c3_Err != nil {
24192406 return templ_7745c5c3_Err
24202407 }
2421- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 225, " · <span class=\"plus\">+")
2408+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 224, " · <span class=\"plus\">+")
24222409 if templ_7745c5c3_Err != nil {
24232410 return templ_7745c5c3_Err
24242411 }
2425- var templ_7745c5c3_Var116 string
2426- templ_7745c5c3_Var116, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Adds))
2412+ var templ_7745c5c3_Var115 string
2413+ templ_7745c5c3_Var115, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Adds))
24272414 if templ_7745c5c3_Err != nil {
2428- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 471, Col: 95}
2415+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 468, Col: 95}
24292416 }
2430- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var116))
2417+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var115))
24312418 if templ_7745c5c3_Err != nil {
24322419 return templ_7745c5c3_Err
24332420 }
2434- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 226, "</span> <span class=\"minus\">-")
2421+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 225, "</span> <span class=\"minus\">-")
24352422 if templ_7745c5c3_Err != nil {
24362423 return templ_7745c5c3_Err
24372424 }
2438- var templ_7745c5c3_Var117 string
2439- templ_7745c5c3_Var117, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Dels))
2425+ var templ_7745c5c3_Var116 string
2426+ templ_7745c5c3_Var116, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Dels))
24402427 if templ_7745c5c3_Err != nil {
2441- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 471, Col: 140}
2428+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 468, Col: 140}
24422429 }
2443- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var117))
2430+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var116))
24442431 if templ_7745c5c3_Err != nil {
24452432 return templ_7745c5c3_Err
24462433 }
2447- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 227, "</span></span>")
2434+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 226, "</span></span>")
24482435 if templ_7745c5c3_Err != nil {
24492436 return templ_7745c5c3_Err
24502437 }
@@ -2452,7 +2439,7 @@ func mrBar(p MRPage) templ.Component {
24522439 if templ_7745c5c3_Err != nil {
24532440 return templ_7745c5c3_Err
24542441 }
2455- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 228, "<span class=\"grow\"></span>")
2442+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 227, "<span class=\"grow\"></span>")
24562443 if templ_7745c5c3_Err != nil {
24572444 return templ_7745c5c3_Err
24582445 }
@@ -2470,7 +2457,7 @@ func mrBar(p MRPage) templ.Component {
24702457 if templ_7745c5c3_Err != nil {
24712458 return templ_7745c5c3_Err
24722459 }
2473- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 229, "</div>")
2460+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 228, "</div>")
24742461 if templ_7745c5c3_Err != nil {
24752462 return templ_7745c5c3_Err
24762463 }
@@ -2502,80 +2489,80 @@ func mergeMenu(p MRPage) templ.Component {
25022489 }()
25032490 }
25042491 ctx = templ.InitializeContext(ctx)
2505- templ_7745c5c3_Var118 := templ.GetChildren(ctx)
2506- if templ_7745c5c3_Var118 == nil {
2507- templ_7745c5c3_Var118 = templ.NopComponent
2492+ templ_7745c5c3_Var117 := templ.GetChildren(ctx)
2493+ if templ_7745c5c3_Var117 == nil {
2494+ templ_7745c5c3_Var117 = templ.NopComponent
25082495 }
25092496 ctx = templ.ClearChildren(ctx)
2510- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 230, "<details class=\"menu mmenu\" id=\"merge-menu\" data-state=\"open\"")
2497+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 229, "<details class=\"menu mmenu\" id=\"merge-menu\" data-state=\"open\"")
25112498 if templ_7745c5c3_Err != nil {
25122499 return templ_7745c5c3_Err
25132500 }
25142501 if p.Box.Error != "" {
2515- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 231, " open")
2502+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 230, " open")
25162503 if templ_7745c5c3_Err != nil {
25172504 return templ_7745c5c3_Err
25182505 }
25192506 }
2520- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 232, "><summary class=\"btn primary\" aria-keyshortcuts=\"Shift+M\">")
2507+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 231, "><summary class=\"btn primary\" aria-keyshortcuts=\"Shift+M\">")
25212508 if templ_7745c5c3_Err != nil {
25222509 return templ_7745c5c3_Err
25232510 }
25242511 if p.Box.ReadyAction != "" {
2525- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 233, "Draft ")
2512+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 232, "Draft ")
25262513 if templ_7745c5c3_Err != nil {
25272514 return templ_7745c5c3_Err
25282515 }
25292516 } else {
2530- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 234, "Merge ")
2517+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 233, "Merge ")
25312518 if templ_7745c5c3_Err != nil {
25322519 return templ_7745c5c3_Err
25332520 }
25342521 }
2535- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 235, "<kbd aria-hidden=\"true\">M</kbd></summary><div class=\"menu-pop\" role=\"group\" aria-label=\"Merge\">")
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\">")
25362523 if templ_7745c5c3_Err != nil {
25372524 return templ_7745c5c3_Err
25382525 }
25392526 if p.Box.HeadGone {
2540- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 236, "<p class=\"dim\">the source branch was deleted</p>")
2527+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 235, "<p class=\"dim\">the source branch was deleted</p>")
25412528 if templ_7745c5c3_Err != nil {
25422529 return templ_7745c5c3_Err
25432530 }
25442531 }
25452532 if p.Box.Error != "" {
2546- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 237, "<p class=\"d-err\" role=\"alert\">")
2533+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 236, "<p class=\"d-err\" role=\"alert\">")
25472534 if templ_7745c5c3_Err != nil {
25482535 return templ_7745c5c3_Err
25492536 }
2550- var templ_7745c5c3_Var119 string
2551- templ_7745c5c3_Var119, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.Error)
2537+ var templ_7745c5c3_Var118 string
2538+ templ_7745c5c3_Var118, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.Error)
25522539 if templ_7745c5c3_Err != nil {
2553- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 505, Col: 47}
2540+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 502, Col: 47}
25542541 }
2555- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var119))
2542+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var118))
25562543 if templ_7745c5c3_Err != nil {
25572544 return templ_7745c5c3_Err
25582545 }
2559- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 238, "</p>")
2546+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 237, "</p>")
25602547 if templ_7745c5c3_Err != nil {
25612548 return templ_7745c5c3_Err
25622549 }
25632550 }
25642551 if p.Box.ReadyAction != "" {
2565- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 239, "<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=\"")
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=\"")
25662553 if templ_7745c5c3_Err != nil {
25672554 return templ_7745c5c3_Err
25682555 }
2569- var templ_7745c5c3_Var120 templ.SafeURL
2570- templ_7745c5c3_Var120, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.ReadyAction))
2556+ var templ_7745c5c3_Var119 templ.SafeURL
2557+ templ_7745c5c3_Var119, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.ReadyAction))
25712558 if templ_7745c5c3_Err != nil {
2572- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 509, Col: 80}
2559+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 506, Col: 80}
25732560 }
2574- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var120))
2561+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var119))
25752562 if templ_7745c5c3_Err != nil {
25762563 return templ_7745c5c3_Err
25772564 }
2578- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 240, "\"><button type=\"submit\" class=\"btn primary\" data-default title=\"remove the draft prefix from the title\">Ready for review</button></form>")
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>")
25792566 if templ_7745c5c3_Err != nil {
25802567 return templ_7745c5c3_Err
25812568 }
@@ -2584,185 +2571,185 @@ func mergeMenu(p MRPage) templ.Component {
25842571 if templ_7745c5c3_Err != nil {
25852572 return templ_7745c5c3_Err
25862573 }
2587- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 241, " <form class=\"d-acts\" method=\"post\" action=\"")
2574+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 240, " <form class=\"d-acts\" method=\"post\" action=\"")
25882575 if templ_7745c5c3_Err != nil {
25892576 return templ_7745c5c3_Err
25902577 }
2591- var templ_7745c5c3_Var121 templ.SafeURL
2592- templ_7745c5c3_Var121, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.MergeAction))
2578+ var templ_7745c5c3_Var120 templ.SafeURL
2579+ templ_7745c5c3_Var120, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.MergeAction))
25932580 if templ_7745c5c3_Err != nil {
2594- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 514, Col: 80}
2581+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 511, Col: 80}
25952582 }
2596- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var121))
2583+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var120))
25972584 if templ_7745c5c3_Err != nil {
25982585 return templ_7745c5c3_Err
25992586 }
2600- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 242, "\"><input type=\"hidden\" name=\"head_id\" value=\"")
2587+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 241, "\"><input type=\"hidden\" name=\"head_id\" value=\"")
26012588 if templ_7745c5c3_Err != nil {
26022589 return templ_7745c5c3_Err
26032590 }
2604- var templ_7745c5c3_Var122 string
2605- templ_7745c5c3_Var122, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)
2591+ var templ_7745c5c3_Var121 string
2592+ templ_7745c5c3_Var121, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)
26062593 if templ_7745c5c3_Err != nil {
2607- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 515, Col: 59}
2594+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 512, Col: 59}
26082595 }
2609- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var122)
2596+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var121)
26102597 if templ_7745c5c3_Err != nil {
26112598 return templ_7745c5c3_Err
26122599 }
2613- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 243, "\"><fieldset class=\"d-modes\"><legend class=\"sr\">merge mode</legend> ")
2600+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 242, "\"><fieldset class=\"d-modes\"><legend class=\"sr\">merge mode</legend> ")
26142601 if templ_7745c5c3_Err != nil {
26152602 return templ_7745c5c3_Err
26162603 }
26172604 for i, m := range p.Box.Modes {
2618- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 244, "<label><input type=\"radio\" name=\"mode\" value=\"")
2605+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 243, "<label><input type=\"radio\" name=\"mode\" value=\"")
26192606 if templ_7745c5c3_Err != nil {
26202607 return templ_7745c5c3_Err
26212608 }
2622- var templ_7745c5c3_Var123 string
2623- templ_7745c5c3_Var123, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.Value)
2609+ var templ_7745c5c3_Var122 string
2610+ templ_7745c5c3_Var122, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.Value)
26242611 if templ_7745c5c3_Err != nil {
2625- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 523, Col: 24}
2612+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 520, Col: 24}
26262613 }
2627- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var123)
2614+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var122)
26282615 if templ_7745c5c3_Err != nil {
26292616 return templ_7745c5c3_Err
26302617 }
2631- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 245, "\"")
2618+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 244, "\"")
26322619 if templ_7745c5c3_Err != nil {
26332620 return templ_7745c5c3_Err
26342621 }
26352622 if i == p.Box.Checked() {
2636- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 246, " checked")
2623+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 245, " checked")
26372624 if templ_7745c5c3_Err != nil {
26382625 return templ_7745c5c3_Err
26392626 }
26402627 }
26412628 if m.Disabled {
2642- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 247, " disabled")
2629+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 246, " disabled")
26432630 if templ_7745c5c3_Err != nil {
26442631 return templ_7745c5c3_Err
26452632 }
26462633 }
2647- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 248, " title=\"")
2634+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 247, " title=\"")
26482635 if templ_7745c5c3_Err != nil {
26492636 return templ_7745c5c3_Err
26502637 }
2651- var templ_7745c5c3_Var124 string
2652- templ_7745c5c3_Var124, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.Reason)
2638+ var templ_7745c5c3_Var123 string
2639+ templ_7745c5c3_Var123, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.Reason)
26532640 if templ_7745c5c3_Err != nil {
2654- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 526, Col: 25}
2641+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 523, Col: 25}
26552642 }
2656- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var124)
2643+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var123)
26572644 if templ_7745c5c3_Err != nil {
26582645 return templ_7745c5c3_Err
26592646 }
2660- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 249, "\" :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\"> ")
2647+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 248, "\" :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\"> ")
26612648 if templ_7745c5c3_Err != nil {
26622649 return templ_7745c5c3_Err
26632650 }
2664- var templ_7745c5c3_Var125 string
2665- templ_7745c5c3_Var125, templ_7745c5c3_Err = templ.JoinStringErrs(m.Label)
2651+ var templ_7745c5c3_Var124 string
2652+ templ_7745c5c3_Var124, templ_7745c5c3_Err = templ.JoinStringErrs(m.Label)
26662653 if templ_7745c5c3_Err != nil {
2667- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 530, Col: 17}
2654+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 527, Col: 17}
26682655 }
2669- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var125))
2656+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var124))
26702657 if templ_7745c5c3_Err != nil {
26712658 return templ_7745c5c3_Err
26722659 }
2673- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 250, " ")
2660+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 249, " ")
26742661 if templ_7745c5c3_Err != nil {
26752662 return templ_7745c5c3_Err
26762663 }
26772664 if i < 9 {
2678- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 251, "<kbd aria-hidden=\"true\">")
2665+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 250, "<kbd aria-hidden=\"true\">")
26792666 if templ_7745c5c3_Err != nil {
26802667 return templ_7745c5c3_Err
26812668 }
2682- var templ_7745c5c3_Var126 string
2683- templ_7745c5c3_Var126, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(i + 1))
2669+ var templ_7745c5c3_Var125 string
2670+ templ_7745c5c3_Var125, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(i + 1))
26842671 if templ_7745c5c3_Err != nil {
2685- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 532, Col: 46}
2672+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 529, Col: 46}
26862673 }
2687- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var126))
2674+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var125))
26882675 if templ_7745c5c3_Err != nil {
26892676 return templ_7745c5c3_Err
26902677 }
2691- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 252, "</kbd>")
2678+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 251, "</kbd>")
26922679 if templ_7745c5c3_Err != nil {
26932680 return templ_7745c5c3_Err
26942681 }
26952682 }
2696- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 253, "</label>")
2683+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 252, "</label>")
26972684 if templ_7745c5c3_Err != nil {
26982685 return templ_7745c5c3_Err
26992686 }
27002687 }
2701- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 254, "</fieldset>")
2688+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 253, "</fieldset>")
27022689 if templ_7745c5c3_Err != nil {
27032690 return templ_7745c5c3_Err
27042691 }
27052692 if p.Box.CanDeleteBranch {
2706- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 255, "<label class=\"d-check\"><input type=\"checkbox\" name=\"delete_branch\" value=\"1\"> delete ")
2693+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 254, "<label class=\"d-check\"><input type=\"checkbox\" name=\"delete_branch\" value=\"1\"> delete ")
27072694 if templ_7745c5c3_Err != nil {
27082695 return templ_7745c5c3_Err
27092696 }
2710- var templ_7745c5c3_Var127 string
2711- templ_7745c5c3_Var127, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
2697+ var templ_7745c5c3_Var126 string
2698+ templ_7745c5c3_Var126, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
27122699 if templ_7745c5c3_Err != nil {
2713- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 538, Col: 102}
2700+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 535, Col: 102}
27142701 }
2715- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var127))
2702+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var126))
27162703 if templ_7745c5c3_Err != nil {
27172704 return templ_7745c5c3_Err
27182705 }
2719- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 256, " after the merge <kbd aria-hidden=\"true\">D</kbd></label>")
2706+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 255, " after the merge <kbd aria-hidden=\"true\">D</kbd></label>")
27202707 if templ_7745c5c3_Err != nil {
27212708 return templ_7745c5c3_Err
27222709 }
27232710 }
2724- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 257, "<div class=\"d-btns\"><button type=\"submit\" class=\"btn primary\" data-default")
2711+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 256, "<div class=\"d-btns\"><button type=\"submit\" class=\"btn primary\" data-default")
27252712 if templ_7745c5c3_Err != nil {
27262713 return templ_7745c5c3_Err
27272714 }
27282715 if !p.Box.CanMerge() {
2729- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 258, " disabled")
2716+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 257, " disabled")
27302717 if templ_7745c5c3_Err != nil {
27312718 return templ_7745c5c3_Err
27322719 }
27332720 }
2734- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 259, " title=\"")
2721+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 258, " title=\"")
27352722 if templ_7745c5c3_Err != nil {
27362723 return templ_7745c5c3_Err
27372724 }
2738- var templ_7745c5c3_Var128 string
2739- templ_7745c5c3_Var128, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.MergeTitle())
2725+ var templ_7745c5c3_Var127 string
2726+ templ_7745c5c3_Var127, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.MergeTitle())
27402727 if templ_7745c5c3_Err != nil {
2741- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 546, Col: 33}
2728+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 543, Col: 33}
27422729 }
2743- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var128)
2730+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var127)
27442731 if templ_7745c5c3_Err != nil {
27452732 return templ_7745c5c3_Err
27462733 }
2747- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 260, "\" :disabled=\"!this.form.querySelector('input[name=mode]:checked:not(:disabled)')\" :title=\"(this.form.querySelector('input[name=mode]:checked') || {}).title || ''\">Merge into ")
2734+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 259, "\" :disabled=\"!this.form.querySelector('input[name=mode]:checked:not(:disabled)')\" :title=\"(this.form.querySelector('input[name=mode]:checked') || {}).title || ''\">Merge into ")
27482735 if templ_7745c5c3_Err != nil {
27492736 return templ_7745c5c3_Err
27502737 }
2751- var templ_7745c5c3_Var129 string
2752- templ_7745c5c3_Var129, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
2738+ var templ_7745c5c3_Var128 string
2739+ templ_7745c5c3_Var128, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
27532740 if templ_7745c5c3_Err != nil {
2754- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 549, Col: 28}
2741+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 546, Col: 28}
27552742 }
2756- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var129))
2743+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var128))
27572744 if templ_7745c5c3_Err != nil {
27582745 return templ_7745c5c3_Err
27592746 }
2760- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 261, "</button></div></form>")
2747+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 260, "</button></div></form>")
27612748 if templ_7745c5c3_Err != nil {
27622749 return templ_7745c5c3_Err
27632750 }
27642751 }
2765- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 262, "</div></details>")
2752+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 261, "</div></details>")
27662753 if templ_7745c5c3_Err != nil {
27672754 return templ_7745c5c3_Err
27682755 }
@@ -2788,182 +2775,182 @@ func MRMergeability(v MergeabilityView) templ.Component {
27882775 }()
27892776 }
27902777 ctx = templ.InitializeContext(ctx)
2791- templ_7745c5c3_Var130 := templ.GetChildren(ctx)
2792- if templ_7745c5c3_Var130 == nil {
2793- templ_7745c5c3_Var130 = templ.NopComponent
2778+ templ_7745c5c3_Var129 := templ.GetChildren(ctx)
2779+ if templ_7745c5c3_Var129 == nil {
2780+ templ_7745c5c3_Var129 = templ.NopComponent
27942781 }
27952782 ctx = templ.ClearChildren(ctx)
2796- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 263, "<span data-mergeability data-state=\"")
2783+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 262, "<span data-mergeability data-state=\"")
2784+ if templ_7745c5c3_Err != nil {
2785+ return templ_7745c5c3_Err
2786+ }
2787+ var templ_7745c5c3_Var130 string
2788+ templ_7745c5c3_Var130, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.State)
2789+ if templ_7745c5c3_Err != nil {
2790+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 559, Col: 22}
2791+ }
2792+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var130)
2793+ if templ_7745c5c3_Err != nil {
2794+ return templ_7745c5c3_Err
2795+ }
2796+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 263, "\" data-ff-ok=\"")
27972797 if templ_7745c5c3_Err != nil {
27982798 return templ_7745c5c3_Err
27992799 }
28002800 var templ_7745c5c3_Var131 string
2801- templ_7745c5c3_Var131, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.State)
2801+ templ_7745c5c3_Var131, templ_7745c5c3_Err = templ.ResolveAttributeValue(strconv.FormatBool(v.FFOk))
28022802 if templ_7745c5c3_Err != nil {
2803- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 562, Col: 22}
2803+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 560, Col: 41}
28042804 }
28052805 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var131)
28062806 if templ_7745c5c3_Err != nil {
28072807 return templ_7745c5c3_Err
28082808 }
2809- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 264, "\" data-ff-ok=\"")
2809+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 264, "\" data-merge-ok=\"")
28102810 if templ_7745c5c3_Err != nil {
28112811 return templ_7745c5c3_Err
28122812 }
28132813 var templ_7745c5c3_Var132 string
2814- templ_7745c5c3_Var132, templ_7745c5c3_Err = templ.ResolveAttributeValue(strconv.FormatBool(v.FFOk))
2814+ templ_7745c5c3_Var132, templ_7745c5c3_Err = templ.ResolveAttributeValue(strconv.FormatBool(v.MergeOk))
28152815 if templ_7745c5c3_Err != nil {
2816- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 563, Col: 41}
2816+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 561, Col: 47}
28172817 }
28182818 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var132)
28192819 if templ_7745c5c3_Err != nil {
28202820 return templ_7745c5c3_Err
28212821 }
2822- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 265, "\" data-merge-ok=\"")
2822+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 265, "\" data-ff-reason=\"")
28232823 if templ_7745c5c3_Err != nil {
28242824 return templ_7745c5c3_Err
28252825 }
28262826 var templ_7745c5c3_Var133 string
2827- templ_7745c5c3_Var133, templ_7745c5c3_Err = templ.ResolveAttributeValue(strconv.FormatBool(v.MergeOk))
2827+ templ_7745c5c3_Var133, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.FFReason)
28282828 if templ_7745c5c3_Err != nil {
2829- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 564, Col: 47}
2829+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 562, Col: 29}
28302830 }
28312831 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var133)
28322832 if templ_7745c5c3_Err != nil {
28332833 return templ_7745c5c3_Err
28342834 }
2835- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 266, "\" data-ff-reason=\"")
2835+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 266, "\" data-merge-reason=\"")
28362836 if templ_7745c5c3_Err != nil {
28372837 return templ_7745c5c3_Err
28382838 }
28392839 var templ_7745c5c3_Var134 string
2840- templ_7745c5c3_Var134, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.FFReason)
2840+ templ_7745c5c3_Var134, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.MergeReason)
28412841 if templ_7745c5c3_Err != nil {
2842- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 565, Col: 29}
2842+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 563, Col: 35}
28432843 }
28442844 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var134)
28452845 if templ_7745c5c3_Err != nil {
28462846 return templ_7745c5c3_Err
28472847 }
2848- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 267, "\" data-merge-reason=\"")
2848+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 267, "\"><span class=\"badge\" data-state=\"")
28492849 if templ_7745c5c3_Err != nil {
28502850 return templ_7745c5c3_Err
28512851 }
28522852 var templ_7745c5c3_Var135 string
2853- templ_7745c5c3_Var135, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.MergeReason)
2853+ templ_7745c5c3_Var135, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.State)
28542854 if templ_7745c5c3_Err != nil {
2855- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 566, Col: 35}
2855+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 565, Col: 42}
28562856 }
28572857 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var135)
28582858 if templ_7745c5c3_Err != nil {
28592859 return templ_7745c5c3_Err
28602860 }
2861- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 268, "\"><span class=\"badge\" data-state=\"")
2861+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 268, "\">")
28622862 if templ_7745c5c3_Err != nil {
28632863 return templ_7745c5c3_Err
28642864 }
28652865 var templ_7745c5c3_Var136 string
2866- templ_7745c5c3_Var136, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.State)
2867- if templ_7745c5c3_Err != nil {
2868- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 568, Col: 42}
2869- }
2870- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var136)
2871- if templ_7745c5c3_Err != nil {
2872- return templ_7745c5c3_Err
2873- }
2874- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 269, "\">")
2866+ templ_7745c5c3_Var136, templ_7745c5c3_Err = templ.JoinStringErrs(v.Label)
28752867 if templ_7745c5c3_Err != nil {
2876- return templ_7745c5c3_Err
2868+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 565, Col: 54}
28772869 }
2878- var templ_7745c5c3_Var137 string
2879- templ_7745c5c3_Var137, templ_7745c5c3_Err = templ.JoinStringErrs(v.Label)
2880- if templ_7745c5c3_Err != nil {
2881- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 568, Col: 54}
2882- }
2883- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var137))
2870+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var136))
28842871 if templ_7745c5c3_Err != nil {
28852872 return templ_7745c5c3_Err
28862873 }
2887- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 270, "</span> ")
2874+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 269, "</span> ")
28882875 if templ_7745c5c3_Err != nil {
28892876 return templ_7745c5c3_Err
28902877 }
28912878 if v.Detail != "" {
2892- var templ_7745c5c3_Var138 string
2893- templ_7745c5c3_Var138, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
2879+ var templ_7745c5c3_Var137 string
2880+ templ_7745c5c3_Var137, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
28942881 if templ_7745c5c3_Err != nil {
2895- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 570, Col: 8}
2882+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 567, Col: 8}
28962883 }
2897- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var138))
2884+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var137))
28982885 if templ_7745c5c3_Err != nil {
28992886 return templ_7745c5c3_Err
29002887 }
2901- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 271, "<span class=\"dim\">")
2888+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 270, "<span class=\"dim\">")
29022889 if templ_7745c5c3_Err != nil {
29032890 return templ_7745c5c3_Err
29042891 }
2905- var templ_7745c5c3_Var139 string
2906- templ_7745c5c3_Var139, templ_7745c5c3_Err = templ.JoinStringErrs(v.Detail)
2892+ var templ_7745c5c3_Var138 string
2893+ templ_7745c5c3_Var138, templ_7745c5c3_Err = templ.JoinStringErrs(v.Detail)
29072894 if templ_7745c5c3_Err != nil {
2908- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 570, Col: 38}
2895+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 567, Col: 38}
29092896 }
2910- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var139))
2897+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var138))
29112898 if templ_7745c5c3_Err != nil {
29122899 return templ_7745c5c3_Err
29132900 }
2914- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 272, "</span>")
2901+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 271, "</span>")
29152902 if templ_7745c5c3_Err != nil {
29162903 return templ_7745c5c3_Err
29172904 }
29182905 }
2919- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 273, "</span> ")
2906+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 272, "</span> ")
29202907 if templ_7745c5c3_Err != nil {
29212908 return templ_7745c5c3_Err
29222909 }
29232910 if len(v.Paths) > 0 {
2924- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 274, "<ul class=\"mg-paths\" aria-label=\"conflicting files\">")
2911+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 273, "<ul class=\"mg-paths\" aria-label=\"conflicting files\">")
29252912 if templ_7745c5c3_Err != nil {
29262913 return templ_7745c5c3_Err
29272914 }
29282915 for _, path := range v.Paths {
2929- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 275, "<li><code>")
2916+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 274, "<li><code>")
29302917 if templ_7745c5c3_Err != nil {
29312918 return templ_7745c5c3_Err
29322919 }
2933- var templ_7745c5c3_Var140 string
2934- templ_7745c5c3_Var140, templ_7745c5c3_Err = templ.JoinStringErrs(path)
2920+ var templ_7745c5c3_Var139 string
2921+ templ_7745c5c3_Var139, templ_7745c5c3_Err = templ.JoinStringErrs(path)
29352922 if templ_7745c5c3_Err != nil {
2936- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 576, Col: 20}
2923+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 573, Col: 20}
29372924 }
2938- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var140))
2925+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var139))
29392926 if templ_7745c5c3_Err != nil {
29402927 return templ_7745c5c3_Err
29412928 }
2942- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 276, "</code></li>")
2929+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 275, "</code></li>")
29432930 if templ_7745c5c3_Err != nil {
29442931 return templ_7745c5c3_Err
29452932 }
29462933 }
2947- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 277, "</ul>")
2934+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 276, "</ul>")
29482935 if templ_7745c5c3_Err != nil {
29492936 return templ_7745c5c3_Err
29502937 }
29512938 }
29522939 if v.PathsNote != "" {
2953- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 278, "<p class=\"dim\">")
2940+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 277, "<p class=\"dim\">")
29542941 if templ_7745c5c3_Err != nil {
29552942 return templ_7745c5c3_Err
29562943 }
2957- var templ_7745c5c3_Var141 string
2958- templ_7745c5c3_Var141, templ_7745c5c3_Err = templ.JoinStringErrs(v.PathsNote)
2944+ var templ_7745c5c3_Var140 string
2945+ templ_7745c5c3_Var140, templ_7745c5c3_Err = templ.JoinStringErrs(v.PathsNote)
29592946 if templ_7745c5c3_Err != nil {
2960- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 581, Col: 30}
2947+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 578, Col: 30}
29612948 }
2962- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var141))
2949+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var140))
29632950 if templ_7745c5c3_Err != nil {
29642951 return templ_7745c5c3_Err
29652952 }
2966- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 279, "</p>")
2953+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 278, "</p>")
29672954 if templ_7745c5c3_Err != nil {
29682955 return templ_7745c5c3_Err
29692956 }
@@ -2990,12 +2977,12 @@ func mrMergeabilitySlot(v MergeabilityView) templ.Component {
29902977 }()
29912978 }
29922979 ctx = templ.InitializeContext(ctx)
2993- templ_7745c5c3_Var142 := templ.GetChildren(ctx)
2994- if templ_7745c5c3_Var142 == nil {
2995- templ_7745c5c3_Var142 = templ.NopComponent
2980+ templ_7745c5c3_Var141 := templ.GetChildren(ctx)
2981+ if templ_7745c5c3_Var141 == nil {
2982+ templ_7745c5c3_Var141 = templ.NopComponent
29962983 }
29972984 ctx = templ.ClearChildren(ctx)
2998- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 280, "<div id=\"mr-mergeability\" class=\"live-slot\" role=\"status\" data-slot>")
2985+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 279, "<div id=\"mr-mergeability\" class=\"live-slot\" role=\"status\" data-slot>")
29992986 if templ_7745c5c3_Err != nil {
30002987 return templ_7745c5c3_Err
30012988 }
@@ -3003,7 +2990,7 @@ func mrMergeabilitySlot(v MergeabilityView) templ.Component {
30032990 if templ_7745c5c3_Err != nil {
30042991 return templ_7745c5c3_Err
30052992 }
3006- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 281, "</div>")
2993+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 280, "</div>")
30072994 if templ_7745c5c3_Err != nil {
30082995 return templ_7745c5c3_Err
30092996 }
@@ -3028,9 +3015,9 @@ func MRMergeabilityFragment(v MergeabilityView) templ.Component {
30283015 }()
30293016 }
30303017 ctx = templ.InitializeContext(ctx)
3031- templ_7745c5c3_Var143 := templ.GetChildren(ctx)
3032- if templ_7745c5c3_Var143 == nil {
3033- templ_7745c5c3_Var143 = templ.NopComponent
3018+ templ_7745c5c3_Var142 := templ.GetChildren(ctx)
3019+ if templ_7745c5c3_Var142 == nil {
3020+ templ_7745c5c3_Var142 = templ.NopComponent
30343021 }
30353022 ctx = templ.ClearChildren(ctx)
30363023 templ_7745c5c3_Err = mrMergeabilitySlot(v).Render(ctx, templ_7745c5c3_Buffer)
@@ -3059,128 +3046,128 @@ func moreMenu(p MRPage) templ.Component {
30593046 }()
30603047 }
30613048 ctx = templ.InitializeContext(ctx)
3062- templ_7745c5c3_Var144 := templ.GetChildren(ctx)
3063- if templ_7745c5c3_Var144 == nil {
3064- templ_7745c5c3_Var144 = templ.NopComponent
3049+ templ_7745c5c3_Var143 := templ.GetChildren(ctx)
3050+ if templ_7745c5c3_Var143 == nil {
3051+ templ_7745c5c3_Var143 = templ.NopComponent
30653052 }
30663053 ctx = templ.ClearChildren(ctx)
3067- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 282, "<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>")
3054+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 281, "<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>")
30683055 if templ_7745c5c3_Err != nil {
30693056 return templ_7745c5c3_Err
30703057 }
3071- var templ_7745c5c3_Var145 string
3072- templ_7745c5c3_Var145, templ_7745c5c3_Err = templ.JoinStringErrs(strings.Join(p.Modes, ", "))
3058+ var templ_7745c5c3_Var144 string
3059+ templ_7745c5c3_Var144, templ_7745c5c3_Err = templ.JoinStringErrs(strings.Join(p.Modes, ", "))
30733060 if templ_7745c5c3_Err != nil {
3074- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 608, Col: 38}
3061+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 605, Col: 38}
30753062 }
3076- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var145))
3063+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var144))
30773064 if templ_7745c5c3_Err != nil {
30783065 return templ_7745c5c3_Err
30793066 }
3080- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 283, "</dd><dt>checks</dt><dd>")
3067+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 282, "</dd><dt>checks</dt><dd>")
30813068 if templ_7745c5c3_Err != nil {
30823069 return templ_7745c5c3_Err
30833070 }
30843071 if p.ChecksBlock {
3085- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 284, "failing ones block the merge")
3072+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 283, "failing ones block the merge")
30863073 if templ_7745c5c3_Err != nil {
30873074 return templ_7745c5c3_Err
30883075 }
30893076 } else {
3090- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 285, "do not block the merge")
3077+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 284, "do not block the merge")
30913078 if templ_7745c5c3_Err != nil {
30923079 return templ_7745c5c3_Err
30933080 }
30943081 }
3095- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 286, "</dd></dl></section>")
3082+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 285, "</dd></dl></section>")
30963083 if templ_7745c5c3_Err != nil {
30973084 return templ_7745c5c3_Err
30983085 }
30993086 if p.Box != nil {
31003087 if p.Box.Signed {
3101- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 287, "<p class=\"d-note\" id=\"mr-signing\">squash and merge commits are signed with ermite's own key (generated on first start). ")
3088+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 286, "<p class=\"d-note\" id=\"mr-signing\">squash and merge commits are signed with ermite's own key (generated on first start). ")
31023089 if templ_7745c5c3_Err != nil {
31033090 return templ_7745c5c3_Err
31043091 }
31053092 if p.Box.Fingerprint != "" {
3106- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 288, "fingerprint <code>")
3093+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 287, "fingerprint <code>")
31073094 if templ_7745c5c3_Err != nil {
31083095 return templ_7745c5c3_Err
31093096 }
3110- var templ_7745c5c3_Var146 string
3111- templ_7745c5c3_Var146, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.Fingerprint)
3097+ var templ_7745c5c3_Var145 string
3098+ templ_7745c5c3_Var145, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.Fingerprint)
31123099 if templ_7745c5c3_Err != nil {
3113- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 624, Col: 44}
3100+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 621, Col: 44}
31143101 }
3115- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var146))
3102+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var145))
31163103 if templ_7745c5c3_Err != nil {
31173104 return templ_7745c5c3_Err
31183105 }
3119- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 289, "</code> ")
3106+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 288, "</code> ")
31203107 if templ_7745c5c3_Err != nil {
31213108 return templ_7745c5c3_Err
31223109 }
31233110 }
3124- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 290, "<code>ermite signing-key show</code> prints it.</p>")
3111+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 289, "<code>ermite signing-key show</code> prints it.</p>")
31253112 if templ_7745c5c3_Err != nil {
31263113 return templ_7745c5c3_Err
31273114 }
31283115 }
3129- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 291, " ")
3116+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 290, " ")
31303117 if templ_7745c5c3_Err != nil {
31313118 return templ_7745c5c3_Err
31323119 }
31333120 if p.Box.CanMarkRead {
3134- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 292, "<form method=\"post\" action=\"")
3121+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 291, "<form method=\"post\" action=\"")
31353122 if templ_7745c5c3_Err != nil {
31363123 return templ_7745c5c3_Err
31373124 }
3138- var templ_7745c5c3_Var147 templ.SafeURL
3139- templ_7745c5c3_Var147, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.ReadAction))
3125+ var templ_7745c5c3_Var146 templ.SafeURL
3126+ templ_7745c5c3_Var146, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.ReadAction))
31403127 if templ_7745c5c3_Err != nil {
3141- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 630, Col: 65}
3128+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 627, Col: 65}
31423129 }
3143- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var147))
3130+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var146))
31443131 if templ_7745c5c3_Err != nil {
31453132 return templ_7745c5c3_Err
31463133 }
3147- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 293, "\"><input type=\"hidden\" name=\"head_id\" value=\"")
3134+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 292, "\"><input type=\"hidden\" name=\"head_id\" value=\"")
31483135 if templ_7745c5c3_Err != nil {
31493136 return templ_7745c5c3_Err
31503137 }
3151- var templ_7745c5c3_Var148 string
3152- templ_7745c5c3_Var148, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)
3138+ var templ_7745c5c3_Var147 string
3139+ templ_7745c5c3_Var147, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)
31533140 if templ_7745c5c3_Err != nil {
3154- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 631, Col: 60}
3141+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 628, Col: 60}
31553142 }
3156- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var148)
3143+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var147)
31573144 if templ_7745c5c3_Err != nil {
31583145 return templ_7745c5c3_Err
31593146 }
3160- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 294, "\"> <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>")
3147+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 293, "\"> <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>")
31613148 if templ_7745c5c3_Err != nil {
31623149 return templ_7745c5c3_Err
31633150 }
31643151 }
3165- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 295, " <form method=\"post\" action=\"")
3152+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 294, " <form method=\"post\" action=\"")
31663153 if templ_7745c5c3_Err != nil {
31673154 return templ_7745c5c3_Err
31683155 }
3169- var templ_7745c5c3_Var149 templ.SafeURL
3170- templ_7745c5c3_Var149, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.CloseAction))
3156+ var templ_7745c5c3_Var148 templ.SafeURL
3157+ templ_7745c5c3_Var148, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.CloseAction))
31713158 if templ_7745c5c3_Err != nil {
3172- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 635, Col: 65}
3159+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 632, Col: 65}
31733160 }
3174- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var149))
3161+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var148))
31753162 if templ_7745c5c3_Err != nil {
31763163 return templ_7745c5c3_Err
31773164 }
3178- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 296, "\"><button type=\"submit\" title=\"close without merging; the branch is kept\" class=\"btn danger\">Close</button></form>")
3165+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 295, "\"><button type=\"submit\" title=\"close without merging; the branch is kept\" class=\"btn danger\">Close</button></form>")
31793166 if templ_7745c5c3_Err != nil {
31803167 return templ_7745c5c3_Err
31813168 }
31823169 if !p.Box.HeadGone && p.Box.ReadyAction == "" {
3183- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 297, "<details class=\"d-or\"><summary class=\"mute\">or from a terminal</summary>")
3170+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 296, "<details class=\"d-or\"><summary class=\"mute\">or from a terminal</summary>")
31843171 if templ_7745c5c3_Err != nil {
31853172 return templ_7745c5c3_Err
31863173 }
@@ -3188,13 +3175,13 @@ func moreMenu(p MRPage) templ.Component {
31883175 if templ_7745c5c3_Err != nil {
31893176 return templ_7745c5c3_Err
31903177 }
3191- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 298, "</details>")
3178+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 297, "</details>")
31923179 if templ_7745c5c3_Err != nil {
31933180 return templ_7745c5c3_Err
31943181 }
31953182 }
31963183 }
3197- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 299, "</div></details>")
3184+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 298, "</div></details>")
31983185 if templ_7745c5c3_Err != nil {
31993186 return templ_7745c5c3_Err
32003187 }
@@ -3218,12 +3205,12 @@ func Compare(l Layout, p ComparePage) templ.Component {
32183205 }()
32193206 }
32203207 ctx = templ.InitializeContext(ctx)
3221- templ_7745c5c3_Var150 := templ.GetChildren(ctx)
3222- if templ_7745c5c3_Var150 == nil {
3223- templ_7745c5c3_Var150 = templ.NopComponent
3208+ templ_7745c5c3_Var149 := templ.GetChildren(ctx)
3209+ if templ_7745c5c3_Var149 == nil {
3210+ templ_7745c5c3_Var149 = templ.NopComponent
32243211 }
32253212 ctx = templ.ClearChildren(ctx)
3226- templ_7745c5c3_Var151 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
3213+ templ_7745c5c3_Var150 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
32273214 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
32283215 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
32293216 if !templ_7745c5c3_IsBuffer {
@@ -3235,263 +3222,263 @@ func Compare(l Layout, p ComparePage) templ.Component {
32353222 }()
32363223 }
32373224 ctx = templ.InitializeContext(ctx)
3238- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 300, "<header class=\"show mr-h\"><h1>")
3225+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 299, "<header class=\"show mr-h\"><h1>")
32393226 if templ_7745c5c3_Err != nil {
32403227 return templ_7745c5c3_Err
32413228 }
3242- var templ_7745c5c3_Var152 string
3243- templ_7745c5c3_Var152, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
3229+ var templ_7745c5c3_Var151 string
3230+ templ_7745c5c3_Var151, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
32443231 if templ_7745c5c3_Err != nil {
3245- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 652, Col: 17}
3232+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 649, Col: 17}
32463233 }
3247- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var152))
3234+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var151))
32483235 if templ_7745c5c3_Err != nil {
32493236 return templ_7745c5c3_Err
32503237 }
3251- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 301, " → ")
3238+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 300, " → ")
32523239 if templ_7745c5c3_Err != nil {
32533240 return templ_7745c5c3_Err
32543241 }
3255- var templ_7745c5c3_Var153 string
3256- templ_7745c5c3_Var153, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
3242+ var templ_7745c5c3_Var152 string
3243+ templ_7745c5c3_Var152, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
32573244 if templ_7745c5c3_Err != nil {
3258- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 652, Col: 34}
3245+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 649, Col: 34}
32593246 }
3260- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var153))
3247+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var152))
32613248 if templ_7745c5c3_Err != nil {
32623249 return templ_7745c5c3_Err
32633250 }
3264- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 302, "</h1><dl class=\"kv show-kv\"><dt>branch</dt><dd><a href=\"")
3251+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 301, "</h1><dl class=\"kv show-kv\"><dt>branch</dt><dd><a href=\"")
32653252 if templ_7745c5c3_Err != nil {
32663253 return templ_7745c5c3_Err
32673254 }
3268- var templ_7745c5c3_Var154 templ.SafeURL
3269- templ_7745c5c3_Var154, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.SourceHref))
3255+ var templ_7745c5c3_Var153 templ.SafeURL
3256+ templ_7745c5c3_Var153, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.SourceHref))
32703257 if templ_7745c5c3_Err != nil {
3271- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 655, Col: 45}
3258+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 652, Col: 45}
32723259 }
3273- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var154))
3260+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var153))
32743261 if templ_7745c5c3_Err != nil {
32753262 return templ_7745c5c3_Err
32763263 }
3277- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 303, "\">")
3264+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 302, "\">")
32783265 if templ_7745c5c3_Err != nil {
32793266 return templ_7745c5c3_Err
32803267 }
3281- var templ_7745c5c3_Var155 string
3282- templ_7745c5c3_Var155, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
3268+ var templ_7745c5c3_Var154 string
3269+ templ_7745c5c3_Var154, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
32833270 if templ_7745c5c3_Err != nil {
3284- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 655, Col: 58}
3271+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 652, Col: 58}
32853272 }
3286- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var155))
3273+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var154))
32873274 if templ_7745c5c3_Err != nil {
32883275 return templ_7745c5c3_Err
32893276 }
3290- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 304, "</a></dd><dt>target</dt><dd><a href=\"")
3277+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 303, "</a></dd><dt>target</dt><dd><a href=\"")
32913278 if templ_7745c5c3_Err != nil {
32923279 return templ_7745c5c3_Err
32933280 }
3294- var templ_7745c5c3_Var156 templ.SafeURL
3295- templ_7745c5c3_Var156, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.TargetHref))
3281+ var templ_7745c5c3_Var155 templ.SafeURL
3282+ templ_7745c5c3_Var155, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.TargetHref))
32963283 if templ_7745c5c3_Err != nil {
3297- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 657, Col: 45}
3284+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 654, Col: 45}
32983285 }
3299- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var156))
3286+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var155))
33003287 if templ_7745c5c3_Err != nil {
33013288 return templ_7745c5c3_Err
33023289 }
3303- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 305, "\">")
3290+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 304, "\">")
33043291 if templ_7745c5c3_Err != nil {
33053292 return templ_7745c5c3_Err
33063293 }
3307- var templ_7745c5c3_Var157 string
3308- templ_7745c5c3_Var157, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
3294+ var templ_7745c5c3_Var156 string
3295+ templ_7745c5c3_Var156, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
33093296 if templ_7745c5c3_Err != nil {
3310- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 657, Col: 58}
3297+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 654, Col: 58}
33113298 }
3312- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var157))
3299+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var156))
33133300 if templ_7745c5c3_Err != nil {
33143301 return templ_7745c5c3_Err
33153302 }
3316- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 306, "</a></dd><dt>ahead</dt><dd>")
3303+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 305, "</a></dd><dt>ahead</dt><dd>")
33173304 if templ_7745c5c3_Err != nil {
33183305 return templ_7745c5c3_Err
33193306 }
3320- var templ_7745c5c3_Var158 string
3321- templ_7745c5c3_Var158, templ_7745c5c3_Err = templ.JoinStringErrs(p.AheadText)
3307+ var templ_7745c5c3_Var157 string
3308+ templ_7745c5c3_Var157, templ_7745c5c3_Err = templ.JoinStringErrs(p.AheadText)
33223309 if templ_7745c5c3_Err != nil {
3323- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 659, Col: 21}
3310+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 656, Col: 21}
33243311 }
3325- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var158))
3312+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var157))
33263313 if templ_7745c5c3_Err != nil {
33273314 return templ_7745c5c3_Err
33283315 }
3329- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 307, "</dd></dl></header>")
3316+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 306, "</dd></dl></header>")
33303317 if templ_7745c5c3_Err != nil {
33313318 return templ_7745c5c3_Err
33323319 }
33333320 if p.Note != "" {
3334- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 308, "<p class=\"notice\">")
3321+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 307, "<p class=\"notice\">")
33353322 if templ_7745c5c3_Err != nil {
33363323 return templ_7745c5c3_Err
33373324 }
3338- var templ_7745c5c3_Var159 string
3339- templ_7745c5c3_Var159, templ_7745c5c3_Err = templ.JoinStringErrs(p.Note)
3325+ var templ_7745c5c3_Var158 string
3326+ templ_7745c5c3_Var158, templ_7745c5c3_Err = templ.JoinStringErrs(p.Note)
33403327 if templ_7745c5c3_Err != nil {
3341- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 663, Col: 29}
3328+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 660, Col: 29}
33423329 }
3343- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var159))
3330+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var158))
33443331 if templ_7745c5c3_Err != nil {
33453332 return templ_7745c5c3_Err
33463333 }
3347- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 309, "</p>")
3334+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 308, "</p>")
33483335 if templ_7745c5c3_Err != nil {
33493336 return templ_7745c5c3_Err
33503337 }
33513338 }
3352- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 310, " ")
3339+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 309, " ")
33533340 if templ_7745c5c3_Err != nil {
33543341 return templ_7745c5c3_Err
33553342 }
33563343 if p.Existing != nil {
3357- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 311, "<p class=\"notice\">an open merge request already covers these branches: <a href=\"")
3344+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 310, "<p class=\"notice\">an open merge request already covers these branches: <a href=\"")
33583345 if templ_7745c5c3_Err != nil {
33593346 return templ_7745c5c3_Err
33603347 }
3361- var templ_7745c5c3_Var160 templ.SafeURL
3362- templ_7745c5c3_Var160, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Existing.Href))
3348+ var templ_7745c5c3_Var159 templ.SafeURL
3349+ templ_7745c5c3_Var159, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Existing.Href))
33633350 if templ_7745c5c3_Err != nil {
3364- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 666, Col: 114}
3351+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 663, Col: 114}
33653352 }
3366- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var160))
3353+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var159))
33673354 if templ_7745c5c3_Err != nil {
33683355 return templ_7745c5c3_Err
33693356 }
3370- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 312, "\">")
3357+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 311, "\">")
33713358 if templ_7745c5c3_Err != nil {
33723359 return templ_7745c5c3_Err
33733360 }
3374- var templ_7745c5c3_Var161 string
3375- templ_7745c5c3_Var161, templ_7745c5c3_Err = templ.JoinStringErrs(p.Existing.Label)
3361+ var templ_7745c5c3_Var160 string
3362+ templ_7745c5c3_Var160, templ_7745c5c3_Err = templ.JoinStringErrs(p.Existing.Label)
33763363 if templ_7745c5c3_Err != nil {
3377- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 666, Col: 135}
3364+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 663, Col: 135}
33783365 }
3379- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var161))
3366+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var160))
33803367 if templ_7745c5c3_Err != nil {
33813368 return templ_7745c5c3_Err
33823369 }
3383- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 313, "</a></p>")
3370+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 312, "</a></p>")
33843371 if templ_7745c5c3_Err != nil {
33853372 return templ_7745c5c3_Err
33863373 }
33873374 }
3388- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 314, " ")
3375+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 313, " ")
33893376 if templ_7745c5c3_Err != nil {
33903377 return templ_7745c5c3_Err
33913378 }
33923379 if p.Create != nil {
3393- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 315, "<form class=\"cform create\" method=\"post\" action=\"")
3380+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 314, "<form class=\"cform create\" method=\"post\" action=\"")
33943381 if templ_7745c5c3_Err != nil {
33953382 return templ_7745c5c3_Err
33963383 }
3397- var templ_7745c5c3_Var162 templ.SafeURL
3398- templ_7745c5c3_Var162, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Create.Action))
3384+ var templ_7745c5c3_Var161 templ.SafeURL
3385+ templ_7745c5c3_Var161, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Create.Action))
33993386 if templ_7745c5c3_Err != nil {
3400- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 669, Col: 83}
3387+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 666, Col: 83}
34013388 }
3402- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var162))
3389+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var161))
34033390 if templ_7745c5c3_Err != nil {
34043391 return templ_7745c5c3_Err
34053392 }
3406- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 316, "\"><input type=\"hidden\" name=\"source\" value=\"")
3393+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 315, "\"><input type=\"hidden\" name=\"source\" value=\"")
34073394 if templ_7745c5c3_Err != nil {
34083395 return templ_7745c5c3_Err
34093396 }
3410- var templ_7745c5c3_Var163 string
3411- templ_7745c5c3_Var163, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Source)
3397+ var templ_7745c5c3_Var162 string
3398+ templ_7745c5c3_Var162, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Source)
34123399 if templ_7745c5c3_Err != nil {
3413- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 670, Col: 62}
3400+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 667, Col: 62}
34143401 }
3415- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var163)
3402+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var162)
34163403 if templ_7745c5c3_Err != nil {
34173404 return templ_7745c5c3_Err
34183405 }
3419- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 317, "\"> <input type=\"hidden\" name=\"target\" value=\"")
3406+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 316, "\"> <input type=\"hidden\" name=\"target\" value=\"")
34203407 if templ_7745c5c3_Err != nil {
34213408 return templ_7745c5c3_Err
34223409 }
3423- var templ_7745c5c3_Var164 string
3424- templ_7745c5c3_Var164, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Target)
3410+ var templ_7745c5c3_Var163 string
3411+ templ_7745c5c3_Var163, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Target)
34253412 if templ_7745c5c3_Err != nil {
3426- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 671, Col: 62}
3413+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 668, Col: 62}
34273414 }
3428- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var164)
3415+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var163)
34293416 if templ_7745c5c3_Err != nil {
34303417 return templ_7745c5c3_Err
34313418 }
3432- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 318, "\"> <label for=\"mr-title\">title</label> <input id=\"mr-title\" name=\"title\" type=\"text\" maxlength=\"120\" required value=\"")
3419+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 317, "\"> <label for=\"mr-title\">title</label> <input id=\"mr-title\" name=\"title\" type=\"text\" maxlength=\"120\" required value=\"")
34333420 if templ_7745c5c3_Err != nil {
34343421 return templ_7745c5c3_Err
34353422 }
3436- var templ_7745c5c3_Var165 string
3437- templ_7745c5c3_Var165, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Title)
3423+ var templ_7745c5c3_Var164 string
3424+ templ_7745c5c3_Var164, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Title)
34383425 if templ_7745c5c3_Err != nil {
3439- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 673, Col: 97}
3426+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 670, Col: 97}
34403427 }
3441- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var165)
3428+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var164)
34423429 if templ_7745c5c3_Err != nil {
34433430 return templ_7745c5c3_Err
34443431 }
3445- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 319, "\" 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>")
3432+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 318, "\" 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>")
34463433 if templ_7745c5c3_Err != nil {
34473434 return templ_7745c5c3_Err
34483435 }
34493436 }
3450- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 320, " ")
3437+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 319, " ")
34513438 if templ_7745c5c3_Err != nil {
34523439 return templ_7745c5c3_Err
34533440 }
34543441 if p.HasDiff {
3455- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 321, "<div class=\"diff-tools\" role=\"group\" aria-label=\"Diff view\"><span class=\"dim\">")
3442+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 320, "<div class=\"diff-tools\" role=\"group\" aria-label=\"Diff view\"><span class=\"dim\">")
34563443 if templ_7745c5c3_Err != nil {
34573444 return templ_7745c5c3_Err
34583445 }
3459- var templ_7745c5c3_Var166 string
3460- templ_7745c5c3_Var166, templ_7745c5c3_Err = templ.JoinStringErrs(plural(p.NFiles, "file", "files"))
3446+ var templ_7745c5c3_Var165 string
3447+ templ_7745c5c3_Var165, templ_7745c5c3_Err = templ.JoinStringErrs(plural(p.NFiles, "file", "files"))
34613448 if templ_7745c5c3_Err != nil {
3462- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 683, Col: 57}
3449+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 680, Col: 57}
34633450 }
3464- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var166))
3451+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var165))
34653452 if templ_7745c5c3_Err != nil {
34663453 return templ_7745c5c3_Err
34673454 }
3468- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 322, " · <span class=\"plus\">+")
3455+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 321, " · <span class=\"plus\">+")
34693456 if templ_7745c5c3_Err != nil {
34703457 return templ_7745c5c3_Err
34713458 }
3472- var templ_7745c5c3_Var167 string
3473- templ_7745c5c3_Var167, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Adds))
3459+ var templ_7745c5c3_Var166 string
3460+ templ_7745c5c3_Var166, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Adds))
34743461 if templ_7745c5c3_Err != nil {
3475- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 683, Col: 97}
3462+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 680, Col: 97}
34763463 }
3477- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var167))
3464+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var166))
34783465 if templ_7745c5c3_Err != nil {
34793466 return templ_7745c5c3_Err
34803467 }
3481- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 323, "</span> <span class=\"minus\">-")
3468+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 322, "</span> <span class=\"minus\">-")
34823469 if templ_7745c5c3_Err != nil {
34833470 return templ_7745c5c3_Err
34843471 }
3485- var templ_7745c5c3_Var168 string
3486- templ_7745c5c3_Var168, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Dels))
3472+ var templ_7745c5c3_Var167 string
3473+ templ_7745c5c3_Var167, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Dels))
34873474 if templ_7745c5c3_Err != nil {
3488- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 683, Col: 142}
3475+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 680, Col: 142}
34893476 }
3490- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var168))
3477+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var167))
34913478 if templ_7745c5c3_Err != nil {
34923479 return templ_7745c5c3_Err
34933480 }
3494- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 324, "</span></span> <span class=\"grow\"></span>")
3481+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 323, "</span></span> <span class=\"grow\"></span>")
34953482 if templ_7745c5c3_Err != nil {
34963483 return templ_7745c5c3_Err
34973484 }
@@ -3499,64 +3486,64 @@ func Compare(l Layout, p ComparePage) templ.Component {
34993486 if templ_7745c5c3_Err != nil {
35003487 return templ_7745c5c3_Err
35013488 }
3502- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 325, "</div>")
3489+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 324, "</div>")
35033490 if templ_7745c5c3_Err != nil {
35043491 return templ_7745c5c3_Err
35053492 }
35063493 if p.Invisible {
3507- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 326, "<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>")
3494+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 325, "<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>")
35083495 if templ_7745c5c3_Err != nil {
35093496 return templ_7745c5c3_Err
35103497 }
35113498 }
3512- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 327, " <div id=\"diffs\"")
3499+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 326, " <div id=\"diffs\"")
35133500 if templ_7745c5c3_Err != nil {
35143501 return templ_7745c5c3_Err
35153502 }
35163503 if p.Both {
3517- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 328, " data-diff=\"")
3504+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 327, " data-diff=\"")
35183505 if templ_7745c5c3_Err != nil {
35193506 return templ_7745c5c3_Err
35203507 }
3521- var templ_7745c5c3_Var169 string
3522- templ_7745c5c3_Var169, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
3508+ var templ_7745c5c3_Var168 string
3509+ templ_7745c5c3_Var168, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
35233510 if templ_7745c5c3_Err != nil {
3524- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 696, Col: 23}
3511+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 693, Col: 23}
35253512 }
3526- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var169)
3513+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var168)
35273514 if templ_7745c5c3_Err != nil {
35283515 return templ_7745c5c3_Err
35293516 }
3530- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 329, "\"")
3517+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 328, "\"")
35313518 if templ_7745c5c3_Err != nil {
35323519 return templ_7745c5c3_Err
35333520 }
35343521 } else {
3535- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 330, " data-view=\"")
3522+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 329, " data-view=\"")
35363523 if templ_7745c5c3_Err != nil {
35373524 return templ_7745c5c3_Err
35383525 }
3539- var templ_7745c5c3_Var170 string
3540- templ_7745c5c3_Var170, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
3526+ var templ_7745c5c3_Var169 string
3527+ templ_7745c5c3_Var169, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
35413528 if templ_7745c5c3_Err != nil {
3542- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 698, Col: 23}
3529+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 695, Col: 23}
35433530 }
3544- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var170)
3531+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var169)
35453532 if templ_7745c5c3_Err != nil {
35463533 return templ_7745c5c3_Err
35473534 }
3548- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 331, "\"")
3535+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 330, "\"")
35493536 if templ_7745c5c3_Err != nil {
35503537 return templ_7745c5c3_Err
35513538 }
35523539 }
35533540 if p.Both && !p.Pinned {
3554- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 332, " hx-live=\"this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff\"")
3541+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 331, " hx-live=\"this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff\"")
35553542 if templ_7745c5c3_Err != nil {
35563543 return templ_7745c5c3_Err
35573544 }
35583545 }
3559- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 333, ">")
3546+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 332, ">")
35603547 if templ_7745c5c3_Err != nil {
35613548 return templ_7745c5c3_Err
35623549 }
@@ -3566,14 +3553,14 @@ func Compare(l Layout, p ComparePage) templ.Component {
35663553 return templ_7745c5c3_Err
35673554 }
35683555 }
3569- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 334, "</div>")
3556+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 333, "</div>")
35703557 if templ_7745c5c3_Err != nil {
35713558 return templ_7745c5c3_Err
35723559 }
35733560 }
35743561 return nil
35753562 })
3576- templ_7745c5c3_Err = Shell(l, compareRail(p)).Render(templ.WithChildren(ctx, templ_7745c5c3_Var151), templ_7745c5c3_Buffer)
3563+ templ_7745c5c3_Err = Shell(l, compareRail(p)).Render(templ.WithChildren(ctx, templ_7745c5c3_Var150), templ_7745c5c3_Buffer)
35773564 if templ_7745c5c3_Err != nil {
35783565 return templ_7745c5c3_Err
35793566 }
@@ -3597,173 +3584,173 @@ func compareRail(p ComparePage) templ.Component {
35973584 }()
35983585 }
35993586 ctx = templ.InitializeContext(ctx)
3600- templ_7745c5c3_Var171 := templ.GetChildren(ctx)
3601- if templ_7745c5c3_Var171 == nil {
3602- templ_7745c5c3_Var171 = templ.NopComponent
3587+ templ_7745c5c3_Var170 := templ.GetChildren(ctx)
3588+ if templ_7745c5c3_Var170 == nil {
3589+ templ_7745c5c3_Var170 = templ.NopComponent
36033590 }
36043591 ctx = templ.ClearChildren(ctx)
3605- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 335, "<section aria-labelledby=\"r-ahead\"><h2 id=\"r-ahead\">Commits <span class=\"count\">")
3592+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 334, "<section aria-labelledby=\"r-ahead\"><h2 id=\"r-ahead\">Commits <span class=\"count\">")
36063593 if templ_7745c5c3_Err != nil {
36073594 return templ_7745c5c3_Err
36083595 }
3609- var templ_7745c5c3_Var172 string
3610- templ_7745c5c3_Var172, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Ahead)))
3596+ var templ_7745c5c3_Var171 string
3597+ templ_7745c5c3_Var171, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Ahead)))
36113598 if templ_7745c5c3_Err != nil {
3612- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 714, Col: 67}
3599+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 711, Col: 67}
36133600 }
3614- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var172))
3601+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var171))
36153602 if templ_7745c5c3_Err != nil {
36163603 return templ_7745c5c3_Err
36173604 }
3618- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 336, "</span></h2><ul class=\"pcommits\">")
3605+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 335, "</span></h2><ul class=\"pcommits\">")
36193606 if templ_7745c5c3_Err != nil {
36203607 return templ_7745c5c3_Err
36213608 }
36223609 for _, c := range p.Ahead {
3623- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 337, "<li><a href=\"")
3610+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 336, "<li><a href=\"")
36243611 if templ_7745c5c3_Err != nil {
36253612 return templ_7745c5c3_Err
36263613 }
3627- var templ_7745c5c3_Var173 templ.SafeURL
3628- templ_7745c5c3_Var173, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.CHref))
3614+ var templ_7745c5c3_Var172 templ.SafeURL
3615+ templ_7745c5c3_Var172, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.CHref))
36293616 if templ_7745c5c3_Err != nil {
3630- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 718, Col: 37}
3617+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 715, Col: 37}
36313618 }
3632- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var173))
3619+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var172))
36333620 if templ_7745c5c3_Err != nil {
36343621 return templ_7745c5c3_Err
36353622 }
3636- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 338, "\">")
3623+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 337, "\">")
36373624 if templ_7745c5c3_Err != nil {
36383625 return templ_7745c5c3_Err
36393626 }
3640- var templ_7745c5c3_Var174 string
3641- templ_7745c5c3_Var174, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)
3627+ var templ_7745c5c3_Var173 string
3628+ templ_7745c5c3_Var173, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)
36423629 if templ_7745c5c3_Err != nil {
3643- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 718, Col: 49}
3630+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 715, Col: 49}
36443631 }
3645- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var174))
3632+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var173))
36463633 if templ_7745c5c3_Err != nil {
36473634 return templ_7745c5c3_Err
36483635 }
3649- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 339, "</a> <span class=\"s\">")
3636+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 338, "</a> <span class=\"s\">")
36503637 if templ_7745c5c3_Err != nil {
36513638 return templ_7745c5c3_Err
36523639 }
3653- var templ_7745c5c3_Var175 string
3654- templ_7745c5c3_Var175, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)
3640+ var templ_7745c5c3_Var174 string
3641+ templ_7745c5c3_Var174, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)
36553642 if templ_7745c5c3_Err != nil {
3656- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 719, Col: 32}
3643+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 716, Col: 32}
36573644 }
3658- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var175))
3645+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var174))
36593646 if templ_7745c5c3_Err != nil {
36603647 return templ_7745c5c3_Err
36613648 }
3662- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 340, "</span> <span class=\"mute\">")
3649+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 339, "</span> <span class=\"mute\">")
36633650 if templ_7745c5c3_Err != nil {
36643651 return templ_7745c5c3_Err
36653652 }
3666- var templ_7745c5c3_Var176 string
3667- templ_7745c5c3_Var176, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)
3653+ var templ_7745c5c3_Var175 string
3654+ templ_7745c5c3_Var175, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)
36683655 if templ_7745c5c3_Err != nil {
3669- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 721, Col: 16}
3656+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 718, Col: 16}
36703657 }
3671- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var176))
3658+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var175))
36723659 if templ_7745c5c3_Err != nil {
36733660 return templ_7745c5c3_Err
36743661 }
3675- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 341, " ")
3662+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 340, " ")
36763663 if templ_7745c5c3_Err != nil {
36773664 return templ_7745c5c3_Err
36783665 }
36793666 if c.WhenAt != "" {
3680- var templ_7745c5c3_Var177 string
3681- templ_7745c5c3_Var177, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")
3667+ var templ_7745c5c3_Var176 string
3668+ templ_7745c5c3_Var176, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")
36823669 if templ_7745c5c3_Err != nil {
3683- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 723, Col: 15}
3670+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 720, Col: 15}
36843671 }
3685- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var177))
3672+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var176))
36863673 if templ_7745c5c3_Err != nil {
36873674 return templ_7745c5c3_Err
36883675 }
3689- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 342, "<time datetime=\"")
3676+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 341, "<time datetime=\"")
36903677 if templ_7745c5c3_Err != nil {
36913678 return templ_7745c5c3_Err
36923679 }
3693- var templ_7745c5c3_Var178 string
3694- templ_7745c5c3_Var178, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
3680+ var templ_7745c5c3_Var177 string
3681+ templ_7745c5c3_Var177, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
36953682 if templ_7745c5c3_Err != nil {
3696- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 723, Col: 42}
3683+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 720, Col: 42}
36973684 }
3698- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var178)
3685+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var177)
36993686 if templ_7745c5c3_Err != nil {
37003687 return templ_7745c5c3_Err
37013688 }
3702- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 343, "\">")
3689+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 342, "\">")
37033690 if templ_7745c5c3_Err != nil {
37043691 return templ_7745c5c3_Err
37053692 }
3706- var templ_7745c5c3_Var179 string
3707- templ_7745c5c3_Var179, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)
3693+ var templ_7745c5c3_Var178 string
3694+ templ_7745c5c3_Var178, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)
37083695 if templ_7745c5c3_Err != nil {
3709- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 723, Col: 53}
3696+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 720, Col: 53}
37103697 }
3711- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var179))
3698+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var178))
37123699 if templ_7745c5c3_Err != nil {
37133700 return templ_7745c5c3_Err
37143701 }
3715- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 344, "</time>")
3702+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 343, "</time>")
37163703 if templ_7745c5c3_Err != nil {
37173704 return templ_7745c5c3_Err
37183705 }
37193706 }
3720- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 345, "</span></li>")
3707+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 344, "</span></li>")
37213708 if templ_7745c5c3_Err != nil {
37223709 return templ_7745c5c3_Err
37233710 }
37243711 }
3725- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 346, "</ul>")
3712+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 345, "</ul>")
37263713 if templ_7745c5c3_Err != nil {
37273714 return templ_7745c5c3_Err
37283715 }
37293716 if len(p.Ahead) == 0 {
3730- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 347, "<p class=\"dim\">no commit ahead of ")
3717+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 346, "<p class=\"dim\">no commit ahead of ")
37313718 if templ_7745c5c3_Err != nil {
37323719 return templ_7745c5c3_Err
37333720 }
3734- var templ_7745c5c3_Var180 string
3735- templ_7745c5c3_Var180, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
3721+ var templ_7745c5c3_Var179 string
3722+ templ_7745c5c3_Var179, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
37363723 if templ_7745c5c3_Err != nil {
3737- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 730, Col: 47}
3724+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 727, Col: 47}
37383725 }
3739- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var180))
3726+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var179))
37403727 if templ_7745c5c3_Err != nil {
37413728 return templ_7745c5c3_Err
37423729 }
3743- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 348, ".</p>")
3730+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 347, ".</p>")
37443731 if templ_7745c5c3_Err != nil {
37453732 return templ_7745c5c3_Err
37463733 }
37473734 }
3748- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 349, "</section>")
3735+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 348, "</section>")
37493736 if templ_7745c5c3_Err != nil {
37503737 return templ_7745c5c3_Err
37513738 }
37523739 if p.HasDiff {
3753- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 350, "<section aria-labelledby=\"r-files\"><h2 id=\"r-files\">Files <span class=\"count\">")
3740+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 349, "<section aria-labelledby=\"r-files\"><h2 id=\"r-files\">Files <span class=\"count\">")
37543741 if templ_7745c5c3_Err != nil {
37553742 return templ_7745c5c3_Err
37563743 }
3757- var templ_7745c5c3_Var181 string
3758- templ_7745c5c3_Var181, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))
3744+ var templ_7745c5c3_Var180 string
3745+ templ_7745c5c3_Var180, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))
37593746 if templ_7745c5c3_Err != nil {
3760- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 735, Col: 66}
3747+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 732, Col: 66}
37613748 }
3762- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var181))
3749+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var180))
37633750 if templ_7745c5c3_Err != nil {
37643751 return templ_7745c5c3_Err
37653752 }
3766- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 351, "</span></h2>")
3753+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 350, "</span></h2>")
37673754 if templ_7745c5c3_Err != nil {
37683755 return templ_7745c5c3_Err
37693756 }
@@ -3771,12 +3758,12 @@ func compareRail(p ComparePage) templ.Component {
37713758 if templ_7745c5c3_Err != nil {
37723759 return templ_7745c5c3_Err
37733760 }
3774- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 352, "</section>")
3761+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 351, "</section>")
37753762 if templ_7745c5c3_Err != nil {
37763763 return templ_7745c5c3_Err
37773764 }
37783765 }
3779- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 353, "<section aria-labelledby=\"r-cli\"><h2 id=\"r-cli\">From a terminal</h2>")
3766+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 352, "<section aria-labelledby=\"r-cli\"><h2 id=\"r-cli\">From a terminal</h2>")
37803767 if templ_7745c5c3_Err != nil {
37813768 return templ_7745c5c3_Err
37823769 }
@@ -3784,7 +3771,7 @@ func compareRail(p ComparePage) templ.Component {
37843771 if templ_7745c5c3_Err != nil {
37853772 return templ_7745c5c3_Err
37863773 }
3787- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 354, "</section>")
3774+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 353, "</section>")
37883775 if templ_7745c5c3_Err != nil {
37893776 return templ_7745c5c3_Err
37903777 }
@@ -2033,169 +2033,156 @@ func mrFooter(p MRPage) templ.Component {
2033 templ_7745c5c3_Var97 = templ.NopComponent2033 templ_7745c5c3_Var97 = templ.NopComponent
2034 }2034 }
2035 ctx = templ.ClearChildren(ctx)2035 ctx = templ.ClearChildren(ctx)
2036- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 187, "<footer class=\"mr-footer\"><details id=\"mr-panels\"><summary>Commits <span class=\"count\">")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\">")
2037 if templ_7745c5c3_Err != nil {2037 if templ_7745c5c3_Err != nil {
2038 return templ_7745c5c3_Err2038 return templ_7745c5c3_Err
2039 }2039 }
2040 var templ_7745c5c3_Var98 string2040 var templ_7745c5c3_Var98 string
2041 templ_7745c5c3_Var98, templ_7745c5c3_Err = templ.JoinStringErrs(p.CommitCount)2041 templ_7745c5c3_Var98, templ_7745c5c3_Err = templ.JoinStringErrs(p.CommitCount)
2042 if templ_7745c5c3_Err != nil {2042 if templ_7745c5c3_Err != nil {
2043- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 382, Col: 55}2043+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 382, Col: 88}
2044 }2044 }
2045 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var98))2045 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var98))
2046 if templ_7745c5c3_Err != nil {2046 if templ_7745c5c3_Err != nil {
2047 return templ_7745c5c3_Err2047 return templ_7745c5c3_Err
2048 }2048 }
2049- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 188, "</span> · Checks</summary><nav data-mr-tabs aria-label=\"Branch details\"><a id=\"mr-tab-commits\" href=\"#mr-commits\">Commits <span class=\"count\">")2049+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 188, "</span></a> <a id=\"mr-tab-checks\" href=\"#mr-checks\">")
2050 if templ_7745c5c3_Err != nil {2050 if templ_7745c5c3_Err != nil {
2051 return templ_7745c5c3_Err2051 return templ_7745c5c3_Err
2052 }2052 }
2053 var templ_7745c5c3_Var99 string2053 var templ_7745c5c3_Var99 string
2054- templ_7745c5c3_Var99, templ_7745c5c3_Err = templ.JoinStringErrs(p.CommitCount)2054+ templ_7745c5c3_Var99, templ_7745c5c3_Err = templ.JoinStringErrs("Checks ")
2055 if templ_7745c5c3_Err != nil {2055 if templ_7745c5c3_Err != nil {
2056- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 384, Col: 89}2056+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 384, Col: 15}
2057 }2057 }
2058 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var99))2058 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var99))
2059 if templ_7745c5c3_Err != nil {2059 if templ_7745c5c3_Err != nil {
2060 return templ_7745c5c3_Err2060 return templ_7745c5c3_Err
2061 }2061 }
2062- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 189, "</span></a> <a id=\"mr-tab-checks\" href=\"#mr-checks\">")2062+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 189, " <span data-checks-label>")
2063- if templ_7745c5c3_Err != nil {
2064- return templ_7745c5c3_Err
2065- }
2066- var templ_7745c5c3_Var100 string
2067- templ_7745c5c3_Var100, templ_7745c5c3_Err = templ.JoinStringErrs("Checks ")
2068- if templ_7745c5c3_Err != nil {
2069- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 386, Col: 16}
2070- }
2071- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var100))
2072- if templ_7745c5c3_Err != nil {
2073- return templ_7745c5c3_Err
2074- }
2075- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 190, " <span data-checks-label>")
2076 if templ_7745c5c3_Err != nil {2063 if templ_7745c5c3_Err != nil {
2077 return templ_7745c5c3_Err2064 return templ_7745c5c3_Err
2078 }2065 }
2079 if p.ChecksSum.Total > 0 {2066 if p.ChecksSum.Total > 0 {
2080- var templ_7745c5c3_Var101 string2067+ var templ_7745c5c3_Var100 string
2081- templ_7745c5c3_Var101, templ_7745c5c3_Err = templ.JoinStringErrs(p.ChecksSum.Title)2068+ templ_7745c5c3_Var100, templ_7745c5c3_Err = templ.JoinStringErrs(p.ChecksSum.Title)
2082 if templ_7745c5c3_Err != nil {2069 if templ_7745c5c3_Err != nil {
2083- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 389, Col: 26}2070+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 387, Col: 25}
2084 }2071 }
2085- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var101))2072+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var100))
2086 if templ_7745c5c3_Err != nil {2073 if templ_7745c5c3_Err != nil {
2087 return templ_7745c5c3_Err2074 return templ_7745c5c3_Err
2088 }2075 }
2089 } else {2076 } else {
2090- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 191, "no checks")2077+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 190, "no checks")
2091 if templ_7745c5c3_Err != nil {2078 if templ_7745c5c3_Err != nil {
2092 return templ_7745c5c3_Err2079 return templ_7745c5c3_Err
2093 }2080 }
2094 }2081 }
2095- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 192, "</span></a></nav><div id=\"mr-commits\" data-mr-panel 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>")2082+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 191, "</span></a></nav><div id=\"mr-commits\" data-mr-panel hidden 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>")
2096 if templ_7745c5c3_Err != nil {2083 if templ_7745c5c3_Err != nil {
2097 return templ_7745c5c3_Err2084 return templ_7745c5c3_Err
2098 }2085 }
2099 for _, c := range p.Commits {2086 for _, c := range p.Commits {
2100- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 193, "<tr")2087+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 192, "<tr")
2101 if templ_7745c5c3_Err != nil {2088 if templ_7745c5c3_Err != nil {
2102 return templ_7745c5c3_Err2089 return templ_7745c5c3_Err
2103 }2090 }
2104 if c.New {2091 if c.New {
2105- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 194, " data-new")2092+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 193, " data-new")
2106 if templ_7745c5c3_Err != nil {2093 if templ_7745c5c3_Err != nil {
2107 return templ_7745c5c3_Err2094 return templ_7745c5c3_Err
2108 }2095 }
2109 }2096 }
2110- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 195, "><td><a href=\"")2097+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 194, "><td><a href=\"")
2111 if templ_7745c5c3_Err != nil {2098 if templ_7745c5c3_Err != nil {
2112 return templ_7745c5c3_Err2099 return templ_7745c5c3_Err
2113 }2100 }
2114- var templ_7745c5c3_Var102 templ.SafeURL2101+ var templ_7745c5c3_Var101 templ.SafeURL
2115- templ_7745c5c3_Var102, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Href))2102+ templ_7745c5c3_Var101, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Href))
2116 if templ_7745c5c3_Err != nil {2103 if templ_7745c5c3_Err != nil {
2117- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 402, Col: 43}2104+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 400, Col: 42}
2118 }2105 }
2119- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var102))2106+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var101))
2120 if templ_7745c5c3_Err != nil {2107 if templ_7745c5c3_Err != nil {
2121 return templ_7745c5c3_Err2108 return templ_7745c5c3_Err
2122 }2109 }
2123- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 196, "\">")2110+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 195, "\">")
2124 if templ_7745c5c3_Err != nil {2111 if templ_7745c5c3_Err != nil {
2125 return templ_7745c5c3_Err2112 return templ_7745c5c3_Err
2126 }2113 }
2127- var templ_7745c5c3_Var103 string2114+ var templ_7745c5c3_Var102 string
2128- templ_7745c5c3_Var103, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)2115+ templ_7745c5c3_Var102, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)
2129 if templ_7745c5c3_Err != nil {2116 if templ_7745c5c3_Err != nil {
2130- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 402, Col: 55}2117+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 400, Col: 54}
2131 }2118 }
2132- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var103))2119+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var102))
2133 if templ_7745c5c3_Err != nil {2120 if templ_7745c5c3_Err != nil {
2134 return templ_7745c5c3_Err2121 return templ_7745c5c3_Err
2135 }2122 }
2136- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 197, "</a></td><td>")2123+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 196, "</a></td><td>")
2137 if templ_7745c5c3_Err != nil {2124 if templ_7745c5c3_Err != nil {
2138 return templ_7745c5c3_Err2125 return templ_7745c5c3_Err
2139 }2126 }
2140- var templ_7745c5c3_Var104 string2127+ var templ_7745c5c3_Var103 string
2141- templ_7745c5c3_Var104, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)2128+ templ_7745c5c3_Var103, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)
2142 if templ_7745c5c3_Err != nil {2129 if templ_7745c5c3_Err != nil {
2143- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 403, Col: 23}2130+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 401, Col: 22}
2144 }2131 }
2145- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var104))2132+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var103))
2146 if templ_7745c5c3_Err != nil {2133 if templ_7745c5c3_Err != nil {
2147 return templ_7745c5c3_Err2134 return templ_7745c5c3_Err
2148 }2135 }
2149- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 198, "</td><td>")2136+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 197, "</td><td>")
2150 if templ_7745c5c3_Err != nil {2137 if templ_7745c5c3_Err != nil {
2151 return templ_7745c5c3_Err2138 return templ_7745c5c3_Err
2152 }2139 }
2153- var templ_7745c5c3_Var105 string2140+ var templ_7745c5c3_Var104 string
2154- templ_7745c5c3_Var105, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)2141+ templ_7745c5c3_Var104, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)
2155 if templ_7745c5c3_Err != nil {2142 if templ_7745c5c3_Err != nil {
2156- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 404, Col: 22}2143+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 402, Col: 21}
2157 }2144 }
2158- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var105))2145+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var104))
2159 if templ_7745c5c3_Err != nil {2146 if templ_7745c5c3_Err != nil {
2160 return templ_7745c5c3_Err2147 return templ_7745c5c3_Err
2161 }2148 }
2162- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 199, "</td><td>")2149+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 198, "</td><td>")
2163 if templ_7745c5c3_Err != nil {2150 if templ_7745c5c3_Err != nil {
2164 return templ_7745c5c3_Err2151 return templ_7745c5c3_Err
2165 }2152 }
2166 if c.WhenAt != "" {2153 if c.WhenAt != "" {
2167- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 200, "<time datetime=\"")2154+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 199, "<time datetime=\"")
2168 if templ_7745c5c3_Err != nil {2155 if templ_7745c5c3_Err != nil {
2169 return templ_7745c5c3_Err2156 return templ_7745c5c3_Err
2170 }2157 }
2171- var templ_7745c5c3_Var106 string2158+ var templ_7745c5c3_Var105 string
2172- templ_7745c5c3_Var106, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)2159+ templ_7745c5c3_Var105, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
2173 if templ_7745c5c3_Err != nil {2160 if templ_7745c5c3_Err != nil {
2174- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 407, Col: 35}2161+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 405, Col: 34}
2175 }2162 }
2176- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var106)2163+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var105)
2177 if templ_7745c5c3_Err != nil {2164 if templ_7745c5c3_Err != nil {
2178 return templ_7745c5c3_Err2165 return templ_7745c5c3_Err
2179 }2166 }
2180- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 201, "\">")2167+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 200, "\">")
2181 if templ_7745c5c3_Err != nil {2168 if templ_7745c5c3_Err != nil {
2182 return templ_7745c5c3_Err2169 return templ_7745c5c3_Err
2183 }2170 }
2184- var templ_7745c5c3_Var107 string2171+ var templ_7745c5c3_Var106 string
2185- templ_7745c5c3_Var107, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)2172+ templ_7745c5c3_Var106, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)
2186 if templ_7745c5c3_Err != nil {2173 if templ_7745c5c3_Err != nil {
2187- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 407, Col: 46}2174+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 405, Col: 45}
2188 }2175 }
2189- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var107))2176+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var106))
2190 if templ_7745c5c3_Err != nil {2177 if templ_7745c5c3_Err != nil {
2191 return templ_7745c5c3_Err2178 return templ_7745c5c3_Err
2192 }2179 }
2193- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 202, "</time>")2180+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 201, "</time>")
2194 if templ_7745c5c3_Err != nil {2181 if templ_7745c5c3_Err != nil {
2195 return templ_7745c5c3_Err2182 return templ_7745c5c3_Err
2196 }2183 }
2197 }2184 }
2198- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 203, "</td><td>")2185+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 202, "</td><td>")
2199 if templ_7745c5c3_Err != nil {2186 if templ_7745c5c3_Err != nil {
2200 return templ_7745c5c3_Err2187 return templ_7745c5c3_Err
2201 }2188 }
@@ -2205,51 +2192,51 @@ func mrFooter(p MRPage) templ.Component {
2205 return templ_7745c5c3_Err2192 return templ_7745c5c3_Err
2206 }2193 }
2207 }2194 }
2208- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 204, "</td><td>")2195+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 203, "</td><td>")
2209 if templ_7745c5c3_Err != nil {2196 if templ_7745c5c3_Err != nil {
2210 return templ_7745c5c3_Err2197 return templ_7745c5c3_Err
2211 }2198 }
2212 if c.New {2199 if c.New {
2213- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 205, "<span>new</span>")2200+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 204, "<span>new</span>")
2214 if templ_7745c5c3_Err != nil {2201 if templ_7745c5c3_Err != nil {
2215 return templ_7745c5c3_Err2202 return templ_7745c5c3_Err
2216 }2203 }
2217 }2204 }
2218- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 206, "</td></tr>")2205+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 205, "</td></tr>")
2219 if templ_7745c5c3_Err != nil {2206 if templ_7745c5c3_Err != nil {
2220 return templ_7745c5c3_Err2207 return templ_7745c5c3_Err
2221 }2208 }
2222 }2209 }
2223- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 207, "</tbody></table>")2210+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 206, "</tbody></table>")
2224 if templ_7745c5c3_Err != nil {2211 if templ_7745c5c3_Err != nil {
2225 return templ_7745c5c3_Err2212 return templ_7745c5c3_Err
2226 }2213 }
2227 if len(p.Commits) == 0 {2214 if len(p.Commits) == 0 {
2228- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 208, "<p class=\"dim\">no commit to merge.</p>")2215+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 207, "<p class=\"dim\">no commit to merge.</p>")
2229 if templ_7745c5c3_Err != nil {2216 if templ_7745c5c3_Err != nil {
2230 return templ_7745c5c3_Err2217 return templ_7745c5c3_Err
2231 }2218 }
2232 }2219 }
2233 if p.CommitsNote != "" {2220 if p.CommitsNote != "" {
2234- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 209, "<p class=\"note\">")2221+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 208, "<p class=\"note\">")
2235 if templ_7745c5c3_Err != nil {2222 if templ_7745c5c3_Err != nil {
2236 return templ_7745c5c3_Err2223 return templ_7745c5c3_Err
2237 }2224 }
2238- var templ_7745c5c3_Var108 string2225+ var templ_7745c5c3_Var107 string
2239- templ_7745c5c3_Var108, templ_7745c5c3_Err = templ.JoinStringErrs(p.CommitsNote)2226+ templ_7745c5c3_Var107, templ_7745c5c3_Err = templ.JoinStringErrs(p.CommitsNote)
2240 if templ_7745c5c3_Err != nil {2227 if templ_7745c5c3_Err != nil {
2241- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 428, Col: 36}2228+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 426, Col: 35}
2242 }2229 }
2243- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var108))2230+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var107))
2244 if templ_7745c5c3_Err != nil {2231 if templ_7745c5c3_Err != nil {
2245 return templ_7745c5c3_Err2232 return templ_7745c5c3_Err
2246 }2233 }
2247- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 210, "</p>")2234+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 209, "</p>")
2248 if templ_7745c5c3_Err != nil {2235 if templ_7745c5c3_Err != nil {
2249 return templ_7745c5c3_Err2236 return templ_7745c5c3_Err
2250 }2237 }
2251 }2238 }
2252- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 211, "</div><div id=\"mr-checks-panel\" data-mr-panel aria-labelledby=\"mr-tab-checks\">")2239+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 210, "</div><div id=\"mr-checks-panel\" data-mr-panel hidden aria-labelledby=\"mr-tab-checks\">")
2253 if templ_7745c5c3_Err != nil {2240 if templ_7745c5c3_Err != nil {
2254 return templ_7745c5c3_Err2241 return templ_7745c5c3_Err
2255 }2242 }
@@ -2257,7 +2244,7 @@ func mrFooter(p MRPage) templ.Component {
2257 if templ_7745c5c3_Err != nil {2244 if templ_7745c5c3_Err != nil {
2258 return templ_7745c5c3_Err2245 return templ_7745c5c3_Err
2259 }2246 }
2260- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 212, "</div></details></footer>")2247+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 211, "</div></footer>")
2261 if templ_7745c5c3_Err != nil {2248 if templ_7745c5c3_Err != nil {
2262 return templ_7745c5c3_Err2249 return templ_7745c5c3_Err
2263 }2250 }
@@ -2281,25 +2268,25 @@ func mrRail(p MRPage) templ.Component {
2281 }()2268 }()
2282 }2269 }
2283 ctx = templ.InitializeContext(ctx)2270 ctx = templ.InitializeContext(ctx)
2284- templ_7745c5c3_Var109 := templ.GetChildren(ctx)2271+ templ_7745c5c3_Var108 := templ.GetChildren(ctx)
2285- if templ_7745c5c3_Var109 == nil {2272+ if templ_7745c5c3_Var108 == nil {
2286- templ_7745c5c3_Var109 = templ.NopComponent2273+ templ_7745c5c3_Var108 = templ.NopComponent
2287 }2274 }
2288 ctx = templ.ClearChildren(ctx)2275 ctx = templ.ClearChildren(ctx)
2289- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 213, "<section aria-labelledby=\"r-files\" class=\"r-files\"><h2 id=\"r-files\">Files <span class=\"count\">")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\">")
2290 if templ_7745c5c3_Err != nil {2277 if templ_7745c5c3_Err != nil {
2291 return templ_7745c5c3_Err2278 return templ_7745c5c3_Err
2292 }2279 }
2293- var templ_7745c5c3_Var110 string2280+ var templ_7745c5c3_Var109 string
2294- templ_7745c5c3_Var110, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))2281+ templ_7745c5c3_Var109, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))
2295 if templ_7745c5c3_Err != nil {2282 if templ_7745c5c3_Err != nil {
2296- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 441, Col: 49}2283+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 438, Col: 49}
2297 }2284 }
2298- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var110))2285+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var109))
2299 if templ_7745c5c3_Err != nil {2286 if templ_7745c5c3_Err != nil {
2300 return templ_7745c5c3_Err2287 return templ_7745c5c3_Err
2301 }2288 }
2302- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 214, "</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>")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>")
2303 if templ_7745c5c3_Err != nil {2290 if templ_7745c5c3_Err != nil {
2304 return templ_7745c5c3_Err2291 return templ_7745c5c3_Err
2305 }2292 }
@@ -2307,71 +2294,71 @@ func mrRail(p MRPage) templ.Component {
2307 if templ_7745c5c3_Err != nil {2294 if templ_7745c5c3_Err != nil {
2308 return templ_7745c5c3_Err2295 return templ_7745c5c3_Err
2309 }2296 }
2310- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 215, "</section>")2297+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 214, "</section>")
2311 if templ_7745c5c3_Err != nil {2298 if templ_7745c5c3_Err != nil {
2312 return templ_7745c5c3_Err2299 return templ_7745c5c3_Err
2313 }2300 }
2314 if len(p.Verdicts) > 0 {2301 if len(p.Verdicts) > 0 {
2315- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 216, "<section><h2>Verdicts</h2><ul>")2302+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 215, "<section><h2>Verdicts</h2><ul>")
2316 if templ_7745c5c3_Err != nil {2303 if templ_7745c5c3_Err != nil {
2317 return templ_7745c5c3_Err2304 return templ_7745c5c3_Err
2318 }2305 }
2319 for _, v := range p.Verdicts {2306 for _, v := range p.Verdicts {
2320- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 217, "<li><a href=\"")2307+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 216, "<li><a href=\"")
2321 if templ_7745c5c3_Err != nil {2308 if templ_7745c5c3_Err != nil {
2322 return templ_7745c5c3_Err2309 return templ_7745c5c3_Err
2323 }2310 }
2324- var templ_7745c5c3_Var111 templ.SafeURL2311+ var templ_7745c5c3_Var110 templ.SafeURL
2325- templ_7745c5c3_Var111, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(v.Href))2312+ templ_7745c5c3_Var110, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(v.Href))
2326 if templ_7745c5c3_Err != nil {2313 if templ_7745c5c3_Err != nil {
2327- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 454, Col: 37}2314+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 451, Col: 37}
2328 }2315 }
2329- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var111))2316+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var110))
2330 if templ_7745c5c3_Err != nil {2317 if templ_7745c5c3_Err != nil {
2331 return templ_7745c5c3_Err2318 return templ_7745c5c3_Err
2332 }2319 }
2333- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 218, "\">")2320+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 217, "\">")
2334 if templ_7745c5c3_Err != nil {2321 if templ_7745c5c3_Err != nil {
2335 return templ_7745c5c3_Err2322 return templ_7745c5c3_Err
2336 }2323 }
2337- var templ_7745c5c3_Var112 string2324+ var templ_7745c5c3_Var111 string
2338- templ_7745c5c3_Var112, templ_7745c5c3_Err = templ.JoinStringErrs(v.Author)2325+ templ_7745c5c3_Var111, templ_7745c5c3_Err = templ.JoinStringErrs(v.Author)
2339 if templ_7745c5c3_Err != nil {2326 if templ_7745c5c3_Err != nil {
2340- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 454, Col: 50}2327+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 451, Col: 50}
2341 }2328 }
2342- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var112))2329+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var111))
2343 if templ_7745c5c3_Err != nil {2330 if templ_7745c5c3_Err != nil {
2344 return templ_7745c5c3_Err2331 return templ_7745c5c3_Err
2345 }2332 }
2346- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 219, ": ")2333+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 218, ": ")
2347 if templ_7745c5c3_Err != nil {2334 if templ_7745c5c3_Err != nil {
2348 return templ_7745c5c3_Err2335 return templ_7745c5c3_Err
2349 }2336 }
2350- var templ_7745c5c3_Var113 string2337+ var templ_7745c5c3_Var112 string
2351- templ_7745c5c3_Var113, templ_7745c5c3_Err = templ.JoinStringErrs(v.Label)2338+ templ_7745c5c3_Var112, templ_7745c5c3_Err = templ.JoinStringErrs(v.Label)
2352 if templ_7745c5c3_Err != nil {2339 if templ_7745c5c3_Err != nil {
2353- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 454, Col: 63}2340+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 451, Col: 63}
2354 }2341 }
2355- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var113))2342+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var112))
2356 if templ_7745c5c3_Err != nil {2343 if templ_7745c5c3_Err != nil {
2357 return templ_7745c5c3_Err2344 return templ_7745c5c3_Err
2358 }2345 }
2359- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 220, "</a> ")2346+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 219, "</a> ")
2360 if templ_7745c5c3_Err != nil {2347 if templ_7745c5c3_Err != nil {
2361 return templ_7745c5c3_Err2348 return templ_7745c5c3_Err
2362 }2349 }
2363 if v.Stale {2350 if v.Stale {
2364- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 221, "<span class=\"mute\">(stale)</span>")2351+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 220, "<span class=\"mute\">(stale)</span>")
2365 if templ_7745c5c3_Err != nil {2352 if templ_7745c5c3_Err != nil {
2366 return templ_7745c5c3_Err2353 return templ_7745c5c3_Err
2367 }2354 }
2368 }2355 }
2369- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 222, "</li>")2356+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 221, "</li>")
2370 if templ_7745c5c3_Err != nil {2357 if templ_7745c5c3_Err != nil {
2371 return templ_7745c5c3_Err2358 return templ_7745c5c3_Err
2372 }2359 }
2373 }2360 }
2374- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 223, "</ul></section>")2361+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 222, "</ul></section>")
2375 if templ_7745c5c3_Err != nil {2362 if templ_7745c5c3_Err != nil {
2376 return templ_7745c5c3_Err2363 return templ_7745c5c3_Err
2377 }2364 }
@@ -2400,51 +2387,51 @@ func mrBar(p MRPage) templ.Component {
2400 }()2387 }()
2401 }2388 }
2402 ctx = templ.InitializeContext(ctx)2389 ctx = templ.InitializeContext(ctx)
2403- templ_7745c5c3_Var114 := templ.GetChildren(ctx)2390+ templ_7745c5c3_Var113 := templ.GetChildren(ctx)
2404- if templ_7745c5c3_Var114 == nil {2391+ if templ_7745c5c3_Var113 == nil {
2405- templ_7745c5c3_Var114 = templ.NopComponent2392+ templ_7745c5c3_Var113 = templ.NopComponent
2406 }2393 }
2407 ctx = templ.ClearChildren(ctx)2394 ctx = templ.ClearChildren(ctx)
2408- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 224, "<div class=\"diff-tools mr-bar\" role=\"group\" aria-label=\"Diff view and merge\"><span class=\"dim\">")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\">")
2409 if templ_7745c5c3_Err != nil {2396 if templ_7745c5c3_Err != nil {
2410 return templ_7745c5c3_Err2397 return templ_7745c5c3_Err
2411 }2398 }
2412- var templ_7745c5c3_Var115 string2399+ var templ_7745c5c3_Var114 string
2413- templ_7745c5c3_Var115, templ_7745c5c3_Err = templ.JoinStringErrs(plural(p.NFiles, "file", "files"))2400+ templ_7745c5c3_Var114, templ_7745c5c3_Err = templ.JoinStringErrs(plural(p.NFiles, "file", "files"))
2414 if templ_7745c5c3_Err != nil {2401 if templ_7745c5c3_Err != nil {
2415- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 471, Col: 55}2402+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 468, Col: 55}
2416 }2403 }
2417- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var115))2404+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var114))
2418 if templ_7745c5c3_Err != nil {2405 if templ_7745c5c3_Err != nil {
2419 return templ_7745c5c3_Err2406 return templ_7745c5c3_Err
2420 }2407 }
2421- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 225, " · <span class=\"plus\">+")2408+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 224, " · <span class=\"plus\">+")
2422 if templ_7745c5c3_Err != nil {2409 if templ_7745c5c3_Err != nil {
2423 return templ_7745c5c3_Err2410 return templ_7745c5c3_Err
2424 }2411 }
2425- var templ_7745c5c3_Var116 string2412+ var templ_7745c5c3_Var115 string
2426- templ_7745c5c3_Var116, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Adds))2413+ templ_7745c5c3_Var115, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Adds))
2427 if templ_7745c5c3_Err != nil {2414 if templ_7745c5c3_Err != nil {
2428- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 471, Col: 95}2415+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 468, Col: 95}
2429 }2416 }
2430- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var116))2417+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var115))
2431 if templ_7745c5c3_Err != nil {2418 if templ_7745c5c3_Err != nil {
2432 return templ_7745c5c3_Err2419 return templ_7745c5c3_Err
2433 }2420 }
2434- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 226, "</span> <span class=\"minus\">-")2421+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 225, "</span> <span class=\"minus\">-")
2435 if templ_7745c5c3_Err != nil {2422 if templ_7745c5c3_Err != nil {
2436 return templ_7745c5c3_Err2423 return templ_7745c5c3_Err
2437 }2424 }
2438- var templ_7745c5c3_Var117 string2425+ var templ_7745c5c3_Var116 string
2439- templ_7745c5c3_Var117, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Dels))2426+ templ_7745c5c3_Var116, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Dels))
2440 if templ_7745c5c3_Err != nil {2427 if templ_7745c5c3_Err != nil {
2441- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 471, Col: 140}2428+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 468, Col: 140}
2442 }2429 }
2443- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var117))2430+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var116))
2444 if templ_7745c5c3_Err != nil {2431 if templ_7745c5c3_Err != nil {
2445 return templ_7745c5c3_Err2432 return templ_7745c5c3_Err
2446 }2433 }
2447- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 227, "</span></span>")2434+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 226, "</span></span>")
2448 if templ_7745c5c3_Err != nil {2435 if templ_7745c5c3_Err != nil {
2449 return templ_7745c5c3_Err2436 return templ_7745c5c3_Err
2450 }2437 }
@@ -2452,7 +2439,7 @@ func mrBar(p MRPage) templ.Component {
2452 if templ_7745c5c3_Err != nil {2439 if templ_7745c5c3_Err != nil {
2453 return templ_7745c5c3_Err2440 return templ_7745c5c3_Err
2454 }2441 }
2455- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 228, "<span class=\"grow\"></span>")2442+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 227, "<span class=\"grow\"></span>")
2456 if templ_7745c5c3_Err != nil {2443 if templ_7745c5c3_Err != nil {
2457 return templ_7745c5c3_Err2444 return templ_7745c5c3_Err
2458 }2445 }
@@ -2470,7 +2457,7 @@ func mrBar(p MRPage) templ.Component {
2470 if templ_7745c5c3_Err != nil {2457 if templ_7745c5c3_Err != nil {
2471 return templ_7745c5c3_Err2458 return templ_7745c5c3_Err
2472 }2459 }
2473- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 229, "</div>")2460+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 228, "</div>")
2474 if templ_7745c5c3_Err != nil {2461 if templ_7745c5c3_Err != nil {
2475 return templ_7745c5c3_Err2462 return templ_7745c5c3_Err
2476 }2463 }
@@ -2502,80 +2489,80 @@ func mergeMenu(p MRPage) templ.Component {
2502 }()2489 }()
2503 }2490 }
2504 ctx = templ.InitializeContext(ctx)2491 ctx = templ.InitializeContext(ctx)
2505- templ_7745c5c3_Var118 := templ.GetChildren(ctx)2492+ templ_7745c5c3_Var117 := templ.GetChildren(ctx)
2506- if templ_7745c5c3_Var118 == nil {2493+ if templ_7745c5c3_Var117 == nil {
2507- templ_7745c5c3_Var118 = templ.NopComponent2494+ templ_7745c5c3_Var117 = templ.NopComponent
2508 }2495 }
2509 ctx = templ.ClearChildren(ctx)2496 ctx = templ.ClearChildren(ctx)
2510- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 230, "<details class=\"menu mmenu\" id=\"merge-menu\" data-state=\"open\"")2497+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 229, "<details class=\"menu mmenu\" id=\"merge-menu\" data-state=\"open\"")
2511 if templ_7745c5c3_Err != nil {2498 if templ_7745c5c3_Err != nil {
2512 return templ_7745c5c3_Err2499 return templ_7745c5c3_Err
2513 }2500 }
2514 if p.Box.Error != "" {2501 if p.Box.Error != "" {
2515- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 231, " open")2502+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 230, " open")
2516 if templ_7745c5c3_Err != nil {2503 if templ_7745c5c3_Err != nil {
2517 return templ_7745c5c3_Err2504 return templ_7745c5c3_Err
2518 }2505 }
2519 }2506 }
2520- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 232, "><summary class=\"btn primary\" aria-keyshortcuts=\"Shift+M\">")2507+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 231, "><summary class=\"btn primary\" aria-keyshortcuts=\"Shift+M\">")
2521 if templ_7745c5c3_Err != nil {2508 if templ_7745c5c3_Err != nil {
2522 return templ_7745c5c3_Err2509 return templ_7745c5c3_Err
2523 }2510 }
2524 if p.Box.ReadyAction != "" {2511 if p.Box.ReadyAction != "" {
2525- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 233, "Draft ")2512+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 232, "Draft ")
2526 if templ_7745c5c3_Err != nil {2513 if templ_7745c5c3_Err != nil {
2527 return templ_7745c5c3_Err2514 return templ_7745c5c3_Err
2528 }2515 }
2529 } else {2516 } else {
2530- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 234, "Merge ")2517+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 233, "Merge ")
2531 if templ_7745c5c3_Err != nil {2518 if templ_7745c5c3_Err != nil {
2532 return templ_7745c5c3_Err2519 return templ_7745c5c3_Err
2533 }2520 }
2534 }2521 }
2535- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 235, "<kbd aria-hidden=\"true\">M</kbd></summary><div class=\"menu-pop\" role=\"group\" aria-label=\"Merge\">")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\">")
2536 if templ_7745c5c3_Err != nil {2523 if templ_7745c5c3_Err != nil {
2537 return templ_7745c5c3_Err2524 return templ_7745c5c3_Err
2538 }2525 }
2539 if p.Box.HeadGone {2526 if p.Box.HeadGone {
2540- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 236, "<p class=\"dim\">the source branch was deleted</p>")2527+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 235, "<p class=\"dim\">the source branch was deleted</p>")
2541 if templ_7745c5c3_Err != nil {2528 if templ_7745c5c3_Err != nil {
2542 return templ_7745c5c3_Err2529 return templ_7745c5c3_Err
2543 }2530 }
2544 }2531 }
2545 if p.Box.Error != "" {2532 if p.Box.Error != "" {
2546- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 237, "<p class=\"d-err\" role=\"alert\">")2533+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 236, "<p class=\"d-err\" role=\"alert\">")
2547 if templ_7745c5c3_Err != nil {2534 if templ_7745c5c3_Err != nil {
2548 return templ_7745c5c3_Err2535 return templ_7745c5c3_Err
2549 }2536 }
2550- var templ_7745c5c3_Var119 string2537+ var templ_7745c5c3_Var118 string
2551- templ_7745c5c3_Var119, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.Error)2538+ templ_7745c5c3_Var118, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.Error)
2552 if templ_7745c5c3_Err != nil {2539 if templ_7745c5c3_Err != nil {
2553- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 505, Col: 47}2540+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 502, Col: 47}
2554 }2541 }
2555- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var119))2542+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var118))
2556 if templ_7745c5c3_Err != nil {2543 if templ_7745c5c3_Err != nil {
2557 return templ_7745c5c3_Err2544 return templ_7745c5c3_Err
2558 }2545 }
2559- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 238, "</p>")2546+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 237, "</p>")
2560 if templ_7745c5c3_Err != nil {2547 if templ_7745c5c3_Err != nil {
2561 return templ_7745c5c3_Err2548 return templ_7745c5c3_Err
2562 }2549 }
2563 }2550 }
2564 if p.Box.ReadyAction != "" {2551 if p.Box.ReadyAction != "" {
2565- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 239, "<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=\"")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=\"")
2566 if templ_7745c5c3_Err != nil {2553 if templ_7745c5c3_Err != nil {
2567 return templ_7745c5c3_Err2554 return templ_7745c5c3_Err
2568 }2555 }
2569- var templ_7745c5c3_Var120 templ.SafeURL2556+ var templ_7745c5c3_Var119 templ.SafeURL
2570- templ_7745c5c3_Var120, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.ReadyAction))2557+ templ_7745c5c3_Var119, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.ReadyAction))
2571 if templ_7745c5c3_Err != nil {2558 if templ_7745c5c3_Err != nil {
2572- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 509, Col: 80}2559+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 506, Col: 80}
2573 }2560 }
2574- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var120))2561+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var119))
2575 if templ_7745c5c3_Err != nil {2562 if templ_7745c5c3_Err != nil {
2576 return templ_7745c5c3_Err2563 return templ_7745c5c3_Err
2577 }2564 }
2578- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 240, "\"><button type=\"submit\" class=\"btn primary\" data-default title=\"remove the draft prefix from the title\">Ready for review</button></form>")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>")
2579 if templ_7745c5c3_Err != nil {2566 if templ_7745c5c3_Err != nil {
2580 return templ_7745c5c3_Err2567 return templ_7745c5c3_Err
2581 }2568 }
@@ -2584,185 +2571,185 @@ func mergeMenu(p MRPage) templ.Component {
2584 if templ_7745c5c3_Err != nil {2571 if templ_7745c5c3_Err != nil {
2585 return templ_7745c5c3_Err2572 return templ_7745c5c3_Err
2586 }2573 }
2587- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 241, " <form class=\"d-acts\" method=\"post\" action=\"")2574+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 240, " <form class=\"d-acts\" method=\"post\" action=\"")
2588 if templ_7745c5c3_Err != nil {2575 if templ_7745c5c3_Err != nil {
2589 return templ_7745c5c3_Err2576 return templ_7745c5c3_Err
2590 }2577 }
2591- var templ_7745c5c3_Var121 templ.SafeURL2578+ var templ_7745c5c3_Var120 templ.SafeURL
2592- templ_7745c5c3_Var121, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.MergeAction))2579+ templ_7745c5c3_Var120, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.MergeAction))
2593 if templ_7745c5c3_Err != nil {2580 if templ_7745c5c3_Err != nil {
2594- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 514, Col: 80}2581+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 511, Col: 80}
2595 }2582 }
2596- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var121))2583+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var120))
2597 if templ_7745c5c3_Err != nil {2584 if templ_7745c5c3_Err != nil {
2598 return templ_7745c5c3_Err2585 return templ_7745c5c3_Err
2599 }2586 }
2600- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 242, "\"><input type=\"hidden\" name=\"head_id\" value=\"")2587+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 241, "\"><input type=\"hidden\" name=\"head_id\" value=\"")
2601 if templ_7745c5c3_Err != nil {2588 if templ_7745c5c3_Err != nil {
2602 return templ_7745c5c3_Err2589 return templ_7745c5c3_Err
2603 }2590 }
2604- var templ_7745c5c3_Var122 string2591+ var templ_7745c5c3_Var121 string
2605- templ_7745c5c3_Var122, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)2592+ templ_7745c5c3_Var121, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)
2606 if templ_7745c5c3_Err != nil {2593 if templ_7745c5c3_Err != nil {
2607- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 515, Col: 59}2594+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 512, Col: 59}
2608 }2595 }
2609- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var122)2596+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var121)
2610 if templ_7745c5c3_Err != nil {2597 if templ_7745c5c3_Err != nil {
2611 return templ_7745c5c3_Err2598 return templ_7745c5c3_Err
2612 }2599 }
2613- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 243, "\"><fieldset class=\"d-modes\"><legend class=\"sr\">merge mode</legend> ")2600+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 242, "\"><fieldset class=\"d-modes\"><legend class=\"sr\">merge mode</legend> ")
2614 if templ_7745c5c3_Err != nil {2601 if templ_7745c5c3_Err != nil {
2615 return templ_7745c5c3_Err2602 return templ_7745c5c3_Err
2616 }2603 }
2617 for i, m := range p.Box.Modes {2604 for i, m := range p.Box.Modes {
2618- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 244, "<label><input type=\"radio\" name=\"mode\" value=\"")2605+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 243, "<label><input type=\"radio\" name=\"mode\" value=\"")
2619 if templ_7745c5c3_Err != nil {2606 if templ_7745c5c3_Err != nil {
2620 return templ_7745c5c3_Err2607 return templ_7745c5c3_Err
2621 }2608 }
2622- var templ_7745c5c3_Var123 string2609+ var templ_7745c5c3_Var122 string
2623- templ_7745c5c3_Var123, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.Value)2610+ templ_7745c5c3_Var122, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.Value)
2624 if templ_7745c5c3_Err != nil {2611 if templ_7745c5c3_Err != nil {
2625- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 523, Col: 24}2612+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 520, Col: 24}
2626 }2613 }
2627- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var123)2614+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var122)
2628 if templ_7745c5c3_Err != nil {2615 if templ_7745c5c3_Err != nil {
2629 return templ_7745c5c3_Err2616 return templ_7745c5c3_Err
2630 }2617 }
2631- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 245, "\"")2618+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 244, "\"")
2632 if templ_7745c5c3_Err != nil {2619 if templ_7745c5c3_Err != nil {
2633 return templ_7745c5c3_Err2620 return templ_7745c5c3_Err
2634 }2621 }
2635 if i == p.Box.Checked() {2622 if i == p.Box.Checked() {
2636- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 246, " checked")2623+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 245, " checked")
2637 if templ_7745c5c3_Err != nil {2624 if templ_7745c5c3_Err != nil {
2638 return templ_7745c5c3_Err2625 return templ_7745c5c3_Err
2639 }2626 }
2640 }2627 }
2641 if m.Disabled {2628 if m.Disabled {
2642- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 247, " disabled")2629+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 246, " disabled")
2643 if templ_7745c5c3_Err != nil {2630 if templ_7745c5c3_Err != nil {
2644 return templ_7745c5c3_Err2631 return templ_7745c5c3_Err
2645 }2632 }
2646 }2633 }
2647- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 248, " title=\"")2634+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 247, " title=\"")
2648 if templ_7745c5c3_Err != nil {2635 if templ_7745c5c3_Err != nil {
2649 return templ_7745c5c3_Err2636 return templ_7745c5c3_Err
2650 }2637 }
2651- var templ_7745c5c3_Var124 string2638+ var templ_7745c5c3_Var123 string
2652- templ_7745c5c3_Var124, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.Reason)2639+ templ_7745c5c3_Var123, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.Reason)
2653 if templ_7745c5c3_Err != nil {2640 if templ_7745c5c3_Err != nil {
2654- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 526, Col: 25}2641+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 523, Col: 25}
2655 }2642 }
2656- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var124)2643+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var123)
2657 if templ_7745c5c3_Err != nil {2644 if templ_7745c5c3_Err != nil {
2658 return templ_7745c5c3_Err2645 return templ_7745c5c3_Err
2659 }2646 }
2660- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 249, "\" :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\"> ")2647+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 248, "\" :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\"> ")
2661 if templ_7745c5c3_Err != nil {2648 if templ_7745c5c3_Err != nil {
2662 return templ_7745c5c3_Err2649 return templ_7745c5c3_Err
2663 }2650 }
2664- var templ_7745c5c3_Var125 string2651+ var templ_7745c5c3_Var124 string
2665- templ_7745c5c3_Var125, templ_7745c5c3_Err = templ.JoinStringErrs(m.Label)2652+ templ_7745c5c3_Var124, templ_7745c5c3_Err = templ.JoinStringErrs(m.Label)
2666 if templ_7745c5c3_Err != nil {2653 if templ_7745c5c3_Err != nil {
2667- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 530, Col: 17}2654+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 527, Col: 17}
2668 }2655 }
2669- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var125))2656+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var124))
2670 if templ_7745c5c3_Err != nil {2657 if templ_7745c5c3_Err != nil {
2671 return templ_7745c5c3_Err2658 return templ_7745c5c3_Err
2672 }2659 }
2673- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 250, " ")2660+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 249, " ")
2674 if templ_7745c5c3_Err != nil {2661 if templ_7745c5c3_Err != nil {
2675 return templ_7745c5c3_Err2662 return templ_7745c5c3_Err
2676 }2663 }
2677 if i < 9 {2664 if i < 9 {
2678- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 251, "<kbd aria-hidden=\"true\">")2665+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 250, "<kbd aria-hidden=\"true\">")
2679 if templ_7745c5c3_Err != nil {2666 if templ_7745c5c3_Err != nil {
2680 return templ_7745c5c3_Err2667 return templ_7745c5c3_Err
2681 }2668 }
2682- var templ_7745c5c3_Var126 string2669+ var templ_7745c5c3_Var125 string
2683- templ_7745c5c3_Var126, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(i + 1))2670+ templ_7745c5c3_Var125, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(i + 1))
2684 if templ_7745c5c3_Err != nil {2671 if templ_7745c5c3_Err != nil {
2685- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 532, Col: 46}2672+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 529, Col: 46}
2686 }2673 }
2687- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var126))2674+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var125))
2688 if templ_7745c5c3_Err != nil {2675 if templ_7745c5c3_Err != nil {
2689 return templ_7745c5c3_Err2676 return templ_7745c5c3_Err
2690 }2677 }
2691- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 252, "</kbd>")2678+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 251, "</kbd>")
2692 if templ_7745c5c3_Err != nil {2679 if templ_7745c5c3_Err != nil {
2693 return templ_7745c5c3_Err2680 return templ_7745c5c3_Err
2694 }2681 }
2695 }2682 }
2696- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 253, "</label>")2683+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 252, "</label>")
2697 if templ_7745c5c3_Err != nil {2684 if templ_7745c5c3_Err != nil {
2698 return templ_7745c5c3_Err2685 return templ_7745c5c3_Err
2699 }2686 }
2700 }2687 }
2701- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 254, "</fieldset>")2688+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 253, "</fieldset>")
2702 if templ_7745c5c3_Err != nil {2689 if templ_7745c5c3_Err != nil {
2703 return templ_7745c5c3_Err2690 return templ_7745c5c3_Err
2704 }2691 }
2705 if p.Box.CanDeleteBranch {2692 if p.Box.CanDeleteBranch {
2706- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 255, "<label class=\"d-check\"><input type=\"checkbox\" name=\"delete_branch\" value=\"1\"> delete ")2693+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 254, "<label class=\"d-check\"><input type=\"checkbox\" name=\"delete_branch\" value=\"1\"> delete ")
2707 if templ_7745c5c3_Err != nil {2694 if templ_7745c5c3_Err != nil {
2708 return templ_7745c5c3_Err2695 return templ_7745c5c3_Err
2709 }2696 }
2710- var templ_7745c5c3_Var127 string2697+ var templ_7745c5c3_Var126 string
2711- templ_7745c5c3_Var127, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)2698+ templ_7745c5c3_Var126, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
2712 if templ_7745c5c3_Err != nil {2699 if templ_7745c5c3_Err != nil {
2713- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 538, Col: 102}2700+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 535, Col: 102}
2714 }2701 }
2715- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var127))2702+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var126))
2716 if templ_7745c5c3_Err != nil {2703 if templ_7745c5c3_Err != nil {
2717 return templ_7745c5c3_Err2704 return templ_7745c5c3_Err
2718 }2705 }
2719- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 256, " after the merge <kbd aria-hidden=\"true\">D</kbd></label>")2706+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 255, " after the merge <kbd aria-hidden=\"true\">D</kbd></label>")
2720 if templ_7745c5c3_Err != nil {2707 if templ_7745c5c3_Err != nil {
2721 return templ_7745c5c3_Err2708 return templ_7745c5c3_Err
2722 }2709 }
2723 }2710 }
2724- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 257, "<div class=\"d-btns\"><button type=\"submit\" class=\"btn primary\" data-default")2711+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 256, "<div class=\"d-btns\"><button type=\"submit\" class=\"btn primary\" data-default")
2725 if templ_7745c5c3_Err != nil {2712 if templ_7745c5c3_Err != nil {
2726 return templ_7745c5c3_Err2713 return templ_7745c5c3_Err
2727 }2714 }
2728 if !p.Box.CanMerge() {2715 if !p.Box.CanMerge() {
2729- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 258, " disabled")2716+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 257, " disabled")
2730 if templ_7745c5c3_Err != nil {2717 if templ_7745c5c3_Err != nil {
2731 return templ_7745c5c3_Err2718 return templ_7745c5c3_Err
2732 }2719 }
2733 }2720 }
2734- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 259, " title=\"")2721+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 258, " title=\"")
2735 if templ_7745c5c3_Err != nil {2722 if templ_7745c5c3_Err != nil {
2736 return templ_7745c5c3_Err2723 return templ_7745c5c3_Err
2737 }2724 }
2738- var templ_7745c5c3_Var128 string2725+ var templ_7745c5c3_Var127 string
2739- templ_7745c5c3_Var128, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.MergeTitle())2726+ templ_7745c5c3_Var127, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.MergeTitle())
2740 if templ_7745c5c3_Err != nil {2727 if templ_7745c5c3_Err != nil {
2741- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 546, Col: 33}2728+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 543, Col: 33}
2742 }2729 }
2743- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var128)2730+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var127)
2744 if templ_7745c5c3_Err != nil {2731 if templ_7745c5c3_Err != nil {
2745 return templ_7745c5c3_Err2732 return templ_7745c5c3_Err
2746 }2733 }
2747- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 260, "\" :disabled=\"!this.form.querySelector('input[name=mode]:checked:not(:disabled)')\" :title=\"(this.form.querySelector('input[name=mode]:checked') || {}).title || ''\">Merge into ")2734+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 259, "\" :disabled=\"!this.form.querySelector('input[name=mode]:checked:not(:disabled)')\" :title=\"(this.form.querySelector('input[name=mode]:checked') || {}).title || ''\">Merge into ")
2748 if templ_7745c5c3_Err != nil {2735 if templ_7745c5c3_Err != nil {
2749 return templ_7745c5c3_Err2736 return templ_7745c5c3_Err
2750 }2737 }
2751- var templ_7745c5c3_Var129 string2738+ var templ_7745c5c3_Var128 string
2752- templ_7745c5c3_Var129, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)2739+ templ_7745c5c3_Var128, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
2753 if templ_7745c5c3_Err != nil {2740 if templ_7745c5c3_Err != nil {
2754- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 549, Col: 28}2741+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 546, Col: 28}
2755 }2742 }
2756- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var129))2743+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var128))
2757 if templ_7745c5c3_Err != nil {2744 if templ_7745c5c3_Err != nil {
2758 return templ_7745c5c3_Err2745 return templ_7745c5c3_Err
2759 }2746 }
2760- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 261, "</button></div></form>")2747+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 260, "</button></div></form>")
2761 if templ_7745c5c3_Err != nil {2748 if templ_7745c5c3_Err != nil {
2762 return templ_7745c5c3_Err2749 return templ_7745c5c3_Err
2763 }2750 }
2764 }2751 }
2765- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 262, "</div></details>")2752+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 261, "</div></details>")
2766 if templ_7745c5c3_Err != nil {2753 if templ_7745c5c3_Err != nil {
2767 return templ_7745c5c3_Err2754 return templ_7745c5c3_Err
2768 }2755 }
@@ -2788,182 +2775,182 @@ func MRMergeability(v MergeabilityView) templ.Component {
2788 }()2775 }()
2789 }2776 }
2790 ctx = templ.InitializeContext(ctx)2777 ctx = templ.InitializeContext(ctx)
2791- templ_7745c5c3_Var130 := templ.GetChildren(ctx)2778+ templ_7745c5c3_Var129 := templ.GetChildren(ctx)
2792- if templ_7745c5c3_Var130 == nil {2779+ if templ_7745c5c3_Var129 == nil {
2793- templ_7745c5c3_Var130 = templ.NopComponent2780+ templ_7745c5c3_Var129 = templ.NopComponent
2794 }2781 }
2795 ctx = templ.ClearChildren(ctx)2782 ctx = templ.ClearChildren(ctx)
2796- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 263, "<span data-mergeability data-state=\"")2783+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 262, "<span data-mergeability data-state=\"")
2784+ if templ_7745c5c3_Err != nil {
2785+ return templ_7745c5c3_Err
2786+ }
2787+ var templ_7745c5c3_Var130 string
2788+ templ_7745c5c3_Var130, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.State)
2789+ if templ_7745c5c3_Err != nil {
2790+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 559, Col: 22}
2791+ }
2792+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var130)
2793+ if templ_7745c5c3_Err != nil {
2794+ return templ_7745c5c3_Err
2795+ }
2796+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 263, "\" data-ff-ok=\"")
2797 if templ_7745c5c3_Err != nil {2797 if templ_7745c5c3_Err != nil {
2798 return templ_7745c5c3_Err2798 return templ_7745c5c3_Err
2799 }2799 }
2800 var templ_7745c5c3_Var131 string2800 var templ_7745c5c3_Var131 string
2801- templ_7745c5c3_Var131, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.State)2801+ templ_7745c5c3_Var131, templ_7745c5c3_Err = templ.ResolveAttributeValue(strconv.FormatBool(v.FFOk))
2802 if templ_7745c5c3_Err != nil {2802 if templ_7745c5c3_Err != nil {
2803- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 562, Col: 22}2803+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 560, Col: 41}
2804 }2804 }
2805 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var131)2805 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var131)
2806 if templ_7745c5c3_Err != nil {2806 if templ_7745c5c3_Err != nil {
2807 return templ_7745c5c3_Err2807 return templ_7745c5c3_Err
2808 }2808 }
2809- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 264, "\" data-ff-ok=\"")2809+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 264, "\" data-merge-ok=\"")
2810 if templ_7745c5c3_Err != nil {2810 if templ_7745c5c3_Err != nil {
2811 return templ_7745c5c3_Err2811 return templ_7745c5c3_Err
2812 }2812 }
2813 var templ_7745c5c3_Var132 string2813 var templ_7745c5c3_Var132 string
2814- templ_7745c5c3_Var132, templ_7745c5c3_Err = templ.ResolveAttributeValue(strconv.FormatBool(v.FFOk))2814+ templ_7745c5c3_Var132, templ_7745c5c3_Err = templ.ResolveAttributeValue(strconv.FormatBool(v.MergeOk))
2815 if templ_7745c5c3_Err != nil {2815 if templ_7745c5c3_Err != nil {
2816- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 563, Col: 41}2816+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 561, Col: 47}
2817 }2817 }
2818 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var132)2818 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var132)
2819 if templ_7745c5c3_Err != nil {2819 if templ_7745c5c3_Err != nil {
2820 return templ_7745c5c3_Err2820 return templ_7745c5c3_Err
2821 }2821 }
2822- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 265, "\" data-merge-ok=\"")2822+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 265, "\" data-ff-reason=\"")
2823 if templ_7745c5c3_Err != nil {2823 if templ_7745c5c3_Err != nil {
2824 return templ_7745c5c3_Err2824 return templ_7745c5c3_Err
2825 }2825 }
2826 var templ_7745c5c3_Var133 string2826 var templ_7745c5c3_Var133 string
2827- templ_7745c5c3_Var133, templ_7745c5c3_Err = templ.ResolveAttributeValue(strconv.FormatBool(v.MergeOk))2827+ templ_7745c5c3_Var133, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.FFReason)
2828 if templ_7745c5c3_Err != nil {2828 if templ_7745c5c3_Err != nil {
2829- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 564, Col: 47}2829+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 562, Col: 29}
2830 }2830 }
2831 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var133)2831 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var133)
2832 if templ_7745c5c3_Err != nil {2832 if templ_7745c5c3_Err != nil {
2833 return templ_7745c5c3_Err2833 return templ_7745c5c3_Err
2834 }2834 }
2835- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 266, "\" data-ff-reason=\"")2835+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 266, "\" data-merge-reason=\"")
2836 if templ_7745c5c3_Err != nil {2836 if templ_7745c5c3_Err != nil {
2837 return templ_7745c5c3_Err2837 return templ_7745c5c3_Err
2838 }2838 }
2839 var templ_7745c5c3_Var134 string2839 var templ_7745c5c3_Var134 string
2840- templ_7745c5c3_Var134, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.FFReason)2840+ templ_7745c5c3_Var134, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.MergeReason)
2841 if templ_7745c5c3_Err != nil {2841 if templ_7745c5c3_Err != nil {
2842- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 565, Col: 29}2842+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 563, Col: 35}
2843 }2843 }
2844 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var134)2844 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var134)
2845 if templ_7745c5c3_Err != nil {2845 if templ_7745c5c3_Err != nil {
2846 return templ_7745c5c3_Err2846 return templ_7745c5c3_Err
2847 }2847 }
2848- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 267, "\" data-merge-reason=\"")2848+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 267, "\"><span class=\"badge\" data-state=\"")
2849 if templ_7745c5c3_Err != nil {2849 if templ_7745c5c3_Err != nil {
2850 return templ_7745c5c3_Err2850 return templ_7745c5c3_Err
2851 }2851 }
2852 var templ_7745c5c3_Var135 string2852 var templ_7745c5c3_Var135 string
2853- templ_7745c5c3_Var135, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.MergeReason)2853+ templ_7745c5c3_Var135, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.State)
2854 if templ_7745c5c3_Err != nil {2854 if templ_7745c5c3_Err != nil {
2855- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 566, Col: 35}2855+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 565, Col: 42}
2856 }2856 }
2857 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var135)2857 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var135)
2858 if templ_7745c5c3_Err != nil {2858 if templ_7745c5c3_Err != nil {
2859 return templ_7745c5c3_Err2859 return templ_7745c5c3_Err
2860 }2860 }
2861- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 268, "\"><span class=\"badge\" data-state=\"")2861+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 268, "\">")
2862 if templ_7745c5c3_Err != nil {2862 if templ_7745c5c3_Err != nil {
2863 return templ_7745c5c3_Err2863 return templ_7745c5c3_Err
2864 }2864 }
2865 var templ_7745c5c3_Var136 string2865 var templ_7745c5c3_Var136 string
2866- templ_7745c5c3_Var136, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.State)2866+ templ_7745c5c3_Var136, templ_7745c5c3_Err = templ.JoinStringErrs(v.Label)
2867- if templ_7745c5c3_Err != nil {
2868- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 568, Col: 42}
2869- }
2870- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var136)
2871- if templ_7745c5c3_Err != nil {
2872- return templ_7745c5c3_Err
2873- }
2874- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 269, "\">")
2875 if templ_7745c5c3_Err != nil {2867 if templ_7745c5c3_Err != nil {
2876- return templ_7745c5c3_Err2868+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 565, Col: 54}
2877 }2869 }
2878- var templ_7745c5c3_Var137 string2870+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var136))
2879- templ_7745c5c3_Var137, templ_7745c5c3_Err = templ.JoinStringErrs(v.Label)
2880- if templ_7745c5c3_Err != nil {
2881- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 568, Col: 54}
2882- }
2883- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var137))
2884 if templ_7745c5c3_Err != nil {2871 if templ_7745c5c3_Err != nil {
2885 return templ_7745c5c3_Err2872 return templ_7745c5c3_Err
2886 }2873 }
2887- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 270, "</span> ")2874+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 269, "</span> ")
2888 if templ_7745c5c3_Err != nil {2875 if templ_7745c5c3_Err != nil {
2889 return templ_7745c5c3_Err2876 return templ_7745c5c3_Err
2890 }2877 }
2891 if v.Detail != "" {2878 if v.Detail != "" {
2892- var templ_7745c5c3_Var138 string2879+ var templ_7745c5c3_Var137 string
2893- templ_7745c5c3_Var138, templ_7745c5c3_Err = templ.JoinStringErrs(" ")2880+ templ_7745c5c3_Var137, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
2894 if templ_7745c5c3_Err != nil {2881 if templ_7745c5c3_Err != nil {
2895- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 570, Col: 8}2882+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 567, Col: 8}
2896 }2883 }
2897- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var138))2884+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var137))
2898 if templ_7745c5c3_Err != nil {2885 if templ_7745c5c3_Err != nil {
2899 return templ_7745c5c3_Err2886 return templ_7745c5c3_Err
2900 }2887 }
2901- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 271, "<span class=\"dim\">")2888+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 270, "<span class=\"dim\">")
2902 if templ_7745c5c3_Err != nil {2889 if templ_7745c5c3_Err != nil {
2903 return templ_7745c5c3_Err2890 return templ_7745c5c3_Err
2904 }2891 }
2905- var templ_7745c5c3_Var139 string2892+ var templ_7745c5c3_Var138 string
2906- templ_7745c5c3_Var139, templ_7745c5c3_Err = templ.JoinStringErrs(v.Detail)2893+ templ_7745c5c3_Var138, templ_7745c5c3_Err = templ.JoinStringErrs(v.Detail)
2907 if templ_7745c5c3_Err != nil {2894 if templ_7745c5c3_Err != nil {
2908- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 570, Col: 38}2895+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 567, Col: 38}
2909 }2896 }
2910- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var139))2897+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var138))
2911 if templ_7745c5c3_Err != nil {2898 if templ_7745c5c3_Err != nil {
2912 return templ_7745c5c3_Err2899 return templ_7745c5c3_Err
2913 }2900 }
2914- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 272, "</span>")2901+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 271, "</span>")
2915 if templ_7745c5c3_Err != nil {2902 if templ_7745c5c3_Err != nil {
2916 return templ_7745c5c3_Err2903 return templ_7745c5c3_Err
2917 }2904 }
2918 }2905 }
2919- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 273, "</span> ")2906+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 272, "</span> ")
2920 if templ_7745c5c3_Err != nil {2907 if templ_7745c5c3_Err != nil {
2921 return templ_7745c5c3_Err2908 return templ_7745c5c3_Err
2922 }2909 }
2923 if len(v.Paths) > 0 {2910 if len(v.Paths) > 0 {
2924- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 274, "<ul class=\"mg-paths\" aria-label=\"conflicting files\">")2911+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 273, "<ul class=\"mg-paths\" aria-label=\"conflicting files\">")
2925 if templ_7745c5c3_Err != nil {2912 if templ_7745c5c3_Err != nil {
2926 return templ_7745c5c3_Err2913 return templ_7745c5c3_Err
2927 }2914 }
2928 for _, path := range v.Paths {2915 for _, path := range v.Paths {
2929- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 275, "<li><code>")2916+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 274, "<li><code>")
2930 if templ_7745c5c3_Err != nil {2917 if templ_7745c5c3_Err != nil {
2931 return templ_7745c5c3_Err2918 return templ_7745c5c3_Err
2932 }2919 }
2933- var templ_7745c5c3_Var140 string2920+ var templ_7745c5c3_Var139 string
2934- templ_7745c5c3_Var140, templ_7745c5c3_Err = templ.JoinStringErrs(path)2921+ templ_7745c5c3_Var139, templ_7745c5c3_Err = templ.JoinStringErrs(path)
2935 if templ_7745c5c3_Err != nil {2922 if templ_7745c5c3_Err != nil {
2936- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 576, Col: 20}2923+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 573, Col: 20}
2937 }2924 }
2938- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var140))2925+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var139))
2939 if templ_7745c5c3_Err != nil {2926 if templ_7745c5c3_Err != nil {
2940 return templ_7745c5c3_Err2927 return templ_7745c5c3_Err
2941 }2928 }
2942- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 276, "</code></li>")2929+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 275, "</code></li>")
2943 if templ_7745c5c3_Err != nil {2930 if templ_7745c5c3_Err != nil {
2944 return templ_7745c5c3_Err2931 return templ_7745c5c3_Err
2945 }2932 }
2946 }2933 }
2947- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 277, "</ul>")2934+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 276, "</ul>")
2948 if templ_7745c5c3_Err != nil {2935 if templ_7745c5c3_Err != nil {
2949 return templ_7745c5c3_Err2936 return templ_7745c5c3_Err
2950 }2937 }
2951 }2938 }
2952 if v.PathsNote != "" {2939 if v.PathsNote != "" {
2953- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 278, "<p class=\"dim\">")2940+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 277, "<p class=\"dim\">")
2954 if templ_7745c5c3_Err != nil {2941 if templ_7745c5c3_Err != nil {
2955 return templ_7745c5c3_Err2942 return templ_7745c5c3_Err
2956 }2943 }
2957- var templ_7745c5c3_Var141 string2944+ var templ_7745c5c3_Var140 string
2958- templ_7745c5c3_Var141, templ_7745c5c3_Err = templ.JoinStringErrs(v.PathsNote)2945+ templ_7745c5c3_Var140, templ_7745c5c3_Err = templ.JoinStringErrs(v.PathsNote)
2959 if templ_7745c5c3_Err != nil {2946 if templ_7745c5c3_Err != nil {
2960- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 581, Col: 30}2947+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 578, Col: 30}
2961 }2948 }
2962- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var141))2949+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var140))
2963 if templ_7745c5c3_Err != nil {2950 if templ_7745c5c3_Err != nil {
2964 return templ_7745c5c3_Err2951 return templ_7745c5c3_Err
2965 }2952 }
2966- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 279, "</p>")2953+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 278, "</p>")
2967 if templ_7745c5c3_Err != nil {2954 if templ_7745c5c3_Err != nil {
2968 return templ_7745c5c3_Err2955 return templ_7745c5c3_Err
2969 }2956 }
@@ -2990,12 +2977,12 @@ func mrMergeabilitySlot(v MergeabilityView) templ.Component {
2990 }()2977 }()
2991 }2978 }
2992 ctx = templ.InitializeContext(ctx)2979 ctx = templ.InitializeContext(ctx)
2993- templ_7745c5c3_Var142 := templ.GetChildren(ctx)2980+ templ_7745c5c3_Var141 := templ.GetChildren(ctx)
2994- if templ_7745c5c3_Var142 == nil {2981+ if templ_7745c5c3_Var141 == nil {
2995- templ_7745c5c3_Var142 = templ.NopComponent2982+ templ_7745c5c3_Var141 = templ.NopComponent
2996 }2983 }
2997 ctx = templ.ClearChildren(ctx)2984 ctx = templ.ClearChildren(ctx)
2998- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 280, "<div id=\"mr-mergeability\" class=\"live-slot\" role=\"status\" data-slot>")2985+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 279, "<div id=\"mr-mergeability\" class=\"live-slot\" role=\"status\" data-slot>")
2999 if templ_7745c5c3_Err != nil {2986 if templ_7745c5c3_Err != nil {
3000 return templ_7745c5c3_Err2987 return templ_7745c5c3_Err
3001 }2988 }
@@ -3003,7 +2990,7 @@ func mrMergeabilitySlot(v MergeabilityView) templ.Component {
3003 if templ_7745c5c3_Err != nil {2990 if templ_7745c5c3_Err != nil {
3004 return templ_7745c5c3_Err2991 return templ_7745c5c3_Err
3005 }2992 }
3006- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 281, "</div>")2993+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 280, "</div>")
3007 if templ_7745c5c3_Err != nil {2994 if templ_7745c5c3_Err != nil {
3008 return templ_7745c5c3_Err2995 return templ_7745c5c3_Err
3009 }2996 }
@@ -3028,9 +3015,9 @@ func MRMergeabilityFragment(v MergeabilityView) templ.Component {
3028 }()3015 }()
3029 }3016 }
3030 ctx = templ.InitializeContext(ctx)3017 ctx = templ.InitializeContext(ctx)
3031- templ_7745c5c3_Var143 := templ.GetChildren(ctx)3018+ templ_7745c5c3_Var142 := templ.GetChildren(ctx)
3032- if templ_7745c5c3_Var143 == nil {3019+ if templ_7745c5c3_Var142 == nil {
3033- templ_7745c5c3_Var143 = templ.NopComponent3020+ templ_7745c5c3_Var142 = templ.NopComponent
3034 }3021 }
3035 ctx = templ.ClearChildren(ctx)3022 ctx = templ.ClearChildren(ctx)
3036 templ_7745c5c3_Err = mrMergeabilitySlot(v).Render(ctx, templ_7745c5c3_Buffer)3023 templ_7745c5c3_Err = mrMergeabilitySlot(v).Render(ctx, templ_7745c5c3_Buffer)
@@ -3059,128 +3046,128 @@ func moreMenu(p MRPage) templ.Component {
3059 }()3046 }()
3060 }3047 }
3061 ctx = templ.InitializeContext(ctx)3048 ctx = templ.InitializeContext(ctx)
3062- templ_7745c5c3_Var144 := templ.GetChildren(ctx)3049+ templ_7745c5c3_Var143 := templ.GetChildren(ctx)
3063- if templ_7745c5c3_Var144 == nil {3050+ if templ_7745c5c3_Var143 == nil {
3064- templ_7745c5c3_Var144 = templ.NopComponent3051+ templ_7745c5c3_Var143 = templ.NopComponent
3065 }3052 }
3066 ctx = templ.ClearChildren(ctx)3053 ctx = templ.ClearChildren(ctx)
3067- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 282, "<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>")3054+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 281, "<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>")
3068 if templ_7745c5c3_Err != nil {3055 if templ_7745c5c3_Err != nil {
3069 return templ_7745c5c3_Err3056 return templ_7745c5c3_Err
3070 }3057 }
3071- var templ_7745c5c3_Var145 string3058+ var templ_7745c5c3_Var144 string
3072- templ_7745c5c3_Var145, templ_7745c5c3_Err = templ.JoinStringErrs(strings.Join(p.Modes, ", "))3059+ templ_7745c5c3_Var144, templ_7745c5c3_Err = templ.JoinStringErrs(strings.Join(p.Modes, ", "))
3073 if templ_7745c5c3_Err != nil {3060 if templ_7745c5c3_Err != nil {
3074- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 608, Col: 38}3061+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 605, Col: 38}
3075 }3062 }
3076- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var145))3063+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var144))
3077 if templ_7745c5c3_Err != nil {3064 if templ_7745c5c3_Err != nil {
3078 return templ_7745c5c3_Err3065 return templ_7745c5c3_Err
3079 }3066 }
3080- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 283, "</dd><dt>checks</dt><dd>")3067+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 282, "</dd><dt>checks</dt><dd>")
3081 if templ_7745c5c3_Err != nil {3068 if templ_7745c5c3_Err != nil {
3082 return templ_7745c5c3_Err3069 return templ_7745c5c3_Err
3083 }3070 }
3084 if p.ChecksBlock {3071 if p.ChecksBlock {
3085- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 284, "failing ones block the merge")3072+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 283, "failing ones block the merge")
3086 if templ_7745c5c3_Err != nil {3073 if templ_7745c5c3_Err != nil {
3087 return templ_7745c5c3_Err3074 return templ_7745c5c3_Err
3088 }3075 }
3089 } else {3076 } else {
3090- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 285, "do not block the merge")3077+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 284, "do not block the merge")
3091 if templ_7745c5c3_Err != nil {3078 if templ_7745c5c3_Err != nil {
3092 return templ_7745c5c3_Err3079 return templ_7745c5c3_Err
3093 }3080 }
3094 }3081 }
3095- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 286, "</dd></dl></section>")3082+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 285, "</dd></dl></section>")
3096 if templ_7745c5c3_Err != nil {3083 if templ_7745c5c3_Err != nil {
3097 return templ_7745c5c3_Err3084 return templ_7745c5c3_Err
3098 }3085 }
3099 if p.Box != nil {3086 if p.Box != nil {
3100 if p.Box.Signed {3087 if p.Box.Signed {
3101- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 287, "<p class=\"d-note\" id=\"mr-signing\">squash and merge commits are signed with ermite's own key (generated on first start). ")3088+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 286, "<p class=\"d-note\" id=\"mr-signing\">squash and merge commits are signed with ermite's own key (generated on first start). ")
3102 if templ_7745c5c3_Err != nil {3089 if templ_7745c5c3_Err != nil {
3103 return templ_7745c5c3_Err3090 return templ_7745c5c3_Err
3104 }3091 }
3105 if p.Box.Fingerprint != "" {3092 if p.Box.Fingerprint != "" {
3106- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 288, "fingerprint <code>")3093+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 287, "fingerprint <code>")
3107 if templ_7745c5c3_Err != nil {3094 if templ_7745c5c3_Err != nil {
3108 return templ_7745c5c3_Err3095 return templ_7745c5c3_Err
3109 }3096 }
3110- var templ_7745c5c3_Var146 string3097+ var templ_7745c5c3_Var145 string
3111- templ_7745c5c3_Var146, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.Fingerprint)3098+ templ_7745c5c3_Var145, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.Fingerprint)
3112 if templ_7745c5c3_Err != nil {3099 if templ_7745c5c3_Err != nil {
3113- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 624, Col: 44}3100+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 621, Col: 44}
3114 }3101 }
3115- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var146))3102+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var145))
3116 if templ_7745c5c3_Err != nil {3103 if templ_7745c5c3_Err != nil {
3117 return templ_7745c5c3_Err3104 return templ_7745c5c3_Err
3118 }3105 }
3119- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 289, "</code> ")3106+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 288, "</code> ")
3120 if templ_7745c5c3_Err != nil {3107 if templ_7745c5c3_Err != nil {
3121 return templ_7745c5c3_Err3108 return templ_7745c5c3_Err
3122 }3109 }
3123 }3110 }
3124- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 290, "<code>ermite signing-key show</code> prints it.</p>")3111+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 289, "<code>ermite signing-key show</code> prints it.</p>")
3125 if templ_7745c5c3_Err != nil {3112 if templ_7745c5c3_Err != nil {
3126 return templ_7745c5c3_Err3113 return templ_7745c5c3_Err
3127 }3114 }
3128 }3115 }
3129- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 291, " ")3116+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 290, " ")
3130 if templ_7745c5c3_Err != nil {3117 if templ_7745c5c3_Err != nil {
3131 return templ_7745c5c3_Err3118 return templ_7745c5c3_Err
3132 }3119 }
3133 if p.Box.CanMarkRead {3120 if p.Box.CanMarkRead {
3134- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 292, "<form method=\"post\" action=\"")3121+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 291, "<form method=\"post\" action=\"")
3135 if templ_7745c5c3_Err != nil {3122 if templ_7745c5c3_Err != nil {
3136 return templ_7745c5c3_Err3123 return templ_7745c5c3_Err
3137 }3124 }
3138- var templ_7745c5c3_Var147 templ.SafeURL3125+ var templ_7745c5c3_Var146 templ.SafeURL
3139- templ_7745c5c3_Var147, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.ReadAction))3126+ templ_7745c5c3_Var146, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.ReadAction))
3140 if templ_7745c5c3_Err != nil {3127 if templ_7745c5c3_Err != nil {
3141- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 630, Col: 65}3128+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 627, Col: 65}
3142 }3129 }
3143- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var147))3130+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var146))
3144 if templ_7745c5c3_Err != nil {3131 if templ_7745c5c3_Err != nil {
3145 return templ_7745c5c3_Err3132 return templ_7745c5c3_Err
3146 }3133 }
3147- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 293, "\"><input type=\"hidden\" name=\"head_id\" value=\"")3134+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 292, "\"><input type=\"hidden\" name=\"head_id\" value=\"")
3148 if templ_7745c5c3_Err != nil {3135 if templ_7745c5c3_Err != nil {
3149 return templ_7745c5c3_Err3136 return templ_7745c5c3_Err
3150 }3137 }
3151- var templ_7745c5c3_Var148 string3138+ var templ_7745c5c3_Var147 string
3152- templ_7745c5c3_Var148, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)3139+ templ_7745c5c3_Var147, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)
3153 if templ_7745c5c3_Err != nil {3140 if templ_7745c5c3_Err != nil {
3154- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 631, Col: 60}3141+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 628, Col: 60}
3155 }3142 }
3156- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var148)3143+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var147)
3157 if templ_7745c5c3_Err != nil {3144 if templ_7745c5c3_Err != nil {
3158 return templ_7745c5c3_Err3145 return templ_7745c5c3_Err
3159 }3146 }
3160- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 294, "\"> <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>")3147+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 293, "\"> <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>")
3161 if templ_7745c5c3_Err != nil {3148 if templ_7745c5c3_Err != nil {
3162 return templ_7745c5c3_Err3149 return templ_7745c5c3_Err
3163 }3150 }
3164 }3151 }
3165- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 295, " <form method=\"post\" action=\"")3152+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 294, " <form method=\"post\" action=\"")
3166 if templ_7745c5c3_Err != nil {3153 if templ_7745c5c3_Err != nil {
3167 return templ_7745c5c3_Err3154 return templ_7745c5c3_Err
3168 }3155 }
3169- var templ_7745c5c3_Var149 templ.SafeURL3156+ var templ_7745c5c3_Var148 templ.SafeURL
3170- templ_7745c5c3_Var149, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.CloseAction))3157+ templ_7745c5c3_Var148, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.CloseAction))
3171 if templ_7745c5c3_Err != nil {3158 if templ_7745c5c3_Err != nil {
3172- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 635, Col: 65}3159+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 632, Col: 65}
3173 }3160 }
3174- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var149))3161+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var148))
3175 if templ_7745c5c3_Err != nil {3162 if templ_7745c5c3_Err != nil {
3176 return templ_7745c5c3_Err3163 return templ_7745c5c3_Err
3177 }3164 }
3178- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 296, "\"><button type=\"submit\" title=\"close without merging; the branch is kept\" class=\"btn danger\">Close</button></form>")3165+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 295, "\"><button type=\"submit\" title=\"close without merging; the branch is kept\" class=\"btn danger\">Close</button></form>")
3179 if templ_7745c5c3_Err != nil {3166 if templ_7745c5c3_Err != nil {
3180 return templ_7745c5c3_Err3167 return templ_7745c5c3_Err
3181 }3168 }
3182 if !p.Box.HeadGone && p.Box.ReadyAction == "" {3169 if !p.Box.HeadGone && p.Box.ReadyAction == "" {
3183- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 297, "<details class=\"d-or\"><summary class=\"mute\">or from a terminal</summary>")3170+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 296, "<details class=\"d-or\"><summary class=\"mute\">or from a terminal</summary>")
3184 if templ_7745c5c3_Err != nil {3171 if templ_7745c5c3_Err != nil {
3185 return templ_7745c5c3_Err3172 return templ_7745c5c3_Err
3186 }3173 }
@@ -3188,13 +3175,13 @@ func moreMenu(p MRPage) templ.Component {
3188 if templ_7745c5c3_Err != nil {3175 if templ_7745c5c3_Err != nil {
3189 return templ_7745c5c3_Err3176 return templ_7745c5c3_Err
3190 }3177 }
3191- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 298, "</details>")3178+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 297, "</details>")
3192 if templ_7745c5c3_Err != nil {3179 if templ_7745c5c3_Err != nil {
3193 return templ_7745c5c3_Err3180 return templ_7745c5c3_Err
3194 }3181 }
3195 }3182 }
3196 }3183 }
3197- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 299, "</div></details>")3184+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 298, "</div></details>")
3198 if templ_7745c5c3_Err != nil {3185 if templ_7745c5c3_Err != nil {
3199 return templ_7745c5c3_Err3186 return templ_7745c5c3_Err
3200 }3187 }
@@ -3218,12 +3205,12 @@ func Compare(l Layout, p ComparePage) templ.Component {
3218 }()3205 }()
3219 }3206 }
3220 ctx = templ.InitializeContext(ctx)3207 ctx = templ.InitializeContext(ctx)
3221- templ_7745c5c3_Var150 := templ.GetChildren(ctx)3208+ templ_7745c5c3_Var149 := templ.GetChildren(ctx)
3222- if templ_7745c5c3_Var150 == nil {3209+ if templ_7745c5c3_Var149 == nil {
3223- templ_7745c5c3_Var150 = templ.NopComponent3210+ templ_7745c5c3_Var149 = templ.NopComponent
3224 }3211 }
3225 ctx = templ.ClearChildren(ctx)3212 ctx = templ.ClearChildren(ctx)
3226- templ_7745c5c3_Var151 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {3213+ templ_7745c5c3_Var150 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
3227 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context3214 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
3228 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)3215 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
3229 if !templ_7745c5c3_IsBuffer {3216 if !templ_7745c5c3_IsBuffer {
@@ -3235,263 +3222,263 @@ func Compare(l Layout, p ComparePage) templ.Component {
3235 }()3222 }()
3236 }3223 }
3237 ctx = templ.InitializeContext(ctx)3224 ctx = templ.InitializeContext(ctx)
3238- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 300, "<header class=\"show mr-h\"><h1>")3225+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 299, "<header class=\"show mr-h\"><h1>")
3239 if templ_7745c5c3_Err != nil {3226 if templ_7745c5c3_Err != nil {
3240 return templ_7745c5c3_Err3227 return templ_7745c5c3_Err
3241 }3228 }
3242- var templ_7745c5c3_Var152 string3229+ var templ_7745c5c3_Var151 string
3243- templ_7745c5c3_Var152, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)3230+ templ_7745c5c3_Var151, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
3244 if templ_7745c5c3_Err != nil {3231 if templ_7745c5c3_Err != nil {
3245- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 652, Col: 17}3232+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 649, Col: 17}
3246 }3233 }
3247- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var152))3234+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var151))
3248 if templ_7745c5c3_Err != nil {3235 if templ_7745c5c3_Err != nil {
3249 return templ_7745c5c3_Err3236 return templ_7745c5c3_Err
3250 }3237 }
3251- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 301, " → ")3238+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 300, " → ")
3252 if templ_7745c5c3_Err != nil {3239 if templ_7745c5c3_Err != nil {
3253 return templ_7745c5c3_Err3240 return templ_7745c5c3_Err
3254 }3241 }
3255- var templ_7745c5c3_Var153 string3242+ var templ_7745c5c3_Var152 string
3256- templ_7745c5c3_Var153, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)3243+ templ_7745c5c3_Var152, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
3257 if templ_7745c5c3_Err != nil {3244 if templ_7745c5c3_Err != nil {
3258- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 652, Col: 34}3245+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 649, Col: 34}
3259 }3246 }
3260- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var153))3247+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var152))
3261 if templ_7745c5c3_Err != nil {3248 if templ_7745c5c3_Err != nil {
3262 return templ_7745c5c3_Err3249 return templ_7745c5c3_Err
3263 }3250 }
3264- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 302, "</h1><dl class=\"kv show-kv\"><dt>branch</dt><dd><a href=\"")3251+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 301, "</h1><dl class=\"kv show-kv\"><dt>branch</dt><dd><a href=\"")
3265 if templ_7745c5c3_Err != nil {3252 if templ_7745c5c3_Err != nil {
3266 return templ_7745c5c3_Err3253 return templ_7745c5c3_Err
3267 }3254 }
3268- var templ_7745c5c3_Var154 templ.SafeURL3255+ var templ_7745c5c3_Var153 templ.SafeURL
3269- templ_7745c5c3_Var154, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.SourceHref))3256+ templ_7745c5c3_Var153, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.SourceHref))
3270 if templ_7745c5c3_Err != nil {3257 if templ_7745c5c3_Err != nil {
3271- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 655, Col: 45}3258+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 652, Col: 45}
3272 }3259 }
3273- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var154))3260+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var153))
3274 if templ_7745c5c3_Err != nil {3261 if templ_7745c5c3_Err != nil {
3275 return templ_7745c5c3_Err3262 return templ_7745c5c3_Err
3276 }3263 }
3277- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 303, "\">")3264+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 302, "\">")
3278 if templ_7745c5c3_Err != nil {3265 if templ_7745c5c3_Err != nil {
3279 return templ_7745c5c3_Err3266 return templ_7745c5c3_Err
3280 }3267 }
3281- var templ_7745c5c3_Var155 string3268+ var templ_7745c5c3_Var154 string
3282- templ_7745c5c3_Var155, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)3269+ templ_7745c5c3_Var154, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
3283 if templ_7745c5c3_Err != nil {3270 if templ_7745c5c3_Err != nil {
3284- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 655, Col: 58}3271+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 652, Col: 58}
3285 }3272 }
3286- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var155))3273+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var154))
3287 if templ_7745c5c3_Err != nil {3274 if templ_7745c5c3_Err != nil {
3288 return templ_7745c5c3_Err3275 return templ_7745c5c3_Err
3289 }3276 }
3290- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 304, "</a></dd><dt>target</dt><dd><a href=\"")3277+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 303, "</a></dd><dt>target</dt><dd><a href=\"")
3291 if templ_7745c5c3_Err != nil {3278 if templ_7745c5c3_Err != nil {
3292 return templ_7745c5c3_Err3279 return templ_7745c5c3_Err
3293 }3280 }
3294- var templ_7745c5c3_Var156 templ.SafeURL3281+ var templ_7745c5c3_Var155 templ.SafeURL
3295- templ_7745c5c3_Var156, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.TargetHref))3282+ templ_7745c5c3_Var155, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.TargetHref))
3296 if templ_7745c5c3_Err != nil {3283 if templ_7745c5c3_Err != nil {
3297- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 657, Col: 45}3284+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 654, Col: 45}
3298 }3285 }
3299- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var156))3286+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var155))
3300 if templ_7745c5c3_Err != nil {3287 if templ_7745c5c3_Err != nil {
3301 return templ_7745c5c3_Err3288 return templ_7745c5c3_Err
3302 }3289 }
3303- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 305, "\">")3290+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 304, "\">")
3304 if templ_7745c5c3_Err != nil {3291 if templ_7745c5c3_Err != nil {
3305 return templ_7745c5c3_Err3292 return templ_7745c5c3_Err
3306 }3293 }
3307- var templ_7745c5c3_Var157 string3294+ var templ_7745c5c3_Var156 string
3308- templ_7745c5c3_Var157, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)3295+ templ_7745c5c3_Var156, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
3309 if templ_7745c5c3_Err != nil {3296 if templ_7745c5c3_Err != nil {
3310- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 657, Col: 58}3297+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 654, Col: 58}
3311 }3298 }
3312- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var157))3299+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var156))
3313 if templ_7745c5c3_Err != nil {3300 if templ_7745c5c3_Err != nil {
3314 return templ_7745c5c3_Err3301 return templ_7745c5c3_Err
3315 }3302 }
3316- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 306, "</a></dd><dt>ahead</dt><dd>")3303+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 305, "</a></dd><dt>ahead</dt><dd>")
3317 if templ_7745c5c3_Err != nil {3304 if templ_7745c5c3_Err != nil {
3318 return templ_7745c5c3_Err3305 return templ_7745c5c3_Err
3319 }3306 }
3320- var templ_7745c5c3_Var158 string3307+ var templ_7745c5c3_Var157 string
3321- templ_7745c5c3_Var158, templ_7745c5c3_Err = templ.JoinStringErrs(p.AheadText)3308+ templ_7745c5c3_Var157, templ_7745c5c3_Err = templ.JoinStringErrs(p.AheadText)
3322 if templ_7745c5c3_Err != nil {3309 if templ_7745c5c3_Err != nil {
3323- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 659, Col: 21}3310+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 656, Col: 21}
3324 }3311 }
3325- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var158))3312+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var157))
3326 if templ_7745c5c3_Err != nil {3313 if templ_7745c5c3_Err != nil {
3327 return templ_7745c5c3_Err3314 return templ_7745c5c3_Err
3328 }3315 }
3329- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 307, "</dd></dl></header>")3316+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 306, "</dd></dl></header>")
3330 if templ_7745c5c3_Err != nil {3317 if templ_7745c5c3_Err != nil {
3331 return templ_7745c5c3_Err3318 return templ_7745c5c3_Err
3332 }3319 }
3333 if p.Note != "" {3320 if p.Note != "" {
3334- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 308, "<p class=\"notice\">")3321+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 307, "<p class=\"notice\">")
3335 if templ_7745c5c3_Err != nil {3322 if templ_7745c5c3_Err != nil {
3336 return templ_7745c5c3_Err3323 return templ_7745c5c3_Err
3337 }3324 }
3338- var templ_7745c5c3_Var159 string3325+ var templ_7745c5c3_Var158 string
3339- templ_7745c5c3_Var159, templ_7745c5c3_Err = templ.JoinStringErrs(p.Note)3326+ templ_7745c5c3_Var158, templ_7745c5c3_Err = templ.JoinStringErrs(p.Note)
3340 if templ_7745c5c3_Err != nil {3327 if templ_7745c5c3_Err != nil {
3341- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 663, Col: 29}3328+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 660, Col: 29}
3342 }3329 }
3343- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var159))3330+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var158))
3344 if templ_7745c5c3_Err != nil {3331 if templ_7745c5c3_Err != nil {
3345 return templ_7745c5c3_Err3332 return templ_7745c5c3_Err
3346 }3333 }
3347- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 309, "</p>")3334+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 308, "</p>")
3348 if templ_7745c5c3_Err != nil {3335 if templ_7745c5c3_Err != nil {
3349 return templ_7745c5c3_Err3336 return templ_7745c5c3_Err
3350 }3337 }
3351 }3338 }
3352- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 310, " ")3339+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 309, " ")
3353 if templ_7745c5c3_Err != nil {3340 if templ_7745c5c3_Err != nil {
3354 return templ_7745c5c3_Err3341 return templ_7745c5c3_Err
3355 }3342 }
3356 if p.Existing != nil {3343 if p.Existing != nil {
3357- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 311, "<p class=\"notice\">an open merge request already covers these branches: <a href=\"")3344+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 310, "<p class=\"notice\">an open merge request already covers these branches: <a href=\"")
3358 if templ_7745c5c3_Err != nil {3345 if templ_7745c5c3_Err != nil {
3359 return templ_7745c5c3_Err3346 return templ_7745c5c3_Err
3360 }3347 }
3361- var templ_7745c5c3_Var160 templ.SafeURL3348+ var templ_7745c5c3_Var159 templ.SafeURL
3362- templ_7745c5c3_Var160, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Existing.Href))3349+ templ_7745c5c3_Var159, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Existing.Href))
3363 if templ_7745c5c3_Err != nil {3350 if templ_7745c5c3_Err != nil {
3364- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 666, Col: 114}3351+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 663, Col: 114}
3365 }3352 }
3366- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var160))3353+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var159))
3367 if templ_7745c5c3_Err != nil {3354 if templ_7745c5c3_Err != nil {
3368 return templ_7745c5c3_Err3355 return templ_7745c5c3_Err
3369 }3356 }
3370- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 312, "\">")3357+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 311, "\">")
3371 if templ_7745c5c3_Err != nil {3358 if templ_7745c5c3_Err != nil {
3372 return templ_7745c5c3_Err3359 return templ_7745c5c3_Err
3373 }3360 }
3374- var templ_7745c5c3_Var161 string3361+ var templ_7745c5c3_Var160 string
3375- templ_7745c5c3_Var161, templ_7745c5c3_Err = templ.JoinStringErrs(p.Existing.Label)3362+ templ_7745c5c3_Var160, templ_7745c5c3_Err = templ.JoinStringErrs(p.Existing.Label)
3376 if templ_7745c5c3_Err != nil {3363 if templ_7745c5c3_Err != nil {
3377- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 666, Col: 135}3364+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 663, Col: 135}
3378 }3365 }
3379- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var161))3366+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var160))
3380 if templ_7745c5c3_Err != nil {3367 if templ_7745c5c3_Err != nil {
3381 return templ_7745c5c3_Err3368 return templ_7745c5c3_Err
3382 }3369 }
3383- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 313, "</a></p>")3370+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 312, "</a></p>")
3384 if templ_7745c5c3_Err != nil {3371 if templ_7745c5c3_Err != nil {
3385 return templ_7745c5c3_Err3372 return templ_7745c5c3_Err
3386 }3373 }
3387 }3374 }
3388- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 314, " ")3375+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 313, " ")
3389 if templ_7745c5c3_Err != nil {3376 if templ_7745c5c3_Err != nil {
3390 return templ_7745c5c3_Err3377 return templ_7745c5c3_Err
3391 }3378 }
3392 if p.Create != nil {3379 if p.Create != nil {
3393- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 315, "<form class=\"cform create\" method=\"post\" action=\"")3380+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 314, "<form class=\"cform create\" method=\"post\" action=\"")
3394 if templ_7745c5c3_Err != nil {3381 if templ_7745c5c3_Err != nil {
3395 return templ_7745c5c3_Err3382 return templ_7745c5c3_Err
3396 }3383 }
3397- var templ_7745c5c3_Var162 templ.SafeURL3384+ var templ_7745c5c3_Var161 templ.SafeURL
3398- templ_7745c5c3_Var162, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Create.Action))3385+ templ_7745c5c3_Var161, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Create.Action))
3399 if templ_7745c5c3_Err != nil {3386 if templ_7745c5c3_Err != nil {
3400- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 669, Col: 83}3387+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 666, Col: 83}
3401 }3388 }
3402- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var162))3389+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var161))
3403 if templ_7745c5c3_Err != nil {3390 if templ_7745c5c3_Err != nil {
3404 return templ_7745c5c3_Err3391 return templ_7745c5c3_Err
3405 }3392 }
3406- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 316, "\"><input type=\"hidden\" name=\"source\" value=\"")3393+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 315, "\"><input type=\"hidden\" name=\"source\" value=\"")
3407 if templ_7745c5c3_Err != nil {3394 if templ_7745c5c3_Err != nil {
3408 return templ_7745c5c3_Err3395 return templ_7745c5c3_Err
3409 }3396 }
3410- var templ_7745c5c3_Var163 string3397+ var templ_7745c5c3_Var162 string
3411- templ_7745c5c3_Var163, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Source)3398+ templ_7745c5c3_Var162, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Source)
3412 if templ_7745c5c3_Err != nil {3399 if templ_7745c5c3_Err != nil {
3413- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 670, Col: 62}3400+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 667, Col: 62}
3414 }3401 }
3415- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var163)3402+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var162)
3416 if templ_7745c5c3_Err != nil {3403 if templ_7745c5c3_Err != nil {
3417 return templ_7745c5c3_Err3404 return templ_7745c5c3_Err
3418 }3405 }
3419- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 317, "\"> <input type=\"hidden\" name=\"target\" value=\"")3406+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 316, "\"> <input type=\"hidden\" name=\"target\" value=\"")
3420 if templ_7745c5c3_Err != nil {3407 if templ_7745c5c3_Err != nil {
3421 return templ_7745c5c3_Err3408 return templ_7745c5c3_Err
3422 }3409 }
3423- var templ_7745c5c3_Var164 string3410+ var templ_7745c5c3_Var163 string
3424- templ_7745c5c3_Var164, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Target)3411+ templ_7745c5c3_Var163, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Target)
3425 if templ_7745c5c3_Err != nil {3412 if templ_7745c5c3_Err != nil {
3426- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 671, Col: 62}3413+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 668, Col: 62}
3427 }3414 }
3428- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var164)3415+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var163)
3429 if templ_7745c5c3_Err != nil {3416 if templ_7745c5c3_Err != nil {
3430 return templ_7745c5c3_Err3417 return templ_7745c5c3_Err
3431 }3418 }
3432- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 318, "\"> <label for=\"mr-title\">title</label> <input id=\"mr-title\" name=\"title\" type=\"text\" maxlength=\"120\" required value=\"")3419+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 317, "\"> <label for=\"mr-title\">title</label> <input id=\"mr-title\" name=\"title\" type=\"text\" maxlength=\"120\" required value=\"")
3433 if templ_7745c5c3_Err != nil {3420 if templ_7745c5c3_Err != nil {
3434 return templ_7745c5c3_Err3421 return templ_7745c5c3_Err
3435 }3422 }
3436- var templ_7745c5c3_Var165 string3423+ var templ_7745c5c3_Var164 string
3437- templ_7745c5c3_Var165, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Title)3424+ templ_7745c5c3_Var164, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Title)
3438 if templ_7745c5c3_Err != nil {3425 if templ_7745c5c3_Err != nil {
3439- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 673, Col: 97}3426+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 670, Col: 97}
3440 }3427 }
3441- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var165)3428+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var164)
3442 if templ_7745c5c3_Err != nil {3429 if templ_7745c5c3_Err != nil {
3443 return templ_7745c5c3_Err3430 return templ_7745c5c3_Err
3444 }3431 }
3445- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 319, "\" 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>")3432+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 318, "\" 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>")
3446 if templ_7745c5c3_Err != nil {3433 if templ_7745c5c3_Err != nil {
3447 return templ_7745c5c3_Err3434 return templ_7745c5c3_Err
3448 }3435 }
3449 }3436 }
3450- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 320, " ")3437+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 319, " ")
3451 if templ_7745c5c3_Err != nil {3438 if templ_7745c5c3_Err != nil {
3452 return templ_7745c5c3_Err3439 return templ_7745c5c3_Err
3453 }3440 }
3454 if p.HasDiff {3441 if p.HasDiff {
3455- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 321, "<div class=\"diff-tools\" role=\"group\" aria-label=\"Diff view\"><span class=\"dim\">")3442+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 320, "<div class=\"diff-tools\" role=\"group\" aria-label=\"Diff view\"><span class=\"dim\">")
3456 if templ_7745c5c3_Err != nil {3443 if templ_7745c5c3_Err != nil {
3457 return templ_7745c5c3_Err3444 return templ_7745c5c3_Err
3458 }3445 }
3459- var templ_7745c5c3_Var166 string3446+ var templ_7745c5c3_Var165 string
3460- templ_7745c5c3_Var166, templ_7745c5c3_Err = templ.JoinStringErrs(plural(p.NFiles, "file", "files"))3447+ templ_7745c5c3_Var165, templ_7745c5c3_Err = templ.JoinStringErrs(plural(p.NFiles, "file", "files"))
3461 if templ_7745c5c3_Err != nil {3448 if templ_7745c5c3_Err != nil {
3462- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 683, Col: 57}3449+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 680, Col: 57}
3463 }3450 }
3464- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var166))3451+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var165))
3465 if templ_7745c5c3_Err != nil {3452 if templ_7745c5c3_Err != nil {
3466 return templ_7745c5c3_Err3453 return templ_7745c5c3_Err
3467 }3454 }
3468- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 322, " · <span class=\"plus\">+")3455+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 321, " · <span class=\"plus\">+")
3469 if templ_7745c5c3_Err != nil {3456 if templ_7745c5c3_Err != nil {
3470 return templ_7745c5c3_Err3457 return templ_7745c5c3_Err
3471 }3458 }
3472- var templ_7745c5c3_Var167 string3459+ var templ_7745c5c3_Var166 string
3473- templ_7745c5c3_Var167, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Adds))3460+ templ_7745c5c3_Var166, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Adds))
3474 if templ_7745c5c3_Err != nil {3461 if templ_7745c5c3_Err != nil {
3475- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 683, Col: 97}3462+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 680, Col: 97}
3476 }3463 }
3477- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var167))3464+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var166))
3478 if templ_7745c5c3_Err != nil {3465 if templ_7745c5c3_Err != nil {
3479 return templ_7745c5c3_Err3466 return templ_7745c5c3_Err
3480 }3467 }
3481- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 323, "</span> <span class=\"minus\">-")3468+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 322, "</span> <span class=\"minus\">-")
3482 if templ_7745c5c3_Err != nil {3469 if templ_7745c5c3_Err != nil {
3483 return templ_7745c5c3_Err3470 return templ_7745c5c3_Err
3484 }3471 }
3485- var templ_7745c5c3_Var168 string3472+ var templ_7745c5c3_Var167 string
3486- templ_7745c5c3_Var168, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Dels))3473+ templ_7745c5c3_Var167, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Dels))
3487 if templ_7745c5c3_Err != nil {3474 if templ_7745c5c3_Err != nil {
3488- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 683, Col: 142}3475+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 680, Col: 142}
3489 }3476 }
3490- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var168))3477+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var167))
3491 if templ_7745c5c3_Err != nil {3478 if templ_7745c5c3_Err != nil {
3492 return templ_7745c5c3_Err3479 return templ_7745c5c3_Err
3493 }3480 }
3494- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 324, "</span></span> <span class=\"grow\"></span>")3481+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 323, "</span></span> <span class=\"grow\"></span>")
3495 if templ_7745c5c3_Err != nil {3482 if templ_7745c5c3_Err != nil {
3496 return templ_7745c5c3_Err3483 return templ_7745c5c3_Err
3497 }3484 }
@@ -3499,64 +3486,64 @@ func Compare(l Layout, p ComparePage) templ.Component {
3499 if templ_7745c5c3_Err != nil {3486 if templ_7745c5c3_Err != nil {
3500 return templ_7745c5c3_Err3487 return templ_7745c5c3_Err
3501 }3488 }
3502- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 325, "</div>")3489+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 324, "</div>")
3503 if templ_7745c5c3_Err != nil {3490 if templ_7745c5c3_Err != nil {
3504 return templ_7745c5c3_Err3491 return templ_7745c5c3_Err
3505 }3492 }
3506 if p.Invisible {3493 if p.Invisible {
3507- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 326, "<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>")3494+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 325, "<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>")
3508 if templ_7745c5c3_Err != nil {3495 if templ_7745c5c3_Err != nil {
3509 return templ_7745c5c3_Err3496 return templ_7745c5c3_Err
3510 }3497 }
3511 }3498 }
3512- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 327, " <div id=\"diffs\"")3499+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 326, " <div id=\"diffs\"")
3513 if templ_7745c5c3_Err != nil {3500 if templ_7745c5c3_Err != nil {
3514 return templ_7745c5c3_Err3501 return templ_7745c5c3_Err
3515 }3502 }
3516 if p.Both {3503 if p.Both {
3517- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 328, " data-diff=\"")3504+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 327, " data-diff=\"")
3518 if templ_7745c5c3_Err != nil {3505 if templ_7745c5c3_Err != nil {
3519 return templ_7745c5c3_Err3506 return templ_7745c5c3_Err
3520 }3507 }
3521- var templ_7745c5c3_Var169 string3508+ var templ_7745c5c3_Var168 string
3522- templ_7745c5c3_Var169, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)3509+ templ_7745c5c3_Var168, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
3523 if templ_7745c5c3_Err != nil {3510 if templ_7745c5c3_Err != nil {
3524- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 696, Col: 23}3511+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 693, Col: 23}
3525 }3512 }
3526- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var169)3513+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var168)
3527 if templ_7745c5c3_Err != nil {3514 if templ_7745c5c3_Err != nil {
3528 return templ_7745c5c3_Err3515 return templ_7745c5c3_Err
3529 }3516 }
3530- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 329, "\"")3517+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 328, "\"")
3531 if templ_7745c5c3_Err != nil {3518 if templ_7745c5c3_Err != nil {
3532 return templ_7745c5c3_Err3519 return templ_7745c5c3_Err
3533 }3520 }
3534 } else {3521 } else {
3535- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 330, " data-view=\"")3522+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 329, " data-view=\"")
3536 if templ_7745c5c3_Err != nil {3523 if templ_7745c5c3_Err != nil {
3537 return templ_7745c5c3_Err3524 return templ_7745c5c3_Err
3538 }3525 }
3539- var templ_7745c5c3_Var170 string3526+ var templ_7745c5c3_Var169 string
3540- templ_7745c5c3_Var170, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)3527+ templ_7745c5c3_Var169, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
3541 if templ_7745c5c3_Err != nil {3528 if templ_7745c5c3_Err != nil {
3542- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 698, Col: 23}3529+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 695, Col: 23}
3543 }3530 }
3544- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var170)3531+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var169)
3545 if templ_7745c5c3_Err != nil {3532 if templ_7745c5c3_Err != nil {
3546 return templ_7745c5c3_Err3533 return templ_7745c5c3_Err
3547 }3534 }
3548- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 331, "\"")3535+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 330, "\"")
3549 if templ_7745c5c3_Err != nil {3536 if templ_7745c5c3_Err != nil {
3550 return templ_7745c5c3_Err3537 return templ_7745c5c3_Err
3551 }3538 }
3552 }3539 }
3553 if p.Both && !p.Pinned {3540 if p.Both && !p.Pinned {
3554- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 332, " hx-live=\"this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff\"")3541+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 331, " hx-live=\"this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff\"")
3555 if templ_7745c5c3_Err != nil {3542 if templ_7745c5c3_Err != nil {
3556 return templ_7745c5c3_Err3543 return templ_7745c5c3_Err
3557 }3544 }
3558 }3545 }
3559- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 333, ">")3546+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 332, ">")
3560 if templ_7745c5c3_Err != nil {3547 if templ_7745c5c3_Err != nil {
3561 return templ_7745c5c3_Err3548 return templ_7745c5c3_Err
3562 }3549 }
@@ -3566,14 +3553,14 @@ func Compare(l Layout, p ComparePage) templ.Component {
3566 return templ_7745c5c3_Err3553 return templ_7745c5c3_Err
3567 }3554 }
3568 }3555 }
3569- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 334, "</div>")3556+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 333, "</div>")
3570 if templ_7745c5c3_Err != nil {3557 if templ_7745c5c3_Err != nil {
3571 return templ_7745c5c3_Err3558 return templ_7745c5c3_Err
3572 }3559 }
3573 }3560 }
3574 return nil3561 return nil
3575 })3562 })
3576- templ_7745c5c3_Err = Shell(l, compareRail(p)).Render(templ.WithChildren(ctx, templ_7745c5c3_Var151), templ_7745c5c3_Buffer)3563+ templ_7745c5c3_Err = Shell(l, compareRail(p)).Render(templ.WithChildren(ctx, templ_7745c5c3_Var150), templ_7745c5c3_Buffer)
3577 if templ_7745c5c3_Err != nil {3564 if templ_7745c5c3_Err != nil {
3578 return templ_7745c5c3_Err3565 return templ_7745c5c3_Err
3579 }3566 }
@@ -3597,173 +3584,173 @@ func compareRail(p ComparePage) templ.Component {
3597 }()3584 }()
3598 }3585 }
3599 ctx = templ.InitializeContext(ctx)3586 ctx = templ.InitializeContext(ctx)
3600- templ_7745c5c3_Var171 := templ.GetChildren(ctx)3587+ templ_7745c5c3_Var170 := templ.GetChildren(ctx)
3601- if templ_7745c5c3_Var171 == nil {3588+ if templ_7745c5c3_Var170 == nil {
3602- templ_7745c5c3_Var171 = templ.NopComponent3589+ templ_7745c5c3_Var170 = templ.NopComponent
3603 }3590 }
3604 ctx = templ.ClearChildren(ctx)3591 ctx = templ.ClearChildren(ctx)
3605- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 335, "<section aria-labelledby=\"r-ahead\"><h2 id=\"r-ahead\">Commits <span class=\"count\">")3592+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 334, "<section aria-labelledby=\"r-ahead\"><h2 id=\"r-ahead\">Commits <span class=\"count\">")
3606 if templ_7745c5c3_Err != nil {3593 if templ_7745c5c3_Err != nil {
3607 return templ_7745c5c3_Err3594 return templ_7745c5c3_Err
3608 }3595 }
3609- var templ_7745c5c3_Var172 string3596+ var templ_7745c5c3_Var171 string
3610- templ_7745c5c3_Var172, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Ahead)))3597+ templ_7745c5c3_Var171, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Ahead)))
3611 if templ_7745c5c3_Err != nil {3598 if templ_7745c5c3_Err != nil {
3612- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 714, Col: 67}3599+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 711, Col: 67}
3613 }3600 }
3614- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var172))3601+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var171))
3615 if templ_7745c5c3_Err != nil {3602 if templ_7745c5c3_Err != nil {
3616 return templ_7745c5c3_Err3603 return templ_7745c5c3_Err
3617 }3604 }
3618- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 336, "</span></h2><ul class=\"pcommits\">")3605+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 335, "</span></h2><ul class=\"pcommits\">")
3619 if templ_7745c5c3_Err != nil {3606 if templ_7745c5c3_Err != nil {
3620 return templ_7745c5c3_Err3607 return templ_7745c5c3_Err
3621 }3608 }
3622 for _, c := range p.Ahead {3609 for _, c := range p.Ahead {
3623- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 337, "<li><a href=\"")3610+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 336, "<li><a href=\"")
3624 if templ_7745c5c3_Err != nil {3611 if templ_7745c5c3_Err != nil {
3625 return templ_7745c5c3_Err3612 return templ_7745c5c3_Err
3626 }3613 }
3627- var templ_7745c5c3_Var173 templ.SafeURL3614+ var templ_7745c5c3_Var172 templ.SafeURL
3628- templ_7745c5c3_Var173, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.CHref))3615+ templ_7745c5c3_Var172, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.CHref))
3629 if templ_7745c5c3_Err != nil {3616 if templ_7745c5c3_Err != nil {
3630- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 718, Col: 37}3617+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 715, Col: 37}
3631 }3618 }
3632- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var173))3619+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var172))
3633 if templ_7745c5c3_Err != nil {3620 if templ_7745c5c3_Err != nil {
3634 return templ_7745c5c3_Err3621 return templ_7745c5c3_Err
3635 }3622 }
3636- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 338, "\">")3623+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 337, "\">")
3637 if templ_7745c5c3_Err != nil {3624 if templ_7745c5c3_Err != nil {
3638 return templ_7745c5c3_Err3625 return templ_7745c5c3_Err
3639 }3626 }
3640- var templ_7745c5c3_Var174 string3627+ var templ_7745c5c3_Var173 string
3641- templ_7745c5c3_Var174, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)3628+ templ_7745c5c3_Var173, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)
3642 if templ_7745c5c3_Err != nil {3629 if templ_7745c5c3_Err != nil {
3643- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 718, Col: 49}3630+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 715, Col: 49}
3644 }3631 }
3645- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var174))3632+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var173))
3646 if templ_7745c5c3_Err != nil {3633 if templ_7745c5c3_Err != nil {
3647 return templ_7745c5c3_Err3634 return templ_7745c5c3_Err
3648 }3635 }
3649- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 339, "</a> <span class=\"s\">")3636+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 338, "</a> <span class=\"s\">")
3650 if templ_7745c5c3_Err != nil {3637 if templ_7745c5c3_Err != nil {
3651 return templ_7745c5c3_Err3638 return templ_7745c5c3_Err
3652 }3639 }
3653- var templ_7745c5c3_Var175 string3640+ var templ_7745c5c3_Var174 string
3654- templ_7745c5c3_Var175, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)3641+ templ_7745c5c3_Var174, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)
3655 if templ_7745c5c3_Err != nil {3642 if templ_7745c5c3_Err != nil {
3656- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 719, Col: 32}3643+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 716, Col: 32}
3657 }3644 }
3658- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var175))3645+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var174))
3659 if templ_7745c5c3_Err != nil {3646 if templ_7745c5c3_Err != nil {
3660 return templ_7745c5c3_Err3647 return templ_7745c5c3_Err
3661 }3648 }
3662- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 340, "</span> <span class=\"mute\">")3649+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 339, "</span> <span class=\"mute\">")
3663 if templ_7745c5c3_Err != nil {3650 if templ_7745c5c3_Err != nil {
3664 return templ_7745c5c3_Err3651 return templ_7745c5c3_Err
3665 }3652 }
3666- var templ_7745c5c3_Var176 string3653+ var templ_7745c5c3_Var175 string
3667- templ_7745c5c3_Var176, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)3654+ templ_7745c5c3_Var175, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)
3668 if templ_7745c5c3_Err != nil {3655 if templ_7745c5c3_Err != nil {
3669- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 721, Col: 16}3656+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 718, Col: 16}
3670 }3657 }
3671- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var176))3658+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var175))
3672 if templ_7745c5c3_Err != nil {3659 if templ_7745c5c3_Err != nil {
3673 return templ_7745c5c3_Err3660 return templ_7745c5c3_Err
3674 }3661 }
3675- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 341, " ")3662+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 340, " ")
3676 if templ_7745c5c3_Err != nil {3663 if templ_7745c5c3_Err != nil {
3677 return templ_7745c5c3_Err3664 return templ_7745c5c3_Err
3678 }3665 }
3679 if c.WhenAt != "" {3666 if c.WhenAt != "" {
3680- var templ_7745c5c3_Var177 string3667+ var templ_7745c5c3_Var176 string
3681- templ_7745c5c3_Var177, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")3668+ templ_7745c5c3_Var176, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")
3682 if templ_7745c5c3_Err != nil {3669 if templ_7745c5c3_Err != nil {
3683- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 723, Col: 15}3670+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 720, Col: 15}
3684 }3671 }
3685- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var177))3672+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var176))
3686 if templ_7745c5c3_Err != nil {3673 if templ_7745c5c3_Err != nil {
3687 return templ_7745c5c3_Err3674 return templ_7745c5c3_Err
3688 }3675 }
3689- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 342, "<time datetime=\"")3676+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 341, "<time datetime=\"")
3690 if templ_7745c5c3_Err != nil {3677 if templ_7745c5c3_Err != nil {
3691 return templ_7745c5c3_Err3678 return templ_7745c5c3_Err
3692 }3679 }
3693- var templ_7745c5c3_Var178 string3680+ var templ_7745c5c3_Var177 string
3694- templ_7745c5c3_Var178, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)3681+ templ_7745c5c3_Var177, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
3695 if templ_7745c5c3_Err != nil {3682 if templ_7745c5c3_Err != nil {
3696- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 723, Col: 42}3683+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 720, Col: 42}
3697 }3684 }
3698- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var178)3685+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var177)
3699 if templ_7745c5c3_Err != nil {3686 if templ_7745c5c3_Err != nil {
3700 return templ_7745c5c3_Err3687 return templ_7745c5c3_Err
3701 }3688 }
3702- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 343, "\">")3689+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 342, "\">")
3703 if templ_7745c5c3_Err != nil {3690 if templ_7745c5c3_Err != nil {
3704 return templ_7745c5c3_Err3691 return templ_7745c5c3_Err
3705 }3692 }
3706- var templ_7745c5c3_Var179 string3693+ var templ_7745c5c3_Var178 string
3707- templ_7745c5c3_Var179, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)3694+ templ_7745c5c3_Var178, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)
3708 if templ_7745c5c3_Err != nil {3695 if templ_7745c5c3_Err != nil {
3709- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 723, Col: 53}3696+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 720, Col: 53}
3710 }3697 }
3711- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var179))3698+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var178))
3712 if templ_7745c5c3_Err != nil {3699 if templ_7745c5c3_Err != nil {
3713 return templ_7745c5c3_Err3700 return templ_7745c5c3_Err
3714 }3701 }
3715- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 344, "</time>")3702+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 343, "</time>")
3716 if templ_7745c5c3_Err != nil {3703 if templ_7745c5c3_Err != nil {
3717 return templ_7745c5c3_Err3704 return templ_7745c5c3_Err
3718 }3705 }
3719 }3706 }
3720- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 345, "</span></li>")3707+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 344, "</span></li>")
3721 if templ_7745c5c3_Err != nil {3708 if templ_7745c5c3_Err != nil {
3722 return templ_7745c5c3_Err3709 return templ_7745c5c3_Err
3723 }3710 }
3724 }3711 }
3725- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 346, "</ul>")3712+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 345, "</ul>")
3726 if templ_7745c5c3_Err != nil {3713 if templ_7745c5c3_Err != nil {
3727 return templ_7745c5c3_Err3714 return templ_7745c5c3_Err
3728 }3715 }
3729 if len(p.Ahead) == 0 {3716 if len(p.Ahead) == 0 {
3730- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 347, "<p class=\"dim\">no commit ahead of ")3717+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 346, "<p class=\"dim\">no commit ahead of ")
3731 if templ_7745c5c3_Err != nil {3718 if templ_7745c5c3_Err != nil {
3732 return templ_7745c5c3_Err3719 return templ_7745c5c3_Err
3733 }3720 }
3734- var templ_7745c5c3_Var180 string3721+ var templ_7745c5c3_Var179 string
3735- templ_7745c5c3_Var180, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)3722+ templ_7745c5c3_Var179, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
3736 if templ_7745c5c3_Err != nil {3723 if templ_7745c5c3_Err != nil {
3737- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 730, Col: 47}3724+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 727, Col: 47}
3738 }3725 }
3739- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var180))3726+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var179))
3740 if templ_7745c5c3_Err != nil {3727 if templ_7745c5c3_Err != nil {
3741 return templ_7745c5c3_Err3728 return templ_7745c5c3_Err
3742 }3729 }
3743- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 348, ".</p>")3730+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 347, ".</p>")
3744 if templ_7745c5c3_Err != nil {3731 if templ_7745c5c3_Err != nil {
3745 return templ_7745c5c3_Err3732 return templ_7745c5c3_Err
3746 }3733 }
3747 }3734 }
3748- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 349, "</section>")3735+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 348, "</section>")
3749 if templ_7745c5c3_Err != nil {3736 if templ_7745c5c3_Err != nil {
3750 return templ_7745c5c3_Err3737 return templ_7745c5c3_Err
3751 }3738 }
3752 if p.HasDiff {3739 if p.HasDiff {
3753- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 350, "<section aria-labelledby=\"r-files\"><h2 id=\"r-files\">Files <span class=\"count\">")3740+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 349, "<section aria-labelledby=\"r-files\"><h2 id=\"r-files\">Files <span class=\"count\">")
3754 if templ_7745c5c3_Err != nil {3741 if templ_7745c5c3_Err != nil {
3755 return templ_7745c5c3_Err3742 return templ_7745c5c3_Err
3756 }3743 }
3757- var templ_7745c5c3_Var181 string3744+ var templ_7745c5c3_Var180 string
3758- templ_7745c5c3_Var181, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))3745+ templ_7745c5c3_Var180, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))
3759 if templ_7745c5c3_Err != nil {3746 if templ_7745c5c3_Err != nil {
3760- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 735, Col: 66}3747+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 732, Col: 66}
3761 }3748 }
3762- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var181))3749+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var180))
3763 if templ_7745c5c3_Err != nil {3750 if templ_7745c5c3_Err != nil {
3764 return templ_7745c5c3_Err3751 return templ_7745c5c3_Err
3765 }3752 }
3766- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 351, "</span></h2>")3753+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 350, "</span></h2>")
3767 if templ_7745c5c3_Err != nil {3754 if templ_7745c5c3_Err != nil {
3768 return templ_7745c5c3_Err3755 return templ_7745c5c3_Err
3769 }3756 }
@@ -3771,12 +3758,12 @@ func compareRail(p ComparePage) templ.Component {
3771 if templ_7745c5c3_Err != nil {3758 if templ_7745c5c3_Err != nil {
3772 return templ_7745c5c3_Err3759 return templ_7745c5c3_Err
3773 }3760 }
3774- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 352, "</section>")3761+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 351, "</section>")
3775 if templ_7745c5c3_Err != nil {3762 if templ_7745c5c3_Err != nil {
3776 return templ_7745c5c3_Err3763 return templ_7745c5c3_Err
3777 }3764 }
3778 }3765 }
3779- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 353, "<section aria-labelledby=\"r-cli\"><h2 id=\"r-cli\">From a terminal</h2>")3766+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 352, "<section aria-labelledby=\"r-cli\"><h2 id=\"r-cli\">From a terminal</h2>")
3780 if templ_7745c5c3_Err != nil {3767 if templ_7745c5c3_Err != nil {
3781 return templ_7745c5c3_Err3768 return templ_7745c5c3_Err
3782 }3769 }
@@ -3784,7 +3771,7 @@ func compareRail(p ComparePage) templ.Component {
3784 if templ_7745c5c3_Err != nil {3771 if templ_7745c5c3_Err != nil {
3785 return templ_7745c5c3_Err3772 return templ_7745c5c3_Err
3786 }3773 }
3787- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 354, "</section>")3774+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 353, "</section>")
3788 if templ_7745c5c3_Err != nil {3775 if templ_7745c5c3_Err != nil {
3789 return templ_7745c5c3_Err3776 return templ_7745c5c3_Err
3790 }3777 }
M internal/adapters/web/mr_test.go +5 -1
@@ -134,7 +134,11 @@ func TestMRPanelsAndMenus(t *testing.T) {
134134 p := MRPage{CommitCount: "500+", CommitsNote: "more commits", Modes: []string{"squash", "merge"}, ChecksBlock: true,
135135 ChecksSum: ChecksSummary{Total: 2, Label: "1/2", Title: "1/2 failed"}, Box: &MergeBox{Signed: true, Fingerprint: "fingerprint", HeadGone: true}}
136136 footer := renderToString(t, mrFooter(p))
137- assert.Contains(t, footer, `<footer class="mr-footer"><details id="mr-panels">`)
137+ assert.Contains(t, footer, `<footer class="mr-footer"><nav data-mr-tabs`)
138+ assert.NotContains(t, footer, `<details`)
139+ assert.NotContains(t, footer, `<summary`)
140+ assert.Contains(t, footer, `id="mr-commits" data-mr-panel hidden`)
141+ assert.Contains(t, footer, `id="mr-checks-panel" data-mr-panel hidden`)
138142 assert.Contains(t, footer, `data-mr-tabs`)
139143 assert.Contains(t, footer, `id="mr-commits"`)
140144 assert.Contains(t, footer, `id="mr-checks"`)
@@ -134,7 +134,11 @@ func TestMRPanelsAndMenus(t *testing.T) {
134 p := MRPage{CommitCount: "500+", CommitsNote: "more commits", Modes: []string{"squash", "merge"}, ChecksBlock: true,134 p := MRPage{CommitCount: "500+", CommitsNote: "more commits", Modes: []string{"squash", "merge"}, ChecksBlock: true,
135 ChecksSum: ChecksSummary{Total: 2, Label: "1/2", Title: "1/2 failed"}, Box: &MergeBox{Signed: true, Fingerprint: "fingerprint", HeadGone: true}}135 ChecksSum: ChecksSummary{Total: 2, Label: "1/2", Title: "1/2 failed"}, Box: &MergeBox{Signed: true, Fingerprint: "fingerprint", HeadGone: true}}
136 footer := renderToString(t, mrFooter(p))136 footer := renderToString(t, mrFooter(p))
137- assert.Contains(t, footer, `<footer class="mr-footer"><details id="mr-panels">`)137+ assert.Contains(t, footer, `<footer class="mr-footer"><nav data-mr-tabs`)
138+ assert.NotContains(t, footer, `<details`)
139+ assert.NotContains(t, footer, `<summary`)
140+ assert.Contains(t, footer, `id="mr-commits" data-mr-panel hidden`)
141+ assert.Contains(t, footer, `id="mr-checks-panel" data-mr-panel hidden`)
138 assert.Contains(t, footer, `data-mr-tabs`)142 assert.Contains(t, footer, `data-mr-tabs`)
139 assert.Contains(t, footer, `id="mr-commits"`)143 assert.Contains(t, footer, `id="mr-commits"`)
140 assert.Contains(t, footer, `id="mr-checks"`)144 assert.Contains(t, footer, `id="mr-checks"`)
M internal/adapters/web/static/css/60-mr.css +8 -3
@@ -10,17 +10,22 @@
1010
1111 .mr-footer {
1212 border-top: 1px solid var(--border); padding: var(--s3) var(--s5);
13+ /* a touch darker than the card body; the card's overflow clips the corners */
14+ background: var(--bg-canvas);
1315 font-size: var(--fs-s);
14- & summary { cursor: pointer; color: var(--ink-dim); }
1516 & nav { display: flex; gap: var(--s3); padding-block: var(--s3); }
16- & [role="tab"] { padding: var(--s1) var(--s2); border-radius: var(--r-s); }
17- & [aria-selected="true"] { background: var(--bg-raised); color: var(--ink-hi); }
17+ & [data-mr-tabs] a { padding: var(--s1) var(--s2); border-radius: var(--r-s); color: var(--ink-dim); cursor: pointer; }
18+ & [data-mr-tabs] a:hover { background: var(--bg-raised); color: var(--ink-hi); }
19+ & [data-mr-tabs] a[aria-expanded="true"] { background: var(--bg-strong); color: var(--ink-hi); }
1820 & [data-mr-panel] { overflow-x: auto; }
1921 & [hidden] { display: none; }
22+ /* Without scripts the panels are shown by the URL fragment alone. */
23+ html:not(.js) & [data-mr-panel][hidden]:is(:target, :has(:target)) { display: block; }
2024 & section h2 { font-size: var(--fs-s); color: var(--ink-dim); }
2125 & table { width: 100%; border-collapse: collapse; }
2226 & th, & td { text-align: left; padding: var(--s2); border-bottom: 1px solid var(--border); }
2327 & th { color: var(--ink-dim); font-weight: 500; }
28+ & tbody tr:last-child > :is(td, th) { border-bottom: 0; }
2429 }
2530 .merge-settings { font-size: var(--fs-s); color: var(--ink-dim); }
2631 .merge-settings h2 { font-size: var(--fs-s); }
@@ -10,17 +10,22 @@
10 10
11 .mr-footer {11 .mr-footer {
12 border-top: 1px solid var(--border); padding: var(--s3) var(--s5);12 border-top: 1px solid var(--border); padding: var(--s3) var(--s5);
13+ /* a touch darker than the card body; the card's overflow clips the corners */
14+ background: var(--bg-canvas);
13 font-size: var(--fs-s);15 font-size: var(--fs-s);
14- & summary { cursor: pointer; color: var(--ink-dim); }
15 & nav { display: flex; gap: var(--s3); padding-block: var(--s3); }16 & nav { display: flex; gap: var(--s3); padding-block: var(--s3); }
16- & [role="tab"] { padding: var(--s1) var(--s2); border-radius: var(--r-s); }17+ & [data-mr-tabs] a { padding: var(--s1) var(--s2); border-radius: var(--r-s); color: var(--ink-dim); cursor: pointer; }
17- & [aria-selected="true"] { background: var(--bg-raised); color: var(--ink-hi); }18+ & [data-mr-tabs] a:hover { background: var(--bg-raised); color: var(--ink-hi); }
19+ & [data-mr-tabs] a[aria-expanded="true"] { background: var(--bg-strong); color: var(--ink-hi); }
18 & [data-mr-panel] { overflow-x: auto; }20 & [data-mr-panel] { overflow-x: auto; }
19 & [hidden] { display: none; }21 & [hidden] { display: none; }
22+ /* Without scripts the panels are shown by the URL fragment alone. */
23+ html:not(.js) & [data-mr-panel][hidden]:is(:target, :has(:target)) { display: block; }
20 & section h2 { font-size: var(--fs-s); color: var(--ink-dim); }24 & section h2 { font-size: var(--fs-s); color: var(--ink-dim); }
21 & table { width: 100%; border-collapse: collapse; }25 & table { width: 100%; border-collapse: collapse; }
22 & th, & td { text-align: left; padding: var(--s2); border-bottom: 1px solid var(--border); }26 & th, & td { text-align: left; padding: var(--s2); border-bottom: 1px solid var(--border); }
23 & th { color: var(--ink-dim); font-weight: 500; }27 & th { color: var(--ink-dim); font-weight: 500; }
28+ & tbody tr:last-child > :is(td, th) { border-bottom: 0; }
24 }29 }
25 .merge-settings { font-size: var(--fs-s); color: var(--ink-dim); }30 .merge-settings { font-size: var(--fs-s); color: var(--ink-dim); }
26 .merge-settings h2 { font-size: var(--fs-s); }31 .merge-settings h2 { font-size: var(--fs-s); }
M internal/adapters/web/static/css/85-mobile.css +0 -2
@@ -49,7 +49,5 @@
4949 body:has(#diffs[data-mr]) :is(.cform .btn, .menu .btn, .mr-touch-range .btn, .c-act button) { min-height: 40px; height: auto; padding-block: var(--s2); }
5050 #diffs[data-mr] .cform { scroll-margin-block: calc(var(--hdr-h) + 12px); }
5151 .mr-footer [data-mr-tabs] a { display: inline-flex; align-items: center; min-height: 40px; }
52- /* No display change: the summary stays a list-item and keeps its marker. */
53- .mr-footer summary { min-height: 40px; line-height: 40px; }
5452 }
5553 }
@@ -49,7 +49,5 @@
49 body:has(#diffs[data-mr]) :is(.cform .btn, .menu .btn, .mr-touch-range .btn, .c-act button) { min-height: 40px; height: auto; padding-block: var(--s2); }49 body:has(#diffs[data-mr]) :is(.cform .btn, .menu .btn, .mr-touch-range .btn, .c-act button) { min-height: 40px; height: auto; padding-block: var(--s2); }
50 #diffs[data-mr] .cform { scroll-margin-block: calc(var(--hdr-h) + 12px); }50 #diffs[data-mr] .cform { scroll-margin-block: calc(var(--hdr-h) + 12px); }
51 .mr-footer [data-mr-tabs] a { display: inline-flex; align-items: center; min-height: 40px; }51 .mr-footer [data-mr-tabs] a { display: inline-flex; align-items: center; min-height: 40px; }
52- /* No display change: the summary stays a list-item and keeps its marker. */
53- .mr-footer summary { min-height: 40px; line-height: 40px; }
54 }52 }
55 }53 }
M internal/adapters/web/static/js/mr.js +26 -27
@@ -315,42 +315,48 @@ window.ermiteMR = (() => {
315315
316316 // Enhance the ordinary anchor navigation only when scripts are available.
317317 let disposePanels = () => {};
318- function panels() {
318+ // The tabs are disclosure buttons (aria-expanded + aria-controls), not a
319+ // tablist: a tablist always has a selected tab, and here every panel can be
320+ // folded. State: the index of the open panel, or -1 for none.
321+ function panels(initial = -1) {
319322 disposePanels();
320- const footer = $('#mr-panels'), nav = $('[data-mr-tabs]');
323+ const footer = $('.mr-footer'), nav = $('[data-mr-tabs]');
321324 if (!footer || !nav) return;
322325 const tabs = $$('a', nav), panels = $$('[data-mr-panel]', footer);
323- nav.setAttribute('role', 'tablist');
324- function select(index, focus = false, fromUser = false) {
326+ const ids = new Set(['#mr-commits', '#mr-checks', '#mr-checks-panel']);
327+ let current = -1;
328+ // show applies the state; fromUser also keeps the URL fragment in step.
329+ function show(index, fromUser = false) {
330+ current = index;
325331 tabs.forEach((tab, i) => {
326- tab.setAttribute('role', 'tab');
327332 tab.setAttribute('aria-controls', panels[i].id);
328- tab.setAttribute('aria-selected', String(i === index));
329- tab.tabIndex = i === index ? 0 : -1;
330- panels[i].setAttribute('role', 'tabpanel');
331- panels[i].tabIndex = 0;
333+ tab.setAttribute('aria-expanded', String(i === index));
332334 panels[i].hidden = i !== index;
333335 });
334- if (focus) tabs[index].focus();
335- if (fromUser && location.hash !== '#' + panels[index].id) history.replaceState(null, '', '#' + panels[index].id);
336+ if (!fromUser) return;
337+ if (index >= 0) {
338+ if (location.hash !== '#' + panels[index].id) history.replaceState(null, '', '#' + panels[index].id);
339+ } else if (ids.has(location.hash)) {
340+ history.replaceState(null, '', location.pathname + location.search);
341+ }
336342 }
343+ const toggle = (i) => show(i === current ? -1 : i, true);
337344 tabs.forEach((tab, i) => {
338- tab.addEventListener('click', (e) => { e.preventDefault(); select(i, false, true); });
345+ tab.addEventListener('click', (e) => { e.preventDefault(); toggle(i); });
339346 tab.addEventListener('keydown', (e) => {
340347 const next = core.tabIndex(e.key, i, tabs.length);
341348 if (next === null) return;
342- e.preventDefault(); select(next, true, true);
349+ e.preventDefault(); tabs[next].focus();
343350 });
344351 });
345352 function hash() {
346353 const h = location.hash;
347354 const index = h === '#mr-checks' || h === '#mr-checks-panel' ? 1 : h === '#mr-commits' ? 0 : -1;
348- if (index < 0) return;
349- footer.open = true; select(index);
355+ if (index >= 0) show(index);
350356 }
351- // A repeated click on the same hash must also reopen a folded footer.
357+ // The checks badge always opens Checks; it never folds it.
352358 const checksClick = (e) => {
353- if (e.target.closest?.('#mr-ck')) { footer.open = true; select(1); }
359+ if (e.target.closest?.('#mr-ck')) show(1);
354360 };
355361 document.addEventListener('click', checksClick);
356362 let observer;
@@ -369,7 +375,7 @@ window.ermiteMR = (() => {
369375 observer.observe(summary.parentElement, { childList: true });
370376 sync();
371377 }
372- select(0); hash();
378+ show(initial); hash();
373379 addEventListener('hashchange', hash);
374380 disposePanels = () => {
375381 document.removeEventListener?.('click', checksClick);
@@ -583,8 +589,7 @@ window.ermiteMR = (() => {
583589 const files = new Map($$('#diffs details.dfile').map((f) => [f.dataset.file, f.open]));
584590 const folded = $('.r-files')?.hasAttribute('data-folded');
585591 const railY = $('.rail')?.scrollTop, filesY = $('.r-files .files')?.scrollTop;
586- const footerOpen = $('#mr-panels')?.open;
587- const tab = $('[data-mr-tabs] [aria-selected="true"]')?.id;
592+ const openPanel = $$('[data-mr-tabs] a').findIndex((t) => t.getAttribute('aria-expanded') === 'true');
588593 const active = document.activeElement;
589594 const focus = active && { file: active.closest?.('.files a')?.getAttribute('title'), region: regions.find((sel) => $(sel)?.contains(active)), menu: active.closest?.('details.menu')?.id, id: active.id, tag: active.tagName, name: active.getAttribute('name'), href: active.getAttribute('href') };
590595 for (const f of $$('#diffs details.dfile', page)) if (files.has(f.dataset.file)) f.open = files.get(f.dataset.file);
@@ -600,13 +605,7 @@ window.ermiteMR = (() => {
600605 const oldSHA = $('.hdr .ref .sha'), newSHA = $('.hdr .ref .sha', page);
601606 if (oldSHA && newSHA) oldSHA.textContent = newSHA.textContent;
602607 page = null;
603- panels();
604- if (tab) {
605- const oldURL = location.href;
606- document.getElementById(tab)?.click();
607- if (location.href !== oldURL) history.replaceState(history.state, '', oldURL);
608- }
609- if ($('#mr-panels')) $('#mr-panels').open = footerOpen;
608+ panels(openPanel);
610609 foldFiles(!!folded);
611610 if ($('.rail')) $('.rail').scrollTop = railY;
612611 if ($('.r-files .files')) $('.r-files .files').scrollTop = filesY;
@@ -315,42 +315,48 @@ window.ermiteMR = (() => {
315 315
316 // Enhance the ordinary anchor navigation only when scripts are available.316 // Enhance the ordinary anchor navigation only when scripts are available.
317 let disposePanels = () => {};317 let disposePanels = () => {};
318- function panels() {318+ // The tabs are disclosure buttons (aria-expanded + aria-controls), not a
319+ // tablist: a tablist always has a selected tab, and here every panel can be
320+ // folded. State: the index of the open panel, or -1 for none.
321+ function panels(initial = -1) {
319 disposePanels();322 disposePanels();
320- const footer = $('#mr-panels'), nav = $('[data-mr-tabs]');323+ const footer = $('.mr-footer'), nav = $('[data-mr-tabs]');
321 if (!footer || !nav) return;324 if (!footer || !nav) return;
322 const tabs = $$('a', nav), panels = $$('[data-mr-panel]', footer);325 const tabs = $$('a', nav), panels = $$('[data-mr-panel]', footer);
323- nav.setAttribute('role', 'tablist');326+ const ids = new Set(['#mr-commits', '#mr-checks', '#mr-checks-panel']);
324- function select(index, focus = false, fromUser = false) {327+ let current = -1;
328+ // show applies the state; fromUser also keeps the URL fragment in step.
329+ function show(index, fromUser = false) {
330+ current = index;
325 tabs.forEach((tab, i) => {331 tabs.forEach((tab, i) => {
326- tab.setAttribute('role', 'tab');
327 tab.setAttribute('aria-controls', panels[i].id);332 tab.setAttribute('aria-controls', panels[i].id);
328- tab.setAttribute('aria-selected', String(i === index));333+ tab.setAttribute('aria-expanded', String(i === index));
329- tab.tabIndex = i === index ? 0 : -1;
330- panels[i].setAttribute('role', 'tabpanel');
331- panels[i].tabIndex = 0;
332 panels[i].hidden = i !== index;334 panels[i].hidden = i !== index;
333 });335 });
334- if (focus) tabs[index].focus();336+ if (!fromUser) return;
335- if (fromUser && location.hash !== '#' + panels[index].id) history.replaceState(null, '', '#' + panels[index].id);337+ if (index >= 0) {
338+ if (location.hash !== '#' + panels[index].id) history.replaceState(null, '', '#' + panels[index].id);
339+ } else if (ids.has(location.hash)) {
340+ history.replaceState(null, '', location.pathname + location.search);
341+ }
336 }342 }
343+ const toggle = (i) => show(i === current ? -1 : i, true);
337 tabs.forEach((tab, i) => {344 tabs.forEach((tab, i) => {
338- tab.addEventListener('click', (e) => { e.preventDefault(); select(i, false, true); });345+ tab.addEventListener('click', (e) => { e.preventDefault(); toggle(i); });
339 tab.addEventListener('keydown', (e) => {346 tab.addEventListener('keydown', (e) => {
340 const next = core.tabIndex(e.key, i, tabs.length);347 const next = core.tabIndex(e.key, i, tabs.length);
341 if (next === null) return;348 if (next === null) return;
342- e.preventDefault(); select(next, true, true);349+ e.preventDefault(); tabs[next].focus();
343 });350 });
344 });351 });
345 function hash() {352 function hash() {
346 const h = location.hash;353 const h = location.hash;
347 const index = h === '#mr-checks' || h === '#mr-checks-panel' ? 1 : h === '#mr-commits' ? 0 : -1;354 const index = h === '#mr-checks' || h === '#mr-checks-panel' ? 1 : h === '#mr-commits' ? 0 : -1;
348- if (index < 0) return;355+ if (index >= 0) show(index);
349- footer.open = true; select(index);
350 }356 }
351- // A repeated click on the same hash must also reopen a folded footer.357+ // The checks badge always opens Checks; it never folds it.
352 const checksClick = (e) => {358 const checksClick = (e) => {
353- if (e.target.closest?.('#mr-ck')) { footer.open = true; select(1); }359+ if (e.target.closest?.('#mr-ck')) show(1);
354 };360 };
355 document.addEventListener('click', checksClick);361 document.addEventListener('click', checksClick);
356 let observer;362 let observer;
@@ -369,7 +375,7 @@ window.ermiteMR = (() => {
369 observer.observe(summary.parentElement, { childList: true });375 observer.observe(summary.parentElement, { childList: true });
370 sync();376 sync();
371 }377 }
372- select(0); hash();378+ show(initial); hash();
373 addEventListener('hashchange', hash);379 addEventListener('hashchange', hash);
374 disposePanels = () => {380 disposePanels = () => {
375 document.removeEventListener?.('click', checksClick);381 document.removeEventListener?.('click', checksClick);
@@ -583,8 +589,7 @@ window.ermiteMR = (() => {
583 const files = new Map($$('#diffs details.dfile').map((f) => [f.dataset.file, f.open]));589 const files = new Map($$('#diffs details.dfile').map((f) => [f.dataset.file, f.open]));
584 const folded = $('.r-files')?.hasAttribute('data-folded');590 const folded = $('.r-files')?.hasAttribute('data-folded');
585 const railY = $('.rail')?.scrollTop, filesY = $('.r-files .files')?.scrollTop;591 const railY = $('.rail')?.scrollTop, filesY = $('.r-files .files')?.scrollTop;
586- const footerOpen = $('#mr-panels')?.open;592+ const openPanel = $$('[data-mr-tabs] a').findIndex((t) => t.getAttribute('aria-expanded') === 'true');
587- const tab = $('[data-mr-tabs] [aria-selected="true"]')?.id;
588 const active = document.activeElement;593 const active = document.activeElement;
589 const focus = active && { file: active.closest?.('.files a')?.getAttribute('title'), region: regions.find((sel) => $(sel)?.contains(active)), menu: active.closest?.('details.menu')?.id, id: active.id, tag: active.tagName, name: active.getAttribute('name'), href: active.getAttribute('href') };594 const focus = active && { file: active.closest?.('.files a')?.getAttribute('title'), region: regions.find((sel) => $(sel)?.contains(active)), menu: active.closest?.('details.menu')?.id, id: active.id, tag: active.tagName, name: active.getAttribute('name'), href: active.getAttribute('href') };
590 for (const f of $$('#diffs details.dfile', page)) if (files.has(f.dataset.file)) f.open = files.get(f.dataset.file);595 for (const f of $$('#diffs details.dfile', page)) if (files.has(f.dataset.file)) f.open = files.get(f.dataset.file);
@@ -600,13 +605,7 @@ window.ermiteMR = (() => {
600 const oldSHA = $('.hdr .ref .sha'), newSHA = $('.hdr .ref .sha', page);605 const oldSHA = $('.hdr .ref .sha'), newSHA = $('.hdr .ref .sha', page);
601 if (oldSHA && newSHA) oldSHA.textContent = newSHA.textContent;606 if (oldSHA && newSHA) oldSHA.textContent = newSHA.textContent;
602 page = null;607 page = null;
603- panels();608+ panels(openPanel);
604- if (tab) {
605- const oldURL = location.href;
606- document.getElementById(tab)?.click();
607- if (location.href !== oldURL) history.replaceState(history.state, '', oldURL);
608- }
609- if ($('#mr-panels')) $('#mr-panels').open = footerOpen;
610 foldFiles(!!folded);609 foldFiles(!!folded);
611 if ($('.rail')) $('.rail').scrollTop = railY;610 if ($('.rail')) $('.rail').scrollTop = railY;
612 if ($('.r-files .files')) $('.r-files .files').scrollTop = filesY;611 if ($('.r-files .files')) $('.r-files .files').scrollTop = filesY;

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 44

↑↓ moveenter openesc close